| OLD | NEW |
| 1 //===-- ARMBaseRegisterInfo.cpp - ARM Register Information ----------------===// | 1 //===-- ARMBaseRegisterInfo.cpp - ARM Register Information ----------------===// |
| 2 // | 2 // |
| 3 // The LLVM Compiler Infrastructure | 3 // The LLVM Compiler Infrastructure |
| 4 // | 4 // |
| 5 // This file is distributed under the University of Illinois Open Source | 5 // This file is distributed under the University of Illinois Open Source |
| 6 // License. See LICENSE.TXT for details. | 6 // License. See LICENSE.TXT for details. |
| 7 // | 7 // |
| 8 //===----------------------------------------------------------------------===// | 8 //===----------------------------------------------------------------------===// |
| 9 // | 9 // |
| 10 // This file contains the base ARM implementation of TargetRegisterInfo class. | 10 // This file contains the base ARM implementation of TargetRegisterInfo class. |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 53 else | 53 else |
| 54 FramePtr = ARM::R11; | 54 FramePtr = ARM::R11; |
| 55 } else if (STI.isTargetWindows()) | 55 } else if (STI.isTargetWindows()) |
| 56 FramePtr = ARM::R11; | 56 FramePtr = ARM::R11; |
| 57 else // ARM EABI | 57 else // ARM EABI |
| 58 FramePtr = STI.isThumb() ? ARM::R7 : ARM::R11; | 58 FramePtr = STI.isThumb() ? ARM::R7 : ARM::R11; |
| 59 } | 59 } |
| 60 | 60 |
| 61 const MCPhysReg* | 61 const MCPhysReg* |
| 62 ARMBaseRegisterInfo::getCalleeSavedRegs(const MachineFunction *MF) const { | 62 ARMBaseRegisterInfo::getCalleeSavedRegs(const MachineFunction *MF) const { |
| 63 if (STI.isTargetNaCl()) return CSR_NaCl_SaveList; // @LOCALMOD |
| 64 |
| 63 const MCPhysReg *RegList = (STI.isTargetIOS() && !STI.isAAPCS_ABI()) | 65 const MCPhysReg *RegList = (STI.isTargetIOS() && !STI.isAAPCS_ABI()) |
| 64 ? CSR_iOS_SaveList | 66 ? CSR_iOS_SaveList |
| 65 : CSR_AAPCS_SaveList; | 67 : CSR_AAPCS_SaveList; |
| 66 | 68 |
| 67 if (!MF) return RegList; | 69 if (!MF) return RegList; |
| 68 | 70 |
| 69 const Function *F = MF->getFunction(); | 71 const Function *F = MF->getFunction(); |
| 70 if (F->getCallingConv() == CallingConv::GHC) { | 72 if (F->getCallingConv() == CallingConv::GHC) { |
| 71 // GHC set of callee saved regs is empty as all those regs are | 73 // GHC set of callee saved regs is empty as all those regs are |
| 72 // used for passing STG regs around | 74 // used for passing STG regs around |
| (...skipping 12 matching lines...) Expand all Loading... |
| 85 // exception handling. | 87 // exception handling. |
| 86 return CSR_GenericInt_SaveList; | 88 return CSR_GenericInt_SaveList; |
| 87 } | 89 } |
| 88 } | 90 } |
| 89 | 91 |
| 90 return RegList; | 92 return RegList; |
| 91 } | 93 } |
| 92 | 94 |
| 93 const uint32_t* | 95 const uint32_t* |
| 94 ARMBaseRegisterInfo::getCallPreservedMask(CallingConv::ID CC) const { | 96 ARMBaseRegisterInfo::getCallPreservedMask(CallingConv::ID CC) const { |
| 97 if (STI.isTargetNaCl()) return CSR_NaCl_RegMask; // @LOCALMOD |
| 95 if (CC == CallingConv::GHC) | 98 if (CC == CallingConv::GHC) |
| 96 // This is academic becase all GHC calls are (supposed to be) tail calls | 99 // This is academic becase all GHC calls are (supposed to be) tail calls |
| 97 return CSR_NoRegs_RegMask; | 100 return CSR_NoRegs_RegMask; |
| 98 return (STI.isTargetIOS() && !STI.isAAPCS_ABI()) | 101 return (STI.isTargetIOS() && !STI.isAAPCS_ABI()) |
| 99 ? CSR_iOS_RegMask : CSR_AAPCS_RegMask; | 102 ? CSR_iOS_RegMask : CSR_AAPCS_RegMask; |
| 100 } | 103 } |
| 101 | 104 |
| 102 const uint32_t* | 105 const uint32_t* |
| 103 ARMBaseRegisterInfo::getNoPreservedMask() const { | 106 ARMBaseRegisterInfo::getNoPreservedMask() const { |
| 104 return CSR_NoRegs_RegMask; | 107 return CSR_NoRegs_RegMask; |
| (...skipping 723 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 828 // In practice the SizeMultiplier will only factor in for straight line code | 831 // In practice the SizeMultiplier will only factor in for straight line code |
| 829 // that uses a lot of NEON vectors, which isn't terribly common. | 832 // that uses a lot of NEON vectors, which isn't terribly common. |
| 830 unsigned SizeMultiplier = MBB->size()/100; | 833 unsigned SizeMultiplier = MBB->size()/100; |
| 831 SizeMultiplier = SizeMultiplier ? SizeMultiplier : 1; | 834 SizeMultiplier = SizeMultiplier ? SizeMultiplier : 1; |
| 832 if (It->second < NewRCWeight.WeightLimit * SizeMultiplier) { | 835 if (It->second < NewRCWeight.WeightLimit * SizeMultiplier) { |
| 833 It->second += NewRCWeight.RegWeight; | 836 It->second += NewRCWeight.RegWeight; |
| 834 return true; | 837 return true; |
| 835 } | 838 } |
| 836 return false; | 839 return false; |
| 837 } | 840 } |
| OLD | NEW |