summaryrefslogtreecommitdiffstats
path: root/Python/optimizer.c
diff options
context:
space:
mode:
Diffstat (limited to 'Python/optimizer.c')
-rw-r--r--Python/optimizer.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/Python/optimizer.c b/Python/optimizer.c
index acc1d54..df8f0ed 100644
--- a/Python/optimizer.c
+++ b/Python/optimizer.c
@@ -963,6 +963,21 @@ uop_optimize(
}
}
assert(err == 1);
+ /* Fix up */
+ for (int pc = 0; pc < UOP_MAX_TRACE_LENGTH; pc++) {
+ int opcode = buffer[pc].opcode;
+ int oparg = buffer[pc].oparg;
+ if (_PyUop_Flags[opcode] & HAS_OPARG_AND_1_FLAG) {
+ buffer[pc].opcode = opcode + 1 + (oparg & 1);
+ }
+ else if (oparg < _PyUop_Replication[opcode]) {
+ buffer[pc].opcode = opcode + oparg + 1;
+ }
+ else if (opcode == _JUMP_TO_TOP || opcode == _EXIT_TRACE) {
+ break;
+ }
+ assert(_PyOpcode_uop_name[buffer[pc].opcode]);
+ }
_PyExecutorObject *executor = make_executor_from_uops(buffer, &dependencies);
if (executor == NULL) {
return -1;