< prev index next >
src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/java/LoadIndexedNode.java
Print this page
*** 88,109 ****
}
}
@Override
public boolean inferStamp() {
! return updateStamp(createStamp(graph().getAssumptions(), array(), elementKind()));
}
@Override
public void virtualize(VirtualizerTool tool) {
ValueNode alias = tool.getAlias(array());
if (alias instanceof VirtualObjectNode) {
VirtualArrayNode virtual = (VirtualArrayNode) alias;
ValueNode indexValue = tool.getAlias(index());
int idx = indexValue.isConstant() ? indexValue.asJavaConstant().asInt() : -1;
if (idx >= 0 && idx < virtual.entryCount()) {
! tool.replaceWith(tool.getEntry(virtual, idx));
}
}
}
@Override
--- 88,115 ----
}
}
@Override
public boolean inferStamp() {
! return updateStamp(stamp.improveWith(createStamp(graph().getAssumptions(), array(), elementKind())));
}
@Override
public void virtualize(VirtualizerTool tool) {
ValueNode alias = tool.getAlias(array());
if (alias instanceof VirtualObjectNode) {
VirtualArrayNode virtual = (VirtualArrayNode) alias;
ValueNode indexValue = tool.getAlias(index());
int idx = indexValue.isConstant() ? indexValue.asJavaConstant().asInt() : -1;
if (idx >= 0 && idx < virtual.entryCount()) {
! ValueNode entry = tool.getEntry(virtual, idx);
! if (stamp.isCompatible(entry.stamp())) {
! tool.replaceWith(entry);
! } else {
! assert stamp().getStackKind() == JavaKind.Int && (entry.stamp().getStackKind() == JavaKind.Long || entry.getStackKind() == JavaKind.Double ||
! entry.getStackKind() == JavaKind.Illegal) : "Can only allow different stack kind two slot marker writes on one stot fields.";
! }
}
}
}
@Override
< prev index next >