AArch64: Use storepair more when storing out constant values
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:
- A GP physical register, or
- An integer constant that will be materialised into a GP reg.
@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.)