Skip to content

Commit 862edd4

Browse files
committed
SuperBuiltins, ReadGlobalOrBuiltinNode, WrapTpNew use PythonLanguage#isSingleContext
1 parent dff1cbc commit 862edd4

File tree

4 files changed

+27
-37
lines changed

4 files changed

+27
-37
lines changed

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/superobject/SuperBuiltins.java

Lines changed: 15 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -40,9 +40,16 @@
4040
*/
4141
package com.oracle.graal.python.builtins.objects.superobject;
4242

43+
import static com.oracle.graal.python.nodes.SpecialAttributeNames.__SELF_CLASS__;
44+
import static com.oracle.graal.python.nodes.SpecialAttributeNames.__SELF__;
45+
import static com.oracle.graal.python.nodes.SpecialAttributeNames.__THISCLASS__;
46+
import static com.oracle.graal.python.nodes.SpecialMethodNames.__GETATTRIBUTE__;
47+
import static com.oracle.graal.python.nodes.SpecialMethodNames.__GET__;
48+
import static com.oracle.graal.python.nodes.SpecialMethodNames.__INIT__;
49+
import static com.oracle.graal.python.nodes.SpecialMethodNames.__REPR__;
50+
4351
import java.util.List;
4452

45-
import com.oracle.graal.python.PythonLanguage;
4653
import com.oracle.graal.python.builtins.Builtin;
4754
import com.oracle.graal.python.builtins.CoreFunctions;
4855
import com.oracle.graal.python.builtins.PythonBuiltinClassType;
@@ -69,6 +76,7 @@
6976
import com.oracle.graal.python.builtins.objects.type.TypeNodes.IsSameTypeNode;
7077
import com.oracle.graal.python.builtins.objects.type.TypeNodesFactory.IsSameTypeNodeGen;
7178
import com.oracle.graal.python.nodes.ErrorMessages;
79+
import com.oracle.graal.python.nodes.PNodeWithContext;
7280
import com.oracle.graal.python.nodes.SpecialAttributeNames;
7381
import com.oracle.graal.python.nodes.argument.ReadIndexedArgumentNode;
7482
import com.oracle.graal.python.nodes.attributes.LookupInheritedSlotNode;
@@ -89,7 +97,6 @@
8997
import com.oracle.graal.python.runtime.exception.PException;
9098
import com.oracle.graal.python.runtime.exception.PythonErrorType;
9199
import com.oracle.graal.python.util.PythonUtils;
92-
import com.oracle.truffle.api.Assumption;
93100
import com.oracle.truffle.api.CompilerDirectives;
94101
import com.oracle.truffle.api.dsl.Cached;
95102
import com.oracle.truffle.api.dsl.Fallback;
@@ -98,32 +105,20 @@
98105
import com.oracle.truffle.api.dsl.Specialization;
99106
import com.oracle.truffle.api.frame.VirtualFrame;
100107
import com.oracle.truffle.api.library.CachedLibrary;
101-
import com.oracle.truffle.api.nodes.Node;
102108
import com.oracle.truffle.api.profiles.ConditionProfile;
103109

104-
import static com.oracle.graal.python.nodes.SpecialAttributeNames.__SELF_CLASS__;
105-
import static com.oracle.graal.python.nodes.SpecialAttributeNames.__SELF__;
106-
import static com.oracle.graal.python.nodes.SpecialAttributeNames.__THISCLASS__;
107-
import static com.oracle.graal.python.nodes.SpecialMethodNames.__GETATTRIBUTE__;
108-
import static com.oracle.graal.python.nodes.SpecialMethodNames.__GET__;
109-
import static com.oracle.graal.python.nodes.SpecialMethodNames.__INIT__;
110-
import static com.oracle.graal.python.nodes.SpecialMethodNames.__REPR__;
111-
112110
@CoreFunctions(extendClasses = PythonBuiltinClassType.Super)
113111
public final class SuperBuiltins extends PythonBuiltins {
114112
@Override
115113
protected List<? extends NodeFactory<? extends PythonBuiltinBaseNode>> getNodeFactories() {
116114
return SuperBuiltinsFactory.getFactories();
117115
}
118116

119-
abstract static class GetTypeNode extends Node {
120-
final Assumption singleContextAssumption() {
121-
return PythonLanguage.get(this).singleContextAssumption;
122-
}
117+
abstract static class GetTypeNode extends PNodeWithContext {
123118

124119
abstract Object execute(SuperObject self);
125120

126-
@Specialization(guards = "self == cachedSelf", assumptions = {"cachedSelf.getNeverReinitializedAssumption()", "singleContextAssumption()"}, limit = "1")
121+
@Specialization(guards = {"isSingleContext()", "self == cachedSelf"}, assumptions = {"cachedSelf.getNeverReinitializedAssumption()"}, limit = "1")
127122
static Object cached(@SuppressWarnings("unused") SuperObject self,
128123
@SuppressWarnings("unused") @Cached("self") SuperObject cachedSelf,
129124
@Cached("self.getType()") Object type) {
@@ -136,14 +131,11 @@ static Object uncached(SuperObject self) {
136131
}
137132
}
138133

139-
abstract static class GetObjectTypeNode extends Node {
140-
final Assumption singleContextAssumption() {
141-
return PythonLanguage.get(this).singleContextAssumption;
142-
}
134+
abstract static class GetObjectTypeNode extends PNodeWithContext {
143135

144136
abstract Object execute(SuperObject self);
145137

146-
@Specialization(guards = "self == cachedSelf", assumptions = {"cachedSelf.getNeverReinitializedAssumption()", "singleContextAssumption()"}, limit = "1")
138+
@Specialization(guards = {"isSingleContext()", "self == cachedSelf"}, assumptions = {"cachedSelf.getNeverReinitializedAssumption()"}, limit = "1")
147139
static Object cached(@SuppressWarnings("unused") SuperObject self,
148140
@SuppressWarnings("unused") @Cached("self") SuperObject cachedSelf,
149141
@Cached("self.getObjectType()") Object type) {
@@ -156,14 +148,11 @@ static Object uncached(SuperObject self) {
156148
}
157149
}
158150

159-
abstract static class GetObjectNode extends Node {
160-
final Assumption singleContextAssumption() {
161-
return PythonLanguage.get(this).singleContextAssumption;
162-
}
151+
abstract static class GetObjectNode extends PNodeWithContext {
163152

164153
abstract Object execute(SuperObject self);
165154

166-
@Specialization(guards = "self == cachedSelf", assumptions = {"cachedSelf.getNeverReinitializedAssumption()", "singleContextAssumption()"}, limit = "1")
155+
@Specialization(guards = {"isSingleContext()", "self == cachedSelf"}, assumptions = {"cachedSelf.getNeverReinitializedAssumption()"}, limit = "1")
167156
static Object cached(@SuppressWarnings("unused") SuperObject self,
168157
@SuppressWarnings("unused") @Cached("self") SuperObject cachedSelf,
169158
@Cached("self.getObject()") Object object) {

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/nodes/frame/ReadGlobalOrBuiltinNode.java

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -28,14 +28,14 @@
2828
import static com.oracle.graal.python.runtime.exception.PythonErrorType.KeyError;
2929
import static com.oracle.graal.python.runtime.exception.PythonErrorType.NameError;
3030

31-
import com.oracle.graal.python.PythonLanguage;
3231
import com.oracle.graal.python.builtins.objects.PNone;
3332
import com.oracle.graal.python.builtins.objects.common.HashingStorage;
3433
import com.oracle.graal.python.builtins.objects.common.HashingStorageLibrary;
3534
import com.oracle.graal.python.builtins.objects.dict.PDict;
3635
import com.oracle.graal.python.builtins.objects.module.PythonModule;
3736
import com.oracle.graal.python.nodes.BuiltinNames;
3837
import com.oracle.graal.python.nodes.ErrorMessages;
38+
import com.oracle.graal.python.nodes.PNodeWithContext;
3939
import com.oracle.graal.python.nodes.PRaiseNode;
4040
import com.oracle.graal.python.nodes.attributes.ReadAttributeFromObjectNode;
4141
import com.oracle.graal.python.nodes.expression.ExpressionNode;
@@ -57,7 +57,6 @@
5757
import com.oracle.truffle.api.instrumentation.StandardTags;
5858
import com.oracle.truffle.api.instrumentation.Tag;
5959
import com.oracle.truffle.api.library.CachedLibrary;
60-
import com.oracle.truffle.api.nodes.Node;
6160
import com.oracle.truffle.api.nodes.NodeInfo;
6261
import com.oracle.truffle.api.nodes.UnexpectedResultException;
6362
import com.oracle.truffle.api.profiles.ConditionProfile;
@@ -212,11 +211,10 @@ public Object getNodeObject() {
212211
}
213212
}
214213

215-
abstract class ReadBuiltinNode extends Node {
214+
abstract class ReadBuiltinNode extends PNodeWithContext {
216215
protected static final Assumption singleCoreNotInitialized = Truffle.getRuntime().createAssumption();
217216

218217
protected final ConditionProfile isBuiltinProfile = ConditionProfile.createBinaryProfile();
219-
protected final Assumption singleContextAssumption = PythonLanguage.get(this).singleContextAssumption;
220218
protected final String attributeId;
221219

222220
@CompilationFinal private ConditionProfile isCoreInitializedProfile;
@@ -232,7 +230,7 @@ protected ReadBuiltinNode(String attributeId) {
232230

233231
// TODO: (tfel) Think about how we can globally catch writes to the builtin
234232
// module so we can treat anything read from it as constant here.
235-
@Specialization(assumptions = "singleContextAssumption")
233+
@Specialization(guards = "isSingleContext()")
236234
Object returnBuiltinFromConstantModule(
237235
@SuppressWarnings("unused") @Cached("getBuiltins()") PythonModule builtins) {
238236
Object builtin = readFromBuiltinsNode.execute(builtins, attributeId);

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/nodes/function/builtins/WrapTpNew.java

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,6 @@
4242

4343
import org.graalvm.collections.Pair;
4444

45-
import com.oracle.graal.python.PythonLanguage;
4645
import com.oracle.graal.python.builtins.PythonBuiltinClassType;
4746
import com.oracle.graal.python.builtins.objects.function.PArguments;
4847
import com.oracle.graal.python.builtins.objects.function.PBuiltinFunction;
@@ -53,6 +52,7 @@
5352
import com.oracle.graal.python.nodes.attributes.LookupAttributeInMRONode;
5453
import com.oracle.graal.python.nodes.classes.IsSubtypeNode;
5554
import com.oracle.graal.python.nodes.function.PythonBuiltinBaseNode;
55+
import com.oracle.graal.python.util.PythonUtils;
5656
import com.oracle.truffle.api.CompilerDirectives;
5757
import com.oracle.truffle.api.CompilerDirectives.CompilationFinal;
5858
import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
@@ -137,11 +137,7 @@ public Object execute(VirtualFrame frame) {
137137
if (newMethod instanceof PBuiltinFunction) {
138138
if (builtinProfile == null) {
139139
CompilerDirectives.transferToInterpreterAndInvalidate();
140-
if (PythonLanguage.get(this).singleContextAssumption.isValid()) {
141-
builtinProfile = ValueProfile.createIdentityProfile();
142-
} else {
143-
builtinProfile = ValueProfile.getUncached();
144-
}
140+
builtinProfile = PythonUtils.createValueIdentityProfile();
145141
}
146142
NodeFactory<? extends PythonBuiltinBaseNode> factory = ((PBuiltinFunction) builtinProfile.profile(newMethod)).getBuiltinNodeFactory();
147143
if (factory != null) {

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/util/PythonUtils.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,13 +73,15 @@
7373
import com.oracle.graal.python.runtime.object.PythonObjectFactory;
7474
import com.oracle.graal.python.runtime.object.PythonObjectSlowPathFactory;
7575
import com.oracle.truffle.api.CallTarget;
76+
import com.oracle.truffle.api.CompilerAsserts;
7677
import com.oracle.truffle.api.CompilerDirectives;
7778
import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
7879
import com.oracle.truffle.api.RootCallTarget;
7980
import com.oracle.truffle.api.dsl.NodeFactory;
8081
import com.oracle.truffle.api.memory.ByteArraySupport;
8182
import com.oracle.truffle.api.nodes.RootNode;
8283
import com.oracle.truffle.api.profiles.ConditionProfile;
84+
import com.oracle.truffle.api.profiles.ValueProfile;
8385

8486
public final class PythonUtils {
8587

@@ -657,6 +659,11 @@ public static boolean isBmpCodePoint(int codePoint) {
657659
// additional runtime optimizations.
658660
}
659661

662+
public static ValueProfile createValueIdentityProfile() {
663+
CompilerAsserts.neverPartOfCompilation();
664+
return PythonLanguage.get(null).isSingleContext() ? ValueProfile.createIdentityProfile() : ValueProfile.createClassProfile();
665+
}
666+
660667
@TruffleBoundary
661668
public static void createMember(PythonObjectSlowPathFactory factory, PythonLanguage language, Object klass, Class<?> nodeClass, String name, String doc, int idx,
662669
Function<PythonLanguage, RootNode> rootNodeSupplier) {

0 commit comments

Comments
 (0)