diff options
author | Sander de Smalen <sander.desmalen@arm.com> | 2019-10-03 11:33:50 +0000 |
---|---|---|
committer | Sander de Smalen <sander.desmalen@arm.com> | 2019-10-03 11:33:50 +0000 |
commit | 4f99b6f0fe425c939bb37f50ae2f3c2d95d52042 (patch) | |
tree | c499b3120f2616239a3784e65fc7f6bf67273aac /llvm/tools/llvm-readobj/llvm-readobj.cpp | |
parent | 1cd399c915a746b0426a8a094906fb5f2a6cea12 (diff) | |
download | llvm-4f99b6f0fe425c939bb37f50ae2f3c2d95d52042.zip llvm-4f99b6f0fe425c939bb37f50ae2f3c2d95d52042.tar.gz llvm-4f99b6f0fe425c939bb37f50ae2f3c2d95d52042.tar.bz2 |
[AArch64] Static (de)allocation of SVE stack objects.
Adds support to AArch64FrameLowering to allocate fixed-stack SVE objects.
The focus of this patch is purely to allow the stack frame to
allocate/deallocate space for scalable SVE objects. More dynamic
allocation (at compile-time, i.e. determining placement of SVE objects
on the stack), or resolving frame-index references that include
scalable-sized offsets, are left for subsequent patches.
SVE objects are allocated in the stack frame as a separate region below
the callee-save area, and above the alignment gap. This is done so that
the SVE objects can be accessed directly from the FP at (runtime)
VL-based offsets to benefit from using the VL-scaled addressing modes.
The layout looks as follows:
+-------------+
| stack arg |
+-------------+
| Callee Saves|
| X29, X30 | (if available)
|-------------| <- FP (if available)
| : |
| SVE area |
| : |
+-------------+
|/////////////| alignment gap.
| : |
| Stack objs |
| : |
+-------------+ <- SP after call and frame-setup
SVE and non-SVE stack objects are distinguished using different
StackIDs. The offsets for objects with TargetStackID::SVEVector should be
interpreted as purely scalable offsets within their respective SVE region.
Reviewers: thegameg, rovka, t.p.northover, efriedma, rengolin, greened
Reviewed By: efriedma
Differential Revision: https://reviews.llvm.org/D61437
llvm-svn: 373585
Diffstat (limited to 'llvm/tools/llvm-readobj/llvm-readobj.cpp')
0 files changed, 0 insertions, 0 deletions