# HG changeset patch # User Lukas Stadler # Date 1335518116 -7200 # Node ID f8fc624c07a7ccb9311ad7ec53459cc14374644e # Parent 46fb141ae20f503d614c43f017f5749db4fdd5b3 add leafGraphId to AccessFieldNode diff -r 46fb141ae20f -r f8fc624c07a7 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/ri/HotSpotRuntime.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/ri/HotSpotRuntime.java Thu Apr 26 14:35:25 2012 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/ri/HotSpotRuntime.java Fri Apr 27 11:15:16 2012 +0200 @@ -273,7 +273,7 @@ int displacement = ((HotSpotField) field.field()).offset(); assert field.kind() != CiKind.Illegal; ReadNode memoryRead = graph.add(new ReadNode(field.object(), LocationNode.create(field.field(), field.field().kind(true), displacement, graph), field.stamp())); - memoryRead.setGuard((GuardNode) tool.createGuard(graph.unique(new NullCheckNode(field.object(), false)), RiDeoptReason.NullCheckException, RiDeoptAction.InvalidateReprofile, StructuredGraph.INVALID_GRAPH_ID)); + memoryRead.setGuard((GuardNode) tool.createGuard(graph.unique(new NullCheckNode(field.object(), false)), RiDeoptReason.NullCheckException, RiDeoptAction.InvalidateReprofile, field.leafGraphId())); graph.replaceFixedWithFixed(field, memoryRead); if (field.isVolatile()) { MembarNode preMembar = graph.add(new MembarNode(JMM_PRE_VOLATILE_READ)); @@ -285,7 +285,7 @@ StoreFieldNode storeField = (StoreFieldNode) n; HotSpotField field = (HotSpotField) storeField.field(); WriteNode memoryWrite = graph.add(new WriteNode(storeField.object(), storeField.value(), LocationNode.create(storeField.field(), storeField.field().kind(true), field.offset(), graph))); - memoryWrite.setGuard((GuardNode) tool.createGuard(graph.unique(new NullCheckNode(storeField.object(), false)), RiDeoptReason.NullCheckException, RiDeoptAction.InvalidateReprofile, StructuredGraph.INVALID_GRAPH_ID)); + memoryWrite.setGuard((GuardNode) tool.createGuard(graph.unique(new NullCheckNode(storeField.object(), false)), RiDeoptReason.NullCheckException, RiDeoptAction.InvalidateReprofile, storeField.leafGraphId())); memoryWrite.setStateAfter(storeField.stateAfter()); graph.replaceFixedWithFixed(storeField, memoryWrite); diff -r 46fb141ae20f -r f8fc624c07a7 graal/com.oracle.graal.java/src/com/oracle/graal/java/GraphBuilderPhase.java --- a/graal/com.oracle.graal.java/src/com/oracle/graal/java/GraphBuilderPhase.java Thu Apr 26 14:35:25 2012 +0200 +++ b/graal/com.oracle.graal.java/src/com/oracle/graal/java/GraphBuilderPhase.java Fri Apr 27 11:15:16 2012 +0200 @@ -736,7 +736,7 @@ CiKind kind = field.kind(false); ValueNode receiver = frameState.apop(); if ((field instanceof RiResolvedField) && ((RiResolvedField) field).holder().isInitialized()) { - LoadFieldNode load = currentGraph.add(new LoadFieldNode(receiver, (RiResolvedField) field)); + LoadFieldNode load = currentGraph.add(new LoadFieldNode(receiver, (RiResolvedField) field, graphId)); appendOptimizedLoadField(kind, load); } else { append(currentGraph.add(new DeoptimizeNode(RiDeoptAction.InvalidateRecompile, RiDeoptReason.Unresolved, graphId))); @@ -813,7 +813,7 @@ ValueNode value = frameState.pop(field.kind(false).stackKind()); ValueNode receiver = frameState.apop(); if (field instanceof RiResolvedField && ((RiResolvedField) field).holder().isInitialized()) { - StoreFieldNode store = currentGraph.add(new StoreFieldNode(receiver, (RiResolvedField) field, value)); + StoreFieldNode store = currentGraph.add(new StoreFieldNode(receiver, (RiResolvedField) field, value, graphId)); appendOptimizedStoreField(store); } else { append(currentGraph.add(new DeoptimizeNode(RiDeoptAction.InvalidateRecompile, RiDeoptReason.Unresolved, graphId))); @@ -833,7 +833,7 @@ ValueNode container = genTypeOrDeopt(RiType.Representation.StaticFields, holder, isInitialized); CiKind kind = field.kind(false); if (container != null) { - LoadFieldNode load = currentGraph.add(new LoadFieldNode(container, (RiResolvedField) field)); + LoadFieldNode load = currentGraph.add(new LoadFieldNode(container, (RiResolvedField) field, graphId)); appendOptimizedLoadField(kind, load); } else { // deopt will be generated by genTypeOrDeopt, not needed here @@ -847,7 +847,7 @@ ValueNode container = genTypeOrDeopt(RiType.Representation.StaticFields, holder, field instanceof RiResolvedField && ((RiResolvedType) holder).isInitialized()); ValueNode value = frameState.pop(field.kind(false).stackKind()); if (container != null) { - StoreFieldNode store = currentGraph.add(new StoreFieldNode(container, (RiResolvedField) field, value)); + StoreFieldNode store = currentGraph.add(new StoreFieldNode(container, (RiResolvedField) field, value, graphId)); appendOptimizedStoreField(store); } else { // deopt will be generated by genTypeOrDeopt, not needed here @@ -956,7 +956,7 @@ private void appendInvoke(InvokeKind invokeKind, RiResolvedMethod targetMethod, ValueNode[] args) { CiKind resultType = targetMethod.signature().returnKind(false); if (GraalOptions.DeoptALot) { - DeoptimizeNode deoptimize = currentGraph.add(new DeoptimizeNode(RiDeoptAction.None, RiDeoptReason.RuntimeConstraint, StructuredGraph.INVALID_GRAPH_ID)); + DeoptimizeNode deoptimize = currentGraph.add(new DeoptimizeNode(RiDeoptAction.None, RiDeoptReason.RuntimeConstraint, graphId)); deoptimize.setMessage("invoke " + targetMethod.name()); append(deoptimize); frameState.pushReturn(resultType, ConstantNode.defaultForKind(resultType, currentGraph)); diff -r 46fb141ae20f -r f8fc624c07a7 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/SafeReadNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/SafeReadNode.java Thu Apr 26 14:35:25 2012 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/SafeReadNode.java Fri Apr 27 11:15:16 2012 +0200 @@ -40,7 +40,7 @@ @Override public void lower(CiLoweringTool tool) { StructuredGraph graph = (StructuredGraph) graph(); - GuardNode guard = (GuardNode) tool.createGuard(graph.unique(new NullCheckNode(object(), false)), RiDeoptReason.NullCheckException, RiDeoptAction.InvalidateReprofile, StructuredGraph.INVALID_GRAPH_ID); + GuardNode guard = (GuardNode) tool.createGuard(graph.unique(new NullCheckNode(object(), false)), RiDeoptReason.NullCheckException, RiDeoptAction.InvalidateReprofile, leafGraphId()); ReadNode read = graph.add(new ReadNode(object(), location(), stamp())); read.setGuard(guard); diff -r 46fb141ae20f -r f8fc624c07a7 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/SafeWriteNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/SafeWriteNode.java Thu Apr 26 14:35:25 2012 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/SafeWriteNode.java Fri Apr 27 11:15:16 2012 +0200 @@ -47,7 +47,7 @@ @Override public void lower(CiLoweringTool tool) { StructuredGraph graph = (StructuredGraph) graph(); - GuardNode guard = (GuardNode) tool.createGuard(graph.unique(new NullCheckNode(object(), false)), RiDeoptReason.NullCheckException, RiDeoptAction.InvalidateReprofile, StructuredGraph.INVALID_GRAPH_ID); + GuardNode guard = (GuardNode) tool.createGuard(graph.unique(new NullCheckNode(object(), false)), RiDeoptReason.NullCheckException, RiDeoptAction.InvalidateReprofile, leafGraphId()); WriteNode write = graph.add(new WriteNode(object(), value(), location())); write.setGuard(guard); graph.replaceFixedWithFixed(this, write); diff -r 46fb141ae20f -r f8fc624c07a7 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/UnboxNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/UnboxNode.java Thu Apr 26 14:35:25 2012 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/UnboxNode.java Fri Apr 27 11:15:16 2012 +0200 @@ -54,7 +54,7 @@ public void expand(BoxingMethodPool pool) { RiResolvedField field = pool.getBoxField(kind()); - LoadFieldNode loadField = graph().add(new LoadFieldNode(source, field)); + LoadFieldNode loadField = graph().add(new LoadFieldNode(source, field, StructuredGraph.INVALID_GRAPH_ID)); loadField.setProbability(probability()); ((StructuredGraph) graph()).replaceFixedWithFixed(this, loadField); } diff -r 46fb141ae20f -r f8fc624c07a7 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/AccessFieldNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/AccessFieldNode.java Thu Apr 26 14:35:25 2012 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/AccessFieldNode.java Fri Apr 27 11:15:16 2012 +0200 @@ -40,6 +40,7 @@ @Input private ValueNode object; protected final RiResolvedField field; + private final long leafGraphId; public ValueNode object() { return object; @@ -52,10 +53,11 @@ * @param field the compiler interface representation of the field * @param graph */ - public AccessFieldNode(Stamp stamp, ValueNode object, RiResolvedField field) { + public AccessFieldNode(Stamp stamp, ValueNode object, RiResolvedField field, long leafGraphId) { super(stamp); this.object = object; this.field = field; + this.leafGraphId = leafGraphId; assert field.holder().isInitialized(); } @@ -67,6 +69,10 @@ return field; } + public long leafGraphId() { + return leafGraphId; + } + /** * Checks whether this field access is an access to a static field. * @return {@code true} if this field access is to a static field diff -r 46fb141ae20f -r f8fc624c07a7 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/LoadFieldNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/LoadFieldNode.java Thu Apr 26 14:35:25 2012 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/LoadFieldNode.java Fri Apr 27 11:15:16 2012 +0200 @@ -40,8 +40,8 @@ * @param object the receiver object * @param field the compiler interface field */ - public LoadFieldNode(ValueNode object, RiResolvedField field) { - super(createStamp(field), object, field); + public LoadFieldNode(ValueNode object, RiResolvedField field, long leafGraphId) { + super(createStamp(field), object, field, leafGraphId); } private static Stamp createStamp(RiResolvedField field) { diff -r 46fb141ae20f -r f8fc624c07a7 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/StoreFieldNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/StoreFieldNode.java Thu Apr 26 14:35:25 2012 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/StoreFieldNode.java Fri Apr 27 11:15:16 2012 +0200 @@ -43,8 +43,8 @@ * @param field the compiler interface field * @param value the node representing the value to store to the field */ - public StoreFieldNode(ValueNode object, RiResolvedField field, ValueNode value) { - super(StampFactory.illegal(), object, field); + public StoreFieldNode(ValueNode object, RiResolvedField field, ValueNode value, long leafGraphId) { + super(StampFactory.illegal(), object, field, leafGraphId); this.value = value; } }