Optimizing FOR_ITER bytecode · Issue #91432 · python/cpython (original) (raw)
We can execute one less opcode in every iteration (except for the first) of every for-loop by changing from
GET_ITER
top:
FOR_ITER
[body]
JUMP_BACKWARDS(top)
cleanup:
end:
to
GET_ITER
JUMP_FORWARD(bottom)
body:
[body]
bottom:
FOR_END(body)
cleanup:
end:
This was suggested by @markshannon here, but it appears to be similar in spirit to Loop Inversion.
There seems to be a small (on the order of 1%) benefit, but I imagine the benefit will be magnified after any specialization.