https://gcc.gnu.org/bugzilla/show_bug.cgi?id=120941
--- Comment #23 from Filip Kastl <pheeck at gcc dot gnu.org> --- ---- testcase.c ---- enum { ST, SB, ET, EB, WT, WB } LBM_initializeGrid() { double *grid; grid[ST] = grid[SB] = grid[ET] = grid[EB] = grid[WT] = grid[WB] = 1.0 / 36.0; } ---- ---- Compile with -Ofast -march=znver2 -c -fdump-rtl-all. In the dump, you should find: ---------------- Replace: (insn 5 2 7 2 (set (reg:V2DF 101) (vec_duplicate:V2DF (mem/u/c:DF (symbol_ref/u:DI ("*.LC1") [flags 0x2]) [0 S8 A64]))) "testcase.c":5:16 7168 {vec_dupv2df} (expr_list:REG_EQUAL (const_vector:V2DF [ (const_double:DF 2.7777777777777776235801354687282582744956016540527344e-2 [0x0.e38e38e38e38ep-5]) repeated x2 ]) (nil))) with: (insn 5 2 7 2 (set (reg:V2DF 101) (subreg:V2DF (reg:V4DF 104) 0)) "testcase.c":5:16 2429 {movv2df_internal} (expr_list:REG_EQUAL (const_vector:V2DF [ (const_double:DF 2.7777777777777776235801354687282582744956016540527344e-2 [0x0.e38e38e38e38ep-5]) repeated x2 ]) (nil))) deferring rescan insn with uid = 5. Replace: (insn 8 7 10 2 (set (reg:V4DF 103) (vec_duplicate:V4DF (mem/u/c:DF (symbol_ref/u:DI ("*.LC1") [flags 0x2]) [0 S8 A64]))) "testcase.c":4:12 9260 {vec_dupv4df} (expr_list:REG_EQUAL (const_vector:V4DF [ (const_double:DF 2.7777777777777776235801354687282582744956016540527344e-2 [0x0.e38e38e38e38ep-5]) repeated x4 ]) (nil))) with: (insn 8 7 10 2 (set (reg:V4DF 103) (reg:V4DF 104)) "testcase.c":4:12 2428 {movv4df_internal} (expr_list:REG_EQUAL (const_vector:V4DF [ (const_double:DF 2.7777777777777776235801354687282582744956016540527344e-2 [0x0.e38e38e38e38ep-5]) repeated x4 ]) (nil))) ------------------ Works even on the current master (r16-2091-g20407a41e84044). I got this from machine reducing the source files using cvise.