# HG changeset patch # User Andreas Woess # Date 1375872759 -7200 # Node ID 8e3ba1110a711827f6bdcdf1633f1481a6d43975 # Parent cc5473cf32bb2d31a9d38ec2de91e8167d4826ed FrameAccessNode: check that constant frame slot is not null. diff -r cc5473cf32bb -r 8e3ba1110a71 graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/FrameAccessNode.java --- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/FrameAccessNode.java Wed Aug 07 14:07:06 2013 +0200 +++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/FrameAccessNode.java Wed Aug 07 12:52:39 2013 +0200 @@ -66,15 +66,15 @@ } protected int getSlotIndex() { - return getFrameSlot().getIndex(); + return getConstantFrameSlot().getIndex(); } - protected boolean isFrameSlotConstant() { - return slot.isConstant(); + protected boolean isConstantFrameSlot() { + return slot.isConstant() && !slot.isNullConstant(); } - protected FrameSlot getFrameSlot() { - assert isFrameSlotConstant() : slot; + protected FrameSlot getConstantFrameSlot() { + assert isConstantFrameSlot() : slot; return (FrameSlot) slot.asConstant().asObject(); } @@ -87,14 +87,14 @@ @Override public String toString(Verbosity verbosity) { if (verbosity == Verbosity.Name) { - return super.toString(verbosity) + getSlotKind().name() + (isFrameSlotConstant() ? " " + getFrameSlot() : ""); + return super.toString(verbosity) + getSlotKind().name() + (isConstantFrameSlot() ? " " + getConstantFrameSlot() : ""); } else { return super.toString(verbosity); } } protected final ValueNode getSlotOffset(int scale, MetaAccessProvider metaAccessProvider) { - if (isFrameSlotConstant()) { + if (isConstantFrameSlot()) { return ConstantNode.forInt(getSlotIndex() * scale, graph()); } else { LoadFieldNode loadFrameSlotIndex = graph().add(new LoadFieldNode(getSlot(), metaAccessProvider.lookupJavaField(getFrameSlotIndexField()))); @@ -117,7 +117,7 @@ return true; } - return getSlotKind() == getGraalKind(getFrameSlot().getKind()); + return getSlotKind() == getGraalKind(getConstantFrameSlot().getKind()); } private static Kind getGraalKind(FrameSlotKind kind) { @@ -142,12 +142,12 @@ @Override public final void simplify(SimplifierTool tool) { - if (isFrameSlotConstant()) { + if (isConstantFrameSlot()) { if (!isValidAccessKind()) { tool.deleteBranch(this.next()); this.replaceAndDelete(graph().add(new DeoptimizeNode(DeoptimizationAction.InvalidateReprofile, DeoptimizationReason.UnreachedCode))); } else { - tool.assumptions().record(new AssumptionValidAssumption((OptimizedAssumption) getFrameSlot().getFrameDescriptor().getVersion())); + tool.assumptions().record(new AssumptionValidAssumption((OptimizedAssumption) getConstantFrameSlot().getFrameDescriptor().getVersion())); } } } @@ -155,8 +155,8 @@ @Override public Map getDebugProperties(Map map) { Map properties = super.getDebugProperties(map); - if (isFrameSlotConstant()) { - properties.put("frameSlot", getFrameSlot().toString()); + if (isConstantFrameSlot()) { + properties.put("frameSlot", getConstantFrameSlot().toString()); } return properties; } diff -r cc5473cf32bb -r 8e3ba1110a71 graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/FrameGetNode.java --- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/FrameGetNode.java Wed Aug 07 14:07:06 2013 +0200 +++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/FrameGetNode.java Wed Aug 07 12:52:39 2013 +0200 @@ -48,7 +48,7 @@ @Override public void virtualize(VirtualizerTool tool) { - if (!isFrameSlotConstant()) { + if (!isConstantFrameSlot()) { return; } assert isValidAccessKind(); diff -r cc5473cf32bb -r 8e3ba1110a71 graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/FrameSetNode.java --- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/FrameSetNode.java Wed Aug 07 14:07:06 2013 +0200 +++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/FrameSetNode.java Wed Aug 07 12:52:39 2013 +0200 @@ -52,7 +52,7 @@ @Override public void virtualize(VirtualizerTool tool) { - if (!isFrameSlotConstant()) { + if (!isConstantFrameSlot()) { return; } assert isValidAccessKind();