https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87305
Bug ID: 87305
Summary: [9 Regression] Segfault in end_hard_regno in
setup_live_pseudos_and_spill_after_risky_transforms on
aarch64 big-endian
Product: gcc
Version: unknown
Status: UNCONFIRMED
Keywords: ice-on-valid-code
Severity: normal
Priority: P3
Component: rtl-optimization
Assignee: unassigned at gcc dot gnu.org
Reporter: ktkachov at gcc dot gnu.org
CC: rsandifo at gcc dot gnu.org
Target Milestone: ---
The testcase:
int a;
int b[5];
int fn1() {
short c;
a = 0;
for (; a <= 4; a++) {
c = 3;
for (; c >= 0; c--) {
if (b[c + 1])
break;
--b[c];
}
}
return a;
}
ICEs with -Ofast -mbig-endian on aarch64
test.c:15:1: internal compiler error: Segmentation fault
15 | }
| ^
0xc310b1 crash_signal
$GCC/gcc/toplev.c:325
0xa87998 end_hard_regno
$GCC/gcc/regs.h:266
0xa87998 add_to_hard_reg_set
$GCC/gcc/regs.h:278
0xa87998 setup_live_pseudos_and_spill_after_risky_transforms
$GCC/gcc/lra-assigns.c:1219
0xa87998 lra_assign(bool&)
$GCC/gcc/lra-assigns.c:1617
0xa83da4 lra(_IO_FILE*)
$GCC/gcc/lra.c:2508
0xa3b3d6 do_reload
$GCC/gcc/ira.c:5469
0xa3b3d6 execute
$GCC/gcc/ira.c:5653
Please submit a full bug report,
with preprocessed source if appropriate.
Please include the complete backtrace with any bug report.
See <https://gcc.gnu.org/bugs/> for instructions.
This seems to be due to a subreg being involved in a vector operation.
My patch[1] to disable paradoxical subregs during vector initialisation in
aarch64 "fixes" the ICE but it was not applied as it was just papering over a
problem in the midend.
[1] https://gcc.gnu.org/ml/gcc-patches/2018-05/msg01635.html