diff options
author | mpage <mpage@meta.com> | 2025-01-14 11:56:11 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-01-14 11:56:11 -0800 |
commit | b5ee0258bf5bb60a5a5a65c64717853e06b64808 (patch) | |
tree | f5f7dd71e3fbed86e867f454c742dd34040f7129 /Python/optimizer_cases.c.h | |
parent | 1c13c56a34fc4c4d8969f0b6dc93d5208a50d61b (diff) | |
download | cpython-b5ee0258bf5bb60a5a5a65c64717853e06b64808.tar.gz cpython-b5ee0258bf5bb60a5a5a65c64717853e06b64808.zip |
gh-115999: Specialize `LOAD_ATTR` for instance and class receivers in free-threaded builds (#128164)
Finish specialization for LOAD_ATTR in the free-threaded build by adding support for class and instance receivers.
Diffstat (limited to 'Python/optimizer_cases.c.h')
-rw-r--r-- | Python/optimizer_cases.c.h | 19 |
1 files changed, 15 insertions, 4 deletions
diff --git a/Python/optimizer_cases.c.h b/Python/optimizer_cases.c.h index 1a7cc6becfe..aff4493fdc4 100644 --- a/Python/optimizer_cases.c.h +++ b/Python/optimizer_cases.c.h @@ -1250,22 +1250,33 @@ } case _CHECK_ATTR_WITH_HINT: { + _Py_UopsSymbol *owner; + _Py_UopsSymbol *dict; + owner = stack_pointer[-1]; + dict = sym_new_not_null(ctx); + (void)owner; + stack_pointer[0] = dict; + stack_pointer += 1; + assert(WITHIN_STACK_BOUNDS()); break; } case _LOAD_ATTR_WITH_HINT: { + _Py_UopsSymbol *dict; _Py_UopsSymbol *owner; _Py_UopsSymbol *attr; _Py_UopsSymbol *null = NULL; - owner = stack_pointer[-1]; + dict = stack_pointer[-1]; + owner = stack_pointer[-2]; uint16_t hint = (uint16_t)this_instr->operand0; attr = sym_new_not_null(ctx); null = sym_new_null(ctx); (void)hint; (void)owner; - stack_pointer[-1] = attr; - if (oparg & 1) stack_pointer[0] = null; - stack_pointer += (oparg & 1); + (void)dict; + stack_pointer[-2] = attr; + if (oparg & 1) stack_pointer[-1] = null; + stack_pointer += -1 + (oparg & 1); assert(WITHIN_STACK_BOUNDS()); break; } |