From cd904438998666ba1818109a7fb0a3d9a396e074 Mon Sep 17 00:00:00 2001
From: dberlin <dberlin@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Sat, 8 Apr 2006 21:50:04 +0000
Subject: [PATCH] 2006-04-08  Daniel Berlin  <dberlin@dberlin.org>

	* tree.h (tree_memory_tag): Add old_used_alone.
	(SMT_OLD_USED_ALONE): New macro.
	* tree-ssa-alias.c (recalculate_used_alone): Stop
	marking things for renaming unnecessarily.



git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@112789 138bc75d-0d04-0410-961f-82ee72b054a4
---
 gcc/ChangeLog        |  7 +++++++
 gcc/tree-ssa-alias.c | 11 +++++++++--
 gcc/tree.h           |  6 ++++++
 3 files changed, 22 insertions(+), 2 deletions(-)

diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 8f91736fdc9b..e344f9eff148 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+2006-04-08  Daniel Berlin  <dberlin@dberlin.org>
+
+	* tree.h (tree_memory_tag): Add old_used_alone.
+	(SMT_OLD_USED_ALONE): New macro.
+	* tree-ssa-alias.c (recalculate_used_alone): Stop
+	marking things for renaming unnecessarily.
+
 2006-04-08  Kazu Hirata  <kazu@codesourcery.com>
 
 	* builtins.c, config/arm/arm.c, config/i386/cygwin.h,
diff --git a/gcc/tree-ssa-alias.c b/gcc/tree-ssa-alias.c
index f0d16d452a6a..3ad4b0ffe1c0 100644
--- a/gcc/tree-ssa-alias.c
+++ b/gcc/tree-ssa-alias.c
@@ -443,7 +443,10 @@ recalculate_used_alone (void)
   updating_used_alone = true;
   FOR_EACH_REFERENCED_VAR (var, rvi)
     if (TREE_CODE (var) == SYMBOL_MEMORY_TAG)
-      SMT_USED_ALONE (var) = 0;
+      {
+	SMT_OLD_USED_ALONE (var) = SMT_USED_ALONE (var);
+	SMT_USED_ALONE (var) = 0;
+      }
 
   /* Walk all the statements.
      Calls get put into a list of statements to update, since we will
@@ -476,7 +479,11 @@ recalculate_used_alone (void)
 		      if (!SMT_USED_ALONE (svar))
 			{
 			  SMT_USED_ALONE (svar) = true;
-			  mark_sym_for_renaming (svar);
+
+			  /* Only need to mark for renaming if it wasn't
+			     used alone before.  */
+			  if (!SMT_OLD_USED_ALONE (svar))
+			    mark_sym_for_renaming (svar);
 			}
 		    }
 		}
diff --git a/gcc/tree.h b/gcc/tree.h
index 27f4b0fd76ab..b3bc004f4c5a 100644
--- a/gcc/tree.h
+++ b/gcc/tree.h
@@ -2312,6 +2312,7 @@ struct tree_memory_tag GTY(())
   struct tree_decl_minimal common;
   unsigned int is_global:1;
   unsigned int is_used_alone:1;
+  unsigned int old_used_alone:1;
 };
 
 #define MTAG_GLOBAL(NODE) (TREE_MEMORY_TAG_CHECK (NODE)->mtag.is_global)
@@ -2321,6 +2322,11 @@ struct tree_memory_tag GTY(())
    from it.  */
 #define SMT_USED_ALONE(NODE) (SYMBOL_MEMORY_TAG_CHECK (NODE)->mtag.is_used_alone)
 
+/* This flag is used to temporarily store the old value of the used alone
+   flag when updating so we know whether to mark the symbol for
+   renaming.  */
+#define SMT_OLD_USED_ALONE(NODE) (SYMBOL_MEMORY_TAG_CHECK (NODE)->mtag.old_used_alone)
+
 struct tree_struct_field_tag GTY(())
 {
   struct tree_memory_tag common;
-- 
GitLab