Skip to content

Commit

Permalink
RISC-V: Fix bug of tuple move splitter
Browse files Browse the repository at this point in the history
PR target/112561

gcc/ChangeLog:

	* config/riscv/riscv-v.cc (expand_tuple_move): Fix bug.

gcc/testsuite/ChangeLog:

	* gcc.target/riscv/rvv/autovec/pr112561.c: New test.
  • Loading branch information
zhongjuzhe authored and Incarnation-p-lee committed Nov 19, 2023
1 parent f65f63c commit af7fa31
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 0 deletions.
4 changes: 4 additions & 0 deletions gcc/config/riscv/riscv-v.cc
Original file line number Diff line number Diff line change
Expand Up @@ -2033,6 +2033,10 @@ expand_tuple_move (rtx *ops)
offset = ops[2];
}

/* Non-fractional LMUL has whole register moves that don't require a
vsetvl for VLMAX. */
if (fractional_p)
emit_vlmax_vsetvl (subpart_mode, ops[4]);
if (MEM_P (ops[1]))
{
/* Load operations. */
Expand Down
16 changes: 16 additions & 0 deletions gcc/testsuite/gcc.target/riscv/rvv/autovec/pr112561.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
/* { dg-do run { target { riscv_v } } } */
/* { dg-options "-O3 -ftree-vectorize --param=riscv-autovec-preference=fixed-vlmax -mcmodel=medlow" } */

int printf(char *, ...);
int a, b, c, e;
short d[7][7] = {};
int main() {
short f;
c = 0;
for (; c <= 6; c++) {
e |= d[c][c] & 1;
b &= f & 3;
}
printf("%d\n", a);
return 0;
}

0 comments on commit af7fa31

Please sign in to comment.