Changes in directory llvm/lib/CodeGen:
BranchFolding.cpp updated: 1.13 -> 1.14 --- Log message: Teach the branch folder to update debug info if it removes blocks with line # notes in it. --- Diffs of the changes: (+23 -2) BranchFolding.cpp | 25 +++++++++++++++++++++++-- 1 files changed, 23 insertions(+), 2 deletions(-) Index: llvm/lib/CodeGen/BranchFolding.cpp diff -u llvm/lib/CodeGen/BranchFolding.cpp:1.13 llvm/lib/CodeGen/BranchFolding.cpp:1.14 --- llvm/lib/CodeGen/BranchFolding.cpp:1.13 Tue Oct 17 13:16:40 2006 +++ llvm/lib/CodeGen/BranchFolding.cpp Tue Oct 17 18:17:27 2006 @@ -17,6 +17,7 @@ //===----------------------------------------------------------------------===// #include "llvm/CodeGen/Passes.h" +#include "llvm/CodeGen/MachineDebugInfo.h" #include "llvm/CodeGen/MachineFunctionPass.h" #include "llvm/CodeGen/MachineJumpTableInfo.h" #include "llvm/Target/TargetInstrInfo.h" @@ -29,9 +30,11 @@ virtual bool runOnMachineFunction(MachineFunction &MF); virtual const char *getPassName() const { return "Control Flow Optimizer"; } const TargetInstrInfo *TII; + MachineDebugInfo *MDI; bool MadeChange; private: void OptimizeBlock(MachineFunction::iterator MBB); + void RemoveDeadBlock(MachineBasicBlock *MBB); }; } @@ -39,12 +42,30 @@ /// RemoveDeadBlock - Remove the specified dead machine basic block from the /// function, updating the CFG. -static void RemoveDeadBlock(MachineBasicBlock *MBB) { +void BranchFolder::RemoveDeadBlock(MachineBasicBlock *MBB) { assert(MBB->pred_empty() && "MBB must be dead!"); + MachineFunction *MF = MBB->getParent(); // drop all successors. while (!MBB->succ_empty()) MBB->removeSuccessor(MBB->succ_end()-1); + + // If there is DWARF info to active, check to see if there are any DWARF_LABEL + // records in the basic block. If so, unregister them from MachineDebugInfo. + if (MDI && !MBB->empty()) { + unsigned DWARF_LABELOpc = TII->getDWARF_LABELOpcode(); + assert(DWARF_LABELOpc && + "Target supports dwarf but didn't implement getDWARF_LABELOpcode!"); + + for (MachineBasicBlock::iterator I = MBB->begin(), E = MBB->end(); + I != E; ++I) { + if ((unsigned)I->getOpcode() == DWARF_LABELOpc) { + // The label ID # is always operand #0, an immediate. + MDI->RemoveLabelInfo(I->getOperand(0).getImm()); + } + } + } + // Remove the block. MF->getBasicBlockList().erase(MBB); } @@ -53,7 +74,7 @@ TII = MF.getTarget().getInstrInfo(); if (!TII) return false; - //MF.dump(); + MDI = getAnalysisToUpdate<MachineDebugInfo>(); bool EverMadeChange = false; MadeChange = true; _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits