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 <victork@il.ibm.com>

From-SVN: r114386
This commit is contained in:
Dorit Nuzman 2006-06-05 08:56:49 +00:00 committed by Victor Kaplansky
parent 6690a9e079
commit a8b2849215
4 changed files with 40 additions and 1 deletions

View File

@ -1,3 +1,10 @@
2006-06-05 Dorit Nuzman <dorit@il.ibm.com>
Victor Kaplansky <victork@il.ibm.com>
PR tree-optimization/26360
* tree-vectorizer.c (destroy_loop_vec_info): Remove (dead) pattern
stmts.
2006-06-04 Roger Sayle <roger@eyesopen.com>
Andrew Pinski <pinskia@physics.uc.edu>

View File

@ -1,3 +1,11 @@
2006-06-05 Dorit Nuzman <dorit@il.ibm.com>
Victor Kaplansky <victork@il.ibm.com>
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 <pault@gcc.gnu.org>
PR fortran/14067

View File

@ -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\]]] \

View File

@ -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);
}
}