-
Notifications
You must be signed in to change notification settings - Fork 17.3k
[AMDGPU] Added min operation for MCExprs #199746
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
Open
JoshuaGrindstaff
wants to merge
5
commits into
llvm:main
Choose a base branch
from
JoshuaGrindstaff:Adding_Min
base: main
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Changes from 2 commits
Commits
Show all changes
5 commits
Select commit
Hold shift + click to select a range
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
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.
It's odd that this uses umin, when the definition described in AMGPUUsage.rst says the operator is for signed values. I'm sure this is because Max uses umax, but I'm not sure why that doesn't use smax instead.
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.
We probably will need an explanation from Janek but after looking into it, my guess is that the expressions that we are folding with the KB will always be positive and small enough to not set the most significant bit to 1. So if the sign bit is always zero then there is no practical difference between using smax/smin and umax/umin. These are just used for folding, and the evaluation uses std::min and std::max which both use signed integers.
If this is the reason, it might be good to use smax/smin if there are any expression not within this domain or at the very least to have it consistent with the evaluation step.
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.
Should just make everything signed
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.
Yes, should be smax/smin
Had a look as to why this didn't show up in tests (apart from our specific resource info use-cases being on unsigned values): the unknown value needs to be a fully resolvable negative (which sounds like a bit of a contradiction). If a symbol is fully known it'll resolve through the
evaluateAsAbsolutewhich correctly uses the signedstd::max/min. I think the KnownBits max/min can be triggered here using something along the lines ofmax(((external_unknown & 0) | 0x8000000000000000), 5)which elidesevaluateAsAbsolutefor resolving but does end up with KB resolving determining it's a negative value through the bitpattern.Sorry, a bit of a writeup that just concludes "use smax/smin" 😅
My only ask: could you add tests along the lines of
[min|max](((external_unknown & 0) | 0x8000000000000000), 5)that showcase the codepath of KnownBits (partial-)resolving for amdgpu MCExprs? LGTM otherwiseThere 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.
@JanekvO Thanks for the write up, it actually helped me out a lot.
I tried to implement your suggestion using lit tests, but it seems the .set won't trigger the function foldAMDGPUMCExpr. I tried putting negative values for the resource info tests but those would fail since there is a check for negative numbers before the folding happens. Because of this, unit tests seemed like the more logical way to go. I confirmed that the tests fail if the code is set to umax/umin.
Since I am not a contributor yet, if this looks good to you, could you merge this PR for me please?