Skip to content

Commit 87b61ee

Browse files
committed
do not cache concrete classes in GetClassNode. The lookupType through the enum value should be constant foldable for single contexts
1 parent 05239ce commit 87b61ee

File tree

1 file changed

+20
-74
lines changed
  • graalpython/com.oracle.graal.python/src/com/oracle/graal/python/nodes/object

1 file changed

+20
-74
lines changed

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/nodes/object/GetClassNode.java

Lines changed: 20 additions & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -47,12 +47,8 @@
4747
import com.oracle.graal.python.builtins.objects.PNotImplemented;
4848
import com.oracle.graal.python.builtins.objects.cext.CExtNodes.GetNativeClassNode;
4949
import com.oracle.graal.python.builtins.objects.cext.PythonNativeObject;
50-
import com.oracle.graal.python.builtins.objects.floats.PFloat;
5150
import com.oracle.graal.python.builtins.objects.getsetdescriptor.GetSetDescriptor;
52-
import com.oracle.graal.python.builtins.objects.ints.PInt;
5351
import com.oracle.graal.python.builtins.objects.object.PythonObject;
54-
import com.oracle.graal.python.builtins.objects.str.PString;
55-
import com.oracle.graal.python.builtins.objects.type.PythonBuiltinClass;
5652
import com.oracle.graal.python.builtins.objects.type.PythonClass;
5753
import com.oracle.graal.python.nodes.BuiltinNames;
5854
import com.oracle.graal.python.nodes.PGuards;
@@ -78,18 +74,9 @@ public static GetClassNode create() {
7874

7975
public abstract PythonClass execute(Object object);
8076

81-
private PythonBuiltinClass cacheClass(Class<?> klass) {
82-
return getCore().lookupType(klass);
83-
}
84-
8577
@Specialization
86-
protected PythonClass getIt(@SuppressWarnings("unused") GetSetDescriptor object,
87-
@Cached("cacheGetSet()") PythonBuiltinClass klass) {
88-
return klass;
89-
}
90-
91-
PythonBuiltinClass cacheGetSet() {
92-
return cacheClass(GetSetDescriptor.class);
78+
protected PythonClass getIt(@SuppressWarnings("unused") GetSetDescriptor object) {
79+
return getCore().lookupType(PythonBuiltinClassType.GetSetDescriptor);
9380
}
9481

9582
@Specialization(guards = "!isNone(object)")
@@ -98,87 +85,51 @@ protected PythonClass getIt(PythonObject object,
9885
return profile.profile(object.getPythonClass());
9986
}
10087

101-
PythonBuiltinClass cacheNone() {
102-
return cacheClass(PNone.class);
103-
}
104-
10588
@Specialization
106-
protected PythonClass getIt(@SuppressWarnings("unused") PNone object,
107-
@Cached("cacheNone()") PythonBuiltinClass klass) {
108-
return klass;
109-
}
110-
111-
PythonBuiltinClass cacheNotImplemented() {
112-
return cacheClass(PNotImplemented.class);
89+
protected PythonClass getIt(@SuppressWarnings("unused") PNone object) {
90+
return getCore().lookupType(PythonBuiltinClassType.PNone);
11391
}
11492

11593
@SuppressWarnings("unused")
11694
@Specialization
117-
protected PythonClass getIt(PNotImplemented object,
118-
@Cached("cacheNotImplemented()") PythonBuiltinClass klass) {
119-
return klass;
120-
}
121-
122-
PythonBuiltinClass cacheEllipsis() {
123-
return cacheClass(PEllipsis.class);
95+
protected PythonClass getIt(PNotImplemented object) {
96+
return getCore().lookupType(PythonBuiltinClassType.PNotImplemented);
12497
}
12598

12699
@SuppressWarnings("unused")
127100
@Specialization
128-
protected PythonClass getIt(PEllipsis object,
129-
@Cached("cacheEllipsis()") PythonBuiltinClass klass) {
130-
return klass;
131-
}
132-
133-
PythonBuiltinClass cacheBool() {
134-
return cacheClass(Boolean.class);
101+
protected PythonClass getIt(PEllipsis object) {
102+
return getCore().lookupType(PythonBuiltinClassType.PEllipsis);
135103
}
136104

137105
@SuppressWarnings("unused")
138106
@Specialization
139-
protected PythonClass getIt(boolean object,
140-
@Cached("cacheBool()") PythonBuiltinClass klass) {
141-
return klass;
142-
}
143-
144-
PythonBuiltinClass cacheInt() {
145-
return cacheClass(PInt.class);
107+
protected PythonClass getIt(boolean object) {
108+
return getCore().lookupType(PythonBuiltinClassType.Boolean);
146109
}
147110

148111
@SuppressWarnings("unused")
149112
@Specialization
150-
protected PythonClass getIt(int object,
151-
@Cached("cacheInt()") PythonBuiltinClass klass) {
152-
return klass;
113+
protected PythonClass getIt(int object) {
114+
return getCore().lookupType(PythonBuiltinClassType.PInt);
153115
}
154116

155117
@SuppressWarnings("unused")
156118
@Specialization
157-
protected PythonClass getIt(long object,
158-
@Cached("cacheInt()") PythonBuiltinClass klass) {
159-
return klass;
160-
}
161-
162-
PythonBuiltinClass cacheFloat() {
163-
return cacheClass(PFloat.class);
119+
protected PythonClass getIt(long object) {
120+
return getCore().lookupType(PythonBuiltinClassType.PInt);
164121
}
165122

166123
@SuppressWarnings("unused")
167124
@Specialization
168-
protected PythonClass getIt(double object,
169-
@Cached("cacheFloat()") PythonBuiltinClass klass) {
170-
return klass;
171-
}
172-
173-
PythonBuiltinClass cacheString() {
174-
return cacheClass(PString.class);
125+
protected PythonClass getIt(double object) {
126+
return getCore().lookupType(PythonBuiltinClassType.PFloat);
175127
}
176128

177129
@SuppressWarnings("unused")
178130
@Specialization
179-
protected PythonClass getIt(String object,
180-
@Cached("cacheString()") PythonBuiltinClass klass) {
181-
return klass;
131+
protected PythonClass getIt(String object) {
132+
return getCore().lookupType(PythonBuiltinClassType.PString);
182133
}
183134

184135
@Specialization
@@ -192,15 +143,10 @@ protected PythonClass getIt(PythonNativeObject object,
192143
return getNativeClassNode.execute(object);
193144
}
194145

195-
PythonBuiltinClass cacheForeign() {
196-
return getCore().lookupType(PythonBuiltinClassType.TruffleObject);
197-
}
198-
199146
@SuppressWarnings("unused")
200147
@Specialization(guards = "isForeignObject(object)")
201-
protected PythonClass getIt(TruffleObject object,
202-
@Cached("cacheForeign()") PythonBuiltinClass klass) {
203-
return klass;
148+
protected PythonClass getIt(TruffleObject object) {
149+
return getCore().lookupType(PythonBuiltinClassType.TruffleObject);
204150
}
205151

206152
@TruffleBoundary

0 commit comments

Comments
 (0)