xref: /llvm-project/llvm/test/Transforms/SampleProfile/inline-replay.ll (revision 0271ae65a66367d802fa6866599d11e35f68450f)
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