diff options
| author | 2019-01-27 16:42:12 +0000 | |
|---|---|---|
| committer | 2019-01-27 16:42:12 +0000 | |
| commit | b773203fb58f3ef282fb69c832d8710cab5bc82d (patch) | |
| tree | e75913f147570fbd75169647b144df85b88a038c /gnu/llvm/lib/Target/Mips/MipsMachineFunction.cpp | |
| parent | tweak errno in previous (diff) | |
| download | wireguard-openbsd-b773203fb58f3ef282fb69c832d8710cab5bc82d.tar.xz wireguard-openbsd-b773203fb58f3ef282fb69c832d8710cab5bc82d.zip | |
Import LLVM 7.0.1 release including clang, lld and lldb.
Diffstat (limited to 'gnu/llvm/lib/Target/Mips/MipsMachineFunction.cpp')
| -rw-r--r-- | gnu/llvm/lib/Target/Mips/MipsMachineFunction.cpp | 38 |
1 files changed, 20 insertions, 18 deletions
diff --git a/gnu/llvm/lib/Target/Mips/MipsMachineFunction.cpp b/gnu/llvm/lib/Target/Mips/MipsMachineFunction.cpp index 1ee56d83009..81b4352670c 100644 --- a/gnu/llvm/lib/Target/Mips/MipsMachineFunction.cpp +++ b/gnu/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() { |
