LGTM


juzhe.zh...@rivai.ai
 
From: Robin Dapp
Date: 2024-11-25 22:39
To: gcc-patches
CC: pal...@dabbelt.com; kito.ch...@gmail.com; juzhe.zh...@rivai.ai; 
jeffreya...@gmail.com; pan2...@intel.com; rdapp....@gmail.com
Subject: [PATCH] RISC-V: avlprop: Do not propagate VL from slidedown.
Hi,
 
in the following situation (found in the
rvv/autovec/vls-vlmax/shuffle-slide.c test which is not yet pushed)
 
vsetivli zero,4,e8,mf4,ta,ma
vle8.v v2,0(a1) # (1)
vle8.v v1,0(a2) # (2)
vsetivli zero,2,e8,mf4,tu,ma
vslidedown.vi v1,v2,2
vsetivli zero,4,e8,mf4,ta,ma
vse8.v v1,0(a2)
 
we wrongly "propagate" VL=2 from vslidedown into the load.
 
Although we check whether the "target" instruction has a merge operand
the check only handles cases where the merge operand itself is
loaded, like (2) in the snippet above.  For (1) we load the non-merged
operand, assume propagation is valid and continue despite (1).
 
This patch just re-uses avl_can_be_propagated_p in order to disable
slides altogether in such situations.
 
Regtested on rv64gcv.
 
Regards
Robin
 
 
gcc/ChangeLog:
 
* config/riscv/riscv-avlprop.cc (pass_avlprop::get_vlmax_ta_preferred_avl):
Check whether the use insn is valid for propagation.
---
gcc/config/riscv/riscv-avlprop.cc | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
 
diff --git a/gcc/config/riscv/riscv-avlprop.cc 
b/gcc/config/riscv/riscv-avlprop.cc
index 91d80aa00d6..62491f9be2d 100644
--- a/gcc/config/riscv/riscv-avlprop.cc
+++ b/gcc/config/riscv/riscv-avlprop.cc
@@ -351,7 +351,8 @@ pass_avlprop::get_vlmax_ta_preferred_avl (insn_info *insn) 
const
  if (!use_insn->can_be_optimized () || use_insn->is_asm ()
      || use_insn->is_call () || use_insn->has_volatile_refs ()
      || use_insn->has_pre_post_modify ()
-       || !has_vl_op (use_insn->rtl ()))
+       || !has_vl_op (use_insn->rtl ())
+       || !avl_can_be_propagated_p (use_insn->rtl ()))
    return NULL_RTX;
  /* We should only propagate non-VLMAX AVL into VLMAX insn when
-- 
2.47.0
 
 

Reply via email to