diff options
author | Manman Ren <manman.ren@gmail.com> | 2016-01-12 00:47:18 +0000 |
---|---|---|
committer | Manman Ren <manman.ren@gmail.com> | 2016-01-12 00:47:18 +0000 |
commit | 5e9e65e705d75d616c00fdcebe2b1e2ddb1956bf (patch) | |
tree | af54de63e0b4ec3e0379a9f9845345f2d49d117a /llvm/lib/Target/ARM/ARMBaseRegisterInfo.cpp | |
parent | e3580956eafac63324ba4db80de28cd9a030981a (diff) | |
download | bcm5719-llvm-5e9e65e705d75d616c00fdcebe2b1e2ddb1956bf.tar.gz bcm5719-llvm-5e9e65e705d75d616c00fdcebe2b1e2ddb1956bf.zip |
CXX_FAST_TLS calling convention: performance improvement for ARM.
This is the same change on ARM as r255821 on AArch64.
rdar://9001553
llvm-svn: 257424
Diffstat (limited to 'llvm/lib/Target/ARM/ARMBaseRegisterInfo.cpp')
-rw-r--r-- | llvm/lib/Target/ARM/ARMBaseRegisterInfo.cpp | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/llvm/lib/Target/ARM/ARMBaseRegisterInfo.cpp b/llvm/lib/Target/ARM/ARMBaseRegisterInfo.cpp index 595975de905..a5207705fc6 100644 --- a/llvm/lib/Target/ARM/ARMBaseRegisterInfo.cpp +++ b/llvm/lib/Target/ARM/ARMBaseRegisterInfo.cpp @@ -88,10 +88,21 @@ ARMBaseRegisterInfo::getCalleeSavedRegs(const MachineFunction *MF) const { } if (STI.isTargetDarwin() && F->getCallingConv() == CallingConv::CXX_FAST_TLS) - return CSR_iOS_CXX_TLS_SaveList; + return MF->getInfo<ARMFunctionInfo>()->isSplitCSR() + ? CSR_iOS_CXX_TLS_PE_SaveList + : CSR_iOS_CXX_TLS_SaveList; return RegList; } +const MCPhysReg *ARMBaseRegisterInfo::getCalleeSavedRegsViaCopy( + const MachineFunction *MF) const { + assert(MF && "Invalid MachineFunction pointer."); + if (MF->getFunction()->getCallingConv() == CallingConv::CXX_FAST_TLS && + MF->getInfo<ARMFunctionInfo>()->isSplitCSR()) + return CSR_iOS_CXX_TLS_ViaCopy_SaveList; + return nullptr; +} + const uint32_t * ARMBaseRegisterInfo::getCallPreservedMask(const MachineFunction &MF, CallingConv::ID CC) const { |