aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.dg/vect/pr22506.c12
-rw-r--r--gcc/tree-vectorizer.c4
4 files changed, 27 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index df7cb00..404286c 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2005-07-28 Dorit Nuzman <dorit@il.ibm.com>
+
+ PR tree-optimization/22506
+ * tree-vectorizer.c (update_phi_nodes_for_guard2): Skip loop-closed
+ phis whose argument is constant.
+
2005-07-28 J"orn Rennecke <joern.rennecke@st.com>
PR rtl-optimization/18992
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 89f6ea2..c979383 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2005-07-28 Dorit Nuzman <dorit@il.ibm.com>
+
+ PR tree-optimization/22506
+ * gcc.dg/vect/ps22506.c: New test.
+
2005-07-28 Jakub Jelinek <jakub@redhat.com>
PR target/21149
diff --git a/gcc/testsuite/gcc.dg/vect/pr22506.c b/gcc/testsuite/gcc.dg/vect/pr22506.c
new file mode 100644
index 0000000..fa22118
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/vect/pr22506.c
@@ -0,0 +1,12 @@
+/* { dg-do compile } */
+/* { dg-require-effective-target vect_int } */
+
+float x[3];
+
+void foo()
+{
+ int i;
+
+ for (i=0; i<5; ++i) x[i]=0;
+ for (i=0; i<4; ++i) ;
+}
diff --git a/gcc/tree-vectorizer.c b/gcc/tree-vectorizer.c
index 4a9bbe8..b38156a 100644
--- a/gcc/tree-vectorizer.c
+++ b/gcc/tree-vectorizer.c
@@ -640,6 +640,10 @@ slpeel_update_phi_nodes_for_guard2 (edge guard_edge, struct loop *loop,
{
orig_phi = update_phi;
orig_def = PHI_ARG_DEF_FROM_EDGE (orig_phi, e);
+ /* This loop-closed-phi actually doesn't represent a use
+ out of the loop - the phi arg is a constant. */
+ if (TREE_CODE (orig_def) != SSA_NAME)
+ continue;
orig_def_new_name = get_current_def (orig_def);
arg = NULL_TREE;