diff options
author | Devang Patel <dpatel@apple.com> | 2009-04-10 18:58:59 +0000 |
---|---|---|
committer | Devang Patel <dpatel@apple.com> | 2009-04-10 18:58:59 +0000 |
commit | 9a72741914cb4717b53f5106f6a06fdd446a63ec (patch) | |
tree | 4d8464e8665615d2185a30ecb0c61c1bdccbb79b | |
parent | 2e958a4285feeac673a3837ea2fd36bd9402cbcf (diff) | |
download | external_llvm-9a72741914cb4717b53f5106f6a06fdd446a63ec.zip external_llvm-9a72741914cb4717b53f5106f6a06fdd446a63ec.tar.gz external_llvm-9a72741914cb4717b53f5106f6a06fdd446a63ec.tar.bz2 |
DebugLabelFolder ruthlessly deletes redundant labels. However, sometimes the redundant labels is referenced by debug info somewhere else. This patch provies a way so that dwarf writer can mark labels as used.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@68813 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | include/llvm/CodeGen/MachineModuleInfo.h | 17 | ||||
-rw-r--r-- | lib/CodeGen/MachineModuleInfo.cpp | 2 |
2 files changed, 18 insertions, 1 deletions
diff --git a/include/llvm/CodeGen/MachineModuleInfo.h b/include/llvm/CodeGen/MachineModuleInfo.h index 7595605..e5f7c6a 100644 --- a/include/llvm/CodeGen/MachineModuleInfo.h +++ b/include/llvm/CodeGen/MachineModuleInfo.h @@ -37,6 +37,7 @@ #include "llvm/ADT/DenseMap.h" #include "llvm/ADT/UniqueVector.h" #include "llvm/ADT/SmallPtrSet.h" +#include "llvm/ADT/SmallSet.h" #include "llvm/ADT/StringMap.h" #include "llvm/CodeGen/MachineLocation.h" #include "llvm/GlobalValue.h" @@ -115,6 +116,9 @@ private: // searchable format. SmallPtrSet<const Function *, 32> UsedFunctions; + /// UsedDbgLabels - labels are used by debug info entries. + SmallSet<unsigned, 8> UsedDbgLabels; + bool CallsEHReturn; bool CallsUnwindInit; @@ -195,6 +199,19 @@ 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. diff --git a/lib/CodeGen/MachineModuleInfo.cpp b/lib/CodeGen/MachineModuleInfo.cpp index 4bbc4dd..1d8109e 100644 --- a/lib/CodeGen/MachineModuleInfo.cpp +++ b/lib/CodeGen/MachineModuleInfo.cpp @@ -333,7 +333,7 @@ bool DebugLabelFolder::runOnMachineFunction(MachineFunction &MF) { // Iterate through instructions. for (MachineBasicBlock::iterator I = BB->begin(), E = BB->end(); I != E; ) { // Is it a label. - if (I->isDebugLabel()) { + if (I->isDebugLabel() && !MMI->isDbgLabelUsed(I->getOperand(0).getImm())){ // The label ID # is always operand #0, an immediate. unsigned NextLabel = I->getOperand(0).getImm(); |