@Override public ValueNode canonical(CanonicalizerTool tool, ValueNode forObject) { NodeView view = NodeView.from(tool); if (tool.allUsagesAvailable() && hasNoUsages() && !isVolatile()) { if (isStatic() || StampTool.isPointerNonNull(forObject.stamp(view))) { return null; } if (graph().getGuardsStage().allowsGuardInsertion()) { return new FixedGuardNode(new IsNullNode(forObject), DeoptimizationReason.NullCheckException, DeoptimizationAction.InvalidateReprofile, true, getNodeSourcePosition()); } } return canonical(this, StampPair.create(stamp, uncheckedStamp), forObject, field, tool.getConstantFieldProvider(), tool.getConstantReflection(), tool.getOptions(), tool.getMetaAccess(), tool.canonicalizeReads(), tool.allUsagesAvailable()); }