< 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,59 ****
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;
public ArrayCopyNode(int bci, ValueNode src, ValueNode srcPos, ValueNode dst, ValueNode dstPos, ValueNode length) {
super(TYPE, src, srcPos, dst, dstPos, length, null, bci);
! elementKind = ArrayCopySnippets.Templates.selectComponentKind(this);
}
@Override
public LocationIdentity getLocationIdentity() {
! if (elementKind == null) {
elementKind = ArrayCopySnippets.Templates.selectComponentKind(this);
}
if (elementKind != null) {
return NamedLocationIdentity.getArrayLocation(elementKind);
}
--- 33,66 ----
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;
@NodeInfo
public final class ArrayCopyNode extends BasicArrayCopyNode implements Lowerable {
public static final NodeClass<ArrayCopyNode> TYPE = NodeClass.create(ArrayCopyNode.class);
! 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);
! this.forceAnyLocation = forceAnyLocation;
! if (!forceAnyLocation) {
! elementKind = ArrayCopySnippets.Templates.selectComponentKind(this);
! } else {
! assert elementKind == null;
! }
}
@Override
public LocationIdentity getLocationIdentity() {
! if (!forceAnyLocation && elementKind == null) {
elementKind = ArrayCopySnippets.Templates.selectComponentKind(this);
}
if (elementKind != null) {
return NamedLocationIdentity.getArrayLocation(elementKind);
}
*** 62,67 ****
--- 69,78 ----
@Override
public void lower(LoweringTool tool) {
tool.getLowerer().lower(this, tool);
}
+
+ public boolean killsAnyLocation() {
+ return forceAnyLocation;
+ }
}
< prev index next >