From e47352fb8981e74867d70acfac40127787e3fce2 Mon Sep 17 00:00:00 2001
From: victork <victork@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Mon, 5 Jun 2006 08:56:49 +0000
Subject: [PATCH] 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.




git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@114386 138bc75d-0d04-0410-961f-82ee72b054a4
---
 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 66df5a9763fc..25d431177148 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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>
 
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index a47d993bd778..5327821839f3 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -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
diff --git a/gcc/testsuite/gcc.dg/vect/vect.exp b/gcc/testsuite/gcc.dg/vect/vect.exp
index 499ef00da589..2873b5860ee7 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 b6538a4b46dd..c0d783474de1 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);
 	}
     }
 
-- 
GitLab