https://gcc.gnu.org/g:04fffbaa87997ac893a9aa68b674c938ba3ecddb

commit r13-8486-g04fffbaa87997ac893a9aa68b674c938ba3ecddb
Author: Richard Biener <rguent...@suse.de>
Date:   Tue Mar 5 10:55:56 2024 +0100

    tree-optimization/114231 - use patterns for BB SLP discovery root stmts
    
    The following makes sure to use recognized patterns when vectorizing
    roots during BB SLP discovery.  We need to apply those late since
    during root discovery we've not yet done pattern recognition.
    All parts of the vectorizer assume patterns get used, for the testcase
    we mix this up when doing live lane computation.
    
            PR tree-optimization/114231
            * tree-vect-slp.cc (vect_analyze_slp): Lookup patterns when
            processing a BB SLP root.
    
            * gcc.dg/vect/pr114231.c: New testcase.

Diff:
---
 gcc/testsuite/gcc.dg/vect/pr114231.c | 12 ++++++++++++
 gcc/tree-vect-slp.cc                 |  4 ++++
 2 files changed, 16 insertions(+)

diff --git a/gcc/testsuite/gcc.dg/vect/pr114231.c 
b/gcc/testsuite/gcc.dg/vect/pr114231.c
new file mode 100644
index 00000000000..5e3a8103918
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/vect/pr114231.c
@@ -0,0 +1,12 @@
+/* { dg-do compile } */
+
+void f(long*);
+int ff[2];
+void f2(long, long, unsigned long);
+void k(unsigned long x, unsigned long y)
+{
+  long t = x >> ff[0];
+  long t1 = ff[1];
+  unsigned long t2 = y >> ff[0];
+  f2(t1, t+t2, t2);
+}
diff --git a/gcc/tree-vect-slp.cc b/gcc/tree-vect-slp.cc
index 6120620c9a8..e4d3cb89e6f 100644
--- a/gcc/tree-vect-slp.cc
+++ b/gcc/tree-vect-slp.cc
@@ -3478,6 +3478,10 @@ vect_analyze_slp (vec_info *vinfo, unsigned 
max_tree_size)
       for (unsigned i = 0; i < bb_vinfo->roots.length (); ++i)
        {
          vect_location = bb_vinfo->roots[i].roots[0]->stmt;
+         /* Apply patterns.  */
+         for (unsigned j = 0; j < bb_vinfo->roots[i].stmts.length (); ++j)
+           bb_vinfo->roots[i].stmts[j]
+             = vect_stmt_to_vectorize (bb_vinfo->roots[i].stmts[j]);
          if (vect_build_slp_instance (bb_vinfo, bb_vinfo->roots[i].kind,
                                       bb_vinfo->roots[i].stmts,
                                       bb_vinfo->roots[i].roots,

Reply via email to