From 712f1172209b203503199c653f103fb7fb817005 Mon Sep 17 00:00:00 2001 From: Ira Rosen Date: Wed, 24 Oct 2007 09:35:00 +0000 Subject: [PATCH] re PR tree-optimization/33804 (ICE in vect_transform_stmt, at tree-vect-transform.c:6131 with -ftree-vectorize) PR tree-optimization/33804 * tree-vect-transform.c (vectorizable_operation): Remove the checks that the vectorization is worthwhile from the transformation phase. From-SVN: r129599 --- gcc/ChangeLog | 7 +++++++ gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/gcc.dg/vect/pr33804.c | 17 +++++++++++++++++ gcc/tree-vect-transform.c | 11 +++++++---- 4 files changed, 36 insertions(+), 4 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/vect/pr33804.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 5c53f623f92..7ace9f99cba 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2007-10-24 Ira Rosen + + PR tree-optimization/33804 + * tree-vect-transform.c (vectorizable_operation): Remove the + checks that the vectorization is worthwhile from the transformation + phase. + 2007-10-24 Ira Rosen * tree-vect-analyze.c (vect_build_slp_tree): Return false if diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index f650910e64c..72bc44606b2 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2007-10-24 Ira Rosen + + PR tree-optimization/33804 + * gcc.dg/vect/pr33804.c: New testcase. + 2007-10-23 Jerry DeLisle PR forrtran/33849 diff --git a/gcc/testsuite/gcc.dg/vect/pr33804.c b/gcc/testsuite/gcc.dg/vect/pr33804.c new file mode 100644 index 00000000000..959ac67e1d6 --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/pr33804.c @@ -0,0 +1,17 @@ +/* { dg-do compile } */ +/* { dg-require-effective-target vect_int } */ + +void f(unsigned char *s, unsigned char *d, int n) { + int i; + for (i = 0; i < n; i += 4) { + d[i + 0] += s[i + 0]; + d[i + 1] += s[i + 1]; + d[i + 2] += s[i + 2]; + d[i + 3] += s[i + 3]; + } +} + +/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */ +/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 1 "vect" } } */ +/* { dg-final { cleanup-tree-dump "vect" } } */ + diff --git a/gcc/tree-vect-transform.c b/gcc/tree-vect-transform.c index 81abd36fadd..1f07605d67d 100644 --- a/gcc/tree-vect-transform.c +++ b/gcc/tree-vect-transform.c @@ -3858,18 +3858,21 @@ vectorizable_operation (tree stmt, block_stmt_iterator *bsi, tree *vec_stmt, { if (vect_print_dump_info (REPORT_DETAILS)) fprintf (vect_dump, "op not supported by target."); + /* Check only during analysis. */ if (GET_MODE_SIZE (vec_mode) != UNITS_PER_WORD - || LOOP_VINFO_VECT_FACTOR (loop_vinfo) - < vect_min_worthwhile_factor (code)) + || (LOOP_VINFO_VECT_FACTOR (loop_vinfo) + < vect_min_worthwhile_factor (code) + && !vec_stmt)) return false; if (vect_print_dump_info (REPORT_DETAILS)) fprintf (vect_dump, "proceeding using word mode."); } - /* Worthwhile without SIMD support? */ + /* Worthwhile without SIMD support? Check only during analysis. */ if (!VECTOR_MODE_P (TYPE_MODE (vectype)) && LOOP_VINFO_VECT_FACTOR (loop_vinfo) - < vect_min_worthwhile_factor (code)) + < vect_min_worthwhile_factor (code) + && !vec_stmt) { if (vect_print_dump_info (REPORT_DETAILS)) fprintf (vect_dump, "not worthwhile without SIMD support.");