]> git.ipfire.org Git - thirdparty/gcc.git/commit
RISC-V: Correct mode_idx attribute for viwalu wx variants [PR116149].
authorRobin Dapp <rdapp@ventanamicro.com>
Wed, 31 Jul 2024 14:54:03 +0000 (16:54 +0200)
committerRobin Dapp <rdapp@ventanamicro.com>
Thu, 1 Aug 2024 19:55:33 +0000 (21:55 +0200)
commitf15cd1802129454029f7fcc8ee3ddd56a86cdad8
treefc770a166805d45a1fcc8abf75b2324b4b2399dd
parent90fe402a89910d4fbe0efc15cf05cf6c0306586a
RISC-V: Correct mode_idx attribute for viwalu wx variants [PR116149].

In PR116149 we choose a wrong vector length which causes wrong values in
a reduction.  The problem happens in avlprop where we choose the
number of units in the instruction's mode as vector length.  For the
non-scalar variants the respective operand has the correct non-widened
mode.  For the scalar variants, however, the same operand has a scalar
mode which obviously only has one unit.  This makes us choose VL = 1
leaving three elements undisturbed (so potentially -1).  Those end up
in the reduction causing the wrong result.

This patch adjusts the mode_idx just for the scalar variants of the
affected instruction patterns.

gcc/ChangeLog:

PR target/116149

* config/riscv/vector.md: Fix mode_idx attribute of scalar
widen add/sub variants.

gcc/testsuite/ChangeLog:

* gcc.target/riscv/rvv/autovec/pr116149.c: New test.
gcc/config/riscv/vector.md
gcc/testsuite/gcc.target/riscv/rvv/autovec/pr116149.c [new file with mode: 0644]