mirror of
https://github.com/python/cpython.git
synced 2026-02-05 17:35:34 +00:00
GH-144179: Use recorded values to make optimizer more robust (GH-144437)
* Add three new symbol kinds * Do not smuggle code object in _PUSH_FRAME operand * Fix small bug in predicate analysis
This commit is contained in:
parent
b6d8aa436b
commit
b53fc7caa6
16 changed files with 2062 additions and 1507 deletions
|
|
@ -226,6 +226,7 @@ add_op(JitOptContext *ctx, _PyUOpInstruction *this_instr,
|
|||
uint16_t opcode, uint16_t oparg, uintptr_t operand0)
|
||||
{
|
||||
_PyUOpInstruction *out = ctx->out_buffer.next;
|
||||
assert(out < ctx->out_buffer.end);
|
||||
out->opcode = (opcode);
|
||||
out->format = this_instr->format;
|
||||
out->oparg = (oparg);
|
||||
|
|
@ -261,6 +262,7 @@ add_op(JitOptContext *ctx, _PyUOpInstruction *this_instr,
|
|||
#define sym_is_bottom _Py_uop_sym_is_bottom
|
||||
#define sym_truthiness _Py_uop_sym_truthiness
|
||||
#define frame_new _Py_uop_frame_new
|
||||
#define frame_new_from_symbol _Py_uop_frame_new_from_symbol
|
||||
#define frame_pop _Py_uop_frame_pop
|
||||
#define sym_new_tuple _Py_uop_sym_new_tuple
|
||||
#define sym_tuple_getitem _Py_uop_sym_tuple_getitem
|
||||
|
|
@ -271,6 +273,11 @@ add_op(JitOptContext *ctx, _PyUOpInstruction *this_instr,
|
|||
#define sym_new_truthiness _Py_uop_sym_new_truthiness
|
||||
#define sym_new_predicate _Py_uop_sym_new_predicate
|
||||
#define sym_apply_predicate_narrowing _Py_uop_sym_apply_predicate_narrowing
|
||||
#define sym_set_recorded_type(SYM, TYPE) _Py_uop_sym_set_recorded_type(ctx, SYM, TYPE)
|
||||
#define sym_set_recorded_value(SYM, VAL) _Py_uop_sym_set_recorded_value(ctx, SYM, VAL)
|
||||
#define sym_set_recorded_gen_func(SYM, VAL) _Py_uop_sym_set_recorded_gen_func(ctx, SYM, VAL)
|
||||
#define sym_get_probable_func_code _Py_uop_sym_get_probable_func_code
|
||||
#define sym_get_probable_value _Py_uop_sym_get_probable_value
|
||||
|
||||
/* Comparison oparg masks */
|
||||
#define COMPARE_LT_MASK 2
|
||||
|
|
@ -355,30 +362,6 @@ lookup_attr(JitOptContext *ctx, _PyBloomFilter *dependencies, _PyUOpInstruction
|
|||
return sym_new_not_null(ctx);
|
||||
}
|
||||
|
||||
static PyCodeObject *
|
||||
get_code_with_logging(_PyUOpInstruction *op)
|
||||
{
|
||||
PyCodeObject *co = NULL;
|
||||
uint64_t push_operand = op->operand0;
|
||||
if (push_operand & 1) {
|
||||
co = (PyCodeObject *)(push_operand & ~1);
|
||||
DPRINTF(3, " code=%p\n", co);
|
||||
assert(PyCode_Check(co));
|
||||
}
|
||||
else {
|
||||
PyFunctionObject *func = (PyFunctionObject *)push_operand;
|
||||
DPRINTF(3, " func=%p ", func);
|
||||
if (func == NULL) {
|
||||
DPRINTF(3, "\n");
|
||||
DPRINTF(1, "Missing function\n");
|
||||
return NULL;
|
||||
}
|
||||
co = (PyCodeObject *)func->func_code;
|
||||
DPRINTF(3, "code=%p\n", co);
|
||||
}
|
||||
return co;
|
||||
}
|
||||
|
||||
static
|
||||
PyCodeObject *
|
||||
get_current_code_object(JitOptContext *ctx)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue