Cranelift: Optimize out redundant select + icmp instructions#12135
Merged
cfallin merged 4 commits intobytecodealliance:mainfrom Dec 8, 2025
Merged
Cranelift: Optimize out redundant select + icmp instructions#12135cfallin merged 4 commits intobytecodealliance:mainfrom
cfallin merged 4 commits intobytecodealliance:mainfrom
Conversation
This optimizes the following: a = select x, k1, k2 b = icmp eq a, k1 to b = x We shouldn't trigger this optimization when k1 == k2 because constant propagation should optimize that case.
Implement simple icmp + select optimization
* Optimize icmp eq and ne for select-on-icmp When we have a select followed by an icmp and the inner condition to the select is also an icmp, we can remove the select + icmp and directly use the inner condition. We negated the values of the inner_condition via bxor x 1. * Add trailing newline * feat: avoid relying on icmp inner_cond --------- Co-authored-by: school <school@schools-MacBook-Air.local> Co-authored-by: Edward Wibowo <wibow9770@gmail.com>
Subscribe to Label ActionDetailsThis issue or pull request has been labeled: "cranelift", "isle"Thus the following users have been cc'd because of the following labels:
To subscribe or unsubscribe from this label, edit the |
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.
Collaborators: @claby2 @bisheshank
Cranelift may generate code where a
selectfollowed by anicmpcan be directly substituted with theselectinstruction's condition. Specifically, we can perform this optimization when we encounter code of the formHere, we can optimize to
v2 = v0given thatk1andk2are constants.In the language of the example above, this PR handles
icmp eqandicmp newhenk1ork2are theicmpcondition. We use the ISLE rewriteicmp ne x 0as a "cast" to handle the case where the inner condition of theselectis not restricted to 0 or 1 (Seenon_icmp_innerin issue-11578-semantics.clif)Fixes #11578