aboutsummaryrefslogtreecommitdiff
path: root/clang/lib/Frontend/CompilerInvocation.cpp
diff options
context:
space:
mode:
authorSander de Smalen <sander.desmalen@arm.com>2020-09-02 10:12:27 +0100
committerSander de Smalen <sander.desmalen@arm.com>2020-09-02 10:54:18 +0100
commitf13beac51be02cae21bce465206a920ecdca7566 (patch)
treed2df9294416d0222cf82db284090c9ea72df00e3 /clang/lib/Frontend/CompilerInvocation.cpp
parent3445ec9ba718035b27c0140dc1e892be843236f5 (diff)
downloadllvm-f13beac51be02cae21bce465206a920ecdca7566.zip
llvm-f13beac51be02cae21bce465206a920ecdca7566.tar.gz
llvm-f13beac51be02cae21bce465206a920ecdca7566.tar.bz2
[AArch64][SVE] Preserve full vector regs over EH edge.
Unwinders may only preserve the lower 64bits of Neon and SVE registers, as only the registers in the base ABI are guaranteed to be preserved over the exception edge. The caller will need to preserve additional registers for when the call throws an exception and the unwinder has tried to recover state. For e.g. svint32_t bar(svint32_t); svint32_t foo(svint32_t x, bool *err) { try { bar(x); } catch (...) { *err = true; } return x; } `z0` needs to be spilled before the call to `bar(x)` and reloaded before returning from foo, as the exception handler may have clobbered z0. Reviewed By: efriedma Differential Revision: https://reviews.llvm.org/D84737
Diffstat (limited to 'clang/lib/Frontend/CompilerInvocation.cpp')
0 files changed, 0 insertions, 0 deletions