1577e58bcSWenlei He;; Note that this needs new pass manager for now. Passing `-sample-profile-inline-replay` to legacy pass manager is a no-op. 2577e58bcSWenlei He 3577e58bcSWenlei He;; Check baseline inline decisions 451ce567bSmodimo; RUN: opt < %s -passes=sample-profile -sample-profile-file=%S/Inputs/inline-topdown.prof -sample-profile-merge-inlinee -sample-profile-top-down-load -pass-remarks=inline --disable-output 2>&1 | FileCheck -check-prefix=DEFAULT %s 5577e58bcSWenlei He 6577e58bcSWenlei He;; Check replay inline decisions 75caad9b5Smodimo; RUN: opt < %s -passes=sample-profile -sample-profile-file=%S/Inputs/inline-topdown.prof -sample-profile-inline-replay=%S/Inputs/inline-replay.txt -sample-profile-inline-replay-scope=Module -sample-profile-merge-inlinee -sample-profile-top-down-load -pass-remarks=inline --disable-output 2>&1 | FileCheck -check-prefix=REPLAY-MODULE-ORIGINAL %s 851ce567bSmodimo 951ce567bSmodimo;; Check baseline inline decisions with all callee counts missing 1051ce567bSmodimo; RUN: opt < %s -passes=sample-profile -sample-profile-file=%S/Inputs/inline-topdown-missing.prof -sample-profile-merge-inlinee -sample-profile-top-down-load -pass-remarks=inline --disable-output 2>&1 | FileCheck -check-prefix=DEFAULT-NOINLINING -allow-empty %s 1151ce567bSmodimo 1251ce567bSmodimo;; Check replay inline decisions with all callee counts missing. The call sites should still be passed to the replay advisor and successfully get inlined as before 135caad9b5Smodimo; RUN: opt < %s -passes=sample-profile -sample-profile-file=%S/Inputs/inline-topdown-missing.prof -sample-profile-inline-replay=%S/Inputs/inline-replay.txt -sample-profile-inline-replay-scope=Module -sample-profile-merge-inlinee -sample-profile-top-down-load -pass-remarks=inline --disable-output 2>&1 | FileCheck -check-prefix=REPLAY-MODULE-MISSING %s 1451ce567bSmodimo 1551ce567bSmodimo;; Check baseline inline decisions with high threshold 1651ce567bSmodimo; RUN: opt < %s -passes=sample-profile -sample-profile-file=%S/Inputs/inline-topdown.prof -profile-summary-hot-count=500000 -sample-profile-merge-inlinee -sample-profile-top-down-load -pass-remarks=inline --disable-output 2>&1 | FileCheck -check-prefix=DEFAULT-NOINLINING -allow-empty %s 1751ce567bSmodimo 1851ce567bSmodimo;; Check replay inline decisions with high threshold. The call sites should still be passed to the replay advisor and successfully get inlined as before 195caad9b5Smodimo; RUN: opt < %s -passes=sample-profile -sample-profile-file=%S/Inputs/inline-topdown.prof -profile-summary-hot-count=500000 -sample-profile-inline-replay=%S/Inputs/inline-replay.txt -sample-profile-inline-replay-scope=Module -sample-profile-merge-inlinee -sample-profile-top-down-load -pass-remarks=inline --disable-output 2>&1 | FileCheck -check-prefix=REPLAY-MODULE-ORIGINAL -allow-empty %s 205caad9b5Smodimo 215caad9b5Smodimo;; Check Module scope Original fallback replay inline decisions 225caad9b5Smodimo; RUN: opt < %s -passes=sample-profile -sample-profile-file=%S/Inputs/inline-topdown.prof -sample-profile-inline-replay=%S/Inputs/inline-replay.txt -sample-profile-inline-replay-scope=Module -sample-profile-inline-replay-fallback=Original -sample-profile-merge-inlinee -sample-profile-top-down-load -pass-remarks=inline --disable-output 2>&1 | FileCheck -check-prefix=REPLAY-MODULE-ORIGINAL %s 235caad9b5Smodimo 245caad9b5Smodimo;; Check Module scope Original fallback replay inline with 'Line' format decisions 255caad9b5Smodimo;; The results are not different than REPLAY-MODULE-ORIGINAL, but the replay input only contains line numbers rather than line:column.discriminator 265caad9b5Smodimo; RUN: opt < %s -passes=sample-profile -sample-profile-file=%S/Inputs/inline-topdown.prof -sample-profile-inline-replay=%S/Inputs/inline-replay-line.txt -sample-profile-inline-replay-scope=Module -sample-profile-inline-replay-fallback=Original -sample-profile-inline-replay-format=Line -sample-profile-merge-inlinee -sample-profile-top-down-load -pass-remarks=inline --disable-output 2>&1 | FileCheck -check-prefix=REPLAY-MODULE-ORIGINAL %s 275caad9b5Smodimo 285caad9b5Smodimo;; Check Module scope Original fallback replay inline with 'LineColumn' format decisions 295caad9b5Smodimo; RUN: opt < %s -passes=sample-profile -sample-profile-file=%S/Inputs/inline-topdown.prof -sample-profile-inline-replay=%S/Inputs/inline-replay-linecolumn.txt -sample-profile-inline-replay-scope=Module -sample-profile-inline-replay-fallback=Original -sample-profile-inline-replay-format=LineColumn -sample-profile-merge-inlinee -sample-profile-top-down-load -pass-remarks=inline --disable-output 2>&1 | FileCheck -check-prefix=REPLAY-MODULE-ORIGINAL %s 305caad9b5Smodimo 315caad9b5Smodimo;; Check Module scope Original fallback replay inline with 'LineDiscriminator' format decisions 325caad9b5Smodimo; RUN: opt < %s -passes=sample-profile -sample-profile-file=%S/Inputs/inline-topdown.prof -sample-profile-inline-replay=%S/Inputs/inline-replay-linediscriminator.txt -sample-profile-inline-replay-scope=Module -sample-profile-inline-replay-fallback=Original -sample-profile-inline-replay-format=LineDiscriminator -sample-profile-merge-inlinee -sample-profile-top-down-load -pass-remarks=inline --disable-output 2>&1 | FileCheck -check-prefix=REPLAY-MODULE-ORIGINAL %s 335caad9b5Smodimo 345caad9b5Smodimo;; Check Module scope AlwaysInline fallback replay inline decisions 355caad9b5Smodimo; RUN: opt < %s -passes=sample-profile -sample-profile-file=%S/Inputs/inline-topdown.prof -sample-profile-inline-replay=%S/Inputs/inline-replay.txt -sample-profile-inline-replay-scope=Module -sample-profile-inline-replay-fallback=AlwaysInline -sample-profile-merge-inlinee -sample-profile-top-down-load -pass-remarks=inline --disable-output 2>&1 | FileCheck -check-prefix=REPLAY-MODULE-ALWAYS %s 365caad9b5Smodimo 375caad9b5Smodimo;; Check Module scope NeverInline fallback replay inline decisions 385caad9b5Smodimo; RUN: opt < %s -passes=sample-profile -sample-profile-file=%S/Inputs/inline-topdown.prof -sample-profile-inline-replay=%S/Inputs/inline-replay.txt -sample-profile-inline-replay-scope=Module -sample-profile-inline-replay-fallback=NeverInline -sample-profile-merge-inlinee -sample-profile-top-down-load -pass-remarks=inline --disable-output 2>&1 | FileCheck -check-prefix=REPLAY-MODULE-NEVER %s 39313c657fSmodimo 40313c657fSmodimo;; Check baseline inline decisions with "inline-topdown-inline-all.prof" which inlines all sites 4151ce567bSmodimo; RUN: opt < %s -passes=sample-profile -sample-profile-file=%S/Inputs/inline-topdown-inline-all.prof -sample-profile-merge-inlinee -sample-profile-top-down-load -pass-remarks=inline --disable-output 2>&1 | FileCheck -check-prefix=DEFAULT-ALL %s 42313c657fSmodimo 43313c657fSmodimo;; Check function scope replay inline decisions with "inline-topdown-inline-all.prof" and "inline-topdown-function-scope.txt" which only contains: '_Z3sumii' inlined into 'main' 44313c657fSmodimo;; 1. _Z3sumii is inlined into main, but all other inline candidates in main (e.g. _Z3subii) are not inlined 45313c657fSmodimo;; 2. Inline decisions made in other functions match default sample inlining, in this case _Z3subii is inlined into _Z3sumii 465caad9b5Smodimo; RUN: opt < %s -passes=sample-profile -sample-profile-file=%S/Inputs/inline-topdown-inline-all.prof -sample-profile-inline-replay=%S/Inputs/inline-replay-function.txt -sample-profile-inline-replay-scope=Function -sample-profile-inline-replay-fallback=NeverInline -sample-profile-merge-inlinee -sample-profile-top-down-load -pass-remarks=inline --disable-output 2>&1 | FileCheck -check-prefix=REPLAY-ALL-FUNCTION-NEVER %s 475caad9b5Smodimo 485caad9b5Smodimo;; Function scope Original fallback 495caad9b5Smodimo; RUN: opt < %s -passes=sample-profile -sample-profile-file=%S/Inputs/inline-topdown-inline-all.prof -sample-profile-inline-replay=%S/Inputs/inline-replay-function.txt -sample-profile-inline-replay-scope=Function -sample-profile-inline-replay-fallback=Original -sample-profile-merge-inlinee -sample-profile-top-down-load -pass-remarks=inline --disable-output 2>&1 | FileCheck -check-prefix=REPLAY-ALL-FUNCTION-ORIGINAL %s 505caad9b5Smodimo 515caad9b5Smodimo;; Function scope AlwaysInline fallback 525caad9b5Smodimo; RUN: opt < %s -passes=sample-profile -sample-profile-file=%S/Inputs/inline-topdown-inline-all.prof -sample-profile-inline-replay=%S/Inputs/inline-replay-function.txt -sample-profile-inline-replay-scope=Function -sample-profile-inline-replay-fallback=AlwaysInline -sample-profile-merge-inlinee -sample-profile-top-down-load -pass-remarks=inline --disable-output 2>&1 | FileCheck -check-prefix=REPLAY-ALL-FUNCTION-ALWAYS %s 53313c657fSmodimo 54313c657fSmodimo;; Check behavior on non-existent replay file 555caad9b5Smodimo; RUN: not opt < %s -passes=sample-profile -sample-profile-file=%S/Inputs/inline-topdown.prof -sample-profile-inline-replay=%S/non-existent-dummy.txt -sample-profile-merge-inlinee -sample-profile-top-down-load -pass-remarks=inline --disable-output 2>&1 | FileCheck -check-prefix=REPLAY-ERROR %s 56313c657fSmodimo 57313c657fSmodimo;; Check scope inlining errors out on non <Module|Function> inputs 5851ce567bSmodimo; RUN: not opt < %s -passes=sample-profile -sample-profile-file=%S/Inputs/inline-topdown.prof -sample-profile-inline-replay=%S/Inputs/inline-replay.txt -sample-profile-inline-replay-scope=function -sample-profile-merge-inlinee -sample-profile-top-down-load -pass-remarks=inline --disable-output 2>&1 | FileCheck -check-prefix=REPLAY-ERROR-SCOPE %s 59313c657fSmodimo 605caad9b5Smodimo;; Check fallback inlining errors out on non <Original|AlwaysInline|NeverInline> inputs 615caad9b5Smodimo; RUN: not opt < %s -passes=sample-profile -sample-profile-file=%S/Inputs/inline-topdown.prof -sample-profile-inline-replay=%S/Inputs/inline-replay.txt -sample-profile-inline-replay-fallback=original -sample-profile-merge-inlinee -sample-profile-top-down-load -pass-remarks=inline --disable-output 2>&1 | FileCheck -check-prefix=REPLAY-ERROR-FALLBACK %s 625caad9b5Smodimo 635caad9b5Smodimo;; Check format inlining errors out on non <Line|LineColumn|LineDiscriminator|LineColumnDiscriminator> inputs 645caad9b5Smodimo; RUN: not opt < %s -passes=sample-profile -sample-profile-file=%S/Inputs/inline-topdown.prof -sample-profile-inline-replay=%S/Inputs/inline-replay.txt -sample-profile-inline-replay-format=line -sample-profile-merge-inlinee -sample-profile-top-down-load -pass-remarks=inline --disable-output 2>&1 | FileCheck -check-prefix=REPLAY-ERROR-FORMAT %s 655caad9b5Smodimo 665caad9b5Smodimo 67313c657fSmodimo; DEFAULT: '_Z3sumii' inlined into 'main' to match profiling context with (cost={{[-0-9]+}} 68313c657fSmodimo; DEFAULT: '_Z3subii' inlined into '_Z3sumii' to match profiling context with (cost={{[-0-9]+}} 69313c657fSmodimo; DEFAULT-NOT: '_Z3subii' inlined into 'main' 70313c657fSmodimo 715caad9b5Smodimo; REPLAY-MODULE-MISSING: '_Z3sumii' inlined into 'main' to match profiling context with (cost=always) 725caad9b5Smodimo; REPLAY-MODULE-MISSING-NOT: inlined into 735caad9b5Smodimo 745caad9b5Smodimo; REPLAY-MODULE-ORIGINAL: '_Z3sumii' inlined into 'main' to match profiling context with (cost=always) 755caad9b5Smodimo; REPLAY-MODULE-ORIGINAL: '_Z3subii' inlined into 'main' to match profiling context with (cost={{[-0-9]+}} 765caad9b5Smodimo 775caad9b5Smodimo; REPLAY-MODULE-ALWAYS: '_Z3sumii' inlined into 'main' to match profiling context with (cost=always) 785caad9b5Smodimo; REPLAY-MODULE-ALWAYS: '_Z3subii' inlined into 'main' to match profiling context with (cost=always) 795caad9b5Smodimo 805caad9b5Smodimo; REPLAY-MODULE-NEVER: '_Z3sumii' inlined into 'main' to match profiling context with (cost=always) 815caad9b5Smodimo; REPLAY-MODULE-NEVER-NOT: '_Z3subii' inlined into 'main' 82313c657fSmodimo 8351ce567bSmodimo; DEFAULT-NOINLINING-NOT: inlined into 8451ce567bSmodimo 85313c657fSmodimo; DEFAULT-ALL: '_Z3sumii' inlined into 'main' to match profiling context with (cost={{[-0-9]+}} 86313c657fSmodimo; DEFAULT-ALL: '_Z3subii' inlined into 'main' to match profiling context with (cost={{[-0-9]+}} 87313c657fSmodimo; DEFAULT-ALL: '_Z3subii' inlined into '_Z3sumii' to match profiling context with (cost={{[-0-9]+}} 88313c657fSmodimo 895caad9b5Smodimo; REPLAY-ALL-FUNCTION-NEVER: _Z3sumii' inlined into 'main' to match profiling context with (cost=always) 905caad9b5Smodimo; REPLAY-ALL-FUNCTION-NEVER-NOT: '_Z3subii' inlined into 'main' to match profiling context with (cost={{[-0-9]+}} 915caad9b5Smodimo; REPLAY-ALL-FUNCTION-NEVER: '_Z3subii' inlined into '_Z3sumii' to match profiling context with (cost={{[-0-9]+}} 925caad9b5Smodimo 935caad9b5Smodimo; REPLAY-ALL-FUNCTION-ORIGINAL: _Z3sumii' inlined into 'main' to match profiling context with (cost=always) 945caad9b5Smodimo; REPLAY-ALL-FUNCTION-ORIGINAL: '_Z3subii' inlined into 'main' to match profiling context with (cost={{[-0-9]+}} 955caad9b5Smodimo; REPLAY-ALL-FUNCTION-ORIGINAL: '_Z3subii' inlined into '_Z3sumii' to match profiling context with (cost={{[-0-9]+}} 965caad9b5Smodimo 975caad9b5Smodimo; REPLAY-ALL-FUNCTION-ALWAYS: _Z3sumii' inlined into 'main' to match profiling context with (cost=always) 985caad9b5Smodimo; REPLAY-ALL-FUNCTION-ALWAYS: '_Z3subii' inlined into 'main' to match profiling context with (cost=always) 995caad9b5Smodimo; REPLAY-ALL-FUNCTION-ALWAYS: '_Z3subii' inlined into '_Z3sumii' to match profiling context with (cost={{[-0-9]+}} 100313c657fSmodimo 1012786dc10Smodimo; REPLAY-ERROR: error: Could not open remarks file: 10241f81458Smodimo; REPLAY-ERROR-SCOPE: for the --sample-profile-inline-replay-scope option: Cannot find option named 'function'! 1035caad9b5Smodimo; REPLAY-ERROR-FALLBACK: for the --sample-profile-inline-replay-fallback option: Cannot find option named 'original'! 1045caad9b5Smodimo; REPLAY-ERROR-FORMAT: for the --sample-profile-inline-replay-format option: Cannot find option named 'line'! 105577e58bcSWenlei He 106577e58bcSWenlei He@.str = private unnamed_addr constant [11 x i8] c"sum is %d\0A\00", align 1 107577e58bcSWenlei He 108577e58bcSWenlei Hedefine i32 @_Z3sumii(i32 %x, i32 %y) #0 !dbg !6 { 109577e58bcSWenlei Heentry: 110577e58bcSWenlei He %x.addr = alloca i32, align 4 111577e58bcSWenlei He %y.addr = alloca i32, align 4 112*0271ae65SFangrui Song store i32 %x, ptr %x.addr, align 4 113*0271ae65SFangrui Song store i32 %y, ptr %y.addr, align 4 114*0271ae65SFangrui Song %tmp = load i32, ptr %x.addr, align 4, !dbg !8 115*0271ae65SFangrui Song %tmp1 = load i32, ptr %y.addr, align 4, !dbg !8 116577e58bcSWenlei He %add = add nsw i32 %tmp, %tmp1, !dbg !8 117*0271ae65SFangrui Song %tmp2 = load i32, ptr %x.addr, align 4, !dbg !8 118*0271ae65SFangrui Song %tmp3 = load i32, ptr %y.addr, align 4, !dbg !8 119577e58bcSWenlei He %call = call i32 @_Z3subii(i32 %tmp2, i32 %tmp3), !dbg !8 120577e58bcSWenlei He ret i32 %add, !dbg !8 121577e58bcSWenlei He} 122577e58bcSWenlei He 123577e58bcSWenlei Hedefine i32 @_Z3subii(i32 %x, i32 %y) #0 !dbg !9 { 124577e58bcSWenlei Heentry: 125577e58bcSWenlei He %x.addr = alloca i32, align 4 126577e58bcSWenlei He %y.addr = alloca i32, align 4 127*0271ae65SFangrui Song store i32 %x, ptr %x.addr, align 4 128*0271ae65SFangrui Song store i32 %y, ptr %y.addr, align 4 129*0271ae65SFangrui Song %tmp = load i32, ptr %x.addr, align 4, !dbg !10 130*0271ae65SFangrui Song %tmp1 = load i32, ptr %y.addr, align 4, !dbg !10 131577e58bcSWenlei He %add = sub nsw i32 %tmp, %tmp1, !dbg !10 132577e58bcSWenlei He ret i32 %add, !dbg !11 133577e58bcSWenlei He} 134577e58bcSWenlei He 135577e58bcSWenlei Hedefine i32 @main() #0 !dbg !12 { 136577e58bcSWenlei Heentry: 137577e58bcSWenlei He %retval = alloca i32, align 4 138577e58bcSWenlei He %s = alloca i32, align 4 139577e58bcSWenlei He %i = alloca i32, align 4 140*0271ae65SFangrui Song store i32 0, ptr %retval 141*0271ae65SFangrui Song store i32 0, ptr %i, align 4, !dbg !13 142577e58bcSWenlei He br label %while.cond, !dbg !14 143577e58bcSWenlei He 144577e58bcSWenlei Hewhile.cond: ; preds = %if.end, %entry 145*0271ae65SFangrui Song %tmp = load i32, ptr %i, align 4, !dbg !15 146577e58bcSWenlei He %inc = add nsw i32 %tmp, 1, !dbg !15 147*0271ae65SFangrui Song store i32 %inc, ptr %i, align 4, !dbg !15 148577e58bcSWenlei He %cmp = icmp slt i32 %tmp, 400000000, !dbg !15 149577e58bcSWenlei He br i1 %cmp, label %while.body, label %while.end, !dbg !15 150577e58bcSWenlei He 151577e58bcSWenlei Hewhile.body: ; preds = %while.cond 152*0271ae65SFangrui Song %tmp1 = load i32, ptr %i, align 4, !dbg !17 153577e58bcSWenlei He %cmp1 = icmp ne i32 %tmp1, 100, !dbg !17 154577e58bcSWenlei He br i1 %cmp1, label %if.then, label %if.else, !dbg !17 155577e58bcSWenlei He 156577e58bcSWenlei Heif.then: ; preds = %while.body 157*0271ae65SFangrui Song %tmp2 = load i32, ptr %i, align 4, !dbg !19 158*0271ae65SFangrui Song %tmp3 = load i32, ptr %s, align 4, !dbg !19 159577e58bcSWenlei He %call = call i32 @_Z3sumii(i32 %tmp2, i32 %tmp3), !dbg !19 160*0271ae65SFangrui Song store i32 %call, ptr %s, align 4, !dbg !19 161577e58bcSWenlei He br label %if.end, !dbg !19 162577e58bcSWenlei He 163577e58bcSWenlei Heif.else: ; preds = %while.body 164*0271ae65SFangrui Song store i32 30, ptr %s, align 4, !dbg !21 165577e58bcSWenlei He br label %if.end 166577e58bcSWenlei He 167577e58bcSWenlei Heif.end: ; preds = %if.else, %if.then 168577e58bcSWenlei He br label %while.cond, !dbg !23 169577e58bcSWenlei He 170577e58bcSWenlei Hewhile.end: ; preds = %while.cond 171*0271ae65SFangrui Song %tmp4 = load i32, ptr %s, align 4, !dbg !25 172*0271ae65SFangrui Song %call2 = call i32 (ptr, ...) @printf(ptr @.str, i32 %tmp4), !dbg !25 173577e58bcSWenlei He ret i32 0, !dbg !26 174577e58bcSWenlei He} 175577e58bcSWenlei He 176*0271ae65SFangrui Songdeclare i32 @printf(ptr, ...) 177577e58bcSWenlei He 178577e58bcSWenlei Heattributes #0 = { "use-sample-profile" } 179577e58bcSWenlei He 180577e58bcSWenlei He!llvm.dbg.cu = !{!0} 181577e58bcSWenlei He!llvm.module.flags = !{!3, !4} 182577e58bcSWenlei He!llvm.ident = !{!5} 183577e58bcSWenlei He 184577e58bcSWenlei He!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) 185577e58bcSWenlei He!1 = !DIFile(filename: "calls.cc", directory: ".") 186577e58bcSWenlei He!2 = !{} 187577e58bcSWenlei He!3 = !{i32 2, !"Dwarf Version", i32 4} 188577e58bcSWenlei He!4 = !{i32 1, !"Debug Info Version", i32 3} 189577e58bcSWenlei He!5 = !{!"clang version 3.5 "} 190577e58bcSWenlei He!6 = distinct !DISubprogram(name: "sum", linkageName: "_Z3sumii", scope: !1, file: !1, line: 3, type: !7, scopeLine: 3, virtualIndex: 6, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !2) 191577e58bcSWenlei He!7 = !DISubroutineType(types: !2) 192577e58bcSWenlei He!8 = !DILocation(line: 4, scope: !6) 193577e58bcSWenlei He!9 = distinct !DISubprogram(name: "sub", linkageName: "_Z3subii", scope: !1, file: !1, line: 20, type: !7, scopeLine: 20, virtualIndex: 6, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !2) 194577e58bcSWenlei He!10 = !DILocation(line: 20, scope: !9) 195577e58bcSWenlei He!11 = !DILocation(line: 21, scope: !9) 196577e58bcSWenlei He!12 = distinct !DISubprogram(name: "main", scope: !1, file: !1, line: 7, type: !7, scopeLine: 7, virtualIndex: 6, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !2) 197577e58bcSWenlei He!13 = !DILocation(line: 8, scope: !12) 198577e58bcSWenlei He!14 = !DILocation(line: 9, scope: !12) 199577e58bcSWenlei He!15 = !DILocation(line: 9, scope: !16) 200577e58bcSWenlei He!16 = !DILexicalBlockFile(scope: !12, file: !1, discriminator: 2) 201577e58bcSWenlei He!17 = !DILocation(line: 10, scope: !18) 202577e58bcSWenlei He!18 = distinct !DILexicalBlock(scope: !12, file: !1, line: 10) 203577e58bcSWenlei He!19 = !DILocation(line: 10, scope: !20) 204577e58bcSWenlei He!20 = !DILexicalBlockFile(scope: !18, file: !1, discriminator: 2) 205577e58bcSWenlei He!21 = !DILocation(line: 10, scope: !22) 206577e58bcSWenlei He!22 = !DILexicalBlockFile(scope: !18, file: !1, discriminator: 4) 207577e58bcSWenlei He!23 = !DILocation(line: 10, scope: !24) 208577e58bcSWenlei He!24 = !DILexicalBlockFile(scope: !18, file: !1, discriminator: 6) 209577e58bcSWenlei He!25 = !DILocation(line: 11, scope: !12) 210577e58bcSWenlei He!26 = !DILocation(line: 12, scope: !12) 211