aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Berlin <dberlin@dberlin.org>2005-02-17 16:29:56 +0000
committerDaniel Berlin <dberlin@gcc.gnu.org>2005-02-17 16:29:56 +0000
commiteae600b90684750ed2cfb91565b8e8aa99c15da9 (patch)
tree762d072b22825cfecc738ba7e168b8c2bfe2dee3
parent8bdbfff57ed2d012fd2fe4b7411a6c815957e8aa (diff)
downloadgcc-eae600b90684750ed2cfb91565b8e8aa99c15da9.zip
gcc-eae600b90684750ed2cfb91565b8e8aa99c15da9.tar.gz
gcc-eae600b90684750ed2cfb91565b8e8aa99c15da9.tar.bz2
lambda-code (perfect_nestify): Remove mark/unmark for rewriting hack.
2005-02-17 Daniel Berlin <dberlin@dberlin.org> * lambda-code (perfect_nestify): Remove mark/unmark for rewriting hack. * tree-loop-linear.c (linear_transform_loops): Add rewrite_into_ssa call so that ssa is correct for rewriting into loop closed. From-SVN: r95173
-rw-r--r--gcc/ChangeLog8
-rw-r--r--gcc/lambda-code.c17
-rw-r--r--gcc/tree-loop-linear.c1
3 files changed, 17 insertions, 9 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index a5511cc..c4eab1a 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,11 @@
+2005-02-17 Daniel Berlin <dberlin@dberlin.org>
+
+ * lambda-code (perfect_nestify): Remove mark/unmark
+ for rewriting hack.
+ * tree-loop-linear.c (linear_transform_loops): Add
+ rewrite_into_ssa call so that ssa is correct for
+ rewriting into loop closed.
+
2005-02-17 Nathan Sidwell <nathan@codesourcery.com>
* bitmap.h (BITMAP_XMALLOC, BITMAP_XFREE): Remove.
diff --git a/gcc/lambda-code.c b/gcc/lambda-code.c
index 01310cc..037be93 100644
--- a/gcc/lambda-code.c
+++ b/gcc/lambda-code.c
@@ -2314,23 +2314,23 @@ perfect_nestify (struct loops *loops,
preheaderbb = loop_split_edge_with (loop->single_exit, NULL);
headerbb = create_empty_bb (EXIT_BLOCK_PTR->prev_bb);
- /* This is done because otherwise, it will release the ssa_name too early
- when the edge gets redirected and it will get reused, causing the use of
- the phi node to get rewritten. */
-
+ /* Push the exit phi nodes that we are moving. */
for (phi = phi_nodes (olddest); phi; phi = PHI_CHAIN (phi))
{
VEC_safe_push (tree, phis, PHI_RESULT (phi));
VEC_safe_push (tree, phis, PHI_ARG_DEF (phi, 0));
- mark_for_rewrite (PHI_RESULT (phi));
}
e = redirect_edge_and_branch (EDGE_SUCC (preheaderbb, 0), headerbb);
- /* Remove the exit phis from the old basic block. */
+ /* Remove the exit phis from the old basic block. Make sure to set
+ PHI_RESULT to null so it doesn't get released. */
while (phi_nodes (olddest) != NULL)
- remove_phi_node (phi_nodes (olddest), NULL, olddest);
+ {
+ SET_PHI_RESULT (phi_nodes (olddest), NULL);
+ remove_phi_node (phi_nodes (olddest), NULL, olddest);
+ }
- /* and add them to the new basic block. */
+ /* and add them back to the new basic block. */
while (VEC_length (tree, phis) != 0)
{
tree def;
@@ -2341,7 +2341,6 @@ perfect_nestify (struct loops *loops,
add_phi_arg (phi, def, EDGE_PRED (preheaderbb, 0));
}
flush_pending_stmts (e);
- unmark_all_for_rewrite ();
bodybb = create_empty_bb (EXIT_BLOCK_PTR->prev_bb);
latchbb = create_empty_bb (EXIT_BLOCK_PTR->prev_bb);
diff --git a/gcc/tree-loop-linear.c b/gcc/tree-loop-linear.c
index 6c8bafe..b8c6201 100644
--- a/gcc/tree-loop-linear.c
+++ b/gcc/tree-loop-linear.c
@@ -374,6 +374,7 @@ linear_transform_loops (struct loops *loops)
}
free_df ();
scev_reset ();
+ rewrite_into_ssa (false);
rewrite_into_loop_closed_ssa ();
#ifdef ENABLE_CHECKING
verify_loop_closed_ssa ();