diff options
author | Juzhe-Zhong <juzhe.zhong@rivai.ai> | 2024-01-26 14:46:21 +0800 |
---|---|---|
committer | Pan Li <pan2.li@intel.com> | 2024-01-26 14:49:12 +0800 |
commit | d40b3c1e439db05c835b6bd4fd5bba58fda71dd6 (patch) | |
tree | 0b6ad5806c7be6747319a39a028bdea8406903d1 /gcc/cp/module.cc | |
parent | 0c2583dc2575f3f64e3d09e12c296eb56f01916d (diff) | |
download | gcc-d40b3c1e439db05c835b6bd4fd5bba58fda71dd6.zip gcc-d40b3c1e439db05c835b6bd4fd5bba58fda71dd6.tar.gz gcc-d40b3c1e439db05c835b6bd4fd5bba58fda71dd6.tar.bz2 |
RISC-V: Fix incorrect LCM delete bug [VSETVL PASS]
This patch fixes the recent noticed bug in RV32 glibc.
We incorrectly deleted a vsetvl:
...
and a4,a4,a3
vmv.v.i v1,0 ---> Missed vsetvl cause illegal instruction report.
vse8.v v1,0(a5)
The root cause the laterin in LCM is incorrect.
BB 358:
avloc: n_bits = 2, set = {}
kill: n_bits = 2, set = {}
antloc: n_bits = 2, set = {}
transp: n_bits = 2, set = {}
avin: n_bits = 2, set = {}
avout: n_bits = 2, set = {}
del: n_bits = 2, set = {}
cause LCM let BB 360 delete the vsetvl:
BB 360:
avloc: n_bits = 2, set = {}
kill: n_bits = 2, set = {}
antloc: n_bits = 2, set = {}
transp: n_bits = 2, set = {0 1 }
avin: n_bits = 2, set = {}
avout: n_bits = 2, set = {}
del: n_bits = 2, set = {1}
Also, remove unknown vsetvl info into local computation since it is unnecessary.
Tested on both RV32/RV64 no regression.
PR target/113469
gcc/ChangeLog:
* config/riscv/riscv-vsetvl.cc (pre_vsetvl::compute_lcm_local_properties): Fix bug.
gcc/testsuite/ChangeLog:
* gcc.target/riscv/rvv/autovec/pr113469.c: New test.
Diffstat (limited to 'gcc/cp/module.cc')
0 files changed, 0 insertions, 0 deletions