changeset 8224:df68f316a4c8

Merge.
author Roland Schatz <roland.schatz@oracle.com>
date Tue, 12 Mar 2013 15:36:27 +0100
parents b9eb0d939e60 (current diff) 3866e39b88b5 (diff)
children d5239d9bbfac
files
diffstat 1 files changed, 9 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/GuardLoweringPhase.java	Tue Mar 12 15:07:20 2013 +0100
+++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/GuardLoweringPhase.java	Tue Mar 12 15:36:27 2013 +0100
@@ -59,12 +59,19 @@
                 BeginNode trueSuccessor;
                 BeginNode falseSuccessor;
                 DeoptimizeNode deopt = graph.add(new DeoptimizeNode(guard.action(), guard.reason()));
+                BeginNode deoptBranch = BeginNode.begin(deopt);
+                Loop loop = block.getLoop();
+                while (loop != null) {
+                    LoopExitNode exit = graph.add(new LoopExitNode(loop.loopBegin()));
+                    graph.addBeforeFixed(deopt, exit);
+                    loop = loop.parent;
+                }
                 if (guard.negated()) {
-                    trueSuccessor = BeginNode.begin(deopt);
+                    trueSuccessor = deoptBranch;
                     falseSuccessor = fastPath;
                 } else {
                     trueSuccessor = fastPath;
-                    falseSuccessor = BeginNode.begin(deopt);
+                    falseSuccessor = deoptBranch;
                 }
                 IfNode ifNode = graph.add(new IfNode(guard.condition(), trueSuccessor, falseSuccessor, trueSuccessor == fastPath ? 1 : 0));
                 guard.replaceAndDelete(fastPath);