-
-
Notifications
You must be signed in to change notification settings - Fork 31.9k
gh-126835: Move constant tuple folding to CFG #130769
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
WolframAlph
commented
Mar 2, 2025
•
edited by bedevere-app
bot
Loading
edited by bedevere-app
bot
- Issue: Move const folding to the peephole optimizer #126835
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Small style comments. It's always better to split assertions into two when possible to know which condition failed.
After moving folding to codegen (70ce2c8) I can see couple refleaks after running test suite in refleak hunter mode. After some debugging I narrowed down the problem. Long tuple defined directly does not report refleaks: x = (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30) but if it is run via compile("x = (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30)", "", "single") no idea yet why this is happening. I will be debugging further, but maybe someone has some insight what could be the problem? |
Does it leak with compile with other modes (exec, eval)? |
Yes. I wonder if it could be some form of false positive. |
No idea. |
Problem found. Turns out |
Why does it not happen at the prompt? |
No idea. Maybe refleak checking flaw, but not sure. Maybe someone who knows more about it could tell us? Back to this PR - if we fold long tuples at codegen stage, we won't be able to fold long tuples that have constant expressions inside, for instance: (1, 2, 1 + 2, 4, ... 100) # long constant tuple will not be folded, unless we fold it in peepholer as written initially. Drawback of having optimizations that have to work together split between different stages. |
I tend to agree. So I guess you're saying we should choose the second option from #130769 (comment). |
Second options assumes that if we have constant tuple, we can skip |
We could check recursively for constant expressions and emit long tuple bytecode if we know all subexpressions are constant, but I believe it would complicate code more than optimizing it in the peepholer. |
I understand. Ok, let's revert back to the peephole situation then. |
Another idea (not in this PR) would be to move all the |
I will make a note and investigate later. |
I've reverted to the peepholer optimization and addressed previous review, please take a look. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think it's a bit simpler if we grab two instructions in each iteration.
577fb71
to
72a3e65
Compare
@iritkatriel can you review again when you have time? |
!buildbot refleak |
🤖 New build scheduled with the buildbot fleet by @iritkatriel for commit 4b11cf8 🤖 Results will be shown at: https://buildbot.python.org/all/#/grid?branch=refs%2Fpull%2F130769%2Fmerge The command will test the builders whose names match following regular expression: The builders matched are:
|