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.

Reply via email to