From eae600b90684750ed2cfb91565b8e8aa99c15da9 Mon Sep 17 00:00:00 2001 From: Daniel Berlin Date: Thu, 17 Feb 2005 16:29:56 +0000 Subject: [PATCH] lambda-code (perfect_nestify): Remove mark/unmark for rewriting hack. 2005-02-17 Daniel Berlin * 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 --- gcc/ChangeLog | 8 ++++++++ gcc/lambda-code.c | 17 ++++++++--------- gcc/tree-loop-linear.c | 1 + 3 files changed, 17 insertions(+), 9 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index a5511cc0e4a..c4eab1a3b6c 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2005-02-17 Daniel Berlin + + * 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 * bitmap.h (BITMAP_XMALLOC, BITMAP_XFREE): Remove. diff --git a/gcc/lambda-code.c b/gcc/lambda-code.c index 01310cca0b9..037be930a43 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 6c8bafe89c3..b8c6201ff88 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 ();