aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/Target/PowerPC/PPCRegisterInfo.cpp
diff options
context:
space:
mode:
authorTing Wang <Ting.Wang.SH@ibm.com>2022-10-09 01:23:18 -0400
committerTing Wang <Ting.Wang.SH@ibm.com>2022-10-09 01:23:18 -0400
commitbc5e969ca1e1567ae5ad259f7f2d55a96e30b07f (patch)
treeb7301be2631e4496876d5233a24b57396eed4d82 /llvm/lib/Target/PowerPC/PPCRegisterInfo.cpp
parent31327c29fb9a11628ffd8d49852832235915b995 (diff)
downloadllvm-bc5e969ca1e1567ae5ad259f7f2d55a96e30b07f.zip
llvm-bc5e969ca1e1567ae5ad259f7f2d55a96e30b07f.tar.gz
llvm-bc5e969ca1e1567ae5ad259f7f2d55a96e30b07f.tar.bz2
[PowerPC] Add vector pair calling convention for AIX
This is AIX part of update after https://reviews.llvm.org/D117225 Fixed the issue that AIX64 with vector pair enabled saw redundant spill/reload of callee saved vector registers. Based on original patch by: Kai Luo Reviewed By: lkail Differential Revision: https://reviews.llvm.org/D133466
Diffstat (limited to 'llvm/lib/Target/PowerPC/PPCRegisterInfo.cpp')
-rw-r--r--llvm/lib/Target/PowerPC/PPCRegisterInfo.cpp16
1 files changed, 15 insertions, 1 deletions
diff --git a/llvm/lib/Target/PowerPC/PPCRegisterInfo.cpp b/llvm/lib/Target/PowerPC/PPCRegisterInfo.cpp
index a60b993..d39934b 100644
--- a/llvm/lib/Target/PowerPC/PPCRegisterInfo.cpp
+++ b/llvm/lib/Target/PowerPC/PPCRegisterInfo.cpp
@@ -237,8 +237,14 @@ PPCRegisterInfo::getCalleeSavedRegs(const MachineFunction *MF) const {
}
// Standard calling convention CSRs.
if (TM.isPPC64()) {
- if (Subtarget.pairedVectorMemops())
+ if (Subtarget.pairedVectorMemops()) {
+ if (Subtarget.isAIXABI()) {
+ if (!TM.getAIXExtendedAltivecABI())
+ return SaveR2 ? CSR_PPC64_R2_SaveList : CSR_PPC64_SaveList;
+ return SaveR2 ? CSR_AIX64_R2_VSRP_SaveList : CSR_AIX64_VSRP_SaveList;
+ }
return SaveR2 ? CSR_SVR464_R2_VSRP_SaveList : CSR_SVR464_VSRP_SaveList;
+ }
if (Subtarget.hasAltivec() &&
(!Subtarget.isAIXABI() || TM.getAIXExtendedAltivecABI())) {
return SaveR2 ? CSR_PPC64_R2_Altivec_SaveList
@@ -248,6 +254,9 @@ PPCRegisterInfo::getCalleeSavedRegs(const MachineFunction *MF) const {
}
// 32-bit targets.
if (Subtarget.isAIXABI()) {
+ if (Subtarget.pairedVectorMemops())
+ return TM.getAIXExtendedAltivecABI() ? CSR_AIX32_VSRP_SaveList
+ : CSR_AIX32_SaveList;
if (Subtarget.hasAltivec())
return TM.getAIXExtendedAltivecABI() ? CSR_AIX32_Altivec_SaveList
: CSR_AIX32_SaveList;
@@ -286,6 +295,11 @@ PPCRegisterInfo::getCallPreservedMask(const MachineFunction &MF,
}
if (Subtarget.isAIXABI()) {
+ if (Subtarget.pairedVectorMemops()) {
+ if (!TM.getAIXExtendedAltivecABI())
+ return TM.isPPC64() ? CSR_PPC64_RegMask : CSR_AIX32_RegMask;
+ return TM.isPPC64() ? CSR_AIX64_VSRP_RegMask : CSR_AIX32_VSRP_RegMask;
+ }
return TM.isPPC64()
? ((Subtarget.hasAltivec() && TM.getAIXExtendedAltivecABI())
? CSR_PPC64_Altivec_RegMask