Mercurial > hg > truffle
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