summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/llvm/DebugInfo.h15
-rw-r--r--lib/IR/DebugInfo.cpp22
-rw-r--r--lib/IR/Verifier.cpp15
-rw-r--r--test/Assembler/functionlocal-metadata.ll2
-rw-r--r--test/CodeGen/ARM/2010-04-15-ScavengerDebugValue.ll2
-rw-r--r--test/CodeGen/ARM/debug-info-blocks.ll2
-rw-r--r--test/CodeGen/X86/2010-02-01-DbgValueCrash.ll2
-rw-r--r--test/CodeGen/X86/2010-06-01-DeadArg-DbgInfo.ll4
-rw-r--r--test/CodeGen/X86/2010-11-02-DbgParameter.ll2
-rw-r--r--test/CodeGen/X86/dbg-declare-arg.ll2
-rw-r--r--test/DebugInfo/2010-03-30-InvalidDbgInfoCrash.ll2
-rw-r--r--test/DebugInfo/2010-05-03-DisableFramePtr.ll2
-rw-r--r--test/DebugInfo/2010-05-03-OriginDIE.ll2
-rw-r--r--test/DebugInfo/2010-10-01-crash.ll2
-rw-r--r--test/DebugInfo/X86/earlydup-crash.ll2
-rw-r--r--test/DebugInfo/X86/pr12831.ll2
-rw-r--r--test/DebugInfo/inheritance.ll2
-rw-r--r--test/Linker/2011-08-18-unique-class-type.ll2
-rw-r--r--test/Transforms/LoopRotate/dbgvalue.ll2
19 files changed, 65 insertions, 21 deletions
diff --git a/include/llvm/DebugInfo.h b/include/llvm/DebugInfo.h
index d05b328744..53b1bdd560 100644
--- a/include/llvm/DebugInfo.h
+++ b/include/llvm/DebugInfo.h
@@ -31,6 +31,7 @@ namespace llvm {
class Type;
class Value;
class DbgDeclareInst;
+ class DbgValueInst;
class Instruction;
class MDNode;
class NamedMDNode;
@@ -734,12 +735,23 @@ namespace llvm {
/// cleanseInlinedVariable - Remove inlined scope from the variable.
DIVariable cleanseInlinedVariable(MDNode *DV, LLVMContext &VMContext);
+ /// DebugInfoFinder tries to list all debug info MDNodes in a module. To
+ /// list debug info MDNodes used by an instruction, DebugInfoFinder uses
+ /// processDeclare and processValue. processModule will go through
+ /// all DICompileUnits and list debug info MDNodes used by the CUs.
class DebugInfoFinder {
public:
/// processModule - Process entire module and collect debug info
/// anchors.
void processModule(const Module &M);
+ /// processDeclare - Process DbgDeclareInst.
+ void processDeclare(const DbgDeclareInst *DDI);
+ /// Process DbgValueInst.
+ void processValue(const DbgValueInst *DVI);
+
+ /// Clear all lists.
+ void reset();
private:
/// processType - Process DIType.
void processType(DIType DT);
@@ -750,9 +762,6 @@ namespace llvm {
/// processSubprogram - Process DISubprogram.
void processSubprogram(DISubprogram SP);
- /// processDeclare - Process DbgDeclareInst.
- void processDeclare(const DbgDeclareInst *DDI);
-
/// processLocation - Process DILocation.
void processLocation(DILocation Loc);
diff --git a/lib/IR/DebugInfo.cpp b/lib/IR/DebugInfo.cpp
index f63fa1a22d..9d88ce0e50 100644
--- a/lib/IR/DebugInfo.cpp
+++ b/lib/IR/DebugInfo.cpp
@@ -847,6 +847,15 @@ bool llvm::isSubprogramContext(const MDNode *Context) {
// DebugInfoFinder implementations.
//===----------------------------------------------------------------------===//
+void DebugInfoFinder::reset() {
+ CUs.clear();
+ SPs.clear();
+ GVs.clear();
+ TYs.clear();
+ Scopes.clear();
+ NodesSeen.clear();
+}
+
/// processModule - Process entire module and collect debug info.
void DebugInfoFinder::processModule(const Module &M) {
if (NamedMDNode *CU_Nodes = M.getNamedMetadata("llvm.dbg.cu")) {
@@ -970,6 +979,19 @@ void DebugInfoFinder::processDeclare(const DbgDeclareInst *DDI) {
processType(DIVariable(N).getType());
}
+void DebugInfoFinder::processValue(const DbgValueInst *DVI) {
+ MDNode *N = dyn_cast<MDNode>(DVI->getVariable());
+ if (!N) return;
+
+ DIDescriptor DV(N);
+ if (!DV.isVariable())
+ return;
+
+ if (!NodesSeen.insert(DV))
+ return;
+ processType(DIVariable(N).getType());
+}
+
/// addType - Add type into Tys.
bool DebugInfoFinder::addType(DIType DT) {
if (!DT.isValid())
diff --git a/lib/IR/Verifier.cpp b/lib/IR/Verifier.cpp
index fa53a4ee69..b22d211772 100644
--- a/lib/IR/Verifier.cpp
+++ b/lib/IR/Verifier.cpp
@@ -147,6 +147,9 @@ namespace {
/// the same personality function.
const Value *PersonalityFn;
+ /// Finder keeps track of all debug info MDNodes in a Module.
+ DebugInfoFinder Finder;
+
Verifier()
: FunctionPass(ID), Broken(false),
action(AbortProcessAction), Mod(0), Context(0), DT(0),
@@ -162,6 +165,7 @@ namespace {
bool doInitialization(Module &M) {
Mod = &M;
Context = &M.getContext();
+ Finder.reset();
// We must abort before returning back to the pass manager, or else the
// pass manager may try to run other passes on the broken module.
@@ -2144,7 +2148,17 @@ void Verifier::visitIntrinsicFunctionCall(Intrinsic::ID ID, CallInst &CI) {
MDNode *MD = cast<MDNode>(CI.getArgOperand(0));
Assert1(MD->getNumOperands() == 1,
"invalid llvm.dbg.declare intrinsic call 2", &CI);
+ if (!DisableDebugInfoVerifier)
+ Finder.processDeclare(cast<DbgDeclareInst>(&CI));
} break;
+ case Intrinsic::dbg_value: { //llvm.dbg.value
+ if (!DisableDebugInfoVerifier) {
+ Assert1(CI.getArgOperand(0) && isa<MDNode>(CI.getArgOperand(0)),
+ "invalid llvm.dbg.value intrinsic call 1", &CI);
+ Finder.processValue(cast<DbgValueInst>(&CI));
+ }
+ break;
+ }
case Intrinsic::memcpy:
case Intrinsic::memmove:
case Intrinsic::memset:
@@ -2209,7 +2223,6 @@ void Verifier::visitIntrinsicFunctionCall(Intrinsic::ID ID, CallInst &CI) {
void Verifier::verifyDebugInfo(Module &M) {
// Verify Debug Info.
if (!DisableDebugInfoVerifier) {
- DebugInfoFinder Finder;
Finder.processModule(M);
for (DebugInfoFinder::iterator I = Finder.compile_unit_begin(),
diff --git a/test/Assembler/functionlocal-metadata.ll b/test/Assembler/functionlocal-metadata.ll
index 216587d98a..5b81574229 100644
--- a/test/Assembler/functionlocal-metadata.ll
+++ b/test/Assembler/functionlocal-metadata.ll
@@ -1,4 +1,4 @@
-; RUN: llvm-as < %s | llvm-dis | FileCheck %s
+; RUN: llvm-as -disable-debug-info-verifier < %s | llvm-dis | FileCheck %s
define void @Foo(i32 %a, i32 %b) {
entry:
diff --git a/test/CodeGen/ARM/2010-04-15-ScavengerDebugValue.ll b/test/CodeGen/ARM/2010-04-15-ScavengerDebugValue.ll
index 05581c3f16..016e827f42 100644
--- a/test/CodeGen/ARM/2010-04-15-ScavengerDebugValue.ll
+++ b/test/CodeGen/ARM/2010-04-15-ScavengerDebugValue.ll
@@ -1,4 +1,4 @@
-; RUN: llc < %s
+; RUN: llc -disable-debug-info-verifier < %s
; PR6847
target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:32-f32:32:32-f64:32:32-v64:64:64-v128:128:128-a0:0:64-n32"
target triple = "armv4t-apple-darwin10"
diff --git a/test/CodeGen/ARM/debug-info-blocks.ll b/test/CodeGen/ARM/debug-info-blocks.ll
index fc21860cd5..9942a6e5d1 100644
--- a/test/CodeGen/ARM/debug-info-blocks.ll
+++ b/test/CodeGen/ARM/debug-info-blocks.ll
@@ -1,4 +1,4 @@
-; RUN: llc -O0 < %s | FileCheck %s
+; RUN: llc -O0 -disable-debug-info-verifier < %s | FileCheck %s
; CHECK: @DEBUG_VALUE: mydata <- [SP+{{[0-9]+}}]
; Radar 9331779
target datalayout = "e-p:32:32:32-i1:8:32-i8:8:32-i16:16:32-i32:32:32-i64:32:32-f32:32:32-f64:32:32-v64:32:64-v128:32:128-a0:0:32-n32"
diff --git a/test/CodeGen/X86/2010-02-01-DbgValueCrash.ll b/test/CodeGen/X86/2010-02-01-DbgValueCrash.ll
index 2113263c0a..eda25c10fb 100644
--- a/test/CodeGen/X86/2010-02-01-DbgValueCrash.ll
+++ b/test/CodeGen/X86/2010-02-01-DbgValueCrash.ll
@@ -1,4 +1,4 @@
-; RUN: llc -O1 < %s
+; RUN: llc -O1 -disable-debug-info-verifier < %s
; ModuleID = 'pr6157.bc'
; formerly crashed in SelectionDAGBuilder
diff --git a/test/CodeGen/X86/2010-06-01-DeadArg-DbgInfo.ll b/test/CodeGen/X86/2010-06-01-DeadArg-DbgInfo.ll
index 25223ca1cb..b85754542f 100644
--- a/test/CodeGen/X86/2010-06-01-DeadArg-DbgInfo.ll
+++ b/test/CodeGen/X86/2010-06-01-DeadArg-DbgInfo.ll
@@ -1,5 +1,5 @@
-; RUN: llc -O2 < %s | FileCheck %s
-; RUN: llc -O2 -regalloc=basic < %s | FileCheck %s
+; RUN: llc -O2 -disable-debug-info-verifier < %s | FileCheck %s
+; RUN: llc -O2 -regalloc=basic -disable-debug-info-verifier < %s | FileCheck %s
; Test to check that unused argument 'this' is not undefined in debug info.
target triple = "x86_64-apple-darwin10.2"
diff --git a/test/CodeGen/X86/2010-11-02-DbgParameter.ll b/test/CodeGen/X86/2010-11-02-DbgParameter.ll
index 8719f738b7..11775d23f4 100644
--- a/test/CodeGen/X86/2010-11-02-DbgParameter.ll
+++ b/test/CodeGen/X86/2010-11-02-DbgParameter.ll
@@ -1,4 +1,4 @@
-; RUN: llc -O2 -asm-verbose < %s | FileCheck %s
+; RUN: llc -O2 -disable-debug-info-verifier -asm-verbose < %s | FileCheck %s
; Radar 8616981
target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64-f80:128:128-n8:16:32"
diff --git a/test/CodeGen/X86/dbg-declare-arg.ll b/test/CodeGen/X86/dbg-declare-arg.ll
index f7e0c91cdf..81efe8ea65 100644
--- a/test/CodeGen/X86/dbg-declare-arg.ll
+++ b/test/CodeGen/X86/dbg-declare-arg.ll
@@ -1,4 +1,4 @@
-; RUN: llc -O0 -fast-isel=false < %s | FileCheck %s
+; RUN: llc -O0 -fast-isel=false -disable-debug-info-verifier < %s | FileCheck %s
target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64"
target triple = "x86_64-apple-macosx10.6.7"
;Radar 9321650
diff --git a/test/DebugInfo/2010-03-30-InvalidDbgInfoCrash.ll b/test/DebugInfo/2010-03-30-InvalidDbgInfoCrash.ll
index accdf8a86c..d31c128013 100644
--- a/test/DebugInfo/2010-03-30-InvalidDbgInfoCrash.ll
+++ b/test/DebugInfo/2010-03-30-InvalidDbgInfoCrash.ll
@@ -1,4 +1,4 @@
-; RUN: llc < %s -o /dev/null
+; RUN: llc -disable-debug-info-verifier < %s -o /dev/null
define void @baz(i32 %i) nounwind ssp {
entry:
diff --git a/test/DebugInfo/2010-05-03-DisableFramePtr.ll b/test/DebugInfo/2010-05-03-DisableFramePtr.ll
index 4061bdc834..27c7e192a7 100644
--- a/test/DebugInfo/2010-05-03-DisableFramePtr.ll
+++ b/test/DebugInfo/2010-05-03-DisableFramePtr.ll
@@ -1,4 +1,4 @@
-; RUN: llc -o /dev/null -disable-non-leaf-fp-elim < %s
+; RUN: llc -disable-debug-info-verifier -o /dev/null -disable-non-leaf-fp-elim < %s
; Radar 7937664
%struct.AppleEvent = type opaque
diff --git a/test/DebugInfo/2010-05-03-OriginDIE.ll b/test/DebugInfo/2010-05-03-OriginDIE.ll
index 1ade045046..c9ace896c7 100644
--- a/test/DebugInfo/2010-05-03-OriginDIE.ll
+++ b/test/DebugInfo/2010-05-03-OriginDIE.ll
@@ -1,5 +1,5 @@
-;RUN: llc < %s -o /dev/null
+;RUN: llc -disable-debug-info-verifier < %s -o /dev/null
;Radar 7937109
%struct.anon = type { i64, i32, i32, i32, [1 x i32] }
diff --git a/test/DebugInfo/2010-10-01-crash.ll b/test/DebugInfo/2010-10-01-crash.ll
index c4161b4942..ed6ea0480f 100644
--- a/test/DebugInfo/2010-10-01-crash.ll
+++ b/test/DebugInfo/2010-10-01-crash.ll
@@ -1,4 +1,4 @@
-; RUN: llc -O0 %s -o /dev/null
+; RUN: llc -O0 -disable-debug-info-verifier %s -o /dev/null
; XFAIL: hexagon
; PR 8235
diff --git a/test/DebugInfo/X86/earlydup-crash.ll b/test/DebugInfo/X86/earlydup-crash.ll
index 5bd0c7e0bb..2ac8b2eed1 100644
--- a/test/DebugInfo/X86/earlydup-crash.ll
+++ b/test/DebugInfo/X86/earlydup-crash.ll
@@ -1,4 +1,4 @@
-; RUN: llc %s -mtriple=i386-apple-macosx10.6.7 -o /dev/null
+; RUN: llc -disable-debug-info-verifier %s -mtriple=i386-apple-macosx10.6.7 -o /dev/null
; This used to crash because early dup was not ignoring debug instructions.
diff --git a/test/DebugInfo/X86/pr12831.ll b/test/DebugInfo/X86/pr12831.ll
index 295c018c5e..43fd53814f 100644
--- a/test/DebugInfo/X86/pr12831.ll
+++ b/test/DebugInfo/X86/pr12831.ll
@@ -1,4 +1,4 @@
-; RUN: llc %s -mtriple=x86_64-unknown-linux-gnu -o /dev/null
+; RUN: llc -disable-debug-info-verifier %s -mtriple=x86_64-unknown-linux-gnu -o /dev/null
target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"
diff --git a/test/DebugInfo/inheritance.ll b/test/DebugInfo/inheritance.ll
index a689cb2281..24eb79ea61 100644
--- a/test/DebugInfo/inheritance.ll
+++ b/test/DebugInfo/inheritance.ll
@@ -1,4 +1,4 @@
-; RUN: llc %s -o /dev/null
+; RUN: llc -disable-debug-info-verifier %s -o /dev/null
; PR 2613.
%struct.__class_type_info_pseudo = type { %struct.__type_info_pseudo }
diff --git a/test/Linker/2011-08-18-unique-class-type.ll b/test/Linker/2011-08-18-unique-class-type.ll
index 328e83bd07..65b5a0acca 100644
--- a/test/Linker/2011-08-18-unique-class-type.ll
+++ b/test/Linker/2011-08-18-unique-class-type.ll
@@ -1,4 +1,4 @@
-; RUN: llvm-link %s %p/2011-08-18-unique-class-type2.ll -S -o - | FileCheck %s
+; RUN: llvm-link -disable-debug-info-verifier %s %p/2011-08-18-unique-class-type2.ll -S -o - | FileCheck %s
; CHECK: DW_TAG_class_type
; CHECK-NOT: DW_TAG_class_type
; Test to check there is only one MDNode for class A after linking.
diff --git a/test/Transforms/LoopRotate/dbgvalue.ll b/test/Transforms/LoopRotate/dbgvalue.ll
index f4b6184604..8b9e2ba52e 100644
--- a/test/Transforms/LoopRotate/dbgvalue.ll
+++ b/test/Transforms/LoopRotate/dbgvalue.ll
@@ -1,4 +1,4 @@
-; RUN: opt -S -loop-rotate < %s | FileCheck %s
+; RUN: opt -S -loop-rotate -disable-debug-info-verifier < %s | FileCheck %s
declare void @llvm.dbg.declare(metadata, metadata) nounwind readnone
declare void @llvm.dbg.value(metadata, i64, metadata) nounwind readnone