Make clearing and restoring the may_leave flag more amenable to opt…#13713
Open
fitzgen wants to merge 1 commit into
Open
Make clearing and restoring the may_leave flag more amenable to opt…#13713fitzgen wants to merge 1 commit into
may_leave flag more amenable to opt…#13713fitzgen wants to merge 1 commit into
Conversation
…imization
The clear-and-restore is now structured so that if translation doesn't actually
call any functions (e.g. due to inlining) then a future dead-store elimination
pass in Cranelift can remove all the flag juggling entirely (other than trapping
when `!may_leave`):
may_leave = load vmctx+MAY_LEAVE_OFFSET ;; (0)
trapz may_leave
...
zero = iconst 0
store zero, vmctx+MAY_LEAVE_OFFSET ;; (1)
...
store may_leave, vmctx+MAY_LEAVE_OFFSET ;; (2)
First, the dead-store elimination pass will see that the the store at
(1): is dead and remove it. Then, the idempotent-store eliminator will recognize
that the store at (2) is storing the same value that the memory location already
contains and it will also be removed. The more we can reuse locals to make this
idempotency obvious, rather than force Cranelift's optimizer to rediscover this
information, the better.
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.
…imization
The clear-and-restore is now structured so that if translation doesn't actually call any functions (e.g. due to inlining) then a future dead-store elimination pass in Cranelift can remove all the flag juggling entirely (other than trapping when
!may_leave):First, the dead-store elimination pass will see that the the store at (1): is dead and remove it. Then, the idempotent-store eliminator will recognize that the store at (2) is storing the same value that the memory location already contains and it will also be removed. The more we can reuse locals to make this idempotency obvious, rather than force Cranelift's optimizer to rediscover this information, the better.