diff options
author | Dorit Nuzman <dorit@il.ibm.com> | 2007-06-08 08:57:54 +0000 |
---|---|---|
committer | Dorit Nuzman <dorit@gcc.gnu.org> | 2007-06-08 08:57:54 +0000 |
commit | 0d2665809fd15fe7c5ee73a7adee1ae64a002ffd (patch) | |
tree | 756ce738929bc178e9949ba8d8f19c9c72248f0a | |
parent | 2dbc83d953662e61db936cac2ac25f907895205e (diff) | |
download | gcc-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/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/vect/pr32224.c | 17 | ||||
-rw-r--r-- | gcc/tree-vect-analyze.c | 13 |
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)))) { |