aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-ssa-copyrename.c
diff options
context:
space:
mode:
authorJan Hubicka <jh@suse.cz>2007-02-04 14:02:45 +0100
committerJan Hubicka <hubicka@gcc.gnu.org>2007-02-04 13:02:45 +0000
commitfacbf9482df37925486b53a299b35d3f4c504c30 (patch)
tree373031b3d25c6165ed4fbc6219e4c6e3bc6cae1f /gcc/tree-ssa-copyrename.c
parent22ad64b60c48637d63afc5b0b4d38a5568b25aa3 (diff)
downloadgcc-facbf9482df37925486b53a299b35d3f4c504c30.zip
gcc-facbf9482df37925486b53a299b35d3f4c504c30.tar.gz
gcc-facbf9482df37925486b53a299b35d3f4c504c30.tar.bz2
tree-ssa-copyrename.c (copy_rename_partition_coalesce): Return true when something was changed.
* tree-ssa-copyrename.c (copy_rename_partition_coalesce): Return true when something was changed. (rename_ssa_copies): When something was changed, do TODO_remove_unused_locals. * tree-ssa-forwprop.c (tree_ssa_forward_propagate_single_use_value): add TODO_remove_unused_locals when instruction was removed. From-SVN: r121571
Diffstat (limited to 'gcc/tree-ssa-copyrename.c')
-rw-r--r--gcc/tree-ssa-copyrename.c30
1 files changed, 16 insertions, 14 deletions
diff --git a/gcc/tree-ssa-copyrename.c b/gcc/tree-ssa-copyrename.c
index 2311afa..e06de4c 100644
--- a/gcc/tree-ssa-copyrename.c
+++ b/gcc/tree-ssa-copyrename.c
@@ -109,7 +109,7 @@ Boston, MA 02110-1301, USA. */
/* Coalesce the partitions in MAP representing VAR1 and VAR2 if it is valid.
Choose a representative for the partition, and send debug info to DEBUG. */
-static void
+static bool
copy_rename_partition_coalesce (var_map map, tree var1, tree var2, FILE *debug)
{
int p1, p2, p3;
@@ -151,7 +151,7 @@ copy_rename_partition_coalesce (var_map map, tree var1, tree var2, FILE *debug)
{
if (debug)
fprintf (debug, " : Already coalesced.\n");
- return;
+ return false;
}
/* Don't coalesce if one of the variables occurs in an abnormal PHI. */
@@ -161,7 +161,7 @@ copy_rename_partition_coalesce (var_map map, tree var1, tree var2, FILE *debug)
{
if (debug)
fprintf (debug, " : Abnormal PHI barrier. No coalesce.\n");
- return;
+ return false;
}
/* Partitions already have the same root, simply merge them. */
@@ -170,7 +170,7 @@ copy_rename_partition_coalesce (var_map map, tree var1, tree var2, FILE *debug)
p1 = partition_union (map->var_partition, p1, p2);
if (debug)
fprintf (debug, " : Same root, coalesced --> P%d.\n", p1);
- return;
+ return false;
}
/* Never attempt to coalesce 2 difference parameters. */
@@ -178,14 +178,14 @@ copy_rename_partition_coalesce (var_map map, tree var1, tree var2, FILE *debug)
{
if (debug)
fprintf (debug, " : 2 different PARM_DECLS. No coalesce.\n");
- return;
+ return false;
}
if ((TREE_CODE (root1) == RESULT_DECL) != (TREE_CODE (root2) == RESULT_DECL))
{
if (debug)
fprintf (debug, " : One root a RESULT_DECL. No coalesce.\n");
- return;
+ return false;
}
ign1 = TREE_CODE (root1) == VAR_DECL && DECL_IGNORED_P (root1);
@@ -203,7 +203,7 @@ copy_rename_partition_coalesce (var_map map, tree var1, tree var2, FILE *debug)
{
if (debug)
fprintf (debug, " : 2 different USER vars. No coalesce.\n");
- return;
+ return false;
}
}
@@ -214,7 +214,7 @@ copy_rename_partition_coalesce (var_map map, tree var1, tree var2, FILE *debug)
{
if (debug)
fprintf (debug, " : 2 memory tags. No coalesce.\n");
- return;
+ return false;
}
/* If both values have default defs, we can't coalesce. If only one has a
@@ -225,7 +225,7 @@ copy_rename_partition_coalesce (var_map map, tree var1, tree var2, FILE *debug)
{
if (debug)
fprintf (debug, " : 2 default defs. No coalesce.\n");
- return;
+ return false;
}
else
{
@@ -244,7 +244,7 @@ copy_rename_partition_coalesce (var_map map, tree var1, tree var2, FILE *debug)
{
if (debug)
fprintf (debug, " : Incompatible types. No coalesce.\n");
- return;
+ return false;
}
/* Don't coalesce if the aliasing sets of the types are different. */
@@ -255,7 +255,7 @@ copy_rename_partition_coalesce (var_map map, tree var1, tree var2, FILE *debug)
{
if (debug)
fprintf (debug, " : 2 different aliasing sets. No coalesce.\n");
- return;
+ return false;
}
@@ -283,6 +283,7 @@ copy_rename_partition_coalesce (var_map map, tree var1, tree var2, FILE *debug)
TDF_SLIM);
fprintf (debug, "\n");
}
+ return true;
}
@@ -301,6 +302,7 @@ rename_ssa_copies (void)
tree phi, stmt, var, part_var;
unsigned x;
FILE *debug;
+ bool updated = false;
if (dump_file && (dump_flags & TDF_DETAILS))
debug = dump_file;
@@ -321,7 +323,7 @@ rename_ssa_copies (void)
tree rhs = GIMPLE_STMT_OPERAND (stmt, 1);
if (TREE_CODE (lhs) == SSA_NAME && TREE_CODE (rhs) == SSA_NAME)
- copy_rename_partition_coalesce (map, lhs, rhs, debug);
+ updated |= copy_rename_partition_coalesce (map, lhs, rhs, debug);
}
}
}
@@ -342,7 +344,7 @@ rename_ssa_copies (void)
{
tree arg = PHI_ARG_DEF (phi, i);
if (TREE_CODE (arg) == SSA_NAME)
- copy_rename_partition_coalesce (map, res, arg, debug);
+ updated |= copy_rename_partition_coalesce (map, res, arg, debug);
}
}
}
@@ -374,7 +376,7 @@ rename_ssa_copies (void)
}
delete_var_map (map);
- return 0;
+ return updated ? TODO_remove_unused_locals : 0;
}
/* Return true if copy rename is to be performed. */