mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-23 19:23:23 +01:00
eliminate InvalidateLabel and LabelIDList from MMI and replace
them with a counter. llvm-svn: 98462
This commit is contained in:
parent
f856c407af
commit
de49dbc188
@ -102,11 +102,8 @@ class MachineModuleInfo : public ImmutablePass {
|
||||
/// want.
|
||||
MachineModuleInfoImpl *ObjFileMMI;
|
||||
|
||||
// LabelIDList - One entry per assigned label. Normally the entry is equal to
|
||||
// the list index(+1). If the entry is zero then the label has been deleted.
|
||||
// Any other value indicates the label has been deleted by is mapped to
|
||||
// another label.
|
||||
std::vector<unsigned> LabelIDList;
|
||||
/// NextLabelIDToReturn - Unique ID counter for labels.
|
||||
unsigned NextLabelIDToReturn;
|
||||
|
||||
// FrameMoves - List of moves done by a function's prolog. Used to construct
|
||||
// frame maps by debug and exception handling consumers.
|
||||
@ -207,23 +204,12 @@ public:
|
||||
/// NextLabelID - Return the next unique label id.
|
||||
///
|
||||
unsigned NextLabelID() {
|
||||
unsigned ID = (unsigned)LabelIDList.size() + 1;
|
||||
LabelIDList.push_back(ID);
|
||||
return ID;
|
||||
return NextLabelIDToReturn++;
|
||||
}
|
||||
|
||||
/// getLabelSym - Turn a label ID into a symbol.
|
||||
MCSymbol *getLabelSym(unsigned ID);
|
||||
|
||||
/// InvalidateLabel - Inhibit use of the specified label # from
|
||||
/// MachineModuleInfo, for example because the code was deleted.
|
||||
void InvalidateLabel(unsigned LabelID) {
|
||||
// Remap to zero to indicate deletion.
|
||||
assert(0 < LabelID && LabelID <= LabelIDList.size() &&
|
||||
"Old label ID out of range.");
|
||||
LabelIDList[LabelID - 1] = 0;
|
||||
}
|
||||
|
||||
/// getFrameMoves - Returns a reference to a list of moves done in the current
|
||||
/// function's prologue. Used to construct frame maps for debug and exception
|
||||
/// handling comsumers.
|
||||
|
@ -105,17 +105,6 @@ void BranchFolder::RemoveDeadBlock(MachineBasicBlock *MBB) {
|
||||
while (!MBB->succ_empty())
|
||||
MBB->removeSuccessor(MBB->succ_end()-1);
|
||||
|
||||
// If there are any labels in the basic block, unregister them from
|
||||
// MachineModuleInfo.
|
||||
if (MMI && !MBB->empty()) {
|
||||
for (MachineBasicBlock::iterator I = MBB->begin(), E = MBB->end();
|
||||
I != E; ++I) {
|
||||
if (I->isLabel())
|
||||
// The label ID # is always operand #0, an immediate.
|
||||
MMI->InvalidateLabel(I->getOperand(0).getImm());
|
||||
}
|
||||
}
|
||||
|
||||
// Remove the block.
|
||||
MF->erase(MBB);
|
||||
}
|
||||
|
@ -41,8 +41,8 @@ MachineModuleInfoImpl::~MachineModuleInfoImpl() {}
|
||||
|
||||
MachineModuleInfo::MachineModuleInfo(const MCAsmInfo &MAI)
|
||||
: ImmutablePass(&ID), Context(MAI),
|
||||
ObjFileMMI(0), CurCallSite(0), CallsEHReturn(0), CallsUnwindInit(0),
|
||||
DbgInfoAvailable(false) {
|
||||
ObjFileMMI(0), NextLabelIDToReturn(1),
|
||||
CurCallSite(0), CallsEHReturn(0), CallsUnwindInit(0), DbgInfoAvailable(false){
|
||||
// Always emit some info, by default "no personality" info.
|
||||
Personalities.push_back(NULL);
|
||||
}
|
||||
|
@ -648,17 +648,6 @@ void TailDuplicatePass::RemoveDeadBlock(MachineBasicBlock *MBB) {
|
||||
while (!MBB->succ_empty())
|
||||
MBB->removeSuccessor(MBB->succ_end()-1);
|
||||
|
||||
// If there are any labels in the basic block, unregister them from
|
||||
// MachineModuleInfo.
|
||||
if (MMI && !MBB->empty()) {
|
||||
for (MachineBasicBlock::iterator I = MBB->begin(), E = MBB->end();
|
||||
I != E; ++I) {
|
||||
if (I->isLabel())
|
||||
// The label ID # is always operand #0, an immediate.
|
||||
MMI->InvalidateLabel(I->getOperand(0).getImm());
|
||||
}
|
||||
}
|
||||
|
||||
// Remove the block.
|
||||
MBB->eraseFromParent();
|
||||
}
|
||||
|
@ -165,20 +165,8 @@ bool UnreachableMachineBlockElim::runOnMachineFunction(MachineFunction &F) {
|
||||
}
|
||||
|
||||
// Actually remove the blocks now.
|
||||
for (unsigned i = 0, e = DeadBlocks.size(); i != e; ++i) {
|
||||
MachineBasicBlock *MBB = DeadBlocks[i];
|
||||
// If there are any labels in the basic block, unregister them from
|
||||
// MachineModuleInfo.
|
||||
if (MMI && !MBB->empty()) {
|
||||
for (MachineBasicBlock::iterator I = MBB->begin(),
|
||||
E = MBB->end(); I != E; ++I) {
|
||||
if (I->isLabel())
|
||||
// The label ID # is always operand #0, an immediate.
|
||||
MMI->InvalidateLabel(I->getOperand(0).getImm());
|
||||
}
|
||||
}
|
||||
MBB->eraseFromParent();
|
||||
}
|
||||
for (unsigned i = 0, e = DeadBlocks.size(); i != e; ++i)
|
||||
DeadBlocks[i]->eraseFromParent();
|
||||
|
||||
// Cleanup PHI nodes.
|
||||
for (MachineFunction::iterator I = F.begin(), E = F.end(); I != E; ++I) {
|
||||
|
Loading…
Reference in New Issue
Block a user