Skip to content

Commit fb9ca5a

Browse files
committed
[GR-12667] Nodes report polymorphism.
PullRequest: graalpython/301
2 parents 26858aa + 84d5998 commit fb9ca5a

File tree

10 files changed

+27
-6
lines changed

10 files changed

+27
-6
lines changed

ci.jsonnet

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
overlay: "9a364f9b9ae34629919679b5edefb803ad27fbb7",
2+
overlay: "3cf78c3623442ad827eed58a1780784a6eb95676",
33

44
// ======================================================================================================
55
//

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/nodes/attributes/ReadAttributeFromDynamicObjectNode.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,12 +47,14 @@
4747
import com.oracle.truffle.api.CompilerDirectives;
4848
import com.oracle.truffle.api.dsl.Cached;
4949
import com.oracle.truffle.api.dsl.ImportStatic;
50+
import com.oracle.truffle.api.dsl.ReportPolymorphism;
5051
import com.oracle.truffle.api.dsl.Specialization;
5152
import com.oracle.truffle.api.object.DynamicObject;
5253
import com.oracle.truffle.api.object.Location;
5354
import com.oracle.truffle.api.object.Shape;
5455

5556
@ImportStatic({PGuards.class, PythonOptions.class})
57+
@ReportPolymorphism
5658
public abstract class ReadAttributeFromDynamicObjectNode extends ObjectAttributeNode {
5759
public static ReadAttributeFromDynamicObjectNode create() {
5860
return ReadAttributeFromDynamicObjectNodeGen.create();

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/nodes/attributes/WriteAttributeToDynamicObjectNode.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@
4747
import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
4848
import com.oracle.truffle.api.dsl.Cached;
4949
import com.oracle.truffle.api.dsl.ImportStatic;
50+
import com.oracle.truffle.api.dsl.ReportPolymorphism;
5051
import com.oracle.truffle.api.dsl.Specialization;
5152
import com.oracle.truffle.api.object.DynamicObject;
5253
import com.oracle.truffle.api.object.FinalLocationException;
@@ -55,6 +56,7 @@
5556
import com.oracle.truffle.api.object.Shape;
5657

5758
@ImportStatic(PythonOptions.class)
59+
@ReportPolymorphism
5860
public abstract class WriteAttributeToDynamicObjectNode extends ObjectAttributeNode {
5961

6062
public abstract boolean execute(Object primary, Object key, Object value);

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/nodes/call/CallDispatchNode.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,11 +37,13 @@
3737
import com.oracle.truffle.api.RootCallTarget;
3838
import com.oracle.truffle.api.dsl.Cached;
3939
import com.oracle.truffle.api.dsl.ImportStatic;
40+
import com.oracle.truffle.api.dsl.ReportPolymorphism;
4041
import com.oracle.truffle.api.dsl.Specialization;
4142
import com.oracle.truffle.api.frame.VirtualFrame;
4243
import com.oracle.truffle.api.nodes.Node;
4344

4445
@ImportStatic(PythonOptions.class)
46+
@ReportPolymorphism
4547
public abstract class CallDispatchNode extends Node {
4648

4749
protected static InvokeNode createInvokeNode(PythonCallable callee) {

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/nodes/call/InvokeNode.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -214,7 +214,7 @@ public abstract class InvokeNode extends AbstractInvokeNode {
214214

215215
protected InvokeNode(CallTarget callTarget, Arity calleeArity, PythonObject globals, PCell[] closure, boolean isBuiltin, boolean isGenerator) {
216216
this.callNode = Truffle.getRuntime().createDirectCallNode(callTarget);
217-
if (isBuiltin) {
217+
if (isBuiltin && PythonOptions.getEnableForcedSplits()) {
218218
callNode.cloneCallTarget();
219219
}
220220
if (isGenerator && shouldInlineGenerators()) {

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/nodes/call/special/CallSpecialMethodNode.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,11 +52,13 @@
5252
import com.oracle.truffle.api.Assumption;
5353
import com.oracle.truffle.api.dsl.ImportStatic;
5454
import com.oracle.truffle.api.dsl.NodeFactory;
55+
import com.oracle.truffle.api.dsl.ReportPolymorphism;
5556
import com.oracle.truffle.api.dsl.TypeSystemReference;
5657
import com.oracle.truffle.api.nodes.Node;
5758

5859
@TypeSystemReference(PythonTypes.class)
5960
@ImportStatic(PythonOptions.class)
61+
@ReportPolymorphism
6062
abstract class CallSpecialMethodNode extends Node {
6163
/**
6264
* Returns a new instanceof the builtin if it's a subclass of the given class, and null

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/nodes/function/PythonBuiltinBaseNode.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,9 +48,7 @@
4848
import com.oracle.graal.python.nodes.SpecialMethodNames;
4949
import com.oracle.graal.python.runtime.PythonOptions;
5050
import com.oracle.truffle.api.dsl.ImportStatic;
51-
import com.oracle.truffle.api.dsl.ReportPolymorphism;
5251

53-
@ReportPolymorphism
5452
@ImportStatic({PGuards.class, PythonOptions.class, SpecialMethodNames.class, SpecialAttributeNames.class, BuiltinNames.class, NativeConversions.class})
5553
public abstract class PythonBuiltinBaseNode extends PNodeWithContext {
5654
}

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/runtime/PythonOptions.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,9 @@ private PythonOptions() {
116116
@Option(category = OptionCategory.DEBUG, help = "Minimal size of string, when lazy strings are used. Default 20") //
117117
public static final OptionKey<Integer> MinLazyStringLength = new OptionKey<>(20);
118118

119+
@Option(category = OptionCategory.EXPERT, help = "Enable forced splitting (of builtins). Default true.") //
120+
public static final OptionKey<Boolean> EnableForcedSplits = new OptionKey<>(true);
121+
119122
public static OptionDescriptors createDescriptors() {
120123
return new PythonOptionsOptionDescriptors();
121124
}
@@ -163,4 +166,8 @@ public static int getMinLazyStringLength() {
163166
public static boolean isWithThread() {
164167
return getOption(PythonLanguage.getContextRef().get(), WithThread);
165168
}
169+
170+
public static boolean getEnableForcedSplits() {
171+
return getOption(PythonLanguage.getContextRef().get(), EnableForcedSplits);
172+
}
166173
}

mx.graalpython/mx_graalpython.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@
3838
from mx_gate import Task
3939
from mx_graalpython_bench_param import PATH_MESO, BENCHMARKS
4040
from mx_graalpython_benchmark import PythonBenchmarkSuite, python_vm_registry, CPythonVm, PyPyVm, GraalPythonVm, \
41-
CONFIGURATION_DEFAULT
41+
CONFIGURATION_DEFAULT, CONFIGURATION_EXPERIMENTAL_SPLITTING
4242
from mx_unittest import unittest
4343

4444
SUITE = mx.suite('graalpython')
@@ -826,6 +826,10 @@ def _register_vms(namespace):
826826
python_vm_registry.add_vm(CPythonVm(CONFIGURATION_DEFAULT), SUITE)
827827
python_vm_registry.add_vm(PyPyVm(CONFIGURATION_DEFAULT), SUITE)
828828
python_vm_registry.add_vm(GraalPythonVm(config_name=CONFIGURATION_DEFAULT), SUITE, 10)
829+
python_vm_registry.add_vm(GraalPythonVm(config_name=CONFIGURATION_EXPERIMENTAL_SPLITTING, extra_vm_args=[
830+
'-Dgraal.TruffleExperimentalSplitting=true',
831+
'-Dgraal.TruffleExperimentalSplittingAllowForcedSplits=false'
832+
]), SUITE, 10)
829833

830834

831835
def _register_bench_suites(namespace):

mx.graalpython/mx_graalpython_benchmark.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@
5454
SUBGROUP_GRAAL_PYTHON = "graalpython"
5555
PYTHON_VM_REGISTRY_NAME = "Python"
5656
CONFIGURATION_DEFAULT = "default"
57+
CONFIGURATION_EXPERIMENTAL_SPLITTING = "experimental_splitting"
5758

5859
DEFAULT_ITERATIONS = 10
5960

@@ -186,12 +187,13 @@ def name(self):
186187

187188
class GraalPythonVm(GuestVm):
188189
def __init__(self, config_name=CONFIGURATION_DEFAULT, distributions=None, cp_suffix=None, cp_prefix=None,
189-
host_vm=None):
190+
host_vm=None, extra_vm_args=None):
190191
super(GraalPythonVm, self).__init__(host_vm=host_vm)
191192
self._config_name = config_name
192193
self._distributions = distributions
193194
self._cp_suffix = cp_suffix
194195
self._cp_prefix = cp_prefix
196+
self._extra_vm_args = extra_vm_args
195197

196198
def hosting_registry(self):
197199
return java_vm_registry
@@ -215,6 +217,8 @@ def run(self, cwd, args):
215217
dists.append('SULONG_MANAGED')
216218

217219
vm_args = mx.get_runtime_jvm_args(dists, cp_suffix=self._cp_suffix, cp_prefix=self._cp_prefix)
220+
if isinstance(self._extra_vm_args, list):
221+
vm_args += self._extra_vm_args
218222
vm_args += [
219223
"-Dpython.home=%s" % join(SUITE.dir, "graalpython"),
220224
"com.oracle.graal.python.shell.GraalPythonMain"

0 commit comments

Comments
 (0)