[AArch64][SME] Move saving VG for the unwinder out of frame lowering #145748
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 patch moves computing and storing of VG in functions with streaming mode changes to a new pre-RA pass (MachineSMEABI). The goal is to make saving VG simpler, as computing VG may require calling
__arm_get_current_vg-- which requires saving X0 around the call and the LR (among complexities in frame lowering). Doing this pre-RA allows the register allocator to handle this (rather than manual scavenging).The MachineSMEABI saves to VG to AArch64::SAVED_STREAMING_VG_SLOT and AArch64::SAVED_VG_SLOT target frame indices. These will be resolved to an actual frame indices during PEI (as they are not known before then).
For the most part this does not significantly change codegen, however, there is one downside that resolving the frame indices outside of the prologue may need exta instructions (to step past later allocations on the stack, such as scalable vectors).
Fixes #145635