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

            Bug ID: 116033
           Summary: [14/15] RISC-V: -march=rv64gv_xtheadmemidx generates
                    illegal vse8.v insn
           Product: gcc
           Version: 15.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: target
          Assignee: unassigned at gcc dot gnu.org
          Reporter: patrick at rivosinc dot com
  Target Milestone: ---

Testcase:
char arr_3[20][20];
void init() {
  for (int i_0 = 0; i_0 < 20; ++i_0)
    for (int i_1 = 0; i_0 < 20; ++i_0)
      for (int i_1 = 0; i_1 < 20; ++i_0)
        for (int i_1 = 0; i_1 < 20; ++i_1)
          arr_3[i_0][i_1] = i_1;
}

Command:
> /scratch/tc-testing/tc-compiler-fuzz-trunk/build-gcv/bin/riscv64-unknown-linux-gnu-gcc
>  -march=rv64gv_xtheadmemidx -mabi=lp64d driver.c -c -O3
/scratch/tmp/cc4KI0Jh.s: Assembler messages:
/scratch/tmp/cc4KI0Jh.s:27: Error: illegal operands `vse8.v v1,(a5),10,1'
/scratch/tmp/cc4KI0Jh.s:28: Error: illegal operands `vse8.v v5,(a1),10,1'
/scratch/tmp/cc4KI0Jh.s:29: Error: illegal operands `vse8.v v4,(a2),10,1'
/scratch/tmp/cc4KI0Jh.s:30: Error: illegal operands `vse8.v v3,(a3),10,1'
/scratch/tmp/cc4KI0Jh.s:31: Error: illegal operands `vse8.v v2,(a4),10,1'

Generated asm:
init:
        vsetivli        zero,4,e8,mf4,ta,ma
        vid.v   v1
        lui     a5,%hi(.LANCHOR0)
        vadd.vi v5,v1,4
        vadd.vi v4,v1,8
        vadd.vi v3,v1,12
        addi    a5,a5,%lo(.LANCHOR0)
        li      a4,16
        vadd.vx v2,v1,a4
        addi    a1,a5,4
        addi    a2,a5,8
        addi    a3,a5,12
        addi    a4,a5,16
.L2:
        vse8.v  v1,(a5),10,1
        vse8.v  v5,(a1),10,1
        vse8.v  v4,(a2),10,1
        vse8.v  v3,(a3),10,1
        vse8.v  v2,(a4),10,1
        j       .L2
arr_3:
        .zero   400

Godbolt:
https://godbolt.org/z/qGqxrTr3K

Using -march=rv64gcv generates the expected syntax of vse8.v v1,(a5):
https://godbolt.org/z/4Pda4fc6E

Found via fuzzer.

Reply via email to