Subzero: Use a proper RegNumT type instead of int32_t/SizeT.

Originally, register numbers were represented explicitly as int32_t, particularly so that -1 (or negative values in general) could be used as a NoRegister sentinel value.  This created two problems:

1. It would be better to use a unique name for the type, to distinguish from other explicit int32_t uses such as stack offsets.

2. Apart from NoRegister, register number values ultimately come from unsigned sources like enum values and bitvector positions.  This results in a number of clumsy casts to remove compiler warnings.

This creates a simple RegNumT class to manage this.  It also deletes ordered comparison operators to help catch errors where particular register number orderings are assumed (as opposed to orderings of the encoded register values).

In addition, it creates a RegNumBitVector wrapper class that makes it much cleaner to do range-based for loops over bit vectors that represent RegNumT sets.

BUG= none
R=eholk@chromium.org, jpp@chromium.org

Review URL: https://codereview.chromium.org/1676123002 .
diff --git a/src/IceCfgNode.cpp b/src/IceCfgNode.cpp
index 647da89..9dbe7df 100644
--- a/src/IceCfgNode.cpp
+++ b/src/IceCfgNode.cpp
@@ -338,8 +338,8 @@
   if (!Var2->hasReg())
     return false;
 
-  int32_t RegNum1 = Var1->getRegNum();
-  int32_t RegNum2 = Var2->getRegNum();
+  const auto RegNum1 = Var1->getRegNum();
+  const auto RegNum2 = Var2->getRegNum();
   // Quick common-case check.
   if (RegNum1 == RegNum2)
     return true;
@@ -920,8 +920,8 @@
     return;
   Liveness *Liveness = Func->getLiveness();
   const LivenessBV *Live;
-  const int32_t StackReg = Func->getTarget()->getStackReg();
-  const int32_t FrameOrStackReg = Func->getTarget()->getFrameOrStackReg();
+  const auto StackReg = Func->getTarget()->getStackReg();
+  const auto FrameOrStackReg = Func->getTarget()->getFrameOrStackReg();
   if (IsLiveIn) {
     Live = &Liveness->getLiveIn(Node);
     Str << "\t\t\t\t/* LiveIn=";
@@ -937,7 +937,7 @@
       Variable *Var = Liveness->getVariable(i, Node);
       if (!Var->hasReg())
         continue;
-      const int32_t RegNum = Var->getRegNum();
+      const auto RegNum = Var->getRegNum();
       if (RegNum == StackReg || RegNum == FrameOrStackReg)
         continue;
       if (IsLiveIn)
@@ -948,7 +948,7 @@
     // order.
     std::sort(LiveRegs.begin(), LiveRegs.end(),
               [](const Variable *V1, const Variable *V2) {
-                return V1->getRegNum() < V2->getRegNum();
+                return unsigned(V1->getRegNum()) < unsigned(V2->getRegNum());
               });
     bool First = true;
     for (Variable *Var : LiveRegs) {