https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108599
--- Comment #5 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
cse2 still has correct:
(insn 28 27 29 2 (set (reg:V4DI 86)
(mem/u/c:V4DI (symbol_ref/u:DI ("*.LC2") [flags 0x2]) [0 S32 A256]))
"pr108599.C":6:49 1811 {movv4di_internal}
(expr_list:REG_EQUAL (const_vector:V4DI [
(const_int 16 [0x10]) repeated x2
(const_int 0 [0]) repeated x2
])
(nil)))
(insn 29 28 30 2 (set (mem/c:V4DI (plus:DI (reg/f:DI 19 frame)
(const_int -32 [0xffffffffffffffe0])) [0 MEM <vector(4) long
unsigned int> [(void *)&D.3338]+0 S32 A256])
(reg:V4DI 86)) "pr108599.C":6:49 1811 {movv4di_internal}
(expr_list:REG_DEAD (reg:V4DI 86)
(nil)))
...
(insn 35 33 36 2 (set (reg:OI 88 [ D.3338 ])
(mem/c:OI (plus:DI (reg/f:DI 19 frame)
(const_int -32 [0xffffffffffffffe0])) [2 D.3338+0 S32 A256]))
"pr108599.C":20:7 discrim 3 80 {*movoi_internal_avx}
(nil))
(insn 36 35 37 2 (set (mem:OI (reg/f:DI 7 sp) [0 S32 A64])
(reg:OI 88 [ D.3338 ])) "pr108599.C":20:7 discrim 3 80
{*movoi_internal_avx}
(expr_list:REG_DEAD (reg:OI 88 [ D.3338 ])
(nil)))
But dse1 turns it into incorrect:
(insn 28 27 53 2 (set (reg:V4DI 86)
(mem/u/c:V4DI (symbol_ref/u:DI ("*.LC2") [flags 0x2]) [0 S32 A256]))
"pr108599.C":6:49 1811 {movv4di_internal}
(expr_list:REG_EQUAL (const_vector:V4DI [
(const_int 16 [0x10]) repeated x2
(const_int 0 [0]) repeated x2
])
(nil)))
(insn 53 28 52 2 (set (reg:DI 94)
(const_int 16 [0x10])) "pr108599.C":6:49 82 {*movdi_internal}
(nil))
(insn 52 53 54 2 (set (reg:V4DI 93)
(vec_duplicate:V4DI (reg:DI 94))) "pr108599.C":6:49 8004 {vec_dupv4di}
(expr_list:REG_DEAD (reg:DI 94)
(nil)))
(insn 54 52 30 2 (set (reg:OI 92)
(subreg:OI (reg:V4DI 93) 0)) "pr108599.C":6:49 80 {*movoi_internal_avx}
(expr_list:REG_DEAD (reg:V4DI 93)
(expr_list:REG_EQUAL (const_wide_int 0x100000000000000010)
(nil))))
...
(insn 35 33 36 2 (set (reg:OI 88 [ D.3338 ])
(reg:OI 92)) "pr108599.C":20:7 discrim 3 80 {*movoi_internal_avx}
(expr_list:REG_DEAD (reg:OI 92)
(nil)))