mirror of
https://github.com/python/cpython.git
synced 2025-08-04 08:59:19 +00:00
GH-130415: Use boolean guards to narrow types to values in the JIT (GH-130659)
This commit is contained in:
parent
c6513f7a62
commit
7afa476874
7 changed files with 348 additions and 166 deletions
|
@ -172,6 +172,7 @@ typedef enum _JitSymType {
|
|||
JIT_SYM_KNOWN_CLASS_TAG = 6,
|
||||
JIT_SYM_KNOWN_VALUE_TAG = 7,
|
||||
JIT_SYM_TUPLE_TAG = 8,
|
||||
JIT_SYM_TRUTHINESS_TAG = 9,
|
||||
} JitSymType;
|
||||
|
||||
typedef struct _jit_opt_known_class {
|
||||
|
@ -198,12 +199,19 @@ typedef struct _jit_opt_tuple {
|
|||
uint16_t items[MAX_SYMBOLIC_TUPLE_SIZE];
|
||||
} JitOptTuple;
|
||||
|
||||
typedef struct {
|
||||
uint8_t tag;
|
||||
bool not;
|
||||
uint16_t value;
|
||||
} JitOptTruthiness;
|
||||
|
||||
typedef union _jit_opt_symbol {
|
||||
uint8_t tag;
|
||||
JitOptKnownClass cls;
|
||||
JitOptKnownValue value;
|
||||
JitOptKnownVersion version;
|
||||
JitOptTuple tuple;
|
||||
JitOptTruthiness truthiness;
|
||||
} JitOptSymbol;
|
||||
|
||||
|
||||
|
@ -245,8 +253,8 @@ typedef struct _JitOptContext {
|
|||
|
||||
extern bool _Py_uop_sym_is_null(JitOptSymbol *sym);
|
||||
extern bool _Py_uop_sym_is_not_null(JitOptSymbol *sym);
|
||||
extern bool _Py_uop_sym_is_const(JitOptSymbol *sym);
|
||||
extern PyObject *_Py_uop_sym_get_const(JitOptSymbol *sym);
|
||||
extern bool _Py_uop_sym_is_const(JitOptContext *ctx, JitOptSymbol *sym);
|
||||
extern PyObject *_Py_uop_sym_get_const(JitOptContext *ctx, JitOptSymbol *sym);
|
||||
extern JitOptSymbol *_Py_uop_sym_new_unknown(JitOptContext *ctx);
|
||||
extern JitOptSymbol *_Py_uop_sym_new_not_null(JitOptContext *ctx);
|
||||
extern JitOptSymbol *_Py_uop_sym_new_type(
|
||||
|
@ -262,12 +270,13 @@ extern void _Py_uop_sym_set_type(JitOptContext *ctx, JitOptSymbol *sym, PyTypeOb
|
|||
extern bool _Py_uop_sym_set_type_version(JitOptContext *ctx, JitOptSymbol *sym, unsigned int version);
|
||||
extern void _Py_uop_sym_set_const(JitOptContext *ctx, JitOptSymbol *sym, PyObject *const_val);
|
||||
extern bool _Py_uop_sym_is_bottom(JitOptSymbol *sym);
|
||||
extern int _Py_uop_sym_truthiness(JitOptSymbol *sym);
|
||||
extern int _Py_uop_sym_truthiness(JitOptContext *ctx, JitOptSymbol *sym);
|
||||
extern PyTypeObject *_Py_uop_sym_get_type(JitOptSymbol *sym);
|
||||
extern bool _Py_uop_sym_is_immortal(JitOptSymbol *sym);
|
||||
extern JitOptSymbol *_Py_uop_sym_new_tuple(JitOptContext *ctx, int size, JitOptSymbol **args);
|
||||
extern JitOptSymbol *_Py_uop_sym_tuple_getitem(JitOptContext *ctx, JitOptSymbol *sym, int item);
|
||||
extern int _Py_uop_sym_tuple_length(JitOptSymbol *sym);
|
||||
extern JitOptSymbol *_Py_uop_sym_new_truthiness(JitOptContext *ctx, JitOptSymbol *value, bool truthy);
|
||||
|
||||
extern void _Py_uop_abstractcontext_init(JitOptContext *ctx);
|
||||
extern void _Py_uop_abstractcontext_fini(JitOptContext *ctx);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue