aboutsummaryrefslogtreecommitdiff
path: root/gcc/go
diff options
context:
space:
mode:
authorPan Li <pan2.li@intel.com>2023-12-18 14:58:49 +0800
committerPan Li <pan2.li@intel.com>2023-12-18 15:49:21 +0800
commit2c0c3368de5f8e3951f14a21d2d9183f6998ead5 (patch)
tree8eb80046d18bcc9eaef5febf7643e26b8f8d00b1 /gcc/go
parent7b4d6734b87ed1002e24d8bf6d4fd1dfb4fda383 (diff)
downloadgcc-2c0c3368de5f8e3951f14a21d2d9183f6998ead5.zip
gcc-2c0c3368de5f8e3951f14a21d2d9183f6998ead5.tar.gz
gcc-2c0c3368de5f8e3951f14a21d2d9183f6998ead5.tar.bz2
RISC-V: Bugfix for the RVV const vector
This patch would like to fix one bug of const vector for interleave. Assume we need to generate interleave const vector like below. V = {{4, -4, 3, -3, 2, -2, 1, -1,} Before this patch: vsetvl a3, zero, e64, m8, ta, ma vid.v v8 v8 = {0, 1, 2, 3, 4} li a6, -1 vmul.vx v8, v8, a6 v8 = {-0, -1, -2, -3, -4} vadd.vi v24, v8, 4 v24 = { 4, 3, 2, 1, 0} vadd.vi v8, v8, -4 v8 = {-4, -5, -6, -7, -8} li a6, 32 vsll.vx v8, v8, a6 v8 = {0, -4, 0, -5, 0, -6, 0, -7,} for e32 vor v24, v24, v8 v24 = {4, -4, 3, -5, 2, -6, 1, -7,} for e32 After this patch: vsetvli a6,zero,e64,m8,ta,ma vid.v v8 v8 = {0, 1, 2, 3, 4} li a7,-1 vmul.vx v16,v8,a7 v16 = {-0, -1, -2, -3, -4} vaddvi v16,v16,4 v16 = { 4, 3, 2, 1, 0} vaddvi v8,v8,-4 v8 = {-4, -3, -2, -1, 0} li a7,32 vsll.vx v8,v8,a7 v8 = {0, -4, 0, -3, 0, -2,} for e32 vor.vv v16,v16,v8 v8 = {4, -4, 3, -3, 2, -2,} for e32 It is not easy to add asm check stable enough for this case, as we need to check the vadd -4 target comes from the vid output, which crosses 4 instructions up to point. Thus there is no test here and will be covered by gcc.dg/vect/pr92420.c in the underlying patches. gcc/ChangeLog: * config/riscv/riscv-v.cc (expand_const_vector): Take step2 instead of step1 for second series. Signed-off-by: Pan Li <pan2.li@intel.com>
Diffstat (limited to 'gcc/go')
0 files changed, 0 insertions, 0 deletions