Replace std::vector<bool> with BitVector.
authorEvan Cheng <evan.cheng@apple.com>
Thu, 17 Jan 2008 00:35:26 +0000 (00:35 +0000)
committerEvan Cheng <evan.cheng@apple.com>
Thu, 17 Jan 2008 00:35:26 +0000 (00:35 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@46104 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/RegAllocLocal.cpp

index 29418243398fc300d9e2e8a02cf880fbcbc1f812..3654efd22bd0980e95b22d70765b8b0b08b52169 100644 (file)
@@ -91,13 +91,15 @@ namespace {
     // scavenged.  If a virtual register has simply been rematerialized, there
     // is no reason to spill it to memory when we need the register back.
     //
-    std::vector<bool> VirtRegModified;
+    BitVector VirtRegModified;
 
     void markVirtRegModified(unsigned Reg, bool Val = true) {
       assert(MRegisterInfo::isVirtualRegister(Reg) && "Illegal VirtReg!");
       Reg -= MRegisterInfo::FirstVirtualRegister;
-      if (VirtRegModified.size() <= Reg) VirtRegModified.resize(Reg+1);
-      VirtRegModified[Reg] = Val;
+      if (Val)
+        VirtRegModified.set(Reg);
+      else
+        VirtRegModified.reset(Reg);
     }
 
     bool isVirtRegModified(unsigned Reg) const {
@@ -819,7 +821,9 @@ bool RALocal::runOnMachineFunction(MachineFunction &Fn) {
 
   // initialize the virtual->physical register map to have a 'null'
   // mapping for all virtual registers
-  Virt2PhysRegMap.grow(MF->getRegInfo().getLastVirtReg());
+  unsigned LastVirtReg = MF->getRegInfo().getLastVirtReg();
+  Virt2PhysRegMap.grow(LastVirtReg);
+  VirtRegModified.resize(LastVirtReg-MRegisterInfo::FirstVirtualRegister);
 
   // Loop over all of the basic blocks, eliminating virtual register references
   for (MachineFunction::iterator MBB = Fn.begin(), MBBe = Fn.end();