Clean up sub-register implementation by moving subReg information back to
MachineOperand auxInfo. Previous clunky implementation uses an external map
to track sub-register uses. That works because register allocator uses
a new virtual register for each spilled use. With interval splitting (coming
soon), we may have multiple uses of the same register some of which are
of using different sub-registers from others. It's too fragile to constantly
update the information.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@44104 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/CodeGen/LiveIntervalAnalysis.cpp b/lib/CodeGen/LiveIntervalAnalysis.cpp
index ac5fc8c..833868a 100644
--- a/lib/CodeGen/LiveIntervalAnalysis.cpp
+++ b/lib/CodeGen/LiveIntervalAnalysis.cpp
@@ -670,12 +670,8 @@
     unsigned RegI = Reg;
     if (Reg == 0 || MRegisterInfo::isPhysicalRegister(Reg))
       continue;
-    bool isSubReg = RegMap->isSubRegister(Reg);
-    unsigned SubIdx = 0;
-    if (isSubReg) {
-      SubIdx = RegMap->getSubRegisterIndex(Reg);
-      Reg = RegMap->getSuperRegister(Reg);
-    }
+    unsigned SubIdx = mop.getSubReg();
+    bool isSubReg = SubIdx != 0;
     if (Reg != li.reg)
       continue;
 
@@ -710,8 +706,6 @@
     // Create a new virtual register for the spill interval.
     unsigned NewVReg = RegMap->createVirtualRegister(rc);
     vrm.grow();
-    if (isSubReg)
-      RegMap->setIsSubRegister(NewVReg, NewVReg, SubIdx);
             
     // Scan all of the operands of this instruction rewriting operands
     // to use NewVReg instead of li.reg as appropriate.  We do this for