From facbf9482df37925486b53a299b35d3f4c504c30 Mon Sep 17 00:00:00 2001 From: Jan Hubicka Date: Sun, 4 Feb 2007 14:02:45 +0100 Subject: [PATCH] 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 --- gcc/ChangeLog | 9 +++++++++ gcc/tree-ssa-copyrename.c | 30 ++++++++++++++++-------------- gcc/tree-ssa-forwprop.c | 1 + 3 files changed, 26 insertions(+), 14 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 821430bcd8d..180e9c6e9c2 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ +2007-02-04 Jan Hubicka + + * 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. + 2007-02-04 Jan Hubicka * ipa-inline.c (try_inline): Improve debug output; work on already diff --git a/gcc/tree-ssa-copyrename.c b/gcc/tree-ssa-copyrename.c index 2311afa2212..e06de4caaf6 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. */ diff --git a/gcc/tree-ssa-forwprop.c b/gcc/tree-ssa-forwprop.c index ca1d0a81f91..446efa7434a 100644 --- a/gcc/tree-ssa-forwprop.c +++ b/gcc/tree-ssa-forwprop.c @@ -1003,6 +1003,7 @@ tree_ssa_forward_propagate_single_use_vars (void) if (forward_propagate_addr_expr (stmt, &some)) { release_defs (stmt); + todoflags |= TODO_remove_unused_locals; bsi_remove (&bsi, true); } else