summaryrefslogtreecommitdiffstats
path: root/Python/compile.c
diff options
context:
space:
mode:
authorBrandt Bucher <brandt@python.org>2022-02-01 21:41:32 (GMT)
committerGitHub <noreply@github.com>2022-02-01 21:41:32 (GMT)
commita0e55a571cf01885fd5826266c37abaee307c309 (patch)
tree9a2f3dd9874c7036af445dbf0068e9824f0265b9 /Python/compile.c
parentbebaa95fd0f44babf8b6bcffd8f2908c73ca259e (diff)
downloadcpython-a0e55a571cf01885fd5826266c37abaee307c309.zip
cpython-a0e55a571cf01885fd5826266c37abaee307c309.tar.gz
cpython-a0e55a571cf01885fd5826266c37abaee307c309.tar.bz2
bpo-46528: Simplify BUILD_TUPLE/UNPACK_SEQUENCE folding (GH-31039)
Diffstat (limited to 'Python/compile.c')
-rw-r--r--Python/compile.c21
1 files changed, 7 insertions, 14 deletions
diff --git a/Python/compile.c b/Python/compile.c
index eda708e..1d2d567 100644
--- a/Python/compile.c
+++ b/Python/compile.c
@@ -8661,29 +8661,22 @@ optimize_basic_block(struct compiler *c, basicblock *bb, PyObject *consts)
}
/* Try to fold tuples of constants.
- Skip over BUILD_SEQN 1 UNPACK_SEQN 1.
- Replace BUILD_SEQN 2 UNPACK_SEQN 2 with ROT2.
- Replace BUILD_SEQN 3 UNPACK_SEQN 3 with ROT3 ROT2. */
+ Skip over BUILD_TUPLE(1) UNPACK_SEQUENCE(1).
+ Replace BUILD_TUPLE(2) UNPACK_SEQUENCE(2) with SWAP(2).
+ Replace BUILD_TUPLE(3) UNPACK_SEQUENCE(3) with SWAP(3). */
case BUILD_TUPLE:
if (nextop == UNPACK_SEQUENCE && oparg == bb->b_instr[i+1].i_oparg) {
switch(oparg) {
case 1:
inst->i_opcode = NOP;
bb->b_instr[i+1].i_opcode = NOP;
- break;
+ continue;
case 2:
- inst->i_opcode = SWAP;
- inst->i_oparg = 2;
- bb->b_instr[i+1].i_opcode = NOP;
- i--;
- break;
case 3:
- inst->i_opcode = SWAP;
- inst->i_oparg = 3;
- bb->b_instr[i+1].i_opcode = NOP;
- i--;
+ inst->i_opcode = NOP;
+ bb->b_instr[i+1].i_opcode = SWAP;
+ continue;
}
- break;
}
if (i >= oparg) {
if (fold_tuple_on_constants(c, inst-oparg, oparg, consts)) {