mirror of
https://github.com/python/cpython.git
synced 2025-08-04 08:59:19 +00:00
GH-131798: Optimize cached class attributes and methods in the JIT (GH-134403)
This commit is contained in:
parent
09e72cf091
commit
ec736e7dae
12 changed files with 365 additions and 130 deletions
|
@ -95,8 +95,10 @@ backoff_counter_triggers(_Py_BackoffCounter counter)
|
|||
return counter.value_and_backoff < UNREACHABLE_BACKOFF;
|
||||
}
|
||||
|
||||
/* Initial JUMP_BACKWARD counter.
|
||||
* This determines when we create a trace for a loop. */
|
||||
// Initial JUMP_BACKWARD counter.
|
||||
// Must be larger than ADAPTIVE_COOLDOWN_VALUE, otherwise when JIT code is
|
||||
// invalidated we may construct a new trace before the bytecode has properly
|
||||
// re-specialized:
|
||||
#define JUMP_BACKWARD_INITIAL_VALUE 4095
|
||||
#define JUMP_BACKWARD_INITIAL_BACKOFF 12
|
||||
static inline _Py_BackoffCounter
|
||||
|
|
|
@ -451,6 +451,9 @@ write_location_entry_start(uint8_t *ptr, int code, int length)
|
|||
#define ADAPTIVE_COOLDOWN_BACKOFF 0
|
||||
|
||||
// Can't assert this in pycore_backoff.h because of header order dependencies
|
||||
#if JUMP_BACKWARD_INITIAL_VALUE <= ADAPTIVE_COOLDOWN_VALUE
|
||||
# error "JIT threshold value should be larger than adaptive cooldown value"
|
||||
#endif
|
||||
#if SIDE_EXIT_INITIAL_VALUE <= ADAPTIVE_COOLDOWN_VALUE
|
||||
# error "Cold exit value should be larger than adaptive cooldown value"
|
||||
#endif
|
||||
|
|
158
Include/internal/pycore_uop_ids.h
generated
158
Include/internal/pycore_uop_ids.h
generated
|
@ -209,129 +209,131 @@ extern "C" {
|
|||
#define _LOAD_CONST LOAD_CONST
|
||||
#define _LOAD_CONST_INLINE 446
|
||||
#define _LOAD_CONST_INLINE_BORROW 447
|
||||
#define _LOAD_CONST_UNDER_INLINE 448
|
||||
#define _LOAD_CONST_UNDER_INLINE_BORROW 449
|
||||
#define _LOAD_DEREF LOAD_DEREF
|
||||
#define _LOAD_FAST 448
|
||||
#define _LOAD_FAST_0 449
|
||||
#define _LOAD_FAST_1 450
|
||||
#define _LOAD_FAST_2 451
|
||||
#define _LOAD_FAST_3 452
|
||||
#define _LOAD_FAST_4 453
|
||||
#define _LOAD_FAST_5 454
|
||||
#define _LOAD_FAST_6 455
|
||||
#define _LOAD_FAST_7 456
|
||||
#define _LOAD_FAST 450
|
||||
#define _LOAD_FAST_0 451
|
||||
#define _LOAD_FAST_1 452
|
||||
#define _LOAD_FAST_2 453
|
||||
#define _LOAD_FAST_3 454
|
||||
#define _LOAD_FAST_4 455
|
||||
#define _LOAD_FAST_5 456
|
||||
#define _LOAD_FAST_6 457
|
||||
#define _LOAD_FAST_7 458
|
||||
#define _LOAD_FAST_AND_CLEAR LOAD_FAST_AND_CLEAR
|
||||
#define _LOAD_FAST_BORROW 457
|
||||
#define _LOAD_FAST_BORROW_0 458
|
||||
#define _LOAD_FAST_BORROW_1 459
|
||||
#define _LOAD_FAST_BORROW_2 460
|
||||
#define _LOAD_FAST_BORROW_3 461
|
||||
#define _LOAD_FAST_BORROW_4 462
|
||||
#define _LOAD_FAST_BORROW_5 463
|
||||
#define _LOAD_FAST_BORROW_6 464
|
||||
#define _LOAD_FAST_BORROW_7 465
|
||||
#define _LOAD_FAST_BORROW 459
|
||||
#define _LOAD_FAST_BORROW_0 460
|
||||
#define _LOAD_FAST_BORROW_1 461
|
||||
#define _LOAD_FAST_BORROW_2 462
|
||||
#define _LOAD_FAST_BORROW_3 463
|
||||
#define _LOAD_FAST_BORROW_4 464
|
||||
#define _LOAD_FAST_BORROW_5 465
|
||||
#define _LOAD_FAST_BORROW_6 466
|
||||
#define _LOAD_FAST_BORROW_7 467
|
||||
#define _LOAD_FAST_BORROW_LOAD_FAST_BORROW LOAD_FAST_BORROW_LOAD_FAST_BORROW
|
||||
#define _LOAD_FAST_CHECK LOAD_FAST_CHECK
|
||||
#define _LOAD_FAST_LOAD_FAST LOAD_FAST_LOAD_FAST
|
||||
#define _LOAD_FROM_DICT_OR_DEREF LOAD_FROM_DICT_OR_DEREF
|
||||
#define _LOAD_FROM_DICT_OR_GLOBALS LOAD_FROM_DICT_OR_GLOBALS
|
||||
#define _LOAD_GLOBAL 466
|
||||
#define _LOAD_GLOBAL_BUILTINS 467
|
||||
#define _LOAD_GLOBAL_MODULE 468
|
||||
#define _LOAD_GLOBAL 468
|
||||
#define _LOAD_GLOBAL_BUILTINS 469
|
||||
#define _LOAD_GLOBAL_MODULE 470
|
||||
#define _LOAD_LOCALS LOAD_LOCALS
|
||||
#define _LOAD_NAME LOAD_NAME
|
||||
#define _LOAD_SMALL_INT 469
|
||||
#define _LOAD_SMALL_INT_0 470
|
||||
#define _LOAD_SMALL_INT_1 471
|
||||
#define _LOAD_SMALL_INT_2 472
|
||||
#define _LOAD_SMALL_INT_3 473
|
||||
#define _LOAD_SPECIAL 474
|
||||
#define _LOAD_SMALL_INT 471
|
||||
#define _LOAD_SMALL_INT_0 472
|
||||
#define _LOAD_SMALL_INT_1 473
|
||||
#define _LOAD_SMALL_INT_2 474
|
||||
#define _LOAD_SMALL_INT_3 475
|
||||
#define _LOAD_SPECIAL 476
|
||||
#define _LOAD_SUPER_ATTR_ATTR LOAD_SUPER_ATTR_ATTR
|
||||
#define _LOAD_SUPER_ATTR_METHOD LOAD_SUPER_ATTR_METHOD
|
||||
#define _MAKE_CALLARGS_A_TUPLE 475
|
||||
#define _MAKE_CALLARGS_A_TUPLE 477
|
||||
#define _MAKE_CELL MAKE_CELL
|
||||
#define _MAKE_FUNCTION MAKE_FUNCTION
|
||||
#define _MAKE_WARM 476
|
||||
#define _MAKE_WARM 478
|
||||
#define _MAP_ADD MAP_ADD
|
||||
#define _MATCH_CLASS MATCH_CLASS
|
||||
#define _MATCH_KEYS MATCH_KEYS
|
||||
#define _MATCH_MAPPING MATCH_MAPPING
|
||||
#define _MATCH_SEQUENCE MATCH_SEQUENCE
|
||||
#define _MAYBE_EXPAND_METHOD 477
|
||||
#define _MAYBE_EXPAND_METHOD_KW 478
|
||||
#define _MONITOR_CALL 479
|
||||
#define _MONITOR_CALL_KW 480
|
||||
#define _MONITOR_JUMP_BACKWARD 481
|
||||
#define _MONITOR_RESUME 482
|
||||
#define _MAYBE_EXPAND_METHOD 479
|
||||
#define _MAYBE_EXPAND_METHOD_KW 480
|
||||
#define _MONITOR_CALL 481
|
||||
#define _MONITOR_CALL_KW 482
|
||||
#define _MONITOR_JUMP_BACKWARD 483
|
||||
#define _MONITOR_RESUME 484
|
||||
#define _NOP NOP
|
||||
#define _POP_CALL_TWO_LOAD_CONST_INLINE_BORROW 483
|
||||
#define _POP_CALL_TWO_LOAD_CONST_INLINE_BORROW 485
|
||||
#define _POP_EXCEPT POP_EXCEPT
|
||||
#define _POP_JUMP_IF_FALSE 484
|
||||
#define _POP_JUMP_IF_TRUE 485
|
||||
#define _POP_JUMP_IF_FALSE 486
|
||||
#define _POP_JUMP_IF_TRUE 487
|
||||
#define _POP_TOP POP_TOP
|
||||
#define _POP_TOP_LOAD_CONST_INLINE 486
|
||||
#define _POP_TOP_LOAD_CONST_INLINE_BORROW 487
|
||||
#define _POP_TWO 488
|
||||
#define _POP_TWO_LOAD_CONST_INLINE_BORROW 489
|
||||
#define _POP_TOP_LOAD_CONST_INLINE 488
|
||||
#define _POP_TOP_LOAD_CONST_INLINE_BORROW 489
|
||||
#define _POP_TWO 490
|
||||
#define _POP_TWO_LOAD_CONST_INLINE_BORROW 491
|
||||
#define _PUSH_EXC_INFO PUSH_EXC_INFO
|
||||
#define _PUSH_FRAME 490
|
||||
#define _PUSH_FRAME 492
|
||||
#define _PUSH_NULL PUSH_NULL
|
||||
#define _PUSH_NULL_CONDITIONAL 491
|
||||
#define _PY_FRAME_GENERAL 492
|
||||
#define _PY_FRAME_KW 493
|
||||
#define _QUICKEN_RESUME 494
|
||||
#define _REPLACE_WITH_TRUE 495
|
||||
#define _PUSH_NULL_CONDITIONAL 493
|
||||
#define _PY_FRAME_GENERAL 494
|
||||
#define _PY_FRAME_KW 495
|
||||
#define _QUICKEN_RESUME 496
|
||||
#define _REPLACE_WITH_TRUE 497
|
||||
#define _RESUME_CHECK RESUME_CHECK
|
||||
#define _RETURN_GENERATOR RETURN_GENERATOR
|
||||
#define _RETURN_VALUE RETURN_VALUE
|
||||
#define _SAVE_RETURN_OFFSET 496
|
||||
#define _SEND 497
|
||||
#define _SEND_GEN_FRAME 498
|
||||
#define _SAVE_RETURN_OFFSET 498
|
||||
#define _SEND 499
|
||||
#define _SEND_GEN_FRAME 500
|
||||
#define _SETUP_ANNOTATIONS SETUP_ANNOTATIONS
|
||||
#define _SET_ADD SET_ADD
|
||||
#define _SET_FUNCTION_ATTRIBUTE SET_FUNCTION_ATTRIBUTE
|
||||
#define _SET_UPDATE SET_UPDATE
|
||||
#define _START_EXECUTOR 499
|
||||
#define _STORE_ATTR 500
|
||||
#define _STORE_ATTR_INSTANCE_VALUE 501
|
||||
#define _STORE_ATTR_SLOT 502
|
||||
#define _STORE_ATTR_WITH_HINT 503
|
||||
#define _START_EXECUTOR 501
|
||||
#define _STORE_ATTR 502
|
||||
#define _STORE_ATTR_INSTANCE_VALUE 503
|
||||
#define _STORE_ATTR_SLOT 504
|
||||
#define _STORE_ATTR_WITH_HINT 505
|
||||
#define _STORE_DEREF STORE_DEREF
|
||||
#define _STORE_FAST 504
|
||||
#define _STORE_FAST_0 505
|
||||
#define _STORE_FAST_1 506
|
||||
#define _STORE_FAST_2 507
|
||||
#define _STORE_FAST_3 508
|
||||
#define _STORE_FAST_4 509
|
||||
#define _STORE_FAST_5 510
|
||||
#define _STORE_FAST_6 511
|
||||
#define _STORE_FAST_7 512
|
||||
#define _STORE_FAST 506
|
||||
#define _STORE_FAST_0 507
|
||||
#define _STORE_FAST_1 508
|
||||
#define _STORE_FAST_2 509
|
||||
#define _STORE_FAST_3 510
|
||||
#define _STORE_FAST_4 511
|
||||
#define _STORE_FAST_5 512
|
||||
#define _STORE_FAST_6 513
|
||||
#define _STORE_FAST_7 514
|
||||
#define _STORE_FAST_LOAD_FAST STORE_FAST_LOAD_FAST
|
||||
#define _STORE_FAST_STORE_FAST STORE_FAST_STORE_FAST
|
||||
#define _STORE_GLOBAL STORE_GLOBAL
|
||||
#define _STORE_NAME STORE_NAME
|
||||
#define _STORE_SLICE 513
|
||||
#define _STORE_SUBSCR 514
|
||||
#define _STORE_SUBSCR_DICT 515
|
||||
#define _STORE_SUBSCR_LIST_INT 516
|
||||
#define _STORE_SLICE 515
|
||||
#define _STORE_SUBSCR 516
|
||||
#define _STORE_SUBSCR_DICT 517
|
||||
#define _STORE_SUBSCR_LIST_INT 518
|
||||
#define _SWAP SWAP
|
||||
#define _TIER2_RESUME_CHECK 517
|
||||
#define _TO_BOOL 518
|
||||
#define _TIER2_RESUME_CHECK 519
|
||||
#define _TO_BOOL 520
|
||||
#define _TO_BOOL_BOOL TO_BOOL_BOOL
|
||||
#define _TO_BOOL_INT TO_BOOL_INT
|
||||
#define _TO_BOOL_LIST 519
|
||||
#define _TO_BOOL_LIST 521
|
||||
#define _TO_BOOL_NONE TO_BOOL_NONE
|
||||
#define _TO_BOOL_STR 520
|
||||
#define _TO_BOOL_STR 522
|
||||
#define _UNARY_INVERT UNARY_INVERT
|
||||
#define _UNARY_NEGATIVE UNARY_NEGATIVE
|
||||
#define _UNARY_NOT UNARY_NOT
|
||||
#define _UNPACK_EX UNPACK_EX
|
||||
#define _UNPACK_SEQUENCE 521
|
||||
#define _UNPACK_SEQUENCE_LIST 522
|
||||
#define _UNPACK_SEQUENCE_TUPLE 523
|
||||
#define _UNPACK_SEQUENCE_TWO_TUPLE 524
|
||||
#define _UNPACK_SEQUENCE 523
|
||||
#define _UNPACK_SEQUENCE_LIST 524
|
||||
#define _UNPACK_SEQUENCE_TUPLE 525
|
||||
#define _UNPACK_SEQUENCE_TWO_TUPLE 526
|
||||
#define _WITH_EXCEPT_START WITH_EXCEPT_START
|
||||
#define _YIELD_VALUE YIELD_VALUE
|
||||
#define MAX_UOP_ID 524
|
||||
#define MAX_UOP_ID 526
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
|
8
Include/internal/pycore_uop_metadata.h
generated
8
Include/internal/pycore_uop_metadata.h
generated
|
@ -306,6 +306,8 @@ const uint16_t _PyUop_Flags[MAX_UOP_ID+1] = {
|
|||
[_POP_TOP_LOAD_CONST_INLINE_BORROW] = HAS_ESCAPES_FLAG | HAS_PURE_FLAG,
|
||||
[_POP_TWO_LOAD_CONST_INLINE_BORROW] = HAS_ESCAPES_FLAG | HAS_PURE_FLAG,
|
||||
[_POP_CALL_TWO_LOAD_CONST_INLINE_BORROW] = HAS_ESCAPES_FLAG | HAS_PURE_FLAG,
|
||||
[_LOAD_CONST_UNDER_INLINE] = 0,
|
||||
[_LOAD_CONST_UNDER_INLINE_BORROW] = 0,
|
||||
[_CHECK_FUNCTION] = HAS_DEOPT_FLAG,
|
||||
[_START_EXECUTOR] = 0,
|
||||
[_MAKE_WARM] = 0,
|
||||
|
@ -504,6 +506,8 @@ const char *const _PyOpcode_uop_name[MAX_UOP_ID+1] = {
|
|||
[_LOAD_CONST] = "_LOAD_CONST",
|
||||
[_LOAD_CONST_INLINE] = "_LOAD_CONST_INLINE",
|
||||
[_LOAD_CONST_INLINE_BORROW] = "_LOAD_CONST_INLINE_BORROW",
|
||||
[_LOAD_CONST_UNDER_INLINE] = "_LOAD_CONST_UNDER_INLINE",
|
||||
[_LOAD_CONST_UNDER_INLINE_BORROW] = "_LOAD_CONST_UNDER_INLINE_BORROW",
|
||||
[_LOAD_DEREF] = "_LOAD_DEREF",
|
||||
[_LOAD_FAST] = "_LOAD_FAST",
|
||||
[_LOAD_FAST_0] = "_LOAD_FAST_0",
|
||||
|
@ -1196,6 +1200,10 @@ int _PyUop_num_popped(int opcode, int oparg)
|
|||
return 2;
|
||||
case _POP_CALL_TWO_LOAD_CONST_INLINE_BORROW:
|
||||
return 4;
|
||||
case _LOAD_CONST_UNDER_INLINE:
|
||||
return 1;
|
||||
case _LOAD_CONST_UNDER_INLINE_BORROW:
|
||||
return 1;
|
||||
case _CHECK_FUNCTION:
|
||||
return 0;
|
||||
case _START_EXECUTOR:
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue