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