@@ -91,13 +91,15 @@ namespace {
91
91
// scavenged. If a virtual register has simply been rematerialized, there
92
92
// is no reason to spill it to memory when we need the register back.
93
93
//
94
- std::vector< bool > VirtRegModified;
94
+ BitVector VirtRegModified;
95
95
96
96
void markVirtRegModified (unsigned Reg, bool Val = true ) {
97
97
assert (MRegisterInfo::isVirtualRegister (Reg) && " Illegal VirtReg!" );
98
98
Reg -= MRegisterInfo::FirstVirtualRegister;
99
- if (VirtRegModified.size () <= Reg) VirtRegModified.resize (Reg+1 );
100
- VirtRegModified[Reg] = Val;
99
+ if (Val)
100
+ VirtRegModified.set (Reg);
101
+ else
102
+ VirtRegModified.reset (Reg);
101
103
}
102
104
103
105
bool isVirtRegModified (unsigned Reg) const {
@@ -819,7 +821,9 @@ bool RALocal::runOnMachineFunction(MachineFunction &Fn) {
819
821
820
822
// initialize the virtual->physical register map to have a 'null'
821
823
// mapping for all virtual registers
822
- Virt2PhysRegMap.grow (MF->getRegInfo ().getLastVirtReg ());
824
+ unsigned LastVirtReg = MF->getRegInfo ().getLastVirtReg ();
825
+ Virt2PhysRegMap.grow (LastVirtReg);
826
+ VirtRegModified.resize (LastVirtReg-MRegisterInfo::FirstVirtualRegister);
823
827
824
828
// Loop over all of the basic blocks, eliminating virtual register references
825
829
for (MachineFunction::iterator MBB = Fn.begin (), MBBe = Fn.end ();
0 commit comments