summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target/ARM/ARMBaseRegisterInfo.cpp
diff options
context:
space:
mode:
authorManman Ren <manman.ren@gmail.com>2016-01-12 00:47:18 +0000
committerManman Ren <manman.ren@gmail.com>2016-01-12 00:47:18 +0000
commit5e9e65e705d75d616c00fdcebe2b1e2ddb1956bf (patch)
treeaf54de63e0b4ec3e0379a9f9845345f2d49d117a /llvm/lib/Target/ARM/ARMBaseRegisterInfo.cpp
parente3580956eafac63324ba4db80de28cd9a030981a (diff)
downloadbcm5719-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.cpp13
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 {
OpenPOWER on IntegriCloud