mirror of
https://github.com/RPCSX/llvm.git
synced 2025-02-10 22:43:46 +00:00
Remove MachineRegisterInfo::getLastVirtReg(), it was giving wrong results
when no virtual registers have been allocated. It was only used to resize IndexedMaps, so provide an IndexedMap::resize() method such that Map.grow(MRI.getLastVirtReg()); can be replaced with the simpler Map.resize(MRI.getNumVirtRegs()); This works correctly when no virtuals are allocated, and it bypasses the to/from index conversions. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@123130 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
9dddf08eb8
commit
42e9c96392
@ -59,6 +59,10 @@ namespace llvm {
|
||||
storage_.reserve(s);
|
||||
}
|
||||
|
||||
void resize(typename StorageT::size_type s) {
|
||||
storage_.resize(s, nullVal_);
|
||||
}
|
||||
|
||||
void clear() {
|
||||
storage_.clear();
|
||||
}
|
||||
@ -66,7 +70,7 @@ namespace llvm {
|
||||
void grow(IndexT n) {
|
||||
unsigned NewSize = toIndex_(n) + 1;
|
||||
if (NewSize > storage_.size())
|
||||
storage_.resize(NewSize, nullVal_);
|
||||
resize(NewSize);
|
||||
}
|
||||
|
||||
bool inBounds(IndexT n) const {
|
||||
|
@ -216,12 +216,6 @@ public:
|
||||
///
|
||||
unsigned getNumVirtRegs() const { return VRegInfo.size(); }
|
||||
|
||||
/// getLastVirtReg - Return the highest currently assigned virtual register.
|
||||
///
|
||||
unsigned getLastVirtReg() const {
|
||||
return TargetRegisterInfo::index2VirtReg(getNumVirtRegs() - 1);
|
||||
}
|
||||
|
||||
/// getRegClassVirtRegs - Return the list of virtual registers of the given
|
||||
/// target register class.
|
||||
const std::vector<unsigned> &
|
||||
|
@ -1024,8 +1024,7 @@ bool RAFast::runOnMachineFunction(MachineFunction &Fn) {
|
||||
|
||||
// initialize the virtual->physical register map to have a 'null'
|
||||
// mapping for all virtual registers
|
||||
unsigned LastVirtReg = MRI->getLastVirtReg();
|
||||
StackSlotForVirtReg.grow(LastVirtReg);
|
||||
StackSlotForVirtReg.resize(MRI->getNumVirtRegs());
|
||||
|
||||
// Loop over all of the basic blocks, eliminating virtual register references
|
||||
for (MachineFunction::iterator MBBi = Fn.begin(), MBBe = Fn.end();
|
||||
|
@ -88,14 +88,14 @@ bool VirtRegMap::runOnMachineFunction(MachineFunction &mf) {
|
||||
}
|
||||
|
||||
void VirtRegMap::grow() {
|
||||
unsigned LastVirtReg = MF->getRegInfo().getLastVirtReg();
|
||||
Virt2PhysMap.grow(LastVirtReg);
|
||||
Virt2StackSlotMap.grow(LastVirtReg);
|
||||
Virt2ReMatIdMap.grow(LastVirtReg);
|
||||
Virt2SplitMap.grow(LastVirtReg);
|
||||
Virt2SplitKillMap.grow(LastVirtReg);
|
||||
ReMatMap.grow(LastVirtReg);
|
||||
ImplicitDefed.resize(MF->getRegInfo().getNumVirtRegs());
|
||||
unsigned NumRegs = MF->getRegInfo().getNumVirtRegs();
|
||||
Virt2PhysMap.resize(NumRegs);
|
||||
Virt2StackSlotMap.resize(NumRegs);
|
||||
Virt2ReMatIdMap.resize(NumRegs);
|
||||
Virt2SplitMap.resize(NumRegs);
|
||||
Virt2SplitKillMap.resize(NumRegs);
|
||||
ReMatMap.resize(NumRegs);
|
||||
ImplicitDefed.resize(NumRegs);
|
||||
}
|
||||
|
||||
unsigned VirtRegMap::createSpillSlot(const TargetRegisterClass *RC) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user