cranelift: Always consider sret arguments used#8664
Merged
jameysharp merged 2 commits intobytecodealliance:mainfrom May 20, 2024
Merged
cranelift: Always consider sret arguments used#8664jameysharp merged 2 commits intobytecodealliance:mainfrom
jameysharp merged 2 commits intobytecodealliance:mainfrom
Conversation
In bytecodealliance#8438 we stopped emitting register bindings for unused arguments, based on the use-counts from `compute_use_states`. However, that doesn't count the use of the struct-return argument that's automatically added after lowering when the `rets` instruction is generated in the epilogue. As a result, using a struct-return argument caused register allocation to panic due to the VReg not being defined anywhere. This commit adds a use to the struct-return argument so that it's always available in the epilogue. Fixes bytecodealliance#8659
cfallin
approved these changes
May 20, 2024
| let mut value_ir_uses = SecondaryMap::with_default(ValueUseState::Unused); | ||
|
|
||
| if let Some(sret_param) = sret_param { | ||
| value_ir_uses[sret_param] = ValueUseState::Once; |
Member
There was a problem hiding this comment.
Could we add a comment here to note it starts at Once (for the one use that is the implicit return), but can still be updated below?
Contributor
Author
There was a problem hiding this comment.
Actually, should I just start it at Multiple in case there are multiple epilogues? The definition of the sret vreg can't participate in load-sinking or anything so I don't think the value really matters, but I guess it should be "correct" anyway?
Member
There was a problem hiding this comment.
Oh, yes, that makes more sense actually, I agree. It's unlikely to matter as you say but might as well get the analysis right...
alexcrichton
pushed a commit
to alexcrichton/wasmtime
that referenced
this pull request
May 20, 2024
* cranelift: Always consider sret arguments used In bytecodealliance#8438 we stopped emitting register bindings for unused arguments, based on the use-counts from `compute_use_states`. However, that doesn't count the use of the struct-return argument that's automatically added after lowering when the `rets` instruction is generated in the epilogue. As a result, using a struct-return argument caused register allocation to panic due to the VReg not being defined anywhere. This commit adds a use to the struct-return argument so that it's always available in the epilogue. Fixes bytecodealliance#8659 * Review comments
alexcrichton
added a commit
that referenced
this pull request
May 20, 2024
* cranelift: Always consider sret arguments used In #8438 we stopped emitting register bindings for unused arguments, based on the use-counts from `compute_use_states`. However, that doesn't count the use of the struct-return argument that's automatically added after lowering when the `rets` instruction is generated in the epilogue. As a result, using a struct-return argument caused register allocation to panic due to the VReg not being defined anywhere. This commit adds a use to the struct-return argument so that it's always available in the epilogue. Fixes #8659 * Review comments Co-authored-by: Jamey Sharp <jsharp@fastly.com>
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.
In #8438 we stopped emitting register bindings for unused arguments, based on the use-counts from
compute_use_states. However, that doesn't count the use of the struct-return argument that's automatically added after lowering when theretsinstruction is generated in the epilogue. As a result, using a struct-return argument caused register allocation to panic due to the VReg not being defined anywhere.This commit adds a use to the struct-return argument so that it's always available in the epilogue.
Fixes #8659