8000 reduce diff · python/cpython@e8a8b78 · GitHub
[go: up one dir, main page]

Skip to content

Commit e8a8b78

Browse files
Fidget-SpinnerJuliaPoogvanrossum
committed
reduce diff
Co-Authored-By: Jules <57632293+JuliaPoo@users.noreply.github.com> Co-Authored-By: Guido van Rossum <gvanrossum@users.noreply.github.com>
1 parent e270364 commit e8a8b78

File tree

9 files changed

+46
-89
lines changed

9 files changed

+46
-89
lines changed

Include/internal/pycore_opcode_metadata.h

Lines changed: 17 additions & 19 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Include/internal/pycore_uop_metadata.h

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -16,21 +16,21 @@ extern const char * const _PyOpcode_uop_name[MAX_UOP_ID+1];
1616

1717
#ifdef NEED_OPCODE_METADATA
1818
const uint16_t _PyUop_Flags[MAX_UOP_ID+1] = {
19-
[_NOP] = HAS_PURE_FLAG,
19+
[_NOP] = HAS_PURE_FLAG | HAS_PASSTHROUGH_FLAG,
2020
[_RESUME_CHECK] = HAS_DEOPT_FLAG,
2121
[_LOAD_FAST_CHECK] = HAS_ARG_FLAG | HAS_LOCAL_FLAG | HAS_ERROR_FLAG,
22-
[_LOAD_FAST] = HAS_ARG_FLAG | HAS_LOCAL_FLAG | HAS_PURE_FLAG,
22+
[_LOAD_FAST] = HAS_ARG_FLAG | HAS_LOCAL_FLAG | HAS_PURE_FLAG | HAS_PASSTHROUGH_FLAG,
2323
[_LOAD_FAST_AND_CLEAR] = HAS_ARG_FLAG | HAS_LOCAL_FLAG,
2424
[_LOAD_FAST_LOAD_FAST] = HAS_ARG_FLAG | HAS_LOCAL_FLAG,
25-
[_LOAD_CONST] = HAS_ARG_FLAG | HAS_CONST_FLAG | HAS_PURE_FLAG,
25+
[_LOAD_CONST] = HAS_ARG_FLAG | HAS_CONST_FLAG | HAS_PURE_FLAG | HAS_PASSTHROUGH_FLAG,
2626
[_STORE_FAST] = HAS_ARG_FLAG | HAS_LOCAL_FLAG,
2727
[_STORE_FAST_LOAD_FAST] = HAS_ARG_FLAG | HAS_LOCAL_FLAG,
2828
[_STORE_FAST_STORE_FAST] = HAS_ARG_FLAG | HAS_LOCAL_FLAG,
29-
[_POP_TOP] = HAS_PURE_FLAG,
30-
[_PUSH_NULL] = HAS_PURE_FLAG,
31-
[_END_SEND] = HAS_PURE_FLAG,
29+
[_POP_TOP] = HAS_PURE_FLAG | HAS_PASSTHROUGH_FLAG,
30+
[_PUSH_NULL] = HAS_PURE_FLAG | HAS_PASSTHROUGH_FLAG,
31+
[_END_SEND] = HAS_PURE_FLAG | HAS_PASSTHROUGH_FLAG,
3232
[_UNARY_NEGATIVE] = HAS_ERROR_FLAG | HAS_ESCAPES_FLAG,
33-
[_UNARY_NOT] = HAS_PURE_FLAG,
33+
[_UNARY_NOT] = HAS_PURE_FLAG | HAS_PASSTHROUGH_FLAG,
3434
[_TO_BOOL] = HAS_ERROR_FLAG | HAS_ESCAPES_FLAG,
3535
[_TO_BOOL_BOOL] = HAS_DEOPT_FLAG,
3636
[_TO_BOOL_INT] = HAS_DEOPT_FLAG,
@@ -40,15 +40,15 @@ const uint16_t _PyUop_Flags[MAX_UOP_ID+1] = {
4040
[_TO_BOOL_ALWAYS_TRUE] = HAS_DEOPT_FLAG,
4141
[_UNARY_INVERT] = HAS_ERROR_FLAG | HAS_ESCAPES_FLAG,
4242
[_GUARD_BOTH_INT] = HAS_DEOPT_FLAG,
43-
[_BINARY_OP_MULTIPLY_INT] = HAS_ERROR_FLAG | HAS_PURE_FLAG,
44-
[_BINARY_OP_ADD_INT] = HAS_ERROR_FLAG | HAS_PURE_FLAG,
45-
[_BINARY_OP_SUBTRACT_INT] = HAS_ERROR_FLAG | HAS_PURE_FLAG,
43+
[_BINARY_OP_MULTIPLY_INT] = HAS_ERROR_FLAG | HAS_PURE_FLAG | HAS_PASSTHROUGH_FLAG,
44+
[_BINARY_OP_ADD_INT] = HAS_ERROR_FLAG | HAS_PURE_FLAG | HAS_PASSTHROUGH_FLAG,
45+
[_BINARY_OP_SUBTRACT_INT] = HAS_ERROR_FLAG | HAS_PURE_FLAG | HAS_PASSTHROUGH_FLAG,
4646
[_GUARD_BOTH_FLOAT] = HAS_DEOPT_FLAG,
47-
[_BINARY_OP_MULTIPLY_FLOAT] = HAS_PURE_FLAG,
48-
[_BINARY_OP_ADD_FLOAT] = HAS_PURE_FLAG,
49-
[_BINARY_OP_SUBTRACT_FLOAT] = HAS_PURE_FLAG,
47+
[_BINARY_OP_MULTIPLY_FLOAT] = HAS_PURE_FLAG | HAS_PASSTHROUGH_FLAG,
48+
[_BINARY_OP_ADD_FLOAT] = HAS_PURE_FLAG | HAS_PASSTHROUGH_FLAG,
49+
[_BINARY_OP_SUBTRACT_FLOAT] = HAS_PURE_FLAG | HAS_PASSTHROUGH_FLAG,
5050
[_GUARD_BOTH_UNICODE] = HAS_DEOPT_FLAG,
51-
[_BINARY_OP_ADD_UNICODE] = HAS_ERROR_FLAG | HAS_ESCAPES_FLAG | HAS_PURE_FLAG,
51+
[_BINARY_OP_ADD_UNICODE] = HAS_ERROR_FLAG | HAS_ESCAPES_FLAG | HAS_PURE_FLAG | HAS_PASSTHROUGH_FLAG,
5252
[_BINARY_SUBSCR] = HAS_ERROR_FLAG | HAS_ESCAPES_FLAG,
5353
[_BINARY_SLICE] = HAS_ERROR_FLAG | HAS_ESCAPES_FLAG,
5454
[_STORE_SLICE] = HAS_ERROR_FLAG | HAS_ESCAPES_FLAG,
@@ -168,7 +168,7 @@ const uint16_t _PyUop_Flags[MAX_UOP_ID+1] = {
168168
[_CHECK_PEP_523] = HAS_DEOPT_FLAG,
169169
[_CHECK_FUNCTION_EXACT_ARGS] = HAS_ARG_FLAG | HAS_DEOPT_FLAG,
170170
[_CHECK_STACK_SPACE] = HAS_ARG_FLAG | HAS_DEOPT_FLAG,
171-
[_INIT_CALL_PY_EXACT_ARGS] = HAS_ARG_FLAG | HAS_ESCAPES_FLAG | HAS_PURE_FLAG,
171+
[_INIT_CALL_PY_EXACT_ARGS] = HAS_ARG_FLAG | HAS_ESCAPES_FLAG | HAS_PURE_FLAG | HAS_PASSTHROUGH_FLAG,
172172
[_PUSH_FRAME] = HAS_ESCAPES_FLAG,
173173
[_CALL_TYPE_1] = HAS_ARG_FLAG | HAS_DEOPT_FLAG,
174174
[_CALL_STR_1] = HAS_ARG_FLAG | HAS_EVAL_BREAK_FLAG | HAS_DEOPT_FLAG | HAS_ERROR_FLAG | HAS_ESCAPES_FLAG,
@@ -190,9 +190,9 @@ const uint16_t _PyUop_Flags[MAX_UOP_ID+1] = {
190190
[_CONVERT_VALUE] = HAS_ARG_FLAG | HAS_ERROR_FLAG,
191191
[_FORMAT_SIMPLE] = HAS_ERROR_FLAG | HAS_ESCAPES_FLAG,
192192
[_FORMAT_WITH_SPEC] = HAS_ERROR_FLAG | HAS_ESCAPES_FLAG,
193-
[_COPY] = HAS_ARG_FLAG | HAS_PURE_FLAG,
193+
[_COPY] = HAS_ARG_FLAG | HAS_PURE_FLAG | HAS_PASSTHROUGH_FLAG,
194194
[_BINARY_OP] = HAS_ARG_FLAG | HAS_ERROR_FLAG,
195-
[_SWAP] = HAS_ARG_FLAG | HAS_PURE_FLAG,
195+
[_SWAP] = HAS_ARG_FLAG | HAS_PURE_FLAG | HAS_PASSTHROUGH_FLAG,
196196
[_GUARD_IS_TRUE_POP] = HAS_DEOPT_FLAG,
197197
[_GUARD_IS_FALSE_POP] = HAS_DEOPT_FLAG,
198198
[_GUARD_IS_NONE_POP] = HAS_DEOPT_FLAG,
@@ -204,10 +204,10 @@ const uint16_t _PyUop_Flags[MAX_UOP_ID+1] = {
204204
[_JUMP_ABSOLUTE] = HAS_ARG_FLAG | HAS_EVAL_BREAK_FLAG,
205205
[_JUMP_ABSOLUTE_HEADER] = 0,
206206
[_CHECK_VALIDITY] = HAS_DEOPT_FLAG,
207-
[_LOAD_CONST_INLINE] = HAS_PURE_FLAG,
208-
[_LOAD_CONST_INLINE_BORROW] = HAS_PURE_FLAG,
209-
[_LOAD_CONST_INLINE_WITH_NULL] = HAS_PURE_FLAG,
210-
[_LOAD_CONST_INLINE_BORROW_WITH_NULL] = HAS_PURE_FLAG,
207+
[_LOAD_CONST_INLINE] = HAS_PURE_FLAG | HAS_PASSTHROUGH_FLAG,
208+
[_LOAD_CONST_INLINE_BORROW] = HAS_PURE_FLAG | HAS_PASSTHROUGH_FLAG,
209+
[_LOAD_CONST_INLINE_WITH_NULL] = HAS_PURE_FLAG | HAS_PASSTHROUGH_FLAG,
210+
[_LOAD_CONST_INLINE_BORROW_WITH_NULL] = HAS_PURE_FLAG | HAS_PASSTHROUGH_FLAG,
211211
[_CHECK_GLOBALS] = HAS_DEOPT_FLAG,
212212
[_CHECK_BUILTINS] = HAS_DEOPT_FLAG,
213213
[_INTERNAL_INCREMENT_OPT_COUNTER] = 0,

Python/optimizer.c

Lines changed: 0 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -222,26 +222,8 @@ static PyMethodDef executor_methods[] = {
222222
///////////////////// Experimental UOp Optimizer /////////////////////
223223

224224

225-
static void
226-
clear_strong_refs_in_uops(_PyUOpInstruction *trace, Py_ssize_t uop_len)
227-
{
228-
for (Py_ssize_t i = 0; i < uop_len; i++) {
229-
if (trace[i].opcode == _LOAD_CONST_INLINE ||
230-
trace[i].opcode == _LOAD_CONST_INLINE_WITH_NULL) {
231-
PyObject *c = (PyObject*)trace[i].operand;
232-
Py_CLEAR(c);
233-
}
234-
if (trace[i].opcode == _JUMP_ABSOLUTE ||
235-
trace[i].opcode == _JUMP_TO_TOP ||
236-
trace[i].opcode == _EXIT_TRACE) {
237-
return;
238-
}
239-
}
240-
}
241-
242225
static void
243226
uop_dealloc(_PyExecutorObject *self) {
244-
clear_strong_refs_in_uops(&self->trace[0], Py_SIZE(self));
245227
_Py_ExecutorClear(self);
246228
#ifdef _Py_JIT
247229
_PyJIT_Free(self);

Python/optimizer_analysis.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -884,9 +884,8 @@ uop_abstract_interpret(
884884
while (curr < end && !op_is_end(curr->opcode)) {
885885

886886
if (!(_PyUop_Flags[curr->opcode] & HAS_PURE_FLAG) &&
887-
!(_PyUop_Flags[curr->opcode] & HAS_SPECIAL_OPT_FLAG) &&
888887
!op_is_bookkeeping(curr->opcode) &&
889-
!(_PyUop_Flags[curr->opcode] & HAS_GUARD_FLAG)) {
888+
!(_PyUop_Flags[curr->opcode] & HAS_PASSTHROUGH_FLAG)) {
890889
DPRINTF(3, "Impure %s\n", _PyOpcode_uop_name[curr->opcode]);
891890
if (needs_clear_locals) {
892891
if (clear_locals_type_info(&ctx) < 0) {

Python/pylifecycle.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1252,7 +1252,7 @@ init_interp_main(PyThreadState *tstate)
12521252
if (_Py_get_xoption(&config->xoptions, L"uops") != NULL) {
12531253
enabled = 1;
12541254
}
1255-
// enabled = 1; // TEMPORARY: always enable
1255+
enabled = 1; // TEMPORARY: always enable
12561256
if (enabled) {
12571257
#else
12581258
// Always enable tier two for JIT builds (ignoring the environment

Python/tier2_redundancy_eliminator_bytecodes.c

Lines changed: 2 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -8,30 +8,6 @@ typedef struct _Py_UOpsSymType _Py_UOpsSymType;
88
typedef struct _Py_UOpsAbstractInterpContext _Py_UOpsAbstractInterpContext;
99
typedef struct _Py_UOpsAbstractFrame _Py_UOpsAbstractFrame;
1010

11-
extern _Py_UOpsSymType *get_local(_Py_UOpsAbstractFrame *frame, int index);
12-
extern void set_local(_Py_UOpsAbstractFrame *frame, int index, _Py_UOpsSymType *value);
13-
14-
extern _Py_UOpsSymType *new_constant(PyObject *k, _Py_UOpsAbstractInterpContext *ctx);
15-
extern _Py_UOpsSymType *new_null(_Py_UOpsAbstractInterpContext *ctx);
16-
extern PyObject *get_constant(_Py_UOpsSymType *o);
17-
extern PyTypeObject *get_type(_Py_UOpsSymType *o);
18-
19-
extern int is_constant(_Py_UOpsSymType *o);
20-
extern int is_int(_Py_UOpsSymType *o);
21-
extern int is_bool(_Py_UOpsSymType *o);
22-
extern int is_float(_Py_UOpsSymType *o);
23-
24-
extern int is_not_none(_Py_UOpsSymType *o);
25-
extern int is_none(_Py_UOpsSymType *o);
26-
27-
extern _Py_UOpsSymType *new_unknown(_Py_UOpsAbstractInterpContext *ctx);
28-
29-
extern void promote_to_const(_Py_UOpsSymType *o, PyObject *k);
30-
extern void promote_to_type(_Py_UOpsSymType *o, PyTypeObject *t);
31-
32-
extern SpecializerSpace *initialize_space(void *memory, int size);
33-
34-
3511
static int
3612
dummy_func(void) {
3713

@@ -46,8 +22,8 @@ dummy_func(void) {
4622
_Py_UOpsSymType *top;
4723
_Py_UOpsSymType *bottom;
4824
_Py_UOpsAbstractFrame *frame;
49-
SpecializerSpace *space;
50-
_PyUOpInstruction *this_instr;
25+
_Py_UOpsAbstractInterpContext *ctx;
26+
_PyUOpInstruction *inst;
5127
_PyBloomFilter *dependencies;
5228
int modified;
5329

Tools/cases_generator/generators_common.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -211,6 +211,8 @@ def cflags(p: Properties) -> str:
211211
flags.append("HAS_ESCAPES_FLAG")
212212
if p.pure:
213213
flags.append("HAS_PURE_FLAG")
214+
if p.pure:
215+
flags.append("HAS_PASSTHROUGH_FLAG")
214216
if flags:
215217
return " | ".join(flags)
216218
else:

Tools/cases_generator/opcode_metadata_generator.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,8 +51,7 @@
5151
"ERROR",
5252
"ESCAPES",
5353
"PURE",
54-
"GUARD",
55-
"SPECIAL_OPT",
54+
"PASSTHROUGH",
5655
]
5756

5857

Tools/cases_generator/uop_metadata_generator.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ def generate_names_and_flags(analysis: Analysis, out: CWriter) -> None:
3939
out.emit("};\n")
4040
out.emit("#endif // NEED_OPCODE_METADATA\n\n")
4141

42+
4243
def generate_uop_metadata(
4344
filenames: list[str], analysis: Analysis, outfile: TextIO
4445
) -> None:

0 commit comments

Comments
 (0)
0