[llvm-dev] SSE return w/ elf64 ABI

Reid Kleckner via llvm-dev llvm-dev at lists.llvm.org
Wed Aug 26 15:48:25 PDT 2015


Looks like an attribute mixup in Clang. I can convince LLVM to generate
soft float code if I hack up the attributes with sed like so:

$ echo 'float f(float a, float b) { return a + b; }' | clang -x c++ -
--target=x86_64-linux -mno-sse -msoft-float -emit-llvm -S -o -  | sed -e
's/use-soft-float"="false"/use-soft-float"="true"/' | sed -e
's/noimplicitflo at//' | llc
...
        subq    $16, %rsp
        movl    %edi, -4(%rbp)
        movl    %esi, -8(%rbp)
        movl    -4(%rbp), %edi
        callq   __addsf3
        addq    $16, %rsp
        popq    %rbp
        retq

On Sat, Aug 22, 2015 at 4:43 PM, Tyler Hardin via llvm-dev <
llvm-dev at lists.llvm.org> wrote:

> Hi,
>
> LLVM made a change a few months ago and starting erroring out when a float
> is returned in x64 and SSE is disabled. This makes sense, really, since
> it's specified by the ABI that the return value must be put in a register
> you were told to disable, but it's breaking soft floats in Rust on x64. It
> seems there are two options: LLVM could break the ABI spec and have working
> soft floats on 64bit or Rust could offer a configuration option to remove
> float support from its "libcore" (the freestanding stdlib).
>
> What do you guys think about fixing it on your end?
>
> Relevant links:
> Clang error w/ same message: https://llvm.org/bugs/show_bug.cgi?id=23203
> Report of rust bug: https://github.com/rust-lang/rust/issues/26449
> Discussion on why Rust doesn't want to fix (a refused patch to libcore):
> https://github.com/rust-lang/rust/pull/26749
>
> The error is coming from one of these files:
> lib/Target/X86/X86FastISel.cpp:3166:      report_fatal_error("SSE register
> return with SSE disabled");
> lib/Target/X86/X86ISelLowering.cpp:2107:      report_fatal_error("SSE
> register return with SSE disabled");
> lib/Target/X86/X86ISelLowering.cpp:2261:      report_fatal_error("SSE
> register return with SSE disabled");
> test/CodeGen/X86/nosse-error2.ll:4:; NOSSE: {{SSE register return with SSE
> disabled}}
> test/CodeGen/X86/nosse-error1.ll:4:; NOSSE: {{SSE register return with SSE
> disabled}}
>
> Thanks for your time,
> Tyler Hardin
>
> _______________________________________________
> LLVM Developers mailing list
> llvm-dev at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20150826/d6585435/attachment.html>


More information about the llvm-dev mailing list