https://gcc.gnu.org/bugzilla/show_bug.cgi?id=97248

            Bug ID: 97248
           Summary: [mips] unrecognizable insn when left shifting uint64
                    vector by scalar with MSA
           Product: gcc
           Version: unknown
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: target
          Assignee: unassigned at gcc dot gnu.org
          Reporter: e...@coeus-group.com
  Target Milestone: ---

On mips64el with -mmsa, attempting to left shift a vector of unsigned 64-bit
integers by a scalar results in an ICE.  The same code works without -mmsa.

Test case:

  typedef struct {
    long unsigned int c __attribute__((__vector_size__(16)));
  } d;
  int i() {
    int e;
    d f, g;
    f.c = g.c << e;
  }

`mips64el-linux-gnuabi64-gcc-10 -mmsa -c -o foo.o foo.c`:

  foo.c: In function ā€˜iā€™:
  foo.c:8:1: error: unrecognizable insn:
      8 | }
        | ^
  (insn 9 8 10 2 (set (reg:DI 198)
          (subreg:DI (mem/c:SI (reg/f:DI 189 virtual-stack-vars) [1 e+0 S4
A32]) 0)) "foo.c":7:13 -1
      (nil))
  during RTL pass: vregs
  foo.c:8:1: internal compiler error: in extract_insn, at recog.c:2294
  Please submit a full bug report,
  with preprocessed source if appropriate.
  See <file:///usr/share/doc/gcc-10/README.Bugs> for instructions.

Reply via email to