tree-phinodes.c (phi_reverse): New.
authorKazu Hirata <kazu@cs.umass.edu>
Tue, 9 Nov 2004 14:59:49 +0000 (14:59 +0000)
committerKazu Hirata <kazu@gcc.gnu.org>
Tue, 9 Nov 2004 14:59:49 +0000 (14:59 +0000)
* 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
gcc/tree-cfg.c
gcc/tree-flow.h
gcc/tree-phinodes.c

index 5ee1a5d54eeb5ada5c51c0e3d7a587180672eff1..d9cd2213d10a68d4942419388b0b67d1a2c7c291 100644 (file)
@@ -1,3 +1,10 @@
+2004-11-09  Kazu Hirata  <kazu@cs.umass.edu>
+
+       * 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  <kazu@cs.umass.edu>
 
        * tree-ssa-loop-ivopts.c: Fix a comment typo.
index 8dfaffb13b0e76522a87228b507459010f22f227..8da78c8ff0d92ae0374fea49b38d9a58b0f94ea5 100644 (file)
@@ -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))
index 829eff8ef2ce2d6a9cdf1dd7423c719667ec5714..354f02c0024712ae16950c8213b4e680ee67703f 100644 (file)
@@ -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);
index 0d621b5333967ae8759a6c94af8069ead0f79277..a38a57273be2f4801a7373d081f37ae57195b873 100644 (file)
@@ -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"