mirror of
https://github.com/python/cpython.git
synced 2026-01-26 12:55:08 +00:00
gh-134584: Eliminate redundant refcounting from _LOAD_ATTR_SLOT (GH-143320)
Signed-off-by: Manjusaka <me@manjusaka.me> Co-authored-by: Ken Jin <kenjin4096@gmail.com>
This commit is contained in:
parent
1fb8e0eb51
commit
d00d39f58e
2
Include/internal/pycore_opcode_metadata.h
generated
2
Include/internal/pycore_opcode_metadata.h
generated
@ -1433,7 +1433,7 @@ _PyOpcode_macro_expansion[256] = {
|
||||
[LOAD_ATTR_NONDESCRIPTOR_NO_DICT] = { .nuops = 2, .uops = { { _GUARD_TYPE_VERSION, 2, 1 }, { _LOAD_ATTR_NONDESCRIPTOR_NO_DICT, 4, 5 } } },
|
||||
[LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES] = { .nuops = 4, .uops = { { _GUARD_TYPE_VERSION, 2, 1 }, { _GUARD_DORV_VALUES_INST_ATTR_FROM_DICT, OPARG_SIMPLE, 3 }, { _GUARD_KEYS_VERSION, 2, 3 }, { _LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES, 4, 5 } } },
|
||||
[LOAD_ATTR_PROPERTY] = { .nuops = 5, .uops = { { _CHECK_PEP_523, OPARG_SIMPLE, 1 }, { _GUARD_TYPE_VERSION, 2, 1 }, { _LOAD_ATTR_PROPERTY_FRAME, 4, 5 }, { _SAVE_RETURN_OFFSET, OPARG_SAVE_RETURN_OFFSET, 9 }, { _PUSH_FRAME, OPARG_SIMPLE, 9 } } },
|
||||
[LOAD_ATTR_SLOT] = { .nuops = 3, .uops = { { _GUARD_TYPE_VERSION, 2, 1 }, { _LOAD_ATTR_SLOT, 1, 3 }, { _PUSH_NULL_CONDITIONAL, OPARG_SIMPLE, 9 } } },
|
||||
[LOAD_ATTR_SLOT] = { .nuops = 4, .uops = { { _GUARD_TYPE_VERSION, 2, 1 }, { _LOAD_ATTR_SLOT, 1, 3 }, { _POP_TOP, OPARG_SIMPLE, 4 }, { _PUSH_NULL_CONDITIONAL, OPARG_SIMPLE, 9 } } },
|
||||
[LOAD_ATTR_WITH_HINT] = { .nuops = 4, .uops = { { _GUARD_TYPE_VERSION, 2, 1 }, { _LOAD_ATTR_WITH_HINT, 1, 3 }, { _POP_TOP, OPARG_SIMPLE, 4 }, { _PUSH_NULL_CONDITIONAL, OPARG_SIMPLE, 9 } } },
|
||||
[LOAD_BUILD_CLASS] = { .nuops = 1, .uops = { { _LOAD_BUILD_CLASS, OPARG_SIMPLE, 0 } } },
|
||||
[LOAD_COMMON_CONSTANT] = { .nuops = 1, .uops = { { _LOAD_COMMON_CONSTANT, OPARG_SIMPLE, 0 } } },
|
||||
|
||||
604
Include/internal/pycore_uop_ids.h
generated
604
Include/internal/pycore_uop_ids.h
generated
@ -818,307 +818,309 @@ extern "C" {
|
||||
#define _LOAD_ATTR_NONDESCRIPTOR_NO_DICT_r11 1012
|
||||
#define _LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES_r11 1013
|
||||
#define _LOAD_ATTR_PROPERTY_FRAME_r11 1014
|
||||
#define _LOAD_ATTR_SLOT_r11 1015
|
||||
#define _LOAD_ATTR_WITH_HINT_r12 1016
|
||||
#define _LOAD_BUILD_CLASS_r01 1017
|
||||
#define _LOAD_BYTECODE_r00 1018
|
||||
#define _LOAD_COMMON_CONSTANT_r01 1019
|
||||
#define _LOAD_COMMON_CONSTANT_r12 1020
|
||||
#define _LOAD_COMMON_CONSTANT_r23 1021
|
||||
#define _LOAD_CONST_r01 1022
|
||||
#define _LOAD_CONST_r12 1023
|
||||
#define _LOAD_CONST_r23 1024
|
||||
#define _LOAD_CONST_INLINE_r01 1025
|
||||
#define _LOAD_CONST_INLINE_r12 1026
|
||||
#define _LOAD_CONST_INLINE_r23 1027
|
||||
#define _LOAD_CONST_INLINE_BORROW_r01 1028
|
||||
#define _LOAD_CONST_INLINE_BORROW_r12 1029
|
||||
#define _LOAD_CONST_INLINE_BORROW_r23 1030
|
||||
#define _LOAD_CONST_UNDER_INLINE_r02 1031
|
||||
#define _LOAD_CONST_UNDER_INLINE_r12 1032
|
||||
#define _LOAD_CONST_UNDER_INLINE_r23 1033
|
||||
#define _LOAD_CONST_UNDER_INLINE_BORROW_r02 1034
|
||||
#define _LOAD_CONST_UNDER_INLINE_BORROW_r12 1035
|
||||
#define _LOAD_CONST_UNDER_INLINE_BORROW_r23 1036
|
||||
#define _LOAD_DEREF_r01 1037
|
||||
#define _LOAD_FAST_r01 1038
|
||||
#define _LOAD_FAST_r12 1039
|
||||
#define _LOAD_FAST_r23 1040
|
||||
#define _LOAD_FAST_0_r01 1041
|
||||
#define _LOAD_FAST_0_r12 1042
|
||||
#define _LOAD_FAST_0_r23 1043
|
||||
#define _LOAD_FAST_1_r01 1044
|
||||
#define _LOAD_FAST_1_r12 1045
|
||||
#define _LOAD_FAST_1_r23 1046
|
||||
#define _LOAD_FAST_2_r01 1047
|
||||
#define _LOAD_FAST_2_r12 1048
|
||||
#define _LOAD_FAST_2_r23 1049
|
||||
#define _LOAD_FAST_3_r01 1050
|
||||
#define _LOAD_FAST_3_r12 1051
|
||||
#define _LOAD_FAST_3_r23 1052
|
||||
#define _LOAD_FAST_4_r01 1053
|
||||
#define _LOAD_FAST_4_r12 1054
|
||||
#define _LOAD_FAST_4_r23 1055
|
||||
#define _LOAD_FAST_5_r01 1056
|
||||
#define _LOAD_FAST_5_r12 1057
|
||||
#define _LOAD_FAST_5_r23 1058
|
||||
#define _LOAD_FAST_6_r01 1059
|
||||
#define _LOAD_FAST_6_r12 1060
|
||||
#define _LOAD_FAST_6_r23 1061
|
||||
#define _LOAD_FAST_7_r01 1062
|
||||
#define _LOAD_FAST_7_r12 1063
|
||||
#define _LOAD_FAST_7_r23 1064
|
||||
#define _LOAD_FAST_AND_CLEAR_r01 1065
|
||||
#define _LOAD_FAST_AND_CLEAR_r12 1066
|
||||
#define _LOAD_FAST_AND_CLEAR_r23 1067
|
||||
#define _LOAD_FAST_BORROW_r01 1068
|
||||
#define _LOAD_FAST_BORROW_r12 1069
|
||||
#define _LOAD_FAST_BORROW_r23 1070
|
||||
#define _LOAD_FAST_BORROW_0_r01 1071
|
||||
#define _LOAD_FAST_BORROW_0_r12 1072
|
||||
#define _LOAD_FAST_BORROW_0_r23 1073
|
||||
#define _LOAD_FAST_BORROW_1_r01 1074
|
||||
#define _LOAD_FAST_BORROW_1_r12 1075
|
||||
#define _LOAD_FAST_BORROW_1_r23 1076
|
||||
#define _LOAD_FAST_BORROW_2_r01 1077
|
||||
#define _LOAD_FAST_BORROW_2_r12 1078
|
||||
#define _LOAD_FAST_BORROW_2_r23 1079
|
||||
#define _LOAD_FAST_BORROW_3_r01 1080
|
||||
#define _LOAD_FAST_BORROW_3_r12 1081
|
||||
#define _LOAD_FAST_BORROW_3_r23 1082
|
||||
#define _LOAD_FAST_BORROW_4_r01 1083
|
||||
#define _LOAD_FAST_BORROW_4_r12 1084
|
||||
#define _LOAD_FAST_BORROW_4_r23 1085
|
||||
#define _LOAD_FAST_BORROW_5_r01 1086
|
||||
#define _LOAD_FAST_BORROW_5_r12 1087
|
||||
#define _LOAD_FAST_BORROW_5_r23 1088
|
||||
#define _LOAD_FAST_BORROW_6_r01 1089
|
||||
#define _LOAD_FAST_BORROW_6_r12 1090
|
||||
#define _LOAD_FAST_BORROW_6_r23 1091
|
||||
#define _LOAD_FAST_BORROW_7_r01 1092
|
||||
#define _LOAD_FAST_BORROW_7_r12 1093
|
||||
#define _LOAD_FAST_BORROW_7_r23 1094
|
||||
#define _LOAD_FAST_BORROW_LOAD_FAST_BORROW_r02 1095
|
||||
#define _LOAD_FAST_BORROW_LOAD_FAST_BORROW_r13 1096
|
||||
#define _LOAD_FAST_CHECK_r01 1097
|
||||
#define _LOAD_FAST_CHECK_r12 1098
|
||||
#define _LOAD_FAST_CHECK_r23 1099
|
||||
#define _LOAD_FAST_LOAD_FAST_r02 1100
|
||||
#define _LOAD_FAST_LOAD_FAST_r13 1101
|
||||
#define _LOAD_FROM_DICT_OR_DEREF_r11 1102
|
||||
#define _LOAD_FROM_DICT_OR_GLOBALS_r11 1103
|
||||
#define _LOAD_GLOBAL_r00 1104
|
||||
#define _LOAD_GLOBAL_BUILTINS_r01 1105
|
||||
#define _LOAD_GLOBAL_MODULE_r01 1106
|
||||
#define _LOAD_LOCALS_r01 1107
|
||||
#define _LOAD_LOCALS_r12 1108
|
||||
#define _LOAD_LOCALS_r23 1109
|
||||
#define _LOAD_NAME_r01 1110
|
||||
#define _LOAD_SMALL_INT_r01 1111
|
||||
#define _LOAD_SMALL_INT_r12 1112
|
||||
#define _LOAD_SMALL_INT_r23 1113
|
||||
#define _LOAD_SMALL_INT_0_r01 1114
|
||||
#define _LOAD_SMALL_INT_0_r12 1115
|
||||
#define _LOAD_SMALL_INT_0_r23 1116
|
||||
#define _LOAD_SMALL_INT_1_r01 1117
|
||||
#define _LOAD_SMALL_INT_1_r12 1118
|
||||
#define _LOAD_SMALL_INT_1_r23 1119
|
||||
#define _LOAD_SMALL_INT_2_r01 1120
|
||||
#define _LOAD_SMALL_INT_2_r12 1121
|
||||
#define _LOAD_SMALL_INT_2_r23 1122
|
||||
#define _LOAD_SMALL_INT_3_r01 1123
|
||||
#define _LOAD_SMALL_INT_3_r12 1124
|
||||
#define _LOAD_SMALL_INT_3_r23 1125
|
||||
#define _LOAD_SPECIAL_r00 1126
|
||||
#define _LOAD_SUPER_ATTR_ATTR_r31 1127
|
||||
#define _LOAD_SUPER_ATTR_METHOD_r32 1128
|
||||
#define _MAKE_CALLARGS_A_TUPLE_r33 1129
|
||||
#define _MAKE_CELL_r00 1130
|
||||
#define _MAKE_FUNCTION_r11 1131
|
||||
#define _MAKE_WARM_r00 1132
|
||||
#define _MAKE_WARM_r11 1133
|
||||
#define _MAKE_WARM_r22 1134
|
||||
#define _MAKE_WARM_r33 1135
|
||||
#define _MAP_ADD_r20 1136
|
||||
#define _MATCH_CLASS_r31 1137
|
||||
#define _MATCH_KEYS_r23 1138
|
||||
#define _MATCH_MAPPING_r02 1139
|
||||
#define _MATCH_MAPPING_r12 1140
|
||||
#define _MATCH_MAPPING_r23 1141
|
||||
#define _MATCH_SEQUENCE_r02 1142
|
||||
#define _MATCH_SEQUENCE_r12 1143
|
||||
#define _MATCH_SEQUENCE_r23 1144
|
||||
#define _MAYBE_EXPAND_METHOD_r00 1145
|
||||
#define _MAYBE_EXPAND_METHOD_KW_r11 1146
|
||||
#define _MONITOR_CALL_r00 1147
|
||||
#define _MONITOR_CALL_KW_r11 1148
|
||||
#define _MONITOR_JUMP_BACKWARD_r00 1149
|
||||
#define _MONITOR_JUMP_BACKWARD_r11 1150
|
||||
#define _MONITOR_JUMP_BACKWARD_r22 1151
|
||||
#define _MONITOR_JUMP_BACKWARD_r33 1152
|
||||
#define _MONITOR_RESUME_r00 1153
|
||||
#define _NOP_r00 1154
|
||||
#define _NOP_r11 1155
|
||||
#define _NOP_r22 1156
|
||||
#define _NOP_r33 1157
|
||||
#define _POP_CALL_r20 1158
|
||||
#define _POP_CALL_LOAD_CONST_INLINE_BORROW_r21 1159
|
||||
#define _POP_CALL_ONE_r30 1160
|
||||
#define _POP_CALL_ONE_LOAD_CONST_INLINE_BORROW_r31 1161
|
||||
#define _POP_CALL_TWO_r30 1162
|
||||
#define _POP_CALL_TWO_LOAD_CONST_INLINE_BORROW_r31 1163
|
||||
#define _POP_EXCEPT_r10 1164
|
||||
#define _POP_ITER_r20 1165
|
||||
#define _POP_JUMP_IF_FALSE_r00 1166
|
||||
#define _POP_JUMP_IF_FALSE_r10 1167
|
||||
#define _POP_JUMP_IF_FALSE_r21 1168
|
||||
#define _POP_JUMP_IF_FALSE_r32 1169
|
||||
#define _POP_JUMP_IF_TRUE_r00 1170
|
||||
#define _POP_JUMP_IF_TRUE_r10 1171
|
||||
#define _POP_JUMP_IF_TRUE_r21 1172
|
||||
#define _POP_JUMP_IF_TRUE_r32 1173
|
||||
#define _POP_TOP_r10 1174
|
||||
#define _POP_TOP_FLOAT_r00 1175
|
||||
#define _POP_TOP_FLOAT_r10 1176
|
||||
#define _POP_TOP_FLOAT_r21 1177
|
||||
#define _POP_TOP_FLOAT_r32 1178
|
||||
#define _POP_TOP_INT_r00 1179
|
||||
#define _POP_TOP_INT_r10 1180
|
||||
#define _POP_TOP_INT_r21 1181
|
||||
#define _POP_TOP_INT_r32 1182
|
||||
#define _POP_TOP_LOAD_CONST_INLINE_r11 1183
|
||||
#define _POP_TOP_LOAD_CONST_INLINE_BORROW_r11 1184
|
||||
#define _POP_TOP_NOP_r00 1185
|
||||
#define _POP_TOP_NOP_r10 1186
|
||||
#define _POP_TOP_NOP_r21 1187
|
||||
#define _POP_TOP_NOP_r32 1188
|
||||
#define _POP_TOP_UNICODE_r00 1189
|
||||
#define _POP_TOP_UNICODE_r10 1190
|
||||
#define _POP_TOP_UNICODE_r21 1191
|
||||
#define _POP_TOP_UNICODE_r32 1192
|
||||
#define _POP_TWO_r20 1193
|
||||
#define _POP_TWO_LOAD_CONST_INLINE_BORROW_r21 1194
|
||||
#define _PUSH_EXC_INFO_r02 1195
|
||||
#define _PUSH_EXC_INFO_r12 1196
|
||||
#define _PUSH_EXC_INFO_r23 1197
|
||||
#define _PUSH_FRAME_r10 1198
|
||||
#define _PUSH_NULL_r01 1199
|
||||
#define _PUSH_NULL_r12 1200
|
||||
#define _PUSH_NULL_r23 1201
|
||||
#define _PUSH_NULL_CONDITIONAL_r00 1202
|
||||
#define _PY_FRAME_GENERAL_r01 1203
|
||||
#define _PY_FRAME_KW_r11 1204
|
||||
#define _QUICKEN_RESUME_r00 1205
|
||||
#define _QUICKEN_RESUME_r11 1206
|
||||
#define _QUICKEN_RESUME_r22 1207
|
||||
#define _QUICKEN_RESUME_r33 1208
|
||||
#define _REPLACE_WITH_TRUE_r11 1209
|
||||
#define _RESUME_CHECK_r00 1210
|
||||
#define _RESUME_CHECK_r11 1211
|
||||
#define _RESUME_CHECK_r22 1212
|
||||
#define _RESUME_CHECK_r33 1213
|
||||
#define _RETURN_GENERATOR_r01 1214
|
||||
#define _RETURN_VALUE_r11 1215
|
||||
#define _SAVE_RETURN_OFFSET_r00 1216
|
||||
#define _SAVE_RETURN_OFFSET_r11 1217
|
||||
#define _SAVE_RETURN_OFFSET_r22 1218
|
||||
#define _SAVE_RETURN_OFFSET_r33 1219
|
||||
#define _SEND_r22 1220
|
||||
#define _SEND_GEN_FRAME_r22 1221
|
||||
#define _SETUP_ANNOTATIONS_r00 1222
|
||||
#define _SET_ADD_r10 1223
|
||||
#define _SET_FUNCTION_ATTRIBUTE_r01 1224
|
||||
#define _SET_FUNCTION_ATTRIBUTE_r11 1225
|
||||
#define _SET_FUNCTION_ATTRIBUTE_r21 1226
|
||||
#define _SET_FUNCTION_ATTRIBUTE_r32 1227
|
||||
#define _SET_IP_r00 1228
|
||||
#define _SET_IP_r11 1229
|
||||
#define _SET_IP_r22 1230
|
||||
#define _SET_IP_r33 1231
|
||||
#define _SET_UPDATE_r10 1232
|
||||
#define _SHUFFLE_2_LOAD_CONST_INLINE_BORROW_r02 1233
|
||||
#define _SHUFFLE_2_LOAD_CONST_INLINE_BORROW_r12 1234
|
||||
#define _SHUFFLE_2_LOAD_CONST_INLINE_BORROW_r22 1235
|
||||
#define _SHUFFLE_2_LOAD_CONST_INLINE_BORROW_r32 1236
|
||||
#define _SHUFFLE_3_LOAD_CONST_INLINE_BORROW_r03 1237
|
||||
#define _SHUFFLE_3_LOAD_CONST_INLINE_BORROW_r13 1238
|
||||
#define _SHUFFLE_3_LOAD_CONST_INLINE_BORROW_r23 1239
|
||||
#define _SHUFFLE_3_LOAD_CONST_INLINE_BORROW_r33 1240
|
||||
#define _SPILL_OR_RELOAD_r01 1241
|
||||
#define _SPILL_OR_RELOAD_r02 1242
|
||||
#define _SPILL_OR_RELOAD_r03 1243
|
||||
#define _SPILL_OR_RELOAD_r10 1244
|
||||
#define _SPILL_OR_RELOAD_r12 1245
|
||||
#define _SPILL_OR_RELOAD_r13 1246
|
||||
#define _SPILL_OR_RELOAD_r20 1247
|
||||
#define _SPILL_OR_RELOAD_r21 1248
|
||||
#define _SPILL_OR_RELOAD_r23 1249
|
||||
#define _SPILL_OR_RELOAD_r30 1250
|
||||
#define _SPILL_OR_RELOAD_r31 1251
|
||||
#define _SPILL_OR_RELOAD_r32 1252
|
||||
#define _START_EXECUTOR_r00 1253
|
||||
#define _STORE_ATTR_r20 1254
|
||||
#define _STORE_ATTR_INSTANCE_VALUE_r21 1255
|
||||
#define _STORE_ATTR_SLOT_r21 1256
|
||||
#define _STORE_ATTR_WITH_HINT_r21 1257
|
||||
#define _STORE_DEREF_r10 1258
|
||||
#define _STORE_FAST_r10 1259
|
||||
#define _STORE_FAST_0_r10 1260
|
||||
#define _STORE_FAST_1_r10 1261
|
||||
#define _STORE_FAST_2_r10 1262
|
||||
#define _STORE_FAST_3_r10 1263
|
||||
#define _STORE_FAST_4_r10 1264
|
||||
#define _STORE_FAST_5_r10 1265
|
||||
#define _STORE_FAST_6_r10 1266
|
||||
#define _STORE_FAST_7_r10 1267
|
||||
#define _STORE_FAST_LOAD_FAST_r11 1268
|
||||
#define _STORE_FAST_STORE_FAST_r20 1269
|
||||
#define _STORE_GLOBAL_r10 1270
|
||||
#define _STORE_NAME_r10 1271
|
||||
#define _STORE_SLICE_r30 1272
|
||||
#define _STORE_SUBSCR_r30 1273
|
||||
#define _STORE_SUBSCR_DICT_r31 1274
|
||||
#define _STORE_SUBSCR_LIST_INT_r32 1275
|
||||
#define _SWAP_r11 1276
|
||||
#define _SWAP_2_r02 1277
|
||||
#define _SWAP_2_r12 1278
|
||||
#define _SWAP_2_r22 1279
|
||||
#define _SWAP_2_r33 1280
|
||||
#define _SWAP_3_r03 1281
|
||||
#define _SWAP_3_r13 1282
|
||||
#define _SWAP_3_r23 1283
|
||||
#define _SWAP_3_r33 1284
|
||||
#define _TIER2_RESUME_CHECK_r00 1285
|
||||
#define _TIER2_RESUME_CHECK_r11 1286
|
||||
#define _TIER2_RESUME_CHECK_r22 1287
|
||||
#define _TIER2_RESUME_CHECK_r33 1288
|
||||
#define _TO_BOOL_r11 1289
|
||||
#define _TO_BOOL_BOOL_r01 1290
|
||||
#define _TO_BOOL_BOOL_r11 1291
|
||||
#define _TO_BOOL_BOOL_r22 1292
|
||||
#define _TO_BOOL_BOOL_r33 1293
|
||||
#define _TO_BOOL_INT_r11 1294
|
||||
#define _TO_BOOL_LIST_r11 1295
|
||||
#define _TO_BOOL_NONE_r01 1296
|
||||
#define _TO_BOOL_NONE_r11 1297
|
||||
#define _TO_BOOL_NONE_r22 1298
|
||||
#define _TO_BOOL_NONE_r33 1299
|
||||
#define _TO_BOOL_STR_r11 1300
|
||||
#define _TRACE_RECORD_r00 1301
|
||||
#define _UNARY_INVERT_r11 1302
|
||||
#define _UNARY_NEGATIVE_r11 1303
|
||||
#define _UNARY_NOT_r01 1304
|
||||
#define _UNARY_NOT_r11 1305
|
||||
#define _UNARY_NOT_r22 1306
|
||||
#define _UNARY_NOT_r33 1307
|
||||
#define _UNPACK_EX_r10 1308
|
||||
#define _UNPACK_SEQUENCE_r10 1309
|
||||
#define _UNPACK_SEQUENCE_LIST_r10 1310
|
||||
#define _UNPACK_SEQUENCE_TUPLE_r10 1311
|
||||
#define _UNPACK_SEQUENCE_TWO_TUPLE_r12 1312
|
||||
#define _WITH_EXCEPT_START_r33 1313
|
||||
#define _YIELD_VALUE_r11 1314
|
||||
#define MAX_UOP_REGS_ID 1314
|
||||
#define _LOAD_ATTR_SLOT_r02 1015
|
||||
#define _LOAD_ATTR_SLOT_r12 1016
|
||||
#define _LOAD_ATTR_SLOT_r23 1017
|
||||
#define _LOAD_ATTR_WITH_HINT_r12 1018
|
||||
#define _LOAD_BUILD_CLASS_r01 1019
|
||||
#define _LOAD_BYTECODE_r00 1020
|
||||
#define _LOAD_COMMON_CONSTANT_r01 1021
|
||||
#define _LOAD_COMMON_CONSTANT_r12 1022
|
||||
#define _LOAD_COMMON_CONSTANT_r23 1023
|
||||
#define _LOAD_CONST_r01 1024
|
||||
#define _LOAD_CONST_r12 1025
|
||||
#define _LOAD_CONST_r23 1026
|
||||
#define _LOAD_CONST_INLINE_r01 1027
|
||||
#define _LOAD_CONST_INLINE_r12 1028
|
||||
#define _LOAD_CONST_INLINE_r23 1029
|
||||
#define _LOAD_CONST_INLINE_BORROW_r01 1030
|
||||
#define _LOAD_CONST_INLINE_BORROW_r12 1031
|
||||
#define _LOAD_CONST_INLINE_BORROW_r23 1032
|
||||
#define _LOAD_CONST_UNDER_INLINE_r02 1033
|
||||
#define _LOAD_CONST_UNDER_INLINE_r12 1034
|
||||
#define _LOAD_CONST_UNDER_INLINE_r23 1035
|
||||
#define _LOAD_CONST_UNDER_INLINE_BORROW_r02 1036
|
||||
#define _LOAD_CONST_UNDER_INLINE_BORROW_r12 1037
|
||||
#define _LOAD_CONST_UNDER_INLINE_BORROW_r23 1038
|
||||
#define _LOAD_DEREF_r01 1039
|
||||
#define _LOAD_FAST_r01 1040
|
||||
#define _LOAD_FAST_r12 1041
|
||||
#define _LOAD_FAST_r23 1042
|
||||
#define _LOAD_FAST_0_r01 1043
|
||||
#define _LOAD_FAST_0_r12 1044
|
||||
#define _LOAD_FAST_0_r23 1045
|
||||
#define _LOAD_FAST_1_r01 1046
|
||||
#define _LOAD_FAST_1_r12 1047
|
||||
#define _LOAD_FAST_1_r23 1048
|
||||
#define _LOAD_FAST_2_r01 1049
|
||||
#define _LOAD_FAST_2_r12 1050
|
||||
#define _LOAD_FAST_2_r23 1051
|
||||
#define _LOAD_FAST_3_r01 1052
|
||||
#define _LOAD_FAST_3_r12 1053
|
||||
#define _LOAD_FAST_3_r23 1054
|
||||
#define _LOAD_FAST_4_r01 1055
|
||||
#define _LOAD_FAST_4_r12 1056
|
||||
#define _LOAD_FAST_4_r23 1057
|
||||
#define _LOAD_FAST_5_r01 1058
|
||||
#define _LOAD_FAST_5_r12 1059
|
||||
#define _LOAD_FAST_5_r23 1060
|
||||
#define _LOAD_FAST_6_r01 1061
|
||||
#define _LOAD_FAST_6_r12 1062
|
||||
#define _LOAD_FAST_6_r23 1063
|
||||
#define _LOAD_FAST_7_r01 1064
|
||||
#define _LOAD_FAST_7_r12 1065
|
||||
#define _LOAD_FAST_7_r23 1066
|
||||
#define _LOAD_FAST_AND_CLEAR_r01 1067
|
||||
#define _LOAD_FAST_AND_CLEAR_r12 1068
|
||||
#define _LOAD_FAST_AND_CLEAR_r23 1069
|
||||
#define _LOAD_FAST_BORROW_r01 1070
|
||||
#define _LOAD_FAST_BORROW_r12 1071
|
||||
#define _LOAD_FAST_BORROW_r23 1072
|
||||
#define _LOAD_FAST_BORROW_0_r01 1073
|
||||
#define _LOAD_FAST_BORROW_0_r12 1074
|
||||
#define _LOAD_FAST_BORROW_0_r23 1075
|
||||
#define _LOAD_FAST_BORROW_1_r01 1076
|
||||
#define _LOAD_FAST_BORROW_1_r12 1077
|
||||
#define _LOAD_FAST_BORROW_1_r23 1078
|
||||
#define _LOAD_FAST_BORROW_2_r01 1079
|
||||
#define _LOAD_FAST_BORROW_2_r12 1080
|
||||
#define _LOAD_FAST_BORROW_2_r23 1081
|
||||
#define _LOAD_FAST_BORROW_3_r01 1082
|
||||
#define _LOAD_FAST_BORROW_3_r12 1083
|
||||
#define _LOAD_FAST_BORROW_3_r23 1084
|
||||
#define _LOAD_FAST_BORROW_4_r01 1085
|
||||
#define _LOAD_FAST_BORROW_4_r12 1086
|
||||
#define _LOAD_FAST_BORROW_4_r23 1087
|
||||
#define _LOAD_FAST_BORROW_5_r01 1088
|
||||
#define _LOAD_FAST_BORROW_5_r12 1089
|
||||
#define _LOAD_FAST_BORROW_5_r23 1090
|
||||
#define _LOAD_FAST_BORROW_6_r01 1091
|
||||
#define _LOAD_FAST_BORROW_6_r12 1092
|
||||
#define _LOAD_FAST_BORROW_6_r23 1093
|
||||
#define _LOAD_FAST_BORROW_7_r01 1094
|
||||
#define _LOAD_FAST_BORROW_7_r12 1095
|
||||
#define _LOAD_FAST_BORROW_7_r23 1096
|
||||
#define _LOAD_FAST_BORROW_LOAD_FAST_BORROW_r02 1097
|
||||
#define _LOAD_FAST_BORROW_LOAD_FAST_BORROW_r13 1098
|
||||
#define _LOAD_FAST_CHECK_r01 1099
|
||||
#define _LOAD_FAST_CHECK_r12 1100
|
||||
#define _LOAD_FAST_CHECK_r23 1101
|
||||
#define _LOAD_FAST_LOAD_FAST_r02 1102
|
||||
#define _LOAD_FAST_LOAD_FAST_r13 1103
|
||||
#define _LOAD_FROM_DICT_OR_DEREF_r11 1104
|
||||
#define _LOAD_FROM_DICT_OR_GLOBALS_r11 1105
|
||||
#define _LOAD_GLOBAL_r00 1106
|
||||
#define _LOAD_GLOBAL_BUILTINS_r01 1107
|
||||
#define _LOAD_GLOBAL_MODULE_r01 1108
|
||||
#define _LOAD_LOCALS_r01 1109
|
||||
#define _LOAD_LOCALS_r12 1110
|
||||
#define _LOAD_LOCALS_r23 1111
|
||||
#define _LOAD_NAME_r01 1112
|
||||
#define _LOAD_SMALL_INT_r01 1113
|
||||
#define _LOAD_SMALL_INT_r12 1114
|
||||
#define _LOAD_SMALL_INT_r23 1115
|
||||
#define _LOAD_SMALL_INT_0_r01 1116
|
||||
#define _LOAD_SMALL_INT_0_r12 1117
|
||||
#define _LOAD_SMALL_INT_0_r23 1118
|
||||
#define _LOAD_SMALL_INT_1_r01 1119
|
||||
#define _LOAD_SMALL_INT_1_r12 1120
|
||||
#define _LOAD_SMALL_INT_1_r23 1121
|
||||
#define _LOAD_SMALL_INT_2_r01 1122
|
||||
#define _LOAD_SMALL_INT_2_r12 1123
|
||||
#define _LOAD_SMALL_INT_2_r23 1124
|
||||
#define _LOAD_SMALL_INT_3_r01 1125
|
||||
#define _LOAD_SMALL_INT_3_r12 1126
|
||||
#define _LOAD_SMALL_INT_3_r23 1127
|
||||
#define _LOAD_SPECIAL_r00 1128
|
||||
#define _LOAD_SUPER_ATTR_ATTR_r31 1129
|
||||
#define _LOAD_SUPER_ATTR_METHOD_r32 1130
|
||||
#define _MAKE_CALLARGS_A_TUPLE_r33 1131
|
||||
#define _MAKE_CELL_r00 1132
|
||||
#define _MAKE_FUNCTION_r11 1133
|
||||
#define _MAKE_WARM_r00 1134
|
||||
#define _MAKE_WARM_r11 1135
|
||||
#define _MAKE_WARM_r22 1136
|
||||
#define _MAKE_WARM_r33 1137
|
||||
#define _MAP_ADD_r20 1138
|
||||
#define _MATCH_CLASS_r31 1139
|
||||
#define _MATCH_KEYS_r23 1140
|
||||
#define _MATCH_MAPPING_r02 1141
|
||||
#define _MATCH_MAPPING_r12 1142
|
||||
#define _MATCH_MAPPING_r23 1143
|
||||
#define _MATCH_SEQUENCE_r02 1144
|
||||
#define _MATCH_SEQUENCE_r12 1145
|
||||
#define _MATCH_SEQUENCE_r23 1146
|
||||
#define _MAYBE_EXPAND_METHOD_r00 1147
|
||||
#define _MAYBE_EXPAND_METHOD_KW_r11 1148
|
||||
#define _MONITOR_CALL_r00 1149
|
||||
#define _MONITOR_CALL_KW_r11 1150
|
||||
#define _MONITOR_JUMP_BACKWARD_r00 1151
|
||||
#define _MONITOR_JUMP_BACKWARD_r11 1152
|
||||
#define _MONITOR_JUMP_BACKWARD_r22 1153
|
||||
#define _MONITOR_JUMP_BACKWARD_r33 1154
|
||||
#define _MONITOR_RESUME_r00 1155
|
||||
#define _NOP_r00 1156
|
||||
#define _NOP_r11 1157
|
||||
#define _NOP_r22 1158
|
||||
#define _NOP_r33 1159
|
||||
#define _POP_CALL_r20 1160
|
||||
#define _POP_CALL_LOAD_CONST_INLINE_BORROW_r21 1161
|
||||
#define _POP_CALL_ONE_r30 1162
|
||||
#define _POP_CALL_ONE_LOAD_CONST_INLINE_BORROW_r31 1163
|
||||
#define _POP_CALL_TWO_r30 1164
|
||||
#define _POP_CALL_TWO_LOAD_CONST_INLINE_BORROW_r31 1165
|
||||
#define _POP_EXCEPT_r10 1166
|
||||
#define _POP_ITER_r20 1167
|
||||
#define _POP_JUMP_IF_FALSE_r00 1168
|
||||
#define _POP_JUMP_IF_FALSE_r10 1169
|
||||
#define _POP_JUMP_IF_FALSE_r21 1170
|
||||
#define _POP_JUMP_IF_FALSE_r32 1171
|
||||
#define _POP_JUMP_IF_TRUE_r00 1172
|
||||
#define _POP_JUMP_IF_TRUE_r10 1173
|
||||
#define _POP_JUMP_IF_TRUE_r21 1174
|
||||
#define _POP_JUMP_IF_TRUE_r32 1175
|
||||
#define _POP_TOP_r10 1176
|
||||
#define _POP_TOP_FLOAT_r00 1177
|
||||
#define _POP_TOP_FLOAT_r10 1178
|
||||
#define _POP_TOP_FLOAT_r21 1179
|
||||
#define _POP_TOP_FLOAT_r32 1180
|
||||
#define _POP_TOP_INT_r00 1181
|
||||
#define _POP_TOP_INT_r10 1182
|
||||
#define _POP_TOP_INT_r21 1183
|
||||
#define _POP_TOP_INT_r32 1184
|
||||
#define _POP_TOP_LOAD_CONST_INLINE_r11 1185
|
||||
#define _POP_TOP_LOAD_CONST_INLINE_BORROW_r11 1186
|
||||
#define _POP_TOP_NOP_r00 1187
|
||||
#define _POP_TOP_NOP_r10 1188
|
||||
#define _POP_TOP_NOP_r21 1189
|
||||
#define _POP_TOP_NOP_r32 1190
|
||||
#define _POP_TOP_UNICODE_r00 1191
|
||||
#define _POP_TOP_UNICODE_r10 1192
|
||||
#define _POP_TOP_UNICODE_r21 1193
|
||||
#define _POP_TOP_UNICODE_r32 1194
|
||||
#define _POP_TWO_r20 1195
|
||||
#define _POP_TWO_LOAD_CONST_INLINE_BORROW_r21 1196
|
||||
#define _PUSH_EXC_INFO_r02 1197
|
||||
#define _PUSH_EXC_INFO_r12 1198
|
||||
#define _PUSH_EXC_INFO_r23 1199
|
||||
#define _PUSH_FRAME_r10 1200
|
||||
#define _PUSH_NULL_r01 1201
|
||||
#define _PUSH_NULL_r12 1202
|
||||
#define _PUSH_NULL_r23 1203
|
||||
#define _PUSH_NULL_CONDITIONAL_r00 1204
|
||||
#define _PY_FRAME_GENERAL_r01 1205
|
||||
#define _PY_FRAME_KW_r11 1206
|
||||
#define _QUICKEN_RESUME_r00 1207
|
||||
#define _QUICKEN_RESUME_r11 1208
|
||||
#define _QUICKEN_RESUME_r22 1209
|
||||
#define _QUICKEN_RESUME_r33 1210
|
||||
#define _REPLACE_WITH_TRUE_r11 1211
|
||||
#define _RESUME_CHECK_r00 1212
|
||||
#define _RESUME_CHECK_r11 1213
|
||||
#define _RESUME_CHECK_r22 1214
|
||||
#define _RESUME_CHECK_r33 1215
|
||||
#define _RETURN_GENERATOR_r01 1216
|
||||
#define _RETURN_VALUE_r11 1217
|
||||
#define _SAVE_RETURN_OFFSET_r00 1218
|
||||
#define _SAVE_RETURN_OFFSET_r11 1219
|
||||
#define _SAVE_RETURN_OFFSET_r22 1220
|
||||
#define _SAVE_RETURN_OFFSET_r33 1221
|
||||
#define _SEND_r22 1222
|
||||
#define _SEND_GEN_FRAME_r22 1223
|
||||
#define _SETUP_ANNOTATIONS_r00 1224
|
||||
#define _SET_ADD_r10 1225
|
||||
#define _SET_FUNCTION_ATTRIBUTE_r01 1226
|
||||
#define _SET_FUNCTION_ATTRIBUTE_r11 1227
|
||||
#define _SET_FUNCTION_ATTRIBUTE_r21 1228
|
||||
#define _SET_FUNCTION_ATTRIBUTE_r32 1229
|
||||
#define _SET_IP_r00 1230
|
||||
#define _SET_IP_r11 1231
|
||||
#define _SET_IP_r22 1232
|
||||
#define _SET_IP_r33 1233
|
||||
#define _SET_UPDATE_r10 1234
|
||||
#define _SHUFFLE_2_LOAD_CONST_INLINE_BORROW_r02 1235
|
||||
#define _SHUFFLE_2_LOAD_CONST_INLINE_BORROW_r12 1236
|
||||
#define _SHUFFLE_2_LOAD_CONST_INLINE_BORROW_r22 1237
|
||||
#define _SHUFFLE_2_LOAD_CONST_INLINE_BORROW_r32 1238
|
||||
#define _SHUFFLE_3_LOAD_CONST_INLINE_BORROW_r03 1239
|
||||
#define _SHUFFLE_3_LOAD_CONST_INLINE_BORROW_r13 1240
|
||||
#define _SHUFFLE_3_LOAD_CONST_INLINE_BORROW_r23 1241
|
||||
#define _SHUFFLE_3_LOAD_CONST_INLINE_BORROW_r33 1242
|
||||
#define _SPILL_OR_RELOAD_r01 1243
|
||||
#define _SPILL_OR_RELOAD_r02 1244
|
||||
#define _SPILL_OR_RELOAD_r03 1245
|
||||
#define _SPILL_OR_RELOAD_r10 1246
|
||||
#define _SPILL_OR_RELOAD_r12 1247
|
||||
#define _SPILL_OR_RELOAD_r13 1248
|
||||
#define _SPILL_OR_RELOAD_r20 1249
|
||||
#define _SPILL_OR_RELOAD_r21 1250
|
||||
#define _SPILL_OR_RELOAD_r23 1251
|
||||
#define _SPILL_OR_RELOAD_r30 1252
|
||||
#define _SPILL_OR_RELOAD_r31 1253
|
||||
#define _SPILL_OR_RELOAD_r32 1254
|
||||
#define _START_EXECUTOR_r00 1255
|
||||
#define _STORE_ATTR_r20 1256
|
||||
#define _STORE_ATTR_INSTANCE_VALUE_r21 1257
|
||||
#define _STORE_ATTR_SLOT_r21 1258
|
||||
#define _STORE_ATTR_WITH_HINT_r21 1259
|
||||
#define _STORE_DEREF_r10 1260
|
||||
#define _STORE_FAST_r10 1261
|
||||
#define _STORE_FAST_0_r10 1262
|
||||
#define _STORE_FAST_1_r10 1263
|
||||
#define _STORE_FAST_2_r10 1264
|
||||
#define _STORE_FAST_3_r10 1265
|
||||
#define _STORE_FAST_4_r10 1266
|
||||
#define _STORE_FAST_5_r10 1267
|
||||
#define _STORE_FAST_6_r10 1268
|
||||
#define _STORE_FAST_7_r10 1269
|
||||
#define _STORE_FAST_LOAD_FAST_r11 1270
|
||||
#define _STORE_FAST_STORE_FAST_r20 1271
|
||||
#define _STORE_GLOBAL_r10 1272
|
||||
#define _STORE_NAME_r10 1273
|
||||
#define _STORE_SLICE_r30 1274
|
||||
#define _STORE_SUBSCR_r30 1275
|
||||
#define _STORE_SUBSCR_DICT_r31 1276
|
||||
#define _STORE_SUBSCR_LIST_INT_r32 1277
|
||||
#define _SWAP_r11 1278
|
||||
#define _SWAP_2_r02 1279
|
||||
#define _SWAP_2_r12 1280
|
||||
#define _SWAP_2_r22 1281
|
||||
#define _SWAP_2_r33 1282
|
||||
#define _SWAP_3_r03 1283
|
||||
#define _SWAP_3_r13 1284
|
||||
#define _SWAP_3_r23 1285
|
||||
#define _SWAP_3_r33 1286
|
||||
#define _TIER2_RESUME_CHECK_r00 1287
|
||||
#define _TIER2_RESUME_CHECK_r11 1288
|
||||
#define _TIER2_RESUME_CHECK_r22 1289
|
||||
#define _TIER2_RESUME_CHECK_r33 1290
|
||||
#define _TO_BOOL_r11 1291
|
||||
#define _TO_BOOL_BOOL_r01 1292
|
||||
#define _TO_BOOL_BOOL_r11 1293
|
||||
#define _TO_BOOL_BOOL_r22 1294
|
||||
#define _TO_BOOL_BOOL_r33 1295
|
||||
#define _TO_BOOL_INT_r11 1296
|
||||
#define _TO_BOOL_LIST_r11 1297
|
||||
#define _TO_BOOL_NONE_r01 1298
|
||||
#define _TO_BOOL_NONE_r11 1299
|
||||
#define _TO_BOOL_NONE_r22 1300
|
||||
#define _TO_BOOL_NONE_r33 1301
|
||||
#define _TO_BOOL_STR_r11 1302
|
||||
#define _TRACE_RECORD_r00 1303
|
||||
#define _UNARY_INVERT_r11 1304
|
||||
#define _UNARY_NEGATIVE_r11 1305
|
||||
#define _UNARY_NOT_r01 1306
|
||||
#define _UNARY_NOT_r11 1307
|
||||
#define _UNARY_NOT_r22 1308
|
||||
#define _UNARY_NOT_r33 1309
|
||||
#define _UNPACK_EX_r10 1310
|
||||
#define _UNPACK_SEQUENCE_r10 1311
|
||||
#define _UNPACK_SEQUENCE_LIST_r10 1312
|
||||
#define _UNPACK_SEQUENCE_TUPLE_r10 1313
|
||||
#define _UNPACK_SEQUENCE_TWO_TUPLE_r12 1314
|
||||
#define _WITH_EXCEPT_START_r33 1315
|
||||
#define _YIELD_VALUE_r11 1316
|
||||
#define MAX_UOP_REGS_ID 1316
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
||||
18
Include/internal/pycore_uop_metadata.h
generated
18
Include/internal/pycore_uop_metadata.h
generated
@ -193,7 +193,7 @@ const uint32_t _PyUop_Flags[MAX_UOP_ID+1] = {
|
||||
[_LOAD_ATTR_INSTANCE_VALUE] = HAS_DEOPT_FLAG,
|
||||
[_LOAD_ATTR_MODULE] = HAS_DEOPT_FLAG | HAS_ESCAPES_FLAG,
|
||||
[_LOAD_ATTR_WITH_HINT] = HAS_ARG_FLAG | HAS_NAME_FLAG | HAS_DEOPT_FLAG,
|
||||
[_LOAD_ATTR_SLOT] = HAS_DEOPT_FLAG | HAS_ESCAPES_FLAG,
|
||||
[_LOAD_ATTR_SLOT] = HAS_DEOPT_FLAG,
|
||||
[_CHECK_ATTR_CLASS] = HAS_EXIT_FLAG,
|
||||
[_LOAD_ATTR_CLASS] = HAS_ESCAPES_FLAG,
|
||||
[_LOAD_ATTR_PROPERTY_FRAME] = HAS_ARG_FLAG | HAS_DEOPT_FLAG,
|
||||
@ -1791,11 +1791,11 @@ const _PyUopCachingInfo _PyUop_Caching[MAX_UOP_ID+1] = {
|
||||
},
|
||||
},
|
||||
[_LOAD_ATTR_SLOT] = {
|
||||
.best = { 1, 1, 1, 1 },
|
||||
.best = { 0, 1, 2, 2 },
|
||||
.entries = {
|
||||
{ -1, -1, -1 },
|
||||
{ 1, 1, _LOAD_ATTR_SLOT_r11 },
|
||||
{ -1, -1, -1 },
|
||||
{ 2, 0, _LOAD_ATTR_SLOT_r02 },
|
||||
{ 2, 1, _LOAD_ATTR_SLOT_r12 },
|
||||
{ 3, 2, _LOAD_ATTR_SLOT_r23 },
|
||||
{ -1, -1, -1 },
|
||||
},
|
||||
},
|
||||
@ -3569,7 +3569,9 @@ const uint16_t _PyUop_Uncached[MAX_UOP_REGS_ID+1] = {
|
||||
[_LOAD_ATTR_INSTANCE_VALUE_r23] = _LOAD_ATTR_INSTANCE_VALUE,
|
||||
[_LOAD_ATTR_MODULE_r11] = _LOAD_ATTR_MODULE,
|
||||
[_LOAD_ATTR_WITH_HINT_r12] = _LOAD_ATTR_WITH_HINT,
|
||||
[_LOAD_ATTR_SLOT_r11] = _LOAD_ATTR_SLOT,
|
||||
[_LOAD_ATTR_SLOT_r02] = _LOAD_ATTR_SLOT,
|
||||
[_LOAD_ATTR_SLOT_r12] = _LOAD_ATTR_SLOT,
|
||||
[_LOAD_ATTR_SLOT_r23] = _LOAD_ATTR_SLOT,
|
||||
[_CHECK_ATTR_CLASS_r01] = _CHECK_ATTR_CLASS,
|
||||
[_CHECK_ATTR_CLASS_r11] = _CHECK_ATTR_CLASS,
|
||||
[_CHECK_ATTR_CLASS_r22] = _CHECK_ATTR_CLASS,
|
||||
@ -4544,7 +4546,9 @@ const char *const _PyOpcode_uop_name[MAX_UOP_REGS_ID+1] = {
|
||||
[_LOAD_ATTR_PROPERTY_FRAME] = "_LOAD_ATTR_PROPERTY_FRAME",
|
||||
[_LOAD_ATTR_PROPERTY_FRAME_r11] = "_LOAD_ATTR_PROPERTY_FRAME_r11",
|
||||
[_LOAD_ATTR_SLOT] = "_LOAD_ATTR_SLOT",
|
||||
[_LOAD_ATTR_SLOT_r11] = "_LOAD_ATTR_SLOT_r11",
|
||||
[_LOAD_ATTR_SLOT_r02] = "_LOAD_ATTR_SLOT_r02",
|
||||
[_LOAD_ATTR_SLOT_r12] = "_LOAD_ATTR_SLOT_r12",
|
||||
[_LOAD_ATTR_SLOT_r23] = "_LOAD_ATTR_SLOT_r23",
|
||||
[_LOAD_ATTR_WITH_HINT] = "_LOAD_ATTR_WITH_HINT",
|
||||
[_LOAD_ATTR_WITH_HINT_r12] = "_LOAD_ATTR_WITH_HINT_r12",
|
||||
[_LOAD_BUILD_CLASS] = "_LOAD_BUILD_CLASS",
|
||||
|
||||
@ -2593,6 +2593,25 @@ class TestUopsOptimization(unittest.TestCase):
|
||||
self.assertNotIn("_POP_TOP", uops)
|
||||
self.assertIn("_POP_TOP_NOP", uops)
|
||||
|
||||
def test_load_addr_slot(self):
|
||||
def testfunc(n):
|
||||
class C:
|
||||
__slots__ = ('x',)
|
||||
c = C()
|
||||
c.x = 42
|
||||
x = 0
|
||||
for _ in range(n):
|
||||
x += c.x
|
||||
return x
|
||||
res, ex = self._run_with_optimizer(testfunc, TIER2_THRESHOLD)
|
||||
self.assertEqual(res, 42 * TIER2_THRESHOLD)
|
||||
self.assertIsNotNone(ex)
|
||||
uops = get_opnames(ex)
|
||||
|
||||
self.assertIn("_LOAD_ATTR_SLOT", uops)
|
||||
self.assertNotIn("_POP_TOP", uops)
|
||||
self.assertIn("_POP_TOP_NOP", uops)
|
||||
|
||||
def test_int_add_op_refcount_elimination(self):
|
||||
def testfunc(n):
|
||||
c = 1
|
||||
|
||||
@ -0,0 +1 @@
|
||||
Eliminate redundant refcounting from ``_LOAD_ATTR_SLOT``.
|
||||
@ -2485,7 +2485,7 @@ dummy_func(
|
||||
unused/5 +
|
||||
_PUSH_NULL_CONDITIONAL;
|
||||
|
||||
op(_LOAD_ATTR_SLOT, (index/1, owner -- attr)) {
|
||||
op(_LOAD_ATTR_SLOT, (index/1, owner -- attr, o)) {
|
||||
PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner);
|
||||
|
||||
PyObject **addr = (PyObject **)((char *)owner_o + index);
|
||||
@ -2498,13 +2498,15 @@ dummy_func(
|
||||
attr = PyStackRef_FromPyObjectNew(attr_o);
|
||||
#endif
|
||||
STAT_INC(LOAD_ATTR, hit);
|
||||
DECREF_INPUTS();
|
||||
o = owner;
|
||||
DEAD(owner);
|
||||
}
|
||||
|
||||
macro(LOAD_ATTR_SLOT) =
|
||||
unused/1 +
|
||||
_GUARD_TYPE_VERSION +
|
||||
_LOAD_ATTR_SLOT + // NOTE: This action may also deopt
|
||||
POP_TOP +
|
||||
unused/5 +
|
||||
_PUSH_NULL_CONDITIONAL;
|
||||
|
||||
|
||||
99
Python/executor_cases.c.h
generated
99
Python/executor_cases.c.h
generated
@ -8532,11 +8532,49 @@
|
||||
break;
|
||||
}
|
||||
|
||||
case _LOAD_ATTR_SLOT_r11: {
|
||||
case _LOAD_ATTR_SLOT_r02: {
|
||||
CHECK_CURRENT_CACHED_VALUES(0);
|
||||
assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE());
|
||||
_PyStackRef owner;
|
||||
_PyStackRef attr;
|
||||
_PyStackRef o;
|
||||
owner = stack_pointer[-1];
|
||||
uint16_t index = (uint16_t)CURRENT_OPERAND0_16();
|
||||
PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner);
|
||||
PyObject **addr = (PyObject **)((char *)owner_o + index);
|
||||
PyObject *attr_o = FT_ATOMIC_LOAD_PTR(*addr);
|
||||
if (attr_o == NULL) {
|
||||
UOP_STAT_INC(uopcode, miss);
|
||||
SET_CURRENT_CACHED_VALUES(0);
|
||||
JUMP_TO_JUMP_TARGET();
|
||||
}
|
||||
#ifdef Py_GIL_DISABLED
|
||||
int increfed = _Py_TryIncrefCompareStackRef(addr, attr_o, &attr);
|
||||
if (!increfed) {
|
||||
UOP_STAT_INC(uopcode, miss);
|
||||
SET_CURRENT_CACHED_VALUES(0);
|
||||
JUMP_TO_JUMP_TARGET();
|
||||
}
|
||||
#else
|
||||
attr = PyStackRef_FromPyObjectNew(attr_o);
|
||||
#endif
|
||||
STAT_INC(LOAD_ATTR, hit);
|
||||
o = owner;
|
||||
_tos_cache1 = o;
|
||||
_tos_cache0 = attr;
|
||||
SET_CURRENT_CACHED_VALUES(2);
|
||||
stack_pointer += -1;
|
||||
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
|
||||
assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE());
|
||||
break;
|
||||
}
|
||||
|
||||
case _LOAD_ATTR_SLOT_r12: {
|
||||
CHECK_CURRENT_CACHED_VALUES(1);
|
||||
assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE());
|
||||
_PyStackRef owner;
|
||||
_PyStackRef attr;
|
||||
_PyStackRef o;
|
||||
_PyStackRef _stack_item_0 = _tos_cache0;
|
||||
owner = _stack_item_0;
|
||||
uint16_t index = (uint16_t)CURRENT_OPERAND0_16();
|
||||
@ -8561,21 +8599,52 @@
|
||||
attr = PyStackRef_FromPyObjectNew(attr_o);
|
||||
#endif
|
||||
STAT_INC(LOAD_ATTR, hit);
|
||||
stack_pointer[0] = owner;
|
||||
stack_pointer += 1;
|
||||
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
|
||||
_PyFrame_SetStackPointer(frame, stack_pointer);
|
||||
_PyStackRef tmp = owner;
|
||||
owner = attr;
|
||||
stack_pointer[-1] = owner;
|
||||
PyStackRef_CLOSE(tmp);
|
||||
stack_pointer = _PyFrame_GetStackPointer(frame);
|
||||
o = owner;
|
||||
_tos_cache1 = o;
|
||||
_tos_cache0 = attr;
|
||||
_tos_cache1 = PyStackRef_ZERO_BITS;
|
||||
_tos_cache2 = PyStackRef_ZERO_BITS;
|
||||
SET_CURRENT_CACHED_VALUES(1);
|
||||
stack_pointer += -1;
|
||||
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
|
||||
SET_CURRENT_CACHED_VALUES(2);
|
||||
assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE());
|
||||
break;
|
||||
}
|
||||
|
||||
case _LOAD_ATTR_SLOT_r23: {
|
||||
CHECK_CURRENT_CACHED_VALUES(2);
|
||||
assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE());
|
||||
_PyStackRef owner;
|
||||
_PyStackRef attr;
|
||||
_PyStackRef o;
|
||||
_PyStackRef _stack_item_0 = _tos_cache0;
|
||||
_PyStackRef _stack_item_1 = _tos_cache1;
|
||||
owner = _stack_item_1;
|
||||
uint16_t index = (uint16_t)CURRENT_OPERAND0_16();
|
||||
PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner);
|
||||
PyObject **addr = (PyObject **)((char *)owner_o + index);
|
||||
PyObject *attr_o = FT_ATOMIC_LOAD_PTR(*addr);
|
||||
if (attr_o == NULL) {
|
||||
UOP_STAT_INC(uopcode, miss);
|
||||
_tos_cache1 = owner;
|
||||
_tos_cache0 = _stack_item_0;
|
||||
SET_CURRENT_CACHED_VALUES(2);
|
||||
JUMP_TO_JUMP_TARGET();
|
||||
}
|
||||
#ifdef Py_GIL_DISABLED
|
||||
int increfed = _Py_TryIncrefCompareStackRef(addr, attr_o, &attr);
|
||||
if (!increfed) {
|
||||
UOP_STAT_INC(uopcode, miss);
|
||||
_tos_cache1 = owner;
|
||||
_tos_cache0 = _stack_item_0;
|
||||
SET_CURRENT_CACHED_VALUES(2);
|
||||
JUMP_TO_JUMP_TARGET();
|
||||
}
|
||||
#else
|
||||
attr = PyStackRef_FromPyObjectNew(attr_o);
|
||||
#endif
|
||||
STAT_INC(LOAD_ATTR, hit);
|
||||
o = owner;
|
||||
_tos_cache2 = o;
|
||||
_tos_cache1 = attr;
|
||||
_tos_cache0 = _stack_item_0;
|
||||
SET_CURRENT_CACHED_VALUES(3);
|
||||
assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE());
|
||||
break;
|
||||
}
|
||||
|
||||
13
Python/generated_cases.c.h
generated
13
Python/generated_cases.c.h
generated
@ -8284,6 +8284,8 @@
|
||||
static_assert(INLINE_CACHE_ENTRIES_LOAD_ATTR == 9, "incorrect cache size");
|
||||
_PyStackRef owner;
|
||||
_PyStackRef attr;
|
||||
_PyStackRef o;
|
||||
_PyStackRef value;
|
||||
_PyStackRef *null;
|
||||
/* Skip 1 cache entry */
|
||||
// _GUARD_TYPE_VERSION
|
||||
@ -8320,11 +8322,14 @@
|
||||
attr = PyStackRef_FromPyObjectNew(attr_o);
|
||||
#endif
|
||||
STAT_INC(LOAD_ATTR, hit);
|
||||
o = owner;
|
||||
}
|
||||
// _POP_TOP
|
||||
{
|
||||
value = o;
|
||||
stack_pointer[-1] = attr;
|
||||
_PyFrame_SetStackPointer(frame, stack_pointer);
|
||||
_PyStackRef tmp = owner;
|
||||
owner = attr;
|
||||
stack_pointer[-1] = owner;
|
||||
PyStackRef_CLOSE(tmp);
|
||||
PyStackRef_XCLOSE(value);
|
||||
stack_pointer = _PyFrame_GetStackPointer(frame);
|
||||
}
|
||||
/* Skip 5 cache entries */
|
||||
|
||||
@ -661,9 +661,10 @@ dummy_func(void) {
|
||||
o = owner;
|
||||
}
|
||||
|
||||
op(_LOAD_ATTR_SLOT, (index/1, owner -- attr)) {
|
||||
op(_LOAD_ATTR_SLOT, (index/1, owner -- attr, o)) {
|
||||
attr = sym_new_not_null(ctx);
|
||||
(void)index;
|
||||
o = owner;
|
||||
}
|
||||
|
||||
op(_LOAD_ATTR_CLASS, (descr/4, owner -- attr)) {
|
||||
|
||||
8
Python/optimizer_cases.c.h
generated
8
Python/optimizer_cases.c.h
generated
@ -1666,11 +1666,19 @@
|
||||
}
|
||||
|
||||
case _LOAD_ATTR_SLOT: {
|
||||
JitOptRef owner;
|
||||
JitOptRef attr;
|
||||
JitOptRef o;
|
||||
owner = stack_pointer[-1];
|
||||
uint16_t index = (uint16_t)this_instr->operand0;
|
||||
attr = sym_new_not_null(ctx);
|
||||
(void)index;
|
||||
o = owner;
|
||||
CHECK_STACK_BOUNDS(1);
|
||||
stack_pointer[-1] = attr;
|
||||
stack_pointer[0] = o;
|
||||
stack_pointer += 1;
|
||||
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user