Skip to content

Commit bb91b89

Browse files
author
Franziska Geiger
committed
Add Specialization to ContainsKeyNode and deleted profiling with base classes method
1 parent d5a9421 commit bb91b89

File tree

2 files changed

+15
-16
lines changed

2 files changed

+15
-16
lines changed

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/common/HashingStorageNodes.java

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,7 @@
8585
import com.oracle.graal.python.nodes.PNodeWithGlobalState.DefaultContextManager;
8686
import com.oracle.graal.python.nodes.PRaiseNode;
8787
import com.oracle.graal.python.nodes.SpecialMethodNames;
88+
import com.oracle.graal.python.nodes.attributes.LookupAttributeInMRONode;
8889
import com.oracle.graal.python.nodes.attributes.LookupInheritedAttributeNode;
8990
import com.oracle.graal.python.nodes.attributes.ReadAttributeFromDynamicObjectNode;
9091
import com.oracle.graal.python.nodes.builtins.ListNodes.FastConstructListNode;
@@ -266,7 +267,7 @@ protected boolean wrappedString(PString s) {
266267
CompilerDirectives.transferToInterpreterAndInvalidate();
267268
isBuiltinClassProfile = IsBuiltinClassProfile.create();
268269
}
269-
return isBuiltinClassProfile.profileClassWithBaseClasses(getClass(s), PythonBuiltinClassType.PString);
270+
return isBuiltinClassProfile.profileClass(getClass(s), PythonBuiltinClassType.PString);
270271
}
271272

272273
protected EconomicMapStorage switchToEconomicMap(HashingStorage storage) {
@@ -589,6 +590,19 @@ protected boolean readUncached(VirtualFrame frame, PythonObjectHybridDictStorage
589590
}
590591

591592
@Specialization(guards = "!isJavaString(name)")
593+
protected boolean readUncached(VirtualFrame frame, DynamicObjectStorage storage, PString name,
594+
@Cached LookupInheritedAttributeNode.Dynamic lookupHash,
595+
@Cached LookupAttributeInMRONode.Dynamic lookupStringHash,
596+
@Cached ContainsKeyNode recursiveNode) {
597+
if (lookupHash.execute(name, __HASH__) == lookupStringHash.execute(PythonBuiltinClassType.PString, __HASH__)) {
598+
return recursiveNode.execute(frame, storage, name.getValue());
599+
}
600+
CompilerDirectives.transferToInterpreter();
601+
// see GR-17389
602+
throw new RuntimeException("String subclasses with custom hash in dict not implemented.");
603+
}
604+
605+
@Specialization(guards = {"!isJavaString(name)", "!isPString(name)"})
592606
@SuppressWarnings("unused")
593607
protected boolean readUncached(DynamicObjectStorage storage, Object name) {
594608
return false;

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

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,6 @@
4545
import com.oracle.graal.python.builtins.objects.type.LazyPythonClass;
4646
import com.oracle.graal.python.builtins.objects.type.PythonAbstractClass;
4747
import com.oracle.graal.python.builtins.objects.type.PythonBuiltinClass;
48-
import com.oracle.graal.python.builtins.objects.type.PythonClass;
4948
import com.oracle.graal.python.runtime.exception.PException;
5049
import com.oracle.truffle.api.CompilerDirectives;
5150
import com.oracle.truffle.api.CompilerDirectives.CompilationFinal;
@@ -206,20 +205,6 @@ public boolean profileClass(LazyPythonClass clazz, PythonBuiltinClassType type)
206205
}
207206
}
208207

209-
public boolean profileClassWithBaseClasses(LazyPythonClass clazz, PythonBuiltinClassType type) {
210-
if (!profileClass(clazz, type)) {
211-
PythonAbstractClass[] baseClasses = ((PythonClass) clazz).getBaseClasses();
212-
for (PythonAbstractClass baseClazz : baseClasses) {
213-
if (profileClass(baseClazz, type)) {
214-
return true;
215-
}
216-
}
217-
return false;
218-
} else {
219-
return true;
220-
}
221-
}
222-
223208
public boolean profileClass(PythonAbstractClass clazz, PythonBuiltinClassType type) {
224209
if (clazz instanceof PythonBuiltinClass) {
225210
if (!isBuiltinClass) {

0 commit comments

Comments
 (0)