mirror of
https://github.com/python/cpython.git
synced 2025-12-09 18:48:05 +00:00
GH-128685: Specialize (rather than quicken) LOAD_CONST into LOAD_CONST_[IM]MORTAL (GH-128708)
This commit is contained in:
parent
29fe8072cf
commit
ddd959987c
14 changed files with 121 additions and 65 deletions
26
Python/generated_cases.c.h
generated
26
Python/generated_cases.c.h
generated
|
|
@ -5913,8 +5913,18 @@
|
|||
next_instr += 1;
|
||||
INSTRUCTION_STATS(LOAD_CONST);
|
||||
PREDICTED(LOAD_CONST);
|
||||
_Py_CODEUNIT* const this_instr = next_instr - 1;
|
||||
(void)this_instr;
|
||||
_PyStackRef value;
|
||||
value = PyStackRef_FromPyObjectNew(GETITEM(FRAME_CO_CONSTS, oparg));
|
||||
/* We can't do this in the bytecode compiler as
|
||||
* marshalling can intern strings and make them immortal. */
|
||||
PyObject *obj = GETITEM(FRAME_CO_CONSTS, oparg);
|
||||
value = PyStackRef_FromPyObjectNew(obj);
|
||||
#if ENABLE_SPECIALIZATION
|
||||
if (this_instr->op.code == LOAD_CONST) {
|
||||
this_instr->op.code = _Py_IsImmortal(obj) ? LOAD_CONST_IMMORTAL : LOAD_CONST_MORTAL;
|
||||
}
|
||||
#endif
|
||||
stack_pointer[0] = value;
|
||||
stack_pointer += 1;
|
||||
assert(WITHIN_STACK_BOUNDS());
|
||||
|
|
@ -5936,6 +5946,20 @@
|
|||
DISPATCH();
|
||||
}
|
||||
|
||||
TARGET(LOAD_CONST_MORTAL) {
|
||||
frame->instr_ptr = next_instr;
|
||||
next_instr += 1;
|
||||
INSTRUCTION_STATS(LOAD_CONST_MORTAL);
|
||||
static_assert(0 == 0, "incorrect cache size");
|
||||
_PyStackRef value;
|
||||
PyObject *obj = GETITEM(FRAME_CO_CONSTS, oparg);
|
||||
value = PyStackRef_FromPyObjectNew(obj);
|
||||
stack_pointer[0] = value;
|
||||
stack_pointer += 1;
|
||||
assert(WITHIN_STACK_BOUNDS());
|
||||
DISPATCH();
|
||||
}
|
||||
|
||||
TARGET(LOAD_DEREF) {
|
||||
frame->instr_ptr = next_instr;
|
||||
next_instr += 1;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue