aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDorit Nuzman <dorit@il.ibm.com>2007-06-08 08:57:54 +0000
committerDorit Nuzman <dorit@gcc.gnu.org>2007-06-08 08:57:54 +0000
commit0d2665809fd15fe7c5ee73a7adee1ae64a002ffd (patch)
tree756ce738929bc178e9949ba8d8f19c9c72248f0a
parent2dbc83d953662e61db936cac2ac25f907895205e (diff)
downloadgcc-0d2665809fd15fe7c5ee73a7adee1ae64a002ffd.zip
gcc-0d2665809fd15fe7c5ee73a7adee1ae64a002ffd.tar.gz
gcc-0d2665809fd15fe7c5ee73a7adee1ae64a002ffd.tar.bz2
re PR tree-optimization/32224 (ICE in vect_analyze_operations, at tree-vect-analyze.c:374)
PR tree-optimization/32224 * tree-vect-analyze.c (vect_determine_vectorization_factor): Fail vectorization upon a non GIMPLE_MODIFY_STMT. From-SVN: r125566
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.dg/vect/pr32224.c17
-rw-r--r--gcc/tree-vect-analyze.c13
4 files changed, 38 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 583ba38..5ebdcd4 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2007-06-08 Dorit Nuzman <dorit@il.ibm.com>
+
+ PR tree-optimization/32224
+ * tree-vect-analyze.c (vect_determine_vectorization_factor): Fail
+ vectorization upon a non GIMPLE_MODIFY_STMT.
+
2007-06-08 Christian Bruel <christian.bruel@st.com>
PR target/29953
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 598af90..6102817 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2007-06-08 Dorit Nuzman <dorit@il.ibm.com>
+
+ PR tree-optimization/32224
+ * gcc.dg/vect/pr32224.c: New test.
+
2007-06-08 Jakub Jelinek <jakub@redhat.com>
PR c++/32177
diff --git a/gcc/testsuite/gcc.dg/vect/pr32224.c b/gcc/testsuite/gcc.dg/vect/pr32224.c
new file mode 100644
index 0000000..f79254d
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/vect/pr32224.c
@@ -0,0 +1,17 @@
+/* { dg-do compile } */
+typedef unsigned long int *mp_ptr;
+typedef const unsigned long int *mp_srcptr;
+gmpz_export (void *data)
+{
+ mp_srcptr zp;
+ int count, i;
+ mp_ptr __dst = ((mp_ptr) data);
+ mp_srcptr __src = (zp);
+
+ for (i = 0; i < count; i++)
+ {
+ __asm__ ("bswap %q0": "=r" (*__dst):"0" (*(__src)));
+ __src++;
+ }
+}
+/* { dg-final { cleanup-tree-dump "vect" } } */
diff --git a/gcc/tree-vect-analyze.c b/gcc/tree-vect-analyze.c
index 647d98f..454cae6 100644
--- a/gcc/tree-vect-analyze.c
+++ b/gcc/tree-vect-analyze.c
@@ -173,9 +173,6 @@ vect_determine_vectorization_factor (loop_vec_info loop_vinfo)
print_generic_expr (vect_dump, stmt, TDF_SLIM);
}
- if (TREE_CODE (stmt) != GIMPLE_MODIFY_STMT)
- continue;
-
gcc_assert (stmt_info);
/* skip stmts which do not need to be vectorized. */
@@ -187,6 +184,16 @@ vect_determine_vectorization_factor (loop_vec_info loop_vinfo)
continue;
}
+ if (TREE_CODE (stmt) != GIMPLE_MODIFY_STMT)
+ {
+ if (vect_print_dump_info (REPORT_UNVECTORIZED_LOOPS))
+ {
+ fprintf (vect_dump, "not vectorized: irregular stmt.");
+ print_generic_expr (vect_dump, stmt, TDF_SLIM);
+ }
+ return false;
+ }
+
if (!GIMPLE_STMT_P (stmt)
&& VECTOR_MODE_P (TYPE_MODE (TREE_TYPE (stmt))))
{