AArch64: Use storepair more when storing out constant values#9676
Open
david-arm wants to merge 2 commits intofacebook:masterfrom
Open
AArch64: Use storepair more when storing out constant values#9676david-arm wants to merge 2 commits intofacebook:masterfrom
david-arm wants to merge 2 commits intofacebook:masterfrom
Conversation
|
@facebook-github-bot has imported this pull request. If you are a Meta employee, you can view this in D87975171. (Because this pull request was imported automatically, there will not be any future comments.) |
ottoni
reviewed
Jan 29, 2026
Contributor
ottoni
left a comment
There was a problem hiding this comment.
looks good, except for small coding style nit below
| @@ -166,11 +166,19 @@ int is_adjacent_vptr64(const Vptr64& a, const Vptr64& b, int32_t step, int32_t m | |||
| return 0; | |||
| } | |||
|
|
|||
| bool is_valid_reg_for_storepair(Env& env, Vreg s) { | |||
| if (s.isGP()) | |||
| return true; | |||
Contributor
There was a problem hiding this comment.
nit: move the return true; to previous line or wrap it in { } per coding style
We sometimes see sequences like this: store %123(...b), [addr + 8] store %124(...q), [addr] The existing storepair simplify code requires that the stored registers be physical GP registers, presumably because the lowering for storepair/storepairl cannot handle FP/SIMD regs. However, during register allocation we materialise these constants and end up with the sequence: ldimmb ... => x0 store x0, [addr + 8] ldimmq ... => x0 store x0, [addr] which then makes it very difficult to combine these into storepairs in the post-regalloc simplify pass. This PR permits combining pairs of stores prior to regalloc, provided we can show they are either: 1. A GP physical register, or 2. An integer constant that will be materialised into a GP reg.
f651e57 to
0498b51
Compare
Contributor
|
@david-arm has updated the pull request. You must reimport the pull request before landing. |
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.
We sometimes see sequences like this:
store %123(...b), [addr + 8]
store %124(...q), [addr]
The existing storepair simplify code requires that the stored registers be physical GP registers, presumably because the lowering for storepair/storepairl cannot handle FP/SIMD regs. However, during register allocation we materialise these constants and end up with the sequence:
ldimmb ... => x0
store x0, [addr + 8]
ldimmq ... => x0
store x0, [addr]
which then makes it very difficult to combine these into storepairs in the post-regalloc simplify pass. This PR permits combining pairs of stores prior to regalloc, provided we can show they are either: