changeset 9498:d0b3fa50e306

lower FixedGuardNode to if-condition-deopt in after-guard lowering
author Lukas Stadler <lukas.stadler@jku.at>
date Tue, 30 Apr 2013 13:25:05 +0200
parents 394f1232d563
children e37aca5c2062
files graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/FixedGuardNode.java
diffstat 1 files changed, 16 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/FixedGuardNode.java	Thu Apr 25 17:19:41 2013 +0200
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/FixedGuardNode.java	Tue Apr 30 13:25:05 2013 +0200
@@ -27,6 +27,7 @@
 import com.oracle.graal.graph.*;
 import com.oracle.graal.nodes.spi.*;
 import com.oracle.graal.nodes.type.*;
+import com.oracle.graal.nodes.util.*;
 
 @NodeInfo(nameTemplate = "FixedGuard(!={p#negated}) {p#reason/s}")
 public final class FixedGuardNode extends FixedWithNextNode implements Simplifiable, Lowerable, Node.IterableNodeType, Negatable {
@@ -97,7 +98,21 @@
 
     @Override
     public void lower(LoweringTool tool, LoweringType loweringType) {
-        tool.getRuntime().lower(this, tool);
+        if (loweringType == LoweringType.BEFORE_GUARDS) {
+            tool.getRuntime().lower(this, tool);
+        } else {
+            FixedNode next = next();
+            setNext(null);
+            DeoptimizeNode deopt = graph().add(new DeoptimizeNode(action, reason));
+            IfNode ifNode;
+            if (negated) {
+                ifNode = graph().add(new IfNode(condition, deopt, next, 0));
+            } else {
+                ifNode = graph().add(new IfNode(condition, next, deopt, 1));
+            }
+            ((FixedWithNextNode) predecessor()).setNext(ifNode);
+            GraphUtil.killWithUnusedFloatingInputs(this);
+        }
     }
 
     @Override