# HG changeset patch # User Gilles Duboscq # Date 1383817556 -3600 # Node ID b6f66fb9f1063135c6b190aba25afe501af0e948 # Parent 44c0e08c4150134c7f631ab14fec32402567345e SnippetTemplate instantiation should replace snippet's start node with a valid anchor point not the caller's start node diff -r 44c0e08c4150 -r b6f66fb9f106 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/spi/LoweringTool.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/spi/LoweringTool.java Thu Nov 07 10:42:37 2013 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/spi/LoweringTool.java Thu Nov 07 10:45:56 2013 +0100 @@ -57,4 +57,6 @@ * Gets the closest fixed node preceding the node currently being lowered. */ FixedWithNextNode lastFixedNode(); + + GuardingNode getCurrentGuardAnchor(); } diff -r 44c0e08c4150 -r b6f66fb9f106 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 Thu Nov 07 10:42:37 2013 +0100 +++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/LoweringPhase.java Thu Nov 07 10:45:56 2013 +0100 @@ -94,6 +94,11 @@ } @Override + public GuardingNode getCurrentGuardAnchor() { + return guardAnchor; + } + + @Override public GuardingNode createNullCheckGuard(GuardedNode guardedNode, ValueNode object) { if (ObjectStamp.isObjectNonNull(object)) { // Short cut creation of null check guard if the object is known to be non-null. diff -r 44c0e08c4150 -r b6f66fb9f106 graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/SnippetTemplate.java --- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/SnippetTemplate.java Thu Nov 07 10:42:37 2013 +0100 +++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/SnippetTemplate.java Thu Nov 07 10:45:56 2013 +0100 @@ -885,7 +885,7 @@ FixedNode firstCFGNode = entryPointNode.next(); StructuredGraph replaceeGraph = replacee.graph(); IdentityHashMap replacements = bind(replaceeGraph, metaAccess, args); - replacements.put(entryPointNode, replaceeGraph.start()); + replacements.put(entryPointNode, BeginNode.prevBegin(replacee)); Map duplicates = replaceeGraph.addDuplicates(nodes, snippet, snippet.getNodeCount(), replacements); Debug.dump(replaceeGraph, "After inlining snippet %s", snippet.method()); @@ -981,7 +981,7 @@ FixedNode firstCFGNode = entryPointNode.next(); StructuredGraph replaceeGraph = replacee.graph(); IdentityHashMap replacements = bind(replaceeGraph, metaAccess, args); - replacements.put(entryPointNode, replaceeGraph.start()); + replacements.put(entryPointNode, tool.getCurrentGuardAnchor().asNode()); Map duplicates = replaceeGraph.addDuplicates(nodes, snippet, snippet.getNodeCount(), replacements); Debug.dump(replaceeGraph, "After inlining snippet %s", snippetCopy.method());