diff options
author | Juzhe-Zhong <juzhe.zhong@rivai.ai> | 2023-12-11 11:00:14 +0800 |
---|---|---|
committer | Lehua Ding <lehua.ding@rivai.ai> | 2023-12-11 14:07:34 +0800 |
commit | a536d235d2204f3ff9be126fec3acbc032db3086 (patch) | |
tree | f449785474b852a99f0bbba789d664e1bc44f0f0 /libsanitizer/Makefile.am | |
parent | ec201e2a6021d144797f5558e4d08a2385de7a63 (diff) | |
download | gcc-a536d235d2204f3ff9be126fec3acbc032db3086.zip gcc-a536d235d2204f3ff9be126fec3acbc032db3086.tar.gz gcc-a536d235d2204f3ff9be126fec3acbc032db3086.tar.bz2 |
RISC-V: Remove poly selftest when --preference=fixed-vlmax
This patch fixes multiple ICEs in full coverage testing:
cc1: internal compiler error: in riscv_legitimize_poly_move, at config/riscv/riscv.cc:2456^M
0x1fd8d78 riscv_legitimize_poly_move^M
../../../../gcc/gcc/config/riscv/riscv.cc:2456^M
0x1fd9518 riscv_legitimize_move(machine_mode, rtx_def*, rtx_def*)^M
../../../../gcc/gcc/config/riscv/riscv.cc:2583^M
0x2936820 gen_movdi(rtx_def*, rtx_def*)^M
../../../../gcc/gcc/config/riscv/riscv.md:2099^M
0x11a0f28 rtx_insn* insn_gen_fn::operator()<rtx_def*, rtx_def*>(rtx_def*, rtx_def*) const^M
../../../../gcc/gcc/recog.h:431^M
0x13cf2f9 emit_move_insn_1(rtx_def*, rtx_def*)^M
../../../../gcc/gcc/expr.cc:4553^M
0x13d010c emit_move_insn(rtx_def*, rtx_def*)^M
../../../../gcc/gcc/expr.cc:4723^M
0x216f5e0 run_poly_int_selftest^M
../../../../gcc/gcc/config/riscv/riscv-selftests.cc:185^M
0x21701e6 run_poly_int_selftests^M
../../../../gcc/gcc/config/riscv/riscv-selftests.cc:226^M
0x2172109 selftest::riscv_run_selftests()^M
../../../../gcc/gcc/config/riscv/riscv-selftests.cc:371^M
0x3b8067b selftest::run_tests()^M
../../../../gcc/gcc/selftest-run-tests.cc:112^M
0x1ad90ee toplev::run_self_tests()^M
../../../../gcc/gcc/toplev.cc:2209^M
Running target riscv-sim/-march=rv64gcv/-mabi=lp64d/-mcmodel=medlow/--param=riscv-autovec-lmul=m1/--param=riscv-autovec-preference=fixed-vlmax
The rootcause is that we are testing POLY value computation during FIXED-VLMAX and ICE in this code:
if (BYTES_PER_RISCV_VECTOR.is_constant ())
{
gcc_assert (value.is_constant ()); -----> assert failed.
riscv_emit_move (dest, GEN_INT (value.to_constant ()));
return;
}
For example, a poly value [15, 16] is computed by csrr vlen + multiple scalar integer instructions.
However, such compile-time unknown value need to be computed when it is scalable vector, that is !BYTES_PER_RISCV_VECTOR.is_constant (),
since csrr vlenb = [16, 0] when -march=rv64gcv --param=riscv-autovec-preference=fixed-vlmax and we have no chance to compute compile-time POLY value.
Also, we never reach the situation to compute a compile time unknown value when it is FIXED-VLMAX vector. So disable POLY selftest for FIXED-VLMAX.
gcc/ChangeLog:
* config/riscv/riscv-selftests.cc (riscv_run_selftests):
Remove poly self test when FIXED-VLMAX.
gcc/testsuite/ChangeLog:
* gcc.target/riscv/rvv/base/poly-selftest-1.c: New test.
Diffstat (limited to 'libsanitizer/Makefile.am')
0 files changed, 0 insertions, 0 deletions