# HG changeset patch # User Lukas Stadler # Date 1367321105 -7200 # Node ID d0b3fa50e3062de099883a46a16022970ce5c9de # Parent 394f1232d56342d2a78b7d8077012282e84b8499 lower FixedGuardNode to if-condition-deopt in after-guard lowering diff -r 394f1232d563 -r d0b3fa50e306 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/FixedGuardNode.java --- 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