From a8b28492159212fec3f0faf9dc49c80eef899561 Mon Sep 17 00:00:00 2001 From: Dorit Nuzman Date: Mon, 5 Jun 2006 08:56:49 +0000 Subject: [PATCH] re PR tree-optimization/26360 (Autovectorization of char -> int loop gets ICE) Changelog: PR tree-optimization/26360 * tree-vectorizer.c (destroy_loop_vec_info): Remove (dead) pattern stmts. testsuite/Changelog: PR tree-optimizations/26360 * gcc.dg/vect/vect.exp: Compile tests prefixed with "no-tree-dce" with -fno-tree-dce. * gcc.dg/vect/no-tree-dce-pr26360.c: New test. Co-Authored-By: Victor Kaplansky From-SVN: r114386 --- gcc/ChangeLog | 7 +++++++ gcc/testsuite/ChangeLog | 8 ++++++++ gcc/testsuite/gcc.dg/vect/vect.exp | 6 ++++++ gcc/tree-vectorizer.c | 20 +++++++++++++++++++- 4 files changed, 40 insertions(+), 1 deletion(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 66df5a9763f..25d43117714 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2006-06-05 Dorit Nuzman + Victor Kaplansky + + PR tree-optimization/26360 + * tree-vectorizer.c (destroy_loop_vec_info): Remove (dead) pattern + stmts. + 2006-06-04 Roger Sayle Andrew Pinski diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index a47d993bd77..5327821839f 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,11 @@ +2006-06-05 Dorit Nuzman + Victor Kaplansky + + PR tree-optimizations/26360 + * gcc.dg/vect/vect.exp: Compile tests prefixed with "no-tree-dce" + with -fno-tree-dce. + * gcc.dg/vect/no-tree-dce-pr26360.c: New test. + 2006-06-05 Paul Thomas PR fortran/14067 diff --git a/gcc/testsuite/gcc.dg/vect/vect.exp b/gcc/testsuite/gcc.dg/vect/vect.exp index 499ef00da58..2873b5860ee 100644 --- a/gcc/testsuite/gcc.dg/vect/vect.exp +++ b/gcc/testsuite/gcc.dg/vect/vect.exp @@ -115,6 +115,12 @@ lappend DEFAULT_VECTCFLAGS "-fdump-tree-dceloop-details" dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/dump-tree-dceloop-*.\[cS\]]] \ "" $DEFAULT_VECTCFLAGS +# -fno-tree-dce tests +set DEFAULT_VECTCFLAGS $SAVED_DEFAULT_VECTCFLAGS +lappend DEFAULT_VECTCFLAGS "-fno-tree-dce" +dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/no-tree-dce-*.\[cS\]]] \ + "" $DEFAULT_VECTCFLAGS + # With -Os lappend DEFAULT_VECTCFLAGS "-Os" dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/Os-vect-*.\[cS\]]] \ diff --git a/gcc/tree-vectorizer.c b/gcc/tree-vectorizer.c index b6538a4b46d..c0d783474de 100644 --- a/gcc/tree-vectorizer.c +++ b/gcc/tree-vectorizer.c @@ -1467,7 +1467,7 @@ destroy_loop_vec_info (loop_vec_info loop_vinfo) set_stmt_info (ann, NULL); } - for (si = bsi_start (bb); !bsi_end_p (si); bsi_next (&si)) + for (si = bsi_start (bb); !bsi_end_p (si); ) { tree stmt = bsi_stmt (si); stmt_ann_t ann = stmt_ann (stmt); @@ -1475,10 +1475,28 @@ destroy_loop_vec_info (loop_vec_info loop_vinfo) if (stmt_info) { + /* Check if this is a "pattern stmt" (introduced by the + vectorizer during the pattern recognition pass). */ + bool remove_stmt_p = false; + tree orig_stmt = STMT_VINFO_RELATED_STMT (stmt_info); + if (orig_stmt) + { + stmt_vec_info orig_stmt_info = vinfo_for_stmt (orig_stmt); + if (orig_stmt_info + && STMT_VINFO_IN_PATTERN_P (orig_stmt_info)) + remove_stmt_p = true; + } + + /* Free stmt_vec_info. */ VEC_free (dr_p, heap, STMT_VINFO_SAME_ALIGN_REFS (stmt_info)); free (stmt_info); set_stmt_info ((tree_ann_t)ann, NULL); + + /* Remove dead "pattern stmts". */ + if (remove_stmt_p) + bsi_remove (&si, true); } + bsi_next (&si); } } -- 2.43.5