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]>

Reply via email to