]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR tree-optimization/32224 (ICE in vect_analyze_operations, at tree-vect-analyze...
authorDorit Nuzman <dorit@il.ibm.com>
Fri, 8 Jun 2007 08:57:54 +0000 (08:57 +0000)
committerDorit Nuzman <dorit@gcc.gnu.org>
Fri, 8 Jun 2007 08:57:54 +0000 (08:57 +0000)
        PR tree-optimization/32224
        * tree-vect-analyze.c (vect_determine_vectorization_factor): Fail
        vectorization upon a non GIMPLE_MODIFY_STMT.

From-SVN: r125566

gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/vect/pr32224.c [new file with mode: 0644]
gcc/tree-vect-analyze.c

index 583ba38eff8f6369df8f57ccc2441e9544397a68..5ebdcd42f0eedb709a544914a2ae22bba6498247 100644 (file)
@@ -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
index 598af903b6a92fdc600c6cc404fdc4d6d0c6c585..6102817e854c118b94bd03f43aa5fbf0d8fa3829 100644 (file)
@@ -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 (file)
index 0000000..f79254d
--- /dev/null
@@ -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" } } */
index 647d98f82a60bb72cf187ebc7e0fbb7489109cf3..454cae62cbfa23c8643f94c0eb404c661c584815 100644 (file)
@@ -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))))
            {