mirror of
https://github.com/python/cpython.git
synced 2025-12-31 04:23:37 +00:00
gh-134584: Eliminate redundant refcounting from _LOAD_ATTR_INSTANCE_VALUE (GH-142769)
Signed-off-by: Manjusaka <me@manjusaka.me>
This commit is contained in:
parent
92d4aeafd5
commit
6ee51a36b3
10 changed files with 451 additions and 331 deletions
2
Include/internal/pycore_opcode_metadata.h
generated
2
Include/internal/pycore_opcode_metadata.h
generated
|
|
@ -1425,7 +1425,7 @@ _PyOpcode_macro_expansion[256] = {
|
|||
[LOAD_ATTR] = { .nuops = 1, .uops = { { _LOAD_ATTR, OPARG_SIMPLE, 8 } } },
|
||||
[LOAD_ATTR_CLASS] = { .nuops = 3, .uops = { { _CHECK_ATTR_CLASS, 2, 1 }, { _LOAD_ATTR_CLASS, 4, 5 }, { _PUSH_NULL_CONDITIONAL, OPARG_SIMPLE, 9 } } },
|
||||
[LOAD_ATTR_CLASS_WITH_METACLASS_CHECK] = { .nuops = 4, .uops = { { _CHECK_ATTR_CLASS, 2, 1 }, { _GUARD_TYPE_VERSION, 2, 3 }, { _LOAD_ATTR_CLASS, 4, 5 }, { _PUSH_NULL_CONDITIONAL, OPARG_SIMPLE, 9 } } },
|
||||
[LOAD_ATTR_INSTANCE_VALUE] = { .nuops = 4, .uops = { { _GUARD_TYPE_VERSION, 2, 1 }, { _CHECK_MANAGED_OBJECT_HAS_VALUES, OPARG_SIMPLE, 3 }, { _LOAD_ATTR_INSTANCE_VALUE, 1, 3 }, { _PUSH_NULL_CONDITIONAL, OPARG_SIMPLE, 9 } } },
|
||||
[LOAD_ATTR_INSTANCE_VALUE] = { .nuops = 5, .uops = { { _GUARD_TYPE_VERSION, 2, 1 }, { _CHECK_MANAGED_OBJECT_HAS_VALUES, OPARG_SIMPLE, 3 }, { _LOAD_ATTR_INSTANCE_VALUE, 1, 3 }, { _POP_TOP, OPARG_SIMPLE, 4 }, { _PUSH_NULL_CONDITIONAL, OPARG_SIMPLE, 9 } } },
|
||||
[LOAD_ATTR_METHOD_LAZY_DICT] = { .nuops = 3, .uops = { { _GUARD_TYPE_VERSION, 2, 1 }, { _CHECK_ATTR_METHOD_LAZY_DICT, 1, 3 }, { _LOAD_ATTR_METHOD_LAZY_DICT, 4, 5 } } },
|
||||
[LOAD_ATTR_METHOD_NO_DICT] = { .nuops = 2, .uops = { { _GUARD_TYPE_VERSION, 2, 1 }, { _LOAD_ATTR_METHOD_NO_DICT, 4, 5 } } },
|
||||
[LOAD_ATTR_METHOD_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_METHOD_WITH_VALUES, 4, 5 } } },
|
||||
|
|
|
|||
616
Include/internal/pycore_uop_ids.h
generated
616
Include/internal/pycore_uop_ids.h
generated
|
|
@ -788,313 +788,315 @@ extern "C" {
|
|||
#define _LOAD_ATTR_r10 981
|
||||
#define _LOAD_ATTR_CLASS_r11 982
|
||||
#define _LOAD_ATTR_GETATTRIBUTE_OVERRIDDEN_r11 983
|
||||
#define _LOAD_ATTR_INSTANCE_VALUE_r11 984
|
||||
#define _LOAD_ATTR_METHOD_LAZY_DICT_r02 985
|
||||
#define _LOAD_ATTR_METHOD_LAZY_DICT_r12 986
|
||||
#define _LOAD_ATTR_METHOD_LAZY_DICT_r23 987
|
||||
#define _LOAD_ATTR_METHOD_NO_DICT_r02 988
|
||||
#define _LOAD_ATTR_METHOD_NO_DICT_r12 989
|
||||
#define _LOAD_ATTR_METHOD_NO_DICT_r23 990
|
||||
#define _LOAD_ATTR_METHOD_WITH_VALUES_r02 991
|
||||
#define _LOAD_ATTR_METHOD_WITH_VALUES_r12 992
|
||||
#define _LOAD_ATTR_METHOD_WITH_VALUES_r23 993
|
||||
#define _LOAD_ATTR_MODULE_r11 994
|
||||
#define _LOAD_ATTR_NONDESCRIPTOR_NO_DICT_r11 995
|
||||
#define _LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES_r11 996
|
||||
#define _LOAD_ATTR_PROPERTY_FRAME_r11 997
|
||||
#define _LOAD_ATTR_SLOT_r11 998
|
||||
#define _LOAD_ATTR_WITH_HINT_r11 999
|
||||
#define _LOAD_BUILD_CLASS_r01 1000
|
||||
#define _LOAD_BYTECODE_r00 1001
|
||||
#define _LOAD_COMMON_CONSTANT_r01 1002
|
||||
#define _LOAD_COMMON_CONSTANT_r12 1003
|
||||
#define _LOAD_COMMON_CONSTANT_r23 1004
|
||||
#define _LOAD_CONST_r01 1005
|
||||
#define _LOAD_CONST_r12 1006
|
||||
#define _LOAD_CONST_r23 1007
|
||||
#define _LOAD_CONST_INLINE_r01 1008
|
||||
#define _LOAD_CONST_INLINE_r12 1009
|
||||
#define _LOAD_CONST_INLINE_r23 1010
|
||||
#define _LOAD_CONST_INLINE_BORROW_r01 1011
|
||||
#define _LOAD_CONST_INLINE_BORROW_r12 1012
|
||||
#define _LOAD_CONST_INLINE_BORROW_r23 1013
|
||||
#define _LOAD_CONST_UNDER_INLINE_r02 1014
|
||||
#define _LOAD_CONST_UNDER_INLINE_r12 1015
|
||||
#define _LOAD_CONST_UNDER_INLINE_r23 1016
|
||||
#define _LOAD_CONST_UNDER_INLINE_BORROW_r02 1017
|
||||
#define _LOAD_CONST_UNDER_INLINE_BORROW_r12 1018
|
||||
#define _LOAD_CONST_UNDER_INLINE_BORROW_r23 1019
|
||||
#define _LOAD_DEREF_r01 1020
|
||||
#define _LOAD_FAST_r01 1021
|
||||
#define _LOAD_FAST_r12 1022
|
||||
#define _LOAD_FAST_r23 1023
|
||||
#define _LOAD_FAST_0_r01 1024
|
||||
#define _LOAD_FAST_0_r12 1025
|
||||
#define _LOAD_FAST_0_r23 1026
|
||||
#define _LOAD_FAST_1_r01 1027
|
||||
#define _LOAD_FAST_1_r12 1028
|
||||
#define _LOAD_FAST_1_r23 1029
|
||||
#define _LOAD_FAST_2_r01 1030
|
||||
#define _LOAD_FAST_2_r12 1031
|
||||
#define _LOAD_FAST_2_r23 1032
|
||||
#define _LOAD_FAST_3_r01 1033
|
||||
#define _LOAD_FAST_3_r12 1034
|
||||
#define _LOAD_FAST_3_r23 1035
|
||||
#define _LOAD_FAST_4_r01 1036
|
||||
#define _LOAD_FAST_4_r12 1037
|
||||
#define _LOAD_FAST_4_r23 1038
|
||||
#define _LOAD_FAST_5_r01 1039
|
||||
#define _LOAD_FAST_5_r12 1040
|
||||
#define _LOAD_FAST_5_r23 1041
|
||||
#define _LOAD_FAST_6_r01 1042
|
||||
#define _LOAD_FAST_6_r12 1043
|
||||
#define _LOAD_FAST_6_r23 1044
|
||||
#define _LOAD_FAST_7_r01 1045
|
||||
#define _LOAD_FAST_7_r12 1046
|
||||
#define _LOAD_FAST_7_r23 1047
|
||||
#define _LOAD_FAST_AND_CLEAR_r01 1048
|
||||
#define _LOAD_FAST_AND_CLEAR_r12 1049
|
||||
#define _LOAD_FAST_AND_CLEAR_r23 1050
|
||||
#define _LOAD_FAST_BORROW_r01 1051
|
||||
#define _LOAD_FAST_BORROW_r12 1052
|
||||
#define _LOAD_FAST_BORROW_r23 1053
|
||||
#define _LOAD_FAST_BORROW_0_r01 1054
|
||||
#define _LOAD_FAST_BORROW_0_r12 1055
|
||||
#define _LOAD_FAST_BORROW_0_r23 1056
|
||||
#define _LOAD_FAST_BORROW_1_r01 1057
|
||||
#define _LOAD_FAST_BORROW_1_r12 1058
|
||||
#define _LOAD_FAST_BORROW_1_r23 1059
|
||||
#define _LOAD_FAST_BORROW_2_r01 1060
|
||||
#define _LOAD_FAST_BORROW_2_r12 1061
|
||||
#define _LOAD_FAST_BORROW_2_r23 1062
|
||||
#define _LOAD_FAST_BORROW_3_r01 1063
|
||||
#define _LOAD_FAST_BORROW_3_r12 1064
|
||||
#define _LOAD_FAST_BORROW_3_r23 1065
|
||||
#define _LOAD_FAST_BORROW_4_r01 1066
|
||||
#define _LOAD_FAST_BORROW_4_r12 1067
|
||||
#define _LOAD_FAST_BORROW_4_r23 1068
|
||||
#define _LOAD_FAST_BORROW_5_r01 1069
|
||||
#define _LOAD_FAST_BORROW_5_r12 1070
|
||||
#define _LOAD_FAST_BORROW_5_r23 1071
|
||||
#define _LOAD_FAST_BORROW_6_r01 1072
|
||||
#define _LOAD_FAST_BORROW_6_r12 1073
|
||||
#define _LOAD_FAST_BORROW_6_r23 1074
|
||||
#define _LOAD_FAST_BORROW_7_r01 1075
|
||||
#define _LOAD_FAST_BORROW_7_r12 1076
|
||||
#define _LOAD_FAST_BORROW_7_r23 1077
|
||||
#define _LOAD_FAST_BORROW_LOAD_FAST_BORROW_r02 1078
|
||||
#define _LOAD_FAST_BORROW_LOAD_FAST_BORROW_r13 1079
|
||||
#define _LOAD_FAST_CHECK_r01 1080
|
||||
#define _LOAD_FAST_CHECK_r12 1081
|
||||
#define _LOAD_FAST_CHECK_r23 1082
|
||||
#define _LOAD_FAST_LOAD_FAST_r02 1083
|
||||
#define _LOAD_FAST_LOAD_FAST_r13 1084
|
||||
#define _LOAD_FROM_DICT_OR_DEREF_r11 1085
|
||||
#define _LOAD_FROM_DICT_OR_GLOBALS_r11 1086
|
||||
#define _LOAD_GLOBAL_r00 1087
|
||||
#define _LOAD_GLOBAL_BUILTINS_r01 1088
|
||||
#define _LOAD_GLOBAL_MODULE_r01 1089
|
||||
#define _LOAD_LOCALS_r01 1090
|
||||
#define _LOAD_LOCALS_r12 1091
|
||||
#define _LOAD_LOCALS_r23 1092
|
||||
#define _LOAD_NAME_r01 1093
|
||||
#define _LOAD_SMALL_INT_r01 1094
|
||||
#define _LOAD_SMALL_INT_r12 1095
|
||||
#define _LOAD_SMALL_INT_r23 1096
|
||||
#define _LOAD_SMALL_INT_0_r01 1097
|
||||
#define _LOAD_SMALL_INT_0_r12 1098
|
||||
#define _LOAD_SMALL_INT_0_r23 1099
|
||||
#define _LOAD_SMALL_INT_1_r01 1100
|
||||
#define _LOAD_SMALL_INT_1_r12 1101
|
||||
#define _LOAD_SMALL_INT_1_r23 1102
|
||||
#define _LOAD_SMALL_INT_2_r01 1103
|
||||
#define _LOAD_SMALL_INT_2_r12 1104
|
||||
#define _LOAD_SMALL_INT_2_r23 1105
|
||||
#define _LOAD_SMALL_INT_3_r01 1106
|
||||
#define _LOAD_SMALL_INT_3_r12 1107
|
||||
#define _LOAD_SMALL_INT_3_r23 1108
|
||||
#define _LOAD_SPECIAL_r00 1109
|
||||
#define _LOAD_SUPER_ATTR_ATTR_r31 1110
|
||||
#define _LOAD_SUPER_ATTR_METHOD_r32 1111
|
||||
#define _MAKE_CALLARGS_A_TUPLE_r33 1112
|
||||
#define _MAKE_CELL_r00 1113
|
||||
#define _MAKE_FUNCTION_r11 1114
|
||||
#define _MAKE_WARM_r00 1115
|
||||
#define _MAKE_WARM_r11 1116
|
||||
#define _MAKE_WARM_r22 1117
|
||||
#define _MAKE_WARM_r33 1118
|
||||
#define _MAP_ADD_r20 1119
|
||||
#define _MATCH_CLASS_r31 1120
|
||||
#define _MATCH_KEYS_r23 1121
|
||||
#define _MATCH_MAPPING_r02 1122
|
||||
#define _MATCH_MAPPING_r12 1123
|
||||
#define _MATCH_MAPPING_r23 1124
|
||||
#define _MATCH_SEQUENCE_r02 1125
|
||||
#define _MATCH_SEQUENCE_r12 1126
|
||||
#define _MATCH_SEQUENCE_r23 1127
|
||||
#define _MAYBE_EXPAND_METHOD_r00 1128
|
||||
#define _MAYBE_EXPAND_METHOD_KW_r11 1129
|
||||
#define _MONITOR_CALL_r00 1130
|
||||
#define _MONITOR_CALL_KW_r11 1131
|
||||
#define _MONITOR_JUMP_BACKWARD_r00 1132
|
||||
#define _MONITOR_JUMP_BACKWARD_r11 1133
|
||||
#define _MONITOR_JUMP_BACKWARD_r22 1134
|
||||
#define _MONITOR_JUMP_BACKWARD_r33 1135
|
||||
#define _MONITOR_RESUME_r00 1136
|
||||
#define _NOP_r00 1137
|
||||
#define _NOP_r11 1138
|
||||
#define _NOP_r22 1139
|
||||
#define _NOP_r33 1140
|
||||
#define _POP_CALL_r20 1141
|
||||
#define _POP_CALL_LOAD_CONST_INLINE_BORROW_r21 1142
|
||||
#define _POP_CALL_ONE_r30 1143
|
||||
#define _POP_CALL_ONE_LOAD_CONST_INLINE_BORROW_r31 1144
|
||||
#define _POP_CALL_TWO_r30 1145
|
||||
#define _POP_CALL_TWO_LOAD_CONST_INLINE_BORROW_r31 1146
|
||||
#define _POP_EXCEPT_r10 1147
|
||||
#define _POP_ITER_r20 1148
|
||||
#define _POP_JUMP_IF_FALSE_r00 1149
|
||||
#define _POP_JUMP_IF_FALSE_r10 1150
|
||||
#define _POP_JUMP_IF_FALSE_r21 1151
|
||||
#define _POP_JUMP_IF_FALSE_r32 1152
|
||||
#define _POP_JUMP_IF_TRUE_r00 1153
|
||||
#define _POP_JUMP_IF_TRUE_r10 1154
|
||||
#define _POP_JUMP_IF_TRUE_r21 1155
|
||||
#define _POP_JUMP_IF_TRUE_r32 1156
|
||||
#define _POP_TOP_r10 1157
|
||||
#define _POP_TOP_FLOAT_r00 1158
|
||||
#define _POP_TOP_FLOAT_r10 1159
|
||||
#define _POP_TOP_FLOAT_r21 1160
|
||||
#define _POP_TOP_FLOAT_r32 1161
|
||||
#define _POP_TOP_INT_r00 1162
|
||||
#define _POP_TOP_INT_r10 1163
|
||||
#define _POP_TOP_INT_r21 1164
|
||||
#define _POP_TOP_INT_r32 1165
|
||||
#define _POP_TOP_LOAD_CONST_INLINE_r11 1166
|
||||
#define _POP_TOP_LOAD_CONST_INLINE_BORROW_r11 1167
|
||||
#define _POP_TOP_NOP_r00 1168
|
||||
#define _POP_TOP_NOP_r10 1169
|
||||
#define _POP_TOP_NOP_r21 1170
|
||||
#define _POP_TOP_NOP_r32 1171
|
||||
#define _POP_TOP_UNICODE_r00 1172
|
||||
#define _POP_TOP_UNICODE_r10 1173
|
||||
#define _POP_TOP_UNICODE_r21 1174
|
||||
#define _POP_TOP_UNICODE_r32 1175
|
||||
#define _POP_TWO_r20 1176
|
||||
#define _POP_TWO_LOAD_CONST_INLINE_BORROW_r21 1177
|
||||
#define _PUSH_EXC_INFO_r02 1178
|
||||
#define _PUSH_EXC_INFO_r12 1179
|
||||
#define _PUSH_EXC_INFO_r23 1180
|
||||
#define _PUSH_FRAME_r10 1181
|
||||
#define _PUSH_NULL_r01 1182
|
||||
#define _PUSH_NULL_r12 1183
|
||||
#define _PUSH_NULL_r23 1184
|
||||
#define _PUSH_NULL_CONDITIONAL_r00 1185
|
||||
#define _PY_FRAME_GENERAL_r01 1186
|
||||
#define _PY_FRAME_KW_r11 1187
|
||||
#define _QUICKEN_RESUME_r00 1188
|
||||
#define _QUICKEN_RESUME_r11 1189
|
||||
#define _QUICKEN_RESUME_r22 1190
|
||||
#define _QUICKEN_RESUME_r33 1191
|
||||
#define _REPLACE_WITH_TRUE_r11 1192
|
||||
#define _RESUME_CHECK_r00 1193
|
||||
#define _RESUME_CHECK_r11 1194
|
||||
#define _RESUME_CHECK_r22 1195
|
||||
#define _RESUME_CHECK_r33 1196
|
||||
#define _RETURN_GENERATOR_r01 1197
|
||||
#define _RETURN_VALUE_r11 1198
|
||||
#define _SAVE_RETURN_OFFSET_r00 1199
|
||||
#define _SAVE_RETURN_OFFSET_r11 1200
|
||||
#define _SAVE_RETURN_OFFSET_r22 1201
|
||||
#define _SAVE_RETURN_OFFSET_r33 1202
|
||||
#define _SEND_r22 1203
|
||||
#define _SEND_GEN_FRAME_r22 1204
|
||||
#define _SETUP_ANNOTATIONS_r00 1205
|
||||
#define _SET_ADD_r10 1206
|
||||
#define _SET_FUNCTION_ATTRIBUTE_r01 1207
|
||||
#define _SET_FUNCTION_ATTRIBUTE_r11 1208
|
||||
#define _SET_FUNCTION_ATTRIBUTE_r21 1209
|
||||
#define _SET_FUNCTION_ATTRIBUTE_r32 1210
|
||||
#define _SET_IP_r00 1211
|
||||
#define _SET_IP_r11 1212
|
||||
#define _SET_IP_r22 1213
|
||||
#define _SET_IP_r33 1214
|
||||
#define _SET_UPDATE_r10 1215
|
||||
#define _SPILL_OR_RELOAD_r01 1216
|
||||
#define _SPILL_OR_RELOAD_r02 1217
|
||||
#define _SPILL_OR_RELOAD_r03 1218
|
||||
#define _SPILL_OR_RELOAD_r10 1219
|
||||
#define _SPILL_OR_RELOAD_r12 1220
|
||||
#define _SPILL_OR_RELOAD_r13 1221
|
||||
#define _SPILL_OR_RELOAD_r20 1222
|
||||
#define _SPILL_OR_RELOAD_r21 1223
|
||||
#define _SPILL_OR_RELOAD_r23 1224
|
||||
#define _SPILL_OR_RELOAD_r30 1225
|
||||
#define _SPILL_OR_RELOAD_r31 1226
|
||||
#define _SPILL_OR_RELOAD_r32 1227
|
||||
#define _START_EXECUTOR_r00 1228
|
||||
#define _STORE_ATTR_r20 1229
|
||||
#define _STORE_ATTR_INSTANCE_VALUE_r21 1230
|
||||
#define _STORE_ATTR_SLOT_r21 1231
|
||||
#define _STORE_ATTR_WITH_HINT_r20 1232
|
||||
#define _STORE_DEREF_r10 1233
|
||||
#define _STORE_FAST_r10 1234
|
||||
#define _STORE_FAST_0_r10 1235
|
||||
#define _STORE_FAST_1_r10 1236
|
||||
#define _STORE_FAST_2_r10 1237
|
||||
#define _STORE_FAST_3_r10 1238
|
||||
#define _STORE_FAST_4_r10 1239
|
||||
#define _STORE_FAST_5_r10 1240
|
||||
#define _STORE_FAST_6_r10 1241
|
||||
#define _STORE_FAST_7_r10 1242
|
||||
#define _STORE_FAST_LOAD_FAST_r11 1243
|
||||
#define _STORE_FAST_STORE_FAST_r20 1244
|
||||
#define _STORE_GLOBAL_r10 1245
|
||||
#define _STORE_NAME_r10 1246
|
||||
#define _STORE_SLICE_r30 1247
|
||||
#define _STORE_SUBSCR_r30 1248
|
||||
#define _STORE_SUBSCR_DICT_r31 1249
|
||||
#define _STORE_SUBSCR_LIST_INT_r32 1250
|
||||
#define _SWAP_r11 1251
|
||||
#define _SWAP_2_r02 1252
|
||||
#define _SWAP_2_r12 1253
|
||||
#define _SWAP_2_r22 1254
|
||||
#define _SWAP_2_r33 1255
|
||||
#define _SWAP_3_r03 1256
|
||||
#define _SWAP_3_r13 1257
|
||||
#define _SWAP_3_r23 1258
|
||||
#define _SWAP_3_r33 1259
|
||||
#define _TIER2_RESUME_CHECK_r00 1260
|
||||
#define _TIER2_RESUME_CHECK_r11 1261
|
||||
#define _TIER2_RESUME_CHECK_r22 1262
|
||||
#define _TIER2_RESUME_CHECK_r33 1263
|
||||
#define _TO_BOOL_r11 1264
|
||||
#define _TO_BOOL_BOOL_r01 1265
|
||||
#define _TO_BOOL_BOOL_r11 1266
|
||||
#define _TO_BOOL_BOOL_r22 1267
|
||||
#define _TO_BOOL_BOOL_r33 1268
|
||||
#define _TO_BOOL_INT_r11 1269
|
||||
#define _TO_BOOL_LIST_r11 1270
|
||||
#define _TO_BOOL_NONE_r01 1271
|
||||
#define _TO_BOOL_NONE_r11 1272
|
||||
#define _TO_BOOL_NONE_r22 1273
|
||||
#define _TO_BOOL_NONE_r33 1274
|
||||
#define _TO_BOOL_STR_r11 1275
|
||||
#define _TRACE_RECORD_r00 1276
|
||||
#define _UNARY_INVERT_r11 1277
|
||||
#define _UNARY_NEGATIVE_r11 1278
|
||||
#define _UNARY_NOT_r01 1279
|
||||
#define _UNARY_NOT_r11 1280
|
||||
#define _UNARY_NOT_r22 1281
|
||||
#define _UNARY_NOT_r33 1282
|
||||
#define _UNPACK_EX_r10 1283
|
||||
#define _UNPACK_SEQUENCE_r10 1284
|
||||
#define _UNPACK_SEQUENCE_LIST_r10 1285
|
||||
#define _UNPACK_SEQUENCE_TUPLE_r10 1286
|
||||
#define _UNPACK_SEQUENCE_TWO_TUPLE_r12 1287
|
||||
#define _WITH_EXCEPT_START_r33 1288
|
||||
#define _YIELD_VALUE_r11 1289
|
||||
#define MAX_UOP_REGS_ID 1289
|
||||
#define _LOAD_ATTR_INSTANCE_VALUE_r02 984
|
||||
#define _LOAD_ATTR_INSTANCE_VALUE_r12 985
|
||||
#define _LOAD_ATTR_INSTANCE_VALUE_r23 986
|
||||
#define _LOAD_ATTR_METHOD_LAZY_DICT_r02 987
|
||||
#define _LOAD_ATTR_METHOD_LAZY_DICT_r12 988
|
||||
#define _LOAD_ATTR_METHOD_LAZY_DICT_r23 989
|
||||
#define _LOAD_ATTR_METHOD_NO_DICT_r02 990
|
||||
#define _LOAD_ATTR_METHOD_NO_DICT_r12 991
|
||||
#define _LOAD_ATTR_METHOD_NO_DICT_r23 992
|
||||
#define _LOAD_ATTR_METHOD_WITH_VALUES_r02 993
|
||||
#define _LOAD_ATTR_METHOD_WITH_VALUES_r12 994
|
||||
#define _LOAD_ATTR_METHOD_WITH_VALUES_r23 995
|
||||
#define _LOAD_ATTR_MODULE_r11 996
|
||||
#define _LOAD_ATTR_NONDESCRIPTOR_NO_DICT_r11 997
|
||||
#define _LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES_r11 998
|
||||
#define _LOAD_ATTR_PROPERTY_FRAME_r11 999
|
||||
#define _LOAD_ATTR_SLOT_r11 1000
|
||||
#define _LOAD_ATTR_WITH_HINT_r11 1001
|
||||
#define _LOAD_BUILD_CLASS_r01 1002
|
||||
#define _LOAD_BYTECODE_r00 1003
|
||||
#define _LOAD_COMMON_CONSTANT_r01 1004
|
||||
#define _LOAD_COMMON_CONSTANT_r12 1005
|
||||
#define _LOAD_COMMON_CONSTANT_r23 1006
|
||||
#define _LOAD_CONST_r01 1007
|
||||
#define _LOAD_CONST_r12 1008
|
||||
#define _LOAD_CONST_r23 1009
|
||||
#define _LOAD_CONST_INLINE_r01 1010
|
||||
#define _LOAD_CONST_INLINE_r12 1011
|
||||
#define _LOAD_CONST_INLINE_r23 1012
|
||||
#define _LOAD_CONST_INLINE_BORROW_r01 1013
|
||||
#define _LOAD_CONST_INLINE_BORROW_r12 1014
|
||||
#define _LOAD_CONST_INLINE_BORROW_r23 1015
|
||||
#define _LOAD_CONST_UNDER_INLINE_r02 1016
|
||||
#define _LOAD_CONST_UNDER_INLINE_r12 1017
|
||||
#define _LOAD_CONST_UNDER_INLINE_r23 1018
|
||||
#define _LOAD_CONST_UNDER_INLINE_BORROW_r02 1019
|
||||
#define _LOAD_CONST_UNDER_INLINE_BORROW_r12 1020
|
||||
#define _LOAD_CONST_UNDER_INLINE_BORROW_r23 1021
|
||||
#define _LOAD_DEREF_r01 1022
|
||||
#define _LOAD_FAST_r01 1023
|
||||
#define _LOAD_FAST_r12 1024
|
||||
#define _LOAD_FAST_r23 1025
|
||||
#define _LOAD_FAST_0_r01 1026
|
||||
#define _LOAD_FAST_0_r12 1027
|
||||
#define _LOAD_FAST_0_r23 1028
|
||||
#define _LOAD_FAST_1_r01 1029
|
||||
#define _LOAD_FAST_1_r12 1030
|
||||
#define _LOAD_FAST_1_r23 1031
|
||||
#define _LOAD_FAST_2_r01 1032
|
||||
#define _LOAD_FAST_2_r12 1033
|
||||
#define _LOAD_FAST_2_r23 1034
|
||||
#define _LOAD_FAST_3_r01 1035
|
||||
#define _LOAD_FAST_3_r12 1036
|
||||
#define _LOAD_FAST_3_r23 1037
|
||||
#define _LOAD_FAST_4_r01 1038
|
||||
#define _LOAD_FAST_4_r12 1039
|
||||
#define _LOAD_FAST_4_r23 1040
|
||||
#define _LOAD_FAST_5_r01 1041
|
||||
#define _LOAD_FAST_5_r12 1042
|
||||
#define _LOAD_FAST_5_r23 1043
|
||||
#define _LOAD_FAST_6_r01 1044
|
||||
#define _LOAD_FAST_6_r12 1045
|
||||
#define _LOAD_FAST_6_r23 1046
|
||||
#define _LOAD_FAST_7_r01 1047
|
||||
#define _LOAD_FAST_7_r12 1048
|
||||
#define _LOAD_FAST_7_r23 1049
|
||||
#define _LOAD_FAST_AND_CLEAR_r01 1050
|
||||
#define _LOAD_FAST_AND_CLEAR_r12 1051
|
||||
#define _LOAD_FAST_AND_CLEAR_r23 1052
|
||||
#define _LOAD_FAST_BORROW_r01 1053
|
||||
#define _LOAD_FAST_BORROW_r12 1054
|
||||
#define _LOAD_FAST_BORROW_r23 1055
|
||||
#define _LOAD_FAST_BORROW_0_r01 1056
|
||||
#define _LOAD_FAST_BORROW_0_r12 1057
|
||||
#define _LOAD_FAST_BORROW_0_r23 1058
|
||||
#define _LOAD_FAST_BORROW_1_r01 1059
|
||||
#define _LOAD_FAST_BORROW_1_r12 1060
|
||||
#define _LOAD_FAST_BORROW_1_r23 1061
|
||||
#define _LOAD_FAST_BORROW_2_r01 1062
|
||||
#define _LOAD_FAST_BORROW_2_r12 1063
|
||||
#define _LOAD_FAST_BORROW_2_r23 1064
|
||||
#define _LOAD_FAST_BORROW_3_r01 1065
|
||||
#define _LOAD_FAST_BORROW_3_r12 1066
|
||||
#define _LOAD_FAST_BORROW_3_r23 1067
|
||||
#define _LOAD_FAST_BORROW_4_r01 1068
|
||||
#define _LOAD_FAST_BORROW_4_r12 1069
|
||||
#define _LOAD_FAST_BORROW_4_r23 1070
|
||||
#define _LOAD_FAST_BORROW_5_r01 1071
|
||||
#define _LOAD_FAST_BORROW_5_r12 1072
|
||||
#define _LOAD_FAST_BORROW_5_r23 1073
|
||||
#define _LOAD_FAST_BORROW_6_r01 1074
|
||||
#define _LOAD_FAST_BORROW_6_r12 1075
|
||||
#define _LOAD_FAST_BORROW_6_r23 1076
|
||||
#define _LOAD_FAST_BORROW_7_r01 1077
|
||||
#define _LOAD_FAST_BORROW_7_r12 1078
|
||||
#define _LOAD_FAST_BORROW_7_r23 1079
|
||||
#define _LOAD_FAST_BORROW_LOAD_FAST_BORROW_r02 1080
|
||||
#define _LOAD_FAST_BORROW_LOAD_FAST_BORROW_r13 1081
|
||||
#define _LOAD_FAST_CHECK_r01 1082
|
||||
#define _LOAD_FAST_CHECK_r12 1083
|
||||
#define _LOAD_FAST_CHECK_r23 1084
|
||||
#define _LOAD_FAST_LOAD_FAST_r02 1085
|
||||
#define _LOAD_FAST_LOAD_FAST_r13 1086
|
||||
#define _LOAD_FROM_DICT_OR_DEREF_r11 1087
|
||||
#define _LOAD_FROM_DICT_OR_GLOBALS_r11 1088
|
||||
#define _LOAD_GLOBAL_r00 1089
|
||||
#define _LOAD_GLOBAL_BUILTINS_r01 1090
|
||||
#define _LOAD_GLOBAL_MODULE_r01 1091
|
||||
#define _LOAD_LOCALS_r01 1092
|
||||
#define _LOAD_LOCALS_r12 1093
|
||||
#define _LOAD_LOCALS_r23 1094
|
||||
#define _LOAD_NAME_r01 1095
|
||||
#define _LOAD_SMALL_INT_r01 1096
|
||||
#define _LOAD_SMALL_INT_r12 1097
|
||||
#define _LOAD_SMALL_INT_r23 1098
|
||||
#define _LOAD_SMALL_INT_0_r01 1099
|
||||
#define _LOAD_SMALL_INT_0_r12 1100
|
||||
#define _LOAD_SMALL_INT_0_r23 1101
|
||||
#define _LOAD_SMALL_INT_1_r01 1102
|
||||
#define _LOAD_SMALL_INT_1_r12 1103
|
||||
#define _LOAD_SMALL_INT_1_r23 1104
|
||||
#define _LOAD_SMALL_INT_2_r01 1105
|
||||
#define _LOAD_SMALL_INT_2_r12 1106
|
||||
#define _LOAD_SMALL_INT_2_r23 1107
|
||||
#define _LOAD_SMALL_INT_3_r01 1108
|
||||
#define _LOAD_SMALL_INT_3_r12 1109
|
||||
#define _LOAD_SMALL_INT_3_r23 1110
|
||||
#define _LOAD_SPECIAL_r00 1111
|
||||
#define _LOAD_SUPER_ATTR_ATTR_r31 1112
|
||||
#define _LOAD_SUPER_ATTR_METHOD_r32 1113
|
||||
#define _MAKE_CALLARGS_A_TUPLE_r33 1114
|
||||
#define _MAKE_CELL_r00 1115
|
||||
#define _MAKE_FUNCTION_r11 1116
|
||||
#define _MAKE_WARM_r00 1117
|
||||
#define _MAKE_WARM_r11 1118
|
||||
#define _MAKE_WARM_r22 1119
|
||||
#define _MAKE_WARM_r33 1120
|
||||
#define _MAP_ADD_r20 1121
|
||||
#define _MATCH_CLASS_r31 1122
|
||||
#define _MATCH_KEYS_r23 1123
|
||||
#define _MATCH_MAPPING_r02 1124
|
||||
#define _MATCH_MAPPING_r12 1125
|
||||
#define _MATCH_MAPPING_r23 1126
|
||||
#define _MATCH_SEQUENCE_r02 1127
|
||||
#define _MATCH_SEQUENCE_r12 1128
|
||||
#define _MATCH_SEQUENCE_r23 1129
|
||||
#define _MAYBE_EXPAND_METHOD_r00 1130
|
||||
#define _MAYBE_EXPAND_METHOD_KW_r11 1131
|
||||
#define _MONITOR_CALL_r00 1132
|
||||
#define _MONITOR_CALL_KW_r11 1133
|
||||
#define _MONITOR_JUMP_BACKWARD_r00 1134
|
||||
#define _MONITOR_JUMP_BACKWARD_r11 1135
|
||||
#define _MONITOR_JUMP_BACKWARD_r22 1136
|
||||
#define _MONITOR_JUMP_BACKWARD_r33 1137
|
||||
#define _MONITOR_RESUME_r00 1138
|
||||
#define _NOP_r00 1139
|
||||
#define _NOP_r11 1140
|
||||
#define _NOP_r22 1141
|
||||
#define _NOP_r33 1142
|
||||
#define _POP_CALL_r20 1143
|
||||
#define _POP_CALL_LOAD_CONST_INLINE_BORROW_r21 1144
|
||||
#define _POP_CALL_ONE_r30 1145
|
||||
#define _POP_CALL_ONE_LOAD_CONST_INLINE_BORROW_r31 1146
|
||||
#define _POP_CALL_TWO_r30 1147
|
||||
#define _POP_CALL_TWO_LOAD_CONST_INLINE_BORROW_r31 1148
|
||||
#define _POP_EXCEPT_r10 1149
|
||||
#define _POP_ITER_r20 1150
|
||||
#define _POP_JUMP_IF_FALSE_r00 1151
|
||||
#define _POP_JUMP_IF_FALSE_r10 1152
|
||||
#define _POP_JUMP_IF_FALSE_r21 1153
|
||||
#define _POP_JUMP_IF_FALSE_r32 1154
|
||||
#define _POP_JUMP_IF_TRUE_r00 1155
|
||||
#define _POP_JUMP_IF_TRUE_r10 1156
|
||||
#define _POP_JUMP_IF_TRUE_r21 1157
|
||||
#define _POP_JUMP_IF_TRUE_r32 1158
|
||||
#define _POP_TOP_r10 1159
|
||||
#define _POP_TOP_FLOAT_r00 1160
|
||||
#define _POP_TOP_FLOAT_r10 1161
|
||||
#define _POP_TOP_FLOAT_r21 1162
|
||||
#define _POP_TOP_FLOAT_r32 1163
|
||||
#define _POP_TOP_INT_r00 1164
|
||||
#define _POP_TOP_INT_r10 1165
|
||||
#define _POP_TOP_INT_r21 1166
|
||||
#define _POP_TOP_INT_r32 1167
|
||||
#define _POP_TOP_LOAD_CONST_INLINE_r11 1168
|
||||
#define _POP_TOP_LOAD_CONST_INLINE_BORROW_r11 1169
|
||||
#define _POP_TOP_NOP_r00 1170
|
||||
#define _POP_TOP_NOP_r10 1171
|
||||
#define _POP_TOP_NOP_r21 1172
|
||||
#define _POP_TOP_NOP_r32 1173
|
||||
#define _POP_TOP_UNICODE_r00 1174
|
||||
#define _POP_TOP_UNICODE_r10 1175
|
||||
#define _POP_TOP_UNICODE_r21 1176
|
||||
#define _POP_TOP_UNICODE_r32 1177
|
||||
#define _POP_TWO_r20 1178
|
||||
#define _POP_TWO_LOAD_CONST_INLINE_BORROW_r21 1179
|
||||
#define _PUSH_EXC_INFO_r02 1180
|
||||
#define _PUSH_EXC_INFO_r12 1181
|
||||
#define _PUSH_EXC_INFO_r23 1182
|
||||
#define _PUSH_FRAME_r10 1183
|
||||
#define _PUSH_NULL_r01 1184
|
||||
#define _PUSH_NULL_r12 1185
|
||||
#define _PUSH_NULL_r23 1186
|
||||
#define _PUSH_NULL_CONDITIONAL_r00 1187
|
||||
#define _PY_FRAME_GENERAL_r01 1188
|
||||
#define _PY_FRAME_KW_r11 1189
|
||||
#define _QUICKEN_RESUME_r00 1190
|
||||
#define _QUICKEN_RESUME_r11 1191
|
||||
#define _QUICKEN_RESUME_r22 1192
|
||||
#define _QUICKEN_RESUME_r33 1193
|
||||
#define _REPLACE_WITH_TRUE_r11 1194
|
||||
#define _RESUME_CHECK_r00 1195
|
||||
#define _RESUME_CHECK_r11 1196
|
||||
#define _RESUME_CHECK_r22 1197
|
||||
#define _RESUME_CHECK_r33 1198
|
||||
#define _RETURN_GENERATOR_r01 1199
|
||||
#define _RETURN_VALUE_r11 1200
|
||||
#define _SAVE_RETURN_OFFSET_r00 1201
|
||||
#define _SAVE_RETURN_OFFSET_r11 1202
|
||||
#define _SAVE_RETURN_OFFSET_r22 1203
|
||||
#define _SAVE_RETURN_OFFSET_r33 1204
|
||||
#define _SEND_r22 1205
|
||||
#define _SEND_GEN_FRAME_r22 1206
|
||||
#define _SETUP_ANNOTATIONS_r00 1207
|
||||
#define _SET_ADD_r10 1208
|
||||
#define _SET_FUNCTION_ATTRIBUTE_r01 1209
|
||||
#define _SET_FUNCTION_ATTRIBUTE_r11 1210
|
||||
#define _SET_FUNCTION_ATTRIBUTE_r21 1211
|
||||
#define _SET_FUNCTION_ATTRIBUTE_r32 1212
|
||||
#define _SET_IP_r00 1213
|
||||
#define _SET_IP_r11 1214
|
||||
#define _SET_IP_r22 1215
|
||||
#define _SET_IP_r33 1216
|
||||
#define _SET_UPDATE_r10 1217
|
||||
#define _SPILL_OR_RELOAD_r01 1218
|
||||
#define _SPILL_OR_RELOAD_r02 1219
|
||||
#define _SPILL_OR_RELOAD_r03 1220
|
||||
#define _SPILL_OR_RELOAD_r10 1221
|
||||
#define _SPILL_OR_RELOAD_r12 1222
|
||||
#define _SPILL_OR_RELOAD_r13 1223
|
||||
#define _SPILL_OR_RELOAD_r20 1224
|
||||
#define _SPILL_OR_RELOAD_r21 1225
|
||||
#define _SPILL_OR_RELOAD_r23 1226
|
||||
#define _SPILL_OR_RELOAD_r30 1227
|
||||
#define _SPILL_OR_RELOAD_r31 1228
|
||||
#define _SPILL_OR_RELOAD_r32 1229
|
||||
#define _START_EXECUTOR_r00 1230
|
||||
#define _STORE_ATTR_r20 1231
|
||||
#define _STORE_ATTR_INSTANCE_VALUE_r21 1232
|
||||
#define _STORE_ATTR_SLOT_r21 1233
|
||||
#define _STORE_ATTR_WITH_HINT_r20 1234
|
||||
#define _STORE_DEREF_r10 1235
|
||||
#define _STORE_FAST_r10 1236
|
||||
#define _STORE_FAST_0_r10 1237
|
||||
#define _STORE_FAST_1_r10 1238
|
||||
#define _STORE_FAST_2_r10 1239
|
||||
#define _STORE_FAST_3_r10 1240
|
||||
#define _STORE_FAST_4_r10 1241
|
||||
#define _STORE_FAST_5_r10 1242
|
||||
#define _STORE_FAST_6_r10 1243
|
||||
#define _STORE_FAST_7_r10 1244
|
||||
#define _STORE_FAST_LOAD_FAST_r11 1245
|
||||
#define _STORE_FAST_STORE_FAST_r20 1246
|
||||
#define _STORE_GLOBAL_r10 1247
|
||||
#define _STORE_NAME_r10 1248
|
||||
#define _STORE_SLICE_r30 1249
|
||||
#define _STORE_SUBSCR_r30 1250
|
||||
#define _STORE_SUBSCR_DICT_r31 1251
|
||||
#define _STORE_SUBSCR_LIST_INT_r32 1252
|
||||
#define _SWAP_r11 1253
|
||||
#define _SWAP_2_r02 1254
|
||||
#define _SWAP_2_r12 1255
|
||||
#define _SWAP_2_r22 1256
|
||||
#define _SWAP_2_r33 1257
|
||||
#define _SWAP_3_r03 1258
|
||||
#define _SWAP_3_r13 1259
|
||||
#define _SWAP_3_r23 1260
|
||||
#define _SWAP_3_r33 1261
|
||||
#define _TIER2_RESUME_CHECK_r00 1262
|
||||
#define _TIER2_RESUME_CHECK_r11 1263
|
||||
#define _TIER2_RESUME_CHECK_r22 1264
|
||||
#define _TIER2_RESUME_CHECK_r33 1265
|
||||
#define _TO_BOOL_r11 1266
|
||||
#define _TO_BOOL_BOOL_r01 1267
|
||||
#define _TO_BOOL_BOOL_r11 1268
|
||||
#define _TO_BOOL_BOOL_r22 1269
|
||||
#define _TO_BOOL_BOOL_r33 1270
|
||||
#define _TO_BOOL_INT_r11 1271
|
||||
#define _TO_BOOL_LIST_r11 1272
|
||||
#define _TO_BOOL_NONE_r01 1273
|
||||
#define _TO_BOOL_NONE_r11 1274
|
||||
#define _TO_BOOL_NONE_r22 1275
|
||||
#define _TO_BOOL_NONE_r33 1276
|
||||
#define _TO_BOOL_STR_r11 1277
|
||||
#define _TRACE_RECORD_r00 1278
|
||||
#define _UNARY_INVERT_r11 1279
|
||||
#define _UNARY_NEGATIVE_r11 1280
|
||||
#define _UNARY_NOT_r01 1281
|
||||
#define _UNARY_NOT_r11 1282
|
||||
#define _UNARY_NOT_r22 1283
|
||||
#define _UNARY_NOT_r33 1284
|
||||
#define _UNPACK_EX_r10 1285
|
||||
#define _UNPACK_SEQUENCE_r10 1286
|
||||
#define _UNPACK_SEQUENCE_LIST_r10 1287
|
||||
#define _UNPACK_SEQUENCE_TUPLE_r10 1288
|
||||
#define _UNPACK_SEQUENCE_TWO_TUPLE_r12 1289
|
||||
#define _WITH_EXCEPT_START_r33 1290
|
||||
#define _YIELD_VALUE_r11 1291
|
||||
#define MAX_UOP_REGS_ID 1291
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
|
|
|||
18
Include/internal/pycore_uop_metadata.h
generated
18
Include/internal/pycore_uop_metadata.h
generated
|
|
@ -189,7 +189,7 @@ const uint32_t _PyUop_Flags[MAX_UOP_ID+1] = {
|
|||
[_GUARD_TYPE_VERSION] = HAS_EXIT_FLAG,
|
||||
[_GUARD_TYPE_VERSION_AND_LOCK] = HAS_EXIT_FLAG,
|
||||
[_CHECK_MANAGED_OBJECT_HAS_VALUES] = HAS_DEOPT_FLAG,
|
||||
[_LOAD_ATTR_INSTANCE_VALUE] = HAS_DEOPT_FLAG | HAS_ESCAPES_FLAG,
|
||||
[_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 | HAS_ESCAPES_FLAG,
|
||||
[_LOAD_ATTR_SLOT] = HAS_DEOPT_FLAG | HAS_ESCAPES_FLAG,
|
||||
|
|
@ -1752,11 +1752,11 @@ const _PyUopCachingInfo _PyUop_Caching[MAX_UOP_ID+1] = {
|
|||
},
|
||||
},
|
||||
[_LOAD_ATTR_INSTANCE_VALUE] = {
|
||||
.best = { 1, 1, 1, 1 },
|
||||
.best = { 0, 1, 2, 2 },
|
||||
.entries = {
|
||||
{ -1, -1, -1 },
|
||||
{ 1, 1, _LOAD_ATTR_INSTANCE_VALUE_r11 },
|
||||
{ -1, -1, -1 },
|
||||
{ 2, 0, _LOAD_ATTR_INSTANCE_VALUE_r02 },
|
||||
{ 2, 1, _LOAD_ATTR_INSTANCE_VALUE_r12 },
|
||||
{ 3, 2, _LOAD_ATTR_INSTANCE_VALUE_r23 },
|
||||
{ -1, -1, -1 },
|
||||
},
|
||||
},
|
||||
|
|
@ -3529,7 +3529,9 @@ const uint16_t _PyUop_Uncached[MAX_UOP_REGS_ID+1] = {
|
|||
[_CHECK_MANAGED_OBJECT_HAS_VALUES_r11] = _CHECK_MANAGED_OBJECT_HAS_VALUES,
|
||||
[_CHECK_MANAGED_OBJECT_HAS_VALUES_r22] = _CHECK_MANAGED_OBJECT_HAS_VALUES,
|
||||
[_CHECK_MANAGED_OBJECT_HAS_VALUES_r33] = _CHECK_MANAGED_OBJECT_HAS_VALUES,
|
||||
[_LOAD_ATTR_INSTANCE_VALUE_r11] = _LOAD_ATTR_INSTANCE_VALUE,
|
||||
[_LOAD_ATTR_INSTANCE_VALUE_r02] = _LOAD_ATTR_INSTANCE_VALUE,
|
||||
[_LOAD_ATTR_INSTANCE_VALUE_r12] = _LOAD_ATTR_INSTANCE_VALUE,
|
||||
[_LOAD_ATTR_INSTANCE_VALUE_r23] = _LOAD_ATTR_INSTANCE_VALUE,
|
||||
[_LOAD_ATTR_MODULE_r11] = _LOAD_ATTR_MODULE,
|
||||
[_LOAD_ATTR_WITH_HINT_r11] = _LOAD_ATTR_WITH_HINT,
|
||||
[_LOAD_ATTR_SLOT_r11] = _LOAD_ATTR_SLOT,
|
||||
|
|
@ -4457,7 +4459,9 @@ const char *const _PyOpcode_uop_name[MAX_UOP_REGS_ID+1] = {
|
|||
[_LOAD_ATTR_CLASS] = "_LOAD_ATTR_CLASS",
|
||||
[_LOAD_ATTR_CLASS_r11] = "_LOAD_ATTR_CLASS_r11",
|
||||
[_LOAD_ATTR_INSTANCE_VALUE] = "_LOAD_ATTR_INSTANCE_VALUE",
|
||||
[_LOAD_ATTR_INSTANCE_VALUE_r11] = "_LOAD_ATTR_INSTANCE_VALUE_r11",
|
||||
[_LOAD_ATTR_INSTANCE_VALUE_r02] = "_LOAD_ATTR_INSTANCE_VALUE_r02",
|
||||
[_LOAD_ATTR_INSTANCE_VALUE_r12] = "_LOAD_ATTR_INSTANCE_VALUE_r12",
|
||||
[_LOAD_ATTR_INSTANCE_VALUE_r23] = "_LOAD_ATTR_INSTANCE_VALUE_r23",
|
||||
[_LOAD_ATTR_METHOD_LAZY_DICT] = "_LOAD_ATTR_METHOD_LAZY_DICT",
|
||||
[_LOAD_ATTR_METHOD_LAZY_DICT_r02] = "_LOAD_ATTR_METHOD_LAZY_DICT_r02",
|
||||
[_LOAD_ATTR_METHOD_LAZY_DICT_r12] = "_LOAD_ATTR_METHOD_LAZY_DICT_r12",
|
||||
|
|
|
|||
|
|
@ -2473,6 +2473,25 @@ def testfunc(args):
|
|||
uops = get_opnames(ex)
|
||||
self.assertIn("_POP_TOP_NOP", uops)
|
||||
|
||||
def test_load_attr_instance_value(self):
|
||||
def testfunc(n):
|
||||
class C():
|
||||
pass
|
||||
c = C()
|
||||
c.x = n
|
||||
x = 0
|
||||
for _ in range(n):
|
||||
x = c.x
|
||||
return x
|
||||
res, ex = self._run_with_optimizer(testfunc, TIER2_THRESHOLD)
|
||||
self.assertEqual(res, TIER2_THRESHOLD)
|
||||
self.assertIsNotNone(ex)
|
||||
uops = get_opnames(ex)
|
||||
|
||||
self.assertIn("_LOAD_ATTR_INSTANCE_VALUE", 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_INSTANCE_VALUE``.
|
||||
|
|
@ -2356,7 +2356,7 @@ dummy_func(
|
|||
DEOPT_IF(!FT_ATOMIC_LOAD_UINT8(_PyObject_InlineValues(owner_o)->valid));
|
||||
}
|
||||
|
||||
op(_LOAD_ATTR_INSTANCE_VALUE, (offset/1, owner -- attr)) {
|
||||
op(_LOAD_ATTR_INSTANCE_VALUE, (offset/1, owner -- attr, o)) {
|
||||
PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner);
|
||||
PyObject **value_ptr = (PyObject**)(((char *)owner_o) + offset);
|
||||
PyObject *attr_o = FT_ATOMIC_LOAD_PTR_ACQUIRE(*value_ptr);
|
||||
|
|
@ -2370,7 +2370,8 @@ dummy_func(
|
|||
attr = PyStackRef_FromPyObjectNew(attr_o);
|
||||
#endif
|
||||
STAT_INC(LOAD_ATTR, hit);
|
||||
PyStackRef_CLOSE(owner);
|
||||
o = owner;
|
||||
DEAD(owner);
|
||||
}
|
||||
|
||||
macro(LOAD_ATTR_INSTANCE_VALUE) =
|
||||
|
|
@ -2378,6 +2379,7 @@ dummy_func(
|
|||
_GUARD_TYPE_VERSION +
|
||||
_CHECK_MANAGED_OBJECT_HAS_VALUES +
|
||||
_LOAD_ATTR_INSTANCE_VALUE +
|
||||
POP_TOP +
|
||||
unused/5 +
|
||||
_PUSH_NULL_CONDITIONAL;
|
||||
|
||||
|
|
|
|||
100
Python/executor_cases.c.h
generated
100
Python/executor_cases.c.h
generated
|
|
@ -8096,11 +8096,51 @@
|
|||
break;
|
||||
}
|
||||
|
||||
case _LOAD_ATTR_INSTANCE_VALUE_r11: {
|
||||
case _LOAD_ATTR_INSTANCE_VALUE_r02: {
|
||||
CHECK_CURRENT_CACHED_VALUES(0);
|
||||
assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE());
|
||||
_PyStackRef owner;
|
||||
_PyStackRef attr;
|
||||
_PyStackRef o;
|
||||
owner = stack_pointer[-1];
|
||||
uint16_t offset = (uint16_t)CURRENT_OPERAND0_16();
|
||||
PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner);
|
||||
PyObject **value_ptr = (PyObject**)(((char *)owner_o) + offset);
|
||||
PyObject *attr_o = FT_ATOMIC_LOAD_PTR_ACQUIRE(*value_ptr);
|
||||
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(value_ptr, attr_o, &attr);
|
||||
if (!increfed) {
|
||||
if (true) {
|
||||
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_INSTANCE_VALUE_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 offset = (uint16_t)CURRENT_OPERAND0_16();
|
||||
|
|
@ -8127,18 +8167,54 @@
|
|||
attr = PyStackRef_FromPyObjectNew(attr_o);
|
||||
#endif
|
||||
STAT_INC(LOAD_ATTR, hit);
|
||||
stack_pointer[0] = attr;
|
||||
stack_pointer += 1;
|
||||
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
|
||||
_PyFrame_SetStackPointer(frame, stack_pointer);
|
||||
PyStackRef_CLOSE(owner);
|
||||
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_INSTANCE_VALUE_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 offset = (uint16_t)CURRENT_OPERAND0_16();
|
||||
PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner);
|
||||
PyObject **value_ptr = (PyObject**)(((char *)owner_o) + offset);
|
||||
PyObject *attr_o = FT_ATOMIC_LOAD_PTR_ACQUIRE(*value_ptr);
|
||||
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(value_ptr, attr_o, &attr);
|
||||
if (!increfed) {
|
||||
if (true) {
|
||||
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;
|
||||
}
|
||||
|
|
|
|||
9
Python/generated_cases.c.h
generated
9
Python/generated_cases.c.h
generated
|
|
@ -7889,6 +7889,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
|
||||
|
|
@ -7938,9 +7940,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_CLOSE(owner);
|
||||
PyStackRef_XCLOSE(value);
|
||||
stack_pointer = _PyFrame_GetStackPointer(frame);
|
||||
}
|
||||
/* Skip 5 cache entries */
|
||||
|
|
|
|||
|
|
@ -570,9 +570,10 @@ dummy_func(void) {
|
|||
assert(oparg >= 2);
|
||||
}
|
||||
|
||||
op(_LOAD_ATTR_INSTANCE_VALUE, (offset/1, owner -- attr)) {
|
||||
op(_LOAD_ATTR_INSTANCE_VALUE, (offset/1, owner -- attr, o)) {
|
||||
attr = sym_new_not_null(ctx);
|
||||
(void)offset;
|
||||
o = owner;
|
||||
}
|
||||
|
||||
op(_LOAD_ATTR_MODULE, (dict_version/2, index/1, owner -- attr)) {
|
||||
|
|
|
|||
8
Python/optimizer_cases.c.h
generated
8
Python/optimizer_cases.c.h
generated
|
|
@ -1566,11 +1566,19 @@
|
|||
}
|
||||
|
||||
case _LOAD_ATTR_INSTANCE_VALUE: {
|
||||
JitOptRef owner;
|
||||
JitOptRef attr;
|
||||
JitOptRef o;
|
||||
owner = stack_pointer[-1];
|
||||
uint16_t offset = (uint16_t)this_instr->operand0;
|
||||
attr = sym_new_not_null(ctx);
|
||||
(void)offset;
|
||||
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…
Add table
Add a link
Reference in a new issue