When I compile this code which includes call to crealf,<br><br>$ cat foo1.c<br>#include <complex.h><br><br>float foo1(complex float z) { return crealf(z); }<br><br>clang emits a call to crealf,<br><br>$ clang  foo1.c -S -o - -O3<br>
foo1:                                   # @foo1<br>    .cfi_startproc<br># BB#0:                                 # %entry<br>    jmp    crealf                  # TAILCALL<br><br>while gcc does it in two move instructions:<br>
<br>$ gcc foo1.c -S -o -O3<br>foo1:<br>.LFB0:<br>        .cfi_startproc<br>        movq    %xmm0, -8(%rsp)<br>        movss   -8(%rsp), %xmm0<br><br>Is this an optimization which is missing in llvm?<br>Or is it making a deliberate decision not to expand the call to move instructions?<br>
<br>