summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target/AArch64/AArch64RegisterInfo.cpp
diff options
context:
space:
mode:
authorManman Ren <manman.ren@gmail.com>2016-04-11 21:08:06 +0000
committerManman Ren <manman.ren@gmail.com>2016-04-11 21:08:06 +0000
commit5751814edada5a6490e7c00ad34ddc0faf01d73c (patch)
treec5a302babc580bcaa409adaa7c48ef42d9477c9a /llvm/lib/Target/AArch64/AArch64RegisterInfo.cpp
parent2fec729c5004f15fda1075a72e8e4aaeec714423 (diff)
downloadbcm5719-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.cpp9
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
OpenPOWER on IntegriCloud