aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-ssa-loop-manip.c
diff options
context:
space:
mode:
authorZdenek Dvorak <rakdver@atrey.karlin.mff.cuni.cz>2004-09-12 22:20:58 +0200
committerZdenek Dvorak <rakdver@gcc.gnu.org>2004-09-12 20:20:58 +0000
commit7fac672272cce6ed7e6e8ca9a54116d40f303dd7 (patch)
tree92287a41e394dedad2c7931504cf35555ea68d16 /gcc/tree-ssa-loop-manip.c
parent8591459399b4773e629a008433fd4979e7bddd45 (diff)
downloadgcc-7fac672272cce6ed7e6e8ca9a54116d40f303dd7.zip
gcc-7fac672272cce6ed7e6e8ca9a54116d40f303dd7.tar.gz
gcc-7fac672272cce6ed7e6e8ca9a54116d40f303dd7.tar.bz2
tree-ssa-loop-manip.c (split_loop_exit_edge): Handle non-ssaname arguments of the phi nodes correctly.
* tree-ssa-loop-manip.c (split_loop_exit_edge): Handle non-ssaname arguments of the phi nodes correctly. From-SVN: r87405
Diffstat (limited to 'gcc/tree-ssa-loop-manip.c')
-rw-r--r--gcc/tree-ssa-loop-manip.c15
1 files changed, 12 insertions, 3 deletions
diff --git a/gcc/tree-ssa-loop-manip.c b/gcc/tree-ssa-loop-manip.c
index cde3ce8..e6ff8a8 100644
--- a/gcc/tree-ssa-loop-manip.c
+++ b/gcc/tree-ssa-loop-manip.c
@@ -395,17 +395,26 @@ split_loop_exit_edge (edge exit)
{
basic_block dest = exit->dest;
basic_block bb = loop_split_edge_with (exit, NULL);
- tree phi, new_phi, new_name;
+ tree phi, new_phi, new_name, name;
use_operand_p op_p;
for (phi = phi_nodes (dest); phi; phi = TREE_CHAIN (phi))
{
op_p = PHI_ARG_DEF_PTR_FROM_EDGE (phi, bb->succ);
- new_name = duplicate_ssa_name (USE_FROM_PTR (op_p), NULL);
+ name = USE_FROM_PTR (op_p);
+
+ /* If the argument of the phi node is a constant, we do not need
+ to keep it inside loop. */
+ if (TREE_CODE (name) != SSA_NAME)
+ continue;
+
+ /* Otherwise create an auxiliary phi node that will copy the value
+ of the ssa name out of the loop. */
+ new_name = duplicate_ssa_name (name, NULL);
new_phi = create_phi_node (new_name, bb);
SSA_NAME_DEF_STMT (new_name) = new_phi;
- add_phi_arg (&new_phi, USE_FROM_PTR (op_p), exit);
+ add_phi_arg (&new_phi, name, exit);
SET_USE (op_p, new_name);
}
}