https://gcc.gnu.org/bugzilla/show_bug.cgi?id=127352

--- Comment #4 from GCC Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Jakub Jelinek <[email protected]>:

https://gcc.gnu.org/g:920fbabbc3b30c2677b2445c55b29c8547abf01c

commit r17-4252-g920fbabbc3b30c2677b2445c55b29c8547abf01c
Author: Jakub Jelinek <[email protected]>
Date:   Tue Sep 15 12:02:18 2026 +0200

    i386: Fix up split_double_mode [PR127352]

    The following testcase ICEs, because we try to split during split2 pass
    (insn 313 311 314 36 (parallel [
                (set (reg:TI 36 r8 [orig:118 b_lsm.27 ] [118])
                    (and:TI (subreg:TI (reg:SI 36 r8 [orig:107 f ] [107]) 0)
                        (const_int 15 [0xf])))
                (clobber (reg:CC 17 flags))
            ]) 734 {*andti3_doubleword}
         (nil))
    where the paradoxical subreg is quite reasonable, const_int 15 doesn't have
    any non-zero bits in the high half, so what exact value we get in the other
    operand in the high 64 bits is irrelevant.

    But split_double_mode in that case just calls gen_reg_rtx (half_mode),
    which ICEs.
    The high bits of a paradoxical SUBREG can be anything, so this patch after
    RA chooses one particular value for that, 0 (as the cheapest one and
something
    that likely matches the predicates/constraints of insns using it).

    2026-09-15  Jakub Jelinek  <[email protected]>

            PR target/127352
            * config/i386/i386-expand.cc (split_double_mode): For high halves
of
            paradoxical subregs after RA use CONST0_RTX (half_mode) instead of
            ICE.

            * gcc.target/i386/pr127352.c: New test.

    Reviewed-by: Uros Bizjak <[email protected]>

Reply via email to