diff options
author | Duncan Sands <baldrick@free.fr> | 2012-11-16 12:36:39 +0000 |
---|---|---|
committer | Duncan Sands <baldrick@free.fr> | 2012-11-16 12:36:39 +0000 |
commit | d71b4e456829ffb3773b968200663447782ed219 (patch) | |
tree | aaaa675996ea686d48af998626587a2575a3721b /llvm/lib/Target/X86/X86RegisterInfo.cpp | |
parent | 38f0bb5161737eb6eeb6e74f130d657bf25f3909 (diff) | |
download | bcm5719-llvm-d71b4e456829ffb3773b968200663447782ed219.tar.gz bcm5719-llvm-d71b4e456829ffb3773b968200663447782ed219.zip |
Add the Erlang/HiPE calling convention, patch by Yiannis Tsiouris.
llvm-svn: 168166
Diffstat (limited to 'llvm/lib/Target/X86/X86RegisterInfo.cpp')
-rw-r--r-- | llvm/lib/Target/X86/X86RegisterInfo.cpp | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/llvm/lib/Target/X86/X86RegisterInfo.cpp b/llvm/lib/Target/X86/X86RegisterInfo.cpp index 73ac7477427..11f2d7aa707 100644 --- a/llvm/lib/Target/X86/X86RegisterInfo.cpp +++ b/llvm/lib/Target/X86/X86RegisterInfo.cpp @@ -190,6 +190,11 @@ X86RegisterInfo::getPointerRegClass(const MachineFunction &MF, unsigned Kind) return &X86::GR64_TCW64RegClass; if (TM.getSubtarget<X86Subtarget>().is64Bit()) return &X86::GR64_TCRegClass; + + const Function *F = MF.getFunction(); + bool hasHipeCC = (F ? F->getCallingConv() == CallingConv::HiPE : false); + if (hasHipeCC) + return &X86::GR32RegClass; return &X86::GR32_TCRegClass; } } @@ -230,6 +235,7 @@ X86RegisterInfo::getCalleeSavedRegs(const MachineFunction *MF) const { bool callsEHReturn = false; bool ghcCall = false; bool oclBiCall = false; + bool hipeCall = false; bool HasAVX = TM.getSubtarget<X86Subtarget>().hasAVX(); if (MF) { @@ -237,9 +243,10 @@ X86RegisterInfo::getCalleeSavedRegs(const MachineFunction *MF) const { const Function *F = MF->getFunction(); ghcCall = (F ? F->getCallingConv() == CallingConv::GHC : false); oclBiCall = (F ? F->getCallingConv() == CallingConv::Intel_OCL_BI : false); + hipeCall = (F ? F->getCallingConv() == CallingConv::HiPE : false); } - if (ghcCall) + if (ghcCall || hipeCall) return CSR_NoRegs_SaveList; if (oclBiCall) { if (HasAVX && IsWin64) @@ -273,7 +280,7 @@ X86RegisterInfo::getCallPreservedMask(CallingConv::ID CC) const { if (!HasAVX && !IsWin64 && Is64Bit) return CSR_64_Intel_OCL_BI_RegMask; } - if (CC == CallingConv::GHC) + if (CC == CallingConv::GHC || CC == CallingConv::HiPE) return CSR_NoRegs_RegMask; if (!Is64Bit) return CSR_32_RegMask; |