https://gcc.gnu.org/bugzilla/show_bug.cgi?id=120733
Bug ID: 120733 Summary: [16 Regression][aarch64] ICE in gen_highpart, at lra.cc:1484 since r16-1565-g2dcc6dbd8a00ca Product: gcc Version: 16.0 Status: UNCONFIRMED Severity: major Priority: P3 Component: target Assignee: unassigned at gcc dot gnu.org Reporter: dimitar at gcc dot gnu.org Target Milestone: --- Commit r16-1565-g2dcc6dbd8a00ca, emit-rtl: Use simplify_subreg_regno to validate hardware subregs [PR119966] causes ICE when building the following (reduced from gcc.c-torture/compile/pass.c): int foo (int a) { return a + 1; } int bar (void) { int q; return foo ((int) & q); } Expand produces the following RTL: (debug_insn 7 6 8 2 (var_location:SI aD.4606 (plus:SI (subreg:SI (reg/f:DI 96 virtual-stack-vars) 0) (const_int -4 [0xfffffffffffffffc]))) "../../gcc/gcc/testsuite/gcc.c-torture/compile/pass.c":16:10 -1 (nil)) which contains invalid subreg, according to aarch64_hard_regno_mode_ok: if (regno == FRAME_POINTER_REGNUM || regno == ARG_POINTER_REGNUM) return mode == Pmode; LRA replaces the invalid subreg with nil: (debug_insn 7 6 8 2 (var_location:SI aD.4606 (plus:SI (nil) (const_int 12 [0xc]))) "../../gcc/gcc/testsuite/gcc.c-torture/compile/pass.c":16:10 -1 (nil)) which in turn leads to ICE: 0x2a74282 internal_error(char const*, ...) /mnt/nvme/dinux/local-workspace/gcc/gcc/diagnostic-global-context.cc:517 0xe94332 crash_signal /mnt/nvme/dinux/local-workspace/gcc/gcc/toplev.cc:321 0xbc98a5 add_regs_to_insn_regno_info /mnt/nvme/dinux/local-workspace/gcc/gcc/lra.cc:1484 0xbc9c21 add_regs_to_insn_regno_info /mnt/nvme/dinux/local-workspace/gcc/gcc/lra.cc:1568 0xbca0f0 lra_update_insn_regno_info(rtx_insn*) /mnt/nvme/dinux/local-workspace/gcc/gcc/lra.cc:1661 0xbeea48 process_insn_for_elimination /mnt/nvme/dinux/local-workspace/gcc/gcc/lra-eliminations.cc:1398 0xbeeee5 lra_eliminate(bool, bool) /mnt/nvme/dinux/local-workspace/gcc/gcc/lra-eliminations.cc:1506 0xbe2b6f lra_constraints(bool) /mnt/nvme/dinux/local-workspace/gcc/gcc/lra-constraints.cc:5368 0xbcbfa6 lra(_IO_FILE*, int) /mnt/nvme/dinux/local-workspace/gcc/gcc/lra.cc:2455 0xb73ddc do_reload /mnt/nvme/dinux/local-workspace/gcc/gcc/ira.cc:5986 0xb74292 execute /mnt/nvme/dinux/local-workspace/gcc/gcc/ira.cc:6174