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.