diff options
| author | Eli Friedman <efriedma@codeaurora.org> | 2018-11-09 23:33:30 +0000 |
|---|---|---|
| committer | Eli Friedman <efriedma@codeaurora.org> | 2018-11-09 23:33:30 +0000 |
| commit | ad1151cf6a75f1887623b525184aba03778667f7 (patch) | |
| tree | 8315cb008001a8d17a783c1acbc92aeba3f5cea1 /llvm/lib/Target/AArch64/AArch64RegisterInfo.cpp | |
| parent | f30c0117c890fcb8265c556c0a02ab89542473a2 (diff) | |
| download | bcm5719-llvm-ad1151cf6a75f1887623b525184aba03778667f7.tar.gz bcm5719-llvm-ad1151cf6a75f1887623b525184aba03778667f7.zip | |
[ARM64] [Windows] Handle funclets
This patch adds support for funclets in frame lowering and ISel
lowering. Together with D50288 and D50166, it enables C++ exception
handling.
Patch by Sanjin Sijaric, with some fixes by me.
Differential Revision: https://reviews.llvm.org/D51524
llvm-svn: 346568
Diffstat (limited to 'llvm/lib/Target/AArch64/AArch64RegisterInfo.cpp')
| -rw-r--r-- | llvm/lib/Target/AArch64/AArch64RegisterInfo.cpp | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/llvm/lib/Target/AArch64/AArch64RegisterInfo.cpp b/llvm/lib/Target/AArch64/AArch64RegisterInfo.cpp index 0bab5c05ba6..55631bcba23 100644 --- a/llvm/lib/Target/AArch64/AArch64RegisterInfo.cpp +++ b/llvm/lib/Target/AArch64/AArch64RegisterInfo.cpp @@ -161,6 +161,10 @@ void AArch64RegisterInfo::UpdateCustomCallPreservedMask(MachineFunction &MF, *Mask = UpdatedMask; } +const uint32_t *AArch64RegisterInfo::getNoPreservedMask() const { + return CSR_AArch64_NoRegs_RegMask; +} + const uint32_t * AArch64RegisterInfo::getThisReturnPreservedMask(const MachineFunction &MF, CallingConv::ID CC) const { @@ -251,14 +255,15 @@ unsigned AArch64RegisterInfo::getBaseRegister() const { return AArch64::X19; } bool AArch64RegisterInfo::hasBasePointer(const MachineFunction &MF) const { const MachineFrameInfo &MFI = MF.getFrameInfo(); - // In the presence of variable sized objects, if the fixed stack size is - // large enough that referencing from the FP won't result in things being - // in range relatively often, we can use a base pointer to allow access + // In the presence of variable sized objects or funclets, if the fixed stack + // size is large enough that referencing from the FP won't result in things + // being in range relatively often, we can use a base pointer to allow access // from the other direction like the SP normally works. + // // Furthermore, if both variable sized objects are present, and the // stack needs to be dynamically re-aligned, the base pointer is the only // reliable way to reference the locals. - if (MFI.hasVarSizedObjects()) { + if (MFI.hasVarSizedObjects() || MF.hasEHFunclets()) { if (needsStackRealignment(MF)) return true; // Conservatively estimate whether the negative offset from the frame |

