GH-143732: SEND specialization (GH-148963)

* SEND specialization. Adds 2 new specialized instructions:

* SEND_VIRTUAL: for sends to virtual iterators e.g lists and tuples
* SEND_ASYNC_GEN: for sends to async generators

Tweak FOR_ITER_VIRTUAL so that SEND_VIRTUAL and FOR_ITER_VIRTUAL use equivalent guards
This commit is contained in:
Mark Shannon 2026-05-05 15:19:16 +01:00 committed by GitHub
parent ffb543d32f
commit 70bd1c2dd2
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
29 changed files with 2662 additions and 1548 deletions

View file

@ -137,6 +137,9 @@ const _PyOpcodeRecordEntry _PyOpcode_RecordEntries[256] = {
[STORE_SUBSCR_DICT] = {1, {_RECORD_NOS_TYPE_INDEX}},
[SEND] = {1, {_RECORD_3OS_GEN_FUNC_INDEX}},
[SEND_GEN] = {1, {_RECORD_3OS_GEN_FUNC_INDEX}},
[FOR_ITER] = {1, {_RECORD_NOS_INDEX}},
[SEND_VIRTUAL] = {1, {_RECORD_3OS_GEN_FUNC_INDEX}},
[SEND_ASYNC_GEN] = {1, {_RECORD_3OS_GEN_FUNC_INDEX}},
[STORE_ATTR] = {1, {_RECORD_TOS_TYPE_INDEX}},
[LOAD_SUPER_ATTR] = {1, {_RECORD_NOS_INDEX}},
[LOAD_SUPER_ATTR_METHOD] = {1, {_RECORD_NOS_INDEX}},
@ -155,7 +158,6 @@ const _PyOpcodeRecordEntry _PyOpcode_RecordEntries[256] = {
[GET_ITER] = {1, {_RECORD_TOS_TYPE_INDEX}},
[GET_ITER_SELF] = {1, {_RECORD_TOS_TYPE_INDEX}},
[GET_ITER_VIRTUAL] = {1, {_RECORD_TOS_TYPE_INDEX}},
[FOR_ITER] = {1, {_RECORD_NOS_INDEX}},
[FOR_ITER_VIRTUAL] = {1, {_RECORD_NOS_INDEX}},
[FOR_ITER_LIST] = {1, {_RECORD_NOS_INDEX}},
[FOR_ITER_TUPLE] = {1, {_RECORD_NOS_INDEX}},
@ -204,6 +206,7 @@ const _PyOpcodeRecordSlotMap _PyOpcode_RecordSlotMaps[256] = {
[BINARY_OP_SUBSCR_GETITEM] = {1, 0, {0}},
[STORE_SUBSCR_DICT] = {1, 0, {0}},
[SEND_GEN] = {1, 0, {0}},
[FOR_ITER] = {1, 1, {0}},
[LOAD_SUPER_ATTR_METHOD] = {1, 0, {0}},
[LOAD_ATTR_INSTANCE_VALUE] = {1, 1, {0}},
[LOAD_ATTR_WITH_HINT] = {1, 1, {0}},
@ -218,7 +221,6 @@ const _PyOpcodeRecordSlotMap _PyOpcode_RecordSlotMaps[256] = {
[GET_ITER] = {1, 0, {0}},
[GET_ITER_SELF] = {1, 0, {0}},
[GET_ITER_VIRTUAL] = {1, 0, {0}},
[FOR_ITER] = {1, 1, {0}},
[FOR_ITER_GEN] = {1, 1, {0}},
[LOAD_SPECIAL] = {1, 0, {0}},
[LOAD_ATTR_METHOD_WITH_VALUES] = {1, 1, {0}},