< prev index next >
src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/java/StoreFieldNode.java
Print this page
*** 27,46 ****
import org.graalvm.compiler.core.common.type.StampFactory;
import org.graalvm.compiler.graph.NodeClass;
import org.graalvm.compiler.nodeinfo.InputType;
import org.graalvm.compiler.nodeinfo.NodeCycles;
import org.graalvm.compiler.nodeinfo.NodeInfo;
- import org.graalvm.compiler.nodes.ConstantNode;
import org.graalvm.compiler.nodes.FrameState;
import org.graalvm.compiler.nodes.StateSplit;
import org.graalvm.compiler.nodes.ValueNode;
import org.graalvm.compiler.nodes.spi.Virtualizable;
import org.graalvm.compiler.nodes.spi.VirtualizerTool;
import org.graalvm.compiler.nodes.virtual.VirtualInstanceNode;
import org.graalvm.compiler.nodes.virtual.VirtualObjectNode;
- import jdk.vm.ci.meta.JavaConstant;
import jdk.vm.ci.meta.ResolvedJavaField;
/**
* The {@code StoreFieldNode} represents a write to a static or instance field.
*/
--- 27,44 ----
*** 88,106 ****
ValueNode alias = tool.getAlias(object());
if (alias instanceof VirtualObjectNode) {
VirtualInstanceNode virtual = (VirtualInstanceNode) alias;
int fieldIndex = virtual.fieldIndex(field());
if (fieldIndex != -1) {
! ValueNode existing = tool.getEntry((VirtualObjectNode) alias, fieldIndex);
! if (existing.stamp().isCompatible(value().stamp())) {
! tool.setVirtualEntry(virtual, fieldIndex, value(), false);
tool.delete();
- } else {
- // stamp of the value is not compatible with the value in the virtualizer
- // can only happen with unsafe two slot writes on one slot fields
- assert existing instanceof ConstantNode && ((ConstantNode) existing).asConstant().equals(JavaConstant.forIllegal()) : value.stamp() + " vs " + existing.stamp();
- }
}
}
}
public FrameState getState() {
--- 86,97 ----
ValueNode alias = tool.getAlias(object());
if (alias instanceof VirtualObjectNode) {
VirtualInstanceNode virtual = (VirtualInstanceNode) alias;
int fieldIndex = virtual.fieldIndex(field());
if (fieldIndex != -1) {
! tool.setVirtualEntry(virtual, fieldIndex, value());
tool.delete();
}
}
}
public FrameState getState() {
< prev index next >