public inbox for gcc-cvs@sourceware.org
help / color / mirror / Atom feed
* [gcc r14-4248] RISC-V: Fix AVL/VL bug of VSETVL PASS[PR111548]
@ 2023-09-25  6:12 Pan Li
  0 siblings, 0 replies; only message in thread
From: Pan Li @ 2023-09-25  6:12 UTC (permalink / raw)
  To: gcc-cvs

https://gcc.gnu.org/g:9d5f20fc4a6b3254d2d379309193da4be2747987

commit r14-4248-g9d5f20fc4a6b3254d2d379309193da4be2747987
Author: Juzhe-Zhong <juzhe.zhong@rivai.ai>
Date:   Sun Sep 24 11:17:01 2023 +0800

    RISC-V: Fix AVL/VL bug of VSETVL PASS[PR111548]
    
    This patch fixes that AVL/VL reg incorrect fetch in VSETVL PASS.
    
    C/C++ regression passed.
    
    But gfortran didn't run yet. I am still finding a way to run it.
    
    Will commit it when I pass the fortran regression.
    
            PR target/111548
    
    gcc/ChangeLog:
    
            * config/riscv/riscv-vsetvl.cc (earliest_pred_can_be_fused_p): Bugfix
    
    gcc/testsuite/ChangeLog:
    
            * gcc.target/riscv/rvv/autovec/pr111548.c: New test.

Diff:
---
 gcc/config/riscv/riscv-vsetvl.cc                   | 16 ++++++--------
 .../gcc.target/riscv/rvv/autovec/pr111548.c        | 25 ++++++++++++++++++++++
 2 files changed, 31 insertions(+), 10 deletions(-)

diff --git a/gcc/config/riscv/riscv-vsetvl.cc b/gcc/config/riscv/riscv-vsetvl.cc
index e0f61148ef3..7af33e7ea6f 100644
--- a/gcc/config/riscv/riscv-vsetvl.cc
+++ b/gcc/config/riscv/riscv-vsetvl.cc
@@ -1514,7 +1514,6 @@ earliest_pred_can_be_fused_p (const bb_info *earliest_pred,
 			      const vector_insn_info &earliest_info,
 			      const vector_insn_info &expr, rtx *vlmax_vl)
 {
-  rtx vl = NULL_RTX;
   /* Backward VLMAX VL:
        bb 3:
 	 vsetivli zero, 1 ... -> vsetvli t1, zero
@@ -1526,10 +1525,9 @@ earliest_pred_can_be_fused_p (const bb_info *earliest_pred,
        We should forward "t1".  */
   if (!earliest_info.has_avl_reg () && expr.has_avl_reg ())
     {
-      rtx avl = expr.get_avl ();
+      rtx avl_or_vl_reg = expr.get_avl_or_vl_reg ();
+      gcc_assert (avl_or_vl_reg);
       const insn_info *last_insn = earliest_info.get_insn ();
-      if (vlmax_avl_p (avl))
-	vl = get_vl (expr.get_insn ()->rtl ());
       /* To fuse demand on earlest edge, we make sure AVL/VL
 	 didn't change from the consume insn to the predecessor
 	 of the edge.  */
@@ -1538,17 +1536,15 @@ earliest_pred_can_be_fused_p (const bb_info *earliest_pred,
 	   && after_or_same_p (i, last_insn);
 	   i = i->prev_nondebug_insn ())
 	{
-	  if (!vl && find_access (i->defs (), REGNO (avl)))
+	  if (find_access (i->defs (), REGNO (avl_or_vl_reg)))
 	    return false;
-	  if (vl && find_access (i->defs (), REGNO (vl)))
-	    return false;
-	  if (vl && find_access (i->uses (), REGNO (vl)))
+	  if (find_access (i->uses (), REGNO (avl_or_vl_reg)))
 	    return false;
 	}
+      if (vlmax_vl && vlmax_avl_p (expr.get_avl ()))
+	*vlmax_vl = avl_or_vl_reg;
     }
 
-  if (vlmax_vl)
-    *vlmax_vl = vl;
   return true;
 }
 
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr111548.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr111548.c
new file mode 100644
index 00000000000..9bdf42dbed8
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr111548.c
@@ -0,0 +1,25 @@
+/* { dg-do compile } */
+/* { dg-options "-march=rv64gcv -mabi=lp64d -Ofast -Wno-implicit-int -Wno-implicit-function-declaration -Wno-int-conversion" } */
+
+a, c, d; /* { dg-warning "data definition has no type or storage class" } */
+*b; /* { dg-warning "data definition has no type or storage class" } */
+h() {
+  int e;
+  i();
+  for (;;) {
+    unsigned f;
+    char *g;
+    f = a;
+    for (; f; f--) {
+      if (*g == '"')
+        e = !e;
+      *b = g++;
+    }
+    if (c)
+      break;
+    f = d;
+    for (; d;)
+      if (e)
+        b++;
+  }
+}

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2023-09-25  6:12 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-09-25  6:12 [gcc r14-4248] RISC-V: Fix AVL/VL bug of VSETVL PASS[PR111548] Pan Li

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).