# HG changeset patch # User Lukas Stadler # Date 1372426326 -7200 # Node ID 6b9ebfcf5fc529245f7e46e9552cab6a0968ef32 # Parent 070b4a3c56f3e9e1105c75b0591cb40c9568aae6 make BoxNode and UnboxNode floating diff -r 070b4a3c56f3 -r 6b9ebfcf5fc5 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotRuntime.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotRuntime.java Fri Jun 28 11:02:37 2013 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotRuntime.java Fri Jun 28 15:32:06 2013 +0200 @@ -799,9 +799,9 @@ } else if (n instanceof UnwindNode || n instanceof DeoptimizeNode) { // Nothing to do, using direct LIR lowering for these nodes. } else if (n instanceof BoxNode) { - boxingSnippets.lower((BoxNode) n); + boxingSnippets.lower((BoxNode) n, tool); } else if (n instanceof UnboxNode) { - boxingSnippets.lower((UnboxNode) n); + boxingSnippets.lower((UnboxNode) n, tool); } else { assert false : "Node implementing Lowerable not handled: " + n; throw GraalInternalError.shouldNotReachHere(); diff -r 070b4a3c56f3 -r 6b9ebfcf5fc5 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 Fri Jun 28 11:02:37 2013 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/BoxNode.java Fri Jun 28 15:32:06 2013 +0200 @@ -24,6 +24,7 @@ import com.oracle.graal.api.meta.*; import com.oracle.graal.nodes.*; +import com.oracle.graal.nodes.calc.*; import com.oracle.graal.nodes.spi.*; import com.oracle.graal.nodes.type.*; import com.oracle.graal.nodes.virtual.*; @@ -32,7 +33,7 @@ * This node represents the boxing of a primitive value. This corresponds to a call to the valueOf * methods in Integer, Long, etc. */ -public class BoxNode extends FixedWithNextNode implements VirtualizableAllocation, Lowerable, Canonicalizable { +public class BoxNode extends FloatingNode implements VirtualizableAllocation, Lowerable, Canonicalizable { @Input private ValueNode value; private final Kind boxingKind; diff -r 070b4a3c56f3 -r 6b9ebfcf5fc5 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 Fri Jun 28 11:02:37 2013 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/UnboxNode.java Fri Jun 28 15:32:06 2013 +0200 @@ -24,10 +24,11 @@ import com.oracle.graal.api.meta.*; import com.oracle.graal.nodes.*; +import com.oracle.graal.nodes.calc.*; import com.oracle.graal.nodes.spi.*; import com.oracle.graal.nodes.type.*; -public class UnboxNode extends FixedWithNextNode implements Virtualizable, Lowerable, Canonicalizable { +public class UnboxNode extends FloatingNode implements Virtualizable, Lowerable, Canonicalizable { @Input private ValueNode value; private final Kind boxingKind; diff -r 070b4a3c56f3 -r 6b9ebfcf5fc5 graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/BoxingSnippets.java --- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/BoxingSnippets.java Fri Jun 28 11:02:37 2013 +0200 +++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/BoxingSnippets.java Fri Jun 28 15:32:06 2013 +0200 @@ -37,6 +37,7 @@ import com.oracle.graal.nodes.extended.*; import com.oracle.graal.nodes.spi.*; import com.oracle.graal.nodes.type.*; +import com.oracle.graal.nodes.util.*; import com.oracle.graal.replacements.Snippet.Fold; import com.oracle.graal.replacements.Snippet.SnippetInliningPolicy; import com.oracle.graal.replacements.SnippetTemplate.AbstractTemplates; @@ -213,28 +214,30 @@ } } - public void lower(BoxNode box) { + public void lower(BoxNode box, LoweringTool tool) { FloatingNode canonical = canonicalizeBoxing(box, runtime); // if in AOT mode, we don't want to embed boxed constants. - if (!AOTCompilation.getValue() && canonical != null) { - box.graph().replaceFixedWithFloating(box, canonical); + if (canonical != null && !AOTCompilation.getValue()) { + box.graph().replaceFloating(box, canonical); } else { Arguments args = new Arguments(boxSnippets.get(box.getBoxingKind())); args.add("value", box.getValue()); SnippetTemplate template = template(args); Debug.log("Lowering integerValueOf in %s: node=%s, template=%s, arguments=%s", box.graph(), box, template, args); - template.instantiate(runtime, box, DEFAULT_REPLACER, args); + template.instantiate(runtime, box, DEFAULT_REPLACER, tool, args); + GraphUtil.killWithUnusedFloatingInputs(box); } } - public void lower(UnboxNode unbox) { + public void lower(UnboxNode unbox, LoweringTool tool) { Arguments args = new Arguments(unboxSnippets.get(unbox.getBoxingKind())); args.add("value", unbox.getValue()); SnippetTemplate template = template(args); Debug.log("Lowering integerValueOf in %s: node=%s, template=%s, arguments=%s", unbox.graph(), unbox, template, args); - template.instantiate(runtime, unbox, DEFAULT_REPLACER, args); + template.instantiate(runtime, unbox, DEFAULT_REPLACER, tool, args); + GraphUtil.killWithUnusedFloatingInputs(unbox); } } diff -r 070b4a3c56f3 -r 6b9ebfcf5fc5 graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/NodeIntrinsificationPhase.java --- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/NodeIntrinsificationPhase.java Fri Jun 28 11:02:37 2013 +0200 +++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/NodeIntrinsificationPhase.java Fri Jun 28 15:32:06 2013 +0200 @@ -304,7 +304,7 @@ } else if (usage instanceof UnboxNode) { UnboxNode unbox = (UnboxNode) usage; unbox.replaceAtUsages(intrinsifiedNode); - graph.removeFixed(unbox); + graph.removeFloating(unbox); Debug.log("%s: Removed an UnboxNode", Debug.contextSnapshot(JavaMethod.class)); } else if (usage instanceof MethodCallTargetNode) { MethodCallTargetNode checkCastCallTarget = (MethodCallTargetNode) usage;