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/CodeGen/X86/misched-code-difference-with-debug.ll | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'llvm/test/CodeGen/X86/misched-code-difference-with-debug.ll') diff --git a/llvm/test/CodeGen/X86/misched-code-difference-with-debug.ll b/llvm/test/CodeGen/X86/misched-code-difference-with-debug.ll index 2be1ba62d76..0a1ea830a41 100644 --- a/llvm/test/CodeGen/X86/misched-code-difference-with-debug.ll +++ b/llvm/test/CodeGen/X86/misched-code-difference-with-debug.ll @@ -43,7 +43,7 @@ entry: ; CHECK-LABEL: test_with_debug ; CHECK: movl [[A]], [[B]] ; CHECK-NEXT: movl [[A]], [[C]] -define void @test_with_debug() { +define void @test_with_debug() !dbg !13 { entry: %c = alloca %class.C, align 1 %0 = load i8, i8* @argc, align 1 @@ -75,7 +75,7 @@ declare void @llvm.dbg.value(metadata, i64, metadata, metadata) !10 = !DIDerivedType(baseType: !"_ZTS1C", tag: DW_TAG_pointer_type, size: 64, align: 64, flags: DIFlagArtificial) !11 = !DIBasicType(tag: DW_TAG_base_type, name: "char", size: 8, align: 8, encoding: DW_ATE_signed_char) !12 = !{!13} -!13 = distinct !DISubprogram(name: "test_with_debug", linkageName: "test_with_debug", line: 6, isLocal: false, isDefinition: true, flags: DIFlagPrototyped, isOptimized: true, scopeLine: 6, file: !1, scope: !14, type: !15, function: void ()* @test_with_debug, variables: !17) +!13 = distinct !DISubprogram(name: "test_with_debug", linkageName: "test_with_debug", line: 6, isLocal: false, isDefinition: true, flags: DIFlagPrototyped, isOptimized: true, scopeLine: 6, file: !1, scope: !14, type: !15, variables: !17) !14 = !DIFile(filename: "test.cpp", directory: "") !15 = !DISubroutineType(types: !16) !16 = !{null} -- cgit v1.2.3