summaryrefslogtreecommitdiffstats
path: root/Include/internal/pycore_optimizer.h
diff options
context:
space:
mode:
authorSaul Shanabrook <s.shanabrook@gmail.com>2024-06-08 09:41:45 (GMT)
committerGitHub <noreply@github.com>2024-06-08 09:41:45 (GMT)
commit55402d3232ca400ebafe4fe3bd70f252304ebe07 (patch)
treeac32d1d0583c4a2e4f82a7352fdb836c49145d9a /Include/internal/pycore_optimizer.h
parent2080425154d235b4b7dcc9a8a2f58e71769125ca (diff)
downloadcpython-55402d3232ca400ebafe4fe3bd70f252304ebe07.zip
cpython-55402d3232ca400ebafe4fe3bd70f252304ebe07.tar.gz
cpython-55402d3232ca400ebafe4fe3bd70f252304ebe07.tar.bz2
gh-119258: Eliminate Type Guards in Tier 2 Optimizer with Watcher (GH-119365)
Co-authored-by: parmeggiani <parmeggiani@spaziodati.eu> Co-authored-by: dpdani <git@danieleparmeggiani.me> Co-authored-by: blurb-it[bot] <43283697+blurb-it[bot]@users.noreply.github.com> Co-authored-by: Brandt Bucher <brandtbucher@microsoft.com> Co-authored-by: Ken Jin <kenjin@python.org>
Diffstat (limited to 'Include/internal/pycore_optimizer.h')
-rw-r--r--Include/internal/pycore_optimizer.h9
1 files changed, 6 insertions, 3 deletions
diff --git a/Include/internal/pycore_optimizer.h b/Include/internal/pycore_optimizer.h
index 7612398..fd7833f 100644
--- a/Include/internal/pycore_optimizer.h
+++ b/Include/internal/pycore_optimizer.h
@@ -33,6 +33,7 @@ struct _Py_UopsSymbol {
int flags; // 0 bits: Top; 2 or more bits: Bottom
PyTypeObject *typ; // Borrowed reference
PyObject *const_val; // Owned reference (!)
+ unsigned int type_version; // currently stores type version
};
#define UOP_FORMAT_TARGET 0
@@ -123,9 +124,11 @@ extern _Py_UopsSymbol *_Py_uop_sym_new_const(_Py_UOpsContext *ctx, PyObject *con
extern _Py_UopsSymbol *_Py_uop_sym_new_null(_Py_UOpsContext *ctx);
extern bool _Py_uop_sym_has_type(_Py_UopsSymbol *sym);
extern bool _Py_uop_sym_matches_type(_Py_UopsSymbol *sym, PyTypeObject *typ);
+extern bool _Py_uop_sym_matches_type_version(_Py_UopsSymbol *sym, unsigned int version);
extern void _Py_uop_sym_set_null(_Py_UOpsContext *ctx, _Py_UopsSymbol *sym);
extern void _Py_uop_sym_set_non_null(_Py_UOpsContext *ctx, _Py_UopsSymbol *sym);
extern void _Py_uop_sym_set_type(_Py_UOpsContext *ctx, _Py_UopsSymbol *sym, PyTypeObject *typ);
+extern bool _Py_uop_sym_set_type_version(_Py_UOpsContext *ctx, _Py_UopsSymbol *sym, unsigned int version);
extern void _Py_uop_sym_set_const(_Py_UOpsContext *ctx, _Py_UopsSymbol *sym, PyObject *const_val);
extern bool _Py_uop_sym_is_bottom(_Py_UopsSymbol *sym);
extern int _Py_uop_sym_truthiness(_Py_UopsSymbol *sym);
@@ -138,9 +141,9 @@ extern void _Py_uop_abstractcontext_fini(_Py_UOpsContext *ctx);
extern _Py_UOpsAbstractFrame *_Py_uop_frame_new(
_Py_UOpsContext *ctx,
PyCodeObject *co,
- _Py_UopsSymbol **localsplus_start,
- int n_locals_already_filled,
- int curr_stackentries);
+ int curr_stackentries,
+ _Py_UopsSymbol **args,
+ int arg_len);
extern int _Py_uop_frame_pop(_Py_UOpsContext *ctx);
PyAPI_FUNC(PyObject *) _Py_uop_symbols_test(PyObject *self, PyObject *ignored);