diff options
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() { | 
