aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorZdenek Dvorak <dvorakz@suse.cz>2005-09-13 09:33:49 +0200
committerZdenek Dvorak <rakdver@gcc.gnu.org>2005-09-13 07:33:49 +0000
commitd7f0e25cd0e994e9f95e7709e0d6c6df587463a6 (patch)
treef9a56ea6be2456fbafe9f55bdd37a21e1c6bb92f /gcc
parent7823229bc310fe007b397365afe17ee5e039a3af (diff)
downloadgcc-d7f0e25cd0e994e9f95e7709e0d6c6df587463a6.zip
gcc-d7f0e25cd0e994e9f95e7709e0d6c6df587463a6.tar.gz
gcc-d7f0e25cd0e994e9f95e7709e0d6c6df587463a6.tar.bz2
re PR tree-optimization/23817 (ICE in check_loop_closed_ssa_use, at tree-ssa-loop-manip.c:398)
PR tree-optimize/23817 * tree-cfg.c (tree_merge_blocks): Preserve loop closed ssa. From-SVN: r104218
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/tree-cfg.c13
2 files changed, 16 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 0b7c8bd..e1900f9 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2005-09-13 Zdenek Dvorak <dvorakz@suse.cz>
+
+ PR tree-optimize/23817
+ * tree-cfg.c (tree_merge_blocks): Preserve loop closed ssa.
+
2005-09-13 Alan Modra <amodra@bigpond.net.au>
PR target/23774
diff --git a/gcc/tree-cfg.c b/gcc/tree-cfg.c
index 75c14f4..d5d466e 100644
--- a/gcc/tree-cfg.c
+++ b/gcc/tree-cfg.c
@@ -1314,8 +1314,17 @@ tree_merge_blocks (basic_block a, basic_block b)
{
tree def = PHI_RESULT (phi), use = PHI_ARG_DEF (phi, 0);
tree copy;
-
- if (!may_propagate_copy (def, use))
+ bool may_replace_uses = may_propagate_copy (def, use);
+
+ /* In case we have loops to care about, do not propagate arguments of
+ loop closed ssa phi nodes. */
+ if (current_loops
+ && is_gimple_reg (def)
+ && TREE_CODE (use) == SSA_NAME
+ && a->loop_father != b->loop_father)
+ may_replace_uses = false;
+
+ if (!may_replace_uses)
{
gcc_assert (is_gimple_reg (def));