1d23c1d6aSHongtao Yu;; Test we merge non-inlined profile only once with '-sample-profile-merge-inlinee' 2d23c1d6aSHongtao Yu; RUN: opt < %s -passes='function(callsite-splitting),sample-profile' -sample-profile-file=%S/Inputs/inline-mergeprof.prof -sample-profile-merge-inlinee=true -S | FileCheck %s 3d23c1d6aSHongtao Yu 40271ae65SFangrui Song%struct.bitmap = type { i32, ptr } 5d23c1d6aSHongtao Yu 6d23c1d6aSHongtao Yu; CHECK-LABEL: @main 70271ae65SFangrui Songdefine void @main(i1 %c, ptr %a_elt, ptr %b_elt) #0 !dbg !6 { 8d23c1d6aSHongtao Yuentry: 9d23c1d6aSHongtao Yu br label %Top 10d23c1d6aSHongtao Yu 11d23c1d6aSHongtao YuTop: 120271ae65SFangrui Song %tobool1 = icmp eq ptr %a_elt, null 13d23c1d6aSHongtao Yu br i1 %tobool1, label %CallSiteBB, label %NextCond 14d23c1d6aSHongtao Yu 15d23c1d6aSHongtao YuNextCond: 160271ae65SFangrui Song %cmp = icmp ne ptr %b_elt, null 17d23c1d6aSHongtao Yu br i1 %cmp, label %CallSiteBB, label %End 18d23c1d6aSHongtao Yu 19d23c1d6aSHongtao YuCallSiteBB: 20d23c1d6aSHongtao Yu %p = phi i1 [0, %Top], [%c, %NextCond] 21d23c1d6aSHongtao Yu;; The call site is replicated by callsite-splitting pass and they end up share the same sample profile 220271ae65SFangrui Song; CHECK: call void @_Z3sumii(ptr null, ptr null, ptr %b_elt, i1 false) 230271ae65SFangrui Song; CHECK: call void @_Z3sumii(ptr nonnull %a_elt, ptr nonnull %a_elt, ptr nonnull %b_elt, i1 %c) 240271ae65SFangrui Song call void @_Z3sumii(ptr %a_elt, ptr %a_elt, ptr %b_elt, i1 %p), !dbg !8 25d23c1d6aSHongtao Yu br label %End 26d23c1d6aSHongtao Yu 27d23c1d6aSHongtao YuEnd: 28d23c1d6aSHongtao Yu ret void 29d23c1d6aSHongtao Yu} 30d23c1d6aSHongtao Yu 310271ae65SFangrui Songdefine void @_Z3sumii(ptr %dst_elt, ptr %a_elt, ptr %b_elt, i1 %c) #0 !dbg !12 { 32d23c1d6aSHongtao Yuentry: 330271ae65SFangrui Song %tobool = icmp ne ptr %a_elt, null 340271ae65SFangrui Song %tobool1 = icmp ne ptr %b_elt, null 35d23c1d6aSHongtao Yu %or.cond = and i1 %tobool, %tobool1, !dbg !13 36d23c1d6aSHongtao Yu br i1 %or.cond, label %Cond, label %Big 37d23c1d6aSHongtao Yu 38d23c1d6aSHongtao YuCond: 390271ae65SFangrui Song %cmp = icmp eq ptr %dst_elt, %a_elt, !dbg !14 40d23c1d6aSHongtao Yu br i1 %cmp, label %Small, label %Big, !dbg !15 41d23c1d6aSHongtao Yu 42d23c1d6aSHongtao YuSmall: 43d23c1d6aSHongtao Yu br label %End 44d23c1d6aSHongtao Yu 45d23c1d6aSHongtao YuBig: 46d23c1d6aSHongtao Yu br label %End 47d23c1d6aSHongtao Yu 48d23c1d6aSHongtao YuEnd: 49d23c1d6aSHongtao Yu ret void 50d23c1d6aSHongtao Yu} 51d23c1d6aSHongtao Yu 52d23c1d6aSHongtao Yuattributes #0 = { "use-sample-profile" } 53d23c1d6aSHongtao Yu 54d23c1d6aSHongtao Yu!llvm.dbg.cu = !{!0} 55d23c1d6aSHongtao Yu!llvm.module.flags = !{!3, !4} 56d23c1d6aSHongtao Yu!llvm.ident = !{!5} 57d23c1d6aSHongtao Yu 58d23c1d6aSHongtao Yu!0 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, file: !1, producer: "clang version 3.5 ", isOptimized: false, runtimeVersion: 0, emissionKind: NoDebug, enums: !2, retainedTypes: !2, globals: !2, imports: !2) 59d23c1d6aSHongtao Yu!1 = !DIFile(filename: "calls.cc", directory: ".") 60d23c1d6aSHongtao Yu!2 = !{} 61d23c1d6aSHongtao Yu!3 = !{i32 2, !"Dwarf Version", i32 4} 62d23c1d6aSHongtao Yu!4 = !{i32 1, !"Debug Info Version", i32 3} 63d23c1d6aSHongtao Yu!5 = !{!"clang version 3.5 "} 64d23c1d6aSHongtao Yu!6 = distinct !DISubprogram(name: "main", scope: !1, file: !1, line: 7, type: !7, scopeLine: 7, virtualIndex: 6, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !2) 65d23c1d6aSHongtao Yu!7 = !DISubroutineType(types: !2) 66d23c1d6aSHongtao Yu!8 = !DILocation(line: 10, scope: !9) 67d23c1d6aSHongtao Yu!9 = !DILexicalBlockFile(scope: !10, file: !1, discriminator: 2) 68d23c1d6aSHongtao Yu!10 = distinct !DILexicalBlock(scope: !6, file: !1, line: 10) 69d23c1d6aSHongtao Yu!11 = !DILocation(line: 12, scope: !6) 70d23c1d6aSHongtao Yu!12 = distinct !DISubprogram(name: "sum", scope: !1, file: !1, line: 3, type: !7, scopeLine: 3, virtualIndex: 6, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !2) 71d23c1d6aSHongtao Yu!13 = !DILocation(line: 4, scope: !12) 72d23c1d6aSHongtao Yu!14 = !DILocation(line: 5, scope: !12) 73d23c1d6aSHongtao Yu!15 = !DILocation(line: 6, scope: !12) 74d23c1d6aSHongtao Yu 75d23c1d6aSHongtao Yu 76*9aae408dSYuanfang Chen;; Check the profile of function sum is only merged once though the original callsite is replicted. 77d23c1d6aSHongtao Yu; CHECK: name: "sum" 78d23c1d6aSHongtao Yu; CHECK-NEXT: {!"function_entry_count", i64 46} 795c31b8b9SArthur Eubanks; CHECK: !{!"branch_weights", i32 11, i32 37} 805c31b8b9SArthur Eubanks; CHECK: !{!"branch_weights", i32 11, i32 1} 81