]> granicus.if.org Git - llvm/commitdiff
[mips] Factor out register class selection for global base register. NFC
authorSimon Atanasyan <simon@atanasyan.com>
Sat, 21 Jul 2018 16:16:08 +0000 (16:16 +0000)
committerSimon Atanasyan <simon@atanasyan.com>
Sat, 21 Jul 2018 16:16:08 +0000 (16:16 +0000)
Factor out register class selection for global base register into a
separate function to escape long chain of ternary operators.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@337647 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/Mips/MipsMachineFunction.cpp

index 1ee56d83009017b0a00d6816a36f9d0ccd54ab8d..81b4352670c0d767b63a0e88aacdb856ae796a12 100644 (file)
@@ -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() {