aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/Python/optimizer_cases.c.h
diff options
context:
space:
mode:
Diffstat (limited to 'Python/optimizer_cases.c.h')
-rw-r--r--Python/optimizer_cases.c.h142
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;
}