From d4bff30370db9f2cb13838897012768739cf1ee0 Mon Sep 17 00:00:00 2001 From: Peter Collingbourne Date: Thu, 5 Nov 2015 22:03:56 +0000 Subject: DI: Reverse direction of subprogram -> function edge. Previously, subprograms contained a metadata reference to the function they described. Because most clients need to get or set a subprogram for a given function rather than the other way around, this created unneeded inefficiency. For example, many passes needed to call the function llvm::makeSubprogramMap() to build a mapping from functions to subprograms, and the IR linker needed to fix up function references in a way that caused quadratic complexity in the IR linking phase of LTO. This change reverses the direction of the edge by storing the subprogram as function-level metadata and removing DISubprogram's function field. Since this is an IR change, a bitcode upgrade has been provided. Fixes PR23367. An upgrade script for textual IR for out-of-tree clients is attached to the PR. Differential Revision: http://reviews.llvm.org/D14265 llvm-svn: 252219 --- llvm/test/DebugInfo/X86/missing-file-line.ll | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'llvm/test/DebugInfo/X86/missing-file-line.ll') diff --git a/llvm/test/DebugInfo/X86/missing-file-line.ll b/llvm/test/DebugInfo/X86/missing-file-line.ll index 6fbfb94c39d..19064579af3 100644 --- a/llvm/test/DebugInfo/X86/missing-file-line.ll +++ b/llvm/test/DebugInfo/X86/missing-file-line.ll @@ -11,7 +11,7 @@ target triple = "x86_64-unknown-linux-gnu" %struct.S = type { %struct.S* } -define void @f() { +define void @f() !dbg !4 { %x = alloca %struct.S, align 8 ; CHECK: DW_TAG_typedef ; CHECK-NOT: DW_AT_decl_file @@ -40,7 +40,7 @@ declare void @llvm.dbg.declare(metadata, metadata, metadata) #1 !1 = !DIFile(filename: "file.c", directory: "/dir") !2 = !{} !3 = !{!4} -!4 = distinct !DISubprogram(name: "f", scope: !1, file: !1, line: 7, type: !5, isLocal: false, isDefinition: true, scopeLine: 7, isOptimized: false, function: void ()* @f, variables: !2) +!4 = distinct !DISubprogram(name: "f", scope: !1, file: !1, line: 7, type: !5, isLocal: false, isDefinition: true, scopeLine: 7, isOptimized: false, variables: !2) !5 = !DISubroutineType(types: !6) !6 = !{null} !7 = !{i32 2, !"Dwarf Version", i32 4} -- cgit v1.2.3