aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ChangeLog8
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/vect/pr60896.cc44
-rw-r--r--gcc/tree-vect-patterns.c5
4 files changed, 60 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index d3d594d..3eb5c43 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,11 @@
+2014-04-24 Cong Hou <congh@google.com>
+
+ PR tree-optimization/60896
+ * tree-vect-patterns.c (vect_recog_dot_prod_pattern): Pick up
+ all statements in PATTERN_DEF_SEQ in recognized widen-mult pattern.
+ (vect_mark_pattern_stmts): Set the def type of all statements in
+ PATTERN_DEF_SEQ as vect_internal_def.
+
2014-04-24 Michael Meissner <meissner@linux.vnet.ibm.com>
* doc/extend.texi (PowerPC Built-in Functions): Document new
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 9906c94..0191262 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2014-04-24 Cong Hou <congh@google.com>
+
+ PR tree-optimization/60896
+ * g++.dg/vect/pr60896.cc: New test.
+
2014-04-24 Michael Meissner <meissner@linux.vnet.ibm.com>
* gcc.target/powerpc/pack01.c: New test to test the new pack and
diff --git a/gcc/testsuite/g++.dg/vect/pr60896.cc b/gcc/testsuite/g++.dg/vect/pr60896.cc
new file mode 100644
index 0000000..c6ce68b
--- /dev/null
+++ b/gcc/testsuite/g++.dg/vect/pr60896.cc
@@ -0,0 +1,44 @@
+/* { dg-do compile } */
+/* { dg-options "-O3" } */
+
+struct A
+{
+ int m_fn1 ();
+ short *m_fn2 ();
+};
+
+struct B
+{
+ void *fC;
+};
+
+int a, b;
+unsigned char i;
+void fn1 (unsigned char *p1, A &p2)
+{
+ int c = p2.m_fn1 ();
+ for (int d = 0; c; d++)
+ {
+ short *e = p2.m_fn2 ();
+ unsigned char *f = &p1[0];
+ for (int g = 0; g < a; g++)
+ {
+ int h = e[0];
+ b += h * f[g];
+ }
+ }
+}
+
+void fn2 (A &p1, A &p2, B &p3)
+{
+ int j = p2.m_fn1 ();
+ for (int k = 0; j; k++)
+ if (0)
+ ;
+ else
+ fn1 (&i, p1);
+ if (p3.fC)
+ ;
+ else
+ ;
+}
diff --git a/gcc/tree-vect-patterns.c b/gcc/tree-vect-patterns.c
index 5daaf24..365cf01 100644
--- a/gcc/tree-vect-patterns.c
+++ b/gcc/tree-vect-patterns.c
@@ -392,6 +392,8 @@ vect_recog_dot_prod_pattern (vec<gimple> *stmts, tree *type_in,
gcc_assert (STMT_VINFO_DEF_TYPE (stmt_vinfo) == vect_internal_def);
oprnd00 = gimple_assign_rhs1 (stmt);
oprnd01 = gimple_assign_rhs2 (stmt);
+ STMT_VINFO_PATTERN_DEF_SEQ (vinfo_for_stmt (last_stmt))
+ = STMT_VINFO_PATTERN_DEF_SEQ (stmt_vinfo);
}
else
{
@@ -3065,8 +3067,7 @@ vect_mark_pattern_stmts (gimple orig_stmt, gimple pattern_stmt,
}
gimple_set_bb (def_stmt, gimple_bb (orig_stmt));
STMT_VINFO_RELATED_STMT (def_stmt_info) = orig_stmt;
- STMT_VINFO_DEF_TYPE (def_stmt_info)
- = STMT_VINFO_DEF_TYPE (orig_stmt_info);
+ STMT_VINFO_DEF_TYPE (def_stmt_info) = vect_internal_def;
if (STMT_VINFO_VECTYPE (def_stmt_info) == NULL_TREE)
STMT_VINFO_VECTYPE (def_stmt_info) = pattern_vectype;
}