[RISCV] Add shrinkwrap test cases showing gaps in current impl
[llvm-project.git] / llvm / test / CodeGen / X86 / fsafdo_probe2.ll
blob04e4145abdc0c4d0fd6f85b5bd65b09fed872ffb
1 ; REQUIRES: asserts
2 ; RUN: llvm-profdata merge --sample -profile-isfs --extbinary -o %t.afdo %S/Inputs/fsloader-probe.afdo
3 ; RUN: llc -enable-fs-discriminator -fs-profile-file=%t.afdo -show-fs-branchprob -disable-ra-fsprofile-loader=false -disable-layout-fsprofile-loader=false < %s 2>&1 | FileCheck %s --check-prefix=LOADER
5 ;;
6 ;; C source code for the test.
7 ;; Compiled with clang -O3 -g -fdebug-info-for-profiling -fpseudo-probe-for-profiling -mllvm --enable-fs-discriminator
8 ;; // A test case for loop unroll.
9 ;;
10 ;; __attribute__((noinline)) int bar(int i){
11 ;;   volatile int j;
12 ;;   j = i;
13 ;;   return j;
14 ;; }
16 ;; unsigned sum;
17 ;; __attribute__((noinline)) void work(int i){
18 ;;   if (sum % 7)
19 ;;     sum += i;
20 ;;   else
21 ;;     sum -= i;
22 ;; }
24 ;; __attribute__((noinline)) void foo(){
25 ;;   int i, j;
26 ;;   for (j = 0; j < 48; j++)
27 ;;     for (i = 0; i < 4; i++) {
28 ;;       int ii = bar(i+j*48);
29 ;;       if (ii % 2)
30 ;;         work(ii*2);
31 ;;       if (ii % 4)
32 ;;         work(ii*3);
33 ;;   }
34 ;; }
36 ;; int main() {
37 ;;   int i;
38 ;;   for (i = 0; i < 10000000; i++) {
39 ;;     foo();
40 ;;   }
41 ;; }
45 ;; Check that new branch probs are generated.
47 ; LOADER: Set branch fs prob: MBB (3 -> 5): unroll.c:22:12-->unroll.c:20:12 W=44114  0x30000000 / 0x80000000 = 37.50% --> 0x80000000 / 0x80000000 = 100.00%
48 ; LOADER: Set branch fs prob: MBB (3 -> 4): unroll.c:22:12 W=44114  0x50000000 / 0x80000000 = 62.50% --> 0x00000000 / 0x80000000 = 0.00%
49 ; LOADER: Set branch fs prob: MBB (9 -> 11): unroll.c:20:12-->unroll.c:22:12 W=44114  0x40000000 / 0x80000000 = 50.00% --> 0x80000000 / 0x80000000 = 100.00%
50 ; LOADER: Set branch fs prob: MBB (9 -> 10): unroll.c:20:12 W=44114  0x40000000 / 0x80000000 = 50.00% --> 0x00000000 / 0x80000000 = 0.00%
51 ; LOADER: Set branch fs prob: MBB (1 -> 3): unroll.c:20:12-->unroll.c:22:12 W=26128  0x34de9bd3 / 0x80000000 = 41.30% --> 0x80000000 / 0x80000000 = 100.00%
52 ; LOADER: Set branch fs prob: MBB (1 -> 2): unroll.c:20:12 W=26128  0x4b21642d / 0x80000000 = 58.70% --> 0x00000000 / 0x80000000 = 0.00%
53 ; LOADER: Set branch fs prob: MBB (5 -> 7): unroll.c:20:12-->unroll.c:22:12 W=26128  0x34693ef1 / 0x80000000 = 40.95% --> 0x0060917b / 0x80000000 = 0.29%
54 ; LOADER: Set branch fs prob: MBB (5 -> 6): unroll.c:20:12 W=26128  0x4b96c10f / 0x80000000 = 59.05% --> 0x7f9f6e85 / 0x80000000 = 99.71%
55 ; LOADER: Set branch fs prob: MBB (7 -> 9): unroll.c:22:12-->unroll.c:20:12 W=26128  0x34300cd0 / 0x80000000 = 40.77% --> 0x00000000 / 0x80000000 = 0.00%
56 ; LOADER: Set branch fs prob: MBB (7 -> 8): unroll.c:22:12 W=26128  0x4bcff330 / 0x80000000 = 59.23% --> 0x80000000 / 0x80000000 = 100.00%
57 ; LOADER: Set branch fs prob: MBB (11 -> 13): unroll.c:22:12-->unroll.c:20:12 W=26128  0x35c65cf7 / 0x80000000 = 42.01% --> 0x02ae02d2 / 0x80000000 = 2.09%
58 ; LOADER: Set branch fs prob: MBB (11 -> 12): unroll.c:22:12 W=26128  0x4a39a309 / 0x80000000 = 57.99% --> 0x7d51fd2e / 0x80000000 = 97.91%
59 ; LOADER: Set branch fs prob: MBB (13 -> 15): unroll.c:20:12-->unroll.c:22:12 W=26128  0x34de9bd3 / 0x80000000 = 41.30% --> 0x0126b8ac / 0x80000000 = 0.90%
60 ; LOADER: Set branch fs prob: MBB (13 -> 14): unroll.c:20:12 W=26128  0x4b21642d / 0x80000000 = 58.70% --> 0x7ed94754 / 0x80000000 = 99.10%
61 ; LOADER: Set branch fs prob: MBB (15 -> 17): unroll.c:22:12-->unroll.c:17:4 W=26128  0x3949278b / 0x80000000 = 44.75% --> 0x089b8337 / 0x80000000 = 6.72%
62 ; LOADER: Set branch fs prob: MBB (15 -> 16): unroll.c:22:12 W=26128  0x46b6d875 / 0x80000000 = 55.25% --> 0x77647cc9 / 0x80000000 = 93.28%
66 target triple = "x86_64-unknown-linux-gnu"
69 @sum = dso_local local_unnamed_addr global i32 0, align 4, !dbg !0
70 @__llvm_fs_discriminator__ = weak_odr constant i1 true
71 @llvm.used = appending global [1 x ptr] [ptr @__llvm_fs_discriminator__], section "llvm.metadata"
73 ; Function Attrs: nofree noinline nounwind memory(inaccessiblemem: readwrite) uwtable
74 declare dso_local i32 @bar(i32 noundef %i) local_unnamed_addr #0
76 ; Function Attrs: mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none)
77 declare void @llvm.dbg.declare(metadata, metadata, metadata) #1
79 ; Function Attrs: mustprogress nofree noinline norecurse nosync nounwind willreturn memory(readwrite, argmem: none, inaccessiblemem: none) uwtable
80 declare dso_local void @work(i32 noundef %i) local_unnamed_addr #3
82 ; Function Attrs: nofree noinline nounwind uwtable
83 define dso_local void @foo() local_unnamed_addr #4 !dbg !47 {
84 entry:
85   call void @llvm.pseudoprobe(i64 6699318081062747564, i64 1, i32 0, i64 -1), !dbg !59
86   call void @llvm.dbg.value(metadata i32 0, metadata !52, metadata !DIExpression()), !dbg !60
87   call void @llvm.pseudoprobe(i64 6699318081062747564, i64 2, i32 0, i64 -1), !dbg !61
88   br label %for.cond1.preheader, !dbg !63
90 for.cond1.preheader:                              ; preds = %entry, %if.end9.3
91   %lsr.iv = phi i32 [ 3, %entry ], [ %lsr.iv.next, %if.end9.3 ]
92   call void @llvm.dbg.value(metadata i32 %lsr.iv, metadata !52, metadata !DIExpression(DW_OP_consts, 3, DW_OP_minus, DW_OP_consts, 48, DW_OP_div, DW_OP_stack_value)), !dbg !60
93   call void @llvm.dbg.value(metadata i32 0, metadata !51, metadata !DIExpression()), !dbg !60
94   call void @llvm.pseudoprobe(i64 6699318081062747564, i64 4, i32 0, i64 -1), !dbg !65
95   call void @llvm.pseudoprobe(i64 6699318081062747564, i64 5, i32 0, i64 -1), !dbg !67
96   %0 = add i32 %lsr.iv, -3, !dbg !65
97   call void @llvm.dbg.value(metadata i32 0, metadata !51, metadata !DIExpression()), !dbg !60
98   %call = tail call i32 @bar(i32 noundef %0), !dbg !68
99   call void @llvm.dbg.value(metadata i32 %call, metadata !53, metadata !DIExpression()), !dbg !70
100   %1 = and i32 %call, 1, !dbg !71
101   %tobool.not = icmp eq i32 %1, 0, !dbg !71
102   br i1 %tobool.not, label %if.end, label %if.then, !dbg !73
104 if.then:                                          ; preds = %for.cond1.preheader
105   call void @llvm.pseudoprobe(i64 6699318081062747564, i64 6, i32 0, i64 -1), !dbg !74
106   %mul4 = shl nsw i32 %call, 1, !dbg !75
107   tail call void @work(i32 noundef %mul4), !dbg !76
108   br label %if.end, !dbg !78
110 if.end:                                           ; preds = %if.then, %for.cond1.preheader
111   call void @llvm.pseudoprobe(i64 6699318081062747564, i64 7, i32 0, i64 -1), !dbg !79
112   %2 = and i32 %call, 3, !dbg !81
113   %tobool6.not = icmp eq i32 %2, 0, !dbg !81
114   br i1 %tobool6.not, label %if.end9, label %if.then7, !dbg !82
116 if.then7:                                         ; preds = %if.end
117   call void @llvm.pseudoprobe(i64 6699318081062747564, i64 8, i32 0, i64 -1), !dbg !83
118   %mul8 = mul nsw i32 %call, 3, !dbg !84
119   tail call void @work(i32 noundef %mul8), !dbg !85
120   br label %if.end9, !dbg !87
122 if.end9:                                          ; preds = %if.then7, %if.end
123   call void @llvm.pseudoprobe(i64 6699318081062747564, i64 9, i32 0, i64 -1), !dbg !88
124   call void @llvm.pseudoprobe(i64 6699318081062747564, i64 10, i32 0, i64 -1), !dbg !89
125   call void @llvm.dbg.value(metadata i32 1, metadata !51, metadata !DIExpression()), !dbg !60
126   call void @llvm.pseudoprobe(i64 6699318081062747564, i64 4, i32 0, i64 -1), !dbg !65
127   call void @llvm.dbg.value(metadata i32 1, metadata !51, metadata !DIExpression()), !dbg !60
128   call void @llvm.pseudoprobe(i64 6699318081062747564, i64 5, i32 0, i64 -1), !dbg !67
129   %3 = add i32 %lsr.iv, -2, !dbg !68
130   %call.1 = tail call i32 @bar(i32 noundef %3), !dbg !68
131   call void @llvm.dbg.value(metadata i32 %call.1, metadata !53, metadata !DIExpression()), !dbg !70
132   %4 = and i32 %call.1, 1, !dbg !71
133   %tobool.not.1 = icmp eq i32 %4, 0, !dbg !71
134   br i1 %tobool.not.1, label %if.end.1, label %if.then.1, !dbg !73
136 if.then.1:                                        ; preds = %if.end9
137   call void @llvm.pseudoprobe(i64 6699318081062747564, i64 6, i32 0, i64 -1), !dbg !74
138   %mul4.1 = shl nsw i32 %call.1, 1, !dbg !75
139   tail call void @work(i32 noundef %mul4.1), !dbg !76
140   br label %if.end.1, !dbg !78
142 if.end.1:                                         ; preds = %if.then.1, %if.end9
143   call void @llvm.pseudoprobe(i64 6699318081062747564, i64 7, i32 0, i64 -1), !dbg !79
144   %5 = and i32 %call.1, 3, !dbg !81
145   %tobool6.not.1 = icmp eq i32 %5, 0, !dbg !81
146   br i1 %tobool6.not.1, label %if.end9.1, label %if.then7.1, !dbg !82
148 if.then7.1:                                       ; preds = %if.end.1
149   call void @llvm.pseudoprobe(i64 6699318081062747564, i64 8, i32 0, i64 -1), !dbg !83
150   %mul8.1 = mul nsw i32 %call.1, 3, !dbg !84
151   tail call void @work(i32 noundef %mul8.1), !dbg !85
152   br label %if.end9.1, !dbg !87
154 if.end9.1:                                        ; preds = %if.then7.1, %if.end.1
155   call void @llvm.pseudoprobe(i64 6699318081062747564, i64 9, i32 0, i64 -1), !dbg !88
156   call void @llvm.pseudoprobe(i64 6699318081062747564, i64 10, i32 0, i64 -1), !dbg !89
157   call void @llvm.dbg.value(metadata i32 2, metadata !51, metadata !DIExpression()), !dbg !60
158   call void @llvm.pseudoprobe(i64 6699318081062747564, i64 4, i32 0, i64 -1), !dbg !65
159   call void @llvm.dbg.value(metadata i32 2, metadata !51, metadata !DIExpression()), !dbg !60
160   call void @llvm.pseudoprobe(i64 6699318081062747564, i64 5, i32 0, i64 -1), !dbg !67
161   %6 = add i32 %lsr.iv, -1, !dbg !68
162   %call.2 = tail call i32 @bar(i32 noundef %6), !dbg !68
163   call void @llvm.dbg.value(metadata i32 %call.2, metadata !53, metadata !DIExpression()), !dbg !70
164   %7 = and i32 %call.2, 1, !dbg !71
165   %tobool.not.2 = icmp eq i32 %7, 0, !dbg !71
166   br i1 %tobool.not.2, label %if.end.2, label %if.then.2, !dbg !73
168 if.then.2:                                        ; preds = %if.end9.1
169   call void @llvm.pseudoprobe(i64 6699318081062747564, i64 6, i32 0, i64 -1), !dbg !74
170   %mul4.2 = shl nsw i32 %call.2, 1, !dbg !75
171   tail call void @work(i32 noundef %mul4.2), !dbg !76
172   br label %if.end.2, !dbg !78
174 if.end.2:                                         ; preds = %if.then.2, %if.end9.1
175   call void @llvm.pseudoprobe(i64 6699318081062747564, i64 7, i32 0, i64 -1), !dbg !79
176   %8 = and i32 %call.2, 3, !dbg !81
177   %tobool6.not.2 = icmp eq i32 %8, 0, !dbg !81
178   br i1 %tobool6.not.2, label %if.end9.2, label %if.then7.2, !dbg !82
180 if.then7.2:                                       ; preds = %if.end.2
181   call void @llvm.pseudoprobe(i64 6699318081062747564, i64 8, i32 0, i64 -1), !dbg !83
182   %mul8.2 = mul nsw i32 %call.2, 3, !dbg !84
183   tail call void @work(i32 noundef %mul8.2), !dbg !85
184   br label %if.end9.2, !dbg !87
186 if.end9.2:                                        ; preds = %if.then7.2, %if.end.2
187   call void @llvm.pseudoprobe(i64 6699318081062747564, i64 9, i32 0, i64 -1), !dbg !88
188   call void @llvm.pseudoprobe(i64 6699318081062747564, i64 10, i32 0, i64 -1), !dbg !89
189   call void @llvm.dbg.value(metadata i32 3, metadata !51, metadata !DIExpression()), !dbg !60
190   call void @llvm.pseudoprobe(i64 6699318081062747564, i64 4, i32 0, i64 -1), !dbg !65
191   call void @llvm.dbg.value(metadata i32 3, metadata !51, metadata !DIExpression()), !dbg !60
192   call void @llvm.pseudoprobe(i64 6699318081062747564, i64 5, i32 0, i64 -1), !dbg !67
193   %call.3 = tail call i32 @bar(i32 noundef %lsr.iv), !dbg !68
194   call void @llvm.dbg.value(metadata i32 %call.3, metadata !53, metadata !DIExpression()), !dbg !70
195   %9 = and i32 %call.3, 1, !dbg !71
196   %tobool.not.3 = icmp eq i32 %9, 0, !dbg !71
197   br i1 %tobool.not.3, label %if.end.3, label %if.then.3, !dbg !73
199 if.then.3:                                        ; preds = %if.end9.2
200   call void @llvm.pseudoprobe(i64 6699318081062747564, i64 6, i32 0, i64 -1), !dbg !74
201   %mul4.3 = shl nsw i32 %call.3, 1, !dbg !75
202   tail call void @work(i32 noundef %mul4.3), !dbg !76
203   br label %if.end.3, !dbg !78
205 if.end.3:                                         ; preds = %if.then.3, %if.end9.2
206   call void @llvm.pseudoprobe(i64 6699318081062747564, i64 7, i32 0, i64 -1), !dbg !79
207   %10 = and i32 %call.3, 3, !dbg !81
208   %tobool6.not.3 = icmp eq i32 %10, 0, !dbg !81
209   br i1 %tobool6.not.3, label %if.end9.3, label %if.then7.3, !dbg !82
211 if.then7.3:                                       ; preds = %if.end.3
212   call void @llvm.pseudoprobe(i64 6699318081062747564, i64 8, i32 0, i64 -1), !dbg !83
213   %mul8.3 = mul nsw i32 %call.3, 3, !dbg !84
214   tail call void @work(i32 noundef %mul8.3), !dbg !85
215   br label %if.end9.3, !dbg !87
217 if.end9.3:                                        ; preds = %if.then7.3, %if.end.3
218   call void @llvm.pseudoprobe(i64 6699318081062747564, i64 9, i32 0, i64 -1), !dbg !88
219   call void @llvm.pseudoprobe(i64 6699318081062747564, i64 10, i32 0, i64 -1), !dbg !89
220   call void @llvm.dbg.value(metadata i32 4, metadata !51, metadata !DIExpression()), !dbg !60
221   call void @llvm.pseudoprobe(i64 6699318081062747564, i64 4, i32 0, i64 -1), !dbg !65
222   call void @llvm.pseudoprobe(i64 6699318081062747564, i64 11, i32 0, i64 -1), !dbg !90
223   call void @llvm.pseudoprobe(i64 6699318081062747564, i64 12, i32 0, i64 -1), !dbg !92
224   call void @llvm.dbg.value(metadata i32 %lsr.iv, metadata !52, metadata !DIExpression(DW_OP_consts, 3, DW_OP_minus, DW_OP_consts, 48, DW_OP_div, DW_OP_consts, 1, DW_OP_plus, DW_OP_stack_value)), !dbg !60
225   call void @llvm.pseudoprobe(i64 6699318081062747564, i64 2, i32 0, i64 -1), !dbg !61
226   %lsr.iv.next = add nuw nsw i32 %lsr.iv, 48, !dbg !93
227   %exitcond.not = icmp eq i32 %lsr.iv.next, 2307, !dbg !93
228   br i1 %exitcond.not, label %for.end12, label %for.cond1.preheader, !dbg !63, !llvm.loop !95
230 for.end12:                                        ; preds = %if.end9.3
231   call void @llvm.pseudoprobe(i64 6699318081062747564, i64 13, i32 0, i64 -1), !dbg !99
232   ret void, !dbg !99
235 ; Function Attrs: mustprogress nocallback nofree nosync nounwind willreturn memory(inaccessiblemem: readwrite)
236 declare void @llvm.pseudoprobe(i64, i64, i32, i64) #6
238 ; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
239 declare void @llvm.dbg.value(metadata, metadata, metadata) #7
241 attributes #0 = { nofree noinline nounwind memory(inaccessiblemem: readwrite) uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
242 attributes #1 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
243 attributes #2 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
244 attributes #3 = { mustprogress nofree noinline norecurse nosync nounwind willreturn memory(readwrite, argmem: none, inaccessiblemem: none) uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
245 attributes #4 = { nofree noinline nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
246 attributes #5 = { nofree nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
247 attributes #6 = { mustprogress nocallback nofree nosync nounwind willreturn memory(inaccessiblemem: readwrite) }
248 attributes #7 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
250 !llvm.dbg.cu = !{!2}
251 !llvm.module.flags = !{!6, !7, !8, !9}
252 !llvm.ident = !{!10}
253 !llvm.pseudo_probe_desc = !{!11, !12, !13, !14}
255 !0 = !DIGlobalVariableExpression(var: !1, expr: !DIExpression())
256 !1 = distinct !DIGlobalVariable(name: "sum", scope: !2, file: !3, line: 7, type: !5, isLocal: false, isDefinition: true)
257 !2 = distinct !DICompileUnit(language: DW_LANG_C11, file: !3, producer: "clang version 17.0.0 (https://github.com/llvm/llvm-project.git fb16df500443aa5129f4a5e4dc4d9dcac613a809)", isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug, globals: !4, splitDebugInlining: false, debugInfoForProfiling: true, nameTableKind: None)
258 !3 = !DIFile(filename: "unroll.c", directory: "/home/hoy/build/llvm-github", checksumkind: CSK_MD5, checksum: "11508da575b4d414f8b2f39cf4d90184")
259 !4 = !{!0}
260 !5 = !DIBasicType(name: "unsigned int", size: 32, encoding: DW_ATE_unsigned)
261 !6 = !{i32 7, !"Dwarf Version", i32 5}
262 !7 = !{i32 2, !"Debug Info Version", i32 3}
263 !8 = !{i32 1, !"wchar_size", i32 4}
264 !9 = !{i32 7, !"uwtable", i32 2}
265 !10 = !{!"clang version 17.0.0 (https://github.com/llvm/llvm-project.git fb16df500443aa5129f4a5e4dc4d9dcac613a809)"}
266 !11 = !{i64 -2012135647395072713, i64 4294967295, !"bar"}
267 !12 = !{i64 9204417991963109735, i64 72617220756, !"work"}
268 !13 = !{i64 6699318081062747564, i64 844700110938769, !"foo"}
269 !14 = !{i64 -2624081020897602054, i64 281563657672557, !"main"}
270 !18 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed)
271 !47 = distinct !DISubprogram(name: "foo", scope: !3, file: !3, line: 15, type: !48, scopeLine: 15, flags: DIFlagAllCallsDescribed, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !2, retainedNodes: !50)
272 !48 = !DISubroutineType(types: !49)
273 !49 = !{null}
274 !50 = !{!51, !52, !53}
275 !51 = !DILocalVariable(name: "i", scope: !47, file: !3, line: 16, type: !18)
276 !52 = !DILocalVariable(name: "j", scope: !47, file: !3, line: 16, type: !18)
277 !53 = !DILocalVariable(name: "ii", scope: !54, file: !3, line: 19, type: !18)
278 !54 = distinct !DILexicalBlock(scope: !55, file: !3, line: 18, column: 30)
279 !55 = distinct !DILexicalBlock(scope: !56, file: !3, line: 18, column: 6)
280 !56 = distinct !DILexicalBlock(scope: !57, file: !3, line: 18, column: 6)
281 !57 = distinct !DILexicalBlock(scope: !58, file: !3, line: 17, column: 4)
282 !58 = distinct !DILexicalBlock(scope: !47, file: !3, line: 17, column: 4)
283 !59 = !DILocation(line: 17, column: 11, scope: !58)
284 !60 = !DILocation(line: 0, scope: !47)
285 !61 = !DILocation(line: 17, column: 16, scope: !62)
286 !62 = !DILexicalBlockFile(scope: !57, file: !3, discriminator: 0)
287 !63 = !DILocation(line: 17, column: 4, scope: !64)
288 !64 = !DILexicalBlockFile(scope: !58, file: !3, discriminator: 1)
289 !65 = !DILocation(line: 18, column: 18, scope: !66)
290 !66 = !DILexicalBlockFile(scope: !55, file: !3, discriminator: 0)
291 !67 = !DILocation(line: 19, column: 21, scope: !54)
292 !68 = !DILocation(line: 19, column: 17, scope: !69)
293 !69 = !DILexicalBlockFile(scope: !54, file: !3, discriminator: 186646647)
294 !70 = !DILocation(line: 0, scope: !54)
295 !71 = !DILocation(line: 20, column: 15, scope: !72)
296 !72 = distinct !DILexicalBlock(scope: !54, file: !3, line: 20, column: 12)
297 !73 = !DILocation(line: 20, column: 12, scope: !54)
298 !74 = !DILocation(line: 21, column: 15, scope: !72)
299 !75 = !DILocation(line: 21, column: 17, scope: !72)
300 !76 = !DILocation(line: 21, column: 10, scope: !77)
301 !77 = !DILexicalBlockFile(scope: !72, file: !3, discriminator: 186646655)
302 !78 = !DILocation(line: 21, column: 10, scope: !72)
303 !79 = !DILocation(line: 22, column: 12, scope: !80)
304 !80 = distinct !DILexicalBlock(scope: !54, file: !3, line: 22, column: 12)
305 !81 = !DILocation(line: 22, column: 15, scope: !80)
306 !82 = !DILocation(line: 22, column: 12, scope: !54)
307 !83 = !DILocation(line: 23, column: 15, scope: !80)
308 !84 = !DILocation(line: 23, column: 17, scope: !80)
309 !85 = !DILocation(line: 23, column: 10, scope: !86)
310 !86 = !DILexicalBlockFile(scope: !80, file: !3, discriminator: 186646663)
311 !87 = !DILocation(line: 23, column: 10, scope: !80)
312 !88 = !DILocation(line: 24, column: 4, scope: !54)
313 !89 = !DILocation(line: 18, column: 26, scope: !66)
314 !90 = !DILocation(line: 24, column: 4, scope: !91)
315 !91 = !DILexicalBlockFile(scope: !56, file: !3, discriminator: 0)
316 !92 = !DILocation(line: 17, column: 25, scope: !62)
317 !93 = !DILocation(line: 17, column: 18, scope: !94)
318 !94 = !DILexicalBlockFile(scope: !57, file: !3, discriminator: 1)
319 !95 = distinct !{!95, !96, !97, !98}
320 !96 = !DILocation(line: 17, column: 4, scope: !58)
321 !97 = !DILocation(line: 24, column: 4, scope: !58)
322 !98 = !{!"llvm.loop.mustprogress"}
323 !99 = !DILocation(line: 25, column: 2, scope: !47)