# HG changeset patch # User Lukas Stadler # Date 1366723193 -7200 # Node ID 435bb9425124e673b904f9edb8c01dc0767f0c93 # Parent ba3dfa9e36d8510c71c8a79f4f81c85aa597793a added enum to Lowerable interface (before/after guard lowering) diff -r ba3dfa9e36d8 -r 435bb9425124 graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/FloatingReadTest.java --- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/FloatingReadTest.java Tue Apr 23 11:29:55 2013 +0200 +++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/FloatingReadTest.java Tue Apr 23 15:19:53 2013 +0200 @@ -29,6 +29,7 @@ import com.oracle.graal.graph.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.extended.*; +import com.oracle.graal.nodes.spi.Lowerable.*; import com.oracle.graal.phases.common.*; public class FloatingReadTest extends GraphScheduleTest { @@ -57,7 +58,7 @@ public void run() { StructuredGraph graph = parse(snippet); - new LoweringPhase(null, runtime(), replacements, new Assumptions(false)).apply(graph); + new LoweringPhase(null, runtime(), replacements, new Assumptions(false), LoweringType.BEFORE_GUARDS).apply(graph); new FloatingReadPhase().apply(graph); ReturnNode returnNode = null; diff -r ba3dfa9e36d8 -r 435bb9425124 graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/MemoryScheduleTest.java --- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/MemoryScheduleTest.java Tue Apr 23 11:29:55 2013 +0200 +++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/MemoryScheduleTest.java Tue Apr 23 15:19:53 2013 +0200 @@ -33,6 +33,7 @@ import com.oracle.graal.graph.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.extended.*; +import com.oracle.graal.nodes.spi.Lowerable.*; import com.oracle.graal.nodes.util.*; import com.oracle.graal.phases.*; import com.oracle.graal.phases.common.*; @@ -221,7 +222,7 @@ Assumptions assumptions = new Assumptions(false); new InliningPhase(runtime(), null, replacements, assumptions, null, getDefaultPhasePlan(), OptimisticOptimizations.ALL).apply(graph); } - new LoweringPhase(null, runtime(), replacements, new Assumptions(false)).apply(graph); + new LoweringPhase(null, runtime(), replacements, new Assumptions(false), LoweringType.BEFORE_GUARDS).apply(graph); if (mode == TestMode.WITHOUT_FRAMESTATES || mode == TestMode.INLINED_WITHOUT_FRAMESTATES) { for (Node node : graph.getNodes()) { if (node instanceof StateSplit) { diff -r ba3dfa9e36d8 -r 435bb9425124 graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/PushNodesThroughPiTest.java --- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/PushNodesThroughPiTest.java Tue Apr 23 11:29:55 2013 +0200 +++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/PushNodesThroughPiTest.java Tue Apr 23 15:19:53 2013 +0200 @@ -32,6 +32,7 @@ import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.calc.*; import com.oracle.graal.nodes.extended.*; +import com.oracle.graal.nodes.spi.Lowerable.*; import com.oracle.graal.phases.common.*; public class PushNodesThroughPiTest extends GraalCompilerTest { @@ -82,7 +83,7 @@ private StructuredGraph compileTestSnippet(final String snippet) { StructuredGraph graph = parse(snippet); - new LoweringPhase(null, runtime(), replacements, new Assumptions(false)).apply(graph); + new LoweringPhase(null, runtime(), replacements, new Assumptions(false), LoweringType.BEFORE_GUARDS).apply(graph); new CanonicalizerPhase.Instance(runtime(), null).apply(graph); new PushThroughPiPhase().apply(graph); new CanonicalizerPhase.Instance(runtime(), null).apply(graph); diff -r ba3dfa9e36d8 -r 435bb9425124 graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/ReadAfterCheckCastTest.java --- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/ReadAfterCheckCastTest.java Tue Apr 23 11:29:55 2013 +0200 +++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/ReadAfterCheckCastTest.java Tue Apr 23 15:19:53 2013 +0200 @@ -32,6 +32,7 @@ import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.calc.*; import com.oracle.graal.nodes.extended.*; +import com.oracle.graal.nodes.spi.Lowerable.*; import com.oracle.graal.phases.common.*; /* consider @@ -85,7 +86,7 @@ // structure changes significantly public void run() { StructuredGraph graph = parse(snippet); - new LoweringPhase(null, runtime(), replacements, new Assumptions(false)).apply(graph); + new LoweringPhase(null, runtime(), replacements, new Assumptions(false), LoweringType.BEFORE_GUARDS).apply(graph); new FloatingReadPhase().apply(graph); new EliminatePartiallyRedundantGuardsPhase(true, false).apply(graph); new ReadEliminationPhase().apply(graph); diff -r ba3dfa9e36d8 -r 435bb9425124 graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/WriteBarrierAdditionTest.java --- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/WriteBarrierAdditionTest.java Tue Apr 23 11:29:55 2013 +0200 +++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/WriteBarrierAdditionTest.java Tue Apr 23 15:19:53 2013 +0200 @@ -30,6 +30,7 @@ import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.extended.*; import com.oracle.graal.nodes.extended.WriteNode.WriteBarrierType; +import com.oracle.graal.nodes.spi.Lowerable.*; import com.oracle.graal.phases.common.*; public class WriteBarrierAdditionTest extends GraalCompilerTest { @@ -100,7 +101,7 @@ public void run() { StructuredGraph graph = parse(snippet); - new LoweringPhase(null, runtime(), replacements, new Assumptions(false)).apply(graph); + new LoweringPhase(null, runtime(), replacements, new Assumptions(false), LoweringType.BEFORE_GUARDS).apply(graph); new WriteBarrierAdditionPhase().apply(graph); Debug.dump(graph, "After Write Barrier Addition"); final int barriers = graph.getNodes(SerialWriteBarrier.class).count(); diff -r ba3dfa9e36d8 -r 435bb9425124 graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/GraalCompiler.java --- a/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/GraalCompiler.java Tue Apr 23 11:29:55 2013 +0200 +++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/GraalCompiler.java Tue Apr 23 15:19:53 2013 +0200 @@ -38,6 +38,7 @@ import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.cfg.*; import com.oracle.graal.nodes.spi.*; +import com.oracle.graal.nodes.spi.Lowerable.*; import com.oracle.graal.nodes.util.*; import com.oracle.graal.phases.*; import com.oracle.graal.phases.PhasePlan.PhasePosition; @@ -139,7 +140,7 @@ Suites.DEFAULT.getHighTier().apply(graph, highTierContext); - new LoweringPhase(target, runtime, replacements, assumptions).apply(graph); + new LoweringPhase(target, runtime, replacements, assumptions, LoweringType.BEFORE_GUARDS).apply(graph); MidTierContext midTierContext = new MidTierContext(runtime, assumptions, replacements); Suites.DEFAULT.getMidTier().apply(graph, midTierContext); @@ -153,7 +154,7 @@ plan.runPhases(PhasePosition.LOW_LEVEL, graph); - new LoweringPhase(target, runtime, replacements, assumptions).apply(graph); + new LoweringPhase(target, runtime, replacements, assumptions, LoweringType.AFTER_GUARDS).apply(graph); new FrameStateAssignmentPhase().apply(graph); diff -r ba3dfa9e36d8 -r 435bb9425124 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/CStringNode.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/CStringNode.java Tue Apr 23 11:29:55 2013 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/CStringNode.java Tue Apr 23 15:19:53 2013 +0200 @@ -44,7 +44,7 @@ } @Override - public void lower(LoweringTool tool) { + public void lower(LoweringTool tool, LoweringType loweringType) { byte[] formatBytes = string.getBytes(); long cstring = unsafe.allocateMemory(formatBytes.length + 1); for (int i = 0; i < formatBytes.length; i++) { diff -r ba3dfa9e36d8 -r 435bb9425124 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/HotSpotInstalledCodeExecuteNode.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/HotSpotInstalledCodeExecuteNode.java Tue Apr 23 11:29:55 2013 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/HotSpotInstalledCodeExecuteNode.java Tue Apr 23 15:19:53 2013 +0200 @@ -51,7 +51,7 @@ } @Override - public void lower(LoweringTool tool) { + public void lower(LoweringTool tool, LoweringType loweringType) { if (code.isConstant() && code.asConstant().asObject() instanceof HotSpotInstalledCode) { HotSpotInstalledCode hsCode = (HotSpotInstalledCode) code.asConstant().asObject(); InvokeNode invoke = replaceWithInvoke(tool.getRuntime()); diff -r ba3dfa9e36d8 -r 435bb9425124 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/InitializeArrayNode.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/InitializeArrayNode.java Tue Apr 23 11:29:55 2013 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/InitializeArrayNode.java Tue Apr 23 15:19:53 2013 +0200 @@ -82,7 +82,7 @@ } @Override - public void lower(LoweringTool tool) { + public void lower(LoweringTool tool, LoweringType loweringType) { tool.getRuntime().lower(this, tool); } diff -r ba3dfa9e36d8 -r 435bb9425124 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/InitializeObjectNode.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/InitializeObjectNode.java Tue Apr 23 11:29:55 2013 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/InitializeObjectNode.java Tue Apr 23 15:19:53 2013 +0200 @@ -64,7 +64,7 @@ } @Override - public void lower(LoweringTool tool) { + public void lower(LoweringTool tool, LoweringType loweringType) { tool.getRuntime().lower(this, tool); } } diff -r ba3dfa9e36d8 -r 435bb9425124 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/TLABAllocateNode.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/TLABAllocateNode.java Tue Apr 23 11:29:55 2013 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/TLABAllocateNode.java Tue Apr 23 15:19:53 2013 +0200 @@ -45,7 +45,7 @@ } @Override - public void lower(LoweringTool tool) { + public void lower(LoweringTool tool, LoweringType loweringType) { tool.getRuntime().lower(this, tool); } diff -r ba3dfa9e36d8 -r 435bb9425124 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/WriteBarrierPost.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/WriteBarrierPost.java Tue Apr 23 11:29:55 2013 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/WriteBarrierPost.java Tue Apr 23 15:19:53 2013 +0200 @@ -58,7 +58,7 @@ this.precise = precise; } - public void lower(LoweringTool generator) { + public void lower(LoweringTool generator, LoweringType loweringType) { generator.getRuntime().lower(this, generator); } } diff -r ba3dfa9e36d8 -r 435bb9425124 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/WriteBarrierPre.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/WriteBarrierPre.java Tue Apr 23 11:29:55 2013 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/WriteBarrierPre.java Tue Apr 23 15:19:53 2013 +0200 @@ -58,7 +58,7 @@ this.expectedObject = expectedObject; } - public void lower(LoweringTool generator) { + public void lower(LoweringTool generator, LoweringType loweringType) { generator.getRuntime().lower(this, generator); } diff -r ba3dfa9e36d8 -r 435bb9425124 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/CallSiteTargetNode.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/CallSiteTargetNode.java Tue Apr 23 11:29:55 2013 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/CallSiteTargetNode.java Tue Apr 23 15:19:53 2013 +0200 @@ -65,7 +65,7 @@ } @Override - public void lower(LoweringTool tool) { + public void lower(LoweringTool tool, LoweringType loweringType) { StructuredGraph graph = (StructuredGraph) graph(); ConstantNode target = getConstantCallTarget(tool.getRuntime(), tool.assumptions()); diff -r ba3dfa9e36d8 -r 435bb9425124 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 Tue Apr 23 11:29:55 2013 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/DeoptimizeNode.java Tue Apr 23 15:19:53 2013 +0200 @@ -51,7 +51,7 @@ } @Override - public void lower(LoweringTool tool) { + public void lower(LoweringTool tool, LoweringType loweringType) { tool.getRuntime().lower(this, tool); } diff -r ba3dfa9e36d8 -r 435bb9425124 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 Tue Apr 23 11:29:55 2013 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/FixedGuardNode.java Tue Apr 23 15:19:53 2013 +0200 @@ -96,7 +96,7 @@ } @Override - public void lower(LoweringTool tool) { + public void lower(LoweringTool tool, LoweringType loweringType) { tool.getRuntime().lower(this, tool); } diff -r ba3dfa9e36d8 -r 435bb9425124 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/InvokeNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/InvokeNode.java Tue Apr 23 11:29:55 2013 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/InvokeNode.java Tue Apr 23 15:19:53 2013 +0200 @@ -93,7 +93,7 @@ } @Override - public void lower(LoweringTool tool) { + public void lower(LoweringTool tool, LoweringType loweringType) { tool.getRuntime().lower(this, tool); } diff -r ba3dfa9e36d8 -r 435bb9425124 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/InvokeWithExceptionNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/InvokeWithExceptionNode.java Tue Apr 23 11:29:55 2013 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/InvokeWithExceptionNode.java Tue Apr 23 15:19:53 2013 +0200 @@ -128,7 +128,7 @@ } @Override - public void lower(LoweringTool tool) { + public void lower(LoweringTool tool, LoweringType loweringType) { tool.getRuntime().lower(this, tool); } diff -r ba3dfa9e36d8 -r 435bb9425124 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/SerialArrayRangeWriteBarrier.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/SerialArrayRangeWriteBarrier.java Tue Apr 23 11:29:55 2013 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/SerialArrayRangeWriteBarrier.java Tue Apr 23 15:19:53 2013 +0200 @@ -51,7 +51,7 @@ } - public void lower(LoweringTool generator) { + public void lower(LoweringTool generator, LoweringType loweringType) { generator.getRuntime().lower(this, generator); } diff -r ba3dfa9e36d8 -r 435bb9425124 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/SerialWriteBarrier.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/SerialWriteBarrier.java Tue Apr 23 11:29:55 2013 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/SerialWriteBarrier.java Tue Apr 23 15:19:53 2013 +0200 @@ -53,7 +53,8 @@ } @Override - public void lower(LoweringTool generator) { + public void lower(LoweringTool generator, LoweringType loweringType) { + assert loweringType == LoweringType.AFTER_GUARDS; generator.getRuntime().lower(this, generator); } } diff -r ba3dfa9e36d8 -r 435bb9425124 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 Tue Apr 23 11:29:55 2013 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/UnwindNode.java Tue Apr 23 15:19:53 2013 +0200 @@ -51,7 +51,7 @@ } @Override - public void lower(LoweringTool tool) { + public void lower(LoweringTool tool, LoweringType loweringType) { tool.getRuntime().lower(this, tool); } } diff -r ba3dfa9e36d8 -r 435bb9425124 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/ConvertNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/ConvertNode.java Tue Apr 23 11:29:55 2013 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/ConvertNode.java Tue Apr 23 15:19:53 2013 +0200 @@ -162,7 +162,7 @@ } @Override - public void lower(LoweringTool tool) { + public void lower(LoweringTool tool, LoweringType loweringType) { tool.getRuntime().lower(this, tool); } diff -r ba3dfa9e36d8 -r 435bb9425124 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerDivNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerDivNode.java Tue Apr 23 11:29:55 2013 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerDivNode.java Tue Apr 23 15:19:53 2013 +0200 @@ -103,7 +103,7 @@ } @Override - public void lower(LoweringTool tool) { + public void lower(LoweringTool tool, LoweringType loweringType) { tool.getRuntime().lower(this, tool); } diff -r ba3dfa9e36d8 -r 435bb9425124 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerRemNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerRemNode.java Tue Apr 23 11:29:55 2013 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerRemNode.java Tue Apr 23 15:19:53 2013 +0200 @@ -60,7 +60,7 @@ } @Override - public void lower(LoweringTool tool) { + public void lower(LoweringTool tool, LoweringType loweringType) { tool.getRuntime().lower(this, tool); } diff -r ba3dfa9e36d8 -r 435bb9425124 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/NormalizeCompareNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/NormalizeCompareNode.java Tue Apr 23 11:29:55 2013 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/NormalizeCompareNode.java Tue Apr 23 15:19:53 2013 +0200 @@ -48,7 +48,7 @@ } @Override - public void lower(LoweringTool tool) { + public void lower(LoweringTool tool, LoweringType loweringType) { StructuredGraph graph = (StructuredGraph) graph(); LogicNode equalComp; diff -r ba3dfa9e36d8 -r 435bb9425124 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/UnsignedDivNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/UnsignedDivNode.java Tue Apr 23 11:29:55 2013 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/UnsignedDivNode.java Tue Apr 23 15:19:53 2013 +0200 @@ -61,7 +61,7 @@ } @Override - public void lower(LoweringTool tool) { + public void lower(LoweringTool tool, LoweringType loweringType) { tool.getRuntime().lower(this, tool); } diff -r ba3dfa9e36d8 -r 435bb9425124 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/UnsignedRemNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/UnsignedRemNode.java Tue Apr 23 11:29:55 2013 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/UnsignedRemNode.java Tue Apr 23 15:19:53 2013 +0200 @@ -60,7 +60,7 @@ } @Override - public void lower(LoweringTool tool) { + public void lower(LoweringTool tool, LoweringType loweringType) { tool.getRuntime().lower(this, tool); } diff -r ba3dfa9e36d8 -r 435bb9425124 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/BoxNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/BoxNode.java Tue Apr 23 11:29:55 2013 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/BoxNode.java Tue Apr 23 15:19:53 2013 +0200 @@ -52,7 +52,7 @@ } @Override - public void lower(LoweringTool tool) { + public void lower(LoweringTool tool, LoweringType loweringType) { tool.getRuntime().lower(this, tool); } diff -r ba3dfa9e36d8 -r 435bb9425124 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/LoadHubNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/LoadHubNode.java Tue Apr 23 11:29:55 2013 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/LoadHubNode.java Tue Apr 23 15:19:53 2013 +0200 @@ -45,7 +45,7 @@ } @Override - public void lower(LoweringTool tool) { + public void lower(LoweringTool tool, LoweringType loweringType) { tool.getRuntime().lower(this, tool); } diff -r ba3dfa9e36d8 -r 435bb9425124 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/UnboxNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/UnboxNode.java Tue Apr 23 11:29:55 2013 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/UnboxNode.java Tue Apr 23 15:19:53 2013 +0200 @@ -47,7 +47,7 @@ } @Override - public void lower(LoweringTool tool) { + public void lower(LoweringTool tool, LoweringType loweringType) { tool.getRuntime().lower(this, tool); } diff -r ba3dfa9e36d8 -r 435bb9425124 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/UnsafeLoadNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/UnsafeLoadNode.java Tue Apr 23 11:29:55 2013 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/UnsafeLoadNode.java Tue Apr 23 15:19:53 2013 +0200 @@ -50,7 +50,7 @@ } @Override - public void lower(LoweringTool tool) { + public void lower(LoweringTool tool, LoweringType loweringType) { tool.getRuntime().lower(this, tool); } diff -r ba3dfa9e36d8 -r 435bb9425124 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/UnsafeStoreNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/UnsafeStoreNode.java Tue Apr 23 11:29:55 2013 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/UnsafeStoreNode.java Tue Apr 23 15:19:53 2013 +0200 @@ -69,7 +69,7 @@ } @Override - public void lower(LoweringTool tool) { + public void lower(LoweringTool tool, LoweringType loweringType) { tool.getRuntime().lower(this, tool); } diff -r ba3dfa9e36d8 -r 435bb9425124 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/AccessFieldNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/AccessFieldNode.java Tue Apr 23 11:29:55 2013 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/AccessFieldNode.java Tue Apr 23 15:19:53 2013 +0200 @@ -83,7 +83,7 @@ } @Override - public void lower(LoweringTool tool) { + public void lower(LoweringTool tool, LoweringType loweringType) { tool.getRuntime().lower(this, tool); } diff -r ba3dfa9e36d8 -r 435bb9425124 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/AccessIndexedNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/AccessIndexedNode.java Tue Apr 23 11:29:55 2013 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/AccessIndexedNode.java Tue Apr 23 15:19:53 2013 +0200 @@ -64,7 +64,7 @@ } @Override - public void lower(LoweringTool tool) { + public void lower(LoweringTool tool, LoweringType loweringType) { tool.getRuntime().lower(this, tool); } } diff -r ba3dfa9e36d8 -r 435bb9425124 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/ArrayLengthNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/ArrayLengthNode.java Tue Apr 23 11:29:55 2013 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/ArrayLengthNode.java Tue Apr 23 15:19:53 2013 +0200 @@ -62,7 +62,7 @@ } @Override - public void lower(LoweringTool tool) { + public void lower(LoweringTool tool, LoweringType loweringType) { tool.getRuntime().lower(this, tool); } diff -r ba3dfa9e36d8 -r 435bb9425124 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/CheckCastDynamicNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/CheckCastDynamicNode.java Tue Apr 23 11:29:55 2013 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/CheckCastDynamicNode.java Tue Apr 23 15:19:53 2013 +0200 @@ -47,7 +47,7 @@ } @Override - public void lower(LoweringTool tool) { + public void lower(LoweringTool tool, LoweringType loweringType) { tool.getRuntime().lower(this, tool); } diff -r ba3dfa9e36d8 -r 435bb9425124 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/CheckCastNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/CheckCastNode.java Tue Apr 23 11:29:55 2013 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/CheckCastNode.java Tue Apr 23 15:19:53 2013 +0200 @@ -52,7 +52,7 @@ } @Override - public void lower(LoweringTool tool) { + public void lower(LoweringTool tool, LoweringType loweringType) { tool.getRuntime().lower(this, tool); } diff -r ba3dfa9e36d8 -r 435bb9425124 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/CompareAndSwapNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/CompareAndSwapNode.java Tue Apr 23 11:29:55 2013 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/CompareAndSwapNode.java Tue Apr 23 15:19:53 2013 +0200 @@ -105,7 +105,7 @@ } @Override - public void lower(LoweringTool tool) { + public void lower(LoweringTool tool, LoweringType loweringType) { tool.getRuntime().lower(this, tool); } diff -r ba3dfa9e36d8 -r 435bb9425124 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/ExceptionObjectNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/ExceptionObjectNode.java Tue Apr 23 11:29:55 2013 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/ExceptionObjectNode.java Tue Apr 23 15:19:53 2013 +0200 @@ -53,7 +53,7 @@ } @Override - public void lower(LoweringTool tool) { + public void lower(LoweringTool tool, LoweringType loweringType) { if (isLowered()) { return; } diff -r ba3dfa9e36d8 -r 435bb9425124 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/InstanceOfDynamicNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/InstanceOfDynamicNode.java Tue Apr 23 11:29:55 2013 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/InstanceOfDynamicNode.java Tue Apr 23 15:19:53 2013 +0200 @@ -54,7 +54,7 @@ } @Override - public void lower(LoweringTool tool) { + public void lower(LoweringTool tool, LoweringType loweringType) { tool.getRuntime().lower(this, tool); } diff -r ba3dfa9e36d8 -r 435bb9425124 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/InstanceOfNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/InstanceOfNode.java Tue Apr 23 11:29:55 2013 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/InstanceOfNode.java Tue Apr 23 15:19:53 2013 +0200 @@ -52,7 +52,7 @@ } @Override - public void lower(LoweringTool tool) { + public void lower(LoweringTool tool, LoweringType loweringType) { tool.getRuntime().lower(this, tool); } diff -r ba3dfa9e36d8 -r 435bb9425124 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/LoadExceptionObjectNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/LoadExceptionObjectNode.java Tue Apr 23 11:29:55 2013 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/LoadExceptionObjectNode.java Tue Apr 23 15:19:53 2013 +0200 @@ -37,7 +37,7 @@ } @Override - public void lower(LoweringTool tool) { + public void lower(LoweringTool tool, LoweringType loweringType) { tool.getRuntime().lower(this, tool); } } diff -r ba3dfa9e36d8 -r 435bb9425124 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/MonitorEnterNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/MonitorEnterNode.java Tue Apr 23 11:29:55 2013 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/MonitorEnterNode.java Tue Apr 23 15:19:53 2013 +0200 @@ -48,7 +48,7 @@ return new Object[]{LocationNode.ANY_LOCATION}; } - public void lower(LoweringTool tool) { + public void lower(LoweringTool tool, LoweringType loweringType) { tool.getRuntime().lower(this, tool); } diff -r ba3dfa9e36d8 -r 435bb9425124 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/MonitorExitNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/MonitorExitNode.java Tue Apr 23 11:29:55 2013 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/MonitorExitNode.java Tue Apr 23 15:19:53 2013 +0200 @@ -49,7 +49,7 @@ return new Object[]{LocationNode.ANY_LOCATION}; } - public void lower(LoweringTool tool) { + public void lower(LoweringTool tool, LoweringType loweringType) { tool.getRuntime().lower(this, tool); } diff -r ba3dfa9e36d8 -r 435bb9425124 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/NewArrayNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/NewArrayNode.java Tue Apr 23 11:29:55 2013 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/NewArrayNode.java Tue Apr 23 15:19:53 2013 +0200 @@ -110,7 +110,7 @@ } @Override - public void lower(LoweringTool tool) { + public void lower(LoweringTool tool, LoweringType loweringType) { tool.getRuntime().lower(this, tool); } diff -r ba3dfa9e36d8 -r 435bb9425124 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/NewInstanceNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/NewInstanceNode.java Tue Apr 23 11:29:55 2013 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/NewInstanceNode.java Tue Apr 23 15:19:53 2013 +0200 @@ -87,7 +87,7 @@ } @Override - public void lower(LoweringTool tool) { + public void lower(LoweringTool tool, LoweringType loweringType) { tool.getRuntime().lower(this, tool); } diff -r ba3dfa9e36d8 -r 435bb9425124 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/NewMultiArrayNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/NewMultiArrayNode.java Tue Apr 23 11:29:55 2013 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/NewMultiArrayNode.java Tue Apr 23 15:19:53 2013 +0200 @@ -62,7 +62,7 @@ } @Override - public void lower(LoweringTool tool) { + public void lower(LoweringTool tool, LoweringType loweringType) { tool.getRuntime().lower(this, tool); } diff -r ba3dfa9e36d8 -r 435bb9425124 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/spi/Lowerable.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/spi/Lowerable.java Tue Apr 23 11:29:55 2013 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/spi/Lowerable.java Tue Apr 23 15:19:53 2013 +0200 @@ -24,5 +24,9 @@ public interface Lowerable { - void lower(LoweringTool tool); + public enum LoweringType { + BEFORE_GUARDS, AFTER_GUARDS + } + + void lower(LoweringTool tool, LoweringType loweringType); } diff -r ba3dfa9e36d8 -r 435bb9425124 graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/LoweringPhase.java --- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/LoweringPhase.java Tue Apr 23 11:29:55 2013 +0200 +++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/LoweringPhase.java Tue Apr 23 15:19:53 2013 +0200 @@ -33,6 +33,7 @@ import com.oracle.graal.nodes.calc.*; import com.oracle.graal.nodes.cfg.*; import com.oracle.graal.nodes.spi.*; +import com.oracle.graal.nodes.spi.Lowerable.LoweringType; import com.oracle.graal.phases.*; import com.oracle.graal.phases.schedule.*; @@ -86,6 +87,9 @@ @Override public ValueNode createGuard(LogicNode condition, DeoptimizationReason deoptReason, DeoptimizationAction action, boolean negated) { + if (loweringType == LoweringType.AFTER_GUARDS) { + throw new GraalInternalError("Cannot create guards in after-guard lowering"); + } if (GraalOptions.OptEliminateGuards) { for (Node usage : condition.usages()) { if (!activeGuards.isNew(usage) && activeGuards.isMarked(usage) && ((GuardNode) usage).negated() == negated) { @@ -120,14 +124,16 @@ private final GraalCodeCacheProvider runtime; private final Replacements replacements; private final Assumptions assumptions; + private final LoweringType loweringType; private boolean deferred; - public LoweringPhase(TargetDescription target, GraalCodeCacheProvider runtime, Replacements replacements, Assumptions assumptions) { + public LoweringPhase(TargetDescription target, GraalCodeCacheProvider runtime, Replacements replacements, Assumptions assumptions, LoweringType loweringType) { this.target = target; this.runtime = runtime; this.replacements = replacements; this.assumptions = assumptions; + this.loweringType = loweringType; } private static boolean containsLowerable(NodeIterable nodes) { @@ -208,16 +214,16 @@ if (node.isAlive() && !processed.isMarked(node) && node instanceof Lowerable) { if (loweringTool.lastFixedNode() == null) { - // We cannot lower the node now because we don't have a fixed node to anchor the - // replacements. - // This can happen when previous lowerings in this lowering iteration deleted - // the BeginNode of this block. - // In the next iteration, we will have the new BeginNode available, and we can - // lower this node. + /* + * We cannot lower the node now because we don't have a fixed node to anchor the + * replacements. This can happen when previous lowerings in this lowering + * iteration deleted the BeginNode of this block. In the next iteration, we will + * have the new BeginNode available, and we can lower this node. + */ deferred = true; } else { processed.mark(node); - ((Lowerable) node).lower(loweringTool); + ((Lowerable) node).lower(loweringTool, loweringType); } } diff -r ba3dfa9e36d8 -r 435bb9425124 graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/DirectObjectStoreNode.java --- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/DirectObjectStoreNode.java Tue Apr 23 11:29:55 2013 +0200 +++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/DirectObjectStoreNode.java Tue Apr 23 15:19:53 2013 +0200 @@ -61,7 +61,7 @@ public static native void storeInt(Object obj, @ConstantNodeParameter int displacement, long offset, int value); @Override - public void lower(LoweringTool tool) { + public void lower(LoweringTool tool, LoweringType loweringType) { StructuredGraph graph = (StructuredGraph) this.graph(); IndexedLocationNode location = IndexedLocationNode.create(LocationNode.ANY_LOCATION, value.kind(), displacement, offset, graph, 1); WriteNode write = graph.add(new WriteNode(object, value, location, WriteBarrierType.NONE)); diff -r ba3dfa9e36d8 -r 435bb9425124 graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/MacroNode.java --- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/MacroNode.java Tue Apr 23 11:29:55 2013 +0200 +++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/MacroNode.java Tue Apr 23 15:19:53 2013 +0200 @@ -67,7 +67,7 @@ } @Override - public void lower(LoweringTool tool) { + public void lower(LoweringTool tool, LoweringType loweringType) { StructuredGraph snippetGraph = getSnippetGraph(tool); InvokeNode invoke = replaceWithInvoke(); diff -r ba3dfa9e36d8 -r 435bb9425124 graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/nodes/CyclicMaterializeStoreNode.java --- a/graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/nodes/CyclicMaterializeStoreNode.java Tue Apr 23 11:29:55 2013 +0200 +++ b/graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/nodes/CyclicMaterializeStoreNode.java Tue Apr 23 15:19:53 2013 +0200 @@ -68,7 +68,7 @@ } @Override - public void lower(LoweringTool tool) { + public void lower(LoweringTool tool, LoweringType loweringType) { StructuredGraph graph = (StructuredGraph) graph(); ResolvedJavaType type = object.objectStamp().type(); FixedWithNextNode store; diff -r ba3dfa9e36d8 -r 435bb9425124 graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/nodes/MaterializeObjectNode.java --- a/graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/nodes/MaterializeObjectNode.java Tue Apr 23 11:29:55 2013 +0200 +++ b/graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/nodes/MaterializeObjectNode.java Tue Apr 23 15:19:53 2013 +0200 @@ -79,7 +79,7 @@ } @Override - public void lower(LoweringTool tool) { + public void lower(LoweringTool tool, LoweringType loweringType) { virtualObject.materializeAt(this, values, isDefault(), lockCount); }