summaryrefslogtreecommitdiffstats
path: root/gnu/llvm/lib/Target/Mips/MipsMachineFunction.cpp
diff options
context:
space:
mode:
authorpatrick <patrick@openbsd.org>2019-01-27 16:42:12 +0000
committerpatrick <patrick@openbsd.org>2019-01-27 16:42:12 +0000
commitb773203fb58f3ef282fb69c832d8710cab5bc82d (patch)
treee75913f147570fbd75169647b144df85b88a038c /gnu/llvm/lib/Target/Mips/MipsMachineFunction.cpp
parenttweak errno in previous (diff)
downloadwireguard-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.cpp38
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() {