JIT: Canonicalize '(A & pow2) == pow2' -> '(A & pow2) != 0'#128533
Merged
Conversation
* '(A & pow2) != pow2' -> '(A & pow2) == 0'
Contributor
|
Tagging subscribers to this area: @JulieLeeMSFT, @jakobbotsch |
Open
3 tasks
Contributor
|
@MihuBot -nuget |
…it-test-to-zero-on-right
Contributor
There was a problem hiding this comment.
Pull request overview
Canonicalizes (A & pow2) == pow2 to (A & pow2) != 0 (and the inverse for !=) during morph relational-comparison optimization. This puts the comparison into a uniform form with 0 on the right, which immediately helps optimizeBools and sets the stage for further follow-on optimizations (e.g., the distributive transform in #126852).
Changes:
- Add a canonicalization in
fgOptimizeRelationalComparisonthat, when matching(A & pow2) ==/!= pow2, reverses the relop and bashes the RHS constant to zero, with VN updated accordingly.
…it-test-to-zero-on-right
Contributor
Author
|
@EgorBo I fixed the merge conflicts. |
EgorBo
reviewed
Jun 2, 2026
EgorBo
approved these changes
Jun 4, 2026
EgorBo
reviewed
Jun 4, 2026
Contributor
Author
|
Are we good to merge :) ? I'd like to continue follow up work @EgorBo |
Member
|
/ba-g known CSharpMissingShebangInFileBasedProgram failure |
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
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Basically so we always have 0 at the right-side:
Tthis currently helps optimizeBools, but I am also adding this with the future in mind.
Here is one example:
Note: With #126852 this would then get transformed into just
test 12.