diff options
Diffstat (limited to 'Python/optimizer_cases.c.h')
-rw-r--r-- | Python/optimizer_cases.c.h | 142 |
1 files changed, 30 insertions, 112 deletions
diff --git a/Python/optimizer_cases.c.h b/Python/optimizer_cases.c.h index 51d0fa63e64..0372870b94e 100644 --- a/Python/optimizer_cases.c.h +++ b/Python/optimizer_cases.c.h @@ -932,39 +932,21 @@ break; } - case _GUARD_GLOBALS_VERSION_PUSH_KEYS: { - JitOptSymbol *globals_keys; - uint16_t version = (uint16_t)this_instr->operand0; - globals_keys = sym_new_unknown(ctx); - (void)version; - stack_pointer[0] = globals_keys; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - break; - } - - case _GUARD_BUILTINS_VERSION_PUSH_KEYS: { - JitOptSymbol *builtins_keys; - uint16_t version = (uint16_t)this_instr->operand0; - builtins_keys = sym_new_unknown(ctx); - (void)version; - stack_pointer[0] = builtins_keys; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - break; - } - - case _LOAD_GLOBAL_MODULE_FROM_KEYS: { + case _LOAD_GLOBAL_MODULE: { JitOptSymbol *res; res = sym_new_not_null(ctx); - stack_pointer[-1] = res; + stack_pointer[0] = res; + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); break; } - case _LOAD_GLOBAL_BUILTINS_FROM_KEYS: { + case _LOAD_GLOBAL_BUILTINS: { JitOptSymbol *res; res = sym_new_not_null(ctx); - stack_pointer[-1] = res; + stack_pointer[0] = res; + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); break; } @@ -1168,80 +1150,34 @@ break; } - case _CHECK_ATTR_MODULE_PUSH_KEYS: { + case _LOAD_ATTR_MODULE: { JitOptSymbol *owner; - JitOptSymbol *mod_keys; + JitOptSymbol *attr; owner = stack_pointer[-1]; uint32_t dict_version = (uint32_t)this_instr->operand0; + uint16_t index = (uint16_t)this_instr->operand0; (void)dict_version; - mod_keys = sym_new_not_null(ctx); + (void)index; + attr = NULL; if (sym_is_const(owner)) { - PyObject *cnst = sym_get_const(owner); - if (PyModule_CheckExact(cnst)) { - PyModuleObject *mod = (PyModuleObject *)cnst; + PyModuleObject *mod = (PyModuleObject *)sym_get_const(owner); + if (PyModule_CheckExact(mod)) { PyObject *dict = mod->md_dict; - stack_pointer[0] = mod_keys; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + stack_pointer[-1] = attr; uint64_t watched_mutations = get_mutations(dict); if (watched_mutations < _Py_MAX_ALLOWED_GLOBALS_MODIFICATIONS) { PyDict_Watch(GLOBALS_WATCHER_ID, dict); _Py_BloomFilter_Add(dependencies, dict); - this_instr->opcode = _NOP; + PyObject *res = convert_global_to_const(this_instr, dict, true); + attr = sym_new_const(ctx, res); } - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); } } - stack_pointer[0] = mod_keys; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - break; - } - - case _LOAD_ATTR_MODULE_FROM_KEYS: { - JitOptSymbol *owner; - JitOptSymbol *attr; - owner = stack_pointer[-2]; - uint16_t index = (uint16_t)this_instr->operand0; - (void)index; - attr = NULL; - if (this_instr[-1].opcode == _NOP) { - // Preceding _CHECK_ATTR_MODULE_PUSH_KEYS was removed: mod is const and dict is watched. - assert(sym_is_const(owner)); - PyModuleObject *mod = (PyModuleObject *)sym_get_const(owner); - assert(PyModule_CheckExact(mod)); - PyObject *dict = mod->md_dict; - stack_pointer[-2] = attr; - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - PyObject *res = convert_global_to_const(this_instr, dict); - if (res != NULL) { - this_instr[-1].opcode = _POP_TOP; - attr = sym_new_const(ctx, res); - } - else { - this_instr->opcode = _LOAD_ATTR_MODULE; - } - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - } if (attr == NULL) { /* No conversion made. We don't know what `attr` is. */ attr = sym_new_not_null(ctx); } - stack_pointer[-2] = attr; - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); - break; - } - - case _CHECK_ATTR_WITH_HINT: { - JitOptSymbol *dict; - dict = sym_new_not_null(ctx); - stack_pointer[0] = dict; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); + stack_pointer[-1] = attr; break; } @@ -1250,9 +1186,7 @@ uint16_t hint = (uint16_t)this_instr->operand0; attr = sym_new_not_null(ctx); (void)hint; - stack_pointer[-2] = attr; - stack_pointer += -1; - assert(WITHIN_STACK_BOUNDS()); + stack_pointer[-1] = attr; break; } @@ -2420,6 +2354,14 @@ break; } + case _POP_TOP_LOAD_CONST_INLINE: { + JitOptSymbol *value; + PyObject *ptr = (PyObject *)this_instr->operand0; + value = sym_new_const(ctx, ptr); + stack_pointer[-1] = value; + break; + } + case _LOAD_CONST_INLINE_BORROW: { JitOptSymbol *value; PyObject *ptr = (PyObject *)this_instr->operand0; @@ -2432,7 +2374,8 @@ case _POP_TOP_LOAD_CONST_INLINE_BORROW: { JitOptSymbol *value; - value = sym_new_not_null(ctx); + PyObject *ptr = (PyObject *)this_instr->operand0; + value = sym_new_const(ctx, ptr); stack_pointer[-1] = value; break; } @@ -2441,31 +2384,6 @@ break; } - case _LOAD_GLOBAL_MODULE: { - JitOptSymbol *res; - res = sym_new_not_null(ctx); - stack_pointer[0] = res; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - break; - } - - case _LOAD_GLOBAL_BUILTINS: { - JitOptSymbol *res; - res = sym_new_not_null(ctx); - stack_pointer[0] = res; - stack_pointer += 1; - assert(WITHIN_STACK_BOUNDS()); - break; - } - - case _LOAD_ATTR_MODULE: { - JitOptSymbol *attr; - attr = sym_new_not_null(ctx); - stack_pointer[-1] = attr; - break; - } - case _START_EXECUTOR: { break; } |