< prev index next >
src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.replacements/src/org/graalvm/compiler/replacements/arraycopy/ArrayCopyNode.java
Print this page
@@ -33,27 +33,34 @@
import org.graalvm.compiler.nodes.spi.Lowerable;
import org.graalvm.compiler.nodes.spi.LoweringTool;
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<ArrayCopyNode> 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) {
return NamedLocationIdentity.getArrayLocation(elementKind);
}
@@ -62,6 +69,10 @@
@Override
public void lower(LoweringTool tool) {
tool.getLowerer().lower(this, tool);
}
+
+ public boolean killsAnyLocation() {
+ return forceAnyLocation;
+ }
}
< prev index next >