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 4; 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;; } 15;; 16;; unsigned sum; 17;; __attribute__((noinline)) void work(int i){ 18;; if (sum % 7) 19;; sum += i; 20;; else 21;; sum -= i; 22;; } 23;; 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;; } 35;; 36;; int main() { 37;; int i; 38;; for (i = 0; i < 10000000; i++) { 39;; foo(); 40;; } 41;; } 42;; 43;; 44 45;; Check that new branch probs are generated. 46 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% 63 64 65 66target triple = "x86_64-unknown-linux-gnu" 67 68 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" 72 73; Function Attrs: nofree noinline nounwind memory(inaccessiblemem: readwrite) uwtable 74declare dso_local i32 @bar(i32 noundef %i) local_unnamed_addr #0 75 76; Function Attrs: mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) 77declare void @llvm.dbg.declare(metadata, metadata, metadata) #1 78 79; Function Attrs: mustprogress nofree noinline norecurse nosync nounwind willreturn memory(readwrite, argmem: none, inaccessiblemem: none) uwtable 80declare dso_local void @work(i32 noundef %i) local_unnamed_addr #3 81 82; Function Attrs: nofree noinline nounwind uwtable 83define dso_local void @foo() local_unnamed_addr #4 !dbg !47 { 84entry: 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 89 90for.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 103 104if.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 109 110if.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 115 116if.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 121 122if.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 135 136if.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 141 142if.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 147 148if.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 153 154if.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 167 168if.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 173 174if.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 179 180if.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 185 186if.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 198 199if.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 204 205if.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 210 211if.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 216 217if.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 229 230for.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 233} 234 235; Function Attrs: mustprogress nocallback nofree nosync nounwind willreturn memory(inaccessiblemem: readwrite) 236declare void @llvm.pseudoprobe(i64, i64, i32, i64) #6 237 238; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none) 239declare void @llvm.dbg.value(metadata, metadata, metadata) #7 240 241attributes #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" } 242attributes #1 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) } 243attributes #2 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) } 244attributes #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" } 245attributes #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" } 246attributes #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" } 247attributes #6 = { mustprogress nocallback nofree nosync nounwind willreturn memory(inaccessiblemem: readwrite) } 248attributes #7 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) } 249 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} 254 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) 324