mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-05-28 00:40:54 +00:00
Debug Info Finder: use processDeclare and processValue to list debug info
MDNodes used by DbgDeclareInst and DbgValueInst. Another 16 testing cases failed and they are disabled with -disable-debug-info-verifier. A total of 34 cases are disabled with -disable-debug-info-verifier and will be corrected. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@186902 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
af1d08782b
commit
0e29eeec27
@ -31,6 +31,7 @@ namespace llvm {
|
|||||||
class Type;
|
class Type;
|
||||||
class Value;
|
class Value;
|
||||||
class DbgDeclareInst;
|
class DbgDeclareInst;
|
||||||
|
class DbgValueInst;
|
||||||
class Instruction;
|
class Instruction;
|
||||||
class MDNode;
|
class MDNode;
|
||||||
class NamedMDNode;
|
class NamedMDNode;
|
||||||
@ -734,12 +735,23 @@ namespace llvm {
|
|||||||
/// cleanseInlinedVariable - Remove inlined scope from the variable.
|
/// cleanseInlinedVariable - Remove inlined scope from the variable.
|
||||||
DIVariable cleanseInlinedVariable(MDNode *DV, LLVMContext &VMContext);
|
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 {
|
class DebugInfoFinder {
|
||||||
public:
|
public:
|
||||||
/// processModule - Process entire module and collect debug info
|
/// processModule - Process entire module and collect debug info
|
||||||
/// anchors.
|
/// anchors.
|
||||||
void processModule(const Module &M);
|
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:
|
private:
|
||||||
/// processType - Process DIType.
|
/// processType - Process DIType.
|
||||||
void processType(DIType DT);
|
void processType(DIType DT);
|
||||||
@ -750,9 +762,6 @@ namespace llvm {
|
|||||||
/// processSubprogram - Process DISubprogram.
|
/// processSubprogram - Process DISubprogram.
|
||||||
void processSubprogram(DISubprogram SP);
|
void processSubprogram(DISubprogram SP);
|
||||||
|
|
||||||
/// processDeclare - Process DbgDeclareInst.
|
|
||||||
void processDeclare(const DbgDeclareInst *DDI);
|
|
||||||
|
|
||||||
/// processLocation - Process DILocation.
|
/// processLocation - Process DILocation.
|
||||||
void processLocation(DILocation Loc);
|
void processLocation(DILocation Loc);
|
||||||
|
|
||||||
|
@ -847,6 +847,15 @@ bool llvm::isSubprogramContext(const MDNode *Context) {
|
|||||||
// DebugInfoFinder implementations.
|
// 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.
|
/// processModule - Process entire module and collect debug info.
|
||||||
void DebugInfoFinder::processModule(const Module &M) {
|
void DebugInfoFinder::processModule(const Module &M) {
|
||||||
if (NamedMDNode *CU_Nodes = M.getNamedMetadata("llvm.dbg.cu")) {
|
if (NamedMDNode *CU_Nodes = M.getNamedMetadata("llvm.dbg.cu")) {
|
||||||
@ -970,6 +979,19 @@ void DebugInfoFinder::processDeclare(const DbgDeclareInst *DDI) {
|
|||||||
processType(DIVariable(N).getType());
|
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.
|
/// addType - Add type into Tys.
|
||||||
bool DebugInfoFinder::addType(DIType DT) {
|
bool DebugInfoFinder::addType(DIType DT) {
|
||||||
if (!DT.isValid())
|
if (!DT.isValid())
|
||||||
|
@ -147,6 +147,9 @@ namespace {
|
|||||||
/// the same personality function.
|
/// the same personality function.
|
||||||
const Value *PersonalityFn;
|
const Value *PersonalityFn;
|
||||||
|
|
||||||
|
/// Finder keeps track of all debug info MDNodes in a Module.
|
||||||
|
DebugInfoFinder Finder;
|
||||||
|
|
||||||
Verifier()
|
Verifier()
|
||||||
: FunctionPass(ID), Broken(false),
|
: FunctionPass(ID), Broken(false),
|
||||||
action(AbortProcessAction), Mod(0), Context(0), DT(0),
|
action(AbortProcessAction), Mod(0), Context(0), DT(0),
|
||||||
@ -162,6 +165,7 @@ namespace {
|
|||||||
bool doInitialization(Module &M) {
|
bool doInitialization(Module &M) {
|
||||||
Mod = &M;
|
Mod = &M;
|
||||||
Context = &M.getContext();
|
Context = &M.getContext();
|
||||||
|
Finder.reset();
|
||||||
|
|
||||||
// We must abort before returning back to the pass manager, or else the
|
// 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.
|
// 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));
|
MDNode *MD = cast<MDNode>(CI.getArgOperand(0));
|
||||||
Assert1(MD->getNumOperands() == 1,
|
Assert1(MD->getNumOperands() == 1,
|
||||||
"invalid llvm.dbg.declare intrinsic call 2", &CI);
|
"invalid llvm.dbg.declare intrinsic call 2", &CI);
|
||||||
|
if (!DisableDebugInfoVerifier)
|
||||||
|
Finder.processDeclare(cast<DbgDeclareInst>(&CI));
|
||||||
} break;
|
} 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::memcpy:
|
||||||
case Intrinsic::memmove:
|
case Intrinsic::memmove:
|
||||||
case Intrinsic::memset:
|
case Intrinsic::memset:
|
||||||
@ -2209,7 +2223,6 @@ void Verifier::visitIntrinsicFunctionCall(Intrinsic::ID ID, CallInst &CI) {
|
|||||||
void Verifier::verifyDebugInfo(Module &M) {
|
void Verifier::verifyDebugInfo(Module &M) {
|
||||||
// Verify Debug Info.
|
// Verify Debug Info.
|
||||||
if (!DisableDebugInfoVerifier) {
|
if (!DisableDebugInfoVerifier) {
|
||||||
DebugInfoFinder Finder;
|
|
||||||
Finder.processModule(M);
|
Finder.processModule(M);
|
||||||
|
|
||||||
for (DebugInfoFinder::iterator I = Finder.compile_unit_begin(),
|
for (DebugInfoFinder::iterator I = Finder.compile_unit_begin(),
|
||||||
|
@ -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) {
|
define void @Foo(i32 %a, i32 %b) {
|
||||||
entry:
|
entry:
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
; RUN: llc < %s
|
; RUN: llc -disable-debug-info-verifier < %s
|
||||||
; PR6847
|
; 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 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"
|
target triple = "armv4t-apple-darwin10"
|
||||||
|
@ -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]+}}]
|
; CHECK: @DEBUG_VALUE: mydata <- [SP+{{[0-9]+}}]
|
||||||
; Radar 9331779
|
; 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"
|
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"
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
; RUN: llc -O1 < %s
|
; RUN: llc -O1 -disable-debug-info-verifier < %s
|
||||||
; ModuleID = 'pr6157.bc'
|
; ModuleID = 'pr6157.bc'
|
||||||
; formerly crashed in SelectionDAGBuilder
|
; formerly crashed in SelectionDAGBuilder
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
; RUN: llc -O2 < %s | FileCheck %s
|
; RUN: llc -O2 -disable-debug-info-verifier < %s | FileCheck %s
|
||||||
; RUN: llc -O2 -regalloc=basic < %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.
|
; Test to check that unused argument 'this' is not undefined in debug info.
|
||||||
|
|
||||||
target triple = "x86_64-apple-darwin10.2"
|
target triple = "x86_64-apple-darwin10.2"
|
||||||
|
@ -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
|
; 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"
|
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"
|
||||||
|
@ -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 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"
|
target triple = "x86_64-apple-macosx10.6.7"
|
||||||
;Radar 9321650
|
;Radar 9321650
|
||||||
|
@ -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 {
|
define void @baz(i32 %i) nounwind ssp {
|
||||||
entry:
|
entry:
|
||||||
|
@ -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
|
; Radar 7937664
|
||||||
%struct.AppleEvent = type opaque
|
%struct.AppleEvent = type opaque
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
|
|
||||||
;RUN: llc < %s -o /dev/null
|
;RUN: llc -disable-debug-info-verifier < %s -o /dev/null
|
||||||
;Radar 7937109
|
;Radar 7937109
|
||||||
|
|
||||||
%struct.anon = type { i64, i32, i32, i32, [1 x i32] }
|
%struct.anon = type { i64, i32, i32, i32, [1 x i32] }
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
; RUN: llc -O0 %s -o /dev/null
|
; RUN: llc -O0 -disable-debug-info-verifier %s -o /dev/null
|
||||||
; XFAIL: hexagon
|
; XFAIL: hexagon
|
||||||
; PR 8235
|
; PR 8235
|
||||||
|
|
||||||
|
@ -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.
|
; This used to crash because early dup was not ignoring debug instructions.
|
||||||
|
|
||||||
|
@ -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 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"
|
target triple = "x86_64-unknown-linux-gnu"
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
; RUN: llc %s -o /dev/null
|
; RUN: llc -disable-debug-info-verifier %s -o /dev/null
|
||||||
; PR 2613.
|
; PR 2613.
|
||||||
|
|
||||||
%struct.__class_type_info_pseudo = type { %struct.__type_info_pseudo }
|
%struct.__class_type_info_pseudo = type { %struct.__type_info_pseudo }
|
||||||
|
@ -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: DW_TAG_class_type
|
||||||
; CHECK-NOT: DW_TAG_class_type
|
; CHECK-NOT: DW_TAG_class_type
|
||||||
; Test to check there is only one MDNode for class A after linking.
|
; Test to check there is only one MDNode for class A after linking.
|
||||||
|
@ -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.declare(metadata, metadata) nounwind readnone
|
||||||
declare void @llvm.dbg.value(metadata, i64, metadata) nounwind readnone
|
declare void @llvm.dbg.value(metadata, i64, metadata) nounwind readnone
|
||||||
|
Loading…
x
Reference in New Issue
Block a user