# HG changeset patch # User Gilles Duboscq # Date 1335521687 -7200 # Node ID 158a230b4331ac62c9609f3eeb0c78cd7fbe3a50 # Parent a60d1ed97bd0cbbe9ad2defde967e4d4430de53b# Parent 474ae8316c5ab8cdf720c222d318459a7643e016 Merge diff -r a60d1ed97bd0 -r 158a230b4331 graal/com.oracle.graal.graph/src/com/oracle/graal/graph/NodeClass.java --- a/graal/com.oracle.graal.graph/src/com/oracle/graal/graph/NodeClass.java Fri Apr 27 12:14:38 2012 +0200 +++ b/graal/com.oracle.graal.graph/src/com/oracle/graal/graph/NodeClass.java Fri Apr 27 12:14:47 2012 +0200 @@ -557,10 +557,12 @@ value = unsafe.getInt(node, dataOffsets[i]); } else if (type == Boolean.TYPE) { value = unsafe.getBoolean(node, dataOffsets[i]); + } else if (type == Long.TYPE) { + value = unsafe.getLong(node, dataOffsets[i]); } else if (type == Double.TYPE) { - value = String.format(Locale.ENGLISH, "%7.5f", unsafe.getDouble(node, dataOffsets[i])); + value = unsafe.getDouble(node, dataOffsets[i]); } else { - assert false; + assert false : "unhandled property type: " + type; } } else { value = unsafe.getObject(node, dataOffsets[i]); diff -r a60d1ed97bd0 -r 158a230b4331 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 Fri Apr 27 12:14:38 2012 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/ri/HotSpotRuntime.java Fri Apr 27 12:14:47 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 a60d1ed97bd0 -r 158a230b4331 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 Fri Apr 27 12:14:38 2012 +0200 +++ b/graal/com.oracle.graal.java/src/com/oracle/graal/java/GraphBuilderPhase.java Fri Apr 27 12:14:47 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 a60d1ed97bd0 -r 158a230b4331 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 Fri Apr 27 12:14:38 2012 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/SafeReadNode.java Fri Apr 27 12:14:47 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 a60d1ed97bd0 -r 158a230b4331 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 Fri Apr 27 12:14:38 2012 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/SafeWriteNode.java Fri Apr 27 12:14:47 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 a60d1ed97bd0 -r 158a230b4331 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 Fri Apr 27 12:14:38 2012 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/UnboxNode.java Fri Apr 27 12:14:47 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 a60d1ed97bd0 -r 158a230b4331 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 Fri Apr 27 12:14:38 2012 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/AccessFieldNode.java Fri Apr 27 12:14:47 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 a60d1ed97bd0 -r 158a230b4331 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/InstanceOfNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/InstanceOfNode.java Fri Apr 27 12:14:38 2012 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/InstanceOfNode.java Fri Apr 27 12:14:47 2012 +0200 @@ -24,6 +24,7 @@ import com.oracle.max.cri.ci.*; import com.oracle.max.cri.ri.*; +import com.oracle.graal.graph.Node.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.calc.*; import com.oracle.graal.nodes.spi.*; @@ -109,6 +110,15 @@ } @Override + public String toString(Verbosity verbosity) { + if (verbosity == Verbosity.Name && negated) { + return "!" + super.toString(Verbosity.Name); + } else { + return super.toString(verbosity); + } + } + + @Override public Result canonical(TypeFeedbackTool tool) { ObjectTypeQuery query = tool.queryObject(object()); if (query.constantBound(Condition.EQ, CiConstant.NULL_OBJECT)) { diff -r a60d1ed97bd0 -r 158a230b4331 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 Fri Apr 27 12:14:38 2012 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/LoadFieldNode.java Fri Apr 27 12:14:47 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 a60d1ed97bd0 -r 158a230b4331 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 Fri Apr 27 12:14:38 2012 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/StoreFieldNode.java Fri Apr 27 12:14:47 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; } } diff -r a60d1ed97bd0 -r 158a230b4331 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/type/StampFactory.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/type/StampFactory.java Fri Apr 27 12:14:38 2012 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/type/StampFactory.java Fri Apr 27 12:14:47 2012 +0200 @@ -232,7 +232,7 @@ public static Stamp declared(final RiResolvedType type) { assert type != null; assert type.kind(false) == CiKind.Object; - return new BasicValueStamp(CiKind.Object, false, type, type.exactType()); + return new BasicValueStamp(CiKind.Object, false, type, null); } public static Stamp declaredNonNull(final RiResolvedType type) {