src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/java/LoadFieldNode.java
changeset 51436 091c0d22e735
parent 50858 2d3e99a72541
child 52910 583fd71c47d6
equal deleted inserted replaced
51435:72c82bd05971 51436:091c0d22e735
    36 import org.graalvm.compiler.graph.spi.CanonicalizerTool;
    36 import org.graalvm.compiler.graph.spi.CanonicalizerTool;
    37 import org.graalvm.compiler.nodeinfo.NodeCycles;
    37 import org.graalvm.compiler.nodeinfo.NodeCycles;
    38 import org.graalvm.compiler.nodeinfo.NodeInfo;
    38 import org.graalvm.compiler.nodeinfo.NodeInfo;
    39 import org.graalvm.compiler.nodes.ConstantNode;
    39 import org.graalvm.compiler.nodes.ConstantNode;
    40 import org.graalvm.compiler.nodes.DeoptimizeNode;
    40 import org.graalvm.compiler.nodes.DeoptimizeNode;
       
    41 import org.graalvm.compiler.nodes.FixedGuardNode;
    41 import org.graalvm.compiler.nodes.NodeView;
    42 import org.graalvm.compiler.nodes.NodeView;
    42 import org.graalvm.compiler.nodes.PhiNode;
    43 import org.graalvm.compiler.nodes.PhiNode;
    43 import org.graalvm.compiler.nodes.ValueNode;
    44 import org.graalvm.compiler.nodes.ValueNode;
    44 import org.graalvm.compiler.nodes.ValuePhiNode;
    45 import org.graalvm.compiler.nodes.ValuePhiNode;
       
    46 import org.graalvm.compiler.nodes.calc.IsNullNode;
    45 import org.graalvm.compiler.nodes.spi.UncheckedInterfaceProvider;
    47 import org.graalvm.compiler.nodes.spi.UncheckedInterfaceProvider;
    46 import org.graalvm.compiler.nodes.spi.Virtualizable;
    48 import org.graalvm.compiler.nodes.spi.Virtualizable;
    47 import org.graalvm.compiler.nodes.spi.VirtualizerTool;
    49 import org.graalvm.compiler.nodes.spi.VirtualizerTool;
    48 import org.graalvm.compiler.nodes.type.StampTool;
    50 import org.graalvm.compiler.nodes.type.StampTool;
    49 import org.graalvm.compiler.nodes.util.ConstantFoldUtil;
    51 import org.graalvm.compiler.nodes.util.ConstantFoldUtil;
   108     }
   110     }
   109 
   111 
   110     @Override
   112     @Override
   111     public ValueNode canonical(CanonicalizerTool tool, ValueNode forObject) {
   113     public ValueNode canonical(CanonicalizerTool tool, ValueNode forObject) {
   112         NodeView view = NodeView.from(tool);
   114         NodeView view = NodeView.from(tool);
   113         if (tool.allUsagesAvailable() && hasNoUsages() && !isVolatile() && (isStatic() || StampTool.isPointerNonNull(forObject.stamp(view)))) {
   115         if (tool.allUsagesAvailable() && hasNoUsages() && !isVolatile()) {
   114             return null;
   116             if (isStatic() || StampTool.isPointerNonNull(forObject.stamp(view))) {
       
   117                 return null;
       
   118             }
       
   119             if (graph().getGuardsStage().allowsGuardInsertion()) {
       
   120                 return new FixedGuardNode(new IsNullNode(forObject), DeoptimizationReason.NullCheckException, DeoptimizationAction.InvalidateReprofile, true, getNodeSourcePosition());
       
   121             }
   115         }
   122         }
   116         return canonical(this, StampPair.create(stamp, uncheckedStamp), forObject, field, tool.getConstantFieldProvider(),
   123         return canonical(this, StampPair.create(stamp, uncheckedStamp), forObject, field, tool.getConstantFieldProvider(),
   117                         tool.getConstantReflection(), tool.getOptions(), tool.getMetaAccess(), tool.canonicalizeReads(), tool.allUsagesAvailable());
   124                         tool.getConstantReflection(), tool.getOptions(), tool.getMetaAccess(), tool.canonicalizeReads(), tool.allUsagesAvailable());
   118     }
   125     }
   119 
   126