mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-06-12 13:38:21 +00:00
Remove DebugLabelFolder pass. It is not used by dwarf writer anymore.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@89790 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@ -293,75 +293,3 @@ unsigned MachineModuleInfo::getPersonalityIndex() const {
|
||||
return 0;
|
||||
}
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
/// DebugLabelFolding pass - This pass prunes out redundant labels. This allows
|
||||
/// a info consumer to determine if the range of two labels is empty, by seeing
|
||||
/// if the labels map to the same reduced label.
|
||||
|
||||
namespace llvm {
|
||||
|
||||
struct DebugLabelFolder : public MachineFunctionPass {
|
||||
static char ID;
|
||||
DebugLabelFolder() : MachineFunctionPass(&ID) {}
|
||||
|
||||
virtual void getAnalysisUsage(AnalysisUsage &AU) const {
|
||||
AU.setPreservesCFG();
|
||||
AU.addPreservedID(MachineLoopInfoID);
|
||||
AU.addPreservedID(MachineDominatorsID);
|
||||
MachineFunctionPass::getAnalysisUsage(AU);
|
||||
}
|
||||
|
||||
virtual bool runOnMachineFunction(MachineFunction &MF);
|
||||
virtual const char *getPassName() const { return "Label Folder"; }
|
||||
};
|
||||
|
||||
char DebugLabelFolder::ID = 0;
|
||||
|
||||
bool DebugLabelFolder::runOnMachineFunction(MachineFunction &MF) {
|
||||
// Get machine module info.
|
||||
MachineModuleInfo *MMI = getAnalysisIfAvailable<MachineModuleInfo>();
|
||||
if (!MMI) return false;
|
||||
|
||||
// Track if change is made.
|
||||
bool MadeChange = false;
|
||||
// No prior label to begin.
|
||||
unsigned PriorLabel = 0;
|
||||
|
||||
// Iterate through basic blocks.
|
||||
for (MachineFunction::iterator BB = MF.begin(), E = MF.end();
|
||||
BB != E; ++BB) {
|
||||
// Iterate through instructions.
|
||||
for (MachineBasicBlock::iterator I = BB->begin(), E = BB->end(); I != E; ) {
|
||||
// Is it a label.
|
||||
if (I->isDebugLabel() && !MMI->isDbgLabelUsed(I->getOperand(0).getImm())){
|
||||
// The label ID # is always operand #0, an immediate.
|
||||
unsigned NextLabel = I->getOperand(0).getImm();
|
||||
|
||||
// If there was an immediate prior label.
|
||||
if (PriorLabel) {
|
||||
// Remap the current label to prior label.
|
||||
MMI->RemapLabel(NextLabel, PriorLabel);
|
||||
// Delete the current label.
|
||||
I = BB->erase(I);
|
||||
// Indicate a change has been made.
|
||||
MadeChange = true;
|
||||
continue;
|
||||
} else {
|
||||
// Start a new round.
|
||||
PriorLabel = NextLabel;
|
||||
}
|
||||
} else {
|
||||
// No consecutive labels.
|
||||
PriorLabel = 0;
|
||||
}
|
||||
|
||||
++I;
|
||||
}
|
||||
}
|
||||
|
||||
return MadeChange;
|
||||
}
|
||||
|
||||
FunctionPass *createDebugLabelFoldingPass() { return new DebugLabelFolder(); }
|
||||
|
||||
}
|
||||
|
Reference in New Issue
Block a user