summaryrefslogtreecommitdiff
path: root/lib/VMCore/DebugInfoProbe.cpp
diff options
context:
space:
mode:
authorDevang Patel <dpatel@apple.com>2011-06-24 20:46:11 +0000
committerDevang Patel <dpatel@apple.com>2011-06-24 20:46:11 +0000
commit8594d429e02c688d428036f8563f09572da3fbff (patch)
treea1f046cde0508a6ff930000d9159809814b22c1a /lib/VMCore/DebugInfoProbe.cpp
parentf5fa52ed064098be7130aa4ec1236037907ce3fa (diff)
downloadllvm-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.cpp36
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) {