Skip to content

Commit 492ecda

Browse files
committed
Revert TOS caching through side exits
1 parent efe4628 commit 492ecda

15 files changed

+753
-1162
lines changed

Include/internal/pycore_interp_structs.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -950,7 +950,7 @@ struct _is {
950950
bool jit;
951951
struct _PyExecutorObject *executor_list_head;
952952
struct _PyExecutorObject *executor_deletion_list_head;
953-
struct _PyExecutorObject **cold_executors;
953+
struct _PyExecutorObject *cold_executor;
954954
int executor_deletion_list_remaining_capacity;
955955
size_t trace_run_counter;
956956
_rare_events rare_events;

Include/internal/pycore_optimizer.h

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,6 @@ typedef struct {
3535
uint8_t linked:1;
3636
uint8_t chain_depth:6; // Must be big enough for MAX_CHAIN_DEPTH - 1.
3737
bool warm;
38-
uint8_t tos_cache;
3938
int16_t index; // Index of ENTER_EXECUTOR (if code isn't NULL, below).
4039
_PyBloomFilter bloom;
4140
_PyExecutorLinkListNode links;
@@ -70,8 +69,7 @@ typedef struct {
7069

7170
typedef struct _PyExitData {
7271
uint32_t target;
73-
uint16_t index:12;
74-
uint16_t tos_cache:4;
72+
uint16_t index;
7573
_Py_BackoffCounter temperature;
7674
struct _PyExecutorObject *executor;
7775
} _PyExitData;
@@ -95,7 +93,7 @@ typedef struct _PyExecutorObject {
9593
// Export for '_opcode' shared extension (JIT compiler).
9694
PyAPI_FUNC(_PyExecutorObject*) _Py_GetExecutor(PyCodeObject *code, int offset);
9795

98-
void _Py_ExecutorInit(_PyExecutorObject *, const _PyBloomFilter *, int tos_cache);
96+
void _Py_ExecutorInit(_PyExecutorObject *, const _PyBloomFilter *);
9997
void _Py_ExecutorDetach(_PyExecutorObject *);
10098
void _Py_BloomFilter_Init(_PyBloomFilter *);
10199
void _Py_BloomFilter_Add(_PyBloomFilter *bloom, void *obj);
@@ -354,15 +352,15 @@ extern int _Py_uop_frame_pop(JitOptContext *ctx);
354352

355353
PyAPI_FUNC(PyObject *) _Py_uop_symbols_test(PyObject *self, PyObject *ignored);
356354

357-
PyAPI_FUNC(int) _PyOptimizer_Optimize(_PyInterpreterFrame *frame, _Py_CODEUNIT *start, _PyExecutorObject **exec_ptr, int chain_depth, int tos_cache);
355+
PyAPI_FUNC(int) _PyOptimizer_Optimize(_PyInterpreterFrame *frame, _Py_CODEUNIT *start, _PyExecutorObject **exec_ptr, int chain_depth);
358356

359357
static inline _PyExecutorObject *_PyExecutor_FromExit(_PyExitData *exit)
360358
{
361359
_PyExitData *exit0 = exit - exit->index;
362360
return (_PyExecutorObject *)(((char *)exit0) - offsetof(_PyExecutorObject, exits));
363361
}
364362

365-
extern _PyExecutorObject **_PyExecutor_GetColdExecutors(void);
363+
extern _PyExecutorObject *_PyExecutor_GetColdExecutor(void);
366364

367365
PyAPI_FUNC(void) _PyExecutor_ClearExit(_PyExitData *exit);
368366

@@ -375,7 +373,7 @@ static inline int is_terminator(const _PyUOpInstruction *uop)
375373
);
376374
}
377375

378-
extern void _PyExecutor_FreeColdExecutors(_PyExecutorObject **cold);
376+
extern void _PyExecutor_FreeColdExecutor(_PyExecutorObject *cold);
379377

380378
PyAPI_FUNC(int) _PyDumpExecutors(FILE *out);
381379
#ifdef _Py_TIER2

0 commit comments

Comments
 (0)