OSDN Git Service

Changelog:
authorvictork <victork@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 5 Jun 2006 08:56:49 +0000 (08:56 +0000)
committervictork <victork@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 5 Jun 2006 08:56:49 +0000 (08:56 +0000)
        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.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@114386 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/vect/vect.exp
gcc/tree-vectorizer.c

index 66df5a9..25d4311 100644 (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>
 
 2006-06-04  Roger Sayle  <roger@eyesopen.com>
            Andrew Pinski  <pinskia@physics.uc.edu>
 
index a47d993..5327821 100644 (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
 2006-06-05  Paul Thomas  <pault@gcc.gnu.org>
 
        PR fortran/14067
index 499ef00..2873b58 100644 (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
 
 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\]]]  \
 # With -Os
 lappend DEFAULT_VECTCFLAGS "-Os"
 dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/Os-vect-*.\[cS\]]]  \
index b6538a4..c0d7834 100644 (file)
@@ -1467,7 +1467,7 @@ destroy_loop_vec_info (loop_vec_info loop_vinfo)
           set_stmt_info (ann, NULL);
         }
 
           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);
        {
          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)
            {
 
          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);
              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);
        }
     }
 
        }
     }