diff options
| author | Dimitry Andric <dim@FreeBSD.org> | 2018-07-30 16:33:32 +0000 |
|---|---|---|
| committer | Dimitry Andric <dim@FreeBSD.org> | 2018-07-30 16:33:32 +0000 |
| commit | 51315c45ff5643a27f9c84b816db54ee870ba29b (patch) | |
| tree | 1d87443fa0e53d3e6b315ce25787e64be0906bf7 /contrib/llvm/lib/Target/Mips/MipsMachineFunction.cpp | |
| parent | 6dfd050075216be8538ae375a22d30db72916f7e (diff) | |
| parent | eb11fae6d08f479c0799db45860a98af528fa6e7 (diff) | |
Notes
Diffstat (limited to 'contrib/llvm/lib/Target/Mips/MipsMachineFunction.cpp')
| -rw-r--r-- | contrib/llvm/lib/Target/Mips/MipsMachineFunction.cpp | 38 |
1 files changed, 20 insertions, 18 deletions
diff --git a/contrib/llvm/lib/Target/Mips/MipsMachineFunction.cpp b/contrib/llvm/lib/Target/Mips/MipsMachineFunction.cpp index 1ee56d830090..81b4352670c0 100644 --- a/contrib/llvm/lib/Target/Mips/MipsMachineFunction.cpp +++ b/contrib/llvm/lib/Target/Mips/MipsMachineFunction.cpp @@ -29,25 +29,27 @@ bool MipsFunctionInfo::globalBaseRegSet() const { return GlobalBaseReg; } +static const TargetRegisterClass &getGlobalBaseRegClass(MachineFunction &MF) { + auto &STI = static_cast<const MipsSubtarget &>(MF.getSubtarget()); + auto &TM = static_cast<const MipsTargetMachine &>(MF.getTarget()); + + if (STI.inMips16Mode()) + return Mips::CPU16RegsRegClass; + + if (STI.inMicroMipsMode()) + return Mips::GPRMM16RegClass; + + if (TM.getABI().IsN64()) + return Mips::GPR64RegClass; + + return Mips::GPR32RegClass; +} + unsigned MipsFunctionInfo::getGlobalBaseReg() { - // Return if it has already been initialized. - if (GlobalBaseReg) - return GlobalBaseReg; - - MipsSubtarget const &STI = - static_cast<const MipsSubtarget &>(MF.getSubtarget()); - - const TargetRegisterClass *RC = - STI.inMips16Mode() - ? &Mips::CPU16RegsRegClass - : STI.inMicroMipsMode() - ? &Mips::GPRMM16RegClass - : static_cast<const MipsTargetMachine &>(MF.getTarget()) - .getABI() - .IsN64() - ? &Mips::GPR64RegClass - : &Mips::GPR32RegClass; - return GlobalBaseReg = MF.getRegInfo().createVirtualRegister(RC); + if (!GlobalBaseReg) + GlobalBaseReg = + MF.getRegInfo().createVirtualRegister(&getGlobalBaseRegClass(MF)); + return GlobalBaseReg; } void MipsFunctionInfo::createEhDataRegsFI() { |
