mirror of
https://github.com/RPCSX/llvm.git
synced 2024-11-23 19:59:57 +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:
parent
f3a0376a56
commit
f5a7a2c84a
@ -135,9 +135,6 @@ class MachineModuleInfo : public ImmutablePass {
|
||||
/// llvm.compiler.used.
|
||||
SmallPtrSet<const Function *, 32> UsedFunctions;
|
||||
|
||||
/// UsedDbgLabels - labels are used by debug info entries.
|
||||
SmallSet<unsigned, 8> UsedDbgLabels;
|
||||
|
||||
bool CallsEHReturn;
|
||||
bool CallsUnwindInit;
|
||||
|
||||
@ -232,19 +229,6 @@ public:
|
||||
return LabelID ? LabelIDList[LabelID - 1] : 0;
|
||||
}
|
||||
|
||||
/// isDbgLabelUsed - Return true if label with LabelID is used by
|
||||
/// DwarfWriter.
|
||||
bool isDbgLabelUsed(unsigned LabelID) {
|
||||
return UsedDbgLabels.count(LabelID);
|
||||
}
|
||||
|
||||
/// RecordUsedDbgLabel - Mark label with LabelID as used. This is used
|
||||
/// by DwarfWriter to inform DebugLabelFolder that certain labels are
|
||||
/// not to be deleted.
|
||||
void RecordUsedDbgLabel(unsigned LabelID) {
|
||||
UsedDbgLabels.insert(LabelID);
|
||||
}
|
||||
|
||||
/// 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.
|
||||
|
@ -136,11 +136,6 @@ namespace llvm {
|
||||
/// headers to target specific alignment boundary.
|
||||
FunctionPass *createCodePlacementOptPass();
|
||||
|
||||
/// DebugLabelFoldingPass - This pass prunes out redundant debug labels. This
|
||||
/// allows a debug emitter to determine if the range of two labels is empty,
|
||||
/// by seeing if the labels map to the same reduced label.
|
||||
FunctionPass *createDebugLabelFoldingPass();
|
||||
|
||||
/// getRegisterAllocator - This creates an instance of the register allocator
|
||||
/// for the Sparc.
|
||||
FunctionPass *getRegisterAllocator(TargetMachine &T);
|
||||
|
@ -349,10 +349,6 @@ bool LLVMTargetMachine::addCommonCodeGenPasses(PassManagerBase &PM,
|
||||
if (PrintGCInfo)
|
||||
PM.add(createGCInfoPrinter(errs()));
|
||||
|
||||
// Fold redundant debug labels.
|
||||
PM.add(createDebugLabelFoldingPass());
|
||||
printAndVerify(PM, "After DebugLabelFolding");
|
||||
|
||||
if (OptLevel != CodeGenOpt::None && !DisableCodePlace) {
|
||||
PM.add(createCodePlacementOptPass());
|
||||
printAndVerify(PM, "After CodePlacementOpt");
|
||||
|
@ -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(); }
|
||||
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user