aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorKazu Hirata <kazu@cs.umass.edu>2004-11-09 14:59:49 +0000
committerKazu Hirata <kazu@gcc.gnu.org>2004-11-09 14:59:49 +0000
commit5ae717192480a725e5bd7f55acefc10ca47bbc07 (patch)
tree8c76c150e9f39fa9475275c99247a8e8042e0b7f /gcc
parent6571838f58d19afb32c2b8e4b03d2855373dd0e5 (diff)
downloadgcc-5ae717192480a725e5bd7f55acefc10ca47bbc07.zip
gcc-5ae717192480a725e5bd7f55acefc10ca47bbc07.tar.gz
gcc-5ae717192480a725e5bd7f55acefc10ca47bbc07.tar.bz2
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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/tree-cfg.c13
-rw-r--r--gcc/tree-flow.h1
-rw-r--r--gcc/tree-phinodes.c15
4 files changed, 26 insertions, 10 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 5ee1a5d..d9cd221 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,12 @@
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.
2004-11-09 James A. Morrison <phython@gcc.gnu.org>
diff --git a/gcc/tree-cfg.c b/gcc/tree-cfg.c
index 8dfaffb..8da78c8 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 829eff8..354f02c 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 0d621b5..a38a572 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"