--- old/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.replacements/src/org/graalvm/compiler/replacements/arraycopy/ArrayCopyNode.java 2019-03-12 08:10:16.035835366 +0100 +++ new/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.replacements/src/org/graalvm/compiler/replacements/arraycopy/ArrayCopyNode.java 2019-03-12 08:10:15.675833035 +0100 @@ -35,23 +35,30 @@ import org.graalvm.compiler.replacements.nodes.BasicArrayCopyNode; import jdk.internal.vm.compiler.word.LocationIdentity; -import jdk.vm.ci.meta.JavaKind; - @NodeInfo public final class ArrayCopyNode extends BasicArrayCopyNode implements Lowerable { public static final NodeClass TYPE = NodeClass.create(ArrayCopyNode.class); - private JavaKind elementKind; + protected final boolean forceAnyLocation; public ArrayCopyNode(int bci, ValueNode src, ValueNode srcPos, ValueNode dst, ValueNode dstPos, ValueNode length) { + this(bci, src, srcPos, dst, dstPos, length, false); + } + + public ArrayCopyNode(int bci, ValueNode src, ValueNode srcPos, ValueNode dst, ValueNode dstPos, ValueNode length, boolean forceAnyLocation) { super(TYPE, src, srcPos, dst, dstPos, length, null, bci); - elementKind = ArrayCopySnippets.Templates.selectComponentKind(this); + this.forceAnyLocation = forceAnyLocation; + if (!forceAnyLocation) { + elementKind = ArrayCopySnippets.Templates.selectComponentKind(this); + } else { + assert elementKind == null; + } } @Override public LocationIdentity getLocationIdentity() { - if (elementKind == null) { + if (!forceAnyLocation && elementKind == null) { elementKind = ArrayCopySnippets.Templates.selectComponentKind(this); } if (elementKind != null) { @@ -64,4 +71,8 @@ public void lower(LoweringTool tool) { tool.getLowerer().lower(this, tool); } + + public boolean killsAnyLocation() { + return forceAnyLocation; + } }