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

Reply via email to