https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90510
Bug ID: 90510 Summary: [10 Regression] Unnecessary permutation Product: gcc Version: 9.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: tree-optimization Assignee: unassigned at gcc dot gnu.org Reporter: hjl.tools at gmail dot com CC: rguenther at suse dot de Target Milestone: --- On x86-64, r271153 caused: [hjl@gnu-cfl-1 pr54855]$ cat 5.i typedef double __v2df __attribute__ ((__vector_size__ (16))); __v2df _mm_add_sd (__v2df x, __v2df y) { __v2df z = { (x[0] + y[0]), x[1] }; return z; } [hjl@gnu-cfl-1 pr54855]$ /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 5.i [hjl@gnu-cfl-1 pr54855]$ cat 5.s .file "5.i" .text .p2align 4 .globl _mm_add_sd .type _mm_add_sd, @function _mm_add_sd: .LFB0: .cfi_startproc movapd %xmm0, %xmm2 addsd %xmm1, %xmm2 unpcklpd %xmm2, %xmm2 <<<< This isn't needed. movsd %xmm2, %xmm0 ret .cfi_endproc .LFE0: .size _mm_add_sd, .-_mm_add_sd .ident "GCC: (GNU) 10.0.0 20190514 (experimental)" .section .note.GNU-stack,"",@progbits [hjl@gnu-cfl-1 pr54855]$ instead of _mm_add_sd: .LFB0: .cfi_startproc movapd %xmm0, %xmm2 addsd %xmm1, %xmm2 movsd %xmm2, %xmm0 ret .cfi_endproc