# HG changeset patch # User Gilles Duboscq # Date 1405340253 -7200 # Node ID 2b63e51e778929204138720e5595f148c8f300e9 # Parent 688f84e397a394c2dcad52e3cab9220984fc07c1 Move invokeKind into CallTragetNode from its subclasses diff -r 688f84e397a3 -r 2b63e51e7789 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/DefaultHotSpotLoweringProvider.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/DefaultHotSpotLoweringProvider.java Mon Jul 14 14:00:55 2014 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/DefaultHotSpotLoweringProvider.java Mon Jul 14 14:17:33 2014 +0200 @@ -202,7 +202,7 @@ StampFactory.forKind(wordKind), BarrierType.NONE)); loweredCallTarget = graph.add(new HotSpotIndirectCallTargetNode(metaspaceMethod, compiledEntry, parameters, invoke.asNode().stamp(), signature, callTarget.targetMethod(), - CallingConvention.Type.JavaCall)); + CallingConvention.Type.JavaCall, callTarget.invokeKind())); graph.addBeforeFixed(invoke.asNode(), metaspaceMethod); graph.addAfterFixed(metaspaceMethod, compiledEntry); diff -r 688f84e397a3 -r 2b63e51e7789 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/HotSpotDirectCallTargetNode.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/HotSpotDirectCallTargetNode.java Mon Jul 14 14:00:55 2014 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/HotSpotDirectCallTargetNode.java Mon Jul 14 14:17:33 2014 +0200 @@ -30,15 +30,7 @@ import com.oracle.graal.nodes.*; public class HotSpotDirectCallTargetNode extends DirectCallTargetNode { - - private final InvokeKind invokeKind; - public HotSpotDirectCallTargetNode(List arguments, Stamp returnStamp, JavaType[] signature, ResolvedJavaMethod target, Type callType, InvokeKind invokeKind) { - super(arguments, returnStamp, signature, target, callType); - this.invokeKind = invokeKind; - } - - public InvokeKind invokeKind() { - return invokeKind; + super(arguments, returnStamp, signature, target, callType, invokeKind); } } diff -r 688f84e397a3 -r 2b63e51e7789 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/HotSpotIndirectCallTargetNode.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/HotSpotIndirectCallTargetNode.java Mon Jul 14 14:00:55 2014 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/HotSpotIndirectCallTargetNode.java Mon Jul 14 14:17:33 2014 +0200 @@ -34,8 +34,8 @@ @Input private ValueNode metaspaceMethod; public HotSpotIndirectCallTargetNode(ValueNode metaspaceMethod, ValueNode computedAddress, List arguments, Stamp returnStamp, JavaType[] signature, ResolvedJavaMethod target, - Type callType) { - super(computedAddress, arguments, returnStamp, signature, target, callType); + Type callType, InvokeKind invokeKind) { + super(computedAddress, arguments, returnStamp, signature, target, callType, invokeKind); this.metaspaceMethod = metaspaceMethod; } diff -r 688f84e397a3 -r 2b63e51e7789 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/CallTargetNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/CallTargetNode.java Mon Jul 14 14:00:55 2014 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/CallTargetNode.java Mon Jul 14 14:17:33 2014 +0200 @@ -40,16 +40,19 @@ @Input private final NodeInputList arguments; private ResolvedJavaMethod targetMethod; + private InvokeKind invokeKind; - public CallTargetNode(ValueNode[] arguments, ResolvedJavaMethod targetMethod) { + public CallTargetNode(ValueNode[] arguments, ResolvedJavaMethod targetMethod, InvokeKind invokeKind) { super(StampFactory.forVoid()); this.targetMethod = targetMethod; + this.invokeKind = invokeKind; this.arguments = new NodeInputList<>(this, arguments); } - public CallTargetNode(List arguments, ResolvedJavaMethod targetMethod) { + public CallTargetNode(List arguments, ResolvedJavaMethod targetMethod, InvokeKind invokeKind) { super(StampFactory.forVoid()); this.targetMethod = targetMethod; + this.invokeKind = invokeKind; this.arguments = new NodeInputList<>(this, arguments); } @@ -81,4 +84,12 @@ public ResolvedJavaMethod targetMethod() { return targetMethod; } + + public InvokeKind invokeKind() { + return invokeKind; + } + + public void setInvokeKind(InvokeKind kind) { + this.invokeKind = kind; + } } diff -r 688f84e397a3 -r 2b63e51e7789 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/DirectCallTargetNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/DirectCallTargetNode.java Mon Jul 14 14:00:55 2014 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/DirectCallTargetNode.java Mon Jul 14 14:17:33 2014 +0200 @@ -30,8 +30,8 @@ public class DirectCallTargetNode extends LoweredCallTargetNode { - public DirectCallTargetNode(List arguments, Stamp returnStamp, JavaType[] signature, ResolvedJavaMethod target, CallingConvention.Type callType) { - super(arguments, returnStamp, signature, target, callType); + public DirectCallTargetNode(List arguments, Stamp returnStamp, JavaType[] signature, ResolvedJavaMethod target, CallingConvention.Type callType, InvokeKind invokeKind) { + super(arguments, returnStamp, signature, target, callType, invokeKind); } @Override diff -r 688f84e397a3 -r 2b63e51e7789 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/IndirectCallTargetNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/IndirectCallTargetNode.java Mon Jul 14 14:00:55 2014 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/IndirectCallTargetNode.java Mon Jul 14 14:17:33 2014 +0200 @@ -32,8 +32,9 @@ @Input private ValueNode computedAddress; - public IndirectCallTargetNode(ValueNode computedAddress, List arguments, Stamp returnStamp, JavaType[] signature, ResolvedJavaMethod target, CallingConvention.Type callType) { - super(arguments, returnStamp, signature, target, callType); + public IndirectCallTargetNode(ValueNode computedAddress, List arguments, Stamp returnStamp, JavaType[] signature, ResolvedJavaMethod target, CallingConvention.Type callType, + InvokeKind invokeKind) { + super(arguments, returnStamp, signature, target, callType, invokeKind); this.computedAddress = computedAddress; } diff -r 688f84e397a3 -r 2b63e51e7789 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/LoweredCallTargetNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/LoweredCallTargetNode.java Mon Jul 14 14:00:55 2014 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/LoweredCallTargetNode.java Mon Jul 14 14:17:33 2014 +0200 @@ -34,8 +34,8 @@ private final JavaType[] signature; private final CallingConvention.Type callType; - public LoweredCallTargetNode(List arguments, Stamp returnStamp, JavaType[] signature, ResolvedJavaMethod target, CallingConvention.Type callType) { - super(arguments, target); + public LoweredCallTargetNode(List arguments, Stamp returnStamp, JavaType[] signature, ResolvedJavaMethod target, CallingConvention.Type callType, InvokeKind invokeKind) { + super(arguments, target, invokeKind); this.returnStamp = returnStamp; this.signature = signature; this.callType = callType; diff -r 688f84e397a3 -r 2b63e51e7789 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/MethodCallTargetNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/MethodCallTargetNode.java Mon Jul 14 14:00:55 2014 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/MethodCallTargetNode.java Mon Jul 14 14:17:33 2014 +0200 @@ -30,27 +30,16 @@ import com.oracle.graal.nodes.type.*; public class MethodCallTargetNode extends CallTargetNode implements IterableNodeType, Canonicalizable { - private final JavaType returnType; - private InvokeKind invokeKind; /** * @param arguments */ public MethodCallTargetNode(InvokeKind invokeKind, ResolvedJavaMethod targetMethod, ValueNode[] arguments, JavaType returnType) { - super(arguments, targetMethod); - this.invokeKind = invokeKind; + super(arguments, targetMethod, invokeKind); this.returnType = returnType; } - public InvokeKind invokeKind() { - return invokeKind; - } - - public void setInvokeKind(InvokeKind kind) { - this.invokeKind = kind; - } - /** * Gets the instruction that produces the receiver object for this invocation, if any. * @@ -84,10 +73,10 @@ for (Node n : usages()) { assertTrue(n instanceof Invoke, "call target can only be used from an invoke (%s)", n); } - if (invokeKind == InvokeKind.Special || invokeKind == InvokeKind.Static) { + if (invokeKind() == InvokeKind.Special || invokeKind() == InvokeKind.Static) { assertFalse(targetMethod().isAbstract(), "special calls or static calls are only allowed for concrete methods (%s)", targetMethod()); } - if (invokeKind == InvokeKind.Static) { + if (invokeKind() == InvokeKind.Static) { assertTrue(targetMethod().isStatic(), "static calls are only allowed for static methods (%s)", targetMethod()); } else { assertFalse(targetMethod().isStatic(), "static calls are only allowed for non-static methods (%s)", targetMethod()); @@ -106,12 +95,12 @@ @Override public Node canonical(CanonicalizerTool tool) { - if (invokeKind == InvokeKind.Interface || invokeKind == InvokeKind.Virtual) { + if (invokeKind() == InvokeKind.Interface || invokeKind() == InvokeKind.Virtual) { // attempt to devirtualize the call // check for trivial cases (e.g. final methods, nonvirtual methods) if (targetMethod().canBeStaticallyBound()) { - invokeKind = InvokeKind.Special; + setInvokeKind(InvokeKind.Special); return this; } @@ -125,7 +114,7 @@ */ ResolvedJavaMethod resolvedMethod = type.resolveMethod(targetMethod(), invoke().getContextType()); if (resolvedMethod != null && (resolvedMethod.canBeStaticallyBound() || StampTool.isExactType(receiver) || type.isArray())) { - invokeKind = InvokeKind.Special; + setInvokeKind(InvokeKind.Special); setTargetMethod(resolvedMethod); return this; } @@ -135,7 +124,7 @@ ResolvedJavaMethod methodFromUniqueType = uniqueConcreteType.resolveMethod(targetMethod(), invoke().getContextType()); if (methodFromUniqueType != null) { tool.assumptions().recordConcreteSubtype(type, uniqueConcreteType); - invokeKind = InvokeKind.Special; + setInvokeKind(InvokeKind.Special); setTargetMethod(methodFromUniqueType); return this; } @@ -144,7 +133,7 @@ ResolvedJavaMethod uniqueConcreteMethod = type.findUniqueConcreteMethod(targetMethod()); if (uniqueConcreteMethod != null) { tool.assumptions().recordConcreteMethod(targetMethod(), type, uniqueConcreteMethod); - invokeKind = InvokeKind.Special; + setInvokeKind(InvokeKind.Special); setTargetMethod(uniqueConcreteMethod); return this; }