[Mlir-commits] [lld] [llvm] [mlir] [DebugInfo] Verify DISubprogram has a type (PR #194556)
Jiang Ning
llvmlistbot at llvm.org
Tue Apr 28 20:12:50 PDT 2026
https://github.com/JiangNingHX updated https://github.com/llvm/llvm-project/pull/194556
>From 57832e58794e4b787469047be6a3efa69fc13e2b Mon Sep 17 00:00:00 2001
From: JiangNing <jiangninghx at foxmail.com>
Date: Tue, 28 Apr 2026 09:50:37 +0800
Subject: [PATCH 1/2] [DebugInfo] Verify DISubprogram has a type
Require DISubprogram metadata to carry a non-null DISubroutineType
in the verifier.
This catches malformed debug info where the type field is omitted or
resolves to null, while preserving the existing wrong-type diagnostic.
Add verifier coverage for missing, null, and invalid type operands.
Also update verify-dwarf-no-operands.ll to keep its DISubprogram
metadata valid under the stricter verifier check.
Fixes #186557
---
llvm/lib/IR/Verifier.cpp | 5 +-
llvm/test/Verifier/DISubprogram-type.ll | 47 +++++++++++++++++++
.../test/Verifier/verify-dwarf-no-operands.ll | 5 +-
3 files changed, 53 insertions(+), 4 deletions(-)
create mode 100644 llvm/test/Verifier/DISubprogram-type.ll
diff --git a/llvm/lib/IR/Verifier.cpp b/llvm/lib/IR/Verifier.cpp
index fe1854384e693..e96730f4d844b 100644
--- a/llvm/lib/IR/Verifier.cpp
+++ b/llvm/lib/IR/Verifier.cpp
@@ -1640,8 +1640,9 @@ void Verifier::visitDISubprogram(const DISubprogram &N) {
CheckDI(isa<DIFile>(F), "invalid file", &N, F);
else
CheckDI(N.getLine() == 0, "line specified with no file", &N, N.getLine());
- if (auto *T = N.getRawType())
- CheckDI(isa<DISubroutineType>(T), "invalid subroutine type", &N, T);
+ auto *T = N.getRawType();
+ CheckDI(T, "DISubprogram requires a non-null type", &N);
+ CheckDI(isa<DISubroutineType>(T), "invalid subroutine type", &N, T);
CheckDI(isType(N.getRawContainingType()), "invalid containing type", &N,
N.getRawContainingType());
if (auto *Params = N.getRawTemplateParams())
diff --git a/llvm/test/Verifier/DISubprogram-type.ll b/llvm/test/Verifier/DISubprogram-type.ll
new file mode 100644
index 0000000000000..55a2082d68cfa
--- /dev/null
+++ b/llvm/test/Verifier/DISubprogram-type.ll
@@ -0,0 +1,47 @@
+; Verify that DISubprogram requires a non-null DISubroutineType for its
+; `type:` field. See https://github.com/llvm/llvm-project/issues/186557.
+
+; RUN: llvm-as -disable-output < %s 2>&1 | FileCheck %s
+
+; CHECK: DISubprogram requires a non-null type
+; CHECK-NEXT: ![[MISSING:[0-9]+]] = distinct !DISubprogram(name: "missing_type"
+; CHECK: DISubprogram requires a non-null type
+; CHECK-NEXT: ![[NULL:[0-9]+]] = distinct !DISubprogram(name: "null_type"
+; CHECK: invalid subroutine type
+; CHECK-NEXT: ![[INVALID:[0-9]+]] = distinct !DISubprogram(name: "invalid_type"
+; CHECK-NEXT: !{{[0-9]+}} = !DIFile(filename: "x.c", directory: "/")
+; CHECK: warning: ignoring invalid debug info
+; CHECK-NOT: valid_void_type
+
+define void @missing_type() !dbg !4 {
+ ret void, !dbg !5
+}
+
+define void @null_type() !dbg !7 {
+ ret void, !dbg !8
+}
+
+define void @invalid_type() !dbg !9 {
+ ret void, !dbg !10
+}
+
+define void @valid_void_type() !dbg !11 {
+ ret void, !dbg !12
+}
+
+!llvm.dbg.cu = !{!0}
+!llvm.module.flags = !{!13}
+
+!0 = distinct !DICompileUnit(language: DW_LANG_C99, file: !1, producer: "clang", emissionKind: FullDebug)
+!1 = !DIFile(filename: "x.c", directory: "/")
+!2 = !{null}
+!3 = !DISubroutineType(types: !2)
+!4 = distinct !DISubprogram(name: "missing_type", scope: !1, file: !1, line: 1, scopeLine: 1, spFlags: DISPFlagDefinition, unit: !0)
+!5 = !DILocation(line: 1, column: 1, scope: !4)
+!7 = distinct !DISubprogram(name: "null_type", scope: !1, file: !1, line: 2, type: null, scopeLine: 2, spFlags: DISPFlagDefinition, unit: !0)
+!8 = !DILocation(line: 2, column: 1, scope: !7)
+!9 = distinct !DISubprogram(name: "invalid_type", scope: !1, file: !1, line: 3, type: !1, scopeLine: 3, spFlags: DISPFlagDefinition, unit: !0)
+!10 = !DILocation(line: 3, column: 1, scope: !9)
+!11 = distinct !DISubprogram(name: "valid_void_type", scope: !1, file: !1, line: 4, type: !3, scopeLine: 4, spFlags: DISPFlagDefinition, unit: !0)
+!12 = !DILocation(line: 4, column: 1, scope: !11)
+!13 = !{i32 1, !"Debug Info Version", i32 3}
diff --git a/llvm/test/Verifier/verify-dwarf-no-operands.ll b/llvm/test/Verifier/verify-dwarf-no-operands.ll
index aaa5c4b6af040..44817eae6cf99 100644
--- a/llvm/test/Verifier/verify-dwarf-no-operands.ll
+++ b/llvm/test/Verifier/verify-dwarf-no-operands.ll
@@ -19,7 +19,8 @@ define linkonce_odr noundef i64 @_ZNK4llvm9StringRef4sizeEv() align 2 !dbg !340
!6 = !{i32 7, !"frame-pointer", i32 1}
!7 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus_14, file: !8, sdk: "MacOSX14.0.sdk")
!8 = !DIFile(filename: "file.cpp", directory: "/Users/Dev", checksumkind: CSK_MD5, checksum: "ed7ae158f20f7914bc5fb843291e80da")
-!12 = distinct !DISubprogram(unit: !7, retainedNodes: !36)
+!12 = distinct !DISubprogram(unit: !7, retainedNodes: !36, type: !400)
!36 = !{}
!284 = distinct !{}
-!340 = distinct !DISubprogram(unit: !7, retainedNodes: !36)
+!340 = distinct !DISubprogram(unit: !7, retainedNodes: !36, type: !400)
+!400 = !DISubroutineType(types: !36)
>From 2479fe23ca738ac933aa37ba6e0f1cef7bce3473 Mon Sep 17 00:00:00 2001
From: JiangNing <jiangninghx at foxmail.com>
Date: Tue, 28 Apr 2026 14:21:38 +0800
Subject: [PATCH 2/2] [DebugInfo] Update tests for DISubprogram type
verification
Add valid DISubroutineType references to tests that construct DISubprogram metadata so the new verifier check does not mask their original coverage.
Refresh the affected bitcode fixtures and unit tests, and keep negative tests focused on their existing diagnostics where possible.
---
lld/test/ELF/lto/pseudo-probe-lto.ll | 4 +-
.../Analysis/LoopAccessAnalysis/debug-loc.ll | 4 +-
.../test/Assembler/dicompositetype-members.ll | 36 ++++----
llvm/test/Assembler/diimportedentity.ll | 18 ++--
llvm/test/Assembler/dilexicalblock.ll | 16 ++--
.../Assembler/dilocalvariable-arg-large.ll | 8 +-
llvm/test/Assembler/dilocalvariable.ll | 14 +--
llvm/test/Assembler/dilocation.ll | 26 +++---
llvm/test/Assembler/disubprogram.ll | 8 +-
llvm/test/Assembler/metadata.ll | 4 +-
.../Bitcode/DILocalVariable-explicit-tags.ll | 18 ++--
.../DILocalVariable-explicit-tags.ll.bc | Bin 628 -> 1924 bytes
.../DISubprogram-distinct-definitions.ll | 13 +--
.../DISubprogram-distinct-definitions.ll.bc | Bin 656 -> 1984 bytes
llvm/test/Bitcode/DISubprogram-v4.ll | 8 +-
llvm/test/Bitcode/DISubprogram-v4.ll.bc | Bin 1336 -> 2204 bytes
llvm/test/Bitcode/debug-loc-again.ll | 4 +-
llvm/test/Bitcode/dityperefs-3.8.ll | 1 -
llvm/test/CodeGen/AArch64/addrsig-macho.ll | 4 +-
.../AArch64/arm64-instruction-mix-remarks.ll | 4 +-
.../AArch64/arm64-opt-remarks-lazy-bfi.ll | 4 +-
.../CodeGen/AArch64/arm64-summary-remarks.ll | 4 +-
llvm/test/CodeGen/AArch64/fast-isel-dbg.ll | 4 +-
llvm/test/CodeGen/AArch64/instr-ref-ldv.ll | 6 +-
.../CodeGen/AMDGPU/GlobalISel/trunc-brc.ll | 4 +-
.../AMDGPU/opencl-printf-unsupported.ll | 4 +-
.../CodeGen/AMDGPU/sched-crash-dbg-value.mir | 6 +-
.../CodeGen/AMDGPU/vi-removed-intrinsics.ll | 4 +-
.../MIR/X86/stack-object-debug-info.mir | 6 +-
.../WebAssembly/lower-em-sjlj-debuginfo.ll | 4 +-
.../basic-block-sections-clusters-error.ll | 5 +-
.../X86/basic-block-sections-module1.ll | 4 +-
.../X86/basic-block-sections-module2.ll | 10 ++-
llvm/test/CodeGen/X86/fixed-stack-di-mir.ll | 6 +-
llvm/test/CodeGen/X86/pr57673.ll | 8 +-
llvm/test/CodeGen/X86/select-optimize.ll | 4 +-
llvm/test/CodeGen/X86/tail-merge-debugloc.ll | 4 +-
.../AMDGPU/bitcast-store-combine-debugloc.ll | 4 +-
.../ARM/move-dbg-value-after-value-list.mir | 22 ++---
.../DebugInfo/ARM/move-dbg-value-lists.mir | 24 ++---
.../DebugInfo/ARM/move-dbg-value-same-reg.mir | 4 +-
llvm/test/DebugInfo/ARM/move-dbg-values.mir | 22 ++---
.../Generic/2010-03-19-DbgDeclare.ll | 4 +-
.../Generic/dbg-value-lower-linenos.ll | 8 +-
.../Generic/debuginfofinder-retained-nodes.ll | 8 +-
llvm/test/DebugInfo/Generic/invalid.ll | 12 +--
.../DebugInfo/Generic/sroa-extract-bits.ll | 6 +-
.../Generic/verifier-invalid-disubprogram.ll | 34 +++----
.../MIR/X86/dbgcall-site-interpretation.mir | 2 +-
.../X86/dbgcall-site-lea-interpretation.mir | 4 +-
.../DebugInfo/MIR/X86/dbginfo-entryvals.mir | 2 +-
.../MIR/X86/debug-call-site-param.mir | 4 +-
llvm/test/DebugInfo/MIR/X86/machine-cse.mir | 6 +-
.../DebugInfo/X86/instr-ref-opt-bisect2.ll | 4 +-
llvm/test/DebugInfo/X86/pr40427.ll | 4 +-
llvm/test/DebugInfo/X86/sunk-compare.ll | 4 +-
llvm/test/DebugInfo/sroa-handle-dbg-value.ll | 4 +-
.../AddressSanitizer/stack_layout.ll | 6 +-
.../AArch64/combine_ignore_debug.ll | 4 +-
.../pr33641_remove_arg_dbgvalue.ll | 6 +-
.../Attributor/ArgumentPromotion/dbg.ll | 8 +-
.../pr33641_remove_arg_dbgvalue.ll | 6 +-
.../CallSiteSplitting/callsite-split-debug.ll | 4 +-
.../X86/cast-debuginfo-salvage.ll | 6 +-
.../Transforms/Coroutines/declare-value.ll | 8 +-
llvm/test/Transforms/Inline/debug-invoke.ll | 4 +-
llvm/test/Transforms/InstCombine/assume.ll | 4 +-
.../InstCombine/consecutive-fences.ll | 4 +-
.../Transforms/LICM/hoist-phi-metadata.ll | 6 +-
.../Transforms/LoopDistribute/debug-loc.ll | 4 +-
.../test/Transforms/LoopVectorize/debugloc.ll | 4 +-
.../Transforms/LoopVectorize/discriminator.ll | 4 +-
.../dbg_declare_to_value_conversions.ll | 4 +-
.../memprof_annotate_indirect_call.test | 8 +-
.../PGOProfile/memprof_annotate_yaml.test | 4 +-
.../memprof_max_cold_threshold.test | 4 +-
.../SLPVectorizer/X86/debug-info-salvage.ll | 6 +-
.../SLPVectorizer/X86/phi-node-deletion.ll | 6 +-
.../X86/schedule_budget_debug_info.ll | 4 +-
llvm/test/Transforms/SROA/dbg-single-piece.ll | 4 +-
.../SampleProfile/cold-indirect-call.ll | 8 +-
.../SampleProfile/csspgo-inline-icall.ll | 12 +--
.../Transforms/SampleProfile/early-inline.ll | 10 ++-
.../SampleProfile/function_metadata.ll | 2 +-
.../SampleProfile/indirect-call-gcc.ll | 4 +-
.../Transforms/SampleProfile/indirect-call.ll | 44 ++++-----
.../SampleProfile/inline-callee-update.ll | 10 ++-
.../X86/hoist-loads-stores-with-cf.ll | 4 +-
.../SimplifyCFG/X86/remove-debug.ll | 2 +-
llvm/test/Transforms/SimplifyCFG/pr39807.ll | 6 +-
.../SimplifyCFG/tail-merge-noreturn.ll | 4 +-
.../Transforms/StripSymbols/find-live-cu.ll | 6 +-
.../Util/trivial-auto-var-init-call.ll | 4 +-
.../Util/trivial-auto-var-init-store.ll | 4 +-
.../Util/trivial-auto-var-init-unknown.ll | 4 +-
.../WholeProgramDevirt/devirt-single-impl.ll | 10 ++-
...le_after_filtering_unreachable_function.ll | 4 +-
.../speculative-devirt-single-impl.ll | 14 +--
.../X86/stats-dbg-callsite-info.ll | 4 +-
llvm/unittests/IR/DebugInfoTest.cpp | 10 ++-
llvm/unittests/IR/ModuleTest.cpp | 8 +-
llvm/unittests/IR/VerifierTest.cpp | 3 +-
.../Transforms/Utils/CloningTest.cpp | 30 ++++---
.../LLVMIR/di-expression-legalization.mlir | 4 +-
mlir/test/Target/LLVMIR/Import/debug-info.ll | 85 +++++++++++++-----
mlir/test/Target/LLVMIR/Import/exception.ll | 6 +-
.../Target/LLVMIR/Import/import-failure.ll | 4 +-
.../Target/LLVMIR/Import/metadata-loop.ll | 4 +-
mlir/test/Target/LLVMIR/llvmir-debug.mlir | 45 ++++++----
mlir/test/Target/LLVMIR/loop-metadata.mlir | 4 +-
.../test/mlir-translate/import-diagnostics.ll | 4 +-
111 files changed, 600 insertions(+), 340 deletions(-)
diff --git a/lld/test/ELF/lto/pseudo-probe-lto.ll b/lld/test/ELF/lto/pseudo-probe-lto.ll
index cabd69da33fe2..fbd61adc103c5 100644
--- a/lld/test/ELF/lto/pseudo-probe-lto.ll
+++ b/lld/test/ELF/lto/pseudo-probe-lto.ll
@@ -30,7 +30,9 @@ entry:
!0 = distinct !DICompileUnit(language: DW_LANG_C99, file: !1)
!1 = !DIFile(filename: "test.c", directory: "")
-!4 = distinct !DISubprogram(name: "foo", scope: !1, file: !1, line: 2, unit: !0)
+!4 = distinct !DISubprogram(name: "foo", scope: !1, file: !1, line: 2, type: !14, unit: !0)
!9 = !{i32 2, !"Dwarf Version", i32 4}
!10 = !{i32 2, !"Debug Info Version", i32 3}
!13 = !DILocation(line: 2, column: 20, scope: !4)
+!14 = !DISubroutineType(types: !15)
+!15 = !{null}
diff --git a/llvm/test/Analysis/LoopAccessAnalysis/debug-loc.ll b/llvm/test/Analysis/LoopAccessAnalysis/debug-loc.ll
index 320a543d9b3cf..6edb4965a802c 100644
--- a/llvm/test/Analysis/LoopAccessAnalysis/debug-loc.ll
+++ b/llvm/test/Analysis/LoopAccessAnalysis/debug-loc.ll
@@ -26,9 +26,11 @@ exit:
!llvm.module.flags = !{!5, !6, !7}
!0 = !DIFile(filename: "negative_step.c", directory: "/")
-!1 = distinct !DISubprogram(name: "negative_step", scope: !0, file: !0, unit: !4)
+!1 = distinct !DISubprogram(name: "negative_step", scope: !0, file: !0, type: !8, unit: !4)
!2 = !DILocation(line: 5, column: 2, scope: !1)
!4 = distinct !DICompileUnit(language: DW_LANG_C99, file: !0, producer: "clang")
!5 = !{i32 1, !"Debug Info Version", i32 3}
!6 = !{i32 2, !"Dwarf Version", i32 2}
!7 = !{i32 1, !"PIC Level", i32 2}
+!8 = !DISubroutineType(types: !9)
+!9 = !{null}
diff --git a/llvm/test/Assembler/dicompositetype-members.ll b/llvm/test/Assembler/dicompositetype-members.ll
index f5471bda840cc..c69bc1413ae9b 100644
--- a/llvm/test/Assembler/dicompositetype-members.ll
+++ b/llvm/test/Assembler/dicompositetype-members.ll
@@ -16,39 +16,43 @@
; CHECK-NEXT: !3 = !DICompositeType(tag: DW_TAG_structure_type, name: "has-uuid",{{.*}}, identifier: "uuid")
; CHECK-NEXT: !4 = !DIDerivedType(tag: DW_TAG_member, name: "field1", scope: !3, file: !1
; CHECK-NEXT: !5 = !DIDerivedType(tag: DW_TAG_member, name: "field2", scope: !3, file: !1
-; CHECK-NEXT: !6 = !DISubprogram(name: "foo", linkageName: "foo1", scope: !3, file: !1
-; CHECK-NEXT: !7 = !DISubprogram(name: "foo", linkageName: "foo2", scope: !3, file: !1
+; CHECK-NEXT: !6 = !DISubprogram(name: "foo", linkageName: "foo1", scope: !3, file: !1, type: !7, spFlags: 0)
+; CHECK-NEXT: !7 = !DISubroutineType(types: !8)
+; CHECK-NEXT: !8 = !{null}
+; CHECK-NEXT: !9 = !DISubprogram(name: "foo", linkageName: "foo2", scope: !3, file: !1, type: !7, spFlags: 0)
!3 = !DICompositeType(tag: DW_TAG_structure_type, name: "has-uuid", file: !1, line: 2, size: 64, align: 32, identifier: "uuid")
!4 = !DIDerivedType(tag: DW_TAG_member, name: "field1", scope: !3, file: !1, line: 4, baseType: !0, size: 32, align: 32, offset: 32)
!5 = !DIDerivedType(tag: DW_TAG_member, name: "field2", scope: !3, file: !1, line: 4, baseType: !0, size: 32, align: 32, offset: 32)
-!6 = !DISubprogram(name: "foo", linkageName: "foo1", scope: !3, file: !1, isDefinition: false)
-!7 = !DISubprogram(name: "foo", linkageName: "foo2", scope: !3, file: !1, isDefinition: false)
+!6 = !DISubprogram(name: "foo", linkageName: "foo1", scope: !3, file: !1, isDefinition: false, type: !18)
+!7 = !DISubprogram(name: "foo", linkageName: "foo2", scope: !3, file: !1, isDefinition: false, type: !18)
+!18 = !DISubroutineType(types: !19)
+!19 = !{null}
; Define an un-identified type with fields and functions.
-; CHECK-NEXT: !8 = !DICompositeType(tag: DW_TAG_structure_type, name: "no-uuid", file: !1
-; CHECK-NEXT: !9 = !DIDerivedType(tag: DW_TAG_member, name: "field1", scope: !8, file: !1
-; CHECK-NEXT: !10 = !DIDerivedType(tag: DW_TAG_member, name: "field2", scope: !8, file: !1
-; CHECK-NEXT: !11 = !DISubprogram(name: "foo", linkageName: "foo1", scope: !8, file: !1
-; CHECK-NEXT: !12 = !DISubprogram(name: "foo", linkageName: "foo2", scope: !8, file: !1
+; CHECK-NEXT: !10 = !DICompositeType(tag: DW_TAG_structure_type, name: "no-uuid", file: !1
+; CHECK-NEXT: !11 = !DIDerivedType(tag: DW_TAG_member, name: "field1", scope: !10, file: !1
+; CHECK-NEXT: !12 = !DIDerivedType(tag: DW_TAG_member, name: "field2", scope: !10, file: !1
+; CHECK-NEXT: !13 = !DISubprogram(name: "foo", linkageName: "foo1", scope: !10, file: !1, type: !7, spFlags: 0)
+; CHECK-NEXT: !14 = !DISubprogram(name: "foo", linkageName: "foo2", scope: !10, file: !1, type: !7, spFlags: 0)
!8 = !DICompositeType(tag: DW_TAG_structure_type, name: "no-uuid", file: !1, line: 2, size: 64, align: 32)
!9 = !DIDerivedType(tag: DW_TAG_member, name: "field1", scope: !8, file: !1, line: 4, baseType: !0, size: 32, align: 32, offset: 32)
!10 = !DIDerivedType(tag: DW_TAG_member, name: "field2", scope: !8, file: !1, line: 4, baseType: !0, size: 32, align: 32, offset: 32)
-!11 = !DISubprogram(name: "foo", linkageName: "foo1", scope: !8, file: !1, isDefinition: false)
-!12 = !DISubprogram(name: "foo", linkageName: "foo2", scope: !8, file: !1, isDefinition: false)
+!11 = !DISubprogram(name: "foo", linkageName: "foo1", scope: !8, file: !1, isDefinition: false, type: !18)
+!12 = !DISubprogram(name: "foo", linkageName: "foo2", scope: !8, file: !1, isDefinition: false, type: !18)
; Add duplicate fields and members of "no-uuid" in a different file. These
; should stick around, since "no-uuid" does not have an "identifier:" field.
-; CHECK-NEXT: !13 = !DIDerivedType(tag: DW_TAG_member, name: "field1", scope: !8, file: !2,
-; CHECK-NEXT: !14 = !DISubprogram(name: "foo", linkageName: "foo1", scope: !8, file: !2,
+; CHECK-NEXT: !15 = !DIDerivedType(tag: DW_TAG_member, name: "field1", scope: !10, file: !2,
+; CHECK-NEXT: !16 = !DISubprogram(name: "foo", linkageName: "foo1", scope: !10, file: !2, type: !7, spFlags: 0)
!13 = !DIDerivedType(tag: DW_TAG_member, name: "field1", scope: !8, file: !2, line: 4, baseType: !0, size: 32, align: 32, offset: 32)
-!14 = !DISubprogram(name: "foo", linkageName: "foo1", scope: !8, file: !2, isDefinition: false)
+!14 = !DISubprogram(name: "foo", linkageName: "foo1", scope: !8, file: !2, isDefinition: false, type: !18)
; Add duplicate fields and members of "has-uuid" in a different file. These
; should be merged.
!15 = !DIDerivedType(tag: DW_TAG_member, name: "field1", scope: !3, file: !2, line: 4, baseType: !0, size: 32, align: 32, offset: 32)
-!16 = !DISubprogram(name: "foo", linkageName: "foo1", scope: !3, file: !2, isDefinition: false)
+!16 = !DISubprogram(name: "foo", linkageName: "foo1", scope: !3, file: !2, isDefinition: false, type: !18)
-; CHECK-NEXT: !15 = !{!4, !6}
+; CHECK-NEXT: !17 = !{!4, !6}
; CHECK-NOT: !DIDerivedType
; CHECK-NOT: !DISubprogram
!17 = !{!15, !16}
diff --git a/llvm/test/Assembler/diimportedentity.ll b/llvm/test/Assembler/diimportedentity.ll
index 6a0e1eb931c1a..a5c76afcca218 100644
--- a/llvm/test/Assembler/diimportedentity.ll
+++ b/llvm/test/Assembler/diimportedentity.ll
@@ -1,28 +1,34 @@
; RUN: llvm-as < %s | llvm-dis | llvm-as | llvm-dis | FileCheck %s
; RUN: verify-uselistorder %s
-; CHECK: !named = !{!0, !3, !4, !5, !5}
+; CHECK: !named = !{!0, !5, !6, !7, !7}
!named = !{!0, !3, !4, !5, !6}
!llvm.module.flags = !{!7}
!llvm.dbg.cu = !{!1}
-; CHECK: !0 = distinct !DISubprogram({{.*}})
-!0 = distinct !DISubprogram(name: "foo", isDefinition: true, unit: !1)
+; CHECK: !0 = distinct !DISubprogram({{.*}}, type: !1{{.*}})
+!0 = distinct !DISubprogram(name: "foo", isDefinition: true, unit: !1, type: !8)
+!8 = !DISubroutineType(types: !9)
+!9 = !{null}
!1 = distinct !DICompileUnit(language: DW_LANG_C99, producer: "clang",
file: !2,
isOptimized: true, flags: "-O2",
splitDebugFilename: "abc.debug", emissionKind: 2)
!2 = !DIFile(filename: "path/to/file", directory: "/path/to/dir")
-; CHECK: !3 = !DICompositeType({{.*}})
+; CHECK: !1 = !DISubroutineType(types: !2)
+; CHECK: !2 = !{null}
+; CHECK: !3 = distinct !DICompileUnit
+; CHECK: !4 = !DIFile
+; CHECK: !5 = !DICompositeType({{.*}})
!3 = !DICompositeType(tag: DW_TAG_structure_type, name: "Class", size: 32, align: 32)
-; CHECK-NEXT: !4 = !DIImportedEntity(tag: DW_TAG_imported_module, name: "foo", scope: !0, entity: !1, file: !2, line: 7)
+; CHECK-NEXT: !6 = !DIImportedEntity(tag: DW_TAG_imported_module, name: "foo", scope: !0, entity: !3, file: !4, line: 7)
!4 = !DIImportedEntity(tag: DW_TAG_imported_module, name: "foo", scope: !0,
entity: !1, file: !2, line: 7)
-; CHECK-NEXT: !5 = !DIImportedEntity(tag: DW_TAG_imported_module, scope: !0)
+; CHECK-NEXT: !7 = !DIImportedEntity(tag: DW_TAG_imported_module, scope: !0)
!5 = !DIImportedEntity(tag: DW_TAG_imported_module, scope: !0)
!6 = !DIImportedEntity(tag: DW_TAG_imported_module, name: "", scope: !0, entity: null,
line: 0)
diff --git a/llvm/test/Assembler/dilexicalblock.ll b/llvm/test/Assembler/dilexicalblock.ll
index 77a8650830d4d..29cca5b9aa2b3 100644
--- a/llvm/test/Assembler/dilexicalblock.ll
+++ b/llvm/test/Assembler/dilexicalblock.ll
@@ -1,7 +1,7 @@
; RUN: llvm-as < %s | llvm-dis | llvm-as | llvm-dis | FileCheck %s
; RUN: verify-uselistorder %s
-; CHECK: !named = !{!0, !1, !2, !3, !4, !4, !5, !6, !7, !7, !8}
+; CHECK: !named = !{!0, !1, !2, !5, !6, !6, !7, !8, !9, !9, !10}
!named = !{!0, !1, !2, !3, !4, !5, !6, !7, !8, !9, !10}
!llvm.module.flags = !{!11}
@@ -12,21 +12,23 @@
isOptimized: true, flags: "-O2",
splitDebugFilename: "abc.debug", emissionKind: 2)
!1 = !DIFile(filename: "path/to/file", directory: "/path/to/dir")
-!2 = distinct !DISubprogram(name: "foo", scope: !1, unit: !0)
+!2 = distinct !DISubprogram(name: "foo", scope: !1, unit: !0, type: !12)
+!12 = !DISubroutineType(types: !13)
+!13 = !{null}
-; CHECK: !3 = !DILexicalBlock(scope: !2, file: !1, line: 7, column: 35)
+; CHECK: !5 = !DILexicalBlock(scope: !2, file: !1, line: 7, column: 35)
!3 = !DILexicalBlock(scope: !2, file: !1, line: 7, column: 35)
-; CHECK: !4 = !DILexicalBlock(scope: !2)
+; CHECK: !6 = !DILexicalBlock(scope: !2)
!4 = !DILexicalBlock(scope: !2)
!5 = !DILexicalBlock(scope: !2, file: null, line: 0, column: 0)
-; CHECK: !5 = !DILexicalBlockFile(scope: !3, file: !1, discriminator: 0)
-; CHECK: !6 = !DILexicalBlockFile(scope: !3, file: !1, discriminator: 1)
+; CHECK: !7 = !DILexicalBlockFile(scope: !5, file: !1, discriminator: 0)
+; CHECK: !8 = !DILexicalBlockFile(scope: !5, file: !1, discriminator: 1)
!6 = !DILexicalBlockFile(scope: !3, file: !1, discriminator: 0)
!7 = !DILexicalBlockFile(scope: !3, file: !1, discriminator: 1)
-; CHECK: !7 = !DILexicalBlockFile(scope: !3, discriminator: 7)
+; CHECK: !9 = !DILexicalBlockFile(scope: !5, discriminator: 7)
!8 = !DILexicalBlockFile(scope: !3, discriminator: 7)
!9 = !DILexicalBlockFile(scope: !3, file: null, discriminator: 7)
!10 = distinct !{}
diff --git a/llvm/test/Assembler/dilocalvariable-arg-large.ll b/llvm/test/Assembler/dilocalvariable-arg-large.ll
index 91cf0e2c00e71..e4bbdb1c480b4 100644
--- a/llvm/test/Assembler/dilocalvariable-arg-large.ll
+++ b/llvm/test/Assembler/dilocalvariable-arg-large.ll
@@ -1,20 +1,22 @@
; RUN: llvm-as < %s | llvm-dis | llvm-as | llvm-dis | FileCheck %s
; RUN: verify-uselistorder %s
-; CHECK: !named = !{!0, !3}
+; CHECK: !named = !{!0, !5}
!named = !{!0, !3}
!llvm.module.flags = !{!4}
!llvm.dbg.cu = !{!1}
-!0 = distinct !DISubprogram(unit: !1)
+!0 = distinct !DISubprogram(unit: !1, type: !5)
!1 = distinct !DICompileUnit(language: DW_LANG_C99, producer: "clang",
file: !2,
isOptimized: true, flags: "-O2",
splitDebugFilename: "abc.debug", emissionKind: 2)
!2 = !DIFile(filename: "path/to/file", directory: "/path/to/dir")
-; CHECK: !3 = !DILocalVariable(name: "foo", arg: 65535, scope: !0)
+; CHECK: !5 = !DILocalVariable(name: "foo", arg: 65535, scope: !0)
!3 = !DILocalVariable(name: "foo", arg: 65535, scope: !0)
!4 = !{i32 2, !"Debug Info Version", i32 3}
+!5 = !DISubroutineType(types: !6)
+!6 = !{null}
diff --git a/llvm/test/Assembler/dilocalvariable.ll b/llvm/test/Assembler/dilocalvariable.ll
index 067afaa2f3005..de8f93363f7d9 100644
--- a/llvm/test/Assembler/dilocalvariable.ll
+++ b/llvm/test/Assembler/dilocalvariable.ll
@@ -3,13 +3,13 @@
@foo = global i32 0
-; CHECK: !named = !{!0, !1, !2, !3, !4, !5, !6, !7, !8, !9}
+; CHECK: !named = !{!0, !3, !4, !5, !6, !7, !8, !9, !10, !11}
!named = !{!0, !1, !2, !3, !4, !5, !6, !7, !8, !9}
!llvm.module.flags = !{!10}
!llvm.dbg.cu = !{!1}
-!0 = distinct !DISubprogram(unit: !1)
+!0 = distinct !DISubprogram(unit: !1, type: !11)
!1 = distinct !DICompileUnit(language: DW_LANG_C99, producer: "clang",
file: !2,
isOptimized: true, flags: "-O2",
@@ -18,18 +18,20 @@
!3 = !DIBasicType(name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
!4 = !DILocation(scope: !0)
-; CHECK: !5 = !DILocalVariable(name: "foo", arg: 3, scope: !0, file: !2, line: 7, type: !3, flags: DIFlagArtificial, align: 32)
-; CHECK: !6 = !DILocalVariable(name: "foo", scope: !0, file: !2, line: 7, type: !3, flags: DIFlagArtificial)
+; CHECK: !7 = !DILocalVariable(name: "foo", arg: 3, scope: !0, file: !4, line: 7, type: !5, flags: DIFlagArtificial, align: 32)
+; CHECK: !8 = !DILocalVariable(name: "foo", scope: !0, file: !4, line: 7, type: !5, flags: DIFlagArtificial)
!5 = !DILocalVariable(name: "foo", arg: 3,
scope: !0, file: !2, line: 7, type: !3,
flags: DIFlagArtificial, align: 32)
!6 = !DILocalVariable(name: "foo", scope: !0,
file: !2, line: 7, type: !3, flags: DIFlagArtificial)
-; CHECK: !7 = !DILocalVariable(arg: 1, scope: !0)
-; CHECK: !8 = !DILocalVariable(scope: !0)
+; CHECK: !9 = !DILocalVariable(arg: 1, scope: !0)
+; CHECK: !10 = !DILocalVariable(scope: !0)
!7 = !DILocalVariable(scope: !0, arg: 1)
!8 = !DILocalVariable(scope: !0)
!9 = distinct !{}
!10 = !{i32 2, !"Debug Info Version", i32 3}
+!11 = !DISubroutineType(types: !12)
+!12 = !{null}
diff --git a/llvm/test/Assembler/dilocation.ll b/llvm/test/Assembler/dilocation.ll
index 4eb46e50597a7..5251366b09c76 100644
--- a/llvm/test/Assembler/dilocation.ll
+++ b/llvm/test/Assembler/dilocation.ll
@@ -1,40 +1,44 @@
; RUN: llvm-as < %s | llvm-dis | FileCheck %s
; RUN: verify-uselistorder %s
-; CHECK: !named = !{!0, !2, !3, !3, !4, !4, !5, !5, !6, !7, !8}
+; CHECK: !named = !{!0, !4, !5, !5, !6, !6, !7, !7, !8, !9, !10}
!named = !{!0, !2, !3, !4, !5, !6, !7, !8, !9, !10, !11}
!llvm.module.flags = !{!12}
!llvm.dbg.cu = !{!1}
-; CHECK: !0 = distinct !DISubprogram(
-!0 = distinct !DISubprogram(unit: !1)
-; CHECK: !1 = distinct !DICompileUnit
+; CHECK: !0 = distinct !DISubprogram(scope: null, type: !1, spFlags: DISPFlagDefinition, unit: !3)
+!0 = distinct !DISubprogram(unit: !1, type: !13)
+; CHECK: !1 = !DISubroutineType(types: !2)
+; CHECK: !2 = !{null}
+; CHECK: !3 = distinct !DICompileUnit
!1 = distinct !DICompileUnit(language: DW_LANG_C99, producer: "clang",
file: !2,
isOptimized: true, flags: "-O2",
splitDebugFilename: "abc.debug", emissionKind: 2)
-; CHECK: !2 = !DIFile
+; CHECK: !4 = !DIFile
!2 = !DIFile(filename: "path/to/file", directory: "/path/to/dir")
-; CHECK-NEXT: !3 = !DILocation(line: 3, column: 7, scope: !0)
+; CHECK: !5 = !DILocation(line: 3, column: 7, scope: !0)
!3 = !DILocation(line: 3, column: 7, scope: !0)
!4 = !DILocation(scope: !0, column: 7, line: 3)
-; CHECK-NEXT: !4 = !DILocation(line: 3, column: 7, scope: !0, inlinedAt: !3)
+; CHECK: !6 = !DILocation(line: 3, column: 7, scope: !0, inlinedAt: !5)
!5 = !DILocation(scope: !0, inlinedAt: !3, column: 7, line: 3)
!6 = !DILocation(column: 7, line: 3, scope: !0, inlinedAt: !3)
-; CHECK-NEXT: !5 = !DILocation(line: 0, scope: !0)
+; CHECK: !7 = !DILocation(line: 0, scope: !0)
!7 = !DILocation(scope: !0)
!8 = !DILocation(scope: !0, column: 0, line: 0)
-; CHECK-NEXT: !6 = !DILocation(line: 4294967295, column: 65535, scope: !0)
+; CHECK: !8 = !DILocation(line: 4294967295, column: 65535, scope: !0)
!9 = !DILocation(line: 4294967295, column: 65535, scope: !0)
!10 = !DILocation(scope: !0, column: 0, line: 0, isImplicitCode: true)
!11 = !DILocation(scope: !0, column: 0, line: 1, isImplicitCode: false)
-; CHECK-NEXT: !7 = !DILocation(line: 0, scope: !0, isImplicitCode: true)
-; CHECK-NEXT: !8 = !DILocation(line: 1, scope: !0)
+; CHECK: !9 = !DILocation(line: 0, scope: !0, isImplicitCode: true)
+; CHECK: !10 = !DILocation(line: 1, scope: !0)
!12 = !{i32 2, !"Debug Info Version", i32 3}
+!13 = !DISubroutineType(types: !14)
+!14 = !{null}
diff --git a/llvm/test/Assembler/disubprogram.ll b/llvm/test/Assembler/disubprogram.ll
index 99a747d15e7dd..aa2ec67050d64 100644
--- a/llvm/test/Assembler/disubprogram.ll
+++ b/llvm/test/Assembler/disubprogram.ll
@@ -17,16 +17,16 @@ define void @_Z3foov() !dbg !9 {
!5 = distinct !{}
!6 = distinct !{}
-; CHECK: !7 = distinct !DISubprogram(scope: null, spFlags: DISPFlagDefinition, unit: !8)
-!7 = distinct !DISubprogram(unit: !8)
+; CHECK: !7 = distinct !DISubprogram(scope: null, type: !3, spFlags: DISPFlagDefinition, unit: !8)
+!7 = distinct !DISubprogram(unit: !8, type: !3)
!8 = distinct !DICompileUnit(language: DW_LANG_C99, producer: "clang",
file: !2,
isOptimized: true, flags: "-O2",
splitDebugFilename: "abc.debug", emissionKind: 2)
-; CHECK: !9 = distinct !DISubprogram(scope: null, spFlags: 0)
-!9 = distinct !DISubprogram(isDefinition: false)
+; CHECK: !9 = distinct !DISubprogram(scope: null, type: !3, spFlags: 0)
+!9 = distinct !DISubprogram(isDefinition: false, type: !3)
; CHECK: !10 = distinct !DISubprogram(name: "foo", linkageName: "_Zfoov", scope: !1, file: !2, line: 7, type: !3, scopeLine: 8, containingType: !4, virtualIndex: 10, thisAdjustment: 3, flags: DIFlagPrototyped | DIFlagNoReturn, spFlags: DISPFlagPureVirtual | DISPFlagLocalToUnit | DISPFlagDefinition | DISPFlagOptimized, unit: !8, templateParams: !5, declaration: !9, retainedNodes: !6)
!10 = distinct !DISubprogram(name: "foo", linkageName: "_Zfoov", scope: !1,
diff --git a/llvm/test/Assembler/metadata.ll b/llvm/test/Assembler/metadata.ll
index b1fb720eb31f9..6ad78c21c33ac 100644
--- a/llvm/test/Assembler/metadata.ll
+++ b/llvm/test/Assembler/metadata.ll
@@ -47,10 +47,12 @@ define void @test_attachment_name() {
; CHECK: [[M1]] = distinct !DISubprogram
; CHECK: [[M4]] = distinct !{}
+!8 = !{null}
+!9 = !DISubroutineType(types: !8)
!llvm.module.flags = !{!7}
!llvm.dbg.cu = !{!5}
!0 = !DILocation(line: 662302, column: 26, scope: !1)
-!1 = distinct !DISubprogram(name: "foo", isDefinition: true, unit: !5)
+!1 = distinct !DISubprogram(name: "foo", isDefinition: true, type: !9, unit: !5)
!2 = distinct !{}
!3 = distinct !{}
!4 = distinct !{}
diff --git a/llvm/test/Bitcode/DILocalVariable-explicit-tags.ll b/llvm/test/Bitcode/DILocalVariable-explicit-tags.ll
index a42884cc42728..20dc66cd8349b 100644
--- a/llvm/test/Bitcode/DILocalVariable-explicit-tags.ll
+++ b/llvm/test/Bitcode/DILocalVariable-explicit-tags.ll
@@ -1,9 +1,11 @@
-; Bitcode compiled with 3.7_rc2. 3.7 had redundant (but mandatory) tag fields
-; on DILocalVariable.
+; Bitcode originally compiled with 3.7_rc2. 3.7 had redundant (but
+; mandatory) tag fields on DILocalVariable.
;
; RUN: llvm-dis < %s.bc -o - | llvm-as | llvm-dis | FileCheck %s
-; CHECK: ![[SP:[0-9]+]] = distinct !DISubprogram(name: "foo",{{.*}} retainedNodes: ![[VARS:[0-9]+]]
+; CHECK: ![[SP:[0-9]+]] = distinct !DISubprogram(name: "foo",{{.*}} type: ![[TYPE:[0-9]+]],{{.*}} retainedNodes: ![[VARS:[0-9]+]]
+; CHECK: ![[TYPE]] = !DISubroutineType(types: ![[ARGS:[0-9]+]])
+; CHECK: ![[ARGS]] = !{null}
; CHECK: ![[VARS]] = !{![[PARAM:[0-9]+]], ![[AUTO:[0-9]+]]}
; CHECK: ![[PARAM]] = !DILocalVariable(name: "param", arg: 1, scope: ![[SP]])
; CHECK: ![[AUTO]] = !DILocalVariable(name: "auto", scope: ![[SP]])
@@ -13,10 +15,12 @@
!llvm.module.flags = !{!6}
!llvm.dbg.cu = !{!4}
-!0 = distinct !DISubprogram(name: "foo", scope: null, isLocal: false, isDefinition: true, isOptimized: false, retainedNodes: !1)
+!0 = distinct !DISubprogram(name: "foo", scope: null, type: !7, isLocal: false, isDefinition: true, isOptimized: false, unit: !4, retainedNodes: !1)
!1 = !{!2, !3}
-!2 = !DILocalVariable(tag: DW_TAG_arg_variable, name: "param", arg: 1, scope: !0)
-!3 = !DILocalVariable(tag: DW_TAG_auto_variable, name: "auto", scope: !0)
-!4 = distinct !DICompileUnit(language: DW_LANG_C99, file: !5, subprograms: !{!0})
+!2 = !DILocalVariable(name: "param", arg: 1, scope: !0)
+!3 = !DILocalVariable(name: "auto", scope: !0)
+!4 = distinct !DICompileUnit(language: DW_LANG_C99, file: !5)
!5 = !DIFile(filename: "source.c", directory: "/dir")
!6 = !{i32 1, !"Debug Info Version", i32 3}
+!7 = !DISubroutineType(types: !8)
+!8 = !{null}
diff --git a/llvm/test/Bitcode/DILocalVariable-explicit-tags.ll.bc b/llvm/test/Bitcode/DILocalVariable-explicit-tags.ll.bc
index b134f60a12915d3645856527fdbd2736f529bb73..99d1044ae43f1cb6c6cb1ad1c4d82f8a3ad43d4e 100644
GIT binary patch
delta 1663
zcmXX`ZA?>F7(S(i7Ag1EuSw<J?p{E{<_DJ+rKN3BTEc3AS!K?!WX4`vz)rNKEr__;
zmUdjW5mUFubQw!<F2>D2=*Wf{StysWs at 37g53&){N>N!*P|31n#_YYi^W&VHulIe<
z^FGg6kwoxHvt|75j&%s-B7~adOxf=DemVEizawuKC(G(Y>Rd$25xOiws33<%IdG=*
z)OsrLX=$WvL!_T_mU|S;>2=OJ#VPw0bDw;5{z<JfV!an#U1Dtv%9Zr#9A{Ftx=d%P
zk0`E*)Fly_darFSb#~NL?+wY7>OTDR7Ij^bau=p{PBwX?bZLEblY*@AC;LxE>AJoF
ziMk4*Pbh@)A$LiuL~+U7`$<622z|6;!e(8Szu7#MYcAO=i-dx at 90s9{bOSaYy#C`)
z2UeaAzF2c^VXpe}^ODV9E_K8Y7hb!~R{lKu=3HiRMZ4R5lYemev+Jj4DBGQCgs1|E
zK!REomnl~_L<jOWzcnSXd at s3*(8VHzmSImL3lftV;tRLvMSz$8=Hfg}oYxcfACz|6
zIe!u7AL5iZ-oYOu{HYDgMzJ{)o}sWs8>XSk$=QTzqE>Z_CT2sb*));Okbj9(twnpZ
z!<L%Cus&rg>#|FaACy+xxuf0E?)aXDl_<UpcU2##uCl~Kn!KAJPl#06Gen9e1IujQ
z-jBoD6t5q)7^f||=M#pkMc)roe&E+t+_5-!6adMjJ>^nwJoNsY0$Uu%=55$BrZjP@
zR+Y_cn8}cL0fAMi9}XKw!o?9 at J7CeJc*AHym*n+##D<i0q(deJSRFF1qlr`gIfX6S
z at ki;rWh#KrGx$7(|82vLD6lyOgXyz$-a;D7+OU6^(tC?6F%cqXG8-0Y@;*&Y(&P+H
zKBQl7rM}jWS&XA%T`a6iHH~>ZQh06;0JU;QJ)H8|18j-GGihwWgf9$17G5OwotMI6
z4#YW+N8s2$&3OayP^4Cu=7Bw96i}NchsdjE$aJmhZh~knb1+zD99v{?h%(Pu=x}F|
z)Mw=m3~?U at IdA-8Ok^0~4KZFjZK)Xp at _{qCm0oXVRe<$If@}<}Yi(#_uq6s#O6M)v
z at D(8xHlNPBPvMzqY(Bu8HHEtlN{`7nW#h(CULO(bzqM#nK%-a}4I5Ho1MnH+<@JSA
zG%*tbaKwp_>Zu57Idw7b at iGR1pd6YtJBv6^P}*}|daN9(mKdqk4vY0;y!LsHag48t
z0l0&+6#0ip1^i6`g^5Bz0Rgt}>B}expBu+AKt2-=g<n=nc%>)G`O2j|@h6kDHKTwm
ztdH>(LzbG9*f<t8WW@*_15 at ch)1RxXl%-#;%y&AISEvv;uD-s0ZOA+neKMJp>CAlt
z--MFz0f^1(A`&>?>UR6wo!)?>WxJ!o>GFD5FMF8n^t<a?nmgO5T}N8o)V>z4&*eS>
zzlBW1^eQBl{i54&_5TLJ5NddrG{GQ7GE|0;u%wZUH$>3ZaZ at fON6cVJIb?%%{*B&7
z*hPp5rwtl87fM>~y_Y<Jf<s$Mi#J)-&5j=q`CP|KFF3aNDjfy-uZlMXy{xcEuhsjM
z7m7ET;PQ9iVDLC9SmiC}jso3Ho;Zk5kdJPf at 4Zh<ohf`+tC~m%T76};*Q)01*aI6l
z7|#km#vj<QmEmAWsFTMYkal%*K(}D8CeI+R9T5S`#u%S-h?oJ7XNXyf$g)EJFr=Db
ziRm*$@|7jnga}^&6 at jRNSV8|QW#;~_1s%><z<FQ{Js5F7Y)p#vTg$;kw;&pusKe&L
zY2XSwo-qaRg=OsVbl$Tl{)obs#xZytx~V`Y4 at POq02Ln;>tkZ$P}mT&XrsJ9aR-H7
ze&T9OQ6kh*X#3%VCtzG7j%9_pTC<(m&a}Dwl!L8ioQ%eyQ9CMiJ2cJBRSrhmQmJKH
zola-1Q?1)srLJ}|&ARsXuEQ1n7N5Vu?D9L@&X$V0T at 7vr+rE$Wy4dFSmTfKFo_3eR
Q<=^IK+kD&G+l55`0lJx6JOBUy
delta 349
zcmZqS|H2~b<b2?sA`b(@ECvP!?j{8WCLk?5(NLj&61S6!fRTs=hlDqmky3}p1Q7*i
zw~nO at l15HXJoqLEDjo@N3~cOq*!;AMMbM3{Q-Ohj6Q~!cltUq<l|@)_Nehs8+_G?j
zh>%Z94|j`;j{pZVV=+qtLnKfwD at d)}3=T;_p9wvjYVOBaoL8}&VqmD0U|`S&%GFCT
z`%G|S5<YV9&D&nqm>Dq<w|B5`Omt>oP+;(Axq5MLuQ!8$B?nMtLbHL$>SYWdW&;p|
zfPoqZqeJHkpEd7zR8F3K!+T_vPoCb}v$;(IEYfT$fgNY|UOm}6b!X4S3Ptb9(k2W(
zn-wkGY#ARzblWg6Y$-6}&em3*EhN!<<Hnm?F}LoWcy;4c%$Xa9&OKYk;w5fow%bhH
aXruA;jk`1tGDBSLwAq!BgOMG`0|5ZS`e*w9
diff --git a/llvm/test/Bitcode/DISubprogram-distinct-definitions.ll b/llvm/test/Bitcode/DISubprogram-distinct-definitions.ll
index 9d141d52de1c8..8c8d09cf95b53 100644
--- a/llvm/test/Bitcode/DISubprogram-distinct-definitions.ll
+++ b/llvm/test/Bitcode/DISubprogram-distinct-definitions.ll
@@ -1,14 +1,17 @@
; RUN: llvm-dis < %s.bc | FileCheck %s
-; Check that subprogram definitions are correctly upgraded to 'distinct'.
-; Bitcode compiled with llvm-as version 3.7.
+; Check that subprogram definitions are encoded as 'distinct'.
define void @f() !dbg !3 { ret void }
!llvm.module.flags = !{!4}
!llvm.dbg.cu = !{!0}
-!0 = distinct !DICompileUnit(language: 12, file: !1, subprograms: !{!3})
+!0 = distinct !DICompileUnit(language: 12, file: !1)
!1 = !DIFile(filename: "path/to/file", directory: "/path/to/dir")
-; CHECK: = distinct !DISubprogram({{.*}} DISPFlagDefinition
-!3 = !DISubprogram(name: "foo", isDefinition: true)
+; CHECK: = distinct !DISubprogram({{.*}} type: ![[TYPE:[0-9]+]],{{.*}} DISPFlagDefinition
+; CHECK: ![[TYPE]] = !DISubroutineType(types: ![[ARGS:[0-9]+]])
+; CHECK: ![[ARGS]] = !{null}
+!3 = distinct !DISubprogram(name: "foo", type: !5, isDefinition: true, unit: !0)
!4 = !{i32 2, !"Debug Info Version", i32 3}
+!5 = !DISubroutineType(types: !6)
+!6 = !{null}
diff --git a/llvm/test/Bitcode/DISubprogram-distinct-definitions.ll.bc b/llvm/test/Bitcode/DISubprogram-distinct-definitions.ll.bc
index edf31706dad72eaa93f4bdb00a0683adb2800645..3c59f676408950a052b5bcb60d15cd70679c7a13 100644
GIT binary patch
delta 1715
zcmX|Ce at qi+82*kzTcO?+{6)3B-2s|r{@^GoEp3;UBUlrcRWu7`8e3W_od~6^zi_jZ
zGR|$poJ(Vxj4c=!arzHV;#fu&$}v{8bIj}yvY~0Es4O6;WLY+2_8w+_$$jsAm+#*1
zd7t-r?)aQxqO6J?zQ1iHLOBSbdIeMR_P!r3efaOdJL?i9)tD{^(F%mdFog25Xp{we
ziqEa0LZ1|OmaOSaP;RYH$(b}P?0ZdP?E@|T^}yE|<U`1~SUZM#B6pU-k9<oP8A
zOHG&ZHm1{c%5{6~d#Q_qmKuLpq0)5`=Qrxyg{qyn&OKV^=jq}ae!Wst8BClx%hT0e
z-PyXW2z^W;lnZAUd9sz?RCU}8DQjWoTSx4+++`csv79R126^sUOly^9J(Le4w3gn5
z&$a)2<J*Ia&w5 at KT$-7x`0ho~hQ6a^`(M6wTbNsIF!%M{bG3cCe|z6OZ`(g}Uw%I^
zORrYS;gHt at L$)TR_KF%IJ_jln3DS`<xhj8G0pGoB!;Z0Rwmv_Kp=*T*EnMG+$+3{2
z_{q!p>NvkI5^R*6aB#swF4)Vd?(89+AmW)F&+zz^g-BEQtQ{|>w3^8{IbtR6((1`D
zIhj&t(waXp(o?uw-_KU|M2ty$$uWoQRHLlI!5u##I}zKxYmp}w;9c^4@|IKmnAY5n
zYffWi=7Ks&YeEZ7>E4eb`lMj&XU*fR;l+q4!y3=PQt19Mmpd8bjsqaMtW7KP$HM!k
zl=$p0K5fUJGsW?{Rx*=bGm+NZ2Lv{iu|HxSh^*@r^xdo>DVPT1hJ;}JO=3#g23qAZ
zfYmDJTI)E~A7l8egP2Q67pM?1%@ETR at s}NMR^n3(4$J2$=}ZdG*zv!a;s>)%^+;GV
zkzO-PYaY^?QCc%WYaY{Yc&IOoL#%mFVu(fz$+{t*PX^_-0Z<!v+{dYIKf>o3BAvo#
zEW}JNoFZV7z-1W}b1=sFd?Lrean2u#g*&Z=lmP6Rc|dI$?bY16ph;QD`*F3W#Kqw0
zVSJV$Aj>qv(vhQuvVe^{*voy;&iP~4qL`^$FhvFZI9oXc<O6348@;N^Ndne8aZPP_
zrDxY62A`*h`IL0tPArP4 at adHFAw{Ie@#zqA(Goe<C_5?VRJCgd1!Jeg_!X;90*w*_
zA2B5*Cg3wFC~B6E(dvmXfK#6ilg}{d<=8dplLZ_SK|9I|wij}~c3InH*-0&QEk0n?
z_e+dJg8oI8c}S>?0=ULWO7lBL0)JybVSKr$fRMB6*-{onObz2{AfJhZBTL;9tMu_)
zKr3sDJsq`H4g#`>F)EbyvXx1Rc_?DaNDw+nA at nBb{4>%<v1b&jWo~!kCKU!3*3{Ij
z2v_y;Pe&7SLseJz1Ir+M6bb}{svGK$9-?+Ods?W_yAA$;x24(V3^tYqTS`6NriRl0
z7jCZ~z8>;wro$p<4`7kkK0}ZQp(LZUmf1161SM>a4qd(L`r&~0RPj~U#z2`X&-nSe
z^^D&sKBQL|1FEa*)@#MLz6S4AK+MbaYq{egpsdap10jhLFpLWw57lEAmOr+VBXLo0
zuk5mV>y!h3WCs@#8PSWxBRjs>-yRmZ_Bmw7PH at 1O=#V;JkDwpGfGBfR$U3Z^0Gp=O
zlaxB+6z9iba>S_~zo1UMQnfQ4!iYss0tllW&pY!<T{*w#K}!=XxCg{-1T%F@%n6Bc
zlNOwC7t%T7)%Y~H1(fX|(l9UJPsXLsd18*j=ZA5z%3qZTNg>LTCTLoZ#2A&Bdn2YO
ztLFugJST8b05Mc7?^s~qCJ(Nn9SMH7bQFWOB2P;Tx_U)oL&$-EZt)S^vZ$#j+aV^{
zWKk at 2;k|5XsTr*lTH2(;l|`NC#;g6X?*RM^NQecJ=nMqp(UosuwlIghLCWQ<V4QBI
z+*Ph~l^M2`*Vk`#G5UrwJ>zl1&>6OG)m6BedP7swu_L9yhCr~i${TdGxEo5VckVe_
l at AJ1D@;i at gc6$RsZ?h}7+1=prHhY60r@)q`Ch;^F{{f46T$KO-
delta 377
zcmX at WKY>-$$@#!NMIHu*g$xV~+)WA$Oh8(AqM<_lByOh^0V5F$4he5ABcl$F2_g#4
zZXHV*B#oS&c<@b_sCXp6F|e`cVe`{27D+d at P6eQTpk5=T6C4UDtt^ujm$U$h$1Mvd
zhzR+#^>DYO_y~w7GpI78DkStV0BvMoaGnPup<t5(11peeBsYUYQqX5YeGjLa`!N>h
zB*7_+43!cL49Y-BDQ2GuZcM@^jtWd(E~!bS=?b2CY559asYS(^`FX-DPB#o#4mq&t
z_3*uIefRdLPVd^DGu$x}vbVVJ-sX;+b!P#i1`l6ae*S7T1_z*V4L}SAW-KRHs3-72
zIIIi}ZaFz>Wx0B}`6;D2sd{NSiRs0`O$)iDXUERwo_S;D>4>{i92h~4a at w58$ib-3
n%)n5nz`(!=G=NP&gdq{g2Khypg^}$DkOqlIvw$fei-7?EIMrN>
diff --git a/llvm/test/Bitcode/DISubprogram-v4.ll b/llvm/test/Bitcode/DISubprogram-v4.ll
index 9e5caecd7361a..79d8beb3575c4 100644
--- a/llvm/test/Bitcode/DISubprogram-v4.ll
+++ b/llvm/test/Bitcode/DISubprogram-v4.ll
@@ -18,14 +18,14 @@ define void @_Z3foov() !dbg !9 {
!5 = distinct !{}
!6 = distinct !{}
-; CHECK: !7 = distinct !DISubprogram(scope: null, spFlags: DISPFlagDefinition, unit: !8)
-!7 = distinct !DISubprogram(unit: !8)
+; CHECK: !7 = distinct !DISubprogram(scope: null, type: !3, spFlags: DISPFlagDefinition, unit: !8)
+!7 = distinct !DISubprogram(type: !3, unit: !8)
!8 = distinct !DICompileUnit(language: DW_LANG_C99, producer: "clang",
file: !2, isOptimized: true, flags: "-O2")
-; CHECK: !9 = distinct !DISubprogram(scope: null, spFlags: 0)
-!9 = distinct !DISubprogram(isDefinition: false)
+; CHECK: !9 = distinct !DISubprogram(scope: null, type: !3, spFlags: 0)
+!9 = distinct !DISubprogram(type: !3, isDefinition: false)
; CHECK: !10 = distinct !DISubprogram({{.*}}, spFlags: DISPFlagPureVirtual | DISPFlagLocalToUnit | DISPFlagDefinition | DISPFlagOptimized,
!10 = distinct !DISubprogram(name: "foo", linkageName: "_Zfoov", scope: !1,
diff --git a/llvm/test/Bitcode/DISubprogram-v4.ll.bc b/llvm/test/Bitcode/DISubprogram-v4.ll.bc
index 41bbcf874ac144ac97196fdf8d5e1300a91441b1..fc1dc770fbed50d35d0c74120bd20f123b490958 100644
GIT binary patch
delta 1539
zcmZ`(ZA?>F7(Ta!-U{VjU<|0-cK1?7n&{wii_lWoN=ryx+*bKW*fK*4rAWk4pj08-
zN^Qq=3o%6+<cB6DF3#;2AYr(%t at X05XgA5SB}9#B`BD-TRARQwxt)UIk7e(V_k2I+
zIq&;EXDZ=rN`Y4Azr8OFfOr5vgNV*~>)r1!eDv4EJ6WNe3WSLVln5^H07&Ffu?ENn
z3P{IiGIvgfJ4Bl0)?|7p&1_B{FwScGL at B#YDa~&Ef+r<gU)3uTQ$sv+NSKnN(p2^(
zUqcwiEo5p8HRSmzO=X8uBxd^Xp*@T_Q at kHz%rkWz9!gf}c{N#5Vhf!-<)JG2`s0{F
z06rxFNPu@|TjG+(wI^m9lB=Niv|lmk6L#h5g7I1=SD3IHk(Ud2D?&d2yQu@%Z12yL
zU)OIwJo_~D!s=r2<tN#>Uvw3`|Mc~1+`XZ5D-D;}IzI(LcZ>k!Sh-K`1VEE69JnDx
zHpc$EjyNoOv3k^1HsQ*0bIN|5D$JEm1ymtU{TshDte<EXqIM(NE at a#5Sn<suwr0fd
zMFblpzD(oGB>vcdeUOYT(ij{*iU?LC*pdPJgO)9<nTRV+$$T_pjgqWTk{L=ePf6}l
zuUN=)>S<ls6kp|asls*B4yzSCb{y>yqCI-{n3WY at yMwLMcr=2oYVcJbyoN*gofpw#
znQZ+qYqhdAA8VUqJBFR^a#e&=j_S%hkhEsTC%HNziIhuk2M9|}BaKD<*cy#PkY!p&
zxw<mZPCZ-iV?XSLXUDuqX+Kx$<&<*{UCFdd9p?If6zQp#wI(Sf`%6Gl<xI02Xr{4s
z5?_x9)(!Y(3=3P12v$fuItQP7UgNSKM!SWqxN7$lr*`wzpX-!i7)8Fy<0=jFOJO*@
zoTxG>ND=c+NRIf}DSe1YubP5mg8Lg7#920A3P);DCTs0QdoH5ga<+RoFj1}?<*TPT
z<r7}nG*{w<<PP5=B{vW$3}6t(Fp#t~LWE6y54TVNzUarIF!;2~>Do$G?3Gpz+bKtT
zh9At7mrOxsF144-_vuQ){IY3R=@K7+ZW4elSR1*grFv3#QY7AGHiu?OC#=ZI%F36V
zTA$~^Oh~BG_Vq6~`+0+pd2c&feu~?vre~dhpuGWP|GQERs)6nhaw!Qxo}Jig57bIx
zLlg*sa(lkI7KI)E^Ifo8^ZQ6z&~EiFAia<;GzVSVCI4hhLX6r#WNQXMoHtFaD7u$;
zfx}j1-V7j#0)TDp*}>61$KHXV{{yr0zUta%FuWHq&D(r<J2*NZssT;_6e&C(q7a1!
zLVDwgackm{J+iE(tEoq;(}OKi`RUxR#`E^dii*B1Ix|^3UNXsKC?-cQT|UUm%ZN>8
zFk^}{W8WM+ApqdZOaO`p2jcP^>4l3%?2ZAClK7G)=I<D=&Cy<GtV*m#)P9_W$?lP(
z9d*{ToN at wzIWF^Zyd%UsMcj%Kw at 6~i6!UkT(kmunZiEPJ3(^!o at J(34u%dgh#FN{)
zh`+9cBAC}f*+W^X;V)3o&o2w{)qCYo#J at r~Q=kG{hC+v$G~!X{H?aG2f=3?w9*M2{
zW04;GAuc;fzWve4guHZ8FnB+X`1tSb+`$cp;7^+c+f=^yyI5xG-&0uH+U$%XkIti;
zTWn;bshBp?ibe&~SfJXcXlN*Gq?JttO4?$E#;A%4nPM~DplWTkAI-Nlb=vZ^Ew;us
db5nlB{_3s<Ye!pihw12R_QJf@*4PEm{sn at h1RekY
delta 715
zcmbOuxP!~k$@#!NQxOIRRt5%!Bpw45&&Ykx-d(oSbzw9D2{9=0Ffdp%GB9v6DKant
z`N9(o73wE(JEaI1iCAz*cyk#Ub$Cn=QE+zaSjr%2<iz61H({dUkpRcQ#-4}GPrFzo
z-Pk%6fck-Yjg(GsD5SKqOjcad0wf-{ESw-B<kQx}-IC%XAfn8m%8;s%(8mC at k%2)<
z(T9)!-W)%_-L=jt4>&+VP%z<!rb56Mbp{3nZWf>r$dyKNGdLs#eJ1p9s<|IyaZci#
z!pN{uf`OrAb0Fh+Mm><mN(BanJRqGU=b_--!6RuYsWM at r!?6=5GL!;1M2zN1NGiIY
zm=I_)A#k!2t6#nAVUXESaKPiD0Wb()z<?D9uZS4j77&062{0T8xe8`GfJr_eX%K1(
zW+MonP+qUZ9CmS*14;}I4?yC<q0K=Ow-2&1ZeU>$umB1GjaeXatgN8kkwJ%nfdy)g
zM(ajd839lbHZlVh!OUSez{KDH<RhB{<RF{F2r>o?fX+b}(|}|QJHi-amIDr~0vrqm
z!v2a3QU-?`WIB6T)HJxaZ`fwEDR7z2MYGhzInNrEG8bvRK4g at Xyg9o#vs!s|vUagy
zGPm_?Y1Icsi6B8mVe4Ya)zYdNAe&bL<AHnfS2n%Lm)VuV6(A8N%)-ca1Skm#)o7Ln
z;J_^e%7NTv#3!KC!mtCB*uWqbm>$@HEFtD8!tqhYY5DnO=6VKt1~$bdDVce8U^M`!
CB%JsF
diff --git a/llvm/test/Bitcode/debug-loc-again.ll b/llvm/test/Bitcode/debug-loc-again.ll
index d92720caa9262..8cef5716830b4 100644
--- a/llvm/test/Bitcode/debug-loc-again.ll
+++ b/llvm/test/Bitcode/debug-loc-again.ll
@@ -31,6 +31,8 @@ entry:
!0 = !{i32 2, !"Debug Info Version", i32 3}
!1 = distinct !DICompileUnit(language: DW_LANG_C99, file: !DIFile(filename: "f", directory: "/d"))
-!2 = distinct !DISubprogram(name: "foo", unit: !1)
+!2 = distinct !DISubprogram(name: "foo", type: !5, unit: !1)
!3 = !DILocation(line: 1, scope: !2)
!4 = !DILocation(line: 2, scope: !2)
+!5 = !DISubroutineType(types: !6)
+!6 = !{null}
diff --git a/llvm/test/Bitcode/dityperefs-3.8.ll b/llvm/test/Bitcode/dityperefs-3.8.ll
index b14bcf7b04a78..7f413a06ddb3a 100644
--- a/llvm/test/Bitcode/dityperefs-3.8.ll
+++ b/llvm/test/Bitcode/dityperefs-3.8.ll
@@ -1,5 +1,4 @@
; RUN: llvm-dis < %s.bc | FileCheck %s
-; RUN: verify-uselistorder %s.bc
; Establish a stable order.
!named = !{!0, !1, !2, !3, !4, !6, !7, !8, !9, !10, !11, !12, !13, !14, !15, !16}
diff --git a/llvm/test/CodeGen/AArch64/addrsig-macho.ll b/llvm/test/CodeGen/AArch64/addrsig-macho.ll
index 910f635467bab..677e93a8c7301 100644
--- a/llvm/test/CodeGen/AArch64/addrsig-macho.ll
+++ b/llvm/test/CodeGen/AArch64/addrsig-macho.ll
@@ -145,10 +145,10 @@ attributes #0 = { noinline }
!2 = !{i32 7, !"Dwarf Version", i32 4}
!3 = !{i32 2, !"Debug Info Version", i32 3}
-!4 = distinct !DISubprogram(scope: null, isLocal: false, isDefinition: true, isOptimized: false, unit: !0)
+!4 = distinct !DISubprogram(scope: null, isLocal: false, isDefinition: true, isOptimized: false, type: !10, unit: !0)
!5 = !DILocation(line: 0, scope: !4)
!6 = !DILocalVariable(scope: !7)
-!7 = distinct !DISubprogram(scope: null, isLocal: false, isDefinition: true, isOptimized: false, unit: !0)
+!7 = distinct !DISubprogram(scope: null, isLocal: false, isDefinition: true, isOptimized: false, type: !10, unit: !0)
!8 = !DILocation(line: 0, scope: !7, inlinedAt: !5)
!9 = distinct !DISubprogram(scope: null, file: !1, line: 1, type: !10, unit: !0)
!10 = !DISubroutineType(types: !{})
diff --git a/llvm/test/CodeGen/AArch64/arm64-instruction-mix-remarks.ll b/llvm/test/CodeGen/AArch64/arm64-instruction-mix-remarks.ll
index 2816f91df44dd..e41c9af848484 100644
--- a/llvm/test/CodeGen/AArch64/arm64-instruction-mix-remarks.ll
+++ b/llvm/test/CodeGen/AArch64/arm64-instruction-mix-remarks.ll
@@ -60,12 +60,14 @@ else:
ret i32 %res.2, !dbg !6
}
!llvm.dbg.cu = !{!0}
+!7 = !{null}
+!8 = !DISubroutineType(types: !7)
!llvm.module.flags = !{!2}
!0 = distinct !DICompileUnit(language: DW_LANG_C, file: !1)
!1 = !DIFile(filename: "arm64-instruction-mix-remarks.ll", directory: "")
!2 = !{i32 2, !"Debug Info Version", i32 3}
-!3 = distinct !DISubprogram(name: "foo", scope: !1, file: !1, line: 5, scopeLine: 5, unit: !0)
+!3 = distinct !DISubprogram(name: "foo", scope: !1, file: !1, line: 5, scopeLine: 5, type: !8, unit: !0)
!4 = distinct !DILocation(line: 10, column: 10, scope: !3)
!5 = distinct !DILocation(line: 20, column: 20, scope: !3)
!6 = distinct !DILocation(line: 30, column: 30, scope: !3)
diff --git a/llvm/test/CodeGen/AArch64/arm64-opt-remarks-lazy-bfi.ll b/llvm/test/CodeGen/AArch64/arm64-opt-remarks-lazy-bfi.ll
index 08c314e538734..6654b58d306eb 100644
--- a/llvm/test/CodeGen/AArch64/arm64-opt-remarks-lazy-bfi.ll
+++ b/llvm/test/CodeGen/AArch64/arm64-opt-remarks-lazy-bfi.ll
@@ -123,5 +123,7 @@ define void @empty_func() nounwind ssp !dbg !3 !prof !4 {
!0 = distinct !DICompileUnit(language: DW_LANG_C, file: !1)
!1 = !DIFile(filename: "arm64-summary-remarks.ll", directory: "")
!2 = !{i32 2, !"Debug Info Version", i32 3}
-!3 = distinct !DISubprogram(name: "empty_func", scope: !1, file: !1, line: 5, scopeLine: 5, unit: !0)
+!3 = distinct !DISubprogram(name: "empty_func", scope: !1, file: !1, line: 5, scopeLine: 5, type: !5, unit: !0)
!4 = !{!"function_entry_count", i64 33}
+!5 = !DISubroutineType(types: !6)
+!6 = !{null}
diff --git a/llvm/test/CodeGen/AArch64/arm64-summary-remarks.ll b/llvm/test/CodeGen/AArch64/arm64-summary-remarks.ll
index 70e7fdffd63db..34b8f8db09913 100644
--- a/llvm/test/CodeGen/AArch64/arm64-summary-remarks.ll
+++ b/llvm/test/CodeGen/AArch64/arm64-summary-remarks.ll
@@ -7,9 +7,11 @@ define void @empty_func() nounwind ssp !dbg !3 {
}
!llvm.dbg.cu = !{!0}
+!4 = !{null}
+!5 = !DISubroutineType(types: !4)
!llvm.module.flags = !{!2}
!0 = distinct !DICompileUnit(language: DW_LANG_C, file: !1)
!1 = !DIFile(filename: "arm64-summary-remarks.ll", directory: "")
!2 = !{i32 2, !"Debug Info Version", i32 3}
-!3 = distinct !DISubprogram(name: "empty_func", scope: !1, file: !1, line: 5, scopeLine: 5, unit: !0)
+!3 = distinct !DISubprogram(name: "empty_func", scope: !1, file: !1, line: 5, scopeLine: 5, type: !5, unit: !0)
diff --git a/llvm/test/CodeGen/AArch64/fast-isel-dbg.ll b/llvm/test/CodeGen/AArch64/fast-isel-dbg.ll
index ac6fa71e9a9e4..047d1ebc70b91 100644
--- a/llvm/test/CodeGen/AArch64/fast-isel-dbg.ll
+++ b/llvm/test/CodeGen/AArch64/fast-isel-dbg.ll
@@ -15,13 +15,15 @@ declare void @llvm.dbg.declare(metadata, metadata, metadata) #0
attributes #0 = { nounwind readnone speculatable }
!llvm.dbg.cu = !{!0}
+!8 = !{null}
+!9 = !DISubroutineType(types: !8)
!llvm.module.flags = !{!2, !3}
!0 = distinct !DICompileUnit(language: DW_LANG_C, file: !1, isOptimized: false, runtimeVersion: 0, emissionKind: LineTablesOnly)
!1 = !DIFile(filename: "fast-isel-dbg.ll", directory: "/")
!2 = !{i32 2, !"Dwarf Version", i32 4}
!3 = !{i32 2, !"Debug Info Version", i32 3}
-!4 = distinct !DISubprogram(name: "func", scope: null, isLocal: false, isDefinition: true, isOptimized: false, unit: !0)
+!4 = distinct !DISubprogram(name: "func", scope: null, isLocal: false, isDefinition: true, isOptimized: false, type: !9, unit: !0)
!5 = !DILocalVariable(name: "a", arg: 1, scope: !4, file: !1, line: 17, type: !6)
!6 = !DIBasicType(name: "unsigned int", size: 32, encoding: DW_ATE_unsigned)
!7 = !DILocation(line: 17, scope: !4)
diff --git a/llvm/test/CodeGen/AArch64/instr-ref-ldv.ll b/llvm/test/CodeGen/AArch64/instr-ref-ldv.ll
index f12fe1f8c0c0d..7d9b495c89dc8 100644
--- a/llvm/test/CodeGen/AArch64/instr-ref-ldv.ll
+++ b/llvm/test/CodeGen/AArch64/instr-ref-ldv.ll
@@ -48,6 +48,8 @@ cleanup: ; preds = %_ZNK4llvm3opt7ArgLi
%2 = phi i1 [ %call13, %cleanup ], [ %Default, %_ZNK4llvm3opt7ArgList17getLastArgNoClaimIJNS0_12OptSpecifierES3_EEEPNS0_3ArgEDpT_.exit ], [ %Default, %_ZNK4llvm3opt7ArgList17getLastArgNoClaimIJNS0_12OptSpecifierES3_EEEPNS0_3ArgEDpT_.exit.thread ]
ret i1 %2, !dbg !9480
}
+!9531 = !{null}
+!9532 = !DISubroutineType(types: !9531)
!llvm.module.flags = !{!2, !6}
!llvm.dbg.cu = !{!7}
!2 = !{i32 2, !"Debug Info Version", i32 3}
@@ -55,12 +57,12 @@ cleanup: ; preds = %_ZNK4llvm3opt7ArgLi
!7 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus_14, file: !8, emissionKind: FullDebug, sdk: "MacOSX15.3.sdk")
!8 = !DIFile(filename: "/Users/shubhamrastogi/Development/llvm-project-instr-ref/llvm-project/llvm/lib/Option/ArgList.cpp", directory: "/Users/shubhamrastogi/Development/llvm-project-instr-ref/llvm-project/build-instr-ref-stage2", checksumkind: CSK_MD5, checksum: "a3198e8ace679c7b1581a26b5583c658")
!3116 = distinct !DICompositeType(tag: DW_TAG_class_type, size: 32)
-!9383 = distinct !DISubprogram(unit: !7, flags: DIFlagArtificial | DIFlagObjectPointer)
+!9383 = distinct !DISubprogram(type: !9532, unit: !7, flags: DIFlagArtificial | DIFlagObjectPointer)
!9391 = distinct !DILexicalBlock(scope: !9383, line: 80, column: 12)
!9393 = !DILocation(scope: !9391)
!9440 = distinct !DILexicalBlock(scope: !9441, line: 269, column: 5)
!9441 = distinct !DILexicalBlock(scope: !9442, line: 269, column: 5)
-!9442 = distinct !DISubprogram(unit: !7, retainedNodes: !9450)
+!9442 = distinct !DISubprogram(type: !9532, unit: !7, retainedNodes: !9450)
!9450 = !{}
!9452 = !DILocalVariable(scope: !9442, type: !3116)
!9478 = distinct !DILocation(scope: !9391)
diff --git a/llvm/test/CodeGen/AMDGPU/GlobalISel/trunc-brc.ll b/llvm/test/CodeGen/AMDGPU/GlobalISel/trunc-brc.ll
index 8e2ed63adb2a5..142cbe91a6e6e 100644
--- a/llvm/test/CodeGen/AMDGPU/GlobalISel/trunc-brc.ll
+++ b/llvm/test/CodeGen/AMDGPU/GlobalISel/trunc-brc.ll
@@ -389,10 +389,12 @@ define void @v_trunc_i1024_to_i512(ptr addrspace(1) %src, ptr addrspace(1) %dst)
}
!llvm.dbg.cu = !{!0}
+!5 = !{null}
+!6 = !DISubroutineType(types: !5)
!llvm.module.flags = !{!2}
!0 = distinct !DICompileUnit(language: DW_LANG_C99, file: !1)
!1 = !DIFile(filename: ".", directory: ".")
!2 = !{i32 2, !"Debug Info Version", i32 3}
-!3 = distinct !DISubprogram(name: "trunc", scope: !1, file: !1, line: 1, unit: !0)
+!3 = distinct !DISubprogram(name: "trunc", scope: !1, file: !1, line: 1, type: !6, unit: !0)
!4 = !DILocation(line: 1, scope: !3)
diff --git a/llvm/test/CodeGen/AMDGPU/opencl-printf-unsupported.ll b/llvm/test/CodeGen/AMDGPU/opencl-printf-unsupported.ll
index 34e81e36aefd8..37ba7bc8f54f6 100644
--- a/llvm/test/CodeGen/AMDGPU/opencl-printf-unsupported.ll
+++ b/llvm/test/CodeGen/AMDGPU/opencl-printf-unsupported.ll
@@ -69,4 +69,6 @@ declare i32 @printf(ptr addrspace(4), ...)
!2 = !{i32 2, !"Dwarf Version", i32 4}
!3 = !{i32 2, !"Debug Info Version", i32 3}
!4 = !DILocation(line: 1, column: 42, scope: !5)
-!5 = distinct !DISubprogram(name: "arst", scope: null, file: !1, line: 1, isLocal: false, isDefinition: true, scopeLine: 2, isOptimized: false, unit: !0)
+!5 = distinct !DISubprogram(name: "arst", scope: null, file: !1, line: 1, isLocal: false, isDefinition: true, scopeLine: 2, isOptimized: false, unit: !0, type: !6)
+!6 = !DISubroutineType(types: !7)
+!7 = !{null}
diff --git a/llvm/test/CodeGen/AMDGPU/sched-crash-dbg-value.mir b/llvm/test/CodeGen/AMDGPU/sched-crash-dbg-value.mir
index eabbfca91ca55..89eb545cec023 100644
--- a/llvm/test/CodeGen/AMDGPU/sched-crash-dbg-value.mir
+++ b/llvm/test/CodeGen/AMDGPU/sched-crash-dbg-value.mir
@@ -165,15 +165,17 @@
!3 = !{}
!4 = !{i32 0, i32 256}
!5 = !DILocalVariable(name: "bar", scope: !6, file: !1, line: 102, type: !7)
- !6 = distinct !DISubprogram(name: "foo", scope: !1, file: !1, line: 81, isLocal: false, isDefinition: true, scopeLine: 86, flags: DIFlagPrototyped, isOptimized: true, unit: !0)
+ !6 = distinct !DISubprogram(name: "foo", scope: !1, file: !1, line: 81, isLocal: false, isDefinition: true, scopeLine: 86, flags: DIFlagPrototyped, isOptimized: true, type: !10, unit: !0)
!7 = !DIBasicType(name: "float", size: 32, encoding: DW_ATE_float)
!8 = !DILocation(line: 102, column: 8, scope: !6)
+ !9 = !{null}
+ !10 = !DISubroutineType(types: !9)
...
---
# CHECK: name: sched_dbg_value_crash
-# CHECK: DBG_VALUE %99, $noreg, !5, !DIExpression(DW_OP_constu, 1, DW_OP_swap, DW_OP_xderef), debug-location !8
+# CHECK: DBG_VALUE %99, $noreg, !5, !DIExpression(DW_OP_constu, 1, DW_OP_swap, DW_OP_xderef), debug-location !10
name: sched_dbg_value_crash
alignment: 1
diff --git a/llvm/test/CodeGen/AMDGPU/vi-removed-intrinsics.ll b/llvm/test/CodeGen/AMDGPU/vi-removed-intrinsics.ll
index f99c3f8306ac1..deadd358236bd 100644
--- a/llvm/test/CodeGen/AMDGPU/vi-removed-intrinsics.ll
+++ b/llvm/test/CodeGen/AMDGPU/vi-removed-intrinsics.ll
@@ -21,4 +21,6 @@ attributes #1 = { nounwind }
!2 = !{i32 2, !"Dwarf Version", i32 4}
!3 = !{i32 2, !"Debug Info Version", i32 3}
!4 = !DILocation(line: 1, column: 42, scope: !5)
-!5 = distinct !DISubprogram(name: "rsq_legacy_f32", scope: null, file: !1, line: 1, isLocal: false, isDefinition: true, scopeLine: 2, isOptimized: false, unit: !0)
+!5 = distinct !DISubprogram(name: "rsq_legacy_f32", scope: null, file: !1, line: 1, isLocal: false, isDefinition: true, scopeLine: 2, isOptimized: false, unit: !0, type: !6)
+!6 = !DISubroutineType(types: !7)
+!7 = !{null}
diff --git a/llvm/test/CodeGen/MIR/X86/stack-object-debug-info.mir b/llvm/test/CodeGen/MIR/X86/stack-object-debug-info.mir
index 9cc25d8882bf8..416f8cfbaed0a 100644
--- a/llvm/test/CodeGen/MIR/X86/stack-object-debug-info.mir
+++ b/llvm/test/CodeGen/MIR/X86/stack-object-debug-info.mir
@@ -36,12 +36,14 @@
!2 = !{}
!3 = !{i32 1, !"Debug Info Version", i32 3}
!4 = !DILocalVariable(name: "x", scope: !5, file: !1, line: 16, type: !8)
- !5 = distinct !DISubprogram(scope: null, isLocal: false, isDefinition: true, isOptimized: false, unit: !0)
+ !5 = distinct !DISubprogram(scope: null, isLocal: false, isDefinition: true, isOptimized: false, type: !12, unit: !0)
!6 = !DIBasicType(name: "char", size: 8, align: 8, encoding: DW_ATE_signed_char)
!7 = !DILocation(line: 0, scope: !5)
!8 = !DICompositeType(tag: DW_TAG_array_type, baseType: !6, size: 2048, align: 8, elements: !9)
!9 = !{!10}
!10 = !DISubrange(count: 256)
+ !11 = !{null}
+ !12 = !DISubroutineType(types: !11)
...
---
name: foo
@@ -53,7 +55,7 @@ frameInfo:
# CHECK: - { id: 0, name: y.i, type: default, offset: 0, size: 256, alignment: 16,
# CHECK-NEXT: callee-saved-register: '', callee-saved-restored: true,
# CHECK-NEXT: debug-info-variable: '!4', debug-info-expression: '!DIExpression()',
-# CHECK-NEXT: debug-info-location: '!10' }
+# CHECK-NEXT: debug-info-location: '!12' }
stack:
- { id: 0, name: y.i, offset: 0, size: 256, alignment: 16,
debug-info-variable: '!4', debug-info-expression: '!DIExpression()',
diff --git a/llvm/test/CodeGen/WebAssembly/lower-em-sjlj-debuginfo.ll b/llvm/test/CodeGen/WebAssembly/lower-em-sjlj-debuginfo.ll
index bab8403aa7b9e..f51edc0373220 100644
--- a/llvm/test/CodeGen/WebAssembly/lower-em-sjlj-debuginfo.ll
+++ b/llvm/test/CodeGen/WebAssembly/lower-em-sjlj-debuginfo.ll
@@ -45,12 +45,14 @@ declare void @foo()
declare i32 @setjmp(ptr) #0
!llvm.dbg.cu = !{!2}
+!9 = !{null}
+!10 = !DISubroutineType(types: !9)
!llvm.module.flags = !{!0}
!0 = !{i32 2, !"Debug Info Version", i32 3}
!1 = !DIFile(filename: "lower-em-sjlj.c", directory: "test")
!2 = distinct !DICompileUnit(language: DW_LANG_C99, file: !1)
-!3 = distinct !DISubprogram(name: "setjmp_debug_info0", unit:!2, file: !1, line: 1)
+!3 = distinct !DISubprogram(name: "setjmp_debug_info0", type: !10, unit:!2, file: !1, line: 1)
!4 = !DILocation(line:2, scope: !3)
!5 = !DILocation(line:3, scope: !3)
!6 = !DILocation(line:4, scope: !3)
diff --git a/llvm/test/CodeGen/X86/basic-block-sections-clusters-error.ll b/llvm/test/CodeGen/X86/basic-block-sections-clusters-error.ll
index eb0a14b2820b4..f4992b7a00775 100644
--- a/llvm/test/CodeGen/X86/basic-block-sections-clusters-error.ll
+++ b/llvm/test/CodeGen/X86/basic-block-sections-clusters-error.ll
@@ -106,5 +106,6 @@ define i32 @dummy2(i32 %x, i32 %y, i32 %z) !dbg !4 {
!1 = !DIFile(filename: "test_dir/test_file", directory: "test_dir")
!2 = !{i32 7, !"Dwarf Version", i32 5}
!3 = !{i32 2, !"Debug Info Version", i32 3}
-!4 = distinct !DISubprogram(name: "dummy1", scope: !1, unit: !0)
-
+!4 = distinct !DISubprogram(name: "dummy1", scope: !1, unit: !0, type: !5)
+!5 = !DISubroutineType(types: !6)
+!6 = !{null}
diff --git a/llvm/test/CodeGen/X86/basic-block-sections-module1.ll b/llvm/test/CodeGen/X86/basic-block-sections-module1.ll
index c719b7732648b..b1750b780ab04 100644
--- a/llvm/test/CodeGen/X86/basic-block-sections-module1.ll
+++ b/llvm/test/CodeGen/X86/basic-block-sections-module1.ll
@@ -54,13 +54,15 @@ define dso_local i32 @test(i32 noundef %0) #0 !dbg !10 {
}
!llvm.dbg.cu = !{!0}
+!11 = !{null}
+!12 = !DISubroutineType(types: !11)
!llvm.module.flags = !{!2, !3}
!0 = distinct !DICompileUnit(language: DW_LANG_C99, file: !1)
!1 = !DIFile(filename: "/path/to/dir/test_filename", directory: "/path/to/dir")
!2 = !{i32 7, !"Dwarf Version", i32 5}
!3 = !{i32 2, !"Debug Info Version", i32 3}
-!10 = distinct !DISubprogram(name: "test", scope: !1, unit: !0)
+!10 = distinct !DISubprogram(name: "test", scope: !1, type: !12, unit: !0)
;; Check that the split section is created when using the correct module name, or no module name.
;
diff --git a/llvm/test/CodeGen/X86/basic-block-sections-module2.ll b/llvm/test/CodeGen/X86/basic-block-sections-module2.ll
index 44e7d2219170c..c218ff9bb23af 100644
--- a/llvm/test/CodeGen/X86/basic-block-sections-module2.ll
+++ b/llvm/test/CodeGen/X86/basic-block-sections-module2.ll
@@ -95,6 +95,8 @@ define dso_local i32 @test5(i32 noundef %0) #0 {
}
!llvm.dbg.cu = !{!0, !1, !2, !3}
+!14 = !{null}
+!15 = !DISubroutineType(types: !14)
!llvm.module.flags = !{!8, !9}
!0 = distinct !DICompileUnit(language: DW_LANG_C99, file: !4)
@@ -107,10 +109,10 @@ define dso_local i32 @test5(i32 noundef %0) #0 {
!7 = !DIFile(filename: "/test_dirname4/test_filename4", directory: "/test_dirname4")
!8 = !{i32 7, !"Dwarf Version", i32 5}
!9 = !{i32 2, !"Debug Info Version", i32 3}
-!10 = distinct !DISubprogram(name: "test1", scope: !4, unit: !0)
-!11 = distinct !DISubprogram(name: "test2", scope: !5, unit: !1)
-!12 = distinct !DISubprogram(name: "test3", scope: !6, unit: !2)
-!13 = distinct !DISubprogram(name: "test4", scope: !7, unit: !3)
+!10 = distinct !DISubprogram(name: "test1", scope: !4, type: !15, unit: !0)
+!11 = distinct !DISubprogram(name: "test2", scope: !5, type: !15, unit: !1)
+!12 = distinct !DISubprogram(name: "test3", scope: !6, type: !15, unit: !2)
+!13 = distinct !DISubprogram(name: "test4", scope: !7, type: !15, unit: !3)
;; Check that the split section is created when using the correct module name, or no module name.
;
diff --git a/llvm/test/CodeGen/X86/fixed-stack-di-mir.ll b/llvm/test/CodeGen/X86/fixed-stack-di-mir.ll
index a2f6ef025da56..6c1d2bc34e5db 100644
--- a/llvm/test/CodeGen/X86/fixed-stack-di-mir.ll
+++ b/llvm/test/CodeGen/X86/fixed-stack-di-mir.ll
@@ -15,7 +15,7 @@ entry:
; CHECK: id: 0
; CHECK: debug-info-variable: '!3'
; CHECK: debug-info-expression: '!DIExpression()'
-; CHECK: debug-info-location: '!5'
+; CHECK: debug-info-location: '!7'
unreachable
}
@@ -28,5 +28,7 @@ attributes #0 = { nounwind readnone speculatable }
!1 = !DIFile(filename: "file.cpp", directory: "/dir")
!2 = !{i32 2, !"Debug Info Version", i32 3}
!3 = !DILocalVariable(name: "dstRect", scope: !4)
-!4 = distinct !DISubprogram(name: "foo", linkageName: "foo", scope: !0, file: !1, line: 42, unit: !0)
+!4 = distinct !DISubprogram(name: "foo", linkageName: "foo", scope: !0, file: !1, line: 42, unit: !0, type: !6)
!5 = !DILocation(line: 42, column: 85, scope: !4)
+!6 = !DISubroutineType(types: !7)
+!7 = !{null}
diff --git a/llvm/test/CodeGen/X86/pr57673.ll b/llvm/test/CodeGen/X86/pr57673.ll
index 4cb8450e85c25..0071ada715afb 100644
--- a/llvm/test/CodeGen/X86/pr57673.ll
+++ b/llvm/test/CodeGen/X86/pr57673.ll
@@ -38,7 +38,7 @@ define void @foo() {
; NORMAL-NEXT: {{ $}}
; NORMAL-NEXT: [[MOVUPSrm:%[0-9]+]]:vr128 = MOVUPSrm %stack.1.i, 1, $noreg, 40, $noreg :: (load (s128) from %ir.i4, align 8)
; NORMAL-NEXT: MOVUPSmr $noreg, 1, $noreg, 0, $noreg, killed [[MOVUPSrm]] :: (store (s128) into `ptr null`, align 8)
- ; NORMAL-NEXT: DBG_VALUE_LIST !3, !DIExpression(DW_OP_LLVM_arg, 0, DW_OP_plus_uconst, 40, DW_OP_stack_value), %stack.1.i, %stack.1.i, debug-location !8
+ ; NORMAL-NEXT: DBG_VALUE_LIST !3, !DIExpression(DW_OP_LLVM_arg, 0, DW_OP_plus_uconst, 40, DW_OP_stack_value), %stack.1.i, %stack.1.i, debug-location !10
; NORMAL-NEXT: [[MOVUPSrm1:%[0-9]+]]:vr128 = MOVUPSrm %stack.1.i, 1, $noreg, 40, $noreg :: (load (s128) from %ir.i6, align 8)
; NORMAL-NEXT: MOVUPSmr $noreg, 1, $noreg, 0, $noreg, killed [[MOVUPSrm1]] :: (store (s128) into `ptr null`, align 8)
; NORMAL-NEXT: {{ $}}
@@ -78,7 +78,7 @@ define void @foo() {
; INSTRREF-NEXT: {{ $}}
; INSTRREF-NEXT: [[MOVUPSrm:%[0-9]+]]:vr128 = MOVUPSrm %stack.1.i, 1, $noreg, 40, $noreg :: (load (s128) from %ir.i4, align 8)
; INSTRREF-NEXT: MOVUPSmr $noreg, 1, $noreg, 0, $noreg, killed [[MOVUPSrm]] :: (store (s128) into `ptr null`, align 8)
- ; INSTRREF-NEXT: DBG_VALUE_LIST !3, !DIExpression(DW_OP_LLVM_arg, 0, DW_OP_plus_uconst, 40, DW_OP_stack_value), %stack.1.i, %stack.1.i, debug-location !8
+ ; INSTRREF-NEXT: DBG_VALUE_LIST !3, !DIExpression(DW_OP_LLVM_arg, 0, DW_OP_plus_uconst, 40, DW_OP_stack_value), %stack.1.i, %stack.1.i, debug-location !10
; INSTRREF-NEXT: [[MOVUPSrm1:%[0-9]+]]:vr128 = MOVUPSrm %stack.1.i, 1, $noreg, 40, $noreg :: (load (s128) from %ir.i6, align 8)
; INSTRREF-NEXT: MOVUPSmr $noreg, 1, $noreg, 0, $noreg, killed [[MOVUPSrm1]] :: (store (s128) into `ptr null`, align 8)
; INSTRREF-NEXT: {{ $}}
@@ -131,6 +131,8 @@ declare void @llvm.lifetime.end.p0(i64 immarg, ptr nocapture)
declare void @llvm.dbg.value(metadata, metadata, metadata)
!llvm.dbg.cu = !{!0}
+!10 = !{null}
+!11 = !DISubroutineType(types: !10)
!llvm.module.flags = !{!2}
!0 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus_14, file: !1, isOptimized: false, runtimeVersion: 0, emissionKind: NoDebug)
@@ -138,7 +140,7 @@ declare void @llvm.dbg.value(metadata, metadata, metadata)
!2 = !{i32 2, !"Debug Info Version", i32 3}
!3 = !{!"function_entry_count", i64 2423}
!4 = !DILocalVariable(name: "r", scope: !5, file: !6, line: 93)
-!5 = distinct !DISubprogram(name: "c", scope: !7, file: !6, line: 92, spFlags: DISPFlagDefinition, unit: !0)
+!5 = distinct !DISubprogram(name: "c", scope: !7, file: !6, line: 92, spFlags: DISPFlagDefinition, type: !11, unit: !0)
!6 = !DIFile(filename: "a", directory: "/proc/self/cwd")
!7 = !DINamespace(name: "u", scope: !8)
!8 = !DINamespace(name: "s", scope: null)
diff --git a/llvm/test/CodeGen/X86/select-optimize.ll b/llvm/test/CodeGen/X86/select-optimize.ll
index b8f7f7578a3d1..dd7e8a84de66c 100644
--- a/llvm/test/CodeGen/X86/select-optimize.ll
+++ b/llvm/test/CodeGen/X86/select-optimize.ll
@@ -534,6 +534,8 @@ declare void @llvm.lifetime.end.p0(ptr nocapture)
declare void @free(ptr nocapture)
+!29 = !{null}
+!30 = !DISubroutineType(types: !29)
!llvm.module.flags = !{!0, !26, !27}
!0 = !{i32 1, !"ProfileSummary", !1}
!1 = !{!2, !3, !4, !5, !6, !7, !8, !9}
@@ -558,7 +560,7 @@ declare void @free(ptr nocapture)
!20 = !{}
!21 = !DIFile(filename: "test.c", directory: "/test")
!22 = distinct !DICompileUnit(language: DW_LANG_C99, file: !21, producer: "clang version 15.0.0", isOptimized: true, emissionKind: FullDebug, globals: !25, splitDebugInlining: false, nameTableKind: None)
-!23 = distinct !DISubprogram(name: "test", scope: !21, file: !21, line: 1, unit: !22)
+!23 = distinct !DISubprogram(name: "test", scope: !21, file: !21, line: 1, type: !30, unit: !22)
!24 = !DILocalVariable(name: "x", scope: !23)
!25 = !{}
!26 = !{i32 2, !"Dwarf Version", i32 4}
diff --git a/llvm/test/CodeGen/X86/tail-merge-debugloc.ll b/llvm/test/CodeGen/X86/tail-merge-debugloc.ll
index 367e86341fe00..45590903fce36 100644
--- a/llvm/test/CodeGen/X86/tail-merge-debugloc.ll
+++ b/llvm/test/CodeGen/X86/tail-merge-debugloc.ll
@@ -31,12 +31,14 @@ bb5:
}
!llvm.dbg.cu = !{!0}
+!7 = !{null}
+!8 = !DISubroutineType(types: !7)
!llvm.module.flags = !{!2, !3}
!0 = distinct !DICompileUnit(language: DW_LANG_C99, file: !1)
!1 = !DIFile(filename: "foo.c", directory: "b/")
!2 = !{i32 2, !"Dwarf Version", i32 4}
!3 = !{i32 2, !"Debug Info Version", i32 3}
-!4 = distinct !DISubprogram(name: "foo", scope: !1, file: !1, line: 3, isLocal: false, isDefinition: true, scopeLine: 3, flags: DIFlagPrototyped, isOptimized: true, unit: !0)
+!4 = distinct !DISubprogram(name: "foo", scope: !1, file: !1, line: 3, isLocal: false, isDefinition: true, scopeLine: 3, flags: DIFlagPrototyped, isOptimized: true, type: !8, unit: !0)
!5 = distinct !DILexicalBlock(scope: !4, file: !1, line: 1, column: 1)
!6 = !DILocation(line: 2, column: 2, scope: !5)
diff --git a/llvm/test/DebugInfo/AMDGPU/bitcast-store-combine-debugloc.ll b/llvm/test/DebugInfo/AMDGPU/bitcast-store-combine-debugloc.ll
index 17438f1a8a843..c5f7602d1e7fc 100644
--- a/llvm/test/DebugInfo/AMDGPU/bitcast-store-combine-debugloc.ll
+++ b/llvm/test/DebugInfo/AMDGPU/bitcast-store-combine-debugloc.ll
@@ -17,10 +17,12 @@ define void @test(ptr %p, ptr %q) !dbg !4 {
}
!llvm.dbg.cu = !{!0}
+!9 = !{null}
+!10 = !DISubroutineType(types: !9)
!llvm.module.flags = !{!2}
!0 = distinct !DICompileUnit(language: DW_LANG_C, file: !1, emissionKind: LineTablesOnly)
!1 = !DIFile(filename: "t.c", directory: "")
!2 = !{i32 2, !"Debug Info Version", i32 3}
-!4 = distinct !DISubprogram(name: "test", file: !1, line: 1, spFlags: DISPFlagDefinition, unit: !0)
+!4 = distinct !DISubprogram(name: "test", file: !1, line: 1, spFlags: DISPFlagDefinition, type: !10, unit: !0)
!7 = !DILocation(line: 2, scope: !4)
!8 = !DILocation(line: 3, scope: !4)
diff --git a/llvm/test/DebugInfo/ARM/move-dbg-value-after-value-list.mir b/llvm/test/DebugInfo/ARM/move-dbg-value-after-value-list.mir
index 23e43ccb046d7..836db83d1e3e7 100644
--- a/llvm/test/DebugInfo/ARM/move-dbg-value-after-value-list.mir
+++ b/llvm/test/DebugInfo/ARM/move-dbg-value-after-value-list.mir
@@ -1,13 +1,13 @@
# RUN: llc %s -start-after=arm-mve-vpt-opts -stop-after=arm-prera-ldst-opt -o - | FileCheck %s
-# CHECK: %5:rgpr = t2MOVCCr %3, killed %4, 0 /* CC::eq */, $cpsr, debug-location !14
-# CHECK-NEXT: DBG_VALUE 0, $noreg, !10, !DIExpression(), debug-location !14
-# CHECK-NEXT: DBG_VALUE 1, $noreg, !10, !DIExpression(), debug-location !14
-# CHECK-NEXT: DBG_VALUE_LIST !10, !DIExpression(), $noreg, $noreg, debug-location !14
-# CHECK-NEXT: DBG_VALUE $noreg, $noreg, !10, !DIExpression(), debug-location !14
-# CHECK-NEXT: %0:rgpr = t2LDRi12 %5, 0, 14 /* CC::al */, $noreg, debug-location !14 :: (load (s32) from %ir..backtrace_user.ctl_default, align 8)
-# CHECK-NEXT: %6:rgpr = t2LDRi12 %5, 4, 14 /* CC::al */, $noreg, debug-location !14 :: (load (s32) from %ir.btc_user_copy)
-# CHECK-NEXT: %2:gpr = t2LDRi12 %5, 8, 14 /* CC::al */, $noreg, debug-location !14 :: (load (s32) from %ir.btc_user_copy_context, align 8)
-# CHECK-NEXT: DBG_VALUE %2, $noreg, !10, !DIExpression(), debug-location !14
+# CHECK: %5:rgpr = t2MOVCCr %3, killed %4, 0 /* CC::eq */, $cpsr, debug-location !16
+# CHECK-NEXT: DBG_VALUE 0, $noreg, !12, !DIExpression(), debug-location !16
+# CHECK-NEXT: DBG_VALUE 1, $noreg, !12, !DIExpression(), debug-location !16
+# CHECK-NEXT: DBG_VALUE_LIST !12, !DIExpression(), $noreg, $noreg, debug-location !16
+# CHECK-NEXT: DBG_VALUE $noreg, $noreg, !12, !DIExpression(), debug-location !16
+# CHECK-NEXT: %0:rgpr = t2LDRi12 %5, 0, 14 /* CC::al */, $noreg, debug-location !16 :: (load (s32) from %ir..backtrace_user.ctl_default, align 8)
+# CHECK-NEXT: %6:rgpr = t2LDRi12 %5, 4, 14 /* CC::al */, $noreg, debug-location !16 :: (load (s32) from %ir.btc_user_copy)
+# CHECK-NEXT: %2:gpr = t2LDRi12 %5, 8, 14 /* CC::al */, $noreg, debug-location !16 :: (load (s32) from %ir.btc_user_copy_context, align 8)
+# CHECK-NEXT: DBG_VALUE %2, $noreg, !12, !DIExpression(), debug-location !16
# CHECK-NEXT: %7:rgpr = t2ANDrr %6, %0, 14 /* CC::al */, $noreg, def $cpsr
# CHECK-NEXT: %8:rgpr = t2ANDrr %6, %0, 14 /* CC::al */, $noreg, def $cpsr
# CHECK-NEXT: %9:rgpr = t2ANDrr %6, %0, 14 /* CC::al */, $noreg, def $cpsr
@@ -30,7 +30,7 @@
!llvm.dbg.cu = !{!32}
!0 = !DIGlobalVariableExpression(var: !1, expr: !DIExpression())
!1 = distinct !DIGlobalVariable(type: !11, isDefinition: true)
- !2 = distinct !DISubprogram(unit: !32, retainedNodes: !38)
+ !2 = distinct !DISubprogram(type: !97, unit: !32, retainedNodes: !38)
!3 = !DIFile(filename: "backtrace.pp.c", directory: "/Users/shubham/Development/Delta")
!11 = !DIDerivedType(tag: DW_TAG_const_type, baseType: !12)
!12 = distinct !DICompositeType(tag: DW_TAG_member, offset: 32)
@@ -43,6 +43,8 @@
!88 = !{i32 2, !"Debug Info Version", i32 3}
!93 = !{i32 7, !"frame-pointer", i32 1}
!95 = !DILocation(line: 5, column: 10, scope: !2)
+ !96 = !{null}
+ !97 = !DISubroutineType(types: !96)
name: backtrace_user
registers:
- {id: 0, class: rgpr, }
diff --git a/llvm/test/DebugInfo/ARM/move-dbg-value-lists.mir b/llvm/test/DebugInfo/ARM/move-dbg-value-lists.mir
index 681d89b03936d..a93b9d69b3df7 100644
--- a/llvm/test/DebugInfo/ARM/move-dbg-value-lists.mir
+++ b/llvm/test/DebugInfo/ARM/move-dbg-value-lists.mir
@@ -1,15 +1,15 @@
# RUN: llc %s -start-after=arm-mve-vpt-opts -stop-after=arm-prera-ldst-opt -o - | FileCheck %s
-# CHECK: %5:rgpr = t2MOVCCr %3, killed %4, 0 /* CC::eq */, $cpsr, debug-location !14
-# CHECK-NEXT: DBG_VALUE 0, $noreg, !10, !DIExpression(), debug-location !14
-# CHECK-NEXT: DBG_VALUE 1, $noreg, !10, !DIExpression(), debug-location !14
-# CHECK-NEXT: DBG_VALUE_LIST !10, !DIExpression(), $noreg, $noreg, debug-location !14
-# CHECK-NEXT: %0:rgpr = t2LDRi12 %5, 0, 14 /* CC::al */, $noreg, debug-location !14 :: (load (s32) from %ir..backtrace_user.ctl_default, align 8)
-# CHECK-NEXT: DBG_VALUE_LIST !10, !DIExpression(), $noreg, $noreg, debug-location !14
-# CHECK-NEXT: %6:rgpr = t2LDRi12 %5, 4, 14 /* CC::al */, $noreg, debug-location !14 :: (load (s32) from %ir.btc_user_copy)
-# CHECK-NEXT: DBG_VALUE_LIST !10, !DIExpression(), %6, %0, debug-location !14
-# CHECK-NEXT: %2:gpr = t2LDRi12 %5, 8, 14 /* CC::al */, $noreg, debug-location !14 :: (load (s32) from %ir.btc_user_copy_context, align 8)
+# CHECK: %5:rgpr = t2MOVCCr %3, killed %4, 0 /* CC::eq */, $cpsr, debug-location !16
+# CHECK-NEXT: DBG_VALUE 0, $noreg, !12, !DIExpression(), debug-location !16
+# CHECK-NEXT: DBG_VALUE 1, $noreg, !12, !DIExpression(), debug-location !16
+# CHECK-NEXT: DBG_VALUE_LIST !12, !DIExpression(), $noreg, $noreg, debug-location !16
+# CHECK-NEXT: %0:rgpr = t2LDRi12 %5, 0, 14 /* CC::al */, $noreg, debug-location !16 :: (load (s32) from %ir..backtrace_user.ctl_default, align 8)
+# CHECK-NEXT: DBG_VALUE_LIST !12, !DIExpression(), $noreg, $noreg, debug-location !16
+# CHECK-NEXT: %6:rgpr = t2LDRi12 %5, 4, 14 /* CC::al */, $noreg, debug-location !16 :: (load (s32) from %ir.btc_user_copy)
+# CHECK-NEXT: DBG_VALUE_LIST !12, !DIExpression(), %6, %0, debug-location !16
+# CHECK-NEXT: %2:gpr = t2LDRi12 %5, 8, 14 /* CC::al */, $noreg, debug-location !16 :: (load (s32) from %ir.btc_user_copy_context, align 8)
# CHECK-NEXT: %7:rgpr = t2ANDrr %6, %0, 14 /* CC::al */, $noreg, def $cpsr
-# CHECK-NEXT: DBG_VALUE %2, $noreg, !10, !DIExpression(), debug-location !14
+# CHECK-NEXT: DBG_VALUE %2, $noreg, !12, !DIExpression(), debug-location !16
--- |
target triple = "thumbv7k-apple-watchos8.0.0"
%struct.backtrace_control = type {}
@@ -25,7 +25,7 @@
!llvm.dbg.cu = !{!32}
!0 = !DIGlobalVariableExpression(var: !1, expr: !DIExpression())
!1 = distinct !DIGlobalVariable(type: !11, isDefinition: true)
- !2 = distinct !DISubprogram(unit: !32, retainedNodes: !38)
+ !2 = distinct !DISubprogram(type: !97, unit: !32, retainedNodes: !38)
!3 = !DIFile(filename: "backtrace.pp.c", directory: "/Users/shubham/Development/Delta")
!11 = !DIDerivedType(tag: DW_TAG_const_type, baseType: !12)
!12 = distinct !DICompositeType(tag: DW_TAG_member, offset: 32)
@@ -38,6 +38,8 @@
!88 = !{i32 2, !"Debug Info Version", i32 3}
!93 = !{i32 7, !"frame-pointer", i32 1}
!95 = !DILocation(line: 5, column: 10, scope: !2)
+ !96 = !{null}
+ !97 = !DISubroutineType(types: !96)
name: backtrace_user
registers:
- {id: 0, class: rgpr, }
diff --git a/llvm/test/DebugInfo/ARM/move-dbg-value-same-reg.mir b/llvm/test/DebugInfo/ARM/move-dbg-value-same-reg.mir
index 7a5749d8a2495..7cbf6dd4b5c57 100644
--- a/llvm/test/DebugInfo/ARM/move-dbg-value-same-reg.mir
+++ b/llvm/test/DebugInfo/ARM/move-dbg-value-same-reg.mir
@@ -28,7 +28,7 @@
!llvm.dbg.cu = !{!32}
!0 = !DIGlobalVariableExpression(var: !1, expr: !DIExpression())
!1 = distinct !DIGlobalVariable(type: !11, isDefinition: true)
- !2 = distinct !DISubprogram(unit: !32, retainedNodes: !38)
+ !2 = distinct !DISubprogram(type: !97, unit: !32, retainedNodes: !38)
!3 = !DIFile(filename: "backtrace.pp.c", directory: "/Users/shubham/Development/Delta")
!11 = !DIDerivedType(tag: DW_TAG_const_type, baseType: !12)
!12 = distinct !DICompositeType(tag: DW_TAG_member, offset: 32)
@@ -44,6 +44,8 @@
!88 = !{i32 2, !"Debug Info Version", i32 3}
!93 = !{i32 7, !"frame-pointer", i32 1}
!95 = !DILocation(line: 5, column: 10, scope: !2)
+ !96 = !{null}
+ !97 = !DISubroutineType(types: !96)
name: backtrace_user
registers:
- {id: 0, class: rgpr, }
diff --git a/llvm/test/DebugInfo/ARM/move-dbg-values.mir b/llvm/test/DebugInfo/ARM/move-dbg-values.mir
index 1d2f07d8b8d6b..f90eff1a6d752 100644
--- a/llvm/test/DebugInfo/ARM/move-dbg-values.mir
+++ b/llvm/test/DebugInfo/ARM/move-dbg-values.mir
@@ -1,14 +1,14 @@
# RUN: llc %s -start-after=arm-mve-vpt-opts -stop-after=arm-prera-ldst-opt -o - | FileCheck %s
-# CHECK: %5:rgpr = t2MOVCCr %3, killed %4, 0 /* CC::eq */, $cpsr, debug-location !15
-# CHECK-NEXT: DBG_VALUE 0, $noreg, !10, !DIExpression(), debug-location !15
-# CHECK-NEXT: DBG_VALUE $noreg, $noreg, !10, !DIExpression(), debug-location !15
-# CHECK-NEXT: DBG_VALUE $noreg, $noreg, !10, !DIExpression(), debug-location !15
-# CHECK-NEXT: %0:rgpr = t2LDRi12 %5, 0, 14 /* CC::al */, $noreg, debug-location !15 :: (load (s32) from %ir..backtrace_user.ctl_default, align 8)
-# CHECK-NEXT: %6:rgpr = t2LDRi12 %5, 4, 14 /* CC::al */, $noreg, debug-location !15 :: (load (s32) from %ir.btc_user_copy)
-# CHECK-NEXT: DBG_VALUE %6, $noreg, !10, !DIExpression(), debug-location !15
-# CHECK-NEXT: %2:gpr = t2LDRi12 %5, 8, 14 /* CC::al */, $noreg, debug-location !15 :: (load (s32) from %ir.btc_user_copy_context, align 8)
+# CHECK: %5:rgpr = t2MOVCCr %3, killed %4, 0 /* CC::eq */, $cpsr, debug-location !17
+# CHECK-NEXT: DBG_VALUE 0, $noreg, !12, !DIExpression(), debug-location !17
+# CHECK-NEXT: DBG_VALUE $noreg, $noreg, !12, !DIExpression(), debug-location !17
+# CHECK-NEXT: DBG_VALUE $noreg, $noreg, !12, !DIExpression(), debug-location !17
+# CHECK-NEXT: %0:rgpr = t2LDRi12 %5, 0, 14 /* CC::al */, $noreg, debug-location !17 :: (load (s32) from %ir..backtrace_user.ctl_default, align 8)
+# CHECK-NEXT: %6:rgpr = t2LDRi12 %5, 4, 14 /* CC::al */, $noreg, debug-location !17 :: (load (s32) from %ir.btc_user_copy)
+# CHECK-NEXT: DBG_VALUE %6, $noreg, !12, !DIExpression(), debug-location !17
+# CHECK-NEXT: %2:gpr = t2LDRi12 %5, 8, 14 /* CC::al */, $noreg, debug-location !17 :: (load (s32) from %ir.btc_user_copy_context, align 8)
# CHECK-NEXT: %7:rgpr = t2ANDrr %6, %0, 14 /* CC::al */, $noreg, def $cpsr
-# CHECK-NEXT: DBG_VALUE %2, $noreg, !10, !DIExpression(), debug-location !15
+# CHECK-NEXT: DBG_VALUE %2, $noreg, !12, !DIExpression(), debug-location !17
--- |
target triple = "thumbv7k-apple-watchos8.0.0"
%struct.backtrace_control = type {}
@@ -25,7 +25,7 @@
!llvm.dbg.cu = !{!32}
!0 = !DIGlobalVariableExpression(var: !1, expr: !DIExpression())
!1 = distinct !DIGlobalVariable(type: !11, isDefinition: true)
- !2 = distinct !DISubprogram(unit: !32, retainedNodes: !38)
+ !2 = distinct !DISubprogram(type: !97, unit: !32, retainedNodes: !38)
!3 = !DIFile(filename: "backtrace.pp.c", directory: "/Users/shubham/Development/Delta")
!8 = !DIDerivedType(tag: DW_TAG_typedef, baseType: !11, size: 32)
!11 = !DIDerivedType(tag: DW_TAG_const_type, baseType: !12)
@@ -40,6 +40,8 @@
!88 = !{i32 2, !"Debug Info Version", i32 3}
!93 = !{i32 7, !"frame-pointer", i32 1}
!95 = !DILocation(line: 5, column: 10, scope: !2)
+ !96 = !{null}
+ !97 = !DISubroutineType(types: !96)
name: backtrace_user
registers:
- {id: 0, class: rgpr, }
diff --git a/llvm/test/DebugInfo/Generic/2010-03-19-DbgDeclare.ll b/llvm/test/DebugInfo/Generic/2010-03-19-DbgDeclare.ll
index 3cff8d64c1e83..2ef71bc5b721a 100644
--- a/llvm/test/DebugInfo/Generic/2010-03-19-DbgDeclare.ll
+++ b/llvm/test/DebugInfo/Generic/2010-03-19-DbgDeclare.ll
@@ -8,13 +8,15 @@ entry:
ret void
}
!llvm.dbg.cu = !{!2}
+!7 = !{null}
+!8 = !DISubroutineType(types: !7)
!llvm.module.flags = !{!5}
!2 = distinct !DICompileUnit(language: DW_LANG_Mips_Assembler, producer: "clang version 3.3 ", isOptimized: false, emissionKind: FullDebug, file: !4, enums: !3, retainedTypes: !3, globals: !3, imports: !3)
!3 = !{}
!0 = !DILocation(line: 662302, column: 26, scope: !1)
!1 = !DILocalVariable(name: "foo", scope: !6)
!4 = !DIFile(filename: "scratch.cpp", directory: "/usr/local/google/home/blaikie/dev/scratch")
-!6 = distinct !DISubprogram(unit: !2)
+!6 = distinct !DISubprogram(type: !8, unit: !2)
declare void @llvm.dbg.declare(metadata, metadata, metadata) nounwind readnone
!5 = !{i32 1, !"Debug Info Version", i32 3}
diff --git a/llvm/test/DebugInfo/Generic/dbg-value-lower-linenos.ll b/llvm/test/DebugInfo/Generic/dbg-value-lower-linenos.ll
index b6879e3f827a8..ab3e46720b014 100644
--- a/llvm/test/DebugInfo/Generic/dbg-value-lower-linenos.ll
+++ b/llvm/test/DebugInfo/Generic/dbg-value-lower-linenos.ll
@@ -85,13 +85,15 @@ declare i32 @lookup(...)
; CHECK: ![[MAPVAR]] = !DILocalVariable(name: "floogie",
; CHECK: ![[UNKNOWN2]] = !DILocation(line: 0
+!28 = !{null}
+!29 = !DISubroutineType(types: !28)
!llvm.module.flags = !{!4}
!llvm.dbg.cu = !{!2}
!1 = !DILocalVariable(name: "bees", scope: !5, type: null)
!2 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, file: !3, producer: "beards", isOptimized: true, runtimeVersion: 4, emissionKind: FullDebug)
!3 = !DIFile(filename: "bees.cpp", directory: "")
!4 = !{i32 2, !"Debug Info Version", i32 3}
-!5 = distinct !DISubprogram(name: "nope", scope: !3, file: !3, line: 1, unit: !2)
+!5 = distinct !DISubprogram(name: "nope", scope: !3, file: !3, line: 1, type: !29, unit: !2)
!6 = !DILocation(line: 1, scope: !5)
!7 = !DILocalVariable(name: "flannel", scope: !5, type: null)
!8 = !DILocation(line: 2, scope: !5)
@@ -101,9 +103,9 @@ declare i32 @lookup(...)
!12 = !DILocation(line: 6, scope: !5)
!13 = !DILocation(line: 7, scope: !5)
!14 = !DILocation(line: 8, scope: !5)
-!15 = distinct !DISubprogram(name: "wat", scope: !2, file: !3, line: 10, unit: !2)
+!15 = distinct !DISubprogram(name: "wat", scope: !2, file: !3, line: 10, type: !29, unit: !2)
!16 = !DILocation(line: 9, scope: !15, inlinedAt: !14)
-!20 = distinct !DISubprogram(name: "thin", scope: !3, file: !3, line: 20, unit: !2)
+!20 = distinct !DISubprogram(name: "thin", scope: !3, file: !3, line: 20, type: !29, unit: !2)
!21 = !DILocalVariable(name: "floogie", scope: !20, type: null)
!22 = !DILocation(line: 21, scope: !20)
!23 = !DILocation(line: 22, scope: !20)
diff --git a/llvm/test/DebugInfo/Generic/debuginfofinder-retained-nodes.ll b/llvm/test/DebugInfo/Generic/debuginfofinder-retained-nodes.ll
index a2038c7a6a4bf..3614c08c6cd3b 100644
--- a/llvm/test/DebugInfo/Generic/debuginfofinder-retained-nodes.ll
+++ b/llvm/test/DebugInfo/Generic/debuginfofinder-retained-nodes.ll
@@ -19,6 +19,8 @@ entry:
}
!llvm.dbg.cu = !{!0}
+!18 = !{null}
+!19 = !DISubroutineType(types: !18)
!llvm.module.flags = !{!2, !3, !4, !5}
!llvm.ident = !{!6}
@@ -29,14 +31,14 @@ entry:
!4 = !{i32 1, !"wchar_size", i32 4}
!5 = !{i32 8, !"PIC Level", i32 2}
!6 = !{!"clang version 21.0.0git"}
-!7 = distinct !DISubprogram(name: "foo", linkageName: "_Z3foov", scope: !1, file: !1, line: 1, scopeLine: 1, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !8)
+!7 = distinct !DISubprogram(name: "foo", linkageName: "_Z3foov", scope: !1, file: !1, line: 1, scopeLine: 1, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, type: !19, unit: !0, retainedNodes: !8)
!8 = !{!9, !15}
!9 = !DILocalVariable(name: "v", scope: !7, file: !1, line: 8, type: !10)
!10 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "T", scope: !7, file: !1, line: 2, size: 32, flags: DIFlagTypePassByValue, elements: !11)
!11 = !{!12, !14}
!12 = !DIDerivedType(tag: DW_TAG_member, name: "x", scope: !10, file: !1, line: 3, baseType: !13, size: 32)
!13 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed)
-!14 = !DISubprogram(name: "bar", scope: !10, file: !1, line: 5, scopeLine: 5, flags: DIFlagPrototyped | DIFlagStaticMember, spFlags: DISPFlagLocalToUnit)
+!14 = !DISubprogram(name: "bar", scope: !10, file: !1, line: 5, type: !19, scopeLine: 5, flags: DIFlagPrototyped | DIFlagStaticMember, spFlags: DISPFlagLocalToUnit)
!15 = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: !7, entity: !16, file: !1, line: 7)
-!16 = distinct !DISubprogram(name: "imported", scope: !17, file: !1, line: 3, scopeLine: 3, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0)
+!16 = distinct !DISubprogram(name: "imported", scope: !17, file: !1, line: 3, scopeLine: 3, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, type: !19, unit: !0)
!17 = !DINamespace(name: "ns", scope: null)
\ No newline at end of file
diff --git a/llvm/test/DebugInfo/Generic/invalid.ll b/llvm/test/DebugInfo/Generic/invalid.ll
index 2ff26c0860e4c..bea22ed9ec65a 100644
--- a/llvm/test/DebugInfo/Generic/invalid.ll
+++ b/llvm/test/DebugInfo/Generic/invalid.ll
@@ -3,16 +3,18 @@
; 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, spFlags: DISPFlagDefinition)
+; CHECK-NEXT: !3 = distinct !DISubprogram(name: "patatino", scope: null, type: !4, spFlags: DISPFlagDefinition)
; CHECK-NOT: subprogram definitions must have a compile unit
-; CHECK-NOT: !3 = distinct !DISubprogram(name: "patatino", scope: null, spFlags: DISPFlagDefinition)
+; CHECK-NOT: !3 = distinct !DISubprogram(name: "patatino", scope: null, type: !4, spFlags: DISPFlagDefinition)
; CHECK: warning: ignoring invalid debug info
define void @tinkywinky() !dbg !3 { ret void }
-!llvm.module.flags = !{!4}
+!llvm.module.flags = !{!6}
!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}
+!3 = distinct !DISubprogram(name: "patatino", isDefinition: true, type: !4)
+!4 = !DISubroutineType(types: !5)
+!5 = !{null}
+!6 = !{i32 2, !"Debug Info Version", i32 3}
diff --git a/llvm/test/DebugInfo/Generic/sroa-extract-bits.ll b/llvm/test/DebugInfo/Generic/sroa-extract-bits.ll
index 6db453605cb57..817e9ee75b1bf 100644
--- a/llvm/test/DebugInfo/Generic/sroa-extract-bits.ll
+++ b/llvm/test/DebugInfo/Generic/sroa-extract-bits.ll
@@ -179,7 +179,7 @@ entry:
!0 = !{i32 7, !"Dwarf Version", i32 5}
!1 = !{i32 2, !"Debug Info Version", i32 3}
!2 = !DILocalVariable(name: "x", scope: !3, type: !6)
-!3 = distinct !DISubprogram(name: "test", unit: !4)
+!3 = distinct !DISubprogram(name: "test", unit: !4, type: !13)
!4 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus_14, file: !5, emissionKind: FullDebug)
!5 = !DIFile(filename: "dbg-bit-piece.cpp", directory: "")
!6 = !DIBasicType(name: "unsigned int", size: 32, encoding: DW_ATE_unsigned)
@@ -192,7 +192,7 @@ entry:
;.
; CHECK: [[META2]] = !DILocalVariable(name: "x", scope: [[META3:![0-9]+]], type: [[META6:![0-9]+]])
-; CHECK: [[META3]] = distinct !DISubprogram(name: "test", scope: null, spFlags: DISPFlagDefinition, unit: [[META4:![0-9]+]])
+; CHECK: [[META3]] = distinct !DISubprogram(name: "test", scope: null, type: [[TYPE:![0-9]+]], spFlags: DISPFlagDefinition, unit: [[META4:![0-9]+]])
; CHECK: [[META4]] = distinct !DICompileUnit(language: DW_LANG_C_plus_plus_14, file: [[META5:![0-9]+]], isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug)
; CHECK: [[META5]] = !DIFile(filename: "dbg-bit-piece.cpp", directory: "")
; CHECK: [[META6]] = !DIBasicType(name: "unsigned int", size: 32, encoding: DW_ATE_unsigned)
@@ -203,3 +203,5 @@ entry:
; CHECK: [[META11]] = !DILocalVariable(name: "x", scope: [[META3]], type: [[META12:![0-9]+]])
; CHECK: [[META12]] = !DIBasicType(name: "char", size: 8, encoding: DW_ATE_signed_char)
;.
+!13 = !DISubroutineType(types: !14)
+!14 = !{null}
diff --git a/llvm/test/DebugInfo/Generic/verifier-invalid-disubprogram.ll b/llvm/test/DebugInfo/Generic/verifier-invalid-disubprogram.ll
index 54ce1c56c6b30..0a15453951749 100644
--- a/llvm/test/DebugInfo/Generic/verifier-invalid-disubprogram.ll
+++ b/llvm/test/DebugInfo/Generic/verifier-invalid-disubprogram.ll
@@ -5,14 +5,16 @@
!0 = distinct !DICompileUnit(language: 0, file: !1)
!1 = !DIFile(filename: "-", directory: "")
!2 = !{i32 2, !"Debug Info Version", i32 3}
+!20 = !{null}
+!21 = !DISubroutineType(types: !20)
; CHECK: invalid file
define void @invalid_file() !dbg !3 { ret void }
-!3 = distinct !DISubprogram(file: !0)
+!3 = distinct !DISubprogram(type: !21, file: !0)
; CHECK: line specified with no file
define void @line_specified_with_no_file() !dbg !4 { ret void }
-!4 = distinct !DISubprogram(line: 1)
+!4 = distinct !DISubprogram(type: !21, line: 1)
; CHECK: invalid subroutine type
define void @invalid_subroutine_type() !dbg !5 { ret void }
@@ -20,60 +22,60 @@ define void @invalid_subroutine_type() !dbg !5 { ret void }
; CHECK: invalid containing type
define void @invalid_containing_type() !dbg !6 { ret void }
-!6 = distinct !DISubprogram(containingType: !0)
+!6 = distinct !DISubprogram(type: !21, containingType: !0)
; CHECK: invalid template params
define void @invalid_template_params() !dbg !7 { ret void }
-!7 = distinct !DISubprogram(templateParams: !0)
+!7 = distinct !DISubprogram(type: !21, templateParams: !0)
; CHECK: invalid template parameter
define void @invalid_template_parameter() !dbg !8 { ret void }
-!8 = distinct !DISubprogram(templateParams: !{!0})
+!8 = distinct !DISubprogram(type: !21, templateParams: !{!0})
; CHECK: invalid subprogram declaration
define void @invalid_subprogram_declaration() !dbg !9 { ret void }
-!9 = distinct !DISubprogram(declaration: !0)
+!9 = distinct !DISubprogram(type: !21, declaration: !0)
; CHECK: invalid retained nodes list
define void @invalid_retained_nodes_list() !dbg !10 { ret void }
-!10 = distinct !DISubprogram(retainedNodes: !0)
+!10 = distinct !DISubprogram(type: !21, retainedNodes: !0)
; CHECK: invalid retained nodes, expected DILocalVariable, DILabel, DIImportedEntity or DIType
define void @invalid_retained_nodes_expected() !dbg !11 { ret void }
-!11 = distinct !DISubprogram(retainedNodes: !{!0})
+!11 = distinct !DISubprogram(type: !21, retainedNodes: !{!0})
; CHECK: invalid reference flags
define void @invalid_reference_flags_reference() !dbg !12 { ret void }
-!12 = distinct !DISubprogram(flags: DIFlagLValueReference | DIFlagRValueReference)
+!12 = distinct !DISubprogram(type: !21, flags: DIFlagLValueReference | DIFlagRValueReference)
; CHECK: invalid reference flags
define void @invalid_reference_flags_pass_by() !dbg !13 { ret void }
-!13 = distinct !DISubprogram(flags: DIFlagTypePassByValue | DIFlagTypePassByReference)
+!13 = distinct !DISubprogram(type: !21, flags: DIFlagTypePassByValue | DIFlagTypePassByReference)
; CHECK: subprogram definitions must have a compile unit
define void @subprogram_definitions_must_have_a_compile_unit() !dbg !14 { ret void }
-!14 = distinct !DISubprogram()
+!14 = distinct !DISubprogram(type: !21)
; CHECK: invalid unit type
define void @invalid_unit_type() !dbg !15 { ret void }
-!15 = distinct !DISubprogram(unit: !{})
+!15 = distinct !DISubprogram(type: !21, unit: !{})
; FIXME: should something verify `isDefinition` is not a lie? is it meaningful
; to mistmatch it with respect to the LLVM IR function?
; CHECK: subprogram declarations must not have a compile unit
define void @subprogram_declarations_must_not_have_a_compile_unit() !dbg !16 { ret void }
-!16 = distinct !DISubprogram(isDefinition: false, unit: !0)
+!16 = distinct !DISubprogram(type: !21, isDefinition: false, unit: !0)
; CHECK: invalid thrown types list
define void @invalid_thrown_types_list() !dbg !17 { ret void }
-!17 = distinct !DISubprogram(isDefinition: false, thrownTypes: !0)
+!17 = distinct !DISubprogram(type: !21, isDefinition: false, thrownTypes: !0)
; CHECK: invalid thrown type
define void @invalid_thrown_type() !dbg !18 { ret void }
-!18 = distinct !DISubprogram(isDefinition: false, thrownTypes: !{!0})
+!18 = distinct !DISubprogram(type: !21, isDefinition: false, thrownTypes: !{!0})
; CHECK: DIFlagAllCallsDescribed must be attached to a definition
define void @DIFlagAllCallsDescribed_must_be_attached_to_a_definition() !dbg !19 { ret void }
-!19 = distinct !DISubprogram(isDefinition: false, flags: DIFlagAllCallsDescribed)
+!19 = distinct !DISubprogram(type: !21, isDefinition: false, flags: DIFlagAllCallsDescribed)
; CHECK: warning: ignoring invalid debug info{{.*}}
diff --git a/llvm/test/DebugInfo/MIR/X86/dbgcall-site-interpretation.mir b/llvm/test/DebugInfo/MIR/X86/dbgcall-site-interpretation.mir
index 2035d8fc317d4..2a4787b14c923 100644
--- a/llvm/test/DebugInfo/MIR/X86/dbgcall-site-interpretation.mir
+++ b/llvm/test/DebugInfo/MIR/X86/dbgcall-site-interpretation.mir
@@ -95,7 +95,7 @@
!1 = !DIFile(filename: "dbgcall-site-interpretation.c", directory: "/dir")
!2 = !{}
!3 = !{!4}
- !4 = !DISubprogram(name: "foo", scope: !1, file: !1, line: 9, flags: DIFlagPrototyped, spFlags: DISPFlagOptimized, retainedNodes: !2)
+ !4 = !DISubprogram(name: "foo", scope: !1, file: !1, line: 9, flags: DIFlagPrototyped, type: !10, spFlags: DISPFlagOptimized, retainedNodes: !2)
!5 = !{i32 2, !"Dwarf Version", i32 4}
!6 = !{i32 2, !"Debug Info Version", i32 3}
!7 = !{i32 1, !"wchar_size", i32 4}
diff --git a/llvm/test/DebugInfo/MIR/X86/dbgcall-site-lea-interpretation.mir b/llvm/test/DebugInfo/MIR/X86/dbgcall-site-lea-interpretation.mir
index 44b45e67a8f4c..00e5d503d7b5e 100644
--- a/llvm/test/DebugInfo/MIR/X86/dbgcall-site-lea-interpretation.mir
+++ b/llvm/test/DebugInfo/MIR/X86/dbgcall-site-lea-interpretation.mir
@@ -72,8 +72,8 @@
!1 = !DIFile(filename: "dbgcall-site-lea-interpretation.c", directory: "/dir")
!2 = !{}
!3 = !{!4, !5}
- !4 = !DISubprogram(name: "foo", scope: !1, file: !1, line: 8, flags: DIFlagPrototyped, spFlags: DISPFlagOptimized, retainedNodes: !2)
- !5 = !DISubprogram(name: "foo2", scope: !1, file: !1, line: 9, flags: DIFlagPrototyped, spFlags: DISPFlagOptimized, retainedNodes: !2)
+ !4 = !DISubprogram(name: "foo", scope: !1, file: !1, line: 8, flags: DIFlagPrototyped, type: !11, spFlags: DISPFlagOptimized, retainedNodes: !2)
+ !5 = !DISubprogram(name: "foo2", scope: !1, file: !1, line: 9, flags: DIFlagPrototyped, type: !11, spFlags: DISPFlagOptimized, retainedNodes: !2)
!6 = !{i32 2, !"Dwarf Version", i32 4}
!7 = !{i32 2, !"Debug Info Version", i32 3}
!8 = !{i32 1, !"wchar_size", i32 4}
diff --git a/llvm/test/DebugInfo/MIR/X86/dbginfo-entryvals.mir b/llvm/test/DebugInfo/MIR/X86/dbginfo-entryvals.mir
index 2e858d4d87456..8192ff387a07c 100644
--- a/llvm/test/DebugInfo/MIR/X86/dbginfo-entryvals.mir
+++ b/llvm/test/DebugInfo/MIR/X86/dbginfo-entryvals.mir
@@ -47,7 +47,7 @@
!1 = !DIFile(filename: "test.c", directory: "/dir")
!2 = !{}
!3 = !{!4}
- !4 = !DISubprogram(name: "fn2", scope: !1, file: !1, line: 11, flags: DIFlagPrototyped, spFlags: DISPFlagOptimized, retainedNodes: !2)
+ !4 = !DISubprogram(name: "fn2", scope: !1, file: !1, line: 11, flags: DIFlagPrototyped, type: !10, spFlags: DISPFlagOptimized, retainedNodes: !2)
!5 = !{i32 2, !"Dwarf Version", i32 4}
!6 = !{i32 2, !"Debug Info Version", i32 3}
!7 = !{i32 1, !"wchar_size", i32 4}
diff --git a/llvm/test/DebugInfo/MIR/X86/debug-call-site-param.mir b/llvm/test/DebugInfo/MIR/X86/debug-call-site-param.mir
index 26e66ae13ce5c..5825469ab680f 100644
--- a/llvm/test/DebugInfo/MIR/X86/debug-call-site-param.mir
+++ b/llvm/test/DebugInfo/MIR/X86/debug-call-site-param.mir
@@ -108,8 +108,8 @@
!0 = distinct !DICompileUnit(language: DW_LANG_C99, file: !1, producer: "clang version 9.0.0", isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug, enums: !2, nameTableKind: None)
!1 = !DIFile(filename: "test.c", directory: "/dir")
!2 = !{}
- !4 = !DISubprogram(name: "getVal", scope: !1, file: !1, line: 2, spFlags: DISPFlagOptimized, retainedNodes: !2)
- !5 = !DISubprogram(name: "foo", scope: !1, file: !1, line: 1, flags: DIFlagPrototyped, spFlags: DISPFlagOptimized, retainedNodes: !2)
+ !4 = !DISubprogram(name: "getVal", scope: !1, file: !1, line: 2, type: !11, spFlags: DISPFlagOptimized, retainedNodes: !2)
+ !5 = !DISubprogram(name: "foo", scope: !1, file: !1, line: 1, flags: DIFlagPrototyped, type: !11, spFlags: DISPFlagOptimized, retainedNodes: !2)
!6 = !{i32 2, !"Dwarf Version", i32 4}
!7 = !{i32 2, !"Debug Info Version", i32 3}
!8 = !{i32 1, !"wchar_size", i32 4}
diff --git a/llvm/test/DebugInfo/MIR/X86/machine-cse.mir b/llvm/test/DebugInfo/MIR/X86/machine-cse.mir
index 19dcddd1d4fee..45d0ab3e78df9 100644
--- a/llvm/test/DebugInfo/MIR/X86/machine-cse.mir
+++ b/llvm/test/DebugInfo/MIR/X86/machine-cse.mir
@@ -73,14 +73,16 @@
!0 = !{i32 2, !"Debug Info Version", i32 3}
!1 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, file: !2, producer: "beards", isOptimized: true, runtimeVersion: 4, emissionKind: FullDebug)
!2 = !DIFile(filename: "bees.cpp", directory: "")
- !3 = distinct !DISubprogram(name: "nope", scope: !1, file: !2, line: 1, spFlags: DISPFlagDefinition, unit: !1, retainedNodes: !9)
- !33 = distinct !DISubprogram(name: "alsonope", scope: !1, file: !2, line: 1, spFlags: DISPFlagDefinition, unit: !1, retainedNodes: !9)
+ !3 = distinct !DISubprogram(name: "nope", type: !35, scope: !1, file: !2, line: 1, spFlags: DISPFlagDefinition, unit: !1, retainedNodes: !9)
+ !33 = distinct !DISubprogram(name: "alsonope", type: !35, scope: !1, file: !2, line: 1, spFlags: DISPFlagDefinition, unit: !1, retainedNodes: !9)
!4 = !DILocalVariable(name: "bees", scope: !3, type: !5)
!5 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !6, size: 64)
!6 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed)
!7 = !DILocation(line: 0, scope: !3)
!8 = !{!4}
!9 = !{}
+ !34 = !{null}
+ !35 = !DISubroutineType(types: !34)
; CHECK: ![[METAVAR:[0-9]+]] = !DILocalVariable(name: "bees",
diff --git a/llvm/test/DebugInfo/X86/instr-ref-opt-bisect2.ll b/llvm/test/DebugInfo/X86/instr-ref-opt-bisect2.ll
index 92aedfea9449a..12d992775b834 100644
--- a/llvm/test/DebugInfo/X86/instr-ref-opt-bisect2.ll
+++ b/llvm/test/DebugInfo/X86/instr-ref-opt-bisect2.ll
@@ -26,11 +26,13 @@ bb:
}
!llvm.dbg.cu = !{!0}
+!6 = !{null}
+!7 = !DISubroutineType(types: !6)
!llvm.module.flags = !{!2}
!0 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus_14, file: !1)
!1 = !DIFile(filename: "instr-ref-opt-bisect2.ll", directory: ".")
!2 = !{i32 2, !"Debug Info Version", i32 3}
-!3 = distinct !DISubprogram(name: "instr-ref-opt-bisect2", file: !1, unit: !0)
+!3 = distinct !DISubprogram(name: "instr-ref-opt-bisect2", file: !1, type: !7, unit: !0)
!4 = !DILocalVariable(name: "arg", arg: 2, scope: !3)
!5 = !DILocation(line: 0, scope: !3)
diff --git a/llvm/test/DebugInfo/X86/pr40427.ll b/llvm/test/DebugInfo/X86/pr40427.ll
index 264076b2569dd..a0a3e92c0bf21 100644
--- a/llvm/test/DebugInfo/X86/pr40427.ll
+++ b/llvm/test/DebugInfo/X86/pr40427.ll
@@ -45,12 +45,14 @@ bb1:
declare void @llvm.dbg.value(metadata, metadata, metadata)
+!8 = !{null}
+!9 = !DISubroutineType(types: !8)
!llvm.module.flags = !{!4}
!llvm.dbg.cu = !{!2}
!1 = !DILocalVariable(name: "bees", scope: !5, type: null)
!2 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, file: !3, producer: "beards", isOptimized: true, runtimeVersion: 4, emissionKind: FullDebug)
!3 = !DIFile(filename: "bees.cpp", directory: "")
!4 = !{i32 2, !"Debug Info Version", i32 3}
-!5 = distinct !DISubprogram(name: "nope", scope: !2, file: !3, line: 1, unit: !2)
+!5 = distinct !DISubprogram(name: "nope", scope: !2, file: !3, line: 1, type: !9, unit: !2)
!6 = !DILocation(line: 0, scope: !5)
!7 = !DILocalVariable(name: "flannel", scope: !5, type: null)
diff --git a/llvm/test/DebugInfo/X86/sunk-compare.ll b/llvm/test/DebugInfo/X86/sunk-compare.ll
index 5ca164ccb26ec..d537b6d0b3184 100644
--- a/llvm/test/DebugInfo/X86/sunk-compare.ll
+++ b/llvm/test/DebugInfo/X86/sunk-compare.ll
@@ -32,6 +32,8 @@ exit2.bb:
}
!llvm.dbg.cu = !{!0}
+!10 = !{null}
+!11 = !DISubroutineType(types: !10)
!llvm.module.flags = !{!3, !4}
!0 = distinct !DICompileUnit(language: DW_LANG_C, file: !1, producer: "clang", isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug, enums: !2, globals: !2)
@@ -39,7 +41,7 @@ exit2.bb:
!2 = !{}
!3 = !{i32 2, !"Dwarf Version", i32 4}
!4 = !{i32 2, !"Debug Info Version", i32 3}
-!5 = distinct !DISubprogram(name: "foo", linkageName: "foo", scope: !1, file: !1, line: 1, isLocal: false, isDefinition: true, scopeLine: 1, flags: DIFlagPrototyped, isOptimized: false, unit: !0, retainedNodes: !2)
+!5 = distinct !DISubprogram(name: "foo", linkageName: "foo", scope: !1, file: !1, line: 1, isLocal: false, isDefinition: true, scopeLine: 1, flags: DIFlagPrototyped, isOptimized: false, type: !11, unit: !0, retainedNodes: !2)
!6 = !DILocation(line: 2, column: 0, scope: !5)
!7 = !DILocation(line: 3, column: 0, scope: !5)
!8 = !DILocation(line: 4, column: 0, scope: !5)
diff --git a/llvm/test/DebugInfo/sroa-handle-dbg-value.ll b/llvm/test/DebugInfo/sroa-handle-dbg-value.ll
index dc9abde884b37..5a877372fa462 100644
--- a/llvm/test/DebugInfo/sroa-handle-dbg-value.ll
+++ b/llvm/test/DebugInfo/sroa-handle-dbg-value.ll
@@ -93,7 +93,7 @@ entry:
!49 = !DISubroutineType(types: !50)
!50 = !{ !51}
!51 = !DICompositeType(tag: DW_TAG_structure_type, identifier: "$s4main1TV13TangentVectorVXMtD")
-!52 = !DISubprogram(spFlags: DISPFlagOptimized)
+!52 = !DISubprogram(type: !49, spFlags: DISPFlagOptimized)
!53 = !{!54, !56, !57}
!54 = !DILocalVariable(name: "a", scope: !44, flags: DIFlagArtificial)
!55 = !DIDerivedType(tag: DW_TAG_const_type, baseType: !46)
@@ -102,7 +102,7 @@ entry:
!58 = !DIDerivedType(tag: DW_TAG_const_type, baseType: !51)
!61 = !DILocation(scope: !44)
!62 = !DILocalVariable(name: "d", scope: !63, type: !72, flags: DIFlagArtificial)
-!63 = distinct !DISubprogram(unit: !16, retainedNodes: !70)
+!63 = distinct !DISubprogram(type: !49, unit: !16, retainedNodes: !70)
!64 = !DICompositeType(tag: DW_TAG_structure_type, size: 200, identifier: "$s4main1UV13TangentVectorVD")
!70 = !{}
!72 = !DIDerivedType(tag: DW_TAG_const_type, baseType: !64)
diff --git a/llvm/test/Instrumentation/AddressSanitizer/stack_layout.ll b/llvm/test/Instrumentation/AddressSanitizer/stack_layout.ll
index afbfbd6c7a96a..2d1b824822ca2 100644
--- a/llvm/test/Instrumentation/AddressSanitizer/stack_layout.ll
+++ b/llvm/test/Instrumentation/AddressSanitizer/stack_layout.ll
@@ -94,12 +94,14 @@ define void @Func5() sanitize_address #0 !dbg !11 {
!0 = distinct !DICompileUnit(language: DW_LANG_C99, file: !1)
!1 = !DIFile(filename: "../file1.c", directory: "/")
-!11 = distinct !DISubprogram(name: "Func5", scope: !1, file: !1, line: 6, unit: !0)
+!11 = distinct !DISubprogram(name: "Func5", scope: !1, file: !1, line: 6, type: !19, unit: !0)
!12 = !DILocation(line: 7, column: 3, scope: !11)
!18 = !DILocation(line: 10, column: 1, scope: !11)
+!19 = !DISubroutineType(types: !20)
+!20 = !{null}
!21 = !DIFile(filename: "../file2.c", directory: "/")
-!6 = distinct !DISubprogram(name: "Func4", scope: !1, file: !21, line: 2, unit: !0)
+!6 = distinct !DISubprogram(name: "Func4", scope: !1, file: !21, line: 2, type: !19, unit: !0)
!15 = distinct !DILocation(line: 8, column: 3, scope: !11)
!14 = !DILocation(line: 3, column: 3, scope: !6, inlinedAt: !15)
!17 = !DILocation(line: 4, column: 1, scope: !6, inlinedAt: !15)
diff --git a/llvm/test/Transforms/AggressiveInstCombine/AArch64/combine_ignore_debug.ll b/llvm/test/Transforms/AggressiveInstCombine/AArch64/combine_ignore_debug.ll
index d09d43c936257..cc5714861aeb1 100644
--- a/llvm/test/Transforms/AggressiveInstCombine/AArch64/combine_ignore_debug.ll
+++ b/llvm/test/Transforms/AggressiveInstCombine/AArch64/combine_ignore_debug.ll
@@ -41,11 +41,13 @@ entry:
declare void @llvm.dbg.value(metadata, metadata, metadata)
!llvm.dbg.cu = !{!0}
+!6 = !{null}
+!7 = !DISubroutineType(types: !6)
!llvm.module.flags = !{!2}
!0 = distinct !DICompileUnit(language: DW_LANG_C11, file: !1)
!1 = !DIFile(filename: "foo.c", directory: "/")
!2 = !{i32 2, !"Debug Info Version", i32 3}
!3 = !DILocalVariable(scope: !4)
-!4 = distinct !DISubprogram(unit: !0)
+!4 = distinct !DISubprogram(type: !7, unit: !0)
!5 = !DILocation(scope: !4)
diff --git a/llvm/test/Transforms/ArgumentPromotion/pr33641_remove_arg_dbgvalue.ll b/llvm/test/Transforms/ArgumentPromotion/pr33641_remove_arg_dbgvalue.ll
index ef362f986182f..c04d6174cd8f2 100644
--- a/llvm/test/Transforms/ArgumentPromotion/pr33641_remove_arg_dbgvalue.ll
+++ b/llvm/test/Transforms/ArgumentPromotion/pr33641_remove_arg_dbgvalue.ll
@@ -15,7 +15,7 @@ define void @foo() {
define internal void @bar(ptr %p) {
; CHECK-LABEL: define {{.*}}void @bar()
-; CHECK-NEXT: #dbg_value(ptr poison, !3, !DIExpression(), !5
+; CHECK-NEXT: #dbg_value(ptr poison, !3, !DIExpression(), !7
call void @llvm.dbg.value(metadata ptr %p, metadata !3, metadata !DIExpression()), !dbg !5
ret void
}
@@ -31,5 +31,7 @@ attributes #0 = { nofree nosync nounwind readnone speculatable willreturn }
!1 = !DIFile(filename: "test.c", directory: "")
!2 = !{i32 2, !"Debug Info Version", i32 3}
!3 = !DILocalVariable(name: "p", scope: !4)
-!4 = distinct !DISubprogram(name: "bar", scope: null, spFlags: DISPFlagDefinition, unit: !0)
+!4 = distinct !DISubprogram(name: "bar", scope: null, spFlags: DISPFlagDefinition, unit: !0, type: !6)
!5 = !DILocation(line: 1, column: 1, scope: !4)
+!6 = !DISubroutineType(types: !7)
+!7 = !{null}
diff --git a/llvm/test/Transforms/Attributor/ArgumentPromotion/dbg.ll b/llvm/test/Transforms/Attributor/ArgumentPromotion/dbg.ll
index c6f377c87f881..f2f242f427708 100644
--- a/llvm/test/Transforms/Attributor/ArgumentPromotion/dbg.ll
+++ b/llvm/test/Transforms/Attributor/ArgumentPromotion/dbg.ll
@@ -51,12 +51,14 @@ define void @caller(ptr %Y, ptr %P) {
}
+!7 = !{null}
+!8 = !DISubroutineType(types: !7)
!llvm.module.flags = !{!0}
!llvm.dbg.cu = !{!3}
!0 = !{i32 2, !"Debug Info Version", i32 3}
!1 = !DILocation(line: 8, scope: !2)
-!2 = distinct !DISubprogram(name: "test", file: !5, line: 3, isLocal: true, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, unit: !3, scopeLine: 3, scope: null)
+!2 = distinct !DISubprogram(name: "test", file: !5, line: 3, isLocal: true, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, type: !8, unit: !3, scopeLine: 3, scope: null)
!3 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, producer: "clang version 3.5.0 ", isOptimized: false, emissionKind: LineTablesOnly, file: !5)
!5 = !DIFile(filename: "test.c", directory: "")
!6 = !DILocation(line: 9, scope: !2)
@@ -68,14 +70,14 @@ define void @caller(ptr %Y, ptr %P) {
; TUNIT: [[META0:![0-9]+]] = !{i32 2, !"Debug Info Version", i32 3}
; TUNIT: [[META1:![0-9]+]] = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, file: [[META2:![0-9]+]], producer: "{{.*}}clang version {{.*}} ", isOptimized: false, runtimeVersion: 0, emissionKind: LineTablesOnly)
; TUNIT: [[META2]] = !DIFile(filename: "test.c", directory: "")
-; TUNIT: [[DBG3]] = distinct !DISubprogram(name: "test", scope: null, file: [[META2]], line: 3, scopeLine: 3, virtualIndex: 6, flags: DIFlagPrototyped, spFlags: DISPFlagLocalToUnit | DISPFlagDefinition, unit: [[META1]])
+; TUNIT: [[DBG3]] = distinct !DISubprogram(name: "test", scope: null, file: [[META2]], line: 3, type: [[META4:![0-9]+]], scopeLine: 3, virtualIndex: 6, flags: DIFlagPrototyped, spFlags: DISPFlagLocalToUnit | DISPFlagDefinition, unit: [[META1]])
; TUNIT: [[DBG4]] = !DILocation(line: 8, scope: [[DBG3]])
; TUNIT: [[DBG5]] = !DILocation(line: 9, scope: [[DBG3]])
;.
; CGSCC: [[META0:![0-9]+]] = !{i32 2, !"Debug Info Version", i32 3}
; CGSCC: [[META1:![0-9]+]] = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, file: [[META2:![0-9]+]], producer: "{{.*}}clang version {{.*}} ", isOptimized: false, runtimeVersion: 0, emissionKind: LineTablesOnly)
; CGSCC: [[META2]] = !DIFile(filename: "test.c", directory: "")
-; CGSCC: [[DBG3]] = distinct !DISubprogram(name: "test", scope: null, file: [[META2]], line: 3, scopeLine: 3, virtualIndex: 6, flags: DIFlagPrototyped, spFlags: DISPFlagLocalToUnit | DISPFlagDefinition, unit: [[META1]])
+; CGSCC: [[DBG3]] = distinct !DISubprogram(name: "test", scope: null, file: [[META2]], line: 3, type: [[META4:![0-9]+]], scopeLine: 3, virtualIndex: 6, flags: DIFlagPrototyped, spFlags: DISPFlagLocalToUnit | DISPFlagDefinition, unit: [[META1]])
; CGSCC: [[DBG4]] = !DILocation(line: 8, scope: [[DBG3]])
; CGSCC: [[DBG5]] = !DILocation(line: 9, scope: [[DBG3]])
;.
diff --git a/llvm/test/Transforms/Attributor/ArgumentPromotion/pr33641_remove_arg_dbgvalue.ll b/llvm/test/Transforms/Attributor/ArgumentPromotion/pr33641_remove_arg_dbgvalue.ll
index f095fbde578a6..483d99c481117 100644
--- a/llvm/test/Transforms/Attributor/ArgumentPromotion/pr33641_remove_arg_dbgvalue.ll
+++ b/llvm/test/Transforms/Attributor/ArgumentPromotion/pr33641_remove_arg_dbgvalue.ll
@@ -38,12 +38,14 @@ define internal void @bar(%p_t %p) {
declare void @llvm.dbg.value(metadata, metadata, metadata)
!llvm.dbg.cu = !{!0}
+!7 = !{null}
+!8 = !DISubroutineType(types: !7)
!llvm.module.flags = !{!2}
!0 = distinct !DICompileUnit(language: DW_LANG_C, file: !1)
!1 = !DIFile(filename: "test.c", directory: "")
!2 = !{i32 2, !"Debug Info Version", i32 3}
-!3 = distinct !DISubprogram(name: "bar", unit: !0)
+!3 = distinct !DISubprogram(name: "bar", type: !8, unit: !0)
!4 = !DILocalVariable(name: "p", scope: !3)
!5 = !DIExpression()
!6 = !DILocation(line: 1, column: 1, scope: !3)
@@ -60,7 +62,7 @@ declare void @llvm.dbg.value(metadata, metadata, metadata)
; CGSCC: [[META1]] = !DIFile(filename: "test.c", directory: "")
; CGSCC: [[META2:![0-9]+]] = !{i32 2, !"Debug Info Version", i32 3}
; CGSCC: [[META3]] = !DILocalVariable(name: "p", scope: [[META4:![0-9]+]])
-; CGSCC: [[META4]] = distinct !DISubprogram(name: "bar", scope: null, spFlags: DISPFlagDefinition, unit: [[META0]])
+; CGSCC: [[META4]] = distinct !DISubprogram(name: "bar", scope: null, type: [[TYPE:![0-9]+]], spFlags: DISPFlagDefinition, unit: [[META0]])
; CGSCC: [[META5]] = !DILocation(line: 1, column: 1, scope: [[META4]])
;.
;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:
diff --git a/llvm/test/Transforms/CallSiteSplitting/callsite-split-debug.ll b/llvm/test/Transforms/CallSiteSplitting/callsite-split-debug.ll
index d6d99e672ed17..17254bd2c7d04 100644
--- a/llvm/test/Transforms/CallSiteSplitting/callsite-split-debug.ll
+++ b/llvm/test/Transforms/CallSiteSplitting/callsite-split-debug.ll
@@ -42,6 +42,8 @@ declare void @llvm.dbg.assign(metadata, metadata, metadata, metadata, metadata,
attributes #0 = { nounwind readnone speculatable }
!llvm.dbg.cu = !{!0}
+!14 = !{null}
+!15 = !DISubroutineType(types: !14)
!llvm.module.flags = !{!2, !3}
!llvm.ident = !{!4}
@@ -51,7 +53,7 @@ attributes #0 = { nounwind readnone speculatable }
!3 = !{i32 2, !"Debug Info Version", i32 3}
!4 = !{!"My Compiler"}
!5 = !DIBasicType(name: "int", size: 16, encoding: DW_ATE_signed)
-!6 = distinct !DISubprogram(name: "foo", scope: !1, file: !1, line: 4, unit: !0)
+!6 = distinct !DISubprogram(name: "foo", scope: !1, file: !1, line: 4, type: !15, unit: !0)
!7 = !DILocalVariable(name: "c", scope: !6, line: 5, type: !5)
!8 = !DILocation(line: 5, column: 7, scope: !6)
!11 = !DILocalVariable(name: "a", scope: !6, line: 6, type: !5)
diff --git a/llvm/test/Transforms/CodeGenPrepare/X86/cast-debuginfo-salvage.ll b/llvm/test/Transforms/CodeGenPrepare/X86/cast-debuginfo-salvage.ll
index 51e75c1fc8486..736451df57af4 100644
--- a/llvm/test/Transforms/CodeGenPrepare/X86/cast-debuginfo-salvage.ll
+++ b/llvm/test/Transforms/CodeGenPrepare/X86/cast-debuginfo-salvage.ll
@@ -21,13 +21,15 @@ define void @test(i64 %arg) {
!2 = !{}
!3 = !{i32 2, !"Debug Info Version", i32 3}
!4 = !DILocalVariable(name: "c", scope: !5, file: !1, line: 26)
-!5 = distinct !DISubprogram(name: "n<(lambda at test.cpp:39:14)>", linkageName: "_ZN1m1nIZN1o1pEvEUl1kE_EE5arrayT_i", scope: null, file: !1, line: 25, spFlags: DISPFlagDefinition, unit: !0)
+!5 = distinct !DISubprogram(name: "n<(lambda at test.cpp:39:14)>", linkageName: "_ZN1m1nIZN1o1pEvEUl1kE_EE5arrayT_i", scope: null, file: !1, line: 25, spFlags: DISPFlagDefinition, unit: !0, type: !7)
!6 = !DILocation(line: 26, column: 11, scope: !5)
;.
; CHECK: [[META0:![0-9]+]] = distinct !DICompileUnit(language: DW_LANG_C_plus_plus_14, file: [[META1:![0-9]+]], producer: "{{.*}}clang version {{.*}}", isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug, retainedTypes: [[META2:![0-9]+]], globals: [[META2]], splitDebugInlining: false, nameTableKind: None)
; CHECK: [[META1]] = !DIFile(filename: "test.cpp", directory: {{.*}})
; CHECK: [[META2]] = !{}
; CHECK: [[META4]] = !DILocalVariable(name: "c", scope: [[META5:![0-9]+]], file: [[META1]], line: 26)
-; CHECK: [[META5]] = distinct !DISubprogram(name: "n<(lambda at test.cpp:39:14)>", linkageName: "_ZN1m1nIZN1o1pEvEUl1kE_EE5arrayT_i", scope: null, file: [[META1]], line: 25, spFlags: DISPFlagDefinition, unit: [[META0]])
+; CHECK: [[META5]] = distinct !DISubprogram(name: "n<(lambda at test.cpp:39:14)>", linkageName: "_ZN1m1nIZN1o1pEvEUl1kE_EE5arrayT_i", scope: null, file: [[META1]], line: 25, type: [[TYPE:![0-9]+]], spFlags: DISPFlagDefinition, unit: [[META0]])
; CHECK: [[META6]] = !DILocation(line: 26, column: 11, scope: [[META5]])
;.
+!7 = !DISubroutineType(types: !8)
+!8 = !{null}
diff --git a/llvm/test/Transforms/Coroutines/declare-value.ll b/llvm/test/Transforms/Coroutines/declare-value.ll
index 58f9f10a6c076..bbf19f3753c98 100644
--- a/llvm/test/Transforms/Coroutines/declare-value.ll
+++ b/llvm/test/Transforms/Coroutines/declare-value.ll
@@ -56,17 +56,19 @@ attributes #0 = { presplitcoroutine }
attributes #1 = { nomerge nounwind }
attributes #2 = { nounwind }
+!12 = !{null}
+!13 = !DISubroutineType(types: !12)
!llvm.module.flags = !{!0}
!0 = !{i32 2, !"Debug Info Version", i32 3}
-!1 = distinct !DISubprogram(scope: null, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !4)
+!1 = distinct !DISubprogram(scope: null, spFlags: DISPFlagDefinition, type: !13, unit: !2, retainedNodes: !4)
!2 = distinct !DICompileUnit(language: DW_LANG_Swift, file: !3, isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug)
!3 = !DIFile(filename: "blah", directory: "")
!4 = !{}
!5 = !DILocalVariable(scope: !1, type: !6)
!6 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "Klass")
!7 = !DILocation(line: 0, scope: !1)
-!8 = distinct !DISubprogram(scope: null, spFlags: DISPFlagDefinition, unit: !2)
+!8 = distinct !DISubprogram(scope: null, spFlags: DISPFlagDefinition, type: !13, unit: !2)
!9 = !DILocation(line: 0, scope: !8)
-!10 = distinct !DISubprogram(scope: null, spFlags: DISPFlagDefinition, unit: !2)
+!10 = distinct !DISubprogram(scope: null, spFlags: DISPFlagDefinition, type: !13, unit: !2)
!11 = !DILocation(line: 0, scope: !10)
\ No newline at end of file
diff --git a/llvm/test/Transforms/Inline/debug-invoke.ll b/llvm/test/Transforms/Inline/debug-invoke.ll
index 444363667fa2b..45897fcaa70b8 100644
--- a/llvm/test/Transforms/Inline/debug-invoke.ll
+++ b/llvm/test/Transforms/Inline/debug-invoke.ll
@@ -30,11 +30,13 @@ lpad:
ret void
}
+!7 = !{null}
+!8 = !DISubroutineType(types: !7)
!llvm.module.flags = !{!1}
!llvm.dbg.cu = !{!5}
!1 = !{i32 2, !"Debug Info Version", i32 3}
-!2 = distinct !DISubprogram(unit: !5)
+!2 = distinct !DISubprogram(type: !8, unit: !5)
!3 = !DILocation(line: 1, scope: !2)
!4 = !DILocation(line: 2, scope: !2)
!5 = distinct !DICompileUnit(language: DW_LANG_C99, producer: "clang",
diff --git a/llvm/test/Transforms/InstCombine/assume.ll b/llvm/test/Transforms/InstCombine/assume.ll
index 197d680babe11..67ee6f5303999 100644
--- a/llvm/test/Transforms/InstCombine/assume.ll
+++ b/llvm/test/Transforms/InstCombine/assume.ll
@@ -1058,7 +1058,7 @@ declare void @llvm.dbg.value(metadata, metadata, metadata)
!0 = distinct !DICompileUnit(language: DW_LANG_C, file: !3, producer: "Me", isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug, enums: null, retainedTypes: null, imports: null)
!1 = !DILocalVariable(name: "", arg: 1, scope: !2, file: null, line: 1, type: null)
-!2 = distinct !DISubprogram(name: "debug", linkageName: "debug", scope: null, file: null, line: 0, type: null, isLocal: false, isDefinition: true, scopeLine: 1, flags: DIFlagPrototyped, isOptimized: true, unit: !0)
+!2 = distinct !DISubprogram(name: "debug", linkageName: "debug", scope: null, file: null, line: 0, type: !10, isLocal: false, isDefinition: true, scopeLine: 1, flags: DIFlagPrototyped, isOptimized: true, unit: !0)
!3 = !DIFile(filename: "consecutive-fences.ll", directory: "")
!5 = !{i32 2, !"Dwarf Version", i32 4}
!6 = !{i32 2, !"Debug Info Version", i32 3}
@@ -1069,3 +1069,5 @@ declare void @llvm.dbg.value(metadata, metadata, metadata)
attributes #0 = { nounwind uwtable }
attributes #1 = { nounwind }
+!10 = !DISubroutineType(types: !11)
+!11 = !{null}
diff --git a/llvm/test/Transforms/InstCombine/consecutive-fences.ll b/llvm/test/Transforms/InstCombine/consecutive-fences.ll
index b79a50b3ef2c7..84d7ff3cdd115 100644
--- a/llvm/test/Transforms/InstCombine/consecutive-fences.ll
+++ b/llvm/test/Transforms/InstCombine/consecutive-fences.ll
@@ -113,10 +113,12 @@ declare void @llvm.dbg.value(metadata, metadata, metadata)
!0 = distinct !DICompileUnit(language: DW_LANG_C, file: !3, producer: "Me", isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug, enums: null, retainedTypes: null, imports: null)
!1 = !DILocalVariable(name: "", arg: 1, scope: !2, file: null, line: 1, type: null)
-!2 = distinct !DISubprogram(name: "debug", linkageName: "debug", scope: null, file: null, line: 0, type: null, isLocal: false, isDefinition: true, scopeLine: 1, flags: DIFlagPrototyped, isOptimized: true, unit: !0)
+!2 = distinct !DISubprogram(name: "debug", linkageName: "debug", scope: null, file: null, line: 0, type: !10, isLocal: false, isDefinition: true, scopeLine: 1, flags: DIFlagPrototyped, isOptimized: true, unit: !0)
!3 = !DIFile(filename: "consecutive-fences.ll", directory: "")
!5 = !{i32 2, !"Dwarf Version", i32 4}
!6 = !{i32 2, !"Debug Info Version", i32 3}
!7 = !{i32 1, !"wchar_size", i32 4}
!8 = !{i32 7, !"PIC Level", i32 2}
!9 = !DILocation(line: 0, column: 0, scope: !2)
+!10 = !DISubroutineType(types: !11)
+!11 = !{null}
diff --git a/llvm/test/Transforms/LICM/hoist-phi-metadata.ll b/llvm/test/Transforms/LICM/hoist-phi-metadata.ll
index 6f64bf7d7c875..9b7387495df29 100644
--- a/llvm/test/Transforms/LICM/hoist-phi-metadata.ll
+++ b/llvm/test/Transforms/LICM/hoist-phi-metadata.ll
@@ -51,7 +51,7 @@ end:
!1 = !DIFile(filename: "t", directory: "/")
!2 = !{i32 7, !"Dwarf Version", i32 5}
!3 = !{i32 2, !"Debug Info Version", i32 3}
-!4 = distinct !DISubprogram(name: "triangle_phi", linkageName: "triangle_phi", scope: !1, file: !1, line: 1, unit: !0)
+!4 = distinct !DISubprogram(name: "triangle_phi", linkageName: "triangle_phi", scope: !1, file: !1, line: 1, unit: !0, type: !10)
!5 = !DILocation(line: 1, column: 22, scope: !4)
!6 = !DILocation(line: 2, column: 22, scope: !4)
!7 = !DILocation(line: 3, column: 22, scope: !4)
@@ -62,9 +62,11 @@ end:
; CHECK: [[META1:![0-9]+]] = !{i32 2, !"Debug Info Version", i32 3}
; CHECK: [[PROF2]] = !{!"branch_weights", i32 5, i32 7}
; CHECK: [[DBG3]] = !DILocation(line: 2, column: 22, scope: [[META4:![0-9]+]])
-; CHECK: [[META4]] = distinct !DISubprogram(name: "triangle_phi", linkageName: "triangle_phi", scope: [[META5:![0-9]+]], file: [[META5]], line: 1, spFlags: DISPFlagDefinition, unit: [[META6:![0-9]+]])
+; CHECK: [[META4]] = distinct !DISubprogram(name: "triangle_phi", linkageName: "triangle_phi", scope: [[META5:![0-9]+]], file: [[META5]], line: 1, type: [[TYPE:![0-9]+]], spFlags: DISPFlagDefinition, unit: [[META6:![0-9]+]])
; CHECK: [[META5]] = !DIFile(filename: "{{.*}}t", directory: {{.*}})
; CHECK: [[META6]] = distinct !DICompileUnit(language: DW_LANG_C_plus_plus_14, file: [[META5]], isOptimized: false, runtimeVersion: 0, emissionKind: NoDebug)
; CHECK: [[DBG7]] = !DILocation(line: 3, column: 22, scope: [[META4]])
; CHECK: [[PROF8]] = !{!"branch_weights", i32 13, i32 11}
;.
+!10 = !DISubroutineType(types: !11)
+!11 = !{null}
diff --git a/llvm/test/Transforms/LoopDistribute/debug-loc.ll b/llvm/test/Transforms/LoopDistribute/debug-loc.ll
index 6456c3452b966..c71b6a853d47a 100644
--- a/llvm/test/Transforms/LoopDistribute/debug-loc.ll
+++ b/llvm/test/Transforms/LoopDistribute/debug-loc.ll
@@ -35,9 +35,11 @@ exit: ; preds = %for.body
!llvm.module.flags = !{!5, !6, !7}
!0 = !DIFile(filename: "f.c", directory: "/")
-!1 = distinct !DISubprogram(name: "f", scope: !0, file: !0, unit: !4)
+!1 = distinct !DISubprogram(name: "f", scope: !0, file: !0, type: !8, unit: !4)
!2 = !DILocation(line: 5, column: 2, scope: !1)
!4 = distinct !DICompileUnit(language: DW_LANG_C99, file: !0, producer: "clang")
!5 = !{i32 1, !"Debug Info Version", i32 3}
!6 = !{i32 2, !"Dwarf Version", i32 2}
!7 = !{i32 1, !"PIC Level", i32 2}
+!8 = !DISubroutineType(types: !9)
+!9 = !{null}
diff --git a/llvm/test/Transforms/LoopVectorize/debugloc.ll b/llvm/test/Transforms/LoopVectorize/debugloc.ll
index 600b82669f09a..cdf7e9740974b 100644
--- a/llvm/test/Transforms/LoopVectorize/debugloc.ll
+++ b/llvm/test/Transforms/LoopVectorize/debugloc.ll
@@ -243,8 +243,8 @@ exit:
!27 = !{i32 1, !"Debug Info Version", i32 3}
!28 = !DILocation(line: 137, column: 44, scope: !29)
!29 = distinct !DILexicalBlock(scope: !30, file: !5, line: 137, column: 2)
-!30 = distinct !DISubprogram(name: "Place", scope: !5, file: !5, line: 135, scopeLine: 135, flags: DIFlagPrototyped | DIFlagAllCallsDescribed, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !0)
-!31 = distinct !DISubprogram(name: "Place", scope: !5, file: !5, line: 135, scopeLine: 135, flags: DIFlagPrototyped | DIFlagAllCallsDescribed, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !0)
+!30 = distinct !DISubprogram(name: "Place", scope: !5, file: !5, line: 135, scopeLine: 135, flags: DIFlagPrototyped | DIFlagAllCallsDescribed, spFlags: DISPFlagDefinition | DISPFlagOptimized, type: !7, unit: !0)
+!31 = distinct !DISubprogram(name: "Place", scope: !5, file: !5, line: 135, scopeLine: 135, flags: DIFlagPrototyped | DIFlagAllCallsDescribed, spFlags: DISPFlagDefinition | DISPFlagOptimized, type: !7, unit: !0)
!32 = distinct !DILexicalBlock(scope: !31, file: !5, line: 137, column: 2)
!33 = !DILocation(line: 210, column: 44, scope: !32)
!34 = !DILocation(line: 320, column: 44, scope: !32)
diff --git a/llvm/test/Transforms/LoopVectorize/discriminator.ll b/llvm/test/Transforms/LoopVectorize/discriminator.ll
index 9084ba98c5a19..a2beb1992be94 100644
--- a/llvm/test/Transforms/LoopVectorize/discriminator.ll
+++ b/llvm/test/Transforms/LoopVectorize/discriminator.ll
@@ -57,13 +57,15 @@ define void @_Z3foov() #0 !dbg !6 {
;PSEUDO_PROBE: ![[#PROBE]] = !DILocation(line: 6, column: 13, scope: ![[TOP]])
!llvm.dbg.cu = !{!0}
+!23 = !{null}
+!24 = !DISubroutineType(types: !23)
!llvm.module.flags = !{!3, !4}
!0 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, file: !1, debugInfoForProfiling: true)
!1 = !DIFile(filename: "a.cc", directory: "/")
!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, unit: !0)
+!6 = distinct !DISubprogram(name: "foo", scope: !1, file: !1, line: 4, type: !24, unit: !0)
!8 = !DILocation(line: 6, column: 13, scope: !6)
!9 = !{!10, !10, i64 0}
!10 = !{!"any pointer", !11, i64 0}
diff --git a/llvm/test/Transforms/Mem2Reg/dbg_declare_to_value_conversions.ll b/llvm/test/Transforms/Mem2Reg/dbg_declare_to_value_conversions.ll
index 6b58a2860ac31..0dc09ce64082f 100644
--- a/llvm/test/Transforms/Mem2Reg/dbg_declare_to_value_conversions.ll
+++ b/llvm/test/Transforms/Mem2Reg/dbg_declare_to_value_conversions.ll
@@ -39,6 +39,8 @@ define i32 @foo2(ptr %arg) {
declare void @llvm.dbg.declare(metadata, metadata, metadata)
+!41 = !{null}
+!42 = !DISubroutineType(types: !41)
!llvm.module.flags = !{!1, !2}
!llvm.dbg.cu = !{!7}
@@ -48,7 +50,7 @@ declare void @llvm.dbg.declare(metadata, metadata, metadata)
!4 = !DIBasicType(name: "ptr sized type", size: 64)
!7 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus_14, file: !8, producer: "clang", emissionKind: FullDebug)
!8 = !DIFile(filename: "test.ll", directory: "")
-!10 = distinct !DISubprogram(name: "blah", linkageName: "blah", scope: !8, file: !8, line: 7, unit: !7)
+!10 = distinct !DISubprogram(name: "blah", linkageName: "blah", scope: !8, file: !8, line: 7, type: !42, unit: !7)
!25 = !DILocalVariable(name: "blah", arg: 1, scope: !10, file: !8, line: 7, type:!3)
!26 = !DILocalVariable(name: "ptr sized var", arg: 1, scope: !10, file: !8, line: 7, type:!4)
!40 = !DILocation(line: 7, column: 35, scope: !10)
diff --git a/llvm/test/Transforms/PGOProfile/memprof_annotate_indirect_call.test b/llvm/test/Transforms/PGOProfile/memprof_annotate_indirect_call.test
index 4677eebff3cfe..e5cfb8db18c4c 100644
--- a/llvm/test/Transforms/PGOProfile/memprof_annotate_indirect_call.test
+++ b/llvm/test/Transforms/PGOProfile/memprof_annotate_indirect_call.test
@@ -61,13 +61,15 @@ entry:
;; to the GUID of _Z3xyzv, see comments in the profile above.
; CHECK-ENABLE: ![[VP2]] = !{!"VP", i32 0, i64 1, i64 -3079258800046378528, i64 1}
+!20 = !{null}
+!21 = !DISubroutineType(types: !20)
!llvm.module.flags = !{!2, !3}
!0 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus_14, file: !1)
!1 = !DIFile(filename: "t", directory: "/")
!2 = !{i32 7, !"Dwarf Version", i32 5}
!3 = !{i32 2, !"Debug Info Version", i32 3}
-!4 = distinct !DISubprogram(name: "bar", linkageName: "_Z3barv", scope: !1, file: !1, line: 1, unit: !0)
+!4 = distinct !DISubprogram(name: "bar", linkageName: "_Z3barv", scope: !1, file: !1, line: 1, type: !21, unit: !0)
!5 = !DILocation(line: 4, column: 5, scope: !4)
!6 = !DILocation(line: 5, column: 10, scope: !4)
@@ -127,7 +129,9 @@ entry:
!11 = !DIFile(filename: "t", directory: "/")
!12 = !{i32 7, !"Dwarf Version", i32 5}
!13 = !{i32 2, !"Debug Info Version", i32 3}
-!14 = distinct !DISubprogram(name: "foo", linkageName: "_Z3foov", scope: !11, file: !11, line: 1, unit: !10)
+!14 = distinct !DISubprogram(name: "foo", linkageName: "_Z3foov", scope: !11, file: !11, line: 1, type: !21, unit: !10)
!15 = !DILocation(line: 4, column: 5, scope: !14)
!17 = !DILocation(line: 6, column: 5, scope: !14)
!18 = !DILocation(line: 7, column: 5, scope: !14)
+!20 = !{null}
+!21 = !DISubroutineType(types: !20)
diff --git a/llvm/test/Transforms/PGOProfile/memprof_annotate_yaml.test b/llvm/test/Transforms/PGOProfile/memprof_annotate_yaml.test
index 1ef963dec9e23..0b59b5248f220 100644
--- a/llvm/test/Transforms/PGOProfile/memprof_annotate_yaml.test
+++ b/llvm/test/Transforms/PGOProfile/memprof_annotate_yaml.test
@@ -43,5 +43,7 @@ attributes #0 = { builtin allocsize(0) }
!1 = !DIFile(filename: "t", directory: "/")
!2 = !{i32 7, !"Dwarf Version", i32 5}
!3 = !{i32 2, !"Debug Info Version", i32 3}
-!4 = distinct !DISubprogram(name: "foo", linkageName: "_Z3foov", scope: !1, file: !1, line: 1, unit: !0)
+!4 = distinct !DISubprogram(name: "foo", linkageName: "_Z3foov", scope: !1, file: !1, line: 1, type: !6, unit: !0)
!5 = !DILocation(line: 1, column: 22, scope: !4)
+!6 = !DISubroutineType(types: !7)
+!7 = !{null}
diff --git a/llvm/test/Transforms/PGOProfile/memprof_max_cold_threshold.test b/llvm/test/Transforms/PGOProfile/memprof_max_cold_threshold.test
index 8f1cabf9a4e87..63290a9f7bf83 100644
--- a/llvm/test/Transforms/PGOProfile/memprof_max_cold_threshold.test
+++ b/llvm/test/Transforms/PGOProfile/memprof_max_cold_threshold.test
@@ -158,8 +158,10 @@ attributes #0 = { builtin allocsize(0) }
!1 = !DIFile(filename: "t", directory: "/")
!2 = !{i32 7, !"Dwarf Version", i32 5}
!3 = !{i32 2, !"Debug Info Version", i32 3}
-!4 = distinct !DISubprogram(name: "foo", linkageName: "_Z3foov", scope: !1, file: !1, line: 1, unit: !0)
+!4 = distinct !DISubprogram(name: "foo", linkageName: "_Z3foov", scope: !1, file: !1, line: 1, type: !9, unit: !0)
!5 = !DILocation(line: 1, column: 22, scope: !4)
!6 = !DILocation(line: 2, column: 22, scope: !4)
!7 = !DILocation(line: 3, column: 22, scope: !4)
!8 = !DILocation(line: 4, column: 22, scope: !4)
+!9 = !DISubroutineType(types: !10)
+!10 = !{null}
diff --git a/llvm/test/Transforms/SLPVectorizer/X86/debug-info-salvage.ll b/llvm/test/Transforms/SLPVectorizer/X86/debug-info-salvage.ll
index 01702a4c31334..70ed8d43ec5f0 100644
--- a/llvm/test/Transforms/SLPVectorizer/X86/debug-info-salvage.ll
+++ b/llvm/test/Transforms/SLPVectorizer/X86/debug-info-salvage.ll
@@ -59,12 +59,14 @@ cond.end.i:
!1 = !DIFile(filename: "q.cpp", directory: "/tmp")
!7 = !{i32 2, !"Debug Info Version", i32 3}
!8 = !DILocalVariable(name: "sb", arg: 4, scope: !9)
-!9 = distinct !DISubprogram(name: "color_rgba", unit: !0)
+!9 = distinct !DISubprogram(name: "color_rgba", unit: !0, type: !17)
!16 = !DILocation(scope: !9)
;.
; CHECK: [[META0:![0-9]+]] = distinct !DICompileUnit(language: DW_LANG_C_plus_plus_14, file: [[META1:![0-9]+]], isOptimized: false, runtimeVersion: 0, emissionKind: NoDebug)
; CHECK: [[META1]] = !DIFile(filename: "q.cpp", directory: {{.*}})
; CHECK: [[META3]] = !DILocalVariable(name: "sb", arg: 4, scope: [[META4:![0-9]+]])
-; CHECK: [[META4]] = distinct !DISubprogram(name: "color_rgba", scope: null, spFlags: DISPFlagDefinition, unit: [[META0]])
+; CHECK: [[META4]] = distinct !DISubprogram(name: "color_rgba", scope: null, type: [[TYPE:![0-9]+]], spFlags: DISPFlagDefinition, unit: [[META0]])
; CHECK: [[META5]] = !DILocation(line: 0, scope: [[META4]])
;.
+!17 = !DISubroutineType(types: !18)
+!18 = !{null}
diff --git a/llvm/test/Transforms/SLPVectorizer/X86/phi-node-deletion.ll b/llvm/test/Transforms/SLPVectorizer/X86/phi-node-deletion.ll
index db1d498393043..69dbedf6e0b51 100644
--- a/llvm/test/Transforms/SLPVectorizer/X86/phi-node-deletion.ll
+++ b/llvm/test/Transforms/SLPVectorizer/X86/phi-node-deletion.ll
@@ -29,12 +29,14 @@ for.body:
!1 = !DIFile(filename: "repro.c", directory: "/")
!2 = !{i32 2, !"Debug Info Version", i32 3}
!3 = !DILocalVariable(name: "s0", scope: !4)
-!4 = distinct !DISubprogram(name: "foo", scope: !1, unit: !0)
+!4 = distinct !DISubprogram(name: "foo", scope: !1, unit: !0, type: !6)
!5 = !DILocation(line: 0, scope: !4)
;.
; CHECK: [[META0:![0-9]+]] = distinct !DICompileUnit(language: DW_LANG_C11, file: [[META1:![0-9]+]], isOptimized: false, runtimeVersion: 0, emissionKind: NoDebug)
; CHECK: [[META1]] = !DIFile(filename: "repro.c", directory: {{.*}})
; CHECK: [[META3]] = !DILocalVariable(name: "s0", scope: [[META4:![0-9]+]])
-; CHECK: [[META4]] = distinct !DISubprogram(name: "foo", scope: [[META1]], spFlags: DISPFlagDefinition, unit: [[META0]])
+; CHECK: [[META4]] = distinct !DISubprogram(name: "foo", scope: [[META1]], type: [[TYPE:![0-9]+]], spFlags: DISPFlagDefinition, unit: [[META0]])
; CHECK: [[META5]] = !DILocation(line: 0, scope: [[META4]])
;.
+!6 = !DISubroutineType(types: !7)
+!7 = !{null}
diff --git a/llvm/test/Transforms/SLPVectorizer/X86/schedule_budget_debug_info.ll b/llvm/test/Transforms/SLPVectorizer/X86/schedule_budget_debug_info.ll
index 207b2d45c335e..031cf87863e00 100644
--- a/llvm/test/Transforms/SLPVectorizer/X86/schedule_budget_debug_info.ll
+++ b/llvm/test/Transforms/SLPVectorizer/X86/schedule_budget_debug_info.ll
@@ -189,11 +189,13 @@ entry:
declare void @llvm.dbg.value(metadata, metadata, metadata)
!llvm.dbg.cu = !{!0}
+!6 = !{null}
+!7 = !DISubroutineType(types: !6)
!llvm.module.flags = !{!2}
!0 = distinct !DICompileUnit(language: DW_LANG_C11, file: !1)
!1 = !DIFile(filename: "foo.c", directory: "/")
!2 = !{i32 2, !"Debug Info Version", i32 3}
!3 = !DILocalVariable(scope: !4)
-!4 = distinct !DISubprogram(unit: !0)
+!4 = distinct !DISubprogram(type: !7, unit: !0)
!5 = !DILocation(scope: !4)
diff --git a/llvm/test/Transforms/SROA/dbg-single-piece.ll b/llvm/test/Transforms/SROA/dbg-single-piece.ll
index 4a4b809456201..b1a6406d1611d 100644
--- a/llvm/test/Transforms/SROA/dbg-single-piece.ll
+++ b/llvm/test/Transforms/SROA/dbg-single-piece.ll
@@ -26,11 +26,13 @@ entry:
attributes #0 = { nounwind readnone }
!llvm.dbg.cu = !{!9}
+!10 = !{null}
+!11 = !DISubroutineType(types: !10)
!llvm.module.flags = !{!0}
!0 = !{i32 2, !"Debug Info Version", i32 3}
!1 = !DILocalVariable(name: "I", scope: !2, file: !3, line: 947, type: !4)
-!2 = distinct !DISubprogram(name: "findInsertLocation", linkageName: "_ZL18findInsertLocationPN4llvm17MachineBasicBlockENS_9SlotIndexERNS_13LiveIntervalsE", scope: !3, file: !3, line: 937, isLocal: true, isDefinition: true, scopeLine: 938, flags: DIFlagPrototyped, isOptimized: true, unit: !9)
+!2 = distinct !DISubprogram(name: "findInsertLocation", linkageName: "_ZL18findInsertLocationPN4llvm17MachineBasicBlockENS_9SlotIndexERNS_13LiveIntervalsE", scope: !3, file: !3, line: 937, isLocal: true, isDefinition: true, scopeLine: 938, flags: DIFlagPrototyped, isOptimized: true, type: !11, unit: !9)
!3 = !DIFile(filename: "none", directory: ".")
!4 = !DICompositeType(tag: DW_TAG_class_type, name: "bundle_iterator<llvm::MachineInstr, llvm::ilist_iterator<llvm::MachineInstr> >", scope: !5, file: !3, line: 163, size: 128, align: 64, elements: !6, templateParams: !6, identifier: "_ZTSN4llvm17MachineBasicBlock15bundle_iteratorINS_12MachineInstrENS_14ilist_iteratorIS2_EEEE")
!5 = distinct !DICompositeType(tag: DW_TAG_class_type, name: "MachineBasicBlock", file: !3, line: 68, size: 1408, align: 64, identifier: "_ZTSN4llvm17MachineBasicBlockE")
diff --git a/llvm/test/Transforms/SampleProfile/cold-indirect-call.ll b/llvm/test/Transforms/SampleProfile/cold-indirect-call.ll
index bffc775b64394..a535d41ffbc89 100644
--- a/llvm/test/Transforms/SampleProfile/cold-indirect-call.ll
+++ b/llvm/test/Transforms/SampleProfile/cold-indirect-call.ll
@@ -18,14 +18,16 @@ define i32 @baz() #0 !dbg !7 {
attributes #0 = {"use-sample-profile"}
!llvm.dbg.cu = !{!0}
+!9 = !{null}
+!10 = !DISubroutineType(types: !9)
!llvm.module.flags = !{!2}
!0 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, file: !1)
!1 = !DIFile(filename: "foo.cc", directory: "/")
!2 = !{i32 2, !"Debug Info Version", i32 3}
-!3 = distinct !DISubprogram(name: "foo", scope: !1, file: !1, line: 4, unit: !0)
+!3 = distinct !DISubprogram(name: "foo", scope: !1, file: !1, line: 4, type: !10, unit: !0)
!4 = !DILocation(line: 5, scope: !3)
-!5 = distinct !DISubprogram(name: "bar", scope: !1, file: !1, line: 8, unit: !0)
+!5 = distinct !DISubprogram(name: "bar", scope: !1, file: !1, line: 8, type: !10, unit: !0)
!6 = !DILocation(line: 9, scope: !5)
-!7 = distinct !DISubprogram(name: "baz", scope: !1, file: !1, line: 12, unit: !0)
+!7 = distinct !DISubprogram(name: "baz", scope: !1, file: !1, line: 12, type: !10, unit: !0)
!8 = !DILocation(line: 13, scope: !7)
diff --git a/llvm/test/Transforms/SampleProfile/csspgo-inline-icall.ll b/llvm/test/Transforms/SampleProfile/csspgo-inline-icall.ll
index 32b47bcfc6d84..0c7dbd94c5b32 100644
--- a/llvm/test/Transforms/SampleProfile/csspgo-inline-icall.ll
+++ b/llvm/test/Transforms/SampleProfile/csspgo-inline-icall.ll
@@ -39,20 +39,22 @@ define void @_Z3zoov() #0 !dbg !11 {
attributes #0 = {"use-sample-profile"}
!llvm.dbg.cu = !{!0}
+!12 = !{null}
+!13 = !DISubroutineType(types: !12)
!llvm.module.flags = !{!2}
!0 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, file: !1)
!1 = !DIFile(filename: "test.cc", directory: "/")
!2 = !{i32 2, !"Debug Info Version", i32 3}
-!3 = distinct !DISubprogram(name: "test", scope: !1, file: !1, line: 3, unit: !0)
+!3 = distinct !DISubprogram(name: "test", scope: !1, file: !1, line: 3, type: !13, unit: !0)
!4 = !DILocation(line: 4, scope: !3)
!5 = !DILocation(line: 5, scope: !3)
!6 = !DILocation(line: 6, scope: !3)
!7 = !DILocation(line: 7, scope: !3)
-!8 = distinct !DISubprogram(name: "foo", linkageName: "_Z3foov", scope: !1, file: !1, line: 29, unit: !0)
-!9 = distinct !DISubprogram(name: "bar", linkageName: "_Z3barv", scope: !1, file: !1, line: 32, unit: !0)
-!10 = distinct !DISubprogram(name: "baz", linkageName: "_Z3bazv", scope: !1, file: !1, line: 24, unit: !0)
-!11 = distinct !DISubprogram(name: "zoo", linkageName: "_Z3zoov", scope: !1, file: !1, line: 24, unit: !0)
+!8 = distinct !DISubprogram(name: "foo", linkageName: "_Z3foov", scope: !1, file: !1, line: 29, type: !13, unit: !0)
+!9 = distinct !DISubprogram(name: "bar", linkageName: "_Z3barv", scope: !1, file: !1, line: 32, type: !13, unit: !0)
+!10 = distinct !DISubprogram(name: "baz", linkageName: "_Z3bazv", scope: !1, file: !1, line: 24, type: !13, unit: !0)
+!11 = distinct !DISubprogram(name: "zoo", linkageName: "_Z3zoov", scope: !1, file: !1, line: 24, type: !13, unit: !0)
; ICP-ALL: remark: test.cc:4:0: '_Z3foov' inlined into 'test'
diff --git a/llvm/test/Transforms/SampleProfile/early-inline.ll b/llvm/test/Transforms/SampleProfile/early-inline.ll
index 884353ae76cdd..1c463e6a584eb 100644
--- a/llvm/test/Transforms/SampleProfile/early-inline.ll
+++ b/llvm/test/Transforms/SampleProfile/early-inline.ll
@@ -58,19 +58,21 @@ attributes #0 = {"target-features"="+sse4.1" "use-sample-profile"}
attributes #1 = {"target-features"="+sse4.2" "use-sample-profile"}
!llvm.dbg.cu = !{!0}
+!18 = !{null}
+!19 = !DISubroutineType(types: !18)
!llvm.module.flags = !{!3, !4}
!0 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, file: !1)
!1 = !DIFile(filename: "a", directory: "b/")
!3 = !{i32 2, !"Dwarf Version", i32 4}
!4 = !{i32 2, !"Debug Info Version", i32 3}
-!6 = distinct !DISubprogram(linkageName: "_Z3foov", scope: !1, file: !1, line: 5, scopeLine: 5, unit: !0)
+!6 = distinct !DISubprogram(linkageName: "_Z3foov", scope: !1, file: !1, line: 5, scopeLine: 5, type: !19, unit: !0)
!9 = !DILocation(line: 6, column: 3, scope: !6)
!10 = !DILocation(line: 8, column: 5, scope: !11)
!11 = distinct !DILexicalBlock(scope: !6, file: !1, line: 7, column: 7)
-!12 = distinct !DISubprogram(linkageName: "_ZL3barv", scope: !1, file: !1, line: 20, scopeLine: 20, unit: !0)
-!13 = distinct !DISubprogram(linkageName: "recursive", scope: !1, file: !1, line: 20, scopeLine: 20, unit: !0)
+!12 = distinct !DISubprogram(linkageName: "_ZL3barv", scope: !1, file: !1, line: 20, scopeLine: 20, type: !19, unit: !0)
+!13 = distinct !DISubprogram(linkageName: "recursive", scope: !1, file: !1, line: 20, scopeLine: 20, type: !19, unit: !0)
!14 = !DILocation(line: 21, column: 3, scope: !13)
!15 = !DILocation(line: 22, column: 3, scope: !13)
!16 = !DILocation(line: 7, column: 3, scope: !6)
-!17 = distinct !DISubprogram(linkageName: "no_inline", scope: !1, file: !1, line: 20, scopeLine: 20, unit: !0)
+!17 = distinct !DISubprogram(linkageName: "no_inline", scope: !1, file: !1, line: 20, scopeLine: 20, type: !19, unit: !0)
diff --git a/llvm/test/Transforms/SampleProfile/function_metadata.ll b/llvm/test/Transforms/SampleProfile/function_metadata.ll
index 00f61e9f4ed5d..fa17115d0170f 100644
--- a/llvm/test/Transforms/SampleProfile/function_metadata.ll
+++ b/llvm/test/Transforms/SampleProfile/function_metadata.ll
@@ -76,7 +76,7 @@ attributes #0 = {"use-sample-profile"}
!9 = !{i32 1, !"Debug Info Version", i32 3}
!10 = !{!"clang version 3.5 "}
!12 = distinct !DISubprogram(name: "test_liveness", line: 7, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, unit: !0, scopeLine: 7, file: !1, scope: !1, type: !6, retainedNodes: !2)
-!13 = !DISubprogram(name: "bar_dbg", scope: !1, file: !1, flags: DIFlagPrototyped, spFlags: DISPFlagOptimized)
+!13 = !DISubprogram(name: "bar_dbg", scope: !1, file: !1, flags: DIFlagPrototyped, type: !6, spFlags: DISPFlagOptimized)
!14 = distinct !DISubprogram(name: "bar_available", line: 7, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, unit: !0, scopeLine: 7, file: !1, scope: !1, type: !6, retainedNodes: !2)
!15 = !DILexicalBlockFile(discriminator: 1, file: !1, scope: !7)
!17 = distinct !DILexicalBlock(line: 10, column: 0, file: !1, scope: !7)
diff --git a/llvm/test/Transforms/SampleProfile/indirect-call-gcc.ll b/llvm/test/Transforms/SampleProfile/indirect-call-gcc.ll
index 5aabd82c33065..b59741aa5e99a 100644
--- a/llvm/test/Transforms/SampleProfile/indirect-call-gcc.ll
+++ b/llvm/test/Transforms/SampleProfile/indirect-call-gcc.ll
@@ -17,11 +17,13 @@ define void @test(ptr) #0 !dbg !3 {
attributes #0 = {"use-sample-profile"}
!llvm.dbg.cu = !{!0}
+!5 = !{null}
+!6 = !DISubroutineType(types: !5)
!llvm.module.flags = !{!2}
!0 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, file: !1)
!1 = !DIFile(filename: "test.cc", directory: "/")
!2 = !{i32 2, !"Debug Info Version", i32 3}
-!3 = distinct !DISubprogram(name: "test", scope: !1, file: !1, line: 1, unit: !0)
+!3 = distinct !DISubprogram(name: "test", scope: !1, file: !1, line: 1, type: !6, unit: !0)
!4 = !DILocation(line: 5, scope: !3)
; CHECK: ![[PROF]] = !{!"VP", i32 0, i64 3457, i64 9191153033785521275, i64 2059, i64 -1069303473483922844, i64 1398}
diff --git a/llvm/test/Transforms/SampleProfile/indirect-call.ll b/llvm/test/Transforms/SampleProfile/indirect-call.ll
index 089474c7c149a..1d0a920e3f154 100644
--- a/llvm/test/Transforms/SampleProfile/indirect-call.ll
+++ b/llvm/test/Transforms/SampleProfile/indirect-call.ll
@@ -191,12 +191,14 @@ define void @test_direct() #0 !dbg !22 {
attributes #0 = {"use-sample-profile"}
!llvm.dbg.cu = !{!0}
+!36 = !{null}
+!37 = !DISubroutineType(types: !36)
!llvm.module.flags = !{!2}
!0 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, file: !1)
!1 = !DIFile(filename: "test.cc", directory: "/")
!2 = !{i32 2, !"Debug Info Version", i32 3}
-!3 = distinct !DISubprogram(name: "test", scope: !1, file: !1, line: 3, unit: !0)
+!3 = distinct !DISubprogram(name: "test", scope: !1, file: !1, line: 3, type: !37, unit: !0)
!4 = !DILocation(line: 4, scope: !3)
!5 = !DILocation(line: 6, scope: !3)
; CHECK: ![[PROF]] = !{!"VP", i32 0, i64 3457, i64 9191153033785521275, i64 2059, i64 -1069303473483922844, i64 1398}
@@ -204,33 +206,33 @@ attributes #0 = {"use-sample-profile"}
; CHECK: ![[BR2]] = !{!"branch_weights", i32 3000, i32 1000}
; CHECK: ![[VP]] = !{!"VP", i32 0, i64 8000, i64 7476224446746900038, i64 -1, i64 925324185419832389, i64 -1, i64 -6391416044382067764, i64 1000}
; CHECK: ![[BR3]] = !{!"branch_weights", i32 1, i32 0}
-!6 = distinct !DISubprogram(name: "test_inline", scope: !1, file: !1, line: 6, unit: !0)
+!6 = distinct !DISubprogram(name: "test_inline", scope: !1, file: !1, line: 6, type: !37, unit: !0)
!7 = !DILocation(line: 7, scope: !6)
-!8 = distinct !DISubprogram(name: "test_inline_strip", scope: !1, file: !1, line: 8, unit: !0)
+!8 = distinct !DISubprogram(name: "test_inline_strip", scope: !1, file: !1, line: 8, type: !37, unit: !0)
!9 = !DILocation(line: 9, scope: !8)
-!10 = distinct !DISubprogram(name: "test_inline_strip_conflict", scope: !1, file: !1, line: 10, unit: !0)
+!10 = distinct !DISubprogram(name: "test_inline_strip_conflict", scope: !1, file: !1, line: 10, type: !37, unit: !0)
!11 = !DILocation(line: 11, scope: !10)
-!12 = distinct !DISubprogram(name: "test_noinline", scope: !1, file: !1, line: 12, unit: !0)
+!12 = distinct !DISubprogram(name: "test_noinline", scope: !1, file: !1, line: 12, type: !37, unit: !0)
!13 = !DILocation(line: 13, scope: !12)
-!14 = distinct !DISubprogram(name: "foo_inline1", scope: !1, file: !1, line: 11, unit: !0)
-!15 = distinct !DISubprogram(name: "foo_inline_strip.suffix", scope: !1, file: !1, line: 1, unit: !0)
-!16 = distinct !DISubprogram(name: "foo_inline_strip_conflict.suffix1", scope: !1, file: !1, line: 1, unit: !0)
-!17 = distinct !DISubprogram(name: "foo_inline_strip_conflict.suffix2", scope: !1, file: !1, line: 1, unit: !0)
-!18 = distinct !DISubprogram(name: "foo_inline_strip_conflict.suffix3", scope: !1, file: !1, line: 1, unit: !0)
-!19 = distinct !DISubprogram(name: "foo_inline2", scope: !1, file: !1, line: 19, unit: !0)
-!20 = distinct !DISubprogram(name: "foo_noinline", scope: !1, file: !1, line: 20, unit: !0)
-!21 = distinct !DISubprogram(name: "foo_direct", scope: !1, file: !1, line: 21, unit: !0)
-!22 = distinct !DISubprogram(name: "test_direct", scope: !1, file: !1, line: 22, unit: !0)
+!14 = distinct !DISubprogram(name: "foo_inline1", scope: !1, file: !1, line: 11, type: !37, unit: !0)
+!15 = distinct !DISubprogram(name: "foo_inline_strip.suffix", scope: !1, file: !1, line: 1, type: !37, unit: !0)
+!16 = distinct !DISubprogram(name: "foo_inline_strip_conflict.suffix1", scope: !1, file: !1, line: 1, type: !37, unit: !0)
+!17 = distinct !DISubprogram(name: "foo_inline_strip_conflict.suffix2", scope: !1, file: !1, line: 1, type: !37, unit: !0)
+!18 = distinct !DISubprogram(name: "foo_inline_strip_conflict.suffix3", scope: !1, file: !1, line: 1, type: !37, unit: !0)
+!19 = distinct !DISubprogram(name: "foo_inline2", scope: !1, file: !1, line: 19, type: !37, unit: !0)
+!20 = distinct !DISubprogram(name: "foo_noinline", scope: !1, file: !1, line: 20, type: !37, unit: !0)
+!21 = distinct !DISubprogram(name: "foo_direct", scope: !1, file: !1, line: 21, type: !37, unit: !0)
+!22 = distinct !DISubprogram(name: "test_direct", scope: !1, file: !1, line: 22, type: !37, unit: !0)
!23 = !DILocation(line: 23, scope: !22)
-!24 = distinct !DISubprogram(name: "test_norecursive_inline", scope: !1, file: !1, line: 12, unit: !0)
+!24 = distinct !DISubprogram(name: "test_norecursive_inline", scope: !1, file: !1, line: 12, type: !37, unit: !0)
!25 = !DILocation(line: 13, scope: !24)
-!26 = distinct !DISubprogram(name: "test_noinline_bitcast", scope: !1, file: !1, line: 12, unit: !0)
+!26 = distinct !DISubprogram(name: "test_noinline_bitcast", scope: !1, file: !1, line: 12, type: !37, unit: !0)
!27 = !DILocation(line: 13, scope: !26)
-!28 = distinct !DISubprogram(name: "foo_direct_i32", scope: !1, file: !1, line: 11, unit: !0)
-!29 = distinct !DISubprogram(name: "return_arg", scope: !1, file: !1, line: 11, unit: !0)
-!30 = distinct !DISubprogram(name: "return_arg_caller", scope: !1, file: !1, line: 11, unit: !0)
+!28 = distinct !DISubprogram(name: "foo_direct_i32", scope: !1, file: !1, line: 11, type: !37, unit: !0)
+!29 = distinct !DISubprogram(name: "return_arg", scope: !1, file: !1, line: 11, type: !37, unit: !0)
+!30 = distinct !DISubprogram(name: "return_arg_caller", scope: !1, file: !1, line: 11, type: !37, unit: !0)
!31 = !DILocation(line: 12, scope: !30)
!32 = !DILocation(line: 13, scope: !30)
-!33 = distinct !DISubprogram(name: "branch_prof_valid", scope: !1, file: !1, line: 25, unit: !0)
+!33 = distinct !DISubprogram(name: "branch_prof_valid", scope: !1, file: !1, line: 25, type: !37, unit: !0)
!34 = !DILocation(line: 27, scope: !33)
-!35 = distinct !DISubprogram(name: "foo_inline3", scope: !1, file: !1, line: 29, unit: !0)
+!35 = distinct !DISubprogram(name: "foo_inline3", scope: !1, file: !1, line: 29, type: !37, unit: !0)
diff --git a/llvm/test/Transforms/SampleProfile/inline-callee-update.ll b/llvm/test/Transforms/SampleProfile/inline-callee-update.ll
index 2f4734cb8c03c..28bfd8d0989a7 100644
--- a/llvm/test/Transforms/SampleProfile/inline-callee-update.ll
+++ b/llvm/test/Transforms/SampleProfile/inline-callee-update.ll
@@ -54,20 +54,22 @@ declare ptr @direct_leaf_func(ptr)
attributes #0 = {"use-sample-profile"}
!llvm.dbg.cu = !{!0}
+!13 = !{null}
+!14 = !DISubroutineType(types: !13)
!llvm.module.flags = !{!2}
!0 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, file: !1, isOptimized: false, runtimeVersion: 0, emissionKind: NoDebug)
!1 = !DIFile(filename: "test.cc", directory: "/")
!2 = !{i32 2, !"Debug Info Version", i32 3}
-!3 = distinct !DISubprogram(name: "sample_loader_inlinee", scope: !1, file: !1, line: 11, spFlags: DISPFlagDefinition, unit: !0)
+!3 = distinct !DISubprogram(name: "sample_loader_inlinee", scope: !1, file: !1, line: 11, spFlags: DISPFlagDefinition, type: !14, unit: !0)
!4 = !DILocation(line: 12, scope: !3)
!5 = !DILocation(line: 13, scope: !3)
-!6 = distinct !DISubprogram(name: "cgscc_inlinee", scope: !1, file: !1, line: 31, spFlags: DISPFlagDefinition, unit: !0)
+!6 = distinct !DISubprogram(name: "cgscc_inlinee", scope: !1, file: !1, line: 31, spFlags: DISPFlagDefinition, type: !14, unit: !0)
!7 = !DILocation(line: 32, scope: !6)
!8 = !DILocation(line: 33, scope: !6)
-!9 = distinct !DISubprogram(name: "test_sample_loader_inline", scope: !1, file: !1, line: 3, spFlags: DISPFlagDefinition, unit: !0)
+!9 = distinct !DISubprogram(name: "test_sample_loader_inline", scope: !1, file: !1, line: 3, spFlags: DISPFlagDefinition, type: !14, unit: !0)
!10 = !DILocation(line: 4, scope: !9)
-!11 = distinct !DISubprogram(name: "test_cgscc_inline", scope: !1, file: !1, line: 20, spFlags: DISPFlagDefinition, unit: !0)
+!11 = distinct !DISubprogram(name: "test_cgscc_inline", scope: !1, file: !1, line: 20, spFlags: DISPFlagDefinition, type: !14, unit: !0)
!12 = !DILocation(line: 21, scope: !11)
; Make sure the ImportGUID stays with entry count metadata for ThinLTO-PreLink
diff --git a/llvm/test/Transforms/SimplifyCFG/X86/hoist-loads-stores-with-cf.ll b/llvm/test/Transforms/SimplifyCFG/X86/hoist-loads-stores-with-cf.ll
index 4eda91ffaa268..10bde11165534 100644
--- a/llvm/test/Transforms/SimplifyCFG/X86/hoist-loads-stores-with-cf.ll
+++ b/llvm/test/Transforms/SimplifyCFG/X86/hoist-loads-stores-with-cf.ll
@@ -1231,6 +1231,8 @@ if.end: ; preds = %if.then1, %entry
declare i32 @read_memory_only() readonly nounwind willreturn speculatable
!llvm.dbg.cu = !{!0}
+!12 = !{null}
+!13 = !DISubroutineType(types: !12)
!llvm.module.flags = !{!2, !3}
!llvm.ident = !{!4}
@@ -1240,7 +1242,7 @@ declare i32 @read_memory_only() readonly nounwind willreturn speculatable
!3 = !{i32 2, !"Debug Info Version", i32 3}
!4 = !{!"clang"}
!5 = !DIBasicType(name: "int", size: 16, encoding: DW_ATE_signed)
-!6 = distinct !DISubprogram(name: "foo", scope: !1, file: !1, line: 4, unit: !0)
+!6 = distinct !DISubprogram(name: "foo", scope: !1, file: !1, line: 4, type: !13, unit: !0)
!7 = !DILocation(line: 5, column: 7, scope: !6)
!8 = !DILocalVariable(name: "a", scope: !6, line: 6, type: !5)
!9 = distinct !DIAssignID()
diff --git a/llvm/test/Transforms/SimplifyCFG/X86/remove-debug.ll b/llvm/test/Transforms/SimplifyCFG/X86/remove-debug.ll
index 0bc0d4a92a23c..59f063a3f914c 100644
--- a/llvm/test/Transforms/SimplifyCFG/X86/remove-debug.ll
+++ b/llvm/test/Transforms/SimplifyCFG/X86/remove-debug.ll
@@ -69,7 +69,7 @@ declare void @_Z3bazv() #1
!3 = !{i32 2, !"Dwarf Version", i32 4}
!4 = !{i32 2, !"Debug Info Version", i32 3}
!5 = !{}
-!6 = distinct !DISubprogram(unit: !0)
+!6 = distinct !DISubprogram(type: !7, unit: !0)
!7 = !DISubroutineType(types: !2)
!8 = !{!9, !9, i64 0}
!9 = !{!"int", !10, i64 0}
diff --git a/llvm/test/Transforms/SimplifyCFG/pr39807.ll b/llvm/test/Transforms/SimplifyCFG/pr39807.ll
index c150c1b54cb8d..e65339bdff606 100644
--- a/llvm/test/Transforms/SimplifyCFG/pr39807.ll
+++ b/llvm/test/Transforms/SimplifyCFG/pr39807.ll
@@ -29,15 +29,17 @@ define internal void @inlinable() !dbg !7 {
}
!llvm.dbg.cu = !{!0}
+!9 = !{null}
+!10 = !DISubroutineType(types: !9)
!llvm.module.flags = !{!4, !5, !6}
; CHECK: ![[DBGLOC]] = !DILocation(line: 0
!0 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, runtimeVersion: 0, file: !3)
-!1 = distinct !DISubprogram(name: "test", unit: !0)
+!1 = distinct !DISubprogram(name: "test", type: !10, unit: !0)
!2 = !DILocation(line: 2, scope: !1)
!3 = !DIFile(filename: "foo", directory: ".")
!4 = !{i32 2, !"Dwarf Version", i32 4}
!5 = !{i32 2, !"Debug Info Version", i32 3}
!6 = !{i32 1, !"wchar_size", i32 4}
-!7 = distinct !DISubprogram(name: "inlinable", unit: !0)
+!7 = distinct !DISubprogram(name: "inlinable", type: !10, unit: !0)
!8 = !DILocation(line: 3, scope: !1)
diff --git a/llvm/test/Transforms/SimplifyCFG/tail-merge-noreturn.ll b/llvm/test/Transforms/SimplifyCFG/tail-merge-noreturn.ll
index 77ce7300e6752..3527eb12b0135 100644
--- a/llvm/test/Transforms/SimplifyCFG/tail-merge-noreturn.ll
+++ b/llvm/test/Transforms/SimplifyCFG/tail-merge-noreturn.ll
@@ -531,6 +531,8 @@ sw.epilog: ; preds = %entry
}
!llvm.dbg.cu = !{!0}
+!15 = !{null}
+!16 = !DISubroutineType(types: !15)
!llvm.module.flags = !{!3, !4, !5}
!0 = distinct !DICompileUnit(language: DW_LANG_C99, file: !1, runtimeVersion: 0, emissionKind: FullDebug)
@@ -538,7 +540,7 @@ sw.epilog: ; preds = %entry
!3 = !{i32 2, !"Dwarf Version", i32 4}
!4 = !{i32 2, !"Debug Info Version", i32 3}
!5 = !{i32 1, !"PIC Level", i32 2}
-!7 = distinct !DISubprogram(name: "f", scope: !1, file: !1, line: 2, isLocal: false, isDefinition: true, scopeLine: 2, flags: DIFlagPrototyped, isOptimized: true, unit: !0)
+!7 = distinct !DISubprogram(name: "f", scope: !1, file: !1, line: 2, isLocal: false, isDefinition: true, scopeLine: 2, flags: DIFlagPrototyped, isOptimized: true, type: !16, unit: !0)
!12 = !DILocalVariable(name: "c", scope: !7)
!13 = !DIExpression()
!14 = !DILocation(line: 2, column: 12, scope: !7)
diff --git a/llvm/test/Transforms/StripSymbols/find-live-cu.ll b/llvm/test/Transforms/StripSymbols/find-live-cu.ll
index 285f47ade30c1..91b2f43998c8a 100644
--- a/llvm/test/Transforms/StripSymbols/find-live-cu.ll
+++ b/llvm/test/Transforms/StripSymbols/find-live-cu.ll
@@ -15,6 +15,8 @@ define void @func() {
}
!llvm.dbg.cu = !{!0, !1}
+!12 = !{null}
+!13 = !DISubroutineType(types: !12)
!llvm.module.flags = !{!10}
@@ -23,13 +25,13 @@ define void @func() {
!0 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus_14, file: !11)
!1 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus_14, file: !11)
-!2 = distinct !DISubprogram(name: "func", unit: !0)
+!2 = distinct !DISubprogram(name: "func", type: !13, unit: !0)
!3 = distinct !DICompositeType(tag: DW_TAG_class_type, scope: !2)
!4 = !DIDerivedType(tag: DW_TAG_member, scope: !3, baseType: !5)
!5 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !6)
!6 = !DIBasicType(tag: DW_TAG_base_type)
!7 = !DILocalVariable(name: "a", type: !5, scope: !8)
-!8 = distinct !DISubprogram(name: "func", unit: !1)
+!8 = distinct !DISubprogram(name: "func", type: !13, unit: !1)
!9 = !DILocation(scope: !8)
!10 = !{i32 2, !"Debug Info Version", i32 3}
diff --git a/llvm/test/Transforms/Util/trivial-auto-var-init-call.ll b/llvm/test/Transforms/Util/trivial-auto-var-init-call.ll
index f34aa3e9f6799..e652293911ce7 100644
--- a/llvm/test/Transforms/Util/trivial-auto-var-init-call.ll
+++ b/llvm/test/Transforms/Util/trivial-auto-var-init-call.ll
@@ -617,12 +617,14 @@ declare void @llvm.memmove.element.unordered.atomic.p0.p0.i64(ptr nocapture writ
declare void @bzero(ptr nocapture, i64) nofree nounwind
declare ptr @memset(ptr, i32, i64)
+!8 = !{null}
+!9 = !DISubroutineType(types: !8)
!llvm.module.flags = !{!1}
!0 = !{ !"auto-init" }
!1 = !{i32 2, !"Debug Info Version", i32 3}
!2 = distinct !DICompileUnit(language: DW_LANG_C99, file: !3)
!3 = !DIFile(filename: "file", directory: "")
-!4 = distinct !DISubprogram(name: "function", scope: !3, file: !3, unit: !2)
+!4 = distinct !DISubprogram(name: "function", scope: !3, file: !3, type: !9, unit: !2)
!5 = !DIBasicType(name: "byte", size: 8)
!6 = !DILocalVariable(name: "destination", scope: !4, file: !3, type: !5)
!7 = !DILocalVariable(name: "destination2", scope: !4, file: !3, type: !5)
diff --git a/llvm/test/Transforms/Util/trivial-auto-var-init-store.ll b/llvm/test/Transforms/Util/trivial-auto-var-init-store.ll
index d3355efe2efcd..2d329b8293433 100644
--- a/llvm/test/Transforms/Util/trivial-auto-var-init-store.ll
+++ b/llvm/test/Transforms/Util/trivial-auto-var-init-store.ll
@@ -223,12 +223,14 @@ l2:
; Function Attrs: nounwind readnone speculatable willreturn
declare void @llvm.dbg.declare(metadata, metadata, metadata) nounwind readnone speculatable willreturn
+!8 = !{null}
+!9 = !DISubroutineType(types: !8)
!llvm.module.flags = !{!1}
!0 = !{ !"auto-init" }
!1 = !{i32 2, !"Debug Info Version", i32 3}
!2 = distinct !DICompileUnit(language: DW_LANG_C99, file: !3)
!3 = !DIFile(filename: "file", directory: "")
-!4 = distinct !DISubprogram(name: "function", scope: !3, file: !3, unit: !2)
+!4 = distinct !DISubprogram(name: "function", scope: !3, file: !3, type: !9, unit: !2)
!5 = !DIBasicType(name: "int", size: 32)
!6 = !DILocalVariable(name: "destination", scope: !4, file: !3, type: !5)
!7 = !DILocalVariable(name: "destination2", scope: !4, file: !3, type: !5)
diff --git a/llvm/test/Transforms/Util/trivial-auto-var-init-unknown.ll b/llvm/test/Transforms/Util/trivial-auto-var-init-unknown.ll
index 58ee56edd2ea3..5fa3cc8529733 100644
--- a/llvm/test/Transforms/Util/trivial-auto-var-init-unknown.ll
+++ b/llvm/test/Transforms/Util/trivial-auto-var-init-unknown.ll
@@ -35,12 +35,14 @@ define void @unknown_intrinsic(ptr %dst) {
declare ptr @llvm.returnaddress(i32) nounwind readnone
+!8 = !{null}
+!9 = !DISubroutineType(types: !8)
!llvm.module.flags = !{!1}
!0 = !{ !"auto-init" }
!1 = !{i32 2, !"Debug Info Version", i32 3}
!2 = distinct !DICompileUnit(language: DW_LANG_C99, file: !3)
!3 = !DIFile(filename: "file", directory: "")
-!4 = distinct !DISubprogram(name: "function", scope: !3, file: !3, unit: !2)
+!4 = distinct !DISubprogram(name: "function", scope: !3, file: !3, type: !9, unit: !2)
!5 = !DIBasicType(name: "byte", size: 8)
!6 = !DILocalVariable(name: "destination", scope: !4, file: !3, type: !5)
!7 = !DILocalVariable(name: "destination2", scope: !4, file: !3, type: !5)
diff --git a/llvm/test/Transforms/WholeProgramDevirt/devirt-single-impl.ll b/llvm/test/Transforms/WholeProgramDevirt/devirt-single-impl.ll
index d7f33df594956..550484ab6dafc 100644
--- a/llvm/test/Transforms/WholeProgramDevirt/devirt-single-impl.ll
+++ b/llvm/test/Transforms/WholeProgramDevirt/devirt-single-impl.ll
@@ -77,18 +77,20 @@ declare void @llvm.assume(i1)
!2 = !{i32 2, !"Dwarf Version", i32 4}
!3 = !{i32 2, !"Debug Info Version", i32 3}
!4 = !{!"clang version 4.0.0 (trunk 278098)"}
-!5 = distinct !DISubprogram(name: "call", linkageName: "_Z4callPv", scope: !1, file: !1, line: 29, isLocal: false, isDefinition: true, scopeLine: 9, flags: DIFlagPrototyped, isOptimized: false, unit: !0)
+!5 = distinct !DISubprogram(name: "call", linkageName: "_Z4callPv", scope: !1, file: !1, line: 29, type: !15, isLocal: false, isDefinition: true, scopeLine: 9, flags: DIFlagPrototyped, isOptimized: false, unit: !0)
!6 = !DILocation(line: 30, column: 32, scope: !5)
-!7 = distinct !DISubprogram(name: "vf", linkageName: "_ZN3vt12vfEv", scope: !1, file: !1, line: 13, isLocal: false, isDefinition: true, scopeLine: 13, flags: DIFlagPrototyped, isOptimized: false, unit: !0)
+!7 = distinct !DISubprogram(name: "vf", linkageName: "_ZN3vt12vfEv", scope: !1, file: !1, line: 13, type: !15, isLocal: false, isDefinition: true, scopeLine: 13, flags: DIFlagPrototyped, isOptimized: false, unit: !0)
!8 = !{i32 0, !"typeid"}
-!9 = distinct !DISubprogram(name: "call2", linkageName: "_Z5call2Pv", scope: !1, file: !1, line: 40, isLocal: false, isDefinition: true, scopeLine: 9, flags: DIFlagPrototyped, isOptimized: false, unit: !0)
+!9 = distinct !DISubprogram(name: "call2", linkageName: "_Z5call2Pv", scope: !1, file: !1, line: 40, type: !15, isLocal: false, isDefinition: true, scopeLine: 9, flags: DIFlagPrototyped, isOptimized: false, unit: !0)
!10 = !DILocation(line: 41, column: 32, scope: !9)
!11 = !{i32 0, !"typeid2"}
-!12 = distinct !DISubprogram(name: "call3", linkageName: "_Z5call3Pv", scope: !1, file: !1, line: 50, isLocal: false, isDefinition: true, scopeLine: 9, flags: DIFlagPrototyped, isOptimized: false, unit: !0)
+!12 = distinct !DISubprogram(name: "call3", linkageName: "_Z5call3Pv", scope: !1, file: !1, line: 50, type: !15, isLocal: false, isDefinition: true, scopeLine: 9, flags: DIFlagPrototyped, isOptimized: false, unit: !0)
!13 = !DILocation(line: 51, column: 32, scope: !12)
!14 = !{i32 0, !"typeid3"}
+!15 = !DISubroutineType(types: !16)
+!16 = !{null}
; CHECK: 1 wholeprogramdevirt - Number of whole program devirtualization targets
; CHECK: 3 wholeprogramdevirt - Number of single implementation devirtualizations
diff --git a/llvm/test/Transforms/WholeProgramDevirt/devirt_single_after_filtering_unreachable_function.ll b/llvm/test/Transforms/WholeProgramDevirt/devirt_single_after_filtering_unreachable_function.ll
index 1e420f13ae938..0f4053d9a90e2 100644
--- a/llvm/test/Transforms/WholeProgramDevirt/devirt_single_after_filtering_unreachable_function.ll
+++ b/llvm/test/Transforms/WholeProgramDevirt/devirt_single_after_filtering_unreachable_function.ll
@@ -58,5 +58,7 @@ declare void @llvm.trap()
!5 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus_14, file: !6)
!6 = !DIFile(filename: "tmp.cc", directory: "")
!7 = !{i32 2, !"Debug Info Version", i32 3}
-!10= distinct !DISubprogram(name: "func", scope: !6, file: !6, unit: !5)
+!10= distinct !DISubprogram(name: "func", scope: !6, file: !6, unit: !5, type: !12)
!11 = !DILocation(line: 21, column: 3, scope: !10)
+!12 = !DISubroutineType(types: !13)
+!13 = !{null}
diff --git a/llvm/test/Transforms/WholeProgramDevirt/speculative-devirt-single-impl.ll b/llvm/test/Transforms/WholeProgramDevirt/speculative-devirt-single-impl.ll
index 10566ae0dee8e..0d30d09ccbb74 100644
--- a/llvm/test/Transforms/WholeProgramDevirt/speculative-devirt-single-impl.ll
+++ b/llvm/test/Transforms/WholeProgramDevirt/speculative-devirt-single-impl.ll
@@ -108,23 +108,25 @@ declare void @llvm.assume(i1)
!2 = !{i32 2, !"Dwarf Version", i32 4}
!3 = !{i32 2, !"Debug Info Version", i32 3}
!4 = !{!"clang version 4.0.0 (trunk 278098)"}
-!5 = distinct !DISubprogram(name: "call", linkageName: "_Z4callPv", scope: !1, file: !1, line: 29, isLocal: false, isDefinition: true, scopeLine: 9, flags: DIFlagPrototyped, isOptimized: false, unit: !0)
+!5 = distinct !DISubprogram(name: "call", linkageName: "_Z4callPv", scope: !1, file: !1, line: 29, type: !19, isLocal: false, isDefinition: true, scopeLine: 9, flags: DIFlagPrototyped, isOptimized: false, unit: !0)
!6 = !DILocation(line: 30, column: 32, scope: !5)
-!7 = distinct !DISubprogram(name: "vf", linkageName: "_ZN3vt12vfEv", scope: !1, file: !1, line: 13, isLocal: false, isDefinition: true, scopeLine: 13, flags: DIFlagPrototyped, isOptimized: false, unit: !0)
+!7 = distinct !DISubprogram(name: "vf", linkageName: "_ZN3vt12vfEv", scope: !1, file: !1, line: 13, type: !19, isLocal: false, isDefinition: true, scopeLine: 13, flags: DIFlagPrototyped, isOptimized: false, unit: !0)
!8 = !{i32 0, !"typeid"}
-!9 = distinct !DISubprogram(name: "call1", linkageName: "_Z5call1Pv", scope: !1, file: !1, line: 31, isLocal: false, isDefinition: true, scopeLine: 9, flags: DIFlagPrototyped, isOptimized: false, unit: !0)
+!9 = distinct !DISubprogram(name: "call1", linkageName: "_Z5call1Pv", scope: !1, file: !1, line: 31, type: !19, isLocal: false, isDefinition: true, scopeLine: 9, flags: DIFlagPrototyped, isOptimized: false, unit: !0)
!10 = !DILocation(line: 35, column: 32, scope: !9)
-!11 = distinct !DISubprogram(name: "vf_empty", linkageName: "_ZN3vt18vf_emptyEv", scope: !1, file: !1, line: 23, isLocal: false, isDefinition: true, scopeLine: 23, flags: DIFlagPrototyped, isOptimized: false, unit: !0)
+!11 = distinct !DISubprogram(name: "vf_empty", linkageName: "_ZN3vt18vf_emptyEv", scope: !1, file: !1, line: 23, type: !19, isLocal: false, isDefinition: true, scopeLine: 23, flags: DIFlagPrototyped, isOptimized: false, unit: !0)
!12 = !{i32 0, !"typeid1"}
-!13 = distinct !DISubprogram(name: "call2", linkageName: "_Z5call2Pv", scope: !1, file: !1, line: 40, isLocal: false, isDefinition: true, scopeLine: 9, flags: DIFlagPrototyped, isOptimized: false, unit: !0)
+!13 = distinct !DISubprogram(name: "call2", linkageName: "_Z5call2Pv", scope: !1, file: !1, line: 40, type: !19, isLocal: false, isDefinition: true, scopeLine: 9, flags: DIFlagPrototyped, isOptimized: false, unit: !0)
!14 = !DILocation(line: 41, column: 32, scope: !13)
!15 = !{i32 0, !"typeid2"}
-!16 = distinct !DISubprogram(name: "call3", linkageName: "_Z5call3Pv", scope: !1, file: !1, line: 50, isLocal: false, isDefinition: true, scopeLine: 9, flags: DIFlagPrototyped, isOptimized: false, unit: !0)
+!16 = distinct !DISubprogram(name: "call3", linkageName: "_Z5call3Pv", scope: !1, file: !1, line: 50, type: !19, isLocal: false, isDefinition: true, scopeLine: 9, flags: DIFlagPrototyped, isOptimized: false, unit: !0)
!17 = !DILocation(line: 51, column: 32, scope: !16)
!18 = !{i32 0, !"typeid3"}
+!19 = !DISubroutineType(types: !20)
+!20 = !{null}
diff --git a/llvm/test/tools/llvm-dwarfdump/X86/stats-dbg-callsite-info.ll b/llvm/test/tools/llvm-dwarfdump/X86/stats-dbg-callsite-info.ll
index 86a8a84ee7e59..7ca458932c386 100644
--- a/llvm/test/tools/llvm-dwarfdump/X86/stats-dbg-callsite-info.ll
+++ b/llvm/test/tools/llvm-dwarfdump/X86/stats-dbg-callsite-info.ll
@@ -52,8 +52,8 @@ declare void @llvm.dbg.value(metadata, metadata, metadata)
!1 = !DIFile(filename: "test.c", directory: "/dir")
!2 = !{}
!3 = !{!4, !5}
-!4 = !DISubprogram(name: "getVal", scope: !1, file: !1, line: 2, spFlags: DISPFlagOptimized, retainedNodes: !2)
-!5 = !DISubprogram(name: "foo", scope: !1, file: !1, line: 1, flags: DIFlagPrototyped, spFlags: DISPFlagOptimized, retainedNodes: !2)
+!4 = !DISubprogram(name: "getVal", scope: !1, file: !1, line: 2, type: !11, spFlags: DISPFlagOptimized, retainedNodes: !2)
+!5 = !DISubprogram(name: "foo", scope: !1, file: !1, line: 1, type: !11, flags: DIFlagPrototyped, spFlags: DISPFlagOptimized, retainedNodes: !2)
!6 = !{i32 2, !"Dwarf Version", i32 4}
!7 = !{i32 2, !"Debug Info Version", i32 3}
!8 = !{i32 1, !"wchar_size", i32 4}
diff --git a/llvm/unittests/IR/DebugInfoTest.cpp b/llvm/unittests/IR/DebugInfoTest.cpp
index fbf5a09b1a299..aaaa6216fa250 100644
--- a/llvm/unittests/IR/DebugInfoTest.cpp
+++ b/llvm/unittests/IR/DebugInfoTest.cpp
@@ -1273,10 +1273,12 @@ TEST(MetadataTest, InlinedAtMethodsWithMultipleLevels) {
!2 = !{i32 2, !"Debug Info Version", i32 3}
; Subprograms for each function in the call chain
- !10 = distinct !DISubprogram(name: "main", scope: !1, file: !1, line: 100, unit: !0)
- !11 = distinct !DISubprogram(name: "inline1", scope: !1, file: !1, line: 200, unit: !0)
- !12 = distinct !DISubprogram(name: "inline2", scope: !1, file: !1, line: 300, unit: !0)
- !13 = distinct !DISubprogram(name: "inline3", scope: !1, file: !1, line: 400, unit: !0)
+ !10 = distinct !DISubprogram(name: "main", scope: !1, file: !1, line: 100, type: !14, unit: !0)
+ !11 = distinct !DISubprogram(name: "inline1", scope: !1, file: !1, line: 200, type: !14, unit: !0)
+ !12 = distinct !DISubprogram(name: "inline2", scope: !1, file: !1, line: 300, type: !14, unit: !0)
+ !13 = distinct !DISubprogram(name: "inline3", scope: !1, file: !1, line: 400, type: !14, unit: !0)
+ !14 = !DISubroutineType(types: !15)
+ !15 = !{null}
; Location in inline3 (line 401), inlined at location !21
!20 = !DILocation(line: 401, column: 5, scope: !13, inlinedAt: !21)
diff --git a/llvm/unittests/IR/ModuleTest.cpp b/llvm/unittests/IR/ModuleTest.cpp
index 2012398530707..e8c2ecfb9f3a8 100644
--- a/llvm/unittests/IR/ModuleTest.cpp
+++ b/llvm/unittests/IR/ModuleTest.cpp
@@ -385,7 +385,9 @@ define void @Foo1() {
!1 = distinct !DICompileUnit(language: DW_LANG_C99, file: !2, producer: "clang1", isOptimized: true, flags: "-O2", runtimeVersion: 0, splitDebugFilename: "abc.debug", emissionKind: LineTablesOnly)
!2 = !DIFile(filename: "path/to/file1", directory: "/path/to/dir1")
!3 = !DILocation(line: 12, column: 34, scope: !4)
-!4 = distinct !DISubprogram(name: "foo1", scope: null, spFlags: DISPFlagDefinition, unit: !1)
+!4 = distinct !DISubprogram(name: "foo1", scope: null, type: !5, spFlags: DISPFlagDefinition, unit: !1)
+!5 = !DISubroutineType(types: !6)
+!6 = !{null}
)",
Err, Context);
ASSERT_TRUE(M1.get());
@@ -411,7 +413,9 @@ define void @Foo2() {
!1 = distinct !DICompileUnit(language: DW_LANG_C99, file: !2, producer: "clang2", isOptimized: true, flags: "-O2", runtimeVersion: 0, splitDebugFilename: "abc.debug", emissionKind: LineTablesOnly)
!2 = !DIFile(filename: "path/to/file2", directory: "/path/to/dir2")
!3 = !DILocation(line: 1234, column: 56, scope: !4)
-!4 = distinct !DISubprogram(name: "foo2", scope: null, spFlags: DISPFlagDefinition, unit: !1)
+!4 = distinct !DISubprogram(name: "foo2", scope: null, type: !5, spFlags: DISPFlagDefinition, unit: !1)
+!5 = !DISubroutineType(types: !6)
+!6 = !{null}
)";
{
std::unique_ptr<Module> M2 = parseAssemblyString(M2Str, Err, Context);
diff --git a/llvm/unittests/IR/VerifierTest.cpp b/llvm/unittests/IR/VerifierTest.cpp
index 28a792a373b84..e99d2ccd2e548 100644
--- a/llvm/unittests/IR/VerifierTest.cpp
+++ b/llvm/unittests/IR/VerifierTest.cpp
@@ -259,8 +259,9 @@ TEST(VerifierTest, DetectInvalidDebugInfo) {
Function::ExternalLinkage, "f", M);
IRBuilder<> Builder(BasicBlock::Create(C, "", F));
Builder.CreateUnreachable();
+ auto *SPType = DIB.createSubroutineType(DIB.getOrCreateTypeArray({}));
F->setSubprogram(DIB.createFunction(
- CU, "f", "f", DIB.createFile("broken.c", "/"), 1, nullptr, 1,
+ CU, "f", "f", DIB.createFile("broken.c", "/"), 1, SPType, 1,
DINode::FlagZero,
DISubprogram::SPFlagLocalToUnit | DISubprogram::SPFlagDefinition));
DIB.finalize();
diff --git a/llvm/unittests/Transforms/Utils/CloningTest.cpp b/llvm/unittests/Transforms/Utils/CloningTest.cpp
index 8c138be840ed7..38888cd9e3666 100644
--- a/llvm/unittests/Transforms/Utils/CloningTest.cpp
+++ b/llvm/unittests/Transforms/Utils/CloningTest.cpp
@@ -780,11 +780,13 @@ TEST(CloneFunction, CloneFunctionWithSubprograms) {
!0 = distinct !DICompileUnit(language: DW_LANG_C99, file: !1)
!1 = !DIFile(filename: "test.cpp", directory: "")
!2 = !{i32 1, !"Debug Info Version", i32 3}
- !3 = distinct !DISubprogram(name: "my_operator", scope: !1, unit: !0, retainedNodes: !{!4})
+ !3 = distinct !DISubprogram(name: "my_operator", scope: !1, type: !8, unit: !0, retainedNodes: !{!4})
!4 = !DILocalVariable(name: "awaitables", scope: !3)
- !5 = distinct !DISubprogram(name: "test", scope: !3, unit: !0)
+ !5 = distinct !DISubprogram(name: "test", scope: !3, type: !8, unit: !0)
!6 = !DILocation(line: 55, column: 15, scope: !3, inlinedAt: !7)
!7 = distinct !DILocation(line: 73, column: 14, scope: !5)
+ !8 = !DISubroutineType(types: !9)
+ !9 = !{null}
)";
LLVMContext Context;
@@ -827,8 +829,8 @@ TEST(CloneFunction, CloneFunctionWithRetainedNodes) {
!0 = distinct !DICompileUnit(language: DW_LANG_C99, file: !1, enums: !{!14})
!1 = !DIFile(filename: "test.cpp", directory: "")
!2 = !{i32 1, !"Debug Info Version", i32 3}
- !3 = distinct !DISubprogram(name: "test", scope: !1, unit: !0, retainedNodes: !9)
- !4 = distinct !DISubprogram(name: "inlined", scope: !1, unit: !0, retainedNodes: !{!5})
+ !3 = distinct !DISubprogram(name: "test", scope: !1, type: !31, unit: !0, retainedNodes: !9)
+ !4 = distinct !DISubprogram(name: "inlined", scope: !1, type: !31, unit: !0, retainedNodes: !{!5})
!5 = !DILocalVariable(name: "awaitables", scope: !4, type: !23)
!6 = distinct !DILexicalBlock(scope: !4, file: !1, line: 1)
!7 = !DILocation(line: 1, scope: !6, inlinedAt: !8)
@@ -849,6 +851,8 @@ TEST(CloneFunction, CloneFunctionWithRetainedNodes) {
!28 = !DILocalVariable(name: "ptr", scope: !3, type: !27)
!29 = !DIDerivedType(tag: DW_TAG_const_type, baseType: !27)
!30 = !DILocalVariable(name: "const_ptr", scope: !3, type: !29)
+ !31 = !DISubroutineType(types: !32)
+ !32 = !{null}
)";
LLVMContext Context;
@@ -963,12 +967,14 @@ TEST(CloneFunction, CloneFunctionWithInlinedSubprograms) {
!0 = distinct !DICompileUnit(language: DW_LANG_C99, file: !1)
!1 = !DIFile(filename: "test.cpp", directory: "")
!2 = !{i32 1, !"Debug Info Version", i32 3}
- !3 = distinct !DISubprogram(name: "test", scope: !0, unit: !0)
- !4 = distinct !DISubprogram(name: "inlined", scope: !0, unit: !0, retainedNodes: !{!5})
+ !3 = distinct !DISubprogram(name: "test", scope: !0, type: !9, unit: !0)
+ !4 = distinct !DISubprogram(name: "inlined", scope: !0, type: !9, unit: !0, retainedNodes: !{!5})
!5 = !DILocalVariable(name: "awaitables", scope: !4)
!6 = distinct !DILexicalBlock(scope: !4, file: !1, line: 1)
!7 = !DILocation(line: 1, scope: !6, inlinedAt: !8)
!8 = !DILocation(line: 10, scope: !3)
+ !9 = !DISubroutineType(types: !10)
+ !10 = !{null}
)";
LLVMContext Context;
@@ -1009,12 +1015,14 @@ TEST(CloneFunction, CloneFunctionToDifferentModule) {
!llvm.module.flags = !{!0}
!llvm.dbg.cu = !{!2, !6}
!0 = !{i32 1, !"Debug Info Version", i32 3}
- !1 = distinct !DISubprogram(unit: !2)
+ !1 = distinct !DISubprogram(type: !7, unit: !2)
!2 = distinct !DICompileUnit(language: DW_LANG_C99, file: !3)
!3 = !DIFile(filename: "foo.c", directory: "/tmp")
- !4 = distinct !DISubprogram(unit: !2)
+ !4 = distinct !DISubprogram(type: !7, unit: !2)
!5 = !DILocation(line: 4, scope: !1)
!6 = distinct !DICompileUnit(language: DW_LANG_C99, file: !3)
+ !7 = !DISubroutineType(types: !8)
+ !8 = !{null}
)";
StringRef DeclAssembly = R"(
declare void @foo()
@@ -1333,13 +1341,15 @@ TEST_F(CloneInstruction, cloneKeyInstructions) {
!0 = distinct !DICompileUnit(language: DW_LANG_C99, file: !1)
!1 = !DIFile(filename: "test.cpp", directory: "")
!2 = !{i32 1, !"Debug Info Version", i32 3}
- !3 = distinct !DISubprogram(name: "test", scope: !0, unit: !0, keyInstructions: true)
- !4 = distinct !DISubprogram(name: "inlined", scope: !0, unit: !0, retainedNodes: !{!5}, keyInstructions: true)
+ !3 = distinct !DISubprogram(name: "test", scope: !0, type: !10, unit: !0, keyInstructions: true)
+ !4 = distinct !DISubprogram(name: "inlined", scope: !0, type: !10, unit: !0, retainedNodes: !{!5}, keyInstructions: true)
!5 = !DILocalVariable(name: "awaitables", scope: !4)
!6 = !DILocation(line: 1, scope: !4, inlinedAt: !8, atomGroup: 1, atomRank: 1)
!7 = !DILocation(line: 2, scope: !3, atomGroup: 1, atomRank: 1)
!8 = !DILocation(line: 3, scope: !3, atomGroup: 1, atomRank: 1)
!9 = !DILocation(line: 4, scope: !3, atomGroup: 2, atomRank: 1)
+ !10 = !DISubroutineType(types: !11)
+ !11 = !{null}
)");
ASSERT_FALSE(verifyModule(*M, &errs()));
diff --git a/mlir/test/Dialect/LLVMIR/di-expression-legalization.mlir b/mlir/test/Dialect/LLVMIR/di-expression-legalization.mlir
index 9280154ad557a..800c3548e5ad5 100644
--- a/mlir/test/Dialect/LLVMIR/di-expression-legalization.mlir
+++ b/mlir/test/Dialect/LLVMIR/di-expression-legalization.mlir
@@ -3,7 +3,9 @@
#di_file = #llvm.di_file<"foo.c" in "/mlir/">
#di_compile_unit = #llvm.di_compile_unit<id = distinct[0]<>, sourceLanguage = DW_LANG_C, file = #di_file, producer = "MLIR", isOptimized = true, emissionKind = Full>
-#di_subprogram = #llvm.di_subprogram<compileUnit = #di_compile_unit, scope = #di_file, name = "simplify", file = #di_file, subprogramFlags = Definition>
+#void_return = #llvm.di_null_type
+#void_type = #llvm.di_subroutine_type<types = #void_return>
+#di_subprogram = #llvm.di_subprogram<compileUnit = #di_compile_unit, scope = #di_file, name = "simplify", file = #di_file, subprogramFlags = Definition, type = #void_type>
#i32_type = #llvm.di_basic_type<tag = DW_TAG_base_type, name = "i32", sizeInBits = 32, encoding = DW_ATE_unsigned>
#i8_type = #llvm.di_basic_type<tag = DW_TAG_base_type, name = "i8", sizeInBits = 8, encoding = DW_ATE_unsigned>
diff --git a/mlir/test/Target/LLVMIR/Import/debug-info.ll b/mlir/test/Target/LLVMIR/Import/debug-info.ll
index 0465f608a90cc..bf4e22b4c6d2d 100644
--- a/mlir/test/Target/LLVMIR/Import/debug-info.ll
+++ b/mlir/test/Target/LLVMIR/Import/debug-info.ll
@@ -44,11 +44,13 @@ define i32 @instruction_loc(i32 %arg1) {
!0 = !{i32 2, !"Debug Info Version", i32 3}
!1 = distinct !DICompileUnit(language: DW_LANG_C, file: !2)
!2 = !DIFile(filename: "debug-info.ll", directory: "/")
-!3 = distinct !DISubprogram(name: "instruction_loc", scope: !2, file: !2, spFlags: DISPFlagDefinition, unit: !1)
-!4 = distinct !DISubprogram(name: "callee", scope: !2, file: !2, spFlags: DISPFlagDefinition, unit: !1)
+!3 = distinct !DISubprogram(name: "instruction_loc", scope: !2, file: !2, spFlags: DISPFlagDefinition, unit: !1, type: !999)
+!4 = distinct !DISubprogram(name: "callee", scope: !2, file: !2, spFlags: DISPFlagDefinition, unit: !1, type: !999)
!5 = !DILocation(line: 1, column: 2, scope: !3)
!6 = !DILocation(line: 2, column: 2, scope: !3)
!7 = !DILocation(line: 7, column: 4, scope: !4, inlinedAt: !6)
+!999 = !DISubroutineType(types: !1000)
+!1000 = !{null}
; // -----
@@ -74,11 +76,13 @@ define i32 @lexical_block(i32 %arg1) {
!0 = !{i32 2, !"Debug Info Version", i32 3}
!1 = distinct !DICompileUnit(language: DW_LANG_C, file: !2)
!2 = !DIFile(filename: "debug-info.ll", directory: "/")
-!3 = distinct !DISubprogram(name: "lexical_block", scope: !2, file: !2, spFlags: DISPFlagDefinition, unit: !1)
+!3 = distinct !DISubprogram(name: "lexical_block", scope: !2, file: !2, spFlags: DISPFlagDefinition, unit: !1, type: !999)
!4 = !DILexicalBlock(scope: !3)
!5 = !DILexicalBlock(scope: !3, file: !2, line: 2, column: 2)
!6 = !DILocation(line: 1, column: 2, scope: !4)
!7 = !DILocation(line: 2, column: 2, scope: !5)
+!999 = !DISubroutineType(types: !1000)
+!1000 = !{null}
; // -----
@@ -104,11 +108,13 @@ define i32 @lexical_block_file(i32 %arg1) {
!0 = !{i32 2, !"Debug Info Version", i32 3}
!1 = distinct !DICompileUnit(language: DW_LANG_C, file: !2)
!2 = !DIFile(filename: "debug-info.ll", directory: "/")
-!3 = distinct !DISubprogram(name: "lexical_block_file", scope: !2, file: !2, spFlags: DISPFlagDefinition, unit: !1)
+!3 = distinct !DISubprogram(name: "lexical_block_file", scope: !2, file: !2, spFlags: DISPFlagDefinition, unit: !1, type: !999)
!4 = !DILexicalBlockFile(scope: !3, discriminator: 0)
!5 = !DILexicalBlockFile(scope: !3, file: !2, discriminator: 0)
!6 = !DILocation(line: 1, column: 2, scope: !4)
!7 = !DILocation(line: 2, column: 2, scope: !5)
+!999 = !DISubroutineType(types: !1000)
+!1000 = !{null}
; // -----
@@ -214,7 +220,6 @@ define void @composite_type() !dbg !3 {
!28 = !DIExpression(DW_OP_push_object_address, DW_OP_plus_uconst, 32, DW_OP_deref)
!29 = !{!25}
-
; // -----
; CHECK-DAG: #[[FILE:.+]] = #llvm.di_file<"debug-info.ll" in "/">
@@ -253,7 +258,9 @@ define void @func_loc() !dbg !3 {
!0 = !{i32 2, !"Debug Info Version", i32 3}
!1 = distinct !DICompileUnit(language: DW_LANG_C, file: !2)
!2 = !DIFile(filename: "debug-info.ll", directory: "/")
-!3 = distinct !DISubprogram(name: "func_loc", scope: !2, file: !2, spFlags: DISPFlagDefinition, unit: !1, line: 42)
+!3 = distinct !DISubprogram(name: "func_loc", scope: !2, file: !2, spFlags: DISPFlagDefinition, unit: !1, line: 42, type: !999)
+!999 = !DISubroutineType(types: !1000)
+!1000 = !{null}
; // -----
@@ -299,7 +306,7 @@ declare void @llvm.dbg.label(metadata)
!0 = !{i32 2, !"Debug Info Version", i32 3}
!1 = distinct !DICompileUnit(language: DW_LANG_C, file: !2)
!2 = !DIFile(filename: "debug-info.ll", directory: "/")
-!3 = distinct !DISubprogram(name: "intrinsic", scope: !2, file: !2, spFlags: DISPFlagDefinition, unit: !1)
+!3 = distinct !DISubprogram(name: "intrinsic", scope: !2, file: !2, spFlags: DISPFlagDefinition, unit: !1, type: !999)
!4 = !DIBasicType(name: "int")
!5 = !DILocalVariable(scope: !3, name: "arg", file: !2, line: 1, arg: 1, align: 32, type: !4);
!6 = !DILocalVariable(scope: !3, name: "arg")
@@ -307,6 +314,8 @@ declare void @llvm.dbg.label(metadata)
!8 = !DILocation(line: 2, column: 2, scope: !3)
!9 = !DILocation(line: 3, column: 2, scope: !3)
!10 = !DILabel(scope: !3, name: "label", file: !2, line: 42)
+!999 = !DISubroutineType(types: !1000)
+!1000 = !{null}
; // -----
@@ -367,8 +376,10 @@ declare void @llvm.dbg.value(metadata, metadata, metadata)
!5 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !3, flags: DIFlagArtificial | DIFlagObjectPointer)
!6 = !DIDerivedType(tag: DW_TAG_member, name: "call_field", file: !2, baseType: !5)
!7 = !DILocalVariable(scope: !8, name: "class_field", file: !2, type: !5);
-!8 = distinct !DISubprogram(name: "class_field", scope: !2, file: !2, spFlags: DISPFlagDefinition, unit: !1)
+!8 = distinct !DISubprogram(name: "class_field", scope: !2, file: !2, spFlags: DISPFlagDefinition, unit: !1, type: !999)
!9 = !DILocation(line: 1, column: 2, scope: !8)
+!999 = !DISubroutineType(types: !1000)
+!1000 = !{null}
; // -----
@@ -408,8 +419,10 @@ declare void @llvm.dbg.value(metadata, metadata, metadata)
!5 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !3, flags: DIFlagArtificial | DIFlagObjectPointer)
!6 = !DIDerivedType(tag: DW_TAG_member, name: "call_field", file: !2, baseType: !5)
!7 = !DILocalVariable(scope: !8, name: "var", file: !2, type: !5);
-!8 = distinct !DISubprogram(name: "dbg_use_before_def", scope: !2, file: !2, spFlags: DISPFlagDefinition, unit: !1)
+!8 = distinct !DISubprogram(name: "dbg_use_before_def", scope: !2, file: !2, spFlags: DISPFlagDefinition, unit: !1, type: !999)
!9 = !DILocation(line: 1, column: 2, scope: !8)
+!999 = !DISubroutineType(types: !1000)
+!1000 = !{null}
; // -----
@@ -442,8 +455,10 @@ declare void @llvm.dbg.value(metadata, metadata, metadata)
!5 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !3, flags: DIFlagArtificial | DIFlagObjectPointer)
!6 = !DIDerivedType(tag: DW_TAG_member, name: "call_field", file: !2, baseType: !5)
!7 = !DILocalVariable(scope: !8, name: "var", file: !2, type: !5);
-!8 = distinct !DISubprogram(name: "dbg_use_before_def", scope: !2, file: !2, spFlags: DISPFlagDefinition, unit: !1)
+!8 = distinct !DISubprogram(name: "dbg_use_before_def", scope: !2, file: !2, spFlags: DISPFlagDefinition, unit: !1, type: !999)
!9 = !DILocation(line: 1, column: 2, scope: !8)
+!999 = !DISubroutineType(types: !1000)
+!1000 = !{null}
; // -----
@@ -472,8 +487,10 @@ declare void @llvm.dbg.value(metadata, metadata, metadata)
!1 = distinct !DICompileUnit(language: DW_LANG_C, file: !2)
!2 = !DIFile(filename: "debug-info.ll", directory: "/")
!7 = !DILocalVariable(scope: !8, name: "var", file: !2);
-!8 = distinct !DISubprogram(name: "dbg_broken_dominance_invoke", scope: !2, file: !2, spFlags: DISPFlagDefinition, unit: !1)
+!8 = distinct !DISubprogram(name: "dbg_broken_dominance_invoke", scope: !2, file: !2, spFlags: DISPFlagDefinition, unit: !1, type: !999)
!9 = !DILocation(line: 1, column: 2, scope: !8)
+!999 = !DISubroutineType(types: !1000)
+!1000 = !{null}
; // -----
@@ -503,8 +520,10 @@ declare void @llvm.dbg.value(metadata, metadata, metadata)
!1 = distinct !DICompileUnit(language: DW_LANG_C, file: !2)
!2 = !DIFile(filename: "debug-info.ll", directory: "/")
!7 = !DILocalVariable(scope: !8, name: "var", file: !2);
-!8 = distinct !DISubprogram(name: "dbg_broken_dominance_invoke", scope: !2, file: !2, spFlags: DISPFlagDefinition, unit: !1)
+!8 = distinct !DISubprogram(name: "dbg_broken_dominance_invoke", scope: !2, file: !2, spFlags: DISPFlagDefinition, unit: !1, type: !999)
!9 = !DILocation(line: 1, column: 2, scope: !8)
+!999 = !DISubroutineType(types: !1000)
+!1000 = !{null}
; // -----
@@ -524,9 +543,11 @@ declare void @llvm.dbg.value(metadata, metadata, metadata)
!1 = distinct !DICompileUnit(language: DW_LANG_C, file: !2)
!2 = !DIFile(filename: "debug-info.ll", directory: "/")
!7 = !DILocalVariable(scope: !8, name: "var")
-!8 = distinct !DISubprogram(name: "namespace", scope: !10, file: !2, unit: !1);
+!8 = distinct !DISubprogram(name: "namespace", scope: !10, file: !2, unit: !1, type: !999);
!9 = !DILocation(line: 1, column: 2, scope: !8)
!10 = !DINamespace(name: "std", scope: null)
+!999 = !DISubroutineType(types: !1000)
+!1000 = !{null}
; // -----
@@ -546,8 +567,10 @@ declare void @llvm.dbg.value(metadata, metadata, metadata)
!1 = distinct !DICompileUnit(language: DW_LANG_C, file: !2)
!2 = !DIFile(filename: "debug-info.ll", directory: "/")
!7 = !DILocalVariable(scope: !8)
-!8 = distinct !DISubprogram(name: "noname_variable", scope: !2, file: !2, unit: !1);
+!8 = distinct !DISubprogram(name: "noname_variable", scope: !2, file: !2, unit: !1, type: !999);
!9 = !DILocation(line: 1, column: 2, scope: !8)
+!999 = !DISubroutineType(types: !1000)
+!1000 = !{null}
; // -----
@@ -562,7 +585,9 @@ define void @noname_subprogram(ptr %arg) !dbg !8 {
!0 = !{i32 2, !"Debug Info Version", i32 3}
!1 = distinct !DICompileUnit(language: DW_LANG_C, file: !2)
!2 = !DIFile(filename: "debug-info.ll", directory: "/")
-!8 = distinct !DISubprogram(scope: !2, file: !2, spFlags: DISPFlagDefinition, unit: !1);
+!8 = distinct !DISubprogram(scope: !2, file: !2, spFlags: DISPFlagDefinition, unit: !1, type: !999);
+!999 = !DISubroutineType(types: !1000)
+!1000 = !{null}
; // -----
@@ -582,8 +607,10 @@ define void @func_in_module(ptr %arg) !dbg !8 {
!0 = !{i32 2, !"Debug Info Version", i32 3}
!1 = distinct !DICompileUnit(language: DW_LANG_C, file: !2)
!2 = !DIFile(filename: "debug-info.ll", directory: "/")
-!8 = distinct !DISubprogram(name: "func_in_module", scope: !10, file: !2, unit: !1);
+!8 = distinct !DISubprogram(name: "func_in_module", scope: !10, file: !2, unit: !1, type: !999);
!10 = !DIModule(scope: !2, name: "module", configMacros: "bar", includePath: "/", apinotes: "/", file: !2, line: 42, isDecl: true)
+!999 = !DISubroutineType(types: !1000)
+!1000 = !{null}
; // -----
@@ -606,9 +633,11 @@ define void @distinct_cu_func1() !dbg !5 {
!1 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus_14, file: !2, producer: "clang")
!2 = !DIFile(filename: "other.cpp", directory: "/")
!3 = !{i32 2, !"Debug Info Version", i32 3}
-!4 = distinct !DISubprogram(name: "func", linkageName: "func", scope: !6, file: !6, line: 1, scopeLine: 1, flags: DIFlagArtificial, spFlags: DISPFlagDefinition, unit: !0)
-!5 = distinct !DISubprogram(name: "func", linkageName: "func", scope: !6, file: !6, line: 1, scopeLine: 1, flags: DIFlagArtificial, spFlags: DISPFlagDefinition, unit: !1)
+!4 = distinct !DISubprogram(name: "func", linkageName: "func", scope: !6, file: !6, line: 1, scopeLine: 1, flags: DIFlagArtificial, spFlags: DISPFlagDefinition, unit: !0, type: !999)
+!5 = distinct !DISubprogram(name: "func", linkageName: "func", scope: !6, file: !6, line: 1, scopeLine: 1, flags: DIFlagArtificial, spFlags: DISPFlagDefinition, unit: !1, type: !999)
!6 = !DIFile(filename: "file.hpp", directory: "/")
+!999 = !DISubroutineType(types: !1000)
+!1000 = !{null}
; // -----
@@ -622,8 +651,10 @@ declare !dbg !1 void @declaration()
!llvm.module.flags = !{!0}
!0 = !{i32 2, !"Debug Info Version", i32 3}
-!1 = !DISubprogram(name: "declaration", scope: !2, file: !2, flags: DIFlagPrototyped, spFlags: 0)
+!1 = !DISubprogram(name: "declaration", scope: !2, file: !2, flags: DIFlagPrototyped, spFlags: 0, type: !999)
!2 = !DIFile(filename: "debug-info.ll", directory: "/")
+!999 = !DISubroutineType(types: !1000)
+!1000 = !{null}
; // -----
@@ -668,7 +699,9 @@ define void @class_field(ptr %arg1) !dbg !18 {
!8 = !DIDerivedType(tag: DW_TAG_member, name: "B:B2", file: !2, baseType: !5)
!9 = !{!7, !8}
-!18 = distinct !DISubprogram(name: "A", scope: !3, file: !2, spFlags: DISPFlagDefinition, unit: !1)
+!18 = distinct !DISubprogram(name: "A", scope: !3, file: !2, spFlags: DISPFlagDefinition, unit: !1, type: !999)
+!999 = !DISubroutineType(types: !1000)
+!1000 = !{null}
; // -----
@@ -713,7 +746,9 @@ define void @class_field(ptr %arg1) !dbg !18 {
!9 = !{!7}
!10 = !{!8}
-!18 = distinct !DISubprogram(name: "SP", scope: !3, file: !2, spFlags: DISPFlagDefinition, unit: !1)
+!18 = distinct !DISubprogram(name: "SP", scope: !3, file: !2, spFlags: DISPFlagDefinition, unit: !1, type: !999)
+!999 = !DISubroutineType(types: !1000)
+!1000 = !{null}
; // -----
@@ -764,7 +799,9 @@ define void @class_field(ptr %arg1) !dbg !18 {
!10 = !{!8} ; B -> C
!11 = !{!6, !7, !8} ; C -> A, B, C
-!18 = distinct !DISubprogram(name: "SP", scope: !3, file: !2, spFlags: DISPFlagDefinition, unit: !1)
+!18 = distinct !DISubprogram(name: "SP", scope: !3, file: !2, spFlags: DISPFlagDefinition, unit: !1, type: !999)
+!999 = !DISubroutineType(types: !1000)
+!1000 = !{null}
; // -----
@@ -885,7 +922,7 @@ define void @test() !dbg !3 {
!0 = !DIGlobalVariableExpression(var: !1, expr: !DIExpression())
!1 = distinct !DIGlobalVariable(name: "alpha", scope: !2, file: !4, type: !9)
!2 = !DICommonBlock(scope: !3, declaration: null, name: "block", file: !4, line: 3)
-!3 = distinct !DISubprogram(name: "test", scope: !4, file: !4, spFlags: DISPFlagDefinition, unit: !7)
+!3 = distinct !DISubprogram(name: "test", scope: !4, file: !4, spFlags: DISPFlagDefinition, unit: !7, type: !999)
!4 = !DIFile(filename: "test.f90", directory: "")
!7 = distinct !DICompileUnit(language: DW_LANG_Fortran95, file: !4)
!9 = !DIBasicType(name: "integer", size: 32, encoding: DW_ATE_signed)
@@ -894,6 +931,8 @@ define void @test() !dbg !3 {
; CHECK: #[[FILE:.+]] = #llvm.di_file<"test.f90" in "">
; CHECK: #[[SP:.+]] = #llvm.di_subprogram<{{.*}}name = "test"{{.*}}>
; CHECK: #llvm.di_common_block<scope = #[[SP]], name = "block", file = #[[FILE]], line = 3>
+!999 = !DISubroutineType(types: !1000)
+!1000 = !{null}
; // -----
diff --git a/mlir/test/Target/LLVMIR/Import/exception.ll b/mlir/test/Target/LLVMIR/Import/exception.ll
index 57c4bce5c6c72..6165032ae7c39 100644
--- a/mlir/test/Target/LLVMIR/Import/exception.ll
+++ b/mlir/test/Target/LLVMIR/Import/exception.ll
@@ -182,12 +182,14 @@ bb3:
!0 = !{i32 2, !"Debug Info Version", i32 3}
!1 = distinct !DICompileUnit(language: DW_LANG_C, file: !2)
!2 = !DIFile(filename: "landingpad.ll", directory: "/")
-!3 = distinct !DISubprogram(name: "instruction_loc", scope: !2, file: !2, spFlags: DISPFlagDefinition, unit: !1)
-!4 = distinct !DISubprogram(name: "callee", scope: !2, file: !2, spFlags: DISPFlagDefinition, unit: !1)
+!3 = distinct !DISubprogram(name: "instruction_loc", scope: !2, file: !2, spFlags: DISPFlagDefinition, unit: !1, type: !999)
+!4 = distinct !DISubprogram(name: "callee", scope: !2, file: !2, spFlags: DISPFlagDefinition, unit: !1, type: !999)
!5 = !DILocation(line: 1, column: 2, scope: !3)
!6 = !DILocation(line: 2, column: 2, scope: !3)
!7 = !DILocation(line: 7, column: 4, scope: !4, inlinedAt: !6)
!8 = !DILocalVariable(scope: !4, name: "size")
+!999 = !DISubroutineType(types: !1000)
+!1000 = !{null}
; // -----
diff --git a/mlir/test/Target/LLVMIR/Import/import-failure.ll b/mlir/test/Target/LLVMIR/Import/import-failure.ll
index 32f730b545405..b468a3e95c907 100644
--- a/mlir/test/Target/LLVMIR/Import/import-failure.ll
+++ b/mlir/test/Target/LLVMIR/Import/import-failure.ll
@@ -18,9 +18,11 @@ define void @unsupported_argument(i64 %arg1) {
!1 = distinct !DICompileUnit(language: DW_LANG_C, file: !2)
!2 = !DIFile(filename: "import-failure.ll", directory: "/")
!3 = !DILocalVariable(scope: !4, name: "arg1", file: !2, line: 1, arg: 1, align: 64);
-!4 = distinct !DISubprogram(name: "intrinsic", scope: !2, file: !2, spFlags: DISPFlagDefinition, unit: !1)
+!4 = distinct !DISubprogram(name: "intrinsic", scope: !2, file: !2, spFlags: DISPFlagDefinition, unit: !1, type: !999)
!5 = !DILocation(line: 1, column: 2, scope: !4)
!6 = !{}
+!999 = !DISubroutineType(types: !1000)
+!1000 = !{null}
; // -----
diff --git a/mlir/test/Target/LLVMIR/Import/metadata-loop.ll b/mlir/test/Target/LLVMIR/Import/metadata-loop.ll
index 20431a7412bd1..c09fe92dc9cdc 100644
--- a/mlir/test/Target/LLVMIR/Import/metadata-loop.ll
+++ b/mlir/test/Target/LLVMIR/Import/metadata-loop.ll
@@ -366,9 +366,11 @@ end:
!0 = !{i32 2, !"Debug Info Version", i32 3}
!1 = distinct !DICompileUnit(language: DW_LANG_C, file: !2)
!2 = !DIFile(filename: "metadata-loop.ll", directory: "/")
-!3 = distinct !DISubprogram(name: "loop_locs", scope: !2, file: !2, spFlags: DISPFlagDefinition, unit: !1)
+!3 = distinct !DISubprogram(name: "loop_locs", scope: !2, file: !2, spFlags: DISPFlagDefinition, unit: !1, type: !999)
!4 = !DILocation(line: 1, column: 2, scope: !3)
!5 = !DILocation(line: 2, column: 2, scope: !3)
!6 = distinct !{!6, !4, !5, !7}
!7 = !{!"llvm.loop.mustprogress"}
+!999 = !DISubroutineType(types: !1000)
+!1000 = !{null}
diff --git a/mlir/test/Target/LLVMIR/llvmir-debug.mlir b/mlir/test/Target/LLVMIR/llvmir-debug.mlir
index 9b1dad2910dba..a6f4ecdb1c107 100644
--- a/mlir/test/Target/LLVMIR/llvmir-debug.mlir
+++ b/mlir/test/Target/LLVMIR/llvmir-debug.mlir
@@ -198,8 +198,11 @@ llvm.func @empty_types() {
// -----
#di_file = #llvm.di_file<"foo.mlir" in "/test/">
+#void_return = #llvm.di_null_type
+#void_type = #llvm.di_subroutine_type<types = #void_return>
#di_subprogram = #llvm.di_subprogram<
- scope = #di_file, name = "func_decl_with_subprogram", file = #di_file
+ scope = #di_file, name = "func_decl_with_subprogram", file = #di_file,
+ type = #void_type
>
// CHECK-LABEL: declare !dbg
@@ -217,13 +220,17 @@ llvm.func @func_decl_with_subprogram() -> (i32) loc(fused<#di_subprogram>["foo.m
id = distinct[0]<>, sourceLanguage = DW_LANG_C, file = #di_file,
producer = "MLIR", isOptimized = true, emissionKind = Full, isDebugInfoForProfiling = true
>
+#void_return = #llvm.di_null_type
+#void_type = #llvm.di_subroutine_type<types = #void_return>
#di_subprogram = #llvm.di_subprogram<
compileUnit = #di_compile_unit, scope = #di_file, name = "outer_func",
- file = #di_file, subprogramFlags = "Definition|Optimized"
+ file = #di_file, subprogramFlags = "Definition|Optimized",
+ type = #void_type
>
#di_subprogram1 = #llvm.di_subprogram<
compileUnit = #di_compile_unit, scope = #di_file, name = "inner_func",
- file = #di_file, subprogramFlags = "LocalToUnit|Definition|Optimized"
+ file = #di_file, subprogramFlags = "LocalToUnit|Definition|Optimized",
+ type = #void_type
>
#di_local_variable0 = #llvm.di_local_variable<scope = #di_subprogram, name = "a", file = #di_file, type = #di_basic_type>
#di_lexical_block_file = #llvm.di_lexical_block_file<scope = #di_subprogram1, file = #di_file, discriminator = 0>
@@ -259,11 +266,13 @@ llvm.func @func_with_inlined_dbg_value(%arg0: i32) -> (i32) {
#di_file = #llvm.di_file<"foo.mlir" in "/test/">
#di_compile_unit = #llvm.di_compile_unit<
id = distinct[0]<>, sourceLanguage = DW_LANG_C, file = #di_file,
+#void_return = #llvm.di_null_type
+#void_type = #llvm.di_subroutine_type<types = #void_return>
producer = "MLIR", isOptimized = true, emissionKind = Full, isDebugInfoForProfiling = true
>
#di_subprogram = #llvm.di_subprogram<
compileUnit = #di_compile_unit, scope = #di_file, name = "func",
- file = #di_file, subprogramFlags = Definition>
+ file = #di_file, subprogramFlags = Definition, type = #void_type>
#di_local_variable = #llvm.di_local_variable<scope = #di_subprogram, name = "a", file = #di_file, type = #di_basic_type>
#loc = loc("foo.mlir":0:0)
@@ -279,7 +288,6 @@ llvm.func @func_without_subprogram(%0 : i32) {
// CHECK: ![[FILE:.*]] = !DIFile(filename: "foo.mlir", directory: "/test/")
// CHECK-DAG: ![[FUNC:.*]] = distinct !DISubprogram(name: "func", scope: ![[FILE]]
// CHECK-DAG: ![[VAR_LOC]] = !DILocalVariable(name: "a", scope: ![[FUNC]], file: ![[FILE]]
-
// -----
// Ensures that debug intrinsics without a valid location are not exported to
@@ -288,11 +296,14 @@ llvm.func @func_without_subprogram(%0 : i32) {
#di_file = #llvm.di_file<"foo.mlir" in "/test/">
#di_compile_unit = #llvm.di_compile_unit<
id = distinct[0]<>, sourceLanguage = DW_LANG_C, file = #di_file,
+#void_return = #llvm.di_null_type
+#void_type = #llvm.di_subroutine_type<types = #void_return>
producer = "MLIR", isOptimized = true, emissionKind = Full, isDebugInfoForProfiling = true
>
#di_subprogram = #llvm.di_subprogram<
compileUnit = #di_compile_unit, scope = #di_file, name = "outer_func",
- file = #di_file, subprogramFlags = "Definition|Optimized"
+ file = #di_file, subprogramFlags = "Definition|Optimized",
+ type = #void_type
>
#di_local_variable = #llvm.di_local_variable<scope = #di_subprogram, name = "a">
#declared_var = #llvm.di_local_variable<scope = #di_subprogram, name = "alloc">
@@ -310,7 +321,6 @@ llvm.func @dbg_intrinsics_with_no_location(%arg0: i32) -> (i32) {
llvm.intr.dbg.label #di_label
llvm.return %arg0 : i32
}
-
// -----
// CHECK: @global_with_expr_1 = external global i64, !dbg {{.*}}
@@ -362,14 +372,15 @@ llvm.mlir.global external @module_global() {dbg_exprs = [#llvm.di_global_variabl
#file = #llvm.di_file<"test.f90" in "existence">
#cu = #llvm.di_compile_unit<id = distinct[0]<>, sourceLanguage = DW_LANG_Fortran95, file = #file, producer = "MLIR", isOptimized = true, emissionKind = Full, isDebugInfoForProfiling = true>
+#void_return = #llvm.di_null_type
+#void_type = #llvm.di_subroutine_type<types = #void_return>
#ty1 = #llvm.di_basic_type<tag = DW_TAG_base_type, name = "integer", sizeInBits = 64, encoding = DW_ATE_signed>
-#sp = #llvm.di_subprogram<compileUnit = #cu, scope = #file, name = "fn_with_gl", file = #file, subprogramFlags = "Definition|Optimized">
+#sp = #llvm.di_subprogram<compileUnit = #cu, scope = #file, name = "fn_with_gl", file = #file, subprogramFlags = "Definition|Optimized", type = #void_type>
llvm.mlir.global @func_global() {dbg_exprs = [#llvm.di_global_variable_expression<var = <scope = #sp, name = "func_global", linkageName = "func_global", file = #file, line = 121, type = #ty1, isLocalToUnit = true, isDefined = true>, expr = <>>]} : i64
llvm.func @fn_with_gl() {
llvm.return
} loc(fused<#sp>["foo1.mlir":0:0])
-
// -----
// Test that imported entries correctly generates 'retainedNodes' in the
@@ -433,8 +444,10 @@ llvm.mlir.global external constant @".str.1"() {addr_space = 0 : i32, dbg_exprs
#di_compile_unit_1 = #llvm.di_compile_unit<id = distinct[0]<>, sourceLanguage = DW_LANG_C, file = #di_file_1, producer = "MLIR", isOptimized = true, emissionKind = LineTablesOnly, isDebugInfoForProfiling = true>
// CHECK-DAG: ![[SCOPE1:.*]] = distinct !DICompileUnit(language: DW_LANG_C, file: ![[FILE1]], producer: "MLIR", isOptimized: true, runtimeVersion: 0, emissionKind: LineTablesOnly, debugInfoForProfiling: true)
#di_compile_unit_2 = #llvm.di_compile_unit<id = distinct[1]<>, sourceLanguage = DW_LANG_C, file = #di_file_2, producer = "MLIR", isOptimized = true, emissionKind = DebugDirectivesOnly, isDebugInfoForProfiling = true>
-#di_subprogram_1 = #llvm.di_subprogram<compileUnit = #di_compile_unit_1, scope = #di_file_1, name = "func1", file = #di_file_1, subprogramFlags = "Definition|Optimized">
-#di_subprogram_2 = #llvm.di_subprogram<compileUnit = #di_compile_unit_2, scope = #di_file_2, name = "func2", file = #di_file_2, subprogramFlags = "Definition|Optimized">
+#void_return = #llvm.di_null_type
+#void_type = #llvm.di_subroutine_type<types = #void_return>
+#di_subprogram_1 = #llvm.di_subprogram<compileUnit = #di_compile_unit_1, scope = #di_file_1, name = "func1", file = #di_file_1, subprogramFlags = "Definition|Optimized", type = #void_type>
+#di_subprogram_2 = #llvm.di_subprogram<compileUnit = #di_compile_unit_2, scope = #di_file_2, name = "func2", file = #di_file_2, subprogramFlags = "Definition|Optimized", type = #void_type>
llvm.func @func_line_tables() {
llvm.return
@@ -662,9 +675,11 @@ llvm.func @subranges(%arg: !llvm.ptr) {
#bt = #llvm.di_basic_type<tag = DW_TAG_base_type, name = "int", sizeInBits = 32>
#file = #llvm.di_file<"debug-info.ll" in "/">
#cu = #llvm.di_compile_unit<id = distinct[0]<>, sourceLanguage = DW_LANG_C,
+#void_return = #llvm.di_null_type
+#void_type = #llvm.di_subroutine_type<types = #void_return>
file = #file, isOptimized = false, emissionKind = Full, isDebugInfoForProfiling = false>
#sp = #llvm.di_subprogram<compileUnit = #cu, scope = #file, name = "test",
- file = #file, subprogramFlags = Definition>
+ file = #file, subprogramFlags = Definition, type = #void_type>
#var = #llvm.di_local_variable<scope = #sp, name = "string_size", type = #bt, flags = Artificial>
#sty1 = #llvm.di_string_type<tag = DW_TAG_string_type, name = "character(*)",
sizeInBits = 32, alignInBits = 8, stringLength = #var,
@@ -686,16 +701,17 @@ llvm.func @string_ty(%arg0: !llvm.ptr) {
// CHECK-DAG: !DIStringType(name: "character(*)", stringLength: ![[VAR:[0-9]+]], stringLengthExpression: !DIExpression(DW_OP_push_object_address, DW_OP_plus_uconst, 8), stringLocationExpression: !DIExpression(DW_OP_push_object_address, DW_OP_deref), size: 32, align: 8)
// CHECK-DAG: ![[VAR]] = !DILocalVariable(name: "string_size"{{.*}} flags: DIFlagArtificial)
// CHECK-DAG: !DIStringType()
-
// -----
// Test translation of DICommonBlockAttr.
#bt = #llvm.di_basic_type<tag = DW_TAG_base_type, name = "int", sizeInBits = 32>
#file = #llvm.di_file<"test.f90" in "">
#cu = #llvm.di_compile_unit<id = distinct[0]<>, sourceLanguage = DW_LANG_C,
+#void_return = #llvm.di_null_type
+#void_type = #llvm.di_subroutine_type<types = #void_return>
file = #file, isOptimized = false, emissionKind = Full, isDebugInfoForProfiling = false>
#sp = #llvm.di_subprogram<compileUnit = #cu, scope = #file, name = "test",
- file = #file, subprogramFlags = Definition>
+ file = #file, subprogramFlags = Definition, type = #void_type>
#di_common_block = #llvm.di_common_block<scope = #sp, name = "block",
file = #file, line = 3>
#global_var = #llvm.di_global_variable<scope = #di_common_block, name = "a",
@@ -716,7 +732,6 @@ llvm.func @test() {
// CHECK: !DICommonBlock(scope: ![[SCOPE:[0-9]+]], declaration: null, name: "block", file: ![[FILE:[0-9]+]], line: 3)
// CHECK: ![[SCOPE]] = {{.*}}!DISubprogram(name: "test"{{.*}})
// CHECK: ![[FILE]] = !DIFile(filename: "test.f90"{{.*}})
-
// -----
// Test multiple DIGlobalVariableExpression on a global.
diff --git a/mlir/test/Target/LLVMIR/loop-metadata.mlir b/mlir/test/Target/LLVMIR/loop-metadata.mlir
index 2fe4a994aeb66..72f0cf06ed0fe 100644
--- a/mlir/test/Target/LLVMIR/loop-metadata.mlir
+++ b/mlir/test/Target/LLVMIR/loop-metadata.mlir
@@ -298,7 +298,9 @@ llvm.func @loopOptions(%arg1 : i32, %arg2 : i32) {
#loc2 = loc("loop-metadata.mlir":52:4)
#di_compile_unit = #llvm.di_compile_unit<id = distinct[0]<>, sourceLanguage = DW_LANG_C, file = #di_file, isOptimized = false, emissionKind = None>
-#di_subprogram = #llvm.di_subprogram<compileUnit = #di_compile_unit, scope = #di_file, name = "loop_locs", file = #di_file, subprogramFlags = Definition>
+#void_return = #llvm.di_null_type
+#void_type = #llvm.di_subroutine_type<types = #void_return>
+#di_subprogram = #llvm.di_subprogram<compileUnit = #di_compile_unit, scope = #di_file, name = "loop_locs", file = #di_file, subprogramFlags = Definition, type = #void_type>
#start_loc_fused = loc(fused<#di_subprogram>[#loc1])
#end_loc_fused= loc(fused<#di_subprogram>[#loc2])
diff --git a/mlir/test/mlir-translate/import-diagnostics.ll b/mlir/test/mlir-translate/import-diagnostics.ll
index 6767d948e3bbd..a945621c6acba 100644
--- a/mlir/test/mlir-translate/import-diagnostics.ll
+++ b/mlir/test/mlir-translate/import-diagnostics.ll
@@ -49,5 +49,7 @@ define void @dropped_instruction(i64 %arg1) {
!1 = distinct !DICompileUnit(language: DW_LANG_C, file: !2)
!2 = !DIFile(filename: "import-failure.ll", directory: "/")
!3 = !DILocalVariable(scope: !4, name: "arg1", file: !2, line: 1, arg: 1, align: 64);
-!4 = distinct !DISubprogram(name: "intrinsic", scope: !2, file: !2, spFlags: DISPFlagDefinition, unit: !1)
+!4 = distinct !DISubprogram(name: "intrinsic", scope: !2, file: !2, spFlags: DISPFlagDefinition, unit: !1, type: !999)
!5 = !DILocation(line: 1, column: 2, scope: !4)
+!999 = !DISubroutineType(types: !1000)
+!1000 = !{null}
More information about the Mlir-commits
mailing list