diff options
| author | Manman Ren <manman.ren@gmail.com> | 2016-04-11 21:08:06 +0000 |
|---|---|---|
| committer | Manman Ren <manman.ren@gmail.com> | 2016-04-11 21:08:06 +0000 |
| commit | 5751814edada5a6490e7c00ad34ddc0faf01d73c (patch) | |
| tree | c5a302babc580bcaa409adaa7c48ef42d9477c9a /llvm/lib/Target/AArch64/AArch64RegisterInfo.cpp | |
| parent | 2fec729c5004f15fda1075a72e8e4aaeec714423 (diff) | |
| download | bcm5719-llvm-5751814edada5a6490e7c00ad34ddc0faf01d73c.tar.gz bcm5719-llvm-5751814edada5a6490e7c00ad34ddc0faf01d73c.zip | |
Swift Calling Convention: swifterror target support.
Differential Revision: http://reviews.llvm.org/D18716
llvm-svn: 265997
Diffstat (limited to 'llvm/lib/Target/AArch64/AArch64RegisterInfo.cpp')
| -rw-r--r-- | llvm/lib/Target/AArch64/AArch64RegisterInfo.cpp | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/llvm/lib/Target/AArch64/AArch64RegisterInfo.cpp b/llvm/lib/Target/AArch64/AArch64RegisterInfo.cpp index 911332cb27a..e41f276c819 100644 --- a/llvm/lib/Target/AArch64/AArch64RegisterInfo.cpp +++ b/llvm/lib/Target/AArch64/AArch64RegisterInfo.cpp @@ -51,6 +51,11 @@ AArch64RegisterInfo::getCalleeSavedRegs(const MachineFunction *MF) const { return MF->getInfo<AArch64FunctionInfo>()->isSplitCSR() ? CSR_AArch64_CXX_TLS_Darwin_PE_SaveList : CSR_AArch64_CXX_TLS_Darwin_SaveList; + if (MF->getSubtarget<AArch64Subtarget>().getTargetLowering() + ->supportSwiftError() && + MF->getFunction()->getAttributes().hasAttrSomewhere( + Attribute::SwiftError)) + return CSR_AArch64_AAPCS_SwiftError_SaveList; if (MF->getFunction()->getCallingConv() == CallingConv::PreserveMost) return CSR_AArch64_RT_MostRegs_SaveList; else @@ -76,6 +81,10 @@ AArch64RegisterInfo::getCallPreservedMask(const MachineFunction &MF, return CSR_AArch64_AllRegs_RegMask; if (CC == CallingConv::CXX_FAST_TLS) return CSR_AArch64_CXX_TLS_Darwin_RegMask; + if (MF.getSubtarget<AArch64Subtarget>().getTargetLowering() + ->supportSwiftError() && + MF.getFunction()->getAttributes().hasAttrSomewhere(Attribute::SwiftError)) + return CSR_AArch64_AAPCS_SwiftError_RegMask; if (CC == CallingConv::PreserveMost) return CSR_AArch64_RT_MostRegs_RegMask; else |

