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.
(cherry picked from commit
04fffbaa87997ac893a9aa68b674c938ba3ecddb)
--- /dev/null
+/* { 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);
+}
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,