aboutsummaryrefslogtreecommitdiff
path: root/clang/lib/Frontend/ASTMerge.cpp
diff options
context:
space:
mode:
authorBenjamin Maxwell <benjamin.maxwell@arm.com>2025-04-25 13:33:09 +0100
committerGitHub <noreply@github.com>2025-04-25 13:33:09 +0100
commit8c7a2ce01a77c96028fe2c8566f65c45ad9408d3 (patch)
tree415b360f9598273275a2e7478340cd1c8cdf2d0a /clang/lib/Frontend/ASTMerge.cpp
parent576161cb6069e2c7656a8ef530727a0f4aefff30 (diff)
downloadllvm-8c7a2ce01a77c96028fe2c8566f65c45ad9408d3.zip
llvm-8c7a2ce01a77c96028fe2c8566f65c45ad9408d3.tar.gz
llvm-8c7a2ce01a77c96028fe2c8566f65c45ad9408d3.tar.bz2
[AArch64][SME] Allow spills of ZT0 around SME ABI routines again (#136726)
In #132722 spills of ZT0 were disabled around all SME ABI routines to avoid a case where ZT0 is spilled before ZA is enabled (resulting in a crash). It turns out that the ABI does not promise that routines will preserve ZT0 (however in practice they do), so generally disabling ZT0 spills for ABI routines is not correct. The case where a crash was possible was "aarch64_new_zt0" functions with ZA disabled on entry and a ZT0 spill around __arm_tpidr2_save. In this case, ZT0 will be undefined at the call to __arm_tpidr2_save, so this patch avoids the ZT0 spill by marking the callsite with "aarch64_zt0_undef". This attribute only applies to callsites and marks that at the point the call is made ZT0 is not defined, so does not need preserving.
Diffstat (limited to 'clang/lib/Frontend/ASTMerge.cpp')
0 files changed, 0 insertions, 0 deletions