https://gcc.gnu.org/bugzilla/show_bug.cgi?id=125239
--- Comment #3 from GCC Commits <cvs-commit at gcc dot gnu.org> --- The master branch has been updated by H.J. Lu <[email protected]>: https://gcc.gnu.org/g:7d84a357cfaa3d9ff2cc600a3c145780d37b6aed commit r17-420-g7d84a357cfaa3d9ff2cc600a3c145780d37b6aed Author: H.J. Lu <[email protected]> Date: Sat May 9 05:58:09 2026 +0800 x86_cse: Check CONST0_RTX and CONSTM1_RTX For CONST_VECTOR source, check CONST0_RTX and CONSTM1_RTX with X86_CSE_CONSTM1_VECTOR when placing (insn 32 2 7 2 (set (reg:V2DI 114) (const_vector:V2DI [ (const_int 0 [0]) repeated x2 ])) -1 (nil)) after (note 2 3 32 2 NOTE_INSN_FUNCTION_BEG) for X86_CSE_VEC_DUP, not X86_CSE_CONST0_VECTOR or X86_CSE_CONSTM1_VECTOR, after replacing redundant vector loads: (insn 31 15 16 2 (set (reg/v/f:DI 99 [ d ]) (const_int 0 [0])) "x.c":5:16 -1 (nil)) ... (insn 18 17 19 2 (set (reg:V2DI 111 [ _22 ]) (vec_duplicate:V2DI (reg/v/f:DI 99 [ d ]))) "x.c":5:16 9345 {*vec_dupv2di} (nil)) ... (insn 29 12 15 2 (set (reg/v/f:DI 98 [ c ]) (const_int 0 [0])) "x.c":5:16 -1 (nil)) ... (insn 20 19 21 2 (set (reg:V2DI 112 [ _20 ]) (vec_duplicate:V2DI (reg/v/f:DI 98 [ c ]))) "x.c":5:16 9345 {*vec_dupv2di} (nil)) with (insn 18 17 19 2 (set (reg:V2DI 111 [ _22 ]) (reg:V2DI 114)) "x.c":5:16 2454 {movv2di_internal} (nil)) and (insn 20 19 21 2 (set (reg:V2DI 112 [ _20 ]) (reg:V2DI 114)) "x.c":5:16 2454 {movv2di_internal} (nil)) Adjust gcc.target/i386/pr124407-1.c for the expected x86_cse dump: (insn 35 8 9 2 (set (reg:V16QI 125) (const_vector:V16QI [ (const_int 0 [0]) repeated x16 ])) -1 (nil)) instead of (insn 36 8 35 2 (set (reg:SF 126) (const_double:SF 0.0 [0x0.0p+0])) -1 (nil)) (insn 35 36 9 2 (set (reg:V4SF 125) (vec_duplicate:V4SF (reg:SF 126))) -1 (nil)) gcc/ PR target/125239 * config/i386/i386-features.cc (ix86_place_single_vector_set): For CONST_VECTOR source, check CONST0_RTX with X86_CSE_CONST0_VECTOR and CONSTM1_RTX with X86_CSE_CONSTM1_VECTOR. (ix86_broadcast_inner): Set x86_cse kind to X86_CSE_CONST0_VECTOR for CONST0_RTX and X86_CSE_CONSTM1_VECTOR for CONSTM1_RTX. gcc/testsuite/ PR target/125239 * gcc.target/i386/pr124407-1.c: Adjusted. * gcc.target/i386/pr125239.c: New test. Signed-off-by: H.J. Lu <[email protected]>
