Skip to content

[X86][GlobalIsel] In X87, no-sse2, returning floating point halts for SDAG, GISEL behavior differs. #146476

Open
@mahesh-attarde

Description

@mahesh-attarde

https://godbolt.org/z/9Ejz61Goh

For code with mattr=+87x,-sse2,-sse1

define float @test_float_abs(ptr %argptr)   {
     %arg = load  float, float* %argptr
     %abs = tail call float @llvm.fabs.f32(float %arg)
     ret float %abs
 }

SDAG

error: <unknown>:0:0: in function test_float_abs float (ptr): SSE register return with SSE disabled

Compiler returned: 1

GISEL

test_float_abs:                         # @test_float_abs
        mov     eax, 2147483647
        and     eax, dword ptr [rdi]
        movd    xmm0, eax
        ret

GISEL lowerreturn consults RETCC and adds xmm0 (Calling Convention) where as DAG does not do that.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions