diff options
author | Juzhe-Zhong <juzhe.zhong@rivai.ai> | 2023-11-02 19:30:23 +0800 |
---|---|---|
committer | Pan Li <pan2.li@intel.com> | 2023-11-02 19:43:20 +0800 |
commit | f6284ef38701920865de3c9e18bb3f6068fde4d1 (patch) | |
tree | 5838eac4e80166eca626f9285b841ff4b9ccd4cf /gcc | |
parent | 01c18f58d37865d5f3bbe93e666183b54ec608c7 (diff) | |
download | gcc-f6284ef38701920865de3c9e18bb3f6068fde4d1.zip gcc-f6284ef38701920865de3c9e18bb3f6068fde4d1.tar.gz gcc-f6284ef38701920865de3c9e18bb3f6068fde4d1.tar.bz2 |
RISC-V: Fix bug of AVL propagation PASS
A run FAIL suddenly shows up today to me:
FAIL: gcc.target/riscv/rvv/autovec/gather-scatter/mask_gather_load_run-11.c execution test
that I didn't have before.
After investigation, I realize that there is a bug in AVL propagtion PASS.
gcc/ChangeLog:
* config/riscv/riscv-avlprop.cc
(pass_avlprop::get_vlmax_ta_preferred_avl): Don't allow
non-real insn AVL propation.
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/config/riscv/riscv-avlprop.cc | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/gcc/config/riscv/riscv-avlprop.cc b/gcc/config/riscv/riscv-avlprop.cc index c59eb7f..bcd77a3 100644 --- a/gcc/config/riscv/riscv-avlprop.cc +++ b/gcc/config/riscv/riscv-avlprop.cc @@ -266,6 +266,13 @@ pass_avlprop::get_vlmax_ta_preferred_avl (insn_info *insn) const def_info *def2 = dl.prev_def (use_insn); if (!def1 || !def2 || def1 != def2) return NULL_RTX; + /* For vectorized codes, we always use SELECT_VL/MIN_EXPR to + calculate the loop len at the header of the loop. + We only allow AVL propagation for real instruction for now. + TODO: We may enhance it for intrinsic codes if it is necessary. + */ + if (!def1->insn ()->is_real ()) + return NULL_RTX; /* FIXME: We only all AVL propation within a block which should be totally enough for vectorized codes. |