aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJuzhe-Zhong <juzhe.zhong@rivai.ai>2023-11-02 19:30:23 +0800
committerPan Li <pan2.li@intel.com>2023-11-02 19:43:20 +0800
commitf6284ef38701920865de3c9e18bb3f6068fde4d1 (patch)
tree5838eac4e80166eca626f9285b841ff4b9ccd4cf /gcc
parent01c18f58d37865d5f3bbe93e666183b54ec608c7 (diff)
downloadgcc-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.cc7
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.