https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88778
H.J. Lu <hjl.tools at gmail dot com> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |NEW Last reconfirmed| |2019-01-11 Ever confirmed|0 |1 --- Comment #3 from H.J. Lu <hjl.tools at gmail dot com> --- More examples: [hjl@gnu-cfl-1 pr88778]$ cat z.i _Complex float foo (_Complex float x) { return x; } [hjl@gnu-cfl-1 pr88778]$ make z.s /export/build/gnu/tools-build/gcc-debug/build-x86_64-linux/gcc/xgcc -B/export/build/gnu/tools-build/gcc-debug/build-x86_64-linux/gcc/ -O2 -S z.i [hjl@gnu-cfl-1 pr88778]$ cat z.s .file "z.i" .text .p2align 4 .globl foo .type foo, @function foo: .LFB0: .cfi_startproc movq %xmm0, -8(%rsp) movss -8(%rsp), %xmm0 movss %xmm0, -16(%rsp) movss -4(%rsp), %xmm0 movss %xmm0, -12(%rsp) movq -16(%rsp), %xmm0 ret .cfi_endproc .LFE0: .size foo, .-foo .ident "GCC: (GNU) 9.0.0 20190110 (experimental)" .section .note.GNU-stack,"",@progbits [hjl@gnu-cfl-1 pr88778]$ cat x.i typedef float __v4sf __attribute__ ((__vector_size__ (16))); typedef float __m128 __attribute__ ((__vector_size__ (16), __may_alias__)); __m128 foo (_Complex float x) { return __extension__ (__m128)(__v4sf) { __real x, __imag x, 0.0, 0.0f }; } [hjl@gnu-cfl-1 pr88778]$ make x.s /export/build/gnu/tools-build/gcc-debug/build-x86_64-linux/gcc/xgcc -B/export/build/gnu/tools-build/gcc-debug/build-x86_64-linux/gcc/ -O2 -S x.i [hjl@gnu-cfl-1 pr88778]$ cat x.s .file "x.i" .text .p2align 4 .globl foo .type foo, @function foo: .LFB0: .cfi_startproc movq %xmm0, -16(%rsp) movss -12(%rsp), %xmm0 movss -16(%rsp), %xmm1 unpcklps %xmm0, %xmm1 movq %xmm1, %xmm0 ret .cfi_endproc .LFE0: .size foo, .-foo .ident "GCC: (GNU) 9.0.0 20190110 (experimental)" .section .note.GNU-stack,"",@progbits [hjl@gnu-cfl-1 pr88778]$