Mercurial > hg > truffle
diff graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/util/InliningUtil.java @ 5443:141817e206d4
changes to the dependencies and stamp system:
* dependencies can only be of type ValueNode
* exactType is a boolean flag, not a separate RiResolvedType
* use different Stamp subclasses for IntegerStamp, FloatStamp, ObjectStamp and GenericStamp
* use different stamp for nodes that can be a target for dependencies
* use different PhiNode constructors for value- and non-value-Phis
* use correct stamps for ExceptionObjectNode and CurrentThread
author | Lukas Stadler <lukas.stadler@jku.at> |
---|---|
date | Fri, 25 May 2012 11:35:18 +0200 |
parents | 3f6496caa1a4 |
children | 0368c19fc175 |
line wrap: on
line diff
--- a/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/util/InliningUtil.java Fri May 25 10:36:23 2012 +0200 +++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/util/InliningUtil.java Fri May 25 11:35:18 2012 +0200 @@ -33,10 +33,9 @@ import com.oracle.graal.cri.*; import com.oracle.graal.debug.*; import com.oracle.graal.graph.*; -import com.oracle.graal.graph.Node.*; +import com.oracle.graal.graph.Node.Verbosity; import com.oracle.graal.lir.cfg.*; import com.oracle.graal.nodes.*; -import com.oracle.graal.nodes.PhiNode.PhiType; import com.oracle.graal.nodes.calc.*; import com.oracle.graal.nodes.extended.*; import com.oracle.graal.nodes.java.*; @@ -281,7 +280,7 @@ PhiNode returnValuePhi = null; if (hasReturnValue) { - returnValuePhi = graph.unique(new PhiNode(invoke.node().kind(), returnMerge, PhiType.Value)); + returnValuePhi = graph.unique(new PhiNode(invoke.node().kind(), returnMerge)); } MergeNode exceptionMerge = null; @@ -296,7 +295,7 @@ FixedNode exceptionSux = exceptionObject.next(); graph.addBeforeFixed(exceptionSux, exceptionMerge); - exceptionObjectPhi = graph.unique(new PhiNode(CiKind.Object, exceptionMerge, PhiType.Value)); + exceptionObjectPhi = graph.unique(new PhiNode(CiKind.Object, exceptionMerge)); exceptionMerge.setStateAfter(exceptionEdge.stateAfter().duplicateModified(invoke.stateAfter().bci, true, CiKind.Void, exceptionObjectPhi)); } @@ -575,10 +574,11 @@ } return null; } - if (callTarget.receiver().exactType() != null) { - RiResolvedType exact = callTarget.receiver().exactType(); - assert exact.isSubtypeOf(targetMethod.holder()) : exact + " subtype of " + targetMethod.holder() + " for " + targetMethod; - RiResolvedMethod resolved = exact.resolveMethodImpl(targetMethod); + ObjectStamp receiverStamp = callTarget.receiver().objectStamp(); + RiResolvedType receiverType = receiverStamp.type(); + if (receiverStamp.isExactType()) { + assert receiverType.isSubtypeOf(targetMethod.holder()) : receiverType + " subtype of " + targetMethod.holder() + " for " + targetMethod; + RiResolvedMethod resolved = receiverType.resolveMethodImpl(targetMethod); if (checkTargetConditions(invoke, resolved, optimisticOpts)) { double weight = callback == null ? 0 : callback.inliningWeight(parent, resolved, invoke); return new ExactInlineInfo(invoke, weight, level, resolved); @@ -587,12 +587,11 @@ } RiResolvedType holder = targetMethod.holder(); - if (callTarget.receiver().declaredType() != null) { - RiResolvedType declared = callTarget.receiver().declaredType(); + if (receiverStamp.type() != null) { // the invoke target might be more specific than the holder (happens after inlining: locals lose their declared type...) // TODO (lstadler) fix this - if (declared != null && declared.isSubtypeOf(holder)) { - holder = declared; + if (receiverType != null && receiverType.isSubtypeOf(holder)) { + holder = receiverType; } } // TODO (thomaswue) fix this @@ -1066,7 +1065,7 @@ StructuredGraph graph = (StructuredGraph) invoke.graph(); NodeInputList<ValueNode> parameters = callTarget.arguments(); ValueNode firstParam = parameters.size() <= 0 ? null : parameters.get(0); - if (!callTarget.isStatic() && firstParam.kind() == CiKind.Object && !firstParam.stamp().nonNull()) { + if (!callTarget.isStatic() && firstParam.kind() == CiKind.Object && !firstParam.objectStamp().nonNull()) { graph.addBeforeFixed(invoke.node(), graph.add(new FixedGuardNode(graph.unique(new IsNullNode(firstParam)), RiDeoptReason.ClassCastException, RiDeoptAction.InvalidateReprofile, true, invoke.leafGraphId()))); } }