Uh oh!
There was an error while loading. Please reload this page.
gh-126835: Move constant tuple folding to CFG - #130769
Conversation
picnixz
left a comment
There was a problem hiding this comment.
Small style comments. It's always better to split assertions into two when possible to know which condition failed.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
WolframAlph
commented
Mar 4, 2025
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? |
iritkatriel
commented
Mar 4, 2025
Does it leak with compile with other modes (exec, eval)? |
Yes. I wonder if it could be some form of false positive. |
iritkatriel
commented
Mar 4, 2025
No idea. |
Problem found. Turns out |
iritkatriel
commented
Mar 5, 2025
Why does it not happen at the prompt? |
WolframAlph
commented
Mar 5, 2025
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 tuplewill 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. |
iritkatriel
commented
Mar 5, 2025
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 |
WolframAlph
commented
Mar 5, 2025
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. |
iritkatriel
commented
Mar 5, 2025
I understand. Ok, let's revert back to the peephole situation then. |
iritkatriel
commented
Mar 5, 2025
Another idea (not in this PR) would be to move all the |
WolframAlph
commented
Mar 5, 2025
I will make a note and investigate later. |
WolframAlph
commented
Mar 5, 2025
I've reverted to the peepholer optimization and addressed previous review, please take a look. |
iritkatriel
left a comment
There was a problem hiding this comment.
I think it's a bit simpler if we grab two instructions in each iteration.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
577fb71 to
72a3e65CompareWolframAlph
commented
Mar 19, 2025
@iritkatriel can you review again when you have time? |
iritkatriel
commented
Mar 19, 2025
!buildbot refleak |
bedevere-bot
commented
Mar 19, 2025
🤖 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:
|
Uh oh!
There was an error while loading. Please reload this page.