mirror of
https://github.com/python/cpython
synced 2026-09-29 12:10:30 +03:00
gh-114058: Foundations of the Tier2 redundancy eliminator (GH-115085)
--------- Co-authored-by: Mark Shannon <9448417+markshannon@users.noreply.github.com> Co-authored-by: Jules <57632293+JuliaPoo@users.noreply.github.com> Co-authored-by: Guido van Rossum <gvanrossum@users.noreply.github.com>
This commit is contained in:
parent
ccc76c3e88
commit
7cce857622
25 changed files with 3137 additions and 140 deletions
|
|
@ -120,6 +120,9 @@ typedef struct _optimization_stats {
|
|||
uint64_t trace_length_hist[_Py_UOP_HIST_SIZE];
|
||||
uint64_t trace_run_length_hist[_Py_UOP_HIST_SIZE];
|
||||
uint64_t optimized_trace_length_hist[_Py_UOP_HIST_SIZE];
|
||||
uint64_t optimizer_attempts;
|
||||
uint64_t optimizer_successes;
|
||||
uint64_t optimizer_failure_reason_no_memory;
|
||||
} OptimizationStats;
|
||||
|
||||
typedef struct _rare_event_stats {
|
||||
|
|
|
|||
10
Include/internal/pycore_opcode_metadata.h
generated
10
Include/internal/pycore_opcode_metadata.h
generated
|
|
@ -1094,7 +1094,7 @@ const struct opcode_metadata _PyOpcode_opcode_metadata[268] = {
|
|||
[MATCH_KEYS] = { true, INSTR_FMT_IX, HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
|
||||
[MATCH_MAPPING] = { true, INSTR_FMT_IX, 0 },
|
||||
[MATCH_SEQUENCE] = { true, INSTR_FMT_IX, 0 },
|
||||
[NOP] = { true, INSTR_FMT_IX, 0 },
|
||||
[NOP] = { true, INSTR_FMT_IX, HAS_PURE_FLAG },
|
||||
[POP_EXCEPT] = { true, INSTR_FMT_IX, HAS_ESCAPES_FLAG },
|
||||
[POP_JUMP_IF_FALSE] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_JUMP_FLAG },
|
||||
[POP_JUMP_IF_NONE] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_JUMP_FLAG },
|
||||
|
|
@ -1156,10 +1156,10 @@ const struct opcode_metadata _PyOpcode_opcode_metadata[268] = {
|
|||
[LOAD_SUPER_METHOD] = { true, -1, HAS_ARG_FLAG | HAS_NAME_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
|
||||
[LOAD_ZERO_SUPER_ATTR] = { true, -1, HAS_ARG_FLAG | HAS_NAME_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
|
||||
[LOAD_ZERO_SUPER_METHOD] = { true, -1, HAS_ARG_FLAG | HAS_NAME_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG },
|
||||
[POP_BLOCK] = { true, -1, 0 },
|
||||
[SETUP_CLEANUP] = { true, -1, HAS_ARG_FLAG },
|
||||
[SETUP_FINALLY] = { true, -1, HAS_ARG_FLAG },
|
||||
[SETUP_WITH] = { true, -1, HAS_ARG_FLAG },
|
||||
[POP_BLOCK] = { true, -1, HAS_PURE_FLAG },
|
||||
[SETUP_CLEANUP] = { true, -1, HAS_PURE_FLAG | HAS_ARG_FLAG },
|
||||
[SETUP_FINALLY] = { true, -1, HAS_PURE_FLAG | HAS_ARG_FLAG },
|
||||
[SETUP_WITH] = { true, -1, HAS_PURE_FLAG | HAS_ARG_FLAG },
|
||||
[STORE_FAST_MAYBE_NULL] = { true, -1, HAS_ARG_FLAG | HAS_LOCAL_FLAG },
|
||||
};
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -8,6 +8,13 @@ extern "C" {
|
|||
# error "this header requires Py_BUILD_CORE define"
|
||||
#endif
|
||||
|
||||
#include "pycore_uop_ids.h"
|
||||
|
||||
// This is the length of the trace we project initially.
|
||||
#define UOP_MAX_TRACE_LENGTH 512
|
||||
|
||||
#define TRACE_STACK_SIZE 5
|
||||
|
||||
int _Py_uop_analyze_and_optimize(_PyInterpreterFrame *frame,
|
||||
_PyUOpInstruction *trace, int trace_len, int curr_stackentries,
|
||||
_PyBloomFilter *dependencies);
|
||||
|
|
|
|||
|
|
@ -16,7 +16,7 @@ extern const char * const _PyOpcode_uop_name[MAX_UOP_ID+1];
|
|||
|
||||
#ifdef NEED_OPCODE_METADATA
|
||||
const uint16_t _PyUop_Flags[MAX_UOP_ID+1] = {
|
||||
[_NOP] = 0,
|
||||
[_NOP] = HAS_PURE_FLAG,
|
||||
[_RESUME_CHECK] = HAS_DEOPT_FLAG,
|
||||
[_LOAD_FAST_CHECK] = HAS_ARG_FLAG | HAS_LOCAL_FLAG | HAS_ERROR_FLAG,
|
||||
[_LOAD_FAST] = HAS_ARG_FLAG | HAS_LOCAL_FLAG | HAS_PURE_FLAG,
|
||||
|
|
@ -202,10 +202,10 @@ const uint16_t _PyUop_Flags[MAX_UOP_ID+1] = {
|
|||
[_SAVE_RETURN_OFFSET] = HAS_ARG_FLAG,
|
||||
[_EXIT_TRACE] = HAS_DEOPT_FLAG,
|
||||
[_CHECK_VALIDITY] = HAS_DEOPT_FLAG,
|
||||
[_LOAD_CONST_INLINE] = 0,
|
||||
[_LOAD_CONST_INLINE_BORROW] = 0,
|
||||
[_LOAD_CONST_INLINE_WITH_NULL] = 0,
|
||||
[_LOAD_CONST_INLINE_BORROW_WITH_NULL] = 0,
|
||||
[_LOAD_CONST_INLINE] = HAS_PURE_FLAG,
|
||||
[_LOAD_CONST_INLINE_BORROW] = HAS_PURE_FLAG,
|
||||
[_LOAD_CONST_INLINE_WITH_NULL] = HAS_PURE_FLAG,
|
||||
[_LOAD_CONST_INLINE_BORROW_WITH_NULL] = HAS_PURE_FLAG,
|
||||
[_CHECK_GLOBALS] = HAS_DEOPT_FLAG,
|
||||
[_CHECK_BUILTINS] = HAS_DEOPT_FLAG,
|
||||
[_INTERNAL_INCREMENT_OPT_COUNTER] = 0,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue