Skip to content

Commit

Permalink
pythongh-115480: Minor fixups in int constant propagation (pythonGH-1…
Browse files Browse the repository at this point in the history
  • Loading branch information
Fidget-Spinner authored Feb 16, 2024
1 parent 144eb56 commit f92857a
Show file tree
Hide file tree
Showing 3 changed files with 59 additions and 132 deletions.
17 changes: 9 additions & 8 deletions Python/optimizer_analysis.c
Original file line number Diff line number Diff line change
Expand Up @@ -588,16 +588,17 @@ remove_globals(_PyInterpreterFrame *frame, _PyUOpInstruction *buffer,
INST->oparg = ARG; \
INST->operand = OPERAND;

#define OUT_OF_SPACE_IF_NULL(EXPR) \
do { \
if ((EXPR) == NULL) { \
goto out_of_space; \
} \
} while (0);

#define _LOAD_ATTR_NOT_NULL \
do { \
attr = sym_new_known_notnull(ctx); \
if (attr == NULL) { \
goto error; \
} \
null = sym_new_null(ctx); \
if (null == NULL) { \
goto error; \
} \
OUT_OF_SPACE_IF_NULL(attr = sym_new_known_notnull(ctx)); \
OUT_OF_SPACE_IF_NULL(null = sym_new_null(ctx)); \
} while (0);


Expand Down
87 changes: 25 additions & 62 deletions Python/tier2_redundancy_eliminator_bytecodes.c
Original file line number Diff line number Diff line change
Expand Up @@ -43,10 +43,8 @@ dummy_func(void) {

op(_LOAD_FAST_AND_CLEAR, (-- value)) {
value = GETLOCAL(oparg);
_Py_UOpsSymType *temp = sym_new_null(ctx);
if (temp == NULL) {
goto out_of_space;
}
_Py_UOpsSymType *temp;
OUT_OF_SPACE_IF_NULL(temp = sym_new_null(ctx));
GETLOCAL(oparg) = temp;
}

Expand Down Expand Up @@ -89,14 +87,12 @@ dummy_func(void) {
if (temp == NULL) {
goto error;
}
res = sym_new_const(ctx, temp);
// TODO replace opcode with constant propagated one and add tests!
OUT_OF_SPACE_IF_NULL(res = sym_new_const(ctx, temp));
// TODO gh-115506:
// replace opcode with constant propagated one and add tests!
}
else {
res = sym_new_known_type(ctx, &PyLong_Type);
if (res == NULL) {
goto out_of_space;
}
OUT_OF_SPACE_IF_NULL(res = sym_new_known_type(ctx, &PyLong_Type));
}
}

Expand All @@ -109,14 +105,12 @@ dummy_func(void) {
if (temp == NULL) {
goto error;
}
res = sym_new_const(ctx, temp);
// TODO replace opcode with constant propagated one and add tests!
OUT_OF_SPACE_IF_NULL(res = sym_new_const(ctx, temp));
// TODO gh-115506:
// replace opcode with constant propagated one and add tests!
}
else {
res = sym_new_known_type(ctx, &PyLong_Type);
if (res == NULL) {
goto out_of_space;
}
OUT_OF_SPACE_IF_NULL(res = sym_new_known_type(ctx, &PyLong_Type));
}
}

Expand All @@ -129,14 +123,12 @@ dummy_func(void) {
if (temp == NULL) {
goto error;
}
res = sym_new_const(ctx, temp);
// TODO replace opcode with constant propagated one and add tests!
OUT_OF_SPACE_IF_NULL(res = sym_new_const(ctx, temp));
// TODO gh-115506:
// replace opcode with constant propagated one and add tests!
}
else {
res = sym_new_known_type(ctx, &PyLong_Type);
if (res == NULL) {
goto out_of_space;
}
OUT_OF_SPACE_IF_NULL(res = sym_new_known_type(ctx, &PyLong_Type));
}
}

Expand All @@ -147,39 +139,21 @@ dummy_func(void) {
}

op(_LOAD_CONST_INLINE, (ptr/4 -- value)) {
value = sym_new_const(ctx, ptr);
if (value == NULL) {
goto out_of_space;
}
OUT_OF_SPACE_IF_NULL(value = sym_new_const(ctx, ptr));
}

op(_LOAD_CONST_INLINE_BORROW, (ptr/4 -- value)) {
value = sym_new_const(ctx, ptr);
if (value == NULL) {
goto out_of_space;
}
OUT_OF_SPACE_IF_NULL(value = sym_new_const(ctx, ptr));
}

op(_LOAD_CONST_INLINE_WITH_NULL, (ptr/4 -- value, null)) {
value = sym_new_const(ctx, ptr);
if (value == NULL) {
goto out_of_space;
}
null = sym_new_null(ctx);
if (null == NULL) {
goto out_of_space;
}
OUT_OF_SPACE_IF_NULL(value = sym_new_const(ctx, ptr));
OUT_OF_SPACE_IF_NULL(null = sym_new_null(ctx));
}

op(_LOAD_CONST_INLINE_BORROW_WITH_NULL, (ptr/4 -- value, null)) {
value = sym_new_const(ctx, ptr);
if (value == NULL) {
goto out_of_space;
}
null = sym_new_null(ctx);
if (null == NULL) {
goto out_of_space;
}
OUT_OF_SPACE_IF_NULL(value = sym_new_const(ctx, ptr));
OUT_OF_SPACE_IF_NULL(null = sym_new_null(ctx));
}


Expand Down Expand Up @@ -261,10 +235,8 @@ dummy_func(void) {
localsplus_start = args;
n_locals_already_filled = argcount;
}
new_frame = ctx_frame_new(ctx, co, localsplus_start, n_locals_already_filled, 0);
if (new_frame == NULL){
goto out_of_space;
}
OUT_OF_SPACE_IF_NULL(new_frame =
ctx_frame_new(ctx, co, localsplus_start, n_locals_already_filled, 0));
}

op(_POP_FRAME, (retval -- res)) {
Expand All @@ -287,10 +259,7 @@ dummy_func(void) {
/* This has to be done manually */
(void)seq;
for (int i = 0; i < oparg; i++) {
values[i] = sym_new_unknown(ctx);
if (values[i] == NULL) {
goto out_of_space;
}
OUT_OF_SPACE_IF_NULL(values[i] = sym_new_unknown(ctx));
}
}

Expand All @@ -299,18 +268,12 @@ dummy_func(void) {
(void)seq;
int totalargs = (oparg & 0xFF) + (oparg >> 8) + 1;
for (int i = 0; i < totalargs; i++) {
values[i] = sym_new_unknown(ctx);
if (values[i] == NULL) {
goto out_of_space;
}
OUT_OF_SPACE_IF_NULL(values[i] = sym_new_unknown(ctx));
}
}

op(_ITER_NEXT_RANGE, (iter -- iter, next)) {
next = sym_new_known_type(ctx, &PyLong_Type);
if (next == NULL) {
goto out_of_space;
}
OUT_OF_SPACE_IF_NULL(next = sym_new_known_type(ctx, &PyLong_Type));
(void)iter;
}

Expand Down
87 changes: 25 additions & 62 deletions Python/tier2_redundancy_eliminator_cases.c.h

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit f92857a

Please sign in to comment.