187 lines · plain
1; RUN: llc -O0 %s -o - -filetype=obj \2; RUN: | llvm-dwarfdump -statistics - | FileCheck %s3 4; This test serves as a baseline / sanity-check for stats-inlining-multi-cu.ll5; The results for both tests should be identical.6 7; CHECK: "#functions": 4,8; CHECK: "#out-of-line functions": 3,9; CHECK: "#inlined functions": 2,10; CHECK: "#unique source variables": 4,11; CHECK-NEXT: "#source variables": 6,12; CHECK-NEXT: "#source variables with location": 6,13 14;header.h:15;extern "C" int getchar();16;template<typename T> T __attribute__((always_inline)) inlined() {17; if (getchar()=='a') {18; int i = getchar();19; return i;20; } else {21; int i = 'a';22; return i;23; }24;}25;ab.cpp26;#include <header.h>27;int b();28;int a() {29; int a = inlined<int>();30; return a+1;31;}32; 33;int b() {34; int b = inlined<int>();35; return b+1;36;}37;int main() {38; return a() + b();39;}40 41 42; ModuleID = 'a.cpp'43source_filename = "a.cpp"44target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128"45target triple = "x86_64-apple-macosx10.14.0"46 47; Function Attrs: noinline optnone ssp uwtable48define i32 @_Z1av() #0 !dbg !8 {49entry:50 %retval.i = alloca i32, align 451 %i.i = alloca i32, align 452 call void @llvm.dbg.declare(metadata ptr %i.i, metadata !12, metadata !DIExpression()), !dbg !1953 %i2.i = alloca i32, align 454 call void @llvm.dbg.declare(metadata ptr %i2.i, metadata !21, metadata !DIExpression()), !dbg !2355 %a = alloca i32, align 456 call void @llvm.dbg.declare(metadata ptr %a, metadata !24, metadata !DIExpression()), !dbg !2557 %call.i = call i32 @getchar(), !dbg !2658 %cmp.i = icmp eq i32 %call.i, 97, !dbg !2659 br i1 %cmp.i, label %if.then.i, label %if.else.i, !dbg !2760 61if.then.i: ; preds = %entry62 %call1.i = call i32 @getchar(), !dbg !1963 store i32 %call1.i, ptr %i.i, align 4, !dbg !1964 %0 = load i32, ptr %i.i, align 4, !dbg !2865 store i32 %0, ptr %retval.i, align 4, !dbg !2866 br label %_Z7inlinedIiET_v.exit, !dbg !2867 68if.else.i: ; preds = %entry69 store i32 97, ptr %i2.i, align 4, !dbg !2370 %1 = load i32, ptr %i2.i, align 4, !dbg !2971 store i32 %1, ptr %retval.i, align 4, !dbg !2972 br label %_Z7inlinedIiET_v.exit, !dbg !2973 74_Z7inlinedIiET_v.exit: ; preds = %if.then.i, %if.else.i75 %2 = load i32, ptr %retval.i, align 4, !dbg !3076 store i32 %2, ptr %a, align 4, !dbg !2577 %3 = load i32, ptr %a, align 4, !dbg !3178 %add = add nsw i32 %3, 1, !dbg !3179 ret i32 %add, !dbg !3180}81 82; Function Attrs: nounwind readnone speculatable83declare void @llvm.dbg.declare(metadata, metadata, metadata) #184 85; Function Attrs: noinline optnone ssp uwtable86define i32 @_Z1bv() #0 !dbg !32 {87entry:88 %retval.i = alloca i32, align 489 %i.i = alloca i32, align 490 call void @llvm.dbg.declare(metadata ptr %i.i, metadata !12, metadata !DIExpression()), !dbg !3391 %i2.i = alloca i32, align 492 call void @llvm.dbg.declare(metadata ptr %i2.i, metadata !21, metadata !DIExpression()), !dbg !3593 %b = alloca i32, align 494 call void @llvm.dbg.declare(metadata ptr %b, metadata !36, metadata !DIExpression()), !dbg !3795 %call.i = call i32 @getchar(), !dbg !3896 %cmp.i = icmp eq i32 %call.i, 97, !dbg !3897 br i1 %cmp.i, label %if.then.i, label %if.else.i, !dbg !3998 99if.then.i: ; preds = %entry100 %call1.i = call i32 @getchar(), !dbg !33101 store i32 %call1.i, ptr %i.i, align 4, !dbg !33102 %0 = load i32, ptr %i.i, align 4, !dbg !40103 store i32 %0, ptr %retval.i, align 4, !dbg !40104 br label %_Z7inlinedIiET_v.exit, !dbg !40105 106if.else.i: ; preds = %entry107 store i32 97, ptr %i2.i, align 4, !dbg !35108 %1 = load i32, ptr %i2.i, align 4, !dbg !41109 store i32 %1, ptr %retval.i, align 4, !dbg !41110 br label %_Z7inlinedIiET_v.exit, !dbg !41111 112_Z7inlinedIiET_v.exit: ; preds = %if.then.i, %if.else.i113 %2 = load i32, ptr %retval.i, align 4, !dbg !42114 store i32 %2, ptr %b, align 4, !dbg !37115 %3 = load i32, ptr %b, align 4, !dbg !43116 %add = add nsw i32 %3, 1, !dbg !43117 ret i32 %add, !dbg !43118}119 120; Function Attrs: noinline norecurse optnone ssp uwtable121define i32 @main() #2 !dbg !44 {122entry:123 %retval = alloca i32, align 4124 store i32 0, ptr %retval, align 4125 %call = call i32 @_Z1av(), !dbg !45126 %call1 = call i32 @_Z1bv(), !dbg !45127 %add = add nsw i32 %call, %call1, !dbg !45128 ret i32 %add, !dbg !45129}130 131declare i32 @getchar()132 133attributes #0 = { noinline optnone ssp uwtable }134attributes #1 = { nounwind readnone speculatable }135attributes #2 = { noinline norecurse optnone ssp uwtable }136 137!llvm.dbg.cu = !{!0}138!llvm.module.flags = !{!3, !4, !5, !6}139!llvm.ident = !{!7}140 141!0 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, file: !1, producer: "clang version 8.0.0 (trunk 340541) (llvm/trunk 340540)", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, enums: !2, nameTableKind: None)142!1 = !DIFile(filename: "a.cpp", directory: "/tmp")143!2 = !{}144!3 = !{i32 2, !"Dwarf Version", i32 4}145!4 = !{i32 2, !"Debug Info Version", i32 3}146!5 = !{i32 1, !"wchar_size", i32 4}147!6 = !{i32 7, !"PIC Level", i32 2}148!7 = !{!"clang version 8.0.0 (trunk 340541) (llvm/trunk 340540)"}149!8 = distinct !DISubprogram(name: "a", linkageName: "_Z1av", scope: !1, file: !1, line: 3, type: !9, isLocal: false, isDefinition: true, scopeLine: 3, flags: DIFlagPrototyped, isOptimized: false, unit: !0, retainedNodes: !2)150!9 = !DISubroutineType(types: !10)151!10 = !{!11}152!11 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed)153!12 = !DILocalVariable(name: "i", scope: !13, file: !14, line: 4, type: !11)154!13 = distinct !DILexicalBlock(scope: !15, file: !14, line: 3)155!14 = !DIFile(filename: "./header.h", directory: "/tmp")156!15 = distinct !DILexicalBlock(scope: !16, file: !14, line: 3)157!16 = distinct !DISubprogram(name: "inlined<int>", linkageName: "_Z7inlinedIiET_v", scope: !14, file: !14, line: 2, type: !9, isLocal: false, isDefinition: true, scopeLine: 2, flags: DIFlagPrototyped, isOptimized: false, unit: !0, templateParams: !17, retainedNodes: !2)158!17 = !{!18}159!18 = !DITemplateTypeParameter(name: "T", type: !11)160!19 = !DILocation(line: 4, scope: !13, inlinedAt: !20)161!20 = distinct !DILocation(line: 4, scope: !8)162!21 = !DILocalVariable(name: "i", scope: !22, file: !14, line: 7, type: !11)163!22 = distinct !DILexicalBlock(scope: !15, file: !14, line: 6)164!23 = !DILocation(line: 7, scope: !22, inlinedAt: !20)165!24 = !DILocalVariable(name: "a", scope: !8, file: !1, line: 4, type: !11)166!25 = !DILocation(line: 4, scope: !8)167!26 = !DILocation(line: 3, scope: !15, inlinedAt: !20)168!27 = !DILocation(line: 3, scope: !16, inlinedAt: !20)169!28 = !DILocation(line: 5, scope: !13, inlinedAt: !20)170!29 = !DILocation(line: 8, scope: !22, inlinedAt: !20)171!30 = !DILocation(line: 10, scope: !16, inlinedAt: !20)172!31 = !DILocation(line: 5, scope: !8)173!32 = distinct !DISubprogram(name: "b", linkageName: "_Z1bv", scope: !1, file: !1, line: 8, type: !9, isLocal: false, isDefinition: true, scopeLine: 8, flags: DIFlagPrototyped, isOptimized: false, unit: !0, retainedNodes: !2)174!33 = !DILocation(line: 4, scope: !13, inlinedAt: !34)175!34 = distinct !DILocation(line: 9, scope: !32)176!35 = !DILocation(line: 7, scope: !22, inlinedAt: !34)177!36 = !DILocalVariable(name: "b", scope: !32, file: !1, line: 9, type: !11)178!37 = !DILocation(line: 9, scope: !32)179!38 = !DILocation(line: 3, scope: !15, inlinedAt: !34)180!39 = !DILocation(line: 3, scope: !16, inlinedAt: !34)181!40 = !DILocation(line: 5, scope: !13, inlinedAt: !34)182!41 = !DILocation(line: 8, scope: !22, inlinedAt: !34)183!42 = !DILocation(line: 10, scope: !16, inlinedAt: !34)184!43 = !DILocation(line: 10, scope: !32)185!44 = distinct !DISubprogram(name: "main", scope: !1, file: !1, line: 12, type: !9, isLocal: false, isDefinition: true, scopeLine: 12, flags: DIFlagPrototyped, isOptimized: false, unit: !0, retainedNodes: !2)186!45 = !DILocation(line: 13, scope: !44)187