https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98037
Bug ID: 98037
Summary: ICE in dse.c:find_shift_sequence for large non-integer
modes
Product: gcc
Version: 10.2.1
Status: UNCONFIRMED
Keywords: ice-on-valid-code
Severity: normal
Priority: P3
Component: rtl-optimization
Assignee: unassigned at gcc dot gnu.org
Reporter: rsandifo at gcc dot gnu.org
Target Milestone: ---
Target: aarch64*-*-*
Compiling the following test on AArch64 with -march=armv8.2-a+sve
-msve-vector-bits=512:
-----------------------------------------------------------------
typedef __SVInt8_t vec __attribute__((arm_sve_vector_bits(512)));
struct pair { vec v[2]; };
void use(pair &);
vec f(pair p) { vec v = p.v[1]; use(p); return v; }
-----------------------------------------------------------------
triggers:
foo.c:4:51: internal compiler error: in smallest_mode_for_size, at
stor-layout.c:356
4 | vec f(pair p) { vec v = p.v[1]; use(p); return v; }
| ^
... smallest_mode_for_size(poly_int<2u, unsigned long>, mode_class)
.../gcc/stor-layout.c:356
... smallest_int_mode_for_size(poly_int<2u, unsigned long>)
.../gcc/machmode.h:879
... find_shift_sequence
.../gcc/dse.c:1731
because there is no integer mode big enough to represent the
access size.