https://gcc.gnu.org/bugzilla/show_bug.cgi?id=127352
--- Comment #5 from GCC Commits <cvs-commit at gcc dot gnu.org> --- The releases/gcc-16 branch has been updated by Jakub Jelinek <[email protected]>: https://gcc.gnu.org/g:c681c4f2aa8fc44c4e3822cc34b32fc93d1c607d commit r16-9759-gc681c4f2aa8fc44c4e3822cc34b32fc93d1c607d 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]> (cherry picked from commit 920fbabbc3b30c2677b2445c55b29c8547abf01c)
