Type-guard bitop optimization rules (#13229)#13237
Open
bongjunj wants to merge 2 commits intobytecodealliance:mainfrom
Open
Type-guard bitop optimization rules (#13229)#13237bongjunj wants to merge 2 commits intobytecodealliance:mainfrom
bongjunj wants to merge 2 commits intobytecodealliance:mainfrom
Conversation
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 |
alexcrichton
approved these changes
Apr 30, 2026
Member
alexcrichton
left a comment
There was a problem hiding this comment.
Thanks! To bikeshed this a bit, maybe ty_int_or_vec128? The name ty_iconst can make sense in retrospect once it's understood what it does but just by reading it it's not clear.
Another possibility is ty_int_lane because in Cranelift I believe all types are considered to have lanes, and scalars just have one lane
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.
This resolves #13229
Cause 1
bitops such as
band,bor, ... are not constrained to receive only integer inputs likeiadd,isub, andicmp.The IR builder shows this fact:
Note that there is no float input for
iadd, whereasbandcan take float inputs.Cause 2
iconst_sandiconst_uprovide convenient ways to construct constants on RHS, but they are the main contract breaker of ISLE type system. They are declared as non-partial terms, while their definition is not total. They only work for integer and vec128 types and this is why we need type guards to use them. This fact is not explicitly encoded in the declaration of the terms. I guess this is not a proper way to use ISLE, since we cannot trust the ISLE compiler and the ISLE ruleset in this way... But, to fix this, I guess we need more discussions that could easily go out of the scope of fix, so I want to leave this as a future work.Fix
ty_iconstpartial extractor which rules constructing terms withiconst_sandiconst_ucan safely use.ty_iconst.bandterm.