From 0d2665809fd15fe7c5ee73a7adee1ae64a002ffd Mon Sep 17 00:00:00 2001 From: Dorit Nuzman Date: Fri, 8 Jun 2007 08:57:54 +0000 Subject: [PATCH] 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 --- gcc/ChangeLog | 6 ++++++ gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/gcc.dg/vect/pr32224.c | 17 +++++++++++++++++ gcc/tree-vect-analyze.c | 13 ++++++++++--- 4 files changed, 38 insertions(+), 3 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/vect/pr32224.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 583ba38eff8..5ebdcd42f0e 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2007-06-08 Dorit Nuzman + + 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 PR target/29953 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 598af903b6a..6102817e854 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2007-06-08 Dorit Nuzman + + PR tree-optimization/32224 + * gcc.dg/vect/pr32224.c: New test. + 2007-06-08 Jakub Jelinek 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 00000000000..f79254d9cae --- /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 647d98f82a6..454cae62cbf 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)))) {