aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJim Wilson <wilson@gcc.gnu.org>1994-05-20 09:59:51 -0700
committerJim Wilson <wilson@gcc.gnu.org>1994-05-20 09:59:51 -0700
commitd902c7ead337606903a3744440b7a684854ba2cb (patch)
tree7ac16619953c1c3a8f64d5d4bd59afe13eaac3ce
parentf6709c70a8a8bd93173cbc9ff001e257e8d41a08 (diff)
downloadgcc-d902c7ead337606903a3744440b7a684854ba2cb.zip
gcc-d902c7ead337606903a3744440b7a684854ba2cb.tar.gz
gcc-d902c7ead337606903a3744440b7a684854ba2cb.tar.bz2
(expand_exit_loop_if_false): Emit conditional jump around
unconditional loop exit instead of conditional loop exit. From-SVN: r7346
-rw-r--r--gcc/stmt.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/gcc/stmt.c b/gcc/stmt.c
index 4af0f31..9d2c977 100644
--- a/gcc/stmt.c
+++ b/gcc/stmt.c
@@ -2267,7 +2267,17 @@ expand_exit_loop_if_false (whichloop, cond)
NULL_TREE);
}
else
- do_jump (cond, whichloop->data.loop.end_label, NULL_RTX);
+ {
+ /* In order to handle fixups, we actually create a conditional jump
+ around a unconditional branch to exit the loop. If fixups are
+ necessary, they go before the unconditional branch. */
+
+ rtx label = gen_label_rtx ();
+ do_jump (cond, NULL_RTX, label);
+ expand_goto_internal (NULL_TREE, whichloop->data.loop.end_label,
+ NULL_RTX);
+ emit_label (label);
+ }
return 1;
}