diff options
Diffstat (limited to 'test/DebugInfo/Generic')
-rw-r--r-- | test/DebugInfo/Generic/2010-01-05-DbgScope.ll | 2 | ||||
-rw-r--r-- | test/DebugInfo/Generic/2010-06-29-InlinedFnLocalVar.ll | 2 | ||||
-rw-r--r-- | test/DebugInfo/Generic/array.ll | 2 | ||||
-rw-r--r-- | test/DebugInfo/Generic/debuginfofinder-inlined-cu.ll | 31 | ||||
-rw-r--r-- | test/DebugInfo/Generic/gmlt_profiling.ll | 32 | ||||
-rw-r--r-- | test/DebugInfo/Generic/invalid.ll | 17 | ||||
-rw-r--r-- | test/DebugInfo/Generic/store-tail-merge.ll | 72 |
7 files changed, 155 insertions, 3 deletions
diff --git a/test/DebugInfo/Generic/2010-01-05-DbgScope.ll b/test/DebugInfo/Generic/2010-01-05-DbgScope.ll index 008fd8fbd637..031d64e17f69 100644 --- a/test/DebugInfo/Generic/2010-01-05-DbgScope.ll +++ b/test/DebugInfo/Generic/2010-01-05-DbgScope.ll @@ -13,7 +13,7 @@ entry: !0 = !DILocation(line: 571, column: 3, scope: !1) !1 = distinct !DILexicalBlock(line: 1, column: 1, file: !11, scope: !2) -!2 = distinct !DISubprogram(name: "foo", linkageName: "foo", line: 561, isLocal: false, isDefinition: true, virtualIndex: 6, isOptimized: false, unit: !3, scope: !3, type: !4) +!2 = distinct !DISubprogram(name: "foo", linkageName: "foo", file: !11, line: 561, isLocal: false, isDefinition: true, virtualIndex: 6, isOptimized: false, unit: !3, scope: !3, type: !4) !3 = distinct !DICompileUnit(language: DW_LANG_C99, producer: "clang 1.1", isOptimized: true, emissionKind: FullDebug, file: !11, enums: !12, retainedTypes: !12) !4 = !DISubroutineType(types: !5) !5 = !{!6} diff --git a/test/DebugInfo/Generic/2010-06-29-InlinedFnLocalVar.ll b/test/DebugInfo/Generic/2010-06-29-InlinedFnLocalVar.ll index 31d3487db7a6..0996cab00da2 100644 --- a/test/DebugInfo/Generic/2010-06-29-InlinedFnLocalVar.ll +++ b/test/DebugInfo/Generic/2010-06-29-InlinedFnLocalVar.ll @@ -1,7 +1,7 @@ ; RUN: %llc_dwarf -O2 %s -o - | FileCheck %s ; Check struct X for dead variable xyz from inlined function foo. -; CHECK: section_info +; CHECK: debug_info, ; CHECK: DW_TAG_structure_type ; CHECK-NEXT: DW_AT_name diff --git a/test/DebugInfo/Generic/array.ll b/test/DebugInfo/Generic/array.ll index 7b4ff7cb805a..c3c592885184 100644 --- a/test/DebugInfo/Generic/array.ll +++ b/test/DebugInfo/Generic/array.ll @@ -25,7 +25,7 @@ declare void @llvm.dbg.declare(metadata, metadata, metadata) nounwind readnone !7 = distinct !DILexicalBlock(line: 3, column: 12, file: !14, scope: !0) !8 = !DICompositeType(tag: DW_TAG_array_type, align: 32, file: !14, scope: !2, baseType: !5, elements: !9) !9 = !{!10} -;CHECK: section_info: +;CHECK: debug_info, ;CHECK: DW_TAG_subrange_type ;CHECK-NEXT: DW_AT_type ;CHECK-NOT: DW_AT_lower_bound diff --git a/test/DebugInfo/Generic/debuginfofinder-inlined-cu.ll b/test/DebugInfo/Generic/debuginfofinder-inlined-cu.ll new file mode 100644 index 000000000000..313e22d84f35 --- /dev/null +++ b/test/DebugInfo/Generic/debuginfofinder-inlined-cu.ll @@ -0,0 +1,31 @@ +; RUN: opt -analyze -module-debuginfo < %s | FileCheck %s + +; Verify that both compile units, even though one compile units's functions +; were entirely inlined into the other. +;CHECK: Compile unit: DW_LANG_C99 from /tmp/test1.c +;CHECK: Compile unit: DW_LANG_C99 from /tmp/test2.c +;CHECK: Subprogram: f from /tmp/test1.c:1 +;CHECK: Subprogram: g from /tmp/test2.c:1 + +define void @f() !dbg !4 { + ret void, !dbg !15 +} + +!llvm.dbg.cu = !{!0, !8} +!llvm.module.flags = !{!13, !16} + +!0 = distinct !DICompileUnit(language: DW_LANG_C99, producer: "clang version 3.4 (192092)", isOptimized: false, emissionKind: FullDebug, file: !1, enums: !2, retainedTypes: !2, globals: !2, imports: !2) +!1 = !DIFile(filename: "test1.c", directory: "/tmp") +!2 = !{} +!4 = distinct !DISubprogram(name: "f", line: 1, isLocal: false, isDefinition: true, virtualIndex: 6, isOptimized: false, unit: !0, scopeLine: 1, file: !1, scope: !5, type: !6, variables: !2) +!5 = !DIFile(filename: "test1.c", directory: "/tmp") +!6 = !DISubroutineType(types: !7) +!7 = !{null} +!8 = distinct !DICompileUnit(language: DW_LANG_C99, producer: "clang version 3.4 (192092)", isOptimized: false, emissionKind: FullDebug, file: !9, enums: !2, retainedTypes: !2, globals: !2, imports: !2) +!9 = !DIFile(filename: "test2.c", directory: "/tmp") +!11 = distinct !DISubprogram(name: "g", line: 1, isLocal: false, isDefinition: true, virtualIndex: 6, isOptimized: false, unit: !8, scopeLine: 1, file: !9, scope: !12, type: !6, variables: !2) +!12 = !DIFile(filename: "test2.c", directory: "/tmp") +!13 = !{i32 2, !"Dwarf Version", i32 4} +!14 = !DILocation(line: 1, scope: !4) +!15 = !DILocation(line: 1, scope: !11, inlinedAt: !14) +!16 = !{i32 1, !"Debug Info Version", i32 3} diff --git a/test/DebugInfo/Generic/gmlt_profiling.ll b/test/DebugInfo/Generic/gmlt_profiling.ll new file mode 100644 index 000000000000..551959caa15e --- /dev/null +++ b/test/DebugInfo/Generic/gmlt_profiling.ll @@ -0,0 +1,32 @@ +; REQUIRES: object-emission +; RUN: %llc_dwarf -O0 -filetype=obj < %S/gmlt_profiling.ll | llvm-dwarfdump - | FileCheck %S/gmlt_profiling.ll + +; CHECK: .debug_info +; CHECK: DW_TAG_subprogram +; CHECK-NOT: DW_TAG +; CHECK: DW_AT_name {{.*}} "f1" +; With debug-info-for-profiling attribute, we need to emit decl_file and +; decl_line of the subprogram. +; CHECK-NEXT: DW_AT_decl_file +; CHECK-NEXT: DW_AT_decl_line + +; Function Attrs: nounwind uwtable +define void @_Z2f1v() !dbg !4 { +entry: + ret void, !dbg !13 +} + +!llvm.dbg.cu = !{!0} +!llvm.module.flags = !{!10, !11} +!llvm.ident = !{!12} + +!0 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, producer: "clang version 3.6.0 ", isOptimized: false, emissionKind: LineTablesOnly, file: !1, enums: !2, retainedTypes: !2, globals: !2, imports: !2, debugInfoForProfiling: true) +!1 = !DIFile(filename: "gmlt.cpp", directory: "/tmp/dbginfo") +!2 = !{} +!4 = distinct !DISubprogram(name: "f1", line: 1, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, unit: !0, scopeLine: 1, file: !1, scope: !5, type: !6, variables: !2) +!5 = !DIFile(filename: "gmlt.cpp", directory: "/tmp/dbginfo") +!6 = !DISubroutineType(types: !2) +!10 = !{i32 2, !"Dwarf Version", i32 4} +!11 = !{i32 2, !"Debug Info Version", i32 3} +!12 = !{!"clang version 3.6.0 "} +!13 = !DILocation(line: 1, column: 12, scope: !4) diff --git a/test/DebugInfo/Generic/invalid.ll b/test/DebugInfo/Generic/invalid.ll new file mode 100644 index 000000000000..fdb68d9cca3f --- /dev/null +++ b/test/DebugInfo/Generic/invalid.ll @@ -0,0 +1,17 @@ +; RUN: not opt -verify %s 2>&1 | FileCheck %s + +; Make sure we emit this diagnostic only once (which means we don't visit the +; same DISubprogram twice. +; CHECK: subprogram definitions must have a compile unit +; CHECK-NEXT: !3 = distinct !DISubprogram(name: "patatino", scope: null, isLocal: false, isDefinition: true, isOptimized: false) +; CHECK-NOT: subprogram definitions must have a compile unit +; CHECK-NOT: !3 = distinct !DISubprogram(name: "patatino", scope: null, isLocal: false, isDefinition: true, isOptimized: false) + +define void @tinkywinky() !dbg !3 { ret void } + +!llvm.module.flags = !{!4} +!llvm.dbg.cu = !{!0} +!0 = distinct !DICompileUnit(language: 12, file: !1) +!1 = !DIFile(filename: "/home/davide", directory: "/home/davide") +!3 = distinct !DISubprogram(name: "patatino", isDefinition: true) +!4 = !{i32 2, !"Debug Info Version", i32 3} diff --git a/test/DebugInfo/Generic/store-tail-merge.ll b/test/DebugInfo/Generic/store-tail-merge.ll new file mode 100644 index 000000000000..624f30416e0f --- /dev/null +++ b/test/DebugInfo/Generic/store-tail-merge.ll @@ -0,0 +1,72 @@ +; RUN: opt -instcombine -S < %s | FileCheck %s +; +; Generated with: +; +; clang -S -gmlt -emit-llvm test.c -o 1.ll +; opt -sroa -S 1.ll -o test.ll +; +; extern int bar(int i); +; extern int bar2(int i); +; +; int foo(int a, int *d) { +; if(a) { +; *d = bar(a); +; } else { +; *d = bar2(a); +; } +; +; return a; +; } +; +; CHECK: define {{.*}}@foo +; CHECK: if.end: +; CHECK-NEXT: %storemerge = phi +; This final check is the "real" test, verify no !dbg on the store. +; CHECK-NEXT: store i32 %storemerge{{.*}}, align 4{{$}} +; +; ModuleID = 'test1.ll' +source_filename = "test.c" +target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" +target triple = "x86_64-unknown-linux-gnu" + +; Function Attrs: noinline nounwind uwtable +define i32 @foo(i32 %a, i32* %d) !dbg !6 { +entry: + %tobool = icmp ne i32 %a, 0, !dbg !8 + br i1 %tobool, label %if.then, label %if.else, !dbg !8 + +if.then: ; preds = %entry + %call = call i32 @bar(i32 %a), !dbg !9 + store i32 %call, i32* %d, align 4, !dbg !10 + br label %if.end, !dbg !11 + +if.else: ; preds = %entry + %call1 = call i32 @bar2(i32 %a), !dbg !12 + store i32 %call1, i32* %d, align 4, !dbg !13 + br label %if.end + +if.end: ; preds = %if.else, %if.then + ret i32 %a, !dbg !14 +} + +declare i32 @bar(i32) + +declare i32 @bar2(i32) + +!llvm.dbg.cu = !{!0} +!llvm.module.flags = !{!3, !4} + +!0 = distinct !DICompileUnit(language: DW_LANG_C99, file: !1, producer: "", isOptimized: false, runtimeVersion: 0, emissionKind: LineTablesOnly, enums: !2) +!1 = !DIFile(filename: "test.c", directory: "/home/probinson/projects/scratch") +!2 = !{} +!3 = !{i32 2, !"Dwarf Version", i32 4} +!4 = !{i32 2, !"Debug Info Version", i32 3} +!6 = distinct !DISubprogram(name: "foo", scope: !1, file: !1, line: 4, type: !7, isLocal: false, isDefinition: true, scopeLine: 4, flags: DIFlagPrototyped, isOptimized: false, unit: !0, variables: !2) +!7 = !DISubroutineType(types: !2) +!8 = !DILocation(line: 5, column: 6, scope: !6) +!9 = !DILocation(line: 6, column: 12, scope: !6) +!10 = !DILocation(line: 6, column: 10, scope: !6) +!11 = !DILocation(line: 7, column: 3, scope: !6) +!12 = !DILocation(line: 8, column: 12, scope: !6) +!13 = !DILocation(line: 8, column: 10, scope: !6) +!14 = !DILocation(line: 10, column: 3, scope: !6) |