-
-
Notifications
You must be signed in to change notification settings - Fork 32.4k
Closed
Labels
3.11only security fixesonly security fixesinterpreter-core(Objects, Python, Grammar, and Parser dirs)(Objects, Python, Grammar, and Parser dirs)performancePerformance or resource usagePerformance or resource usage
Description
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.
Metadata
Metadata
Assignees
Labels
3.11only security fixesonly security fixesinterpreter-core(Objects, Python, Grammar, and Parser dirs)(Objects, Python, Grammar, and Parser dirs)performancePerformance or resource usagePerformance or resource usage