Skip to content

Commit 1b2e651

Browse files
committed
Refactor call dispatch nodes
1 parent d572499 commit 1b2e651

33 files changed

+516
-941
lines changed

graalpython/com.oracle.graal.python.test/src/com/oracle/graal/python/test/builtin/modules/ConversionNodeTests.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@
4949
import com.oracle.graal.python.builtins.objects.function.PArguments;
5050
import com.oracle.graal.python.builtins.objects.function.Signature;
5151
import com.oracle.graal.python.nodes.PRootNode;
52-
import com.oracle.graal.python.nodes.call.CallTargetInvokeNode;
52+
import com.oracle.graal.python.nodes.call.CallDispatchers;
5353
import com.oracle.graal.python.nodes.function.builtins.clinic.ArgumentCastNode;
5454
import com.oracle.graal.python.runtime.ExecutionContext.CalleeContext;
5555
import com.oracle.graal.python.runtime.ExecutionContext.IndirectCalleeContext;
@@ -103,7 +103,7 @@ public boolean isPythonInternal() {
103103
PythonThreadState threadState = pythonContext.getThreadState(language);
104104
Object state = IndirectCalleeContext.enter(threadState, arguments, callTarget);
105105
try {
106-
return CallTargetInvokeNode.invokeUncached(callTarget, arguments);
106+
return CallDispatchers.SimpleIndirectInvokeNode.executeUncached(callTarget, arguments);
107107
} finally {
108108
IndirectCalleeContext.exit(threadState, state);
109109
}

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/PythonLanguage.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@
8686
import com.oracle.graal.python.nodes.bytecode.PBytecodeRootNode;
8787
import com.oracle.graal.python.nodes.bytecode_dsl.BytecodeDSLCodeUnit;
8888
import com.oracle.graal.python.nodes.call.CallNode;
89-
import com.oracle.graal.python.nodes.call.GenericInvokeNode;
89+
import com.oracle.graal.python.nodes.call.CallDispatchers;
9090
import com.oracle.graal.python.nodes.exception.TopLevelExceptionHandler;
9191
import com.oracle.graal.python.nodes.frame.GetFrameLocalsNode;
9292
import com.oracle.graal.python.nodes.frame.MaterializeFrameNode;
@@ -783,7 +783,7 @@ public ExecutableNode parse(InlineParsingRequest request) {
783783
RootCallTarget callTarget = parse(context, request.getSource(), InputType.EVAL, false, 0, false, null, EnumSet.noneOf(FutureFeature.class));
784784
return new ExecutableNode(this) {
785785
@Child private GilNode gilNode = GilNode.create();
786-
@Child private GenericInvokeNode invokeNode = GenericInvokeNode.create();
786+
@Child private CallDispatchers.SimpleIndirectInvokeNode invokeNode = CallDispatchers.SimpleIndirectInvokeNode.create();
787787
@Child private MaterializeFrameNode materializeFrameNode = MaterializeFrameNode.create();
788788
@Child private GetFrameLocalsNode getFrameLocalsNode = GetFrameLocalsNode.create();
789789

@@ -797,7 +797,7 @@ public Object execute(VirtualFrame frame) {
797797
PArguments.setGlobals(arguments, PArguments.getGlobals(frame));
798798
boolean wasAcquired = gilNode.acquire();
799799
try {
800-
return invokeNode.execute(callTarget, arguments);
800+
return invokeNode.executeCached(frame, callTarget, arguments);
801801
} finally {
802802
gilNode.release(wasAcquired);
803803
}

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/Python3Core.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -373,7 +373,7 @@
373373
import com.oracle.graal.python.nodes.BuiltinNames;
374374
import com.oracle.graal.python.nodes.attributes.ReadAttributeFromPythonObjectNode;
375375
import com.oracle.graal.python.nodes.attributes.WriteAttributeToPythonObjectNode;
376-
import com.oracle.graal.python.nodes.call.GenericInvokeNode;
376+
import com.oracle.graal.python.nodes.call.CallDispatchers;
377377
import com.oracle.graal.python.nodes.object.GetForeignObjectClassNode;
378378
import com.oracle.graal.python.nodes.statement.AbstractImportNode;
379379
import com.oracle.graal.python.pegparser.FutureFeature;
@@ -1312,7 +1312,7 @@ private void loadFile(TruffleString s, TruffleString prefix, PythonModule mod) {
13121312
return getLanguage().parse(getContext(), source, InputType.FILE, false, 0, false, null, EnumSet.noneOf(FutureFeature.class));
13131313
};
13141314
RootCallTarget callTarget = (RootCallTarget) getLanguage().cacheCode(s, getCode);
1315-
GenericInvokeNode.getUncached().execute(callTarget, PArguments.withGlobals(mod));
1315+
CallDispatchers.SimpleIndirectInvokeNode.executeUncached(callTarget, PArguments.withGlobals(mod));
13161316
}
13171317

13181318
public final PInt getTrue() {

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/modules/BuiltinFunctions.java

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -220,9 +220,8 @@
220220
import com.oracle.graal.python.nodes.bytecode.GetAIterNode;
221221
import com.oracle.graal.python.nodes.bytecode.PBytecodeRootNode;
222222
import com.oracle.graal.python.nodes.bytecode_dsl.PBytecodeDSLRootNode;
223-
import com.oracle.graal.python.nodes.call.CallDispatchNode;
223+
import com.oracle.graal.python.nodes.call.CallDispatchers;
224224
import com.oracle.graal.python.nodes.call.CallNode;
225-
import com.oracle.graal.python.nodes.call.GenericInvokeNode;
226225
import com.oracle.graal.python.nodes.call.special.CallUnaryMethodNode;
227226
import com.oracle.graal.python.nodes.call.special.LookupAndCallBinaryNode;
228227
import com.oracle.graal.python.nodes.call.special.LookupAndCallUnaryNode;
@@ -791,7 +790,6 @@ static Object doObject(VirtualFrame frame, Object a, Object b,
791790
@GenerateNodeFactory
792791
public abstract static class EvalNode extends PythonBuiltinNode {
793792
@Child protected CompileNode compileNode;
794-
@Child private GenericInvokeNode invokeNode = GenericInvokeNode.create();
795793
@Child private GetOrCreateDictNode getOrCreateDictNode;
796794

797795
final void assertNoFreeVars(Node inliningTarget, PCode code, PRaiseNode raiseNode) {
@@ -855,21 +853,23 @@ Object execInheritGlobalsInheritLocals(VirtualFrame frame, Object source, @Suppr
855853
@Exclusive @Cached ReadCallerFrameNode readCallerFrameNode,
856854
@Exclusive @Cached CodeNodes.GetCodeCallTargetNode getCt,
857855
@Cached GetFrameLocalsNode getFrameLocalsNode,
856+
@Shared @Cached CallDispatchers.SimpleIndirectInvokeNode invoke,
858857
@Exclusive @Cached PRaiseNode raiseNode) {
859858
PCode code = createAndCheckCode(frame, inliningTarget, source, raiseNode);
860859
PFrame callerFrame = readCallerFrameNode.executeWith(frame, 0);
861860
Object[] args = PArguments.create();
862861
inheritGlobals(callerFrame, args);
863862
inheritLocals(inliningTarget, callerFrame, args, getFrameLocalsNode);
864863

865-
return invokeNode.execute(frame, getCt.execute(inliningTarget, code), args);
864+
return invoke.execute(frame, inliningTarget, getCt.execute(inliningTarget, code), args);
866865
}
867866

868867
@Specialization
869868
Object execCustomGlobalsGlobalLocals(VirtualFrame frame, Object source, PDict globals, @SuppressWarnings("unused") PNone locals,
870869
@Bind("this") Node inliningTarget,
871870
@Shared @Cached HashingCollectionNodes.SetItemNode setBuiltins,
872871
@Shared("getCt") @Cached CodeNodes.GetCodeCallTargetNode getCt,
872+
@Shared @Cached CallDispatchers.SimpleIndirectInvokeNode invoke,
873873
@Shared @Cached PRaiseNode raiseNode) {
874874
PCode code = createAndCheckCode(frame, inliningTarget, source, raiseNode);
875875
Object[] args = PArguments.create();
@@ -880,7 +880,7 @@ Object execCustomGlobalsGlobalLocals(VirtualFrame frame, Object source, PDict gl
880880
throw raiseNode.raise(inliningTarget, ValueError, ErrorMessages.CANNOT_CREATE_CALL_TARGET, code);
881881
}
882882

883-
return invokeNode.execute(frame, rootCallTarget, args);
883+
return invoke.execute(frame, inliningTarget, rootCallTarget, args);
884884
}
885885

886886
@Specialization(guards = {"isMapping(inliningTarget, mappingCheckNode, locals)"})
@@ -890,14 +890,15 @@ Object execInheritGlobalsCustomLocals(VirtualFrame frame, Object source, @Suppre
890890
@SuppressWarnings("unused") @Shared @Cached PyMappingCheckNode mappingCheckNode,
891891
@Exclusive @Cached ReadCallerFrameNode readCallerFrameNode,
892892
@Shared("getCt") @Cached CodeNodes.GetCodeCallTargetNode getCt,
893+
@Shared @Cached CallDispatchers.SimpleIndirectInvokeNode invoke,
893894
@Shared @Cached PRaiseNode raiseNode) {
894895
PCode code = createAndCheckCode(frame, inliningTarget, source, raiseNode);
895896
PFrame callerFrame = readCallerFrameNode.executeWith(frame, 0);
896897
Object[] args = PArguments.create();
897898
inheritGlobals(callerFrame, args);
898899
setCustomLocals(args, locals);
899900

900-
return invokeNode.execute(frame, getCt.execute(inliningTarget, code), args);
901+
return invoke.execute(frame, inliningTarget, getCt.execute(inliningTarget, code), args);
901902
}
902903

903904
@Specialization(guards = {"isMapping(inliningTarget, mappingCheckNode, locals)"})
@@ -907,13 +908,14 @@ Object execCustomGlobalsCustomLocals(VirtualFrame frame, Object source, PDict gl
907908
@SuppressWarnings("unused") @Shared @Cached PyMappingCheckNode mappingCheckNode,
908909
@Shared @Cached HashingCollectionNodes.SetItemNode setBuiltins,
909910
@Shared("getCt") @Cached CodeNodes.GetCodeCallTargetNode getCt,
911+
@Shared @Cached CallDispatchers.SimpleIndirectInvokeNode invoke,
910912
@Shared @Cached PRaiseNode raiseNode) {
911913
PCode code = createAndCheckCode(frame, inliningTarget, source, raiseNode);
912914
Object[] args = PArguments.create();
913915
setCustomGlobals(frame, inliningTarget, globals, setBuiltins, args);
914916
setCustomLocals(args, locals);
915917

916-
return invokeNode.execute(frame, getCt.execute(inliningTarget, code), args);
918+
return invoke.execute(frame, inliningTarget, getCt.execute(inliningTarget, code), args);
917919
}
918920

919921
@Specialization(guards = {"!isAnyNone(globals)", "!isDict(globals)"})
@@ -2488,12 +2490,12 @@ private static Object buildJavaClass(Object namespace, TruffleString name, Objec
24882490
}
24892491

24902492
@InliningCutoff
2491-
private static Object buildJavaClass(VirtualFrame frame, PythonLanguage language, PFunction function, Object[] arguments, CallDispatchNode callBody,
2493+
private static Object buildJavaClass(VirtualFrame frame, Node inliningTarget, PythonLanguage language, PFunction function, Object[] arguments, CallDispatchers.FunctionInvokeNode invokeBody,
24922494
TruffleString name) {
24932495
PDict ns = PFactory.createDict(language, new DynamicObjectStorage(language));
24942496
Object[] args = PArguments.create(0);
24952497
PArguments.setSpecialArgument(args, ns);
2496-
callBody.executeCall(frame, function, args);
2498+
invokeBody.execute(frame, inliningTarget, function, args);
24972499
return buildJavaClass(ns, name, arguments[1]);
24982500
}
24992501

@@ -2507,7 +2509,7 @@ protected Object doItNonFunction(VirtualFrame frame, Object function, Object[] a
25072509
@Cached PyMappingCheckNode pyMappingCheckNode,
25082510
@Cached CallNode callPrep,
25092511
@Cached CallNode callType,
2510-
@Cached CallDispatchNode callBody,
2512+
@Cached CallDispatchers.FunctionInvokeNode invokeBody,
25112513
@Cached UpdateBasesNode update,
25122514
@Cached PyObjectSetItem setOrigBases,
25132515
@Cached GetClassNode getClass,
@@ -2537,7 +2539,7 @@ protected Object doItNonFunction(VirtualFrame frame, Object function, Object[] a
25372539

25382540
if (arguments.length == 2 && env.isHostObject(arguments[1]) && env.asHostObject(arguments[1]) instanceof Class<?>) {
25392541
// we want to subclass a Java class
2540-
return buildJavaClass(frame, language, (PFunction) function, arguments, callBody, name);
2542+
return buildJavaClass(frame, inliningTarget, language, (PFunction) function, arguments, invokeBody, name);
25412543
}
25422544

25432545
class InitializeBuildClass {
@@ -2606,7 +2608,7 @@ class InitializeBuildClass {
26062608
}
26072609
Object[] bodyArguments = PArguments.create(0);
26082610
PArguments.setSpecialArgument(bodyArguments, ns);
2609-
callBody.executeCall(frame, (PFunction) function, bodyArguments);
2611+
invokeBody.execute(frame, inliningTarget, (PFunction) function, bodyArguments);
26102612
if (init.bases != origBases) {
26112613
setOrigBases.execute(frame, inliningTarget, ns, SpecialAttributeNames.T___ORIG_BASES__, origBases);
26122614
}

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/modules/ImpModuleBuiltins.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,6 @@
8181
import com.oracle.graal.python.builtins.objects.cext.common.CExtCommonNodes.CheckFunctionResultNode;
8282
import com.oracle.graal.python.builtins.objects.cext.common.LoadCExtException.ApiInitException;
8383
import com.oracle.graal.python.builtins.objects.cext.common.LoadCExtException.ImportException;
84-
import com.oracle.graal.python.builtins.objects.code.CodeNodes;
8584
import com.oracle.graal.python.builtins.objects.code.PCode;
8685
import com.oracle.graal.python.builtins.objects.function.PArguments;
8786
import com.oracle.graal.python.builtins.objects.memoryview.MemoryViewBuiltins.MemoryViewNode;
@@ -101,7 +100,7 @@
101100
import com.oracle.graal.python.nodes.PRaiseNode;
102101
import com.oracle.graal.python.nodes.attributes.ReadAttributeFromPythonObjectNode;
103102
import com.oracle.graal.python.nodes.attributes.WriteAttributeToPythonObjectNode;
104-
import com.oracle.graal.python.nodes.call.GenericInvokeNode;
103+
import com.oracle.graal.python.nodes.call.CallDispatchers;
105104
import com.oracle.graal.python.nodes.function.PythonBuiltinBaseNode;
106105
import com.oracle.graal.python.nodes.function.PythonBuiltinNode;
107106
import com.oracle.graal.python.nodes.function.builtins.PythonBinaryBuiltinNode;
@@ -697,8 +696,8 @@ public static PythonModule importFrozenModuleObject(Python3Core core, TruffleStr
697696
WriteAttributeToPythonObjectNode.getUncached().execute(module, T___PATH__, PFactory.createList(core.getLanguage()));
698697
}
699698

700-
RootCallTarget callTarget = CodeNodes.GetCodeCallTargetNode.executeUncached(code);
701-
GenericInvokeNode.getUncached().execute(callTarget, PArguments.withGlobals(module));
699+
RootCallTarget callTarget = code.getRootCallTarget();
700+
CallDispatchers.SimpleIndirectInvokeNode.executeUncached(callTarget, PArguments.withGlobals(module));
702701

703702
Object origName = info.origName == null ? PNone.NONE : info.origName;
704703
WriteAttributeToPythonObjectNode.getUncached().execute(module, T___ORIGNAME__, origName);

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/modules/cext/PythonCextCEvalBuiltins.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@
7070
import com.oracle.graal.python.builtins.objects.module.PythonModule;
7171
import com.oracle.graal.python.builtins.objects.object.PythonObject;
7272
import com.oracle.graal.python.nodes.argument.CreateArgumentsNode;
73-
import com.oracle.graal.python.nodes.call.GenericInvokeNode;
73+
import com.oracle.graal.python.nodes.call.CallDispatchers;
7474
import com.oracle.graal.python.nodes.frame.GetCurrentFrameRef;
7575
import com.oracle.graal.python.nodes.frame.ReadCallerFrameNode;
7676
import com.oracle.graal.python.nodes.object.GetDictIfExistsNode;
@@ -158,7 +158,7 @@ static Object doGeneric(PCode code, Object globals, Object locals,
158158
@Cached CodeNodes.GetCodeSignatureNode getSignatureNode,
159159
@Cached CodeNodes.GetCodeCallTargetNode getCallTargetNode,
160160
@Cached CreateArgumentsNode.CreateAndCheckArgumentsNode createAndCheckArgumentsNode,
161-
@Cached GenericInvokeNode invokeNode) {
161+
@Cached CallDispatchers.SimpleIndirectInvokeNode invoke) {
162162
Object[] defaults = readNode.readPyObjectArray(defaultValueArrayPtr, defaultValueCount);
163163
PKeyword[] kwdefaults = castKwargsNode.execute(inliningTarget, kwdefaultsWrapper);
164164
PCell[] closure = null;
@@ -194,7 +194,7 @@ static Object doGeneric(PCode code, Object globals, Object locals,
194194
}
195195

196196
RootCallTarget rootCallTarget = getCallTargetNode.execute(inliningTarget, code);
197-
return invokeNode.execute(rootCallTarget, pArguments);
197+
return invoke.execute(null, inliningTarget, rootCallTarget, pArguments);
198198
}
199199
}
200200

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/cext/capi/ExternalFunctionNodes.java

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -835,9 +835,6 @@ public static MethDirectRoot create(PythonLanguage lang, TruffleString name, PEx
835835
}
836836
}
837837

838-
/**
839-
* Like {@link com.oracle.graal.python.nodes.call.FunctionInvokeNode} but invokes a C function.
840-
*/
841838
@GenerateUncached
842839
@GenerateCached(false)
843840
@GenerateInline

0 commit comments

Comments
 (0)