https://github.com/python/cpython/commit/beb653cc24275025708758d444835db2ddbb74e4
commit: beb653cc24275025708758d444835db2ddbb74e4
branch: main
author: Anthony Shaw <[email protected]>
committer: gvanrossum <[email protected]>
date: 2024-05-01T07:11:14-07:00
summary:
gh-117958: Expose JIT code via method in UOpExecutor (#117959)
files:
A Misc/NEWS.d/next/Core and
Builtins/2024-04-18-03-49-41.gh-issue-117958.-EsfUs.rst
M Python/optimizer.c
diff --git a/Misc/NEWS.d/next/Core and
Builtins/2024-04-18-03-49-41.gh-issue-117958.-EsfUs.rst b/Misc/NEWS.d/next/Core
and Builtins/2024-04-18-03-49-41.gh-issue-117958.-EsfUs.rst
new file mode 100644
index 00000000000000..c127786bc129b1
--- /dev/null
+++ b/Misc/NEWS.d/next/Core and
Builtins/2024-04-18-03-49-41.gh-issue-117958.-EsfUs.rst
@@ -0,0 +1,2 @@
+Added a ``get_jit_code()`` method to access JIT compiled machine code from the
UOp Executor when the experimental JIT is enabled. Patch
+by Anthony Shaw.
diff --git a/Python/optimizer.c b/Python/optimizer.c
index 6576aa1cddc033..9ba8d84a47dcd9 100644
--- a/Python/optimizer.c
+++ b/Python/optimizer.c
@@ -393,6 +393,29 @@ executor_traverse(PyObject *o, visitproc visit, void *arg)
return 0;
}
+static PyObject *
+get_jit_code(PyObject *self, PyObject *Py_UNUSED(ignored))
+{
+#ifndef _Py_JIT
+ PyErr_SetString(PyExc_RuntimeError, "JIT support not enabled.");
+ return NULL;
+#else
+ _PyExecutorObject *executor = (_PyExecutorObject *)self;
+ if (executor->jit_code == NULL || executor->jit_size == 0) {
+ Py_RETURN_NONE;
+ }
+ return PyBytes_FromStringAndSize(executor->jit_code, executor->jit_size);
+#endif
+}
+
+static PyMethodDef uop_executor_methods[] = {
+ { "is_valid", is_valid, METH_NOARGS, NULL },
+ { "get_jit_code", get_jit_code, METH_NOARGS, NULL},
+ { "get_opcode", get_opcode, METH_NOARGS, NULL },
+ { "get_oparg", get_oparg, METH_NOARGS, NULL },
+ { NULL, NULL },
+};
+
static int
executor_is_gc(PyObject *o)
{
@@ -407,7 +430,7 @@ PyTypeObject _PyUOpExecutor_Type = {
.tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_DISALLOW_INSTANTIATION |
Py_TPFLAGS_HAVE_GC,
.tp_dealloc = (destructor)uop_dealloc,
.tp_as_sequence = &uop_as_sequence,
- .tp_methods = executor_methods,
+ .tp_methods = uop_executor_methods,
.tp_traverse = executor_traverse,
.tp_clear = (inquiry)executor_clear,
.tp_is_gc = executor_is_gc,
_______________________________________________
Python-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3/lists/python-checkins.python.org/
Member address: [email protected]