diff options
author | Devang Patel <dpatel@apple.com> | 2011-06-24 20:46:11 +0000 |
---|---|---|
committer | Devang Patel <dpatel@apple.com> | 2011-06-24 20:46:11 +0000 |
commit | 8594d429e02c688d428036f8563f09572da3fbff (patch) | |
tree | a1f046cde0508a6ff930000d9159809814b22c1a /lib/VMCore/DebugInfoProbe.cpp | |
parent | f5fa52ed064098be7130aa4ec1236037907ce3fa (diff) | |
download | llvm-8594d429e02c688d428036f8563f09572da3fbff.tar.gz llvm-8594d429e02c688d428036f8563f09572da3fbff.tar.bz2 llvm-8594d429e02c688d428036f8563f09572da3fbff.tar.xz |
Handle debug info for i128 constants.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@133821 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/VMCore/DebugInfoProbe.cpp')
-rw-r--r-- | lib/VMCore/DebugInfoProbe.cpp | 36 |
1 files changed, 26 insertions, 10 deletions
diff --git a/lib/VMCore/DebugInfoProbe.cpp b/lib/VMCore/DebugInfoProbe.cpp index d1275ff58c..382c297148 100644 --- a/lib/VMCore/DebugInfoProbe.cpp +++ b/lib/VMCore/DebugInfoProbe.cpp @@ -53,6 +53,7 @@ namespace llvm { Function *TheFn; std::set<MDNode *> DbgVariables; std::set<Instruction *> MissingDebugLoc; + std::set<unsigned> LineNos; }; } @@ -66,14 +67,19 @@ void DebugInfoProbeImpl::initialize(StringRef PName, Function &F) { DbgVariables.clear(); MissingDebugLoc.clear(); + LineNos.clear(); TheFn = &F; for (Function::iterator FI = F.begin(), FE = F.end(); FI != FE; ++FI) for (BasicBlock::iterator BI = FI->begin(), BE = FI->end(); BI != BE; ++BI) { - if (!isa<PHINode>(BI) && BI->getDebugLoc().isUnknown()) - MissingDebugLoc.insert(BI); - if (!isa<DbgInfoIntrinsic>(BI)) continue; + DebugLoc DL = BI->getDebugLoc(); + if (DL.isUnknown()) { + if (!isa<PHINode>(BI)) + MissingDebugLoc.insert(BI); + } else + LineNos.insert(DL.getLine()); + if (!isa<DbgInfoIntrinsic>(BI)) continue; Value *Addr = NULL; MDNode *Node = NULL; if (DbgDeclareInst *DDI = dyn_cast<DbgDeclareInst>(BI)) { @@ -114,16 +120,20 @@ void DebugInfoProbeImpl::finalize(Function &F) { assert (TheFn == &F && "Invalid function to measure!"); std::set<MDNode *>DbgVariables2; + std::set<unsigned>LineNos2; for (Function::iterator FI = F.begin(), FE = F.end(); FI != FE; ++FI) for (BasicBlock::iterator BI = FI->begin(), BE = FI->end(); BI != BE; ++BI) { - if (!isa<PHINode>(BI) && BI->getDebugLoc().isUnknown() && - MissingDebugLoc.count(BI) == 0) { - ++NumDbgLineLost; - DEBUG(dbgs() << "DebugInfoProbe (" << PassName << "): --- "); - DEBUG(BI->print(dbgs())); - DEBUG(dbgs() << "\n"); - } + DebugLoc DL = BI->getDebugLoc(); + if (DL.isUnknown()) { + if (!isa<PHINode>(BI) && MissingDebugLoc.count(BI) == 0) { + ++NumDbgLineLost; + DEBUG(dbgs() << "DebugInfoProbe (" << PassName << "): --- "); + DEBUG(BI->print(dbgs())); + DEBUG(dbgs() << "\n"); + } + } else + LineNos2.insert(DL.getLine()); if (!isa<DbgInfoIntrinsic>(BI)) continue; Value *Addr = NULL; MDNode *Node = NULL; @@ -138,6 +148,12 @@ void DebugInfoProbeImpl::finalize(Function &F) { DbgVariables2.insert(Node); } + for (std::set<unsigned>::iterator I = LineNos.begin(), + E = LineNos.end(); I != E; ++I) { + unsigned LNO = *I; + if (LineNos2.count(LNO) == 0) + DEBUG(dbgs() << "DebugInfoProbe dropping line number " << LNO << "\n"); + } for (std::set<MDNode *>::iterator I = DbgVariables.begin(), E = DbgVariables.end(); I != E; ++I) { if (DbgVariables2.count(*I) == 0 && (*I)->getNumOperands() >= 2) { |