From 5ae717192480a725e5bd7f55acefc10ca47bbc07 Mon Sep 17 00:00:00 2001 From: Kazu Hirata Date: Tue, 9 Nov 2004 14:59:49 +0000 Subject: [PATCH] tree-phinodes.c (phi_reverse): New. * tree-phinodes.c (phi_reverse): New. * tree-cfg.c (tree_make_forwarder_block, tree_duplicate_bb): Use it. * tree-flow.h: Add a prototype for phi_reverse. From-SVN: r90344 --- gcc/ChangeLog | 7 +++++++ gcc/tree-cfg.c | 13 +++---------- gcc/tree-flow.h | 1 + gcc/tree-phinodes.c | 15 +++++++++++++++ 4 files changed, 26 insertions(+), 10 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 5ee1a5d54ee..d9cd2213d10 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2004-11-09 Kazu Hirata + + * tree-phinodes.c (phi_reverse): New. + * tree-cfg.c (tree_make_forwarder_block, tree_duplicate_bb): + Use it. + * tree-flow.h: Add a prototype for phi_reverse. + 2004-11-09 Kazu Hirata * tree-ssa-loop-ivopts.c: Fix a comment typo. diff --git a/gcc/tree-cfg.c b/gcc/tree-cfg.c index 8dfaffb13b0..8da78c8ff0d 100644 --- a/gcc/tree-cfg.c +++ b/gcc/tree-cfg.c @@ -3655,7 +3655,7 @@ tree_make_forwarder_block (edge fallthru) edge e; edge_iterator ei; basic_block dummy, bb; - tree phi, new_phi, var, prev, next; + tree phi, new_phi, var; dummy = fallthru->src; bb = fallthru->dest; @@ -3675,14 +3675,7 @@ tree_make_forwarder_block (edge fallthru) } /* Ensure that the PHI node chain is in the same order. */ - prev = NULL; - for (phi = phi_nodes (bb); phi; phi = next) - { - next = PHI_CHAIN (phi); - PHI_CHAIN (phi) = prev; - prev = phi; - } - set_phi_nodes (bb, prev); + set_phi_nodes (bb, phi_reverse (phi_nodes (bb))); /* Add the arguments we have stored on edges. */ FOR_EACH_EDGE (e, ei, bb->preds) @@ -4281,7 +4274,7 @@ tree_duplicate_bb (basic_block bb) mark_for_rewrite (PHI_RESULT (phi)); create_phi_node (PHI_RESULT (phi), new_bb); } - set_phi_nodes (new_bb, nreverse (phi_nodes (new_bb))); + set_phi_nodes (new_bb, phi_reverse (phi_nodes (new_bb))); bsi_tgt = bsi_start (new_bb); for (bsi = bsi_start (bb); !bsi_end_p (bsi); bsi_next (&bsi)) diff --git a/gcc/tree-flow.h b/gcc/tree-flow.h index 829eff8ef2c..354f02c0024 100644 --- a/gcc/tree-flow.h +++ b/gcc/tree-flow.h @@ -516,6 +516,7 @@ extern void remove_phi_arg (tree, basic_block); extern void remove_phi_arg_num (tree, int); extern void remove_phi_node (tree, tree, basic_block); extern void remove_all_phi_nodes_for (bitmap); +extern tree phi_reverse (tree); extern void dump_dfa_stats (FILE *); extern void debug_dfa_stats (void); extern void debug_referenced_vars (void); diff --git a/gcc/tree-phinodes.c b/gcc/tree-phinodes.c index 0d621b53339..a38a57273be 100644 --- a/gcc/tree-phinodes.c +++ b/gcc/tree-phinodes.c @@ -491,6 +491,21 @@ remove_all_phi_nodes_for (bitmap vars) } } +/* Reverse the order of PHI nodes in the chain PHI. + Return the new head of the chain (old last PHI node). */ + +tree +phi_reverse (tree phi) +{ + tree prev = NULL_TREE, next; + for (; phi; phi = next) + { + next = PHI_CHAIN (phi); + PHI_CHAIN (phi) = prev; + prev = phi; + } + return prev; +} #include "gt-tree-phinodes.h" -- 2.30.2