diff options
author | Kerry McLaughlin <kerry.mclaughlin@arm.com> | 2022-10-05 14:01:24 +0100 |
---|---|---|
committer | Kerry McLaughlin <kerry.mclaughlin@arm.com> | 2022-10-05 14:36:53 +0100 |
commit | f7f44f018f6ffbd11cd3bd2ffafbdb15725aac86 (patch) | |
tree | 73b8423efc64fd94b800c2167c98dad05a0dabe0 /clang/unittests/Basic/SourceManagerTest.cpp | |
parent | 93e51fa444cc87caca00122817c64e1fcc366eeb (diff) | |
download | llvm-f7f44f018f6ffbd11cd3bd2ffafbdb15725aac86.zip llvm-f7f44f018f6ffbd11cd3bd2ffafbdb15725aac86.tar.gz llvm-f7f44f018f6ffbd11cd3bd2ffafbdb15725aac86.tar.bz2 |
[AArch64][SME] Set up a lazy-save/restore around calls.
Setting up a lazy-save mechanism around calls is done during SelectionDAG
because calls to intrinsics may be expanded into an actual function call
(e.g. calls to @llvm.cos()), and maintaining an allowed-list in the SMEABI
pass is not feasible.
The approach for conditionally restoring the lazy-save based on the runtime
value of TPIDR2_EL0 is similar to how we handle conditional smstart/smstop.
We create a pseudo-node which gets expanded into a conditional branch and
expands to a call to __arm_tpidr2_restore(%tpidr2_object_ptr).
The lazy-save buffer and TPIDR2 block are only allocated once at the start
of the function. For each call, the TPIDR2 block is initialised, and at
the end of the call, a pseudo node (RestoreZA) is planted.
Patch by Sander de Smalen.
Differential Revision: https://reviews.llvm.org/D133900
Diffstat (limited to 'clang/unittests/Basic/SourceManagerTest.cpp')
0 files changed, 0 insertions, 0 deletions