Skip to content

Commit f9d738f

Browse files
committed
Optimize IsTypeNode by avoiding native call for native objects
1 parent d4f6fb8 commit f9d738f

File tree

3 files changed

+4
-9
lines changed

3 files changed

+4
-9
lines changed

graalpython/com.oracle.graal.python.cext/src/capi.c

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -616,10 +616,6 @@ PyAPI_FUNC(void*) GraalPyPrivate_PointerAddOffset(void* x, Py_ssize_t y) {
616616
return (char *)x + y;
617617
}
618618

619-
PyAPI_FUNC(int) GraalPyPrivate_SubclassCheck(PyObject* type) {
620-
return PyType_FastSubclass(Py_TYPE(type), Py_TPFLAGS_TYPE_SUBCLASS);
621-
}
622-
623619
// Implements the basesisze check in typeobject.c:_PyObject_GetState
624620
PyAPI_FUNC(int) GraalPyPrivate_CheckBasicsizeForGetstate(PyTypeObject* type, int slot_num) {
625621
Py_ssize_t basicsize = PyBaseObject_Type.tp_basicsize;

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,6 @@ public enum NativeCAPISymbol implements NativeCExtSymbol {
123123
FUN_FLOAT_SUBTYPE_NEW("GraalPyPrivate_Float_SubtypeNew", PyObjectTransfer, PyTypeObject, ArgDescriptor.Double),
124124
FUN_COMPLEX_SUBTYPE_FROM_DOUBLES("GraalPyPrivate_Complex_SubtypeFromDoubles", PyObjectTransfer, PyTypeObject, ArgDescriptor.Double, ArgDescriptor.Double),
125125
FUN_EXCEPTION_SUBTYPE_NEW("GraalPyPrivate_Exception_SubtypeNew", PyObjectTransfer, PyTypeObject, PyObject),
126-
FUN_SUBCLASS_CHECK("GraalPyPrivate_SubclassCheck", Int, PyObject),
127126
FUN_UNICODE_SUBTYPE_NEW("GraalPyPrivate_Unicode_SubtypeNew", PyObjectTransfer, PyTypeObject, PyObject),
128127
FUN_CHECK_BASICSIZE_FOR_GETSTATE("GraalPyPrivate_CheckBasicsizeForGetstate", Int, PyTypeObject, Int),
129128
FUN_MMAP_INIT_BUFFERPROTOCOL("GraalPyPrivate_MMap_InitBufferProtocol", ArgDescriptor.Void, PyTypeObject),

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/type/TypeNodes.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,6 @@
4343
import static com.oracle.graal.python.builtins.PythonBuiltinClassType.SystemError;
4444
import static com.oracle.graal.python.builtins.PythonBuiltinClassType.TypeError;
4545
import static com.oracle.graal.python.builtins.objects.PNone.NO_VALUE;
46-
import static com.oracle.graal.python.builtins.objects.cext.capi.NativeCAPISymbol.FUN_SUBCLASS_CHECK;
4746
import static com.oracle.graal.python.builtins.objects.cext.structs.CFields.PyHeapTypeObject__ht_qualname;
4847
import static com.oracle.graal.python.builtins.objects.cext.structs.CFields.PyTypeObject__tp_base;
4948
import static com.oracle.graal.python.builtins.objects.cext.structs.CFields.PyTypeObject__tp_bases;
@@ -1752,17 +1751,18 @@ static boolean doBuiltinType(@SuppressWarnings("unused") PythonBuiltinClassType
17521751
}
17531752

17541753
@Specialization
1755-
@InliningCutoff
17561754
static boolean doNativeClass(Node inliningTarget, PythonAbstractNativeObject obj,
17571755
@Cached IsBuiltinClassProfile profile,
17581756
@Cached GetPythonObjectClassNode getClassNode,
1759-
@Cached(inline = false) CExtNodes.PCallCapiFunction nativeTypeCheck) {
1757+
@Cached CStructAccess.ReadI64Node getTpFlagsNode) {
17601758
Object type = getClassNode.execute(inliningTarget, obj);
17611759
if (profile.profileClass(inliningTarget, type, PythonBuiltinClassType.PythonClass)) {
17621760
return true;
17631761
}
1762+
17641763
if (PythonNativeClass.isInstance(type)) {
1765-
return (int) nativeTypeCheck.call(FUN_SUBCLASS_CHECK, obj.getPtr()) == 1;
1764+
long tp_flags = getTpFlagsNode.readFromObj(PythonNativeClass.cast(type), PyTypeObject__tp_flags);
1765+
return (tp_flags & TYPE_SUBCLASS) != 0;
17661766
}
17671767
return false;
17681768
}

0 commit comments

Comments
 (0)