< prev index next >

src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/java/StoreIndexedNode.java

Print this page

        

*** 27,39 **** --- 27,43 ---- import static org.graalvm.compiler.nodeinfo.InputType.State; import static org.graalvm.compiler.nodeinfo.NodeCycles.CYCLES_8; import static org.graalvm.compiler.nodeinfo.NodeSize.SIZE_8; import org.graalvm.compiler.core.common.type.StampFactory; + import org.graalvm.compiler.graph.Node; import org.graalvm.compiler.graph.NodeClass; + import org.graalvm.compiler.graph.spi.Canonicalizable; + import org.graalvm.compiler.graph.spi.CanonicalizerTool; import org.graalvm.compiler.nodeinfo.InputType; import org.graalvm.compiler.nodeinfo.NodeInfo; + import org.graalvm.compiler.nodes.DeoptimizeNode; import org.graalvm.compiler.nodes.FrameState; import org.graalvm.compiler.nodes.StateSplit; import org.graalvm.compiler.nodes.ValueNode; import org.graalvm.compiler.nodes.extended.GuardingNode; import org.graalvm.compiler.nodes.spi.Lowerable;
*** 41,58 **** import org.graalvm.compiler.nodes.spi.VirtualizerTool; import org.graalvm.compiler.nodes.type.StampTool; import org.graalvm.compiler.nodes.virtual.VirtualArrayNode; import org.graalvm.compiler.nodes.virtual.VirtualObjectNode; import jdk.vm.ci.meta.JavaKind; import jdk.vm.ci.meta.ResolvedJavaType; /** * The {@code StoreIndexedNode} represents a write to an array element. */ @NodeInfo(cycles = CYCLES_8, size = SIZE_8) ! public final class StoreIndexedNode extends AccessIndexedNode implements StateSplit, Lowerable, Virtualizable { public static final NodeClass<StoreIndexedNode> TYPE = NodeClass.create(StoreIndexedNode.class); @OptionalInput(InputType.Guard) private GuardingNode storeCheck; @Input ValueNode value; --- 45,64 ---- import org.graalvm.compiler.nodes.spi.VirtualizerTool; import org.graalvm.compiler.nodes.type.StampTool; import org.graalvm.compiler.nodes.virtual.VirtualArrayNode; import org.graalvm.compiler.nodes.virtual.VirtualObjectNode; + import jdk.vm.ci.meta.DeoptimizationAction; + import jdk.vm.ci.meta.DeoptimizationReason; import jdk.vm.ci.meta.JavaKind; import jdk.vm.ci.meta.ResolvedJavaType; /** * The {@code StoreIndexedNode} represents a write to an array element. */ @NodeInfo(cycles = CYCLES_8, size = SIZE_8) ! public final class StoreIndexedNode extends AccessIndexedNode implements StateSplit, Lowerable, Virtualizable, Canonicalizable { public static final NodeClass<StoreIndexedNode> TYPE = NodeClass.create(StoreIndexedNode.class); @OptionalInput(InputType.Guard) private GuardingNode storeCheck; @Input ValueNode value;
*** 108,113 **** --- 114,127 ---- } public FrameState getState() { return stateAfter; } + + @Override + public Node canonical(CanonicalizerTool tool) { + if (array().isNullConstant()) { + return new DeoptimizeNode(DeoptimizationAction.InvalidateReprofile, DeoptimizationReason.NullCheckException); + } + return this; + } }
< prev index next >