https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87537
Bug ID: 87537 Summary: Redundant vmovaps Product: gcc Version: 9.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: target Assignee: unassigned at gcc dot gnu.org Reporter: hjl.tools at gmail dot com Target Milestone: --- Target: i386,x86-64 [hjl@gnu-skx-1 gcc]$ cat /export/gnu/import/git/sources/gcc/gcc/testsuite/gcc.target/i386/avx2-vbroadcastss_ps256-1.c /* { dg-do compile } */ /* { dg-options "-mavx2 -O2" } */ /* { dg-final { scan-assembler "vbroadcastss\[ \\t\]+\[^\n\]*%xmm\[0-9\]" } } */ #include <immintrin.h> __m128 x; __m256 y; void extern avx2_test (void) { y = _mm256_broadcastss_ps (x); } [hjl@gnu-skx-1 gcc]$ ./xgcc -B./ -S /export/gnu/import/git/sources/gcc/gcc/testsuite/gcc.target/i386/avx2-vbroadcastss_ps256-1.c -mavx2 -O2 cat[hjl@gnu-skx-1 gcc]$ cat avx2-vbroadcastss_ps256-1.s .file "avx2-vbroadcastss_ps256-1.c" .text .p2align 4 .globl avx2_test .type avx2_test, @function avx2_test: .LFB5178: .cfi_startproc vmovaps x(%rip), %xmm1 vbroadcastss %xmm1, %ymm0 vmovaps %ymm0, y(%rip) vzeroupper ret .cfi_endproc .LFE5178: .size avx2_test, .-avx2_test .comm y,32,32 .comm x,16,16 .ident "GCC: (GNU) 9.0.0 20180901 (experimental)" .section .note.GNU-stack,"",@progbits [hjl@gnu-skx-1 gcc]$ We should generate [hjl@gnu-cfl-1 gcc]$ cat avx2-vbroadcastss_ps256-1.s .file "avx2-vbroadcastss_ps256-1.c" .text .p2align 4 .globl avx2_test .type avx2_test, @function avx2_test: .LFB5178: .cfi_startproc vbroadcastss x(%rip), %ymm0 vmovaps %ymm0, y(%rip) vzeroupper ret .cfi_endproc .LFE5178: .size avx2_test, .-avx2_test .comm y,32,32 .comm x,16,16 .ident "GCC: (GNU) 9.0.0 20181005 (experimental)" .section .note.GNU-stack,"",@progbits [hjl@gnu-cfl-1 gcc]$