# HG changeset patch # User Gilles Duboscq # Date 1389628443 -3600 # Node ID 0f7d6359bdf391e5405b68acddbd8e747950a0ae # Parent 11c46696a65550a11e74d96d5bb22ef1b33640d8 Remove createNullCheckGuard from LoweringTool. Use generic createGuard instead diff -r 11c46696a655 -r 0f7d6359bdf3 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotLoweringProvider.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotLoweringProvider.java Mon Jan 13 10:46:52 2014 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotLoweringProvider.java Mon Jan 13 16:54:03 2014 +0100 @@ -106,7 +106,7 @@ ValueNode array = arrayLengthNode.array(); ReadNode arrayLengthRead = graph.add(new ReadNode(array, ConstantLocationNode.create(FINAL_LOCATION, Kind.Int, config.arrayLengthOffset, graph), StampFactory.positiveInt(), BarrierType.NONE, false)); - tool.createNullCheckGuard(arrayLengthNode, arrayLengthRead, array); + arrayLengthRead.setGuard(createNullCheck(array, arrayLengthNode, tool)); graph.replaceFixedWithFixed(arrayLengthNode, arrayLengthRead); } else if (n instanceof Invoke) { Invoke invoke = (Invoke) n; @@ -117,7 +117,8 @@ ValueNode receiver = parameters.size() <= 0 ? null : parameters.get(0); GuardingNode receiverNullCheck = null; if (!callTarget.isStatic() && receiver.stamp() instanceof ObjectStamp && !ObjectStamp.isObjectNonNull(receiver)) { - receiverNullCheck = tool.createNullCheckGuard(invoke.asNode(), invoke, receiver); + receiverNullCheck = createNullCheck(receiver, invoke.asNode(), tool); + invoke.setGuard(receiverNullCheck); } JavaType[] signature = MetaUtil.signatureToTypes(callTarget.targetMethod().getSignature(), callTarget.isStatic() ? null : callTarget.targetMethod().getDeclaringClass()); @@ -161,7 +162,7 @@ BarrierType barrierType = getFieldLoadBarrierType(field); ReadNode memoryRead = graph.add(new ReadNode(object, createFieldLocation(graph, field, false), loadField.stamp(), barrierType, (loadField.kind() == Kind.Object))); graph.replaceFixedWithFixed(loadField, memoryRead); - tool.createNullCheckGuard(memoryRead, memoryRead, object); + memoryRead.setGuard(createNullCheck(object, memoryRead, tool)); if (loadField.isVolatile()) { MembarNode preMembar = graph.add(new MembarNode(JMM_PRE_VOLATILE_READ)); @@ -177,7 +178,7 @@ WriteNode memoryWrite = graph.add(new WriteNode(object, storeField.value(), createFieldLocation(graph, field, false), barrierType, storeField.field().getKind() == Kind.Object)); memoryWrite.setStateAfter(storeField.stateAfter()); graph.replaceFixedWithFixed(storeField, memoryWrite); - tool.createNullCheckGuard(memoryWrite, memoryWrite, object); + memoryWrite.setGuard(createNullCheck(object, memoryWrite, tool)); FixedWithNextNode last = memoryWrite; FixedWithNextNode first = memoryWrite; @@ -696,11 +697,15 @@ Stamp stamp = StampFactory.positiveInt(); ReadNode readArrayLength = g.add(new ReadNode(array, ConstantLocationNode.create(FINAL_LOCATION, Kind.Int, runtime.getConfig().arrayLengthOffset, g), stamp, BarrierType.NONE, false)); g.addBeforeFixed(n, readArrayLength); - tool.createNullCheckGuard(readArrayLength, readArrayLength, array); + readArrayLength.setGuard(createNullCheck(array, readArrayLength, tool)); arrayLength = readArrayLength; } return tool.createGuard(n, g.unique(new IntegerBelowThanNode(n.index(), arrayLength)), BoundsCheckException, InvalidateReprofile); } + private static GuardingNode createNullCheck(ValueNode object, FixedNode before, LoweringTool tool) { + return tool.createGuard(before, before.graph().unique(new IsNullNode(object)), DeoptimizationReason.NullCheckException, DeoptimizationAction.InvalidateReprofile, true); + } + } diff -r 11c46696a655 -r 0f7d6359bdf3 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/spi/LoweringTool.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/spi/LoweringTool.java Mon Jan 13 10:46:52 2014 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/spi/LoweringTool.java Mon Jan 13 16:54:03 2014 +0100 @@ -39,8 +39,6 @@ Replacements getReplacements(); - GuardingNode createNullCheckGuard(FixedNode before, GuardedNode guardedNode, ValueNode object); - GuardingNode createGuard(FixedNode before, LogicNode condition, DeoptimizationReason deoptReason, DeoptimizationAction action); GuardingNode createGuard(FixedNode before, LogicNode condition, DeoptimizationReason deoptReason, DeoptimizationAction action, boolean negated); diff -r 11c46696a655 -r 0f7d6359bdf3 graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/LoweringPhase.java --- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/LoweringPhase.java Mon Jan 13 10:46:52 2014 +0100 +++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/LoweringPhase.java Mon Jan 13 16:54:03 2014 +0100 @@ -32,7 +32,6 @@ import com.oracle.graal.graph.*; import com.oracle.graal.graph.iterators.*; import com.oracle.graal.nodes.*; -import com.oracle.graal.nodes.StructuredGraph.GuardsStage; import com.oracle.graal.nodes.calc.*; import com.oracle.graal.nodes.cfg.*; import com.oracle.graal.nodes.extended.*; @@ -94,25 +93,6 @@ } @Override - public GuardingNode createNullCheckGuard(FixedNode before, GuardedNode guardedNode, ValueNode object) { - if (ObjectStamp.isObjectNonNull(object)) { - // Short cut creation of null check guard if the object is known to be non-null. - return null; - } - StructuredGraph graph = guardedNode.asNode().graph(); - if (graph.getGuardsStage().ordinal() > GuardsStage.FLOATING_GUARDS.ordinal()) { - NullCheckNode nullCheck = graph.add(new NullCheckNode(object)); - graph.addBeforeFixed(before, nullCheck); - return nullCheck; - } else { - GuardingNode guard = createGuard(before, graph.unique(new IsNullNode(object)), DeoptimizationReason.NullCheckException, DeoptimizationAction.InvalidateReprofile, true); - assert guardedNode.getGuard() == null; - guardedNode.setGuard(guard); - return guard; - } - } - - @Override public GuardingNode createGuard(FixedNode before, LogicNode condition, DeoptimizationReason deoptReason, DeoptimizationAction action) { return createGuard(before, condition, deoptReason, action, false); }