Hi,

This little patch fix the fail testcase
(gcc.target/riscv/rvv/autovec/gather-scatter/strided_load_run-1.c)
after apply this patch
(https://gcc.gnu.org/pipermail/gcc-patches/2023-August/627121.html).
The specific reason is that the vsetvl pass has bug and this patch
forbidden the fuse of this case. This patch needs to be committed
before that patch to work.

Best,
Lehua

gcc/ChangeLog:

        * config/riscv/riscv-vsetvl.cc (pass_vsetvl::backward_demand_fusion):
          Forbidden.

gcc/testsuite/ChangeLog:

        * gcc.target/riscv/rvv/autovec/gather-scatter/strided_load_run-1.c:
          Address failure due to uninitialized vtype register. 

---
 gcc/config/riscv/riscv-vsetvl.cc                               | 3 +++
 .../riscv/rvv/autovec/gather-scatter/strided_load_run-1.c      | 1 +
 2 files changed, 4 insertions(+)

diff --git a/gcc/config/riscv/riscv-vsetvl.cc b/gcc/config/riscv/riscv-vsetvl.cc
index 08c487d82c0..11ef5d628c4 100644
--- a/gcc/config/riscv/riscv-vsetvl.cc
+++ b/gcc/config/riscv/riscv-vsetvl.cc
@@ -3312,6 +3312,9 @@ pass_vsetvl::backward_demand_fusion (void)
          else if (block_info.reaching_out.dirty_p ())
            {
              /* DIRTY -> DIRTY or VALID -> DIRTY.  */
+             if (block_info.reaching_out.demand_p (DEMAND_NONZERO_AVL)
+                 && vlmax_avl_p (prop.get_avl ()))
+               continue;
              vector_insn_info new_info;
 
              if (block_info.reaching_out.compatible_p (prop))
diff --git 
a/gcc/testsuite/gcc.target/riscv/rvv/autovec/gather-scatter/strided_load_run-1.c
 
b/gcc/testsuite/gcc.target/riscv/rvv/autovec/gather-scatter/strided_load_run-1.c
index 7ffa93bf13f..5080f196601 100644
--- 
a/gcc/testsuite/gcc.target/riscv/rvv/autovec/gather-scatter/strided_load_run-1.c
+++ 
b/gcc/testsuite/gcc.target/riscv/rvv/autovec/gather-scatter/strided_load_run-1.c
@@ -7,6 +7,7 @@
 int
 main (void)
 {
+asm volatile ("vsetivli x0, 0, e8, m1, ta, ma");
 #define RUN_LOOP(DATA_TYPE, BITS)                                              
\
   DATA_TYPE dest_##DATA_TYPE##_##BITS[(BITS - 3) * (BITS + 13)];               
\
   DATA_TYPE dest2_##DATA_TYPE##_##BITS[(BITS - 3) * (BITS + 13)];              
\
-- 
2.36.3

Reply via email to