summaryrefslogtreecommitdiffstats
path: root/llvm/test/Bitcode
diff options
context:
space:
mode:
authorAdrian Prantl <aprantl@apple.com>2016-04-15 15:57:41 +0000
committerAdrian Prantl <aprantl@apple.com>2016-04-15 15:57:41 +0000
commit75819aedf6d774a424e35793b266442708e57050 (patch)
treee4eabf3bd19e9dee6ed3aefc8f4e2cb16d6bb285 /llvm/test/Bitcode
parente76bda544bbf52d9ff3b55e6018b494a1e6bbc00 (diff)
downloadbcm5719-llvm-75819aedf6d774a424e35793b266442708e57050.tar.gz
bcm5719-llvm-75819aedf6d774a424e35793b266442708e57050.zip
[PR27284] Reverse the ownership between DICompileUnit and DISubprogram.
Currently each Function points to a DISubprogram and DISubprogram has a scope field. For member functions the scope is a DICompositeType. DIScopes point to the DICompileUnit to facilitate type uniquing. Distinct DISubprograms (with isDefinition: true) are not part of the type hierarchy and cannot be uniqued. This change removes the subprograms list from DICompileUnit and instead adds a pointer to the owning compile unit to distinct DISubprograms. This would make it easy for ThinLTO to strip unneeded DISubprograms and their transitively referenced debug info. Motivation ---------- Materializing DISubprograms is currently the most expensive operation when doing a ThinLTO build of clang. We want the DISubprogram to be stored in a separate Bitcode block (or the same block as the function body) so we can avoid having to expensively deserialize all DISubprograms together with the global metadata. If a function has been inlined into another subprogram we need to store a reference the block containing the inlined subprogram. Attached to https://llvm.org/bugs/show_bug.cgi?id=27284 is a python script that updates LLVM IR testcases to the new format. http://reviews.llvm.org/D19034 <rdar://problem/25256815> llvm-svn: 266446
Diffstat (limited to 'llvm/test/Bitcode')
-rw-r--r--llvm/test/Bitcode/DISubprogram-distinct-definitions.ll11
-rw-r--r--llvm/test/Bitcode/DISubprogram-distinct-definitions.ll.bcbin512 -> 656 bytes
-rw-r--r--llvm/test/Bitcode/debug-loc-again.ll5
-rw-r--r--llvm/test/Bitcode/upgrade-subprogram.ll2
4 files changed, 10 insertions, 8 deletions
diff --git a/llvm/test/Bitcode/DISubprogram-distinct-definitions.ll b/llvm/test/Bitcode/DISubprogram-distinct-definitions.ll
index 5c6fb908be9..bcb9a4ec4da 100644
--- a/llvm/test/Bitcode/DISubprogram-distinct-definitions.ll
+++ b/llvm/test/Bitcode/DISubprogram-distinct-definitions.ll
@@ -1,11 +1,14 @@
; RUN: llvm-dis < %s.bc | FileCheck %s
; Check that subprogram definitions are correctly upgraded to 'distinct'.
-; Bitcode compiled from r245235 of the 3.7 release branch.
+; Bitcode compiled with llvm-as version 3.7.
-!named = !{!0}
-!0 = distinct !DICompileUnit(language: 12, file: !1, subprograms: !2)
+define void @f() !dbg !3 { ret void }
+
+!llvm.module.flags = !{!4}
+!llvm.dbg.cu = !{!0}
+!0 = distinct !DICompileUnit(language: 12, file: !1, subprograms: !{!3})
!1 = !DIFile(filename: "path/to/file", directory: "/path/to/dir")
-!2 = !{!3}
; CHECK: = distinct !DISubprogram({{.*}}, isDefinition: true
!3 = !DISubprogram(name: "foo", isDefinition: true)
+!4 = !{i32 2, !"Debug Info Version", i32 3}
diff --git a/llvm/test/Bitcode/DISubprogram-distinct-definitions.ll.bc b/llvm/test/Bitcode/DISubprogram-distinct-definitions.ll.bc
index 600f68facc3..edf31706dad 100644
--- a/llvm/test/Bitcode/DISubprogram-distinct-definitions.ll.bc
+++ b/llvm/test/Bitcode/DISubprogram-distinct-definitions.ll.bc
Binary files differ
diff --git a/llvm/test/Bitcode/debug-loc-again.ll b/llvm/test/Bitcode/debug-loc-again.ll
index de26dd4b593..3bfbd1ff30b 100644
--- a/llvm/test/Bitcode/debug-loc-again.ll
+++ b/llvm/test/Bitcode/debug-loc-again.ll
@@ -30,8 +30,7 @@ entry:
!llvm.dbg.cu = !{!1}
!0 = !{i32 2, !"Debug Info Version", i32 3}
-!1 = distinct !DICompileUnit(language: DW_LANG_C99, file: !DIFile(filename: "f", directory: "/d"),
- subprograms: !{!2})
-!2 = distinct !DISubprogram(name: "foo")
+!1 = distinct !DICompileUnit(language: DW_LANG_C99, file: !DIFile(filename: "f", directory: "/d"))
+!2 = distinct !DISubprogram(name: "foo", unit: !1)
!3 = !DILocation(line: 1, scope: !2)
!4 = !DILocation(line: 2, scope: !2)
diff --git a/llvm/test/Bitcode/upgrade-subprogram.ll b/llvm/test/Bitcode/upgrade-subprogram.ll
index aa915207f1d..fb807ed6daa 100644
--- a/llvm/test/Bitcode/upgrade-subprogram.ll
+++ b/llvm/test/Bitcode/upgrade-subprogram.ll
@@ -10,7 +10,7 @@ define void @foo() {
!0 = !{i32 2, !"Debug Info Version", i32 3}
!llvm.dbg.cu = !{!1}
-!1 = distinct !DICompileUnit(language: DW_LANG_C99, file: !2, subprograms: !{!3}, emissionKind: FullDebug)
+!1 = distinct !DICompileUnit(language: DW_LANG_C99, file: !2, emissionKind: FullDebug)
!2 = !DIFile(filename: "foo.c", directory: "/path/to/dir")
; CHECK: [[SP]] = distinct !DISubprogram
!3 = distinct !DISubprogram(file: !2, scope: !2, line: 51, name: "foo", function: void ()* @foo, type: !4)
OpenPOWER on IntegriCloud