# HG changeset patch # User Christian Wimmer # Date 1385150258 28800 # Node ID c65150049959bce7aa9a16763cdbb544fd7a0e0d # Parent aa9be8414779a8acc0ac5203bcc1e12993b73e22 Allow DeoptimizeNode and UnwindNode to be lowered diff -r aa9be8414779 -r c65150049959 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotLoweringProvider.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotLoweringProvider.java Fri Nov 22 11:56:46 2013 -0800 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotLoweringProvider.java Fri Nov 22 11:57:38 2013 -0800 @@ -520,6 +520,8 @@ boxingSnippets.lower((BoxNode) n, tool); } else if (n instanceof UnboxNode) { boxingSnippets.lower((UnboxNode) n, tool); + } else if (n instanceof DeoptimizeNode || n instanceof UnwindNode) { + /* No lowering, we generate LIR directly for these nodes. */ } else { assert false : "Node implementing Lowerable not handled: " + n; throw GraalInternalError.shouldNotReachHere(); diff -r aa9be8414779 -r c65150049959 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/DeoptimizeNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/DeoptimizeNode.java Fri Nov 22 11:56:46 2013 -0800 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/DeoptimizeNode.java Fri Nov 22 11:57:38 2013 -0800 @@ -27,7 +27,7 @@ import com.oracle.graal.nodes.spi.*; @NodeInfo(shortName = "Deopt", nameTemplate = "Deopt {p#reason/s}") -public class DeoptimizeNode extends AbstractDeoptimizeNode implements LIRLowerable { +public class DeoptimizeNode extends AbstractDeoptimizeNode implements Lowerable, LIRLowerable { private final DeoptimizationAction action; private final DeoptimizationReason reason; @@ -54,6 +54,11 @@ } @Override + public void lower(LoweringTool tool) { + tool.getLowerer().lower(this, tool); + } + + @Override public void generate(LIRGeneratorTool gen) { gen.emitDeoptimize(gen.getMetaAccess().encodeDeoptActionAndReason(action, reason, speculationId), this); } diff -r aa9be8414779 -r c65150049959 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/UnwindNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/UnwindNode.java Fri Nov 22 11:56:46 2013 -0800 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/UnwindNode.java Fri Nov 22 11:57:38 2013 -0800 @@ -29,7 +29,7 @@ /** * Unwinds the current frame to an exception handler in the caller frame. */ -public final class UnwindNode extends ControlSinkNode implements LIRLowerable { +public final class UnwindNode extends ControlSinkNode implements Lowerable, LIRLowerable { @Input private ValueNode exception; @@ -44,6 +44,11 @@ } @Override + public void lower(LoweringTool tool) { + tool.getLowerer().lower(this, tool); + } + + @Override public void generate(LIRGeneratorTool gen) { gen.emitUnwind(gen.operand(exception())); }