gh-105775: Convert LOAD_CLOSURE to a pseudo-op (#106059)

This enables super-instruction formation,
removal of checks for uninitialized variables,
and frees up an instruction.
This commit is contained in:
hms 2023-06-29 10:34:00 -06:00 committed by GitHub
parent 3c70d467c1
commit 8bff940ad6
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
16 changed files with 733 additions and 702 deletions

View file

@ -161,7 +161,6 @@ const uint8_t _PyOpcode_Deopt[256] = {
[LOAD_ATTR_SLOT] = LOAD_ATTR,
[LOAD_ATTR_WITH_HINT] = LOAD_ATTR,
[LOAD_BUILD_CLASS] = LOAD_BUILD_CLASS,
[LOAD_CLOSURE] = LOAD_CLOSURE,
[LOAD_CONST] = LOAD_CONST,
[LOAD_DEREF] = LOAD_DEREF,
[LOAD_FAST] = LOAD_FAST,
@ -236,7 +235,7 @@ const uint8_t _PyOpcode_Deopt[256] = {
#endif // NEED_OPCODE_TABLES
#ifdef Py_DEBUG
static const char *const _PyOpcode_OpName[267] = {
static const char *const _PyOpcode_OpName[268] = {
[CACHE] = "CACHE",
[POP_TOP] = "POP_TOP",
[PUSH_NULL] = "PUSH_NULL",
@ -373,7 +372,7 @@ static const char *const _PyOpcode_OpName[267] = {
[BUILD_SLICE] = "BUILD_SLICE",
[JUMP_BACKWARD_NO_INTERRUPT] = "JUMP_BACKWARD_NO_INTERRUPT",
[MAKE_CELL] = "MAKE_CELL",
[LOAD_CLOSURE] = "LOAD_CLOSURE",
[CALL_BUILTIN_FAST_WITH_KEYWORDS] = "CALL_BUILTIN_FAST_WITH_KEYWORDS",
[LOAD_DEREF] = "LOAD_DEREF",
[STORE_DEREF] = "STORE_DEREF",
[DELETE_DEREF] = "DELETE_DEREF",
@ -385,26 +384,26 @@ static const char *const _PyOpcode_OpName[267] = {
[LIST_APPEND] = "LIST_APPEND",
[SET_ADD] = "SET_ADD",
[MAP_ADD] = "MAP_ADD",
[CALL_BUILTIN_FAST_WITH_KEYWORDS] = "CALL_BUILTIN_FAST_WITH_KEYWORDS",
[CALL_NO_KW_LEN] = "CALL_NO_KW_LEN",
[COPY_FREE_VARS] = "COPY_FREE_VARS",
[YIELD_VALUE] = "YIELD_VALUE",
[RESUME] = "RESUME",
[MATCH_CLASS] = "MATCH_CLASS",
[CALL_NO_KW_LEN] = "CALL_NO_KW_LEN",
[CALL_NO_KW_ISINSTANCE] = "CALL_NO_KW_ISINSTANCE",
[CALL_NO_KW_LIST_APPEND] = "CALL_NO_KW_LIST_APPEND",
[CALL_NO_KW_METHOD_DESCRIPTOR_O] = "CALL_NO_KW_METHOD_DESCRIPTOR_O",
[BUILD_CONST_KEY_MAP] = "BUILD_CONST_KEY_MAP",
[BUILD_STRING] = "BUILD_STRING",
[CONVERT_VALUE] = "CONVERT_VALUE",
[CALL_NO_KW_METHOD_DESCRIPTOR_O] = "CALL_NO_KW_METHOD_DESCRIPTOR_O",
[CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS] = "CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS",
[CALL_NO_KW_METHOD_DESCRIPTOR_NOARGS] = "CALL_NO_KW_METHOD_DESCRIPTOR_NOARGS",
[CALL_NO_KW_METHOD_DESCRIPTOR_FAST] = "CALL_NO_KW_METHOD_DESCRIPTOR_FAST",
[LIST_EXTEND] = "LIST_EXTEND",
[SET_UPDATE] = "SET_UPDATE",
[DICT_MERGE] = "DICT_MERGE",
[DICT_UPDATE] = "DICT_UPDATE",
[CALL_NO_KW_METHOD_DESCRIPTOR_FAST] = "CALL_NO_KW_METHOD_DESCRIPTOR_FAST",
[CALL_NO_KW_ALLOC_AND_ENTER_INIT] = "CALL_NO_KW_ALLOC_AND_ENTER_INIT",
[167] = "<167>",
[LOAD_FAST_LOAD_FAST] = "LOAD_FAST_LOAD_FAST",
[STORE_FAST_LOAD_FAST] = "STORE_FAST_LOAD_FAST",
[STORE_FAST_STORE_FAST] = "STORE_FAST_STORE_FAST",
@ -504,10 +503,12 @@ static const char *const _PyOpcode_OpName[267] = {
[LOAD_ZERO_SUPER_METHOD] = "LOAD_ZERO_SUPER_METHOD",
[LOAD_ZERO_SUPER_ATTR] = "LOAD_ZERO_SUPER_ATTR",
[STORE_FAST_MAYBE_NULL] = "STORE_FAST_MAYBE_NULL",
[LOAD_CLOSURE] = "LOAD_CLOSURE",
};
#endif
#define EXTRA_CASES \
case 167: \
case 178: \
case 179: \
case 180: \

22
Include/opcode.h generated
View file

@ -93,7 +93,6 @@ extern "C" {
#define BUILD_SLICE 133
#define JUMP_BACKWARD_NO_INTERRUPT 134
#define MAKE_CELL 135
#define LOAD_CLOSURE 136
#define LOAD_DEREF 137
#define STORE_DEREF 138
#define DELETE_DEREF 139
@ -158,7 +157,8 @@ extern "C" {
#define LOAD_ZERO_SUPER_METHOD 264
#define LOAD_ZERO_SUPER_ATTR 265
#define STORE_FAST_MAYBE_NULL 266
#define MAX_PSEUDO_OPCODE 266
#define LOAD_CLOSURE 267
#define MAX_PSEUDO_OPCODE 267
#define BINARY_OP_MULTIPLY_INT 6
#define BINARY_OP_ADD_INT 7
#define BINARY_OP_SUBTRACT_INT 8
@ -210,15 +210,15 @@ extern "C" {
#define CALL_BUILTIN_CLASS 112
#define CALL_NO_KW_BUILTIN_O 113
#define CALL_NO_KW_BUILTIN_FAST 132
#define CALL_BUILTIN_FAST_WITH_KEYWORDS 148
#define CALL_NO_KW_LEN 153
#define CALL_NO_KW_ISINSTANCE 154
#define CALL_NO_KW_LIST_APPEND 155
#define CALL_NO_KW_METHOD_DESCRIPTOR_O 159
#define CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS 160
#define CALL_NO_KW_METHOD_DESCRIPTOR_NOARGS 161
#define CALL_NO_KW_METHOD_DESCRIPTOR_FAST 166
#define CALL_NO_KW_ALLOC_AND_ENTER_INIT 167
#define CALL_BUILTIN_FAST_WITH_KEYWORDS 136
#define CALL_NO_KW_LEN 148
#define CALL_NO_KW_ISINSTANCE 153
#define CALL_NO_KW_LIST_APPEND 154
#define CALL_NO_KW_METHOD_DESCRIPTOR_O 155
#define CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS 159
#define CALL_NO_KW_METHOD_DESCRIPTOR_NOARGS 160
#define CALL_NO_KW_METHOD_DESCRIPTOR_FAST 161
#define CALL_NO_KW_ALLOC_AND_ENTER_INIT 166
#define NB_ADD 0
#define NB_AND 1