This would eliminate a lot of repetitive coding in subzero.
It's troublesome that we have to type (this) in several places
but I don't see a away around it yet and it does not add to the line
of code count at all to have to do this; it's just not aesthetic to me.

If this idea is okay, I can make all the similar changes
in the Mips Subzero port.

BUG=

Review URL: https://codereview.chromium.org/1661233002 .

Patch from Reed Kotler <rkotlerimgtec@gmail.com>.
diff --git a/src/IceTargetLoweringMIPS32.cpp b/src/IceTargetLoweringMIPS32.cpp
index 075e62c..f9ee059 100644
--- a/src/IceTargetLoweringMIPS32.cpp
+++ b/src/IceTargetLoweringMIPS32.cpp
@@ -599,10 +599,8 @@
     llvm::report_fatal_error("Unknown arithmetic operator");
     return;
   case InstArithmetic::Add: {
-    Variable *T_Carry = makeReg(IceType_i32);
-    Variable *T_Lo = makeReg(IceType_i32);
-    Variable *T_Hi = makeReg(IceType_i32);
-    Variable *T_Hi2 = makeReg(IceType_i32);
+    auto *T_Carry = I32Reg(), *T_Lo = I32Reg(), *T_Hi = I32Reg(),
+         *T_Hi2 = I32Reg();
     _addu(T_Lo, Src0LoR, Src1LoR);
     _mov(DestLo, T_Lo);
     _sltu(T_Carry, T_Lo, Src0LoR);
@@ -612,8 +610,7 @@
     return;
   }
   case InstArithmetic::And: {
-    Variable *T_Lo = makeReg(IceType_i32);
-    Variable *T_Hi = makeReg(IceType_i32);
+    auto *T_Lo = I32Reg(), *T_Hi = I32Reg();
     _and(T_Lo, Src0LoR, Src1LoR);
     _mov(DestLo, T_Lo);
     _and(T_Hi, Src0HiR, Src1HiR);
@@ -621,10 +618,8 @@
     return;
   }
   case InstArithmetic::Sub: {
-    Variable *T_Borrow = makeReg(IceType_i32);
-    Variable *T_Lo = makeReg(IceType_i32);
-    Variable *T_Hi = makeReg(IceType_i32);
-    Variable *T_Hi2 = makeReg(IceType_i32);
+    auto *T_Borrow = I32Reg(), *T_Lo = I32Reg(), *T_Hi = I32Reg(),
+         *T_Hi2 = I32Reg();
     _subu(T_Lo, Src0LoR, Src1LoR);
     _mov(DestLo, T_Lo);
     _sltu(T_Borrow, Src0LoR, Src1LoR);
@@ -634,8 +629,7 @@
     return;
   }
   case InstArithmetic::Or: {
-    Variable *T_Lo = makeReg(IceType_i32);
-    Variable *T_Hi = makeReg(IceType_i32);
+    auto *T_Lo = I32Reg(), *T_Hi = I32Reg();
     _or(T_Lo, Src0LoR, Src1LoR);
     _mov(DestLo, T_Lo);
     _or(T_Hi, Src0HiR, Src1HiR);
@@ -643,8 +637,7 @@
     return;
   }
   case InstArithmetic::Xor: {
-    Variable *T_Lo = makeReg(IceType_i32);
-    Variable *T_Hi = makeReg(IceType_i32);
+    auto *T_Lo = I32Reg(), *T_Hi = I32Reg();
     _xor(T_Lo, Src0LoR, Src1LoR);
     _mov(DestLo, T_Lo);
     _xor(T_Hi, Src0HiR, Src1HiR);
@@ -765,8 +758,7 @@
     auto *DestLo = llvm::cast<Variable>(loOperand(Dest));
     auto *DestHi = llvm::cast<Variable>(hiOperand(Dest));
     // Variable *T_Lo = nullptr, *T_Hi = nullptr;
-    Variable *T_Lo = makeReg(IceType_i32);
-    Variable *T_Hi = makeReg(IceType_i32);
+    auto *T_Lo = I32Reg(), *T_Hi = I32Reg();
     _mov(T_Lo, Src0Lo);
     _mov(DestLo, T_Lo);
     _mov(T_Hi, Src0Hi);
@@ -822,8 +814,8 @@
       ReturnReg = makeReg(Dest->getType(), RegMIPS32::Reg_V0);
       break;
     case IceType_i64:
-      ReturnReg = makeReg(IceType_i32, RegMIPS32::Reg_V0);
-      ReturnRegHi = makeReg(IceType_i32, RegMIPS32::Reg_V1);
+      ReturnReg = I32Reg(RegMIPS32::Reg_V0);
+      ReturnRegHi = I32Reg(RegMIPS32::Reg_V1);
       break;
     case IceType_f32:
     case IceType_f64:
diff --git a/src/IceTargetLoweringMIPS32.h b/src/IceTargetLoweringMIPS32.h
index 08897e8..b4afe42 100644
--- a/src/IceTargetLoweringMIPS32.h
+++ b/src/IceTargetLoweringMIPS32.h
@@ -227,6 +227,11 @@
   Variable *legalizeToReg(Operand *From, RegNumT RegNum = RegNumT());
 
   Variable *makeReg(Type Ty, RegNumT RegNum = RegNumT());
+
+  Variable *I32Reg(RegNumT RegNum = RegNumT()) {
+    return makeReg(IceType_i32, RegNum);
+  }
+
   static Type stackSlotType();
   Variable *copyToReg(Operand *Src, RegNumT RegNum = RegNumT());