OSDN Git Service

(expand_exit_loop_if_false): Emit conditional jump around
authorwilson <wilson@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 20 May 1994 16:59:51 +0000 (16:59 +0000)
committerwilson <wilson@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 20 May 1994 16:59:51 +0000 (16:59 +0000)
unconditional loop exit instead of conditional loop exit.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@7346 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/stmt.c

index 4af0f31..9d2c977 100644 (file)
@@ -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;
 }