; LLVM IR from libxsmm/libxsmm :: tests (convert)

; Unoptimized IR (clang -disable-llvm-passes):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

@__const.main.size = external hidden unnamed_addr constant [2 x i64], align 16
@.str = external hidden unnamed_addr constant [26 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [65 x i8], align 1
@__PRETTY_FUNCTION__.main = external hidden unnamed_addr constant [15 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [20 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local i32 @main() #0 {
  %1 = alloca i32, align 4
  %2 = alloca i32, align 4
  %3 = alloca i32, align 4
  %4 = alloca [2 x i64], align 16
  %5 = alloca i64, align 8
  %6 = alloca i64, align 8
  %7 = alloca i64, align 8
  %8 = alloca i64, align 8
  %9 = alloca ptr, align 8
  %10 = alloca ptr, align 8
  %11 = alloca [1024 x i8], align 16
  %12 = alloca ptr, align 8
  %13 = alloca i64, align 8
  %14 = alloca double, align 8
  %15 = alloca double, align 8
  %16 = alloca i32, align 4
  %17 = alloca i32, align 4
  %18 = alloca i32, align 4
  %19 = alloca i32, align 4
  %20 = alloca i32, align 4
  %21 = alloca i32, align 4
  %22 = alloca i32, align 4
  %23 = alloca i32, align 4
  %24 = alloca float, align 4
  %25 = alloca float, align 4
  %26 = alloca i64, align 8
  %27 = alloca i32, align 4
  %28 = alloca i64, align 8
  %29 = alloca double, align 8
  %30 = alloca double, align 8
  %31 = alloca i32, align 4
  %32 = alloca i32, align 4
  %33 = alloca i32, align 4
  %34 = alloca i32, align 4
  %35 = alloca i32, align 4
  %36 = alloca i32, align 4
  %37 = alloca i32, align 4
  %38 = alloca i32, align 4
  %39 = alloca float, align 4
  %40 = alloca float, align 4
  %41 = alloca i64, align 8
  %42 = alloca i32, align 4
  %43 = alloca i64, align 8
  %44 = alloca double, align 8
  %45 = alloca double, align 8
  %46 = alloca i32, align 4
  %47 = alloca i32, align 4
  %48 = alloca i32, align 4
  %49 = alloca i32, align 4
  %50 = alloca i32, align 4
  %51 = alloca i32, align 4
  %52 = alloca i32, align 4
  %53 = alloca i32, align 4
  %54 = alloca float, align 4
  %55 = alloca float, align 4
  %56 = alloca i64, align 8
  %57 = alloca i32, align 4
  %58 = alloca i64, align 8
  %59 = alloca double, align 8
  %60 = alloca double, align 8
  %61 = alloca i32, align 4
  %62 = alloca i32, align 4
  %63 = alloca i32, align 4
  %64 = alloca i32, align 4
  %65 = alloca i32, align 4
  %66 = alloca i32, align 4
  %67 = alloca i32, align 4
  %68 = alloca i32, align 4
  %69 = alloca float, align 4
  %70 = alloca float, align 4
  %71 = alloca i64, align 8
  %72 = alloca i32, align 4
  %73 = alloca i64, align 8
  %74 = alloca double, align 8
  %75 = alloca double, align 8
  %76 = alloca i32, align 4
  %77 = alloca i32, align 4
  %78 = alloca i32, align 4
  %79 = alloca i32, align 4
  %80 = alloca i32, align 4
  %81 = alloca i32, align 4
  %82 = alloca i32, align 4
  %83 = alloca i32, align 4
  %84 = alloca float, align 4
  %85 = alloca float, align 4
  %86 = alloca i64, align 8
  %87 = alloca i32, align 4
  %88 = alloca i64, align 8
  %89 = alloca double, align 8
  %90 = alloca double, align 8
  %91 = alloca i32, align 4
  %92 = alloca i32, align 4
  %93 = alloca i32, align 4
  %94 = alloca i32, align 4
  %95 = alloca i32, align 4
  %96 = alloca i32, align 4
  %97 = alloca i32, align 4
  %98 = alloca i32, align 4
  %99 = alloca float, align 4
  %100 = alloca float, align 4
  %101 = alloca i64, align 8
  %102 = alloca i32, align 4
  %103 = alloca i64, align 8
  %104 = alloca double, align 8
  %105 = alloca double, align 8
  %106 = alloca i32, align 4
  %107 = alloca i32, align 4
  %108 = alloca i32, align 4
  %109 = alloca i32, align 4
  %110 = alloca i32, align 4
  %111 = alloca i32, align 4
  %112 = alloca i32, align 4
  %113 = alloca i32, align 4
  %114 = alloca float, align 4
  %115 = alloca float, align 4
  %116 = alloca i64, align 8
  %117 = alloca i32, align 4
  %118 = alloca i64, align 8
  %119 = alloca double, align 8
  %120 = alloca double, align 8
  %121 = alloca i32, align 4
  %122 = alloca i32, align 4
  %123 = alloca i32, align 4
  %124 = alloca i32, align 4
  %125 = alloca i32, align 4
  %126 = alloca i32, align 4
  %127 = alloca i32, align 4
  %128 = alloca i32, align 4
  %129 = alloca float, align 4
  %130 = alloca float, align 4
  %131 = alloca i64, align 8
  %132 = alloca i32, align 4
  %133 = alloca i64, align 8
  %134 = alloca double, align 8
  %135 = alloca double, align 8
  %136 = alloca i32, align 4
  %137 = alloca i32, align 4
  %138 = alloca i32, align 4
  %139 = alloca i32, align 4
  %140 = alloca i32, align 4
  %141 = alloca i32, align 4
  %142 = alloca i32, align 4
  %143 = alloca i32, align 4
  %144 = alloca float, align 4
  %145 = alloca float, align 4
  %146 = alloca i64, align 8
  %147 = alloca i32, align 4
  %148 = alloca i64, align 8
  %149 = alloca double, align 8
  %150 = alloca double, align 8
  %151 = alloca i32, align 4
  %152 = alloca i32, align 4
  %153 = alloca i32, align 4
  %154 = alloca i32, align 4
  %155 = alloca i32, align 4
  %156 = alloca i32, align 4
  %157 = alloca i32, align 4
  %158 = alloca i32, align 4
  %159 = alloca float, align 4
  %160 = alloca float, align 4
  %161 = alloca i64, align 8
  %162 = alloca i32, align 4
  %163 = alloca i64, align 8
  %164 = alloca double, align 8
  %165 = alloca double, align 8
  %166 = alloca i32, align 4
  %167 = alloca i32, align 4
  %168 = alloca i32, align 4
  %169 = alloca i32, align 4
  %170 = alloca i32, align 4
  %171 = alloca i32, align 4
  %172 = alloca i32, align 4
  %173 = alloca i32, align 4
  %174 = alloca float, align 4
  %175 = alloca float, align 4
  %176 = alloca i64, align 8
  %177 = alloca i32, align 4
  %178 = alloca i64, align 8
  %179 = alloca double, align 8
  %180 = alloca double, align 8
  %181 = alloca i32, align 4
  %182 = alloca i32, align 4
  %183 = alloca i32, align 4
  %184 = alloca i32, align 4
  %185 = alloca i32, align 4
  %186 = alloca i32, align 4
  %187 = alloca i32, align 4
  %188 = alloca i32, align 4
  %189 = alloca float, align 4
  %190 = alloca float, align 4
  %191 = alloca i64, align 8
  %192 = alloca i32, align 4
  %193 = alloca i64, align 8
  %194 = alloca double, align 8
  %195 = alloca double, align 8
  %196 = alloca i32, align 4
  %197 = alloca i32, align 4
  %198 = alloca i32, align 4
  %199 = alloca i32, align 4
  %200 = alloca i32, align 4
  %201 = alloca i32, align 4
  %202 = alloca i32, align 4
  %203 = alloca i32, align 4
  %204 = alloca float, align 4
  %205 = alloca float, align 4
  %206 = alloca i64, align 8
  %207 = alloca i32, align 4
  %208 = alloca i64, align 8
  %209 = alloca double, align 8
  %210 = alloca double, align 8
  %211 = alloca i32, align 4
  %212 = alloca i32, align 4
  %213 = alloca i32, align 4
  %214 = alloca i32, align 4
  %215 = alloca i32, align 4
  %216 = alloca i32, align 4
  %217 = alloca i32, align 4
  %218 = alloca i32, align 4
  %219 = alloca float, align 4
  %220 = alloca float, align 4
  %221 = alloca i64, align 8
  %222 = alloca i32, align 4
  store i32 0, ptr %1, align 4
  call void @llvm.lifetime.start.p0(i64 4, ptr %2) #8
  store i32 0, ptr %2, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %3) #8
  store i32 1, ptr %3, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16, ptr %4) #8
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %4, ptr align 16 @__const.main.size, i64 16, i1 false)
  call void @llvm.lifetime.start.p0(i64 8, ptr %5) #8
  store i64 0, ptr %5, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %6) #8
  store i64 2, ptr %6, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #8
  store i64 1, ptr %7, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #8
  store i64 0, ptr %8, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #8
  store ptr null, ptr %9, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #8
  store ptr null, ptr %10, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 1024, ptr %11) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #8
  %223 = call ptr @libxsmm_rng_create_extstate(i32 noundef 1)
  store ptr %223, ptr %12, align 8, !tbaa !11
  %224 = getelementptr inbounds [1024 x i8], ptr %11, i64 0, i64 0
  %225 = getelementptr inbounds [2 x i64], ptr %4, i64 0, i64 0
  %226 = call i32 @libxsmm_mhd_read_header(ptr noundef @.str, i64 noundef 1024, ptr noundef %224, ptr noundef %6, ptr noundef %225, ptr noundef %7, ptr noundef %3, ptr noundef %8, ptr noundef null)
  %227 = icmp eq i32 0, %226
  br i1 %227, label %228, label %497

228:                                              ; preds = %0
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #8
  %229 = getelementptr inbounds [2 x i64], ptr %4, i64 0, i64 0
  %230 = load i64, ptr %229, align 16, !tbaa !9
  %231 = getelementptr inbounds [2 x i64], ptr %4, i64 0, i64 1
  %232 = load i64, ptr %231, align 8, !tbaa !9
  %233 = mul i64 %230, %232
  store i64 %233, ptr %13, align 8, !tbaa !9
  %234 = load i64, ptr %5, align 8, !tbaa !9
  %235 = load i64, ptr %13, align 8, !tbaa !9
  %236 = icmp ult i64 %234, %235
  br i1 %236, label %237, label %333

237:                                              ; preds = %228
  %238 = load ptr, ptr %10, align 8, !tbaa !11
  call void @free(ptr noundef %238) #8
  %239 = load ptr, ptr %9, align 8, !tbaa !11
  call void @free(ptr noundef %239) #8
  %240 = load i64, ptr %13, align 8, !tbaa !9
  %241 = mul i64 2, %240
  %242 = call noalias ptr @malloc(i64 noundef %241) #9
  store ptr %242, ptr %10, align 8, !tbaa !11
  %243 = load i32, ptr %3, align 4, !tbaa !5
  %244 = icmp eq i32 0, %243
  br i1 %244, label %245, label %246

245:                                              ; preds = %237
  br label %326

246:                                              ; preds = %237
  %247 = load i32, ptr %3, align 4, !tbaa !5
  %248 = icmp eq i32 1, %247
  br i1 %248, label %249, label %250

249:                                              ; preds = %246
  br label %324

250:                                              ; preds = %246
  %251 = load i32, ptr %3, align 4, !tbaa !5
  %252 = icmp eq i32 2, %251
  br i1 %252, label %253, label %254

253:                                              ; preds = %250
  br label %322

254:                                              ; preds = %250
  %255 = load i32, ptr %3, align 4, !tbaa !5
  %256 = icmp eq i32 3, %255
  br i1 %256, label %257, label %258

257:                                              ; preds = %254
  br label %320

258:                                              ; preds = %254
  %259 = load i32, ptr %3, align 4, !tbaa !5
  %260 = icmp eq i32 4, %259
  br i1 %260, label %261, label %262

261:                                              ; preds = %258
  br label %318

262:                                              ; preds = %258
  %263 = load i32, ptr %3, align 4, !tbaa !5
  %264 = icmp eq i32 5, %263
  br i1 %264, label %265, label %266

265:                                              ; preds = %262
  br label %316

266:                                              ; preds = %262
  %267 = load i32, ptr %3, align 4, !tbaa !5
  %268 = icmp eq i32 6, %267
  br i1 %268, label %269, label %270

269:                                              ; preds = %266
  br label %314

270:                                              ; preds = %266
  %271 = load i32, ptr %3, align 4, !tbaa !5
  %272 = icmp eq i32 7, %271
  br i1 %272, label %273, label %274

273:                                              ; preds = %270
  br label %312

274:                                              ; preds = %270
  %275 = load i32, ptr %3, align 4, !tbaa !5
  %276 = icmp eq i32 8, %275
  br i1 %276, label %277, label %278

277:                                              ; preds = %274
  br label %310

278:                                              ; preds = %274
  %279 = load i32, ptr %3, align 4, !tbaa !5
  %280 = icmp eq i32 9, %279
  br i1 %280, label %281, label %282

281:                                              ; preds = %278
  br label %308

282:                                              ; preds = %278
  %283 = load i32, ptr %3, align 4, !tbaa !5
  %284 = icmp eq i32 10, %283
  br i1 %284, label %285, label %286

285:                                              ; preds = %282
  br label %306

286:                                              ; preds = %282
  %287 = load i32, ptr %3, align 4, !tbaa !5
  %288 = icmp eq i32 11, %287
  br i1 %288, label %289, label %290

289:                                              ; preds = %286
  br label %304

290:                                              ; preds = %286
  %291 = load i32, ptr %3, align 4, !tbaa !5
  %292 = icmp eq i32 12, %291
  br i1 %292, label %293, label %294

293:                                              ; preds = %290
  br label %302

294:                                              ; preds = %290
  %295 = load i32, ptr %3, align 4, !tbaa !5
  %296 = icmp eq i32 13, %295
  br i1 %296, label %297, label %298

297:                                              ; preds = %294
  br label %300

298:                                              ; preds = %294
  call void @__assert_fail(ptr noundef @.str.1, ptr noundef @.str.2, i32 noundef 48, ptr noundef @__PRETTY_FUNCTION__.main) #10
  unreachable

299:                                              ; No predecessors!
  br label %300

300:                                              ; preds = %299, %297
  %301 = phi i32 [ 1, %297 ], [ 0, %299 ]
  br label %302

302:                                              ; preds = %300, %293
  %303 = phi i32 [ 1, %293 ], [ %301, %300 ]
  br label %304

304:                                              ; preds = %302, %289
  %305 = phi i32 [ 2, %289 ], [ %303, %302 ]
  br label %306

306:                                              ; preds = %304, %285
  %307 = phi i32 [ 2, %285 ], [ %305, %304 ]
  br label %308

308:                                              ; preds = %306, %281
  %309 = phi i32 [ 4, %281 ], [ %307, %306 ]
  br label %310

310:                                              ; preds = %308, %277
  %311 = phi i32 [ 4, %277 ], [ %309, %308 ]
  br label %312

312:                                              ; preds = %310, %273
  %313 = phi i32 [ 8, %273 ], [ %311, %310 ]
  br label %314

314:                                              ; preds = %312, %269
  %315 = phi i32 [ 8, %269 ], [ %313, %312 ]
  br label %316

316:                                              ; preds = %314, %265
  %317 = phi i32 [ 1, %265 ], [ %315, %314 ]
  br label %318

318:                                              ; preds = %316, %261
  %319 = phi i32 [ 1, %261 ], [ %317, %316 ]
  br label %320

320:                                              ; preds = %318, %257
  %321 = phi i32 [ 2, %257 ], [ %319, %318 ]
  br label %322

322:                                              ; preds = %320, %253
  %323 = phi i32 [ 2, %253 ], [ %321, %320 ]
  br label %324

324:                                              ; preds = %322, %249
  %325 = phi i32 [ 4, %249 ], [ %323, %322 ]
  br label %326

326:                                              ; preds = %324, %245
  %327 = phi i32 [ 8, %245 ], [ %325, %324 ]
  %328 = sext i32 %327 to i64
  %329 = load i64, ptr %13, align 8, !tbaa !9
  %330 = mul i64 %328, %329
  %331 = call noalias ptr @malloc(i64 noundef %330) #9
  store ptr %331, ptr %9, align 8, !tbaa !11
  %332 = load i64, ptr %13, align 8, !tbaa !9
  store i64 %332, ptr %5, align 8, !tbaa !9
  br label %333

333:                                              ; preds = %326, %228
  %334 = load ptr, ptr %9, align 8, !tbaa !11
  %335 = icmp ne ptr null, %334
  br i1 %335, label %336, label %495

336:                                              ; preds = %333
  %337 = load ptr, ptr %10, align 8, !tbaa !11
  %338 = icmp ne ptr null, %337
  br i1 %338, label %339, label %495

339:                                              ; preds = %336
  %340 = load i32, ptr %2, align 4, !tbaa !5
  %341 = icmp eq i32 0, %340
  br i1 %341, label %342, label %495

342:                                              ; preds = %339
  br label %343

343:                                              ; preds = %342
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #8
  store double 1.000000e+00, ptr %14, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #8
  %344 = load double, ptr %14, align 8, !tbaa !13
  %345 = load i64, ptr %13, align 8, !tbaa !9
  %346 = uitofp i64 %345 to double
  %347 = fdiv double 1.000000e+00, %346
  %348 = load i64, ptr %13, align 8, !tbaa !9
  %349 = uitofp i64 %348 to double
  %350 = fdiv double 1.000000e+00, %349
  %351 = call double @llvm.fmuladd.f64(double %344, double %347, double %350)
  store double %351, ptr %15, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #8
  %352 = getelementptr inbounds [2 x i64], ptr %4, i64 0, i64 0
  %353 = load i64, ptr %352, align 16, !tbaa !9
  %354 = trunc i64 %353 to i32
  store i32 %354, ptr %16, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #8
  %355 = getelementptr inbounds [2 x i64], ptr %4, i64 0, i64 1
  %356 = load i64, ptr %355, align 8, !tbaa !9
  %357 = trunc i64 %356 to i32
  store i32 %357, ptr %17, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #8
  %358 = getelementptr inbounds [2 x i64], ptr %4, i64 0, i64 0
  %359 = load i64, ptr %358, align 16, !tbaa !9
  %360 = trunc i64 %359 to i32
  store i32 %360, ptr %18, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #8
  store i32 0, ptr %19, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #8
  store i32 0, ptr %20, align 4, !tbaa !5
  %361 = load double, ptr %14, align 8, !tbaa !13
  %362 = fcmp une double 0.000000e+00, %361
  br i1 %362, label %363, label %422

363:                                              ; preds = %343
  store i32 0, ptr %19, align 4, !tbaa !5
  br label %364

364:                                              ; preds = %418, %363
  %365 = load i32, ptr %19, align 4, !tbaa !5
  %366 = load i32, ptr %17, align 4, !tbaa !5
  %367 = icmp slt i32 %365, %366
  br i1 %367, label %368, label %421

368:                                              ; preds = %364
  store i32 0, ptr %20, align 4, !tbaa !5
  br label %369

369:                                              ; preds = %394, %368
  %370 = load i32, ptr %20, align 4, !tbaa !5
  %371 = load i32, ptr %16, align 4, !tbaa !5
  %372 = icmp slt i32 %370, %371
  br i1 %372, label %373, label %397

373:                                              ; preds = %369
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #8
  %374 = load i32, ptr %19, align 4, !tbaa !5
  %375 = load i32, ptr %18, align 4, !tbaa !5
  %376 = mul nsw i32 %374, %375
  %377 = load i32, ptr %20, align 4, !tbaa !5
  %378 = add nsw i32 %376, %377
  store i32 %378, ptr %21, align 4, !tbaa !5
  %379 = load double, ptr %15, align 8, !tbaa !13
  %380 = load i32, ptr %19, align 4, !tbaa !5
  %381 = sitofp i32 %380 to double
  %382 = load i32, ptr %16, align 4, !tbaa !5
  %383 = sitofp i32 %382 to double
  %384 = call double @llvm.fmuladd.f64(double %381, double %383, double 1.000000e+00)
  %385 = load i32, ptr %20, align 4, !tbaa !5
  %386 = sitofp i32 %385 to double
  %387 = fadd double %384, %386
  %388 = fmul double %379, %387
  %389 = fptrunc double %388 to float
  %390 = load ptr, ptr %9, align 8, !tbaa !11
  %391 = load i32, ptr %21, align 4, !tbaa !5
  %392 = sext i32 %391 to i64
  %393 = getelementptr inbounds float, ptr %390, i64 %392
  store float %389, ptr %393, align 4, !tbaa !15
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #8
  br label %394

394:                                              ; preds = %373
  %395 = load i32, ptr %20, align 4, !tbaa !5
  %396 = add nsw i32 %395, 1
  store i32 %396, ptr %20, align 4, !tbaa !5
  br label %369, !llvm.loop !17

397:                                              ; preds = %369
  br label %398

398:                                              ; preds = %414, %397
  %399 = load i32, ptr %20, align 4, !tbaa !5
  %400 = load i32, ptr %18, align 4, !tbaa !5
  %401 = icmp slt i32 %399, %400
  br i1 %401, label %402, label %417

402:                                              ; preds = %398
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #8
  %403 = load i32, ptr %19, align 4, !tbaa !5
  %404 = load i32, ptr %18, align 4, !tbaa !5
  %405 = mul nsw i32 %403, %404
  %406 = load i32, ptr %20, align 4, !tbaa !5
  %407 = add nsw i32 %405, %406
  store i32 %407, ptr %22, align 4, !tbaa !5
  %408 = load double, ptr %14, align 8, !tbaa !13
  %409 = fptrunc double %408 to float
  %410 = load ptr, ptr %9, align 8, !tbaa !11
  %411 = load i32, ptr %22, align 4, !tbaa !5
  %412 = sext i32 %411 to i64
  %413 = getelementptr inbounds float, ptr %410, i64 %412
  store float %409, ptr %413, align 4, !tbaa !15
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #8
  br label %414

414:                                              ; preds = %402
  %415 = load i32, ptr %20, align 4, !tbaa !5
  %416 = add nsw i32 %415, 1
  store i32 %416, ptr %20, align 4, !tbaa !5
  br label %398, !llvm.loop !19

417:                                              ; preds = %398
  br label %418

418:                                              ; preds = %417
  %419 = load i32, ptr %19, align 4, !tbaa !5
  %420 = add nsw i32 %419, 1
  store i32 %420, ptr %19, align 4, !tbaa !5
  br label %364, !llvm.loop !20

421:                                              ; preds = %364
  br label %478

422:                                              ; preds = %343
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #8
  %423 = load i32, ptr %17, align 4, !tbaa !5
  %424 = load i32, ptr %18, align 4, !tbaa !5
  %425 = mul nsw i32 %423, %424
  store i32 %425, ptr %23, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #8
  %426 = load i32, ptr %23, align 4, !tbaa !5
  %427 = add nsw i32 %426, 1
  %428 = sdiv i32 %427, 2
  %429 = sitofp i32 %428 to float
  store float %429, ptr %24, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #8
  %430 = load i64, ptr %13, align 8, !tbaa !9
  %431 = uitofp i64 %430 to double
  %432 = fdiv double 1.000000e+00, %431
  %433 = fptrunc double %432 to float
  %434 = load float, ptr %24, align 4, !tbaa !15
  %435 = fdiv float %433, %434
  store float %435, ptr %25, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #8
  %436 = load i32, ptr %23, align 4, !tbaa !5
  %437 = sext i32 %436 to i64
  %438 = call i64 @libxsmm_coprime2(i64 noundef %437)
  store i64 %438, ptr %26, align 8, !tbaa !9
  store i32 0, ptr %19, align 4, !tbaa !5
  br label %439

439:                                              ; preds = %474, %422
  %440 = load i32, ptr %19, align 4, !tbaa !5
  %441 = load i32, ptr %17, align 4, !tbaa !5
  %442 = icmp slt i32 %440, %441
  br i1 %442, label %443, label %477

443:                                              ; preds = %439
  store i32 0, ptr %20, align 4, !tbaa !5
  br label %444

444:                                              ; preds = %470, %443
  %445 = load i32, ptr %20, align 4, !tbaa !5
  %446 = load i32, ptr %18, align 4, !tbaa !5
  %447 = icmp slt i32 %445, %446
  br i1 %447, label %448, label %473

448:                                              ; preds = %444
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #8
  %449 = load i32, ptr %19, align 4, !tbaa !5
  %450 = load i32, ptr %18, align 4, !tbaa !5
  %451 = mul nsw i32 %449, %450
  %452 = load i32, ptr %20, align 4, !tbaa !5
  %453 = add nsw i32 %451, %452
  store i32 %453, ptr %27, align 4, !tbaa !5
  %454 = load float, ptr %25, align 4, !tbaa !15
  %455 = load i64, ptr %26, align 8, !tbaa !9
  %456 = load i32, ptr %27, align 4, !tbaa !5
  %457 = sext i32 %456 to i64
  %458 = mul i64 %455, %457
  %459 = load i32, ptr %23, align 4, !tbaa !5
  %460 = sext i32 %459 to i64
  %461 = urem i64 %458, %460
  %462 = uitofp i64 %461 to float
  %463 = load float, ptr %24, align 4, !tbaa !15
  %464 = fsub float %462, %463
  %465 = fmul float %454, %464
  %466 = load ptr, ptr %9, align 8, !tbaa !11
  %467 = load i32, ptr %27, align 4, !tbaa !5
  %468 = sext i32 %467 to i64
  %469 = getelementptr inbounds float, ptr %466, i64 %468
  store float %465, ptr %469, align 4, !tbaa !15
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #8
  br label %470

470:                                              ; preds = %448
  %471 = load i32, ptr %20, align 4, !tbaa !5
  %472 = add nsw i32 %471, 1
  store i32 %472, ptr %20, align 4, !tbaa !5
  br label %444, !llvm.loop !21

473:                                              ; preds = %444
  br label %474

474:                                              ; preds = %473
  %475 = load i32, ptr %19, align 4, !tbaa !5
  %476 = add nsw i32 %475, 1
  store i32 %476, ptr %19, align 4, !tbaa !5
  br label %439, !llvm.loop !22

477:                                              ; preds = %439
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #8
  br label %478

478:                                              ; preds = %477, %421
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #8
  br label %479

479:                                              ; preds = %478
  br label %480

480:                                              ; preds = %479
  %481 = load ptr, ptr %9, align 8, !tbaa !11
  %482 = load ptr, ptr %10, align 8, !tbaa !11
  %483 = load i64, ptr %13, align 8, !tbaa !9
  call void @libxsmm_truncate_convert_f32_bf16(ptr noundef %481, ptr noundef %482, i64 noundef %483)
  %484 = load ptr, ptr %10, align 8, !tbaa !11
  %485 = load ptr, ptr %9, align 8, !tbaa !11
  %486 = load i64, ptr %13, align 8, !tbaa !9
  call void @libxsmm_convert_bf16_f32(ptr noundef %484, ptr noundef %485, i64 noundef %486)
  %487 = getelementptr inbounds [1024 x i8], ptr %11, i64 0, i64 0
  %488 = getelementptr inbounds [2 x i64], ptr %4, i64 0, i64 0
  %489 = load i64, ptr %6, align 8, !tbaa !9
  %490 = load i64, ptr %7, align 8, !tbaa !9
  %491 = load i64, ptr %8, align 8, !tbaa !9
  %492 = load i32, ptr %3, align 4, !tbaa !5
  %493 = load ptr, ptr %9, align 8, !tbaa !11
  %494 = call i32 @libxsmm_mhd_read(ptr noundef %487, ptr noundef null, ptr noundef %488, ptr noundef null, i64 noundef %489, i64 noundef %490, i64 noundef %491, i32 noundef %492, ptr noundef null, ptr noundef %493, ptr noundef @libxsmm_mhd_element_comparison, ptr noundef null, i64 noundef 0)
  store i32 %494, ptr %2, align 4, !tbaa !5
  br label %496

495:                                              ; preds = %339, %336, %333
  store i32 1, ptr %2, align 4, !tbaa !5
  br label %496

496:                                              ; preds = %495, %480
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #8
  br label %764

497:                                              ; preds = %0
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #8
  %498 = getelementptr inbounds [2 x i64], ptr %4, i64 0, i64 0
  %499 = load i64, ptr %498, align 16, !tbaa !9
  %500 = getelementptr inbounds [2 x i64], ptr %4, i64 0, i64 1
  %501 = load i64, ptr %500, align 8, !tbaa !9
  %502 = mul i64 %499, %501
  store i64 %502, ptr %28, align 8, !tbaa !9
  %503 = load i64, ptr %5, align 8, !tbaa !9
  %504 = load i64, ptr %28, align 8, !tbaa !9
  %505 = icmp ult i64 %503, %504
  br i1 %505, label %506, label %602

506:                                              ; preds = %497
  %507 = load ptr, ptr %10, align 8, !tbaa !11
  call void @free(ptr noundef %507) #8
  %508 = load ptr, ptr %9, align 8, !tbaa !11
  call void @free(ptr noundef %508) #8
  %509 = load i64, ptr %28, align 8, !tbaa !9
  %510 = mul i64 2, %509
  %511 = call noalias ptr @malloc(i64 noundef %510) #9
  store ptr %511, ptr %10, align 8, !tbaa !11
  %512 = load i32, ptr %3, align 4, !tbaa !5
  %513 = icmp eq i32 0, %512
  br i1 %513, label %514, label %515

514:                                              ; preds = %506
  br label %595

515:                                              ; preds = %506
  %516 = load i32, ptr %3, align 4, !tbaa !5
  %517 = icmp eq i32 1, %516
  br i1 %517, label %518, label %519

518:                                              ; preds = %515
  br label %593

519:                                              ; preds = %515
  %520 = load i32, ptr %3, align 4, !tbaa !5
  %521 = icmp eq i32 2, %520
  br i1 %521, label %522, label %523

522:                                              ; preds = %519
  br label %591

523:                                              ; preds = %519
  %524 = load i32, ptr %3, align 4, !tbaa !5
  %525 = icmp eq i32 3, %524
  br i1 %525, label %526, label %527

526:                                              ; preds = %523
  br label %589

527:                                              ; preds = %523
  %528 = load i32, ptr %3, align 4, !tbaa !5
  %529 = icmp eq i32 4, %528
  br i1 %529, label %530, label %531

530:                                              ; preds = %527
  br label %587

531:                                              ; preds = %527
  %532 = load i32, ptr %3, align 4, !tbaa !5
  %533 = icmp eq i32 5, %532
  br i1 %533, label %534, label %535

534:                                              ; preds = %531
  br label %585

535:                                              ; preds = %531
  %536 = load i32, ptr %3, align 4, !tbaa !5
  %537 = icmp eq i32 6, %536
  br i1 %537, label %538, label %539

538:                                              ; preds = %535
  br label %583

539:                                              ; preds = %535
  %540 = load i32, ptr %3, align 4, !tbaa !5
  %541 = icmp eq i32 7, %540
  br i1 %541, label %542, label %543

542:                                              ; preds = %539
  br label %581

543:                                              ; preds = %539
  %544 = load i32, ptr %3, align 4, !tbaa !5
  %545 = icmp eq i32 8, %544
  br i1 %545, label %546, label %547

546:                                              ; preds = %543
  br label %579

547:                                              ; preds = %543
  %548 = load i32, ptr %3, align 4, !tbaa !5
  %549 = icmp eq i32 9, %548
  br i1 %549, label %550, label %551

550:                                              ; preds = %547
  br label %577

551:                                              ; preds = %547
  %552 = load i32, ptr %3, align 4, !tbaa !5
  %553 = icmp eq i32 10, %552
  br i1 %553, label %554, label %555

554:                                              ; preds = %551
  br label %575

555:                                              ; preds = %551
  %556 = load i32, ptr %3, align 4, !tbaa !5
  %557 = icmp eq i32 11, %556
  br i1 %557, label %558, label %559

558:                                              ; preds = %555
  br label %573

559:                                              ; preds = %555
  %560 = load i32, ptr %3, align 4, !tbaa !5
  %561 = icmp eq i32 12, %560
  br i1 %561, label %562, label %563

562:                                              ; preds = %559
  br label %571

563:                                              ; preds = %559
  %564 = load i32, ptr %3, align 4, !tbaa !5
  %565 = icmp eq i32 13, %564
  br i1 %565, label %566, label %567

566:                                              ; preds = %563
  br label %569

567:                                              ; preds = %563
  call void @__assert_fail(ptr noundef @.str.1, ptr noundef @.str.2, i32 noundef 67, ptr noundef @__PRETTY_FUNCTION__.main) #10
  unreachable

568:                                              ; No predecessors!
  br label %569

569:                                              ; preds = %568, %566
  %570 = phi i32 [ 1, %566 ], [ 0, %568 ]
  br label %571

571:                                              ; preds = %569, %562
  %572 = phi i32 [ 1, %562 ], [ %570, %569 ]
  br label %573

573:                                              ; preds = %571, %558
  %574 = phi i32 [ 2, %558 ], [ %572, %571 ]
  br label %575

575:                                              ; preds = %573, %554
  %576 = phi i32 [ 2, %554 ], [ %574, %573 ]
  br label %577

577:                                              ; preds = %575, %550
  %578 = phi i32 [ 4, %550 ], [ %576, %575 ]
  br label %579

579:                                              ; preds = %577, %546
  %580 = phi i32 [ 4, %546 ], [ %578, %577 ]
  br label %581

581:                                              ; preds = %579, %542
  %582 = phi i32 [ 8, %542 ], [ %580, %579 ]
  br label %583

583:                                              ; preds = %581, %538
  %584 = phi i32 [ 8, %538 ], [ %582, %581 ]
  br label %585

585:                                              ; preds = %583, %534
  %586 = phi i32 [ 1, %534 ], [ %584, %583 ]
  br label %587

587:                                              ; preds = %585, %530
  %588 = phi i32 [ 1, %530 ], [ %586, %585 ]
  br label %589

589:                                              ; preds = %587, %526
  %590 = phi i32 [ 2, %526 ], [ %588, %587 ]
  br label %591

591:                                              ; preds = %589, %522
  %592 = phi i32 [ 2, %522 ], [ %590, %589 ]
  br label %593

593:                                              ; preds = %591, %518
  %594 = phi i32 [ 4, %518 ], [ %592, %591 ]
  br label %595

595:                                              ; preds = %593, %514
  %596 = phi i32 [ 8, %514 ], [ %594, %593 ]
  %597 = sext i32 %596 to i64
  %598 = load i64, ptr %28, align 8, !tbaa !9
  %599 = mul i64 %597, %598
  %600 = call noalias ptr @malloc(i64 noundef %599) #9
  store ptr %600, ptr %9, align 8, !tbaa !11
  %601 = load i64, ptr %28, align 8, !tbaa !9
  store i64 %601, ptr %5, align 8, !tbaa !9
  br label %602

602:                                              ; preds = %595, %497
  %603 = load ptr, ptr %9, align 8, !tbaa !11
  %604 = icmp ne ptr null, %603
  br i1 %604, label %605, label %762

605:                                              ; preds = %602
  %606 = load ptr, ptr %10, align 8, !tbaa !11
  %607 = icmp ne ptr null, %606
  br i1 %607, label %608, label %762

608:                                              ; preds = %605
  %609 = load i32, ptr %2, align 4, !tbaa !5
  %610 = icmp eq i32 0, %609
  br i1 %610, label %611, label %762

611:                                              ; preds = %608
  br label %612

612:                                              ; preds = %611
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #8
  store double 1.000000e+00, ptr %29, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #8
  %613 = load double, ptr %29, align 8, !tbaa !13
  %614 = load i64, ptr %28, align 8, !tbaa !9
  %615 = uitofp i64 %614 to double
  %616 = fdiv double 1.000000e+00, %615
  %617 = load i64, ptr %28, align 8, !tbaa !9
  %618 = uitofp i64 %617 to double
  %619 = fdiv double 1.000000e+00, %618
  %620 = call double @llvm.fmuladd.f64(double %613, double %616, double %619)
  store double %620, ptr %30, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #8
  %621 = getelementptr inbounds [2 x i64], ptr %4, i64 0, i64 0
  %622 = load i64, ptr %621, align 16, !tbaa !9
  %623 = trunc i64 %622 to i32
  store i32 %623, ptr %31, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #8
  %624 = getelementptr inbounds [2 x i64], ptr %4, i64 0, i64 1
  %625 = load i64, ptr %624, align 8, !tbaa !9
  %626 = trunc i64 %625 to i32
  store i32 %626, ptr %32, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #8
  %627 = getelementptr inbounds [2 x i64], ptr %4, i64 0, i64 0
  %628 = load i64, ptr %627, align 16, !tbaa !9
  %629 = trunc i64 %628 to i32
  store i32 %629, ptr %33, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #8
  store i32 0, ptr %34, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #8
  store i32 0, ptr %35, align 4, !tbaa !5
  %630 = load double, ptr %29, align 8, !tbaa !13
  %631 = fcmp une double 0.000000e+00, %630
  br i1 %631, label %632, label %691

632:                                              ; preds = %612
  store i32 0, ptr %34, align 4, !tbaa !5
  br label %633

633:                                              ; preds = %687, %632
  %634 = load i32, ptr %34, align 4, !tbaa !5
  %635 = load i32, ptr %32, align 4, !tbaa !5
  %636 = icmp slt i32 %634, %635
  br i1 %636, label %637, label %690

637:                                              ; preds = %633
  store i32 0, ptr %35, align 4, !tbaa !5
  br label %638

638:                                              ; preds = %663, %637
  %639 = load i32, ptr %35, align 4, !tbaa !5
  %640 = load i32, ptr %31, align 4, !tbaa !5
  %641 = icmp slt i32 %639, %640
  br i1 %641, label %642, label %666

642:                                              ; preds = %638
  call void @llvm.lifetime.start.p0(i64 4, ptr %36) #8
  %643 = load i32, ptr %34, align 4, !tbaa !5
  %644 = load i32, ptr %33, align 4, !tbaa !5
  %645 = mul nsw i32 %643, %644
  %646 = load i32, ptr %35, align 4, !tbaa !5
  %647 = add nsw i32 %645, %646
  store i32 %647, ptr %36, align 4, !tbaa !5
  %648 = load double, ptr %30, align 8, !tbaa !13
  %649 = load i32, ptr %34, align 4, !tbaa !5
  %650 = sitofp i32 %649 to double
  %651 = load i32, ptr %31, align 4, !tbaa !5
  %652 = sitofp i32 %651 to double
  %653 = call double @llvm.fmuladd.f64(double %650, double %652, double 1.000000e+00)
  %654 = load i32, ptr %35, align 4, !tbaa !5
  %655 = sitofp i32 %654 to double
  %656 = fadd double %653, %655
  %657 = fmul double %648, %656
  %658 = fptrunc double %657 to float
  %659 = load ptr, ptr %9, align 8, !tbaa !11
  %660 = load i32, ptr %36, align 4, !tbaa !5
  %661 = sext i32 %660 to i64
  %662 = getelementptr inbounds float, ptr %659, i64 %661
  store float %658, ptr %662, align 4, !tbaa !15
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #8
  br label %663

663:                                              ; preds = %642
  %664 = load i32, ptr %35, align 4, !tbaa !5
  %665 = add nsw i32 %664, 1
  store i32 %665, ptr %35, align 4, !tbaa !5
  br label %638, !llvm.loop !23

666:                                              ; preds = %638
  br label %667

667:                                              ; preds = %683, %666
  %668 = load i32, ptr %35, align 4, !tbaa !5
  %669 = load i32, ptr %33, align 4, !tbaa !5
  %670 = icmp slt i32 %668, %669
  br i1 %670, label %671, label %686

671:                                              ; preds = %667
  call void @llvm.lifetime.start.p0(i64 4, ptr %37) #8
  %672 = load i32, ptr %34, align 4, !tbaa !5
  %673 = load i32, ptr %33, align 4, !tbaa !5
  %674 = mul nsw i32 %672, %673
  %675 = load i32, ptr %35, align 4, !tbaa !5
  %676 = add nsw i32 %674, %675
  store i32 %676, ptr %37, align 4, !tbaa !5
  %677 = load double, ptr %29, align 8, !tbaa !13
  %678 = fptrunc double %677 to float
  %679 = load ptr, ptr %9, align 8, !tbaa !11
  %680 = load i32, ptr %37, align 4, !tbaa !5
  %681 = sext i32 %680 to i64
  %682 = getelementptr inbounds float, ptr %679, i64 %681
  store float %678, ptr %682, align 4, !tbaa !15
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #8
  br label %683

683:                                              ; preds = %671
  %684 = load i32, ptr %35, align 4, !tbaa !5
  %685 = add nsw i32 %684, 1
  store i32 %685, ptr %35, align 4, !tbaa !5
  br label %667, !llvm.loop !24

686:                                              ; preds = %667
  br label %687

687:                                              ; preds = %686
  %688 = load i32, ptr %34, align 4, !tbaa !5
  %689 = add nsw i32 %688, 1
  store i32 %689, ptr %34, align 4, !tbaa !5
  br label %633, !llvm.loop !25

690:                                              ; preds = %633
  br label %747

691:                                              ; preds = %612
  call void @llvm.lifetime.start.p0(i64 4, ptr %38) #8
  %692 = load i32, ptr %32, align 4, !tbaa !5
  %693 = load i32, ptr %33, align 4, !tbaa !5
  %694 = mul nsw i32 %692, %693
  store i32 %694, ptr %38, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %39) #8
  %695 = load i32, ptr %38, align 4, !tbaa !5
  %696 = add nsw i32 %695, 1
  %697 = sdiv i32 %696, 2
  %698 = sitofp i32 %697 to float
  store float %698, ptr %39, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %40) #8
  %699 = load i64, ptr %28, align 8, !tbaa !9
  %700 = uitofp i64 %699 to double
  %701 = fdiv double 1.000000e+00, %700
  %702 = fptrunc double %701 to float
  %703 = load float, ptr %39, align 4, !tbaa !15
  %704 = fdiv float %702, %703
  store float %704, ptr %40, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 8, ptr %41) #8
  %705 = load i32, ptr %38, align 4, !tbaa !5
  %706 = sext i32 %705 to i64
  %707 = call i64 @libxsmm_coprime2(i64 noundef %706)
  store i64 %707, ptr %41, align 8, !tbaa !9
  store i32 0, ptr %34, align 4, !tbaa !5
  br label %708

708:                                              ; preds = %743, %691
  %709 = load i32, ptr %34, align 4, !tbaa !5
  %710 = load i32, ptr %32, align 4, !tbaa !5
  %711 = icmp slt i32 %709, %710
  br i1 %711, label %712, label %746

712:                                              ; preds = %708
  store i32 0, ptr %35, align 4, !tbaa !5
  br label %713

713:                                              ; preds = %739, %712
  %714 = load i32, ptr %35, align 4, !tbaa !5
  %715 = load i32, ptr %33, align 4, !tbaa !5
  %716 = icmp slt i32 %714, %715
  br i1 %716, label %717, label %742

717:                                              ; preds = %713
  call void @llvm.lifetime.start.p0(i64 4, ptr %42) #8
  %718 = load i32, ptr %34, align 4, !tbaa !5
  %719 = load i32, ptr %33, align 4, !tbaa !5
  %720 = mul nsw i32 %718, %719
  %721 = load i32, ptr %35, align 4, !tbaa !5
  %722 = add nsw i32 %720, %721
  store i32 %722, ptr %42, align 4, !tbaa !5
  %723 = load float, ptr %40, align 4, !tbaa !15
  %724 = load i64, ptr %41, align 8, !tbaa !9
  %725 = load i32, ptr %42, align 4, !tbaa !5
  %726 = sext i32 %725 to i64
  %727 = mul i64 %724, %726
  %728 = load i32, ptr %38, align 4, !tbaa !5
  %729 = sext i32 %728 to i64
  %730 = urem i64 %727, %729
  %731 = uitofp i64 %730 to float
  %732 = load float, ptr %39, align 4, !tbaa !15
  %733 = fsub float %731, %732
  %734 = fmul float %723, %733
  %735 = load ptr, ptr %9, align 8, !tbaa !11
  %736 = load i32, ptr %42, align 4, !tbaa !5
  %737 = sext i32 %736 to i64
  %738 = getelementptr inbounds float, ptr %735, i64 %737
  store float %734, ptr %738, align 4, !tbaa !15
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #8
  br label %739

739:                                              ; preds = %717
  %740 = load i32, ptr %35, align 4, !tbaa !5
  %741 = add nsw i32 %740, 1
  store i32 %741, ptr %35, align 4, !tbaa !5
  br label %713, !llvm.loop !26

742:                                              ; preds = %713
  br label %743

743:                                              ; preds = %742
  %744 = load i32, ptr %34, align 4, !tbaa !5
  %745 = add nsw i32 %744, 1
  store i32 %745, ptr %34, align 4, !tbaa !5
  br label %708, !llvm.loop !27

746:                                              ; preds = %708
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #8
  br label %747

747:                                              ; preds = %746, %690
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #8
  br label %748

748:                                              ; preds = %747
  br label %749

749:                                              ; preds = %748
  %750 = load ptr, ptr %9, align 8, !tbaa !11
  %751 = load ptr, ptr %10, align 8, !tbaa !11
  %752 = load i64, ptr %28, align 8, !tbaa !9
  call void @libxsmm_truncate_convert_f32_bf16(ptr noundef %750, ptr noundef %751, i64 noundef %752)
  %753 = load ptr, ptr %10, align 8, !tbaa !11
  %754 = load ptr, ptr %9, align 8, !tbaa !11
  %755 = load i64, ptr %28, align 8, !tbaa !9
  call void @libxsmm_convert_bf16_f32(ptr noundef %753, ptr noundef %754, i64 noundef %755)
  %756 = getelementptr inbounds [2 x i64], ptr %4, i64 0, i64 0
  %757 = load i64, ptr %6, align 8, !tbaa !9
  %758 = load i64, ptr %7, align 8, !tbaa !9
  %759 = load i32, ptr %3, align 4, !tbaa !5
  %760 = load ptr, ptr %9, align 8, !tbaa !11
  %761 = call i32 @libxsmm_mhd_write(ptr noundef @.str, ptr noundef null, ptr noundef %756, ptr noundef null, i64 noundef %757, i64 noundef %758, i32 noundef %759, ptr noundef null, ptr noundef %760, ptr noundef null, ptr noundef null, ptr noundef null, i64 noundef 0)
  store i32 %761, ptr %2, align 4, !tbaa !5
  br label %763

762:                                              ; preds = %608, %605, %602
  store i32 1, ptr %2, align 4, !tbaa !5
  br label %763

763:                                              ; preds = %762, %749
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #8
  br label %764

764:                                              ; preds = %763, %496
  %765 = getelementptr inbounds [1024 x i8], ptr %11, i64 0, i64 0
  %766 = getelementptr inbounds [2 x i64], ptr %4, i64 0, i64 0
  %767 = call i32 @libxsmm_mhd_read_header(ptr noundef @.str.3, i64 noundef 1024, ptr noundef %765, ptr noundef %6, ptr noundef %766, ptr noundef %7, ptr noundef %3, ptr noundef %8, ptr noundef null)
  %768 = icmp eq i32 0, %767
  br i1 %768, label %769, label %1038

769:                                              ; preds = %764
  call void @llvm.lifetime.start.p0(i64 8, ptr %43) #8
  %770 = getelementptr inbounds [2 x i64], ptr %4, i64 0, i64 0
  %771 = load i64, ptr %770, align 16, !tbaa !9
  %772 = getelementptr inbounds [2 x i64], ptr %4, i64 0, i64 1
  %773 = load i64, ptr %772, align 8, !tbaa !9
  %774 = mul i64 %771, %773
  store i64 %774, ptr %43, align 8, !tbaa !9
  %775 = load i64, ptr %5, align 8, !tbaa !9
  %776 = load i64, ptr %43, align 8, !tbaa !9
  %777 = icmp ult i64 %775, %776
  br i1 %777, label %778, label %874

778:                                              ; preds = %769
  %779 = load ptr, ptr %10, align 8, !tbaa !11
  call void @free(ptr noundef %779) #8
  %780 = load ptr, ptr %9, align 8, !tbaa !11
  call void @free(ptr noundef %780) #8
  %781 = load i64, ptr %43, align 8, !tbaa !9
  %782 = mul i64 2, %781
  %783 = call noalias ptr @malloc(i64 noundef %782) #9
  store ptr %783, ptr %10, align 8, !tbaa !11
  %784 = load i32, ptr %3, align 4, !tbaa !5
  %785 = icmp eq i32 0, %784
  br i1 %785, label %786, label %787

786:                                              ; preds = %778
  br label %867

787:                                              ; preds = %778
  %788 = load i32, ptr %3, align 4, !tbaa !5
  %789 = icmp eq i32 1, %788
  br i1 %789, label %790, label %791

790:                                              ; preds = %787
  br label %865

791:                                              ; preds = %787
  %792 = load i32, ptr %3, align 4, !tbaa !5
  %793 = icmp eq i32 2, %792
  br i1 %793, label %794, label %795

794:                                              ; preds = %791
  br label %863

795:                                              ; preds = %791
  %796 = load i32, ptr %3, align 4, !tbaa !5
  %797 = icmp eq i32 3, %796
  br i1 %797, label %798, label %799

798:                                              ; preds = %795
  br label %861

799:                                              ; preds = %795
  %800 = load i32, ptr %3, align 4, !tbaa !5
  %801 = icmp eq i32 4, %800
  br i1 %801, label %802, label %803

802:                                              ; preds = %799
  br label %859

803:                                              ; preds = %799
  %804 = load i32, ptr %3, align 4, !tbaa !5
  %805 = icmp eq i32 5, %804
  br i1 %805, label %806, label %807

806:                                              ; preds = %803
  br label %857

807:                                              ; preds = %803
  %808 = load i32, ptr %3, align 4, !tbaa !5
  %809 = icmp eq i32 6, %808
  br i1 %809, label %810, label %811

810:                                              ; preds = %807
  br label %855

811:                                              ; preds = %807
  %812 = load i32, ptr %3, align 4, !tbaa !5
  %813 = icmp eq i32 7, %812
  br i1 %813, label %814, label %815

814:                                              ; preds = %811
  br label %853

815:                                              ; preds = %811
  %816 = load i32, ptr %3, align 4, !tbaa !5
  %817 = icmp eq i32 8, %816
  br i1 %817, label %818, label %819

818:                                              ; preds = %815
  br label %851

819:                                              ; preds = %815
  %820 = load i32, ptr %3, align 4, !tbaa !5
  %821 = icmp eq i32 9, %820
  br i1 %821, label %822, label %823

822:                                              ; preds = %819
  br label %849

823:                                              ; preds = %819
  %824 = load i32, ptr %3, align 4, !tbaa !5
  %825 = icmp eq i32 10, %824
  br i1 %825, label %826, label %827

826:                                              ; preds = %823
  br label %847

827:                                              ; preds = %823
  %828 = load i32, ptr %3, align 4, !tbaa !5
  %829 = icmp eq i32 11, %828
  br i1 %829, label %830, label %831

830:                                              ; preds = %827
  br label %845

831:                                              ; preds = %827
  %832 = load i32, ptr %3, align 4, !tbaa !5
  %833 = icmp eq i32 12, %832
  br i1 %833, label %834, label %835

834:                                              ; preds = %831
  br label %843

835:                                              ; preds = %831
  %836 = load i32, ptr %3, align 4, !tbaa !5
  %837 = icmp eq i32 13, %836
  br i1 %837, label %838, label %839

838:                                              ; preds = %835
  br label %841

839:                                              ; preds = %835
  call void @__assert_fail(ptr noundef @.str.1, ptr noundef @.str.2, i32 noundef 89, ptr noundef @__PRETTY_FUNCTION__.main) #10
  unreachable

840:                                              ; No predecessors!
  br label %841

841:                                              ; preds = %840, %838
  %842 = phi i32 [ 1, %838 ], [ 0, %840 ]
  br label %843

843:                                              ; preds = %841, %834
  %844 = phi i32 [ 1, %834 ], [ %842, %841 ]
  br label %845

845:                                              ; preds = %843, %830
  %846 = phi i32 [ 2, %830 ], [ %844, %843 ]
  br label %847

847:                                              ; preds = %845, %826
  %848 = phi i32 [ 2, %826 ], [ %846, %845 ]
  br label %849

849:                                              ; preds = %847, %822
  %850 = phi i32 [ 4, %822 ], [ %848, %847 ]
  br label %851

851:                                              ; preds = %849, %818
  %852 = phi i32 [ 4, %818 ], [ %850, %849 ]
  br label %853

853:                                              ; preds = %851, %814
  %854 = phi i32 [ 8, %814 ], [ %852, %851 ]
  br label %855

855:                                              ; preds = %853, %810
  %856 = phi i32 [ 8, %810 ], [ %854, %853 ]
  br label %857

857:                                              ; preds = %855, %806
  %858 = phi i32 [ 1, %806 ], [ %856, %855 ]
  br label %859

859:                                              ; preds = %857, %802
  %860 = phi i32 [ 1, %802 ], [ %858, %857 ]
  br label %861

861:                                              ; preds = %859, %798
  %862 = phi i32 [ 2, %798 ], [ %860, %859 ]
  br label %863

863:                                              ; preds = %861, %794
  %864 = phi i32 [ 2, %794 ], [ %862, %861 ]
  br label %865

865:                                              ; preds = %863, %790
  %866 = phi i32 [ 4, %790 ], [ %864, %863 ]
  br label %867

867:                                              ; preds = %865, %786
  %868 = phi i32 [ 8, %786 ], [ %866, %865 ]
  %869 = sext i32 %868 to i64
  %870 = load i64, ptr %43, align 8, !tbaa !9
  %871 = mul i64 %869, %870
  %872 = call noalias ptr @malloc(i64 noundef %871) #9
  store ptr %872, ptr %9, align 8, !tbaa !11
  %873 = load i64, ptr %43, align 8, !tbaa !9
  store i64 %873, ptr %5, align 8, !tbaa !9
  br label %874

874:                                              ; preds = %867, %769
  %875 = load ptr, ptr %9, align 8, !tbaa !11
  %876 = icmp ne ptr null, %875
  br i1 %876, label %877, label %1036

877:                                              ; preds = %874
  %878 = load ptr, ptr %10, align 8, !tbaa !11
  %879 = icmp ne ptr null, %878
  br i1 %879, label %880, label %1036

880:                                              ; preds = %877
  %881 = load i32, ptr %2, align 4, !tbaa !5
  %882 = icmp eq i32 0, %881
  br i1 %882, label %883, label %1036

883:                                              ; preds = %880
  br label %884

884:                                              ; preds = %883
  call void @llvm.lifetime.start.p0(i64 8, ptr %44) #8
  store double 1.000000e+00, ptr %44, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr %45) #8
  %885 = load double, ptr %44, align 8, !tbaa !13
  %886 = load i64, ptr %43, align 8, !tbaa !9
  %887 = uitofp i64 %886 to double
  %888 = fdiv double 1.000000e+00, %887
  %889 = load i64, ptr %43, align 8, !tbaa !9
  %890 = uitofp i64 %889 to double
  %891 = fdiv double 1.000000e+00, %890
  %892 = call double @llvm.fmuladd.f64(double %885, double %888, double %891)
  store double %892, ptr %45, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 4, ptr %46) #8
  %893 = getelementptr inbounds [2 x i64], ptr %4, i64 0, i64 0
  %894 = load i64, ptr %893, align 16, !tbaa !9
  %895 = trunc i64 %894 to i32
  store i32 %895, ptr %46, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %47) #8
  %896 = getelementptr inbounds [2 x i64], ptr %4, i64 0, i64 1
  %897 = load i64, ptr %896, align 8, !tbaa !9
  %898 = trunc i64 %897 to i32
  store i32 %898, ptr %47, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %48) #8
  %899 = getelementptr inbounds [2 x i64], ptr %4, i64 0, i64 0
  %900 = load i64, ptr %899, align 16, !tbaa !9
  %901 = trunc i64 %900 to i32
  store i32 %901, ptr %48, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %49) #8
  store i32 0, ptr %49, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %50) #8
  store i32 0, ptr %50, align 4, !tbaa !5
  %902 = load double, ptr %44, align 8, !tbaa !13
  %903 = fcmp une double 0.000000e+00, %902
  br i1 %903, label %904, label %963

904:                                              ; preds = %884
  store i32 0, ptr %49, align 4, !tbaa !5
  br label %905

905:                                              ; preds = %959, %904
  %906 = load i32, ptr %49, align 4, !tbaa !5
  %907 = load i32, ptr %47, align 4, !tbaa !5
  %908 = icmp slt i32 %906, %907
  br i1 %908, label %909, label %962

909:                                              ; preds = %905
  store i32 0, ptr %50, align 4, !tbaa !5
  br label %910

910:                                              ; preds = %935, %909
  %911 = load i32, ptr %50, align 4, !tbaa !5
  %912 = load i32, ptr %46, align 4, !tbaa !5
  %913 = icmp slt i32 %911, %912
  br i1 %913, label %914, label %938

914:                                              ; preds = %910
  call void @llvm.lifetime.start.p0(i64 4, ptr %51) #8
  %915 = load i32, ptr %49, align 4, !tbaa !5
  %916 = load i32, ptr %48, align 4, !tbaa !5
  %917 = mul nsw i32 %915, %916
  %918 = load i32, ptr %50, align 4, !tbaa !5
  %919 = add nsw i32 %917, %918
  store i32 %919, ptr %51, align 4, !tbaa !5
  %920 = load double, ptr %45, align 8, !tbaa !13
  %921 = load i32, ptr %49, align 4, !tbaa !5
  %922 = sitofp i32 %921 to double
  %923 = load i32, ptr %46, align 4, !tbaa !5
  %924 = sitofp i32 %923 to double
  %925 = call double @llvm.fmuladd.f64(double %922, double %924, double 1.000000e+00)
  %926 = load i32, ptr %50, align 4, !tbaa !5
  %927 = sitofp i32 %926 to double
  %928 = fadd double %925, %927
  %929 = fmul double %920, %928
  %930 = fptrunc double %929 to float
  %931 = load ptr, ptr %9, align 8, !tbaa !11
  %932 = load i32, ptr %51, align 4, !tbaa !5
  %933 = sext i32 %932 to i64
  %934 = getelementptr inbounds float, ptr %931, i64 %933
  store float %930, ptr %934, align 4, !tbaa !15
  call void @llvm.lifetime.end.p0(i64 4, ptr %51) #8
  br label %935

935:                                              ; preds = %914
  %936 = load i32, ptr %50, align 4, !tbaa !5
  %937 = add nsw i32 %936, 1
  store i32 %937, ptr %50, align 4, !tbaa !5
  br label %910, !llvm.loop !28

938:                                              ; preds = %910
  br label %939

939:                                              ; preds = %955, %938
  %940 = load i32, ptr %50, align 4, !tbaa !5
  %941 = load i32, ptr %48, align 4, !tbaa !5
  %942 = icmp slt i32 %940, %941
  br i1 %942, label %943, label %958

943:                                              ; preds = %939
  call void @llvm.lifetime.start.p0(i64 4, ptr %52) #8
  %944 = load i32, ptr %49, align 4, !tbaa !5
  %945 = load i32, ptr %48, align 4, !tbaa !5
  %946 = mul nsw i32 %944, %945
  %947 = load i32, ptr %50, align 4, !tbaa !5
  %948 = add nsw i32 %946, %947
  store i32 %948, ptr %52, align 4, !tbaa !5
  %949 = load double, ptr %44, align 8, !tbaa !13
  %950 = fptrunc double %949 to float
  %951 = load ptr, ptr %9, align 8, !tbaa !11
  %952 = load i32, ptr %52, align 4, !tbaa !5
  %953 = sext i32 %952 to i64
  %954 = getelementptr inbounds float, ptr %951, i64 %953
  store float %950, ptr %954, align 4, !tbaa !15
  call void @llvm.lifetime.end.p0(i64 4, ptr %52) #8
  br label %955

955:                                              ; preds = %943
  %956 = load i32, ptr %50, align 4, !tbaa !5
  %957 = add nsw i32 %956, 1
  store i32 %957, ptr %50, align 4, !tbaa !5
  br label %939, !llvm.loop !29

958:                                              ; preds = %939
  br label %959

959:                                              ; preds = %958
  %960 = load i32, ptr %49, align 4, !tbaa !5
  %961 = add nsw i32 %960, 1
  store i32 %961, ptr %49, align 4, !tbaa !5
  br label %905, !llvm.loop !30

962:                                              ; preds = %905
  br label %1019

963:                                              ; preds = %884
  call void @llvm.lifetime.start.p0(i64 4, ptr %53) #8
  %964 = load i32, ptr %47, align 4, !tbaa !5
  %965 = load i32, ptr %48, align 4, !tbaa !5
  %966 = mul nsw i32 %964, %965
  store i32 %966, ptr %53, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %54) #8
  %967 = load i32, ptr %53, align 4, !tbaa !5
  %968 = add nsw i32 %967, 1
  %969 = sdiv i32 %968, 2
  %970 = sitofp i32 %969 to float
  store float %970, ptr %54, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %55) #8
  %971 = load i64, ptr %43, align 8, !tbaa !9
  %972 = uitofp i64 %971 to double
  %973 = fdiv double 1.000000e+00, %972
  %974 = fptrunc double %973 to float
  %975 = load float, ptr %54, align 4, !tbaa !15
  %976 = fdiv float %974, %975
  store float %976, ptr %55, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 8, ptr %56) #8
  %977 = load i32, ptr %53, align 4, !tbaa !5
  %978 = sext i32 %977 to i64
  %979 = call i64 @libxsmm_coprime2(i64 noundef %978)
  store i64 %979, ptr %56, align 8, !tbaa !9
  store i32 0, ptr %49, align 4, !tbaa !5
  br label %980

980:                                              ; preds = %1015, %963
  %981 = load i32, ptr %49, align 4, !tbaa !5
  %982 = load i32, ptr %47, align 4, !tbaa !5
  %983 = icmp slt i32 %981, %982
  br i1 %983, label %984, label %1018

984:                                              ; preds = %980
  store i32 0, ptr %50, align 4, !tbaa !5
  br label %985

985:                                              ; preds = %1011, %984
  %986 = load i32, ptr %50, align 4, !tbaa !5
  %987 = load i32, ptr %48, align 4, !tbaa !5
  %988 = icmp slt i32 %986, %987
  br i1 %988, label %989, label %1014

989:                                              ; preds = %985
  call void @llvm.lifetime.start.p0(i64 4, ptr %57) #8
  %990 = load i32, ptr %49, align 4, !tbaa !5
  %991 = load i32, ptr %48, align 4, !tbaa !5
  %992 = mul nsw i32 %990, %991
  %993 = load i32, ptr %50, align 4, !tbaa !5
  %994 = add nsw i32 %992, %993
  store i32 %994, ptr %57, align 4, !tbaa !5
  %995 = load float, ptr %55, align 4, !tbaa !15
  %996 = load i64, ptr %56, align 8, !tbaa !9
  %997 = load i32, ptr %57, align 4, !tbaa !5
  %998 = sext i32 %997 to i64
  %999 = mul i64 %996, %998
  %1000 = load i32, ptr %53, align 4, !tbaa !5
  %1001 = sext i32 %1000 to i64
  %1002 = urem i64 %999, %1001
  %1003 = uitofp i64 %1002 to float
  %1004 = load float, ptr %54, align 4, !tbaa !15
  %1005 = fsub float %1003, %1004
  %1006 = fmul float %995, %1005
  %1007 = load ptr, ptr %9, align 8, !tbaa !11
  %1008 = load i32, ptr %57, align 4, !tbaa !5
  %1009 = sext i32 %1008 to i64
  %1010 = getelementptr inbounds float, ptr %1007, i64 %1009
  store float %1006, ptr %1010, align 4, !tbaa !15
  call void @llvm.lifetime.end.p0(i64 4, ptr %57) #8
  br label %1011

1011:                                             ; preds = %989
  %1012 = load i32, ptr %50, align 4, !tbaa !5
  %1013 = add nsw i32 %1012, 1
  store i32 %1013, ptr %50, align 4, !tbaa !5
  br label %985, !llvm.loop !31

1014:                                             ; preds = %985
  br label %1015

1015:                                             ; preds = %1014
  %1016 = load i32, ptr %49, align 4, !tbaa !5
  %1017 = add nsw i32 %1016, 1
  store i32 %1017, ptr %49, align 4, !tbaa !5
  br label %980, !llvm.loop !32

1018:                                             ; preds = %980
  call void @llvm.lifetime.end.p0(i64 8, ptr %56) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %55) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %54) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %53) #8
  br label %1019

1019:                                             ; preds = %1018, %962
  call void @llvm.lifetime.end.p0(i64 4, ptr %50) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %49) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %48) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %47) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %46) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #8
  br label %1020

1020:                                             ; preds = %1019
  br label %1021

1021:                                             ; preds = %1020
  %1022 = load ptr, ptr %9, align 8, !tbaa !11
  %1023 = load ptr, ptr %10, align 8, !tbaa !11
  %1024 = load i64, ptr %43, align 8, !tbaa !9
  call void @libxsmm_rnaz_convert_fp32_bf16(ptr noundef %1022, ptr noundef %1023, i64 noundef %1024)
  %1025 = load ptr, ptr %10, align 8, !tbaa !11
  %1026 = load ptr, ptr %9, align 8, !tbaa !11
  %1027 = load i64, ptr %43, align 8, !tbaa !9
  call void @libxsmm_convert_bf16_f32(ptr noundef %1025, ptr noundef %1026, i64 noundef %1027)
  %1028 = getelementptr inbounds [1024 x i8], ptr %11, i64 0, i64 0
  %1029 = getelementptr inbounds [2 x i64], ptr %4, i64 0, i64 0
  %1030 = load i64, ptr %6, align 8, !tbaa !9
  %1031 = load i64, ptr %7, align 8, !tbaa !9
  %1032 = load i64, ptr %8, align 8, !tbaa !9
  %1033 = load i32, ptr %3, align 4, !tbaa !5
  %1034 = load ptr, ptr %9, align 8, !tbaa !11
  %1035 = call i32 @libxsmm_mhd_read(ptr noundef %1028, ptr noundef null, ptr noundef %1029, ptr noundef null, i64 noundef %1030, i64 noundef %1031, i64 noundef %1032, i32 noundef %1033, ptr noundef null, ptr noundef %1034, ptr noundef @libxsmm_mhd_element_comparison, ptr noundef null, i64 noundef 0)
  store i32 %1035, ptr %2, align 4, !tbaa !5
  br label %1037

1036:                                             ; preds = %880, %877, %874
  store i32 1, ptr %2, align 4, !tbaa !5
  br label %1037

1037:                                             ; preds = %1036, %1021
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #8
  br label %1305

1038:                                             ; preds = %764
  call void @llvm.lifetime.start.p0(i64 8, ptr %58) #8
  %1039 = getelementptr inbounds [2 x i64], ptr %4, i64 0, i64 0
  %1040 = load i64, ptr %1039, align 16, !tbaa !9
  %1041 = getelementptr inbounds [2 x i64], ptr %4, i64 0, i64 1
  %1042 = load i64, ptr %1041, align 8, !tbaa !9
  %1043 = mul i64 %1040, %1042
  store i64 %1043, ptr %58, align 8, !tbaa !9
  %1044 = load i64, ptr %5, align 8, !tbaa !9
  %1045 = load i64, ptr %58, align 8, !tbaa !9
  %1046 = icmp ult i64 %1044, %1045
  br i1 %1046, label %1047, label %1143

1047:                                             ; preds = %1038
  %1048 = load ptr, ptr %10, align 8, !tbaa !11
  call void @free(ptr noundef %1048) #8
  %1049 = load ptr, ptr %9, align 8, !tbaa !11
  call void @free(ptr noundef %1049) #8
  %1050 = load i64, ptr %58, align 8, !tbaa !9
  %1051 = mul i64 2, %1050
  %1052 = call noalias ptr @malloc(i64 noundef %1051) #9
  store ptr %1052, ptr %10, align 8, !tbaa !11
  %1053 = load i32, ptr %3, align 4, !tbaa !5
  %1054 = icmp eq i32 0, %1053
  br i1 %1054, label %1055, label %1056

1055:                                             ; preds = %1047
  br label %1136

1056:                                             ; preds = %1047
  %1057 = load i32, ptr %3, align 4, !tbaa !5
  %1058 = icmp eq i32 1, %1057
  br i1 %1058, label %1059, label %1060

1059:                                             ; preds = %1056
  br label %1134

1060:                                             ; preds = %1056
  %1061 = load i32, ptr %3, align 4, !tbaa !5
  %1062 = icmp eq i32 2, %1061
  br i1 %1062, label %1063, label %1064

1063:                                             ; preds = %1060
  br label %1132

1064:                                             ; preds = %1060
  %1065 = load i32, ptr %3, align 4, !tbaa !5
  %1066 = icmp eq i32 3, %1065
  br i1 %1066, label %1067, label %1068

1067:                                             ; preds = %1064
  br label %1130

1068:                                             ; preds = %1064
  %1069 = load i32, ptr %3, align 4, !tbaa !5
  %1070 = icmp eq i32 4, %1069
  br i1 %1070, label %1071, label %1072

1071:                                             ; preds = %1068
  br label %1128

1072:                                             ; preds = %1068
  %1073 = load i32, ptr %3, align 4, !tbaa !5
  %1074 = icmp eq i32 5, %1073
  br i1 %1074, label %1075, label %1076

1075:                                             ; preds = %1072
  br label %1126

1076:                                             ; preds = %1072
  %1077 = load i32, ptr %3, align 4, !tbaa !5
  %1078 = icmp eq i32 6, %1077
  br i1 %1078, label %1079, label %1080

1079:                                             ; preds = %1076
  br label %1124

1080:                                             ; preds = %1076
  %1081 = load i32, ptr %3, align 4, !tbaa !5
  %1082 = icmp eq i32 7, %1081
  br i1 %1082, label %1083, label %1084

1083:                                             ; preds = %1080
  br label %1122

1084:                                             ; preds = %1080
  %1085 = load i32, ptr %3, align 4, !tbaa !5
  %1086 = icmp eq i32 8, %1085
  br i1 %1086, label %1087, label %1088

1087:                                             ; preds = %1084
  br label %1120

1088:                                             ; preds = %1084
  %1089 = load i32, ptr %3, align 4, !tbaa !5
  %1090 = icmp eq i32 9, %1089
  br i1 %1090, label %1091, label %1092

1091:                                             ; preds = %1088
  br label %1118

1092:                                             ; preds = %1088
  %1093 = load i32, ptr %3, align 4, !tbaa !5
  %1094 = icmp eq i32 10, %1093
  br i1 %1094, label %1095, label %1096

1095:                                             ; preds = %1092
  br label %1116

1096:                                             ; preds = %1092
  %1097 = load i32, ptr %3, align 4, !tbaa !5
  %1098 = icmp eq i32 11, %1097
  br i1 %1098, label %1099, label %1100

1099:                                             ; preds = %1096
  br label %1114

1100:                                             ; preds = %1096
  %1101 = load i32, ptr %3, align 4, !tbaa !5
  %1102 = icmp eq i32 12, %1101
  br i1 %1102, label %1103, label %1104

1103:                                             ; preds = %1100
  br label %1112

1104:                                             ; preds = %1100
  %1105 = load i32, ptr %3, align 4, !tbaa !5
  %1106 = icmp eq i32 13, %1105
  br i1 %1106, label %1107, label %1108

1107:                                             ; preds = %1104
  br label %1110

1108:                                             ; preds = %1104
  call void @__assert_fail(ptr noundef @.str.1, ptr noundef @.str.2, i32 noundef 108, ptr noundef @__PRETTY_FUNCTION__.main) #10
  unreachable

1109:                                             ; No predecessors!
  br label %1110

1110:                                             ; preds = %1109, %1107
  %1111 = phi i32 [ 1, %1107 ], [ 0, %1109 ]
  br label %1112

1112:                                             ; preds = %1110, %1103
  %1113 = phi i32 [ 1, %1103 ], [ %1111, %1110 ]
  br label %1114

1114:                                             ; preds = %1112, %1099
  %1115 = phi i32 [ 2, %1099 ], [ %1113, %1112 ]
  br label %1116

1116:                                             ; preds = %1114, %1095
  %1117 = phi i32 [ 2, %1095 ], [ %1115, %1114 ]
  br label %1118

1118:                                             ; preds = %1116, %1091
  %1119 = phi i32 [ 4, %1091 ], [ %1117, %1116 ]
  br label %1120

1120:                                             ; preds = %1118, %1087
  %1121 = phi i32 [ 4, %1087 ], [ %1119, %1118 ]
  br label %1122

1122:                                             ; preds = %1120, %1083
  %1123 = phi i32 [ 8, %1083 ], [ %1121, %1120 ]
  br label %1124

1124:                                             ; preds = %1122, %1079
  %1125 = phi i32 [ 8, %1079 ], [ %1123, %1122 ]
  br label %1126

1126:                                             ; preds = %1124, %1075
  %1127 = phi i32 [ 1, %1075 ], [ %1125, %1124 ]
  br label %1128

1128:                                             ; preds = %1126, %1071
  %1129 = phi i32 [ 1, %1071 ], [ %1127, %1126 ]
  br label %1130

1130:                                             ; preds = %1128, %1067
  %1131 = phi i32 [ 2, %1067 ], [ %1129, %1128 ]
  br label %1132

1132:                                             ; preds = %1130, %1063
  %1133 = phi i32 [ 2, %1063 ], [ %1131, %1130 ]
  br label %1134

1134:                                             ; preds = %1132, %1059
  %1135 = phi i32 [ 4, %1059 ], [ %1133, %1132 ]
  br label %1136

1136:                                             ; preds = %1134, %1055
  %1137 = phi i32 [ 8, %1055 ], [ %1135, %1134 ]
  %1138 = sext i32 %1137 to i64
  %1139 = load i64, ptr %58, align 8, !tbaa !9
  %1140 = mul i64 %1138, %1139
  %1141 = call noalias ptr @malloc(i64 noundef %1140) #9
  store ptr %1141, ptr %9, align 8, !tbaa !11
  %1142 = load i64, ptr %58, align 8, !tbaa !9
  store i64 %1142, ptr %5, align 8, !tbaa !9
  br label %1143

1143:                                             ; preds = %1136, %1038
  %1144 = load ptr, ptr %9, align 8, !tbaa !11
  %1145 = icmp ne ptr null, %1144
  br i1 %1145, label %1146, label %1303

1146:                                             ; preds = %1143
  %1147 = load ptr, ptr %10, align 8, !tbaa !11
  %1148 = icmp ne ptr null, %1147
  br i1 %1148, label %1149, label %1303

1149:                                             ; preds = %1146
  %1150 = load i32, ptr %2, align 4, !tbaa !5
  %1151 = icmp eq i32 0, %1150
  br i1 %1151, label %1152, label %1303

1152:                                             ; preds = %1149
  br label %1153

1153:                                             ; preds = %1152
  call void @llvm.lifetime.start.p0(i64 8, ptr %59) #8
  store double 1.000000e+00, ptr %59, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr %60) #8
  %1154 = load double, ptr %59, align 8, !tbaa !13
  %1155 = load i64, ptr %58, align 8, !tbaa !9
  %1156 = uitofp i64 %1155 to double
  %1157 = fdiv double 1.000000e+00, %1156
  %1158 = load i64, ptr %58, align 8, !tbaa !9
  %1159 = uitofp i64 %1158 to double
  %1160 = fdiv double 1.000000e+00, %1159
  %1161 = call double @llvm.fmuladd.f64(double %1154, double %1157, double %1160)
  store double %1161, ptr %60, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 4, ptr %61) #8
  %1162 = getelementptr inbounds [2 x i64], ptr %4, i64 0, i64 0
  %1163 = load i64, ptr %1162, align 16, !tbaa !9
  %1164 = trunc i64 %1163 to i32
  store i32 %1164, ptr %61, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %62) #8
  %1165 = getelementptr inbounds [2 x i64], ptr %4, i64 0, i64 1
  %1166 = load i64, ptr %1165, align 8, !tbaa !9
  %1167 = trunc i64 %1166 to i32
  store i32 %1167, ptr %62, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %63) #8
  %1168 = getelementptr inbounds [2 x i64], ptr %4, i64 0, i64 0
  %1169 = load i64, ptr %1168, align 16, !tbaa !9
  %1170 = trunc i64 %1169 to i32
  store i32 %1170, ptr %63, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %64) #8
  store i32 0, ptr %64, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %65) #8
  store i32 0, ptr %65, align 4, !tbaa !5
  %1171 = load double, ptr %59, align 8, !tbaa !13
  %1172 = fcmp une double 0.000000e+00, %1171
  br i1 %1172, label %1173, label %1232

1173:                                             ; preds = %1153
  store i32 0, ptr %64, align 4, !tbaa !5
  br label %1174

1174:                                             ; preds = %1228, %1173
  %1175 = load i32, ptr %64, align 4, !tbaa !5
  %1176 = load i32, ptr %62, align 4, !tbaa !5
  %1177 = icmp slt i32 %1175, %1176
  br i1 %1177, label %1178, label %1231

1178:                                             ; preds = %1174
  store i32 0, ptr %65, align 4, !tbaa !5
  br label %1179

1179:                                             ; preds = %1204, %1178
  %1180 = load i32, ptr %65, align 4, !tbaa !5
  %1181 = load i32, ptr %61, align 4, !tbaa !5
  %1182 = icmp slt i32 %1180, %1181
  br i1 %1182, label %1183, label %1207

1183:                                             ; preds = %1179
  call void @llvm.lifetime.start.p0(i64 4, ptr %66) #8
  %1184 = load i32, ptr %64, align 4, !tbaa !5
  %1185 = load i32, ptr %63, align 4, !tbaa !5
  %1186 = mul nsw i32 %1184, %1185
  %1187 = load i32, ptr %65, align 4, !tbaa !5
  %1188 = add nsw i32 %1186, %1187
  store i32 %1188, ptr %66, align 4, !tbaa !5
  %1189 = load double, ptr %60, align 8, !tbaa !13
  %1190 = load i32, ptr %64, align 4, !tbaa !5
  %1191 = sitofp i32 %1190 to double
  %1192 = load i32, ptr %61, align 4, !tbaa !5
  %1193 = sitofp i32 %1192 to double
  %1194 = call double @llvm.fmuladd.f64(double %1191, double %1193, double 1.000000e+00)
  %1195 = load i32, ptr %65, align 4, !tbaa !5
  %1196 = sitofp i32 %1195 to double
  %1197 = fadd double %1194, %1196
  %1198 = fmul double %1189, %1197
  %1199 = fptrunc double %1198 to float
  %1200 = load ptr, ptr %9, align 8, !tbaa !11
  %1201 = load i32, ptr %66, align 4, !tbaa !5
  %1202 = sext i32 %1201 to i64
  %1203 = getelementptr inbounds float, ptr %1200, i64 %1202
  store float %1199, ptr %1203, align 4, !tbaa !15
  call void @llvm.lifetime.end.p0(i64 4, ptr %66) #8
  br label %1204

1204:                                             ; preds = %1183
  %1205 = load i32, ptr %65, align 4, !tbaa !5
  %1206 = add nsw i32 %1205, 1
  store i32 %1206, ptr %65, align 4, !tbaa !5
  br label %1179, !llvm.loop !33

1207:                                             ; preds = %1179
  br label %1208

1208:                                             ; preds = %1224, %1207
  %1209 = load i32, ptr %65, align 4, !tbaa !5
  %1210 = load i32, ptr %63, align 4, !tbaa !5
  %1211 = icmp slt i32 %1209, %1210
  br i1 %1211, label %1212, label %1227

1212:                                             ; preds = %1208
  call void @llvm.lifetime.start.p0(i64 4, ptr %67) #8
  %1213 = load i32, ptr %64, align 4, !tbaa !5
  %1214 = load i32, ptr %63, align 4, !tbaa !5
  %1215 = mul nsw i32 %1213, %1214
  %1216 = load i32, ptr %65, align 4, !tbaa !5
  %1217 = add nsw i32 %1215, %1216
  store i32 %1217, ptr %67, align 4, !tbaa !5
  %1218 = load double, ptr %59, align 8, !tbaa !13
  %1219 = fptrunc double %1218 to float
  %1220 = load ptr, ptr %9, align 8, !tbaa !11
  %1221 = load i32, ptr %67, align 4, !tbaa !5
  %1222 = sext i32 %1221 to i64
  %1223 = getelementptr inbounds float, ptr %1220, i64 %1222
  store float %1219, ptr %1223, align 4, !tbaa !15
  call void @llvm.lifetime.end.p0(i64 4, ptr %67) #8
  br label %1224

1224:                                             ; preds = %1212
  %1225 = load i32, ptr %65, align 4, !tbaa !5
  %1226 = add nsw i32 %1225, 1
  store i32 %1226, ptr %65, align 4, !tbaa !5
  br label %1208, !llvm.loop !34

1227:                                             ; preds = %1208
  br label %1228

1228:                                             ; preds = %1227
  %1229 = load i32, ptr %64, align 4, !tbaa !5
  %1230 = add nsw i32 %1229, 1
  store i32 %1230, ptr %64, align 4, !tbaa !5
  br label %1174, !llvm.loop !35

1231:                                             ; preds = %1174
  br label %1288

1232:                                             ; preds = %1153
  call void @llvm.lifetime.start.p0(i64 4, ptr %68) #8
  %1233 = load i32, ptr %62, align 4, !tbaa !5
  %1234 = load i32, ptr %63, align 4, !tbaa !5
  %1235 = mul nsw i32 %1233, %1234
  store i32 %1235, ptr %68, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %69) #8
  %1236 = load i32, ptr %68, align 4, !tbaa !5
  %1237 = add nsw i32 %1236, 1
  %1238 = sdiv i32 %1237, 2
  %1239 = sitofp i32 %1238 to float
  store float %1239, ptr %69, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %70) #8
  %1240 = load i64, ptr %58, align 8, !tbaa !9
  %1241 = uitofp i64 %1240 to double
  %1242 = fdiv double 1.000000e+00, %1241
  %1243 = fptrunc double %1242 to float
  %1244 = load float, ptr %69, align 4, !tbaa !15
  %1245 = fdiv float %1243, %1244
  store float %1245, ptr %70, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 8, ptr %71) #8
  %1246 = load i32, ptr %68, align 4, !tbaa !5
  %1247 = sext i32 %1246 to i64
  %1248 = call i64 @libxsmm_coprime2(i64 noundef %1247)
  store i64 %1248, ptr %71, align 8, !tbaa !9
  store i32 0, ptr %64, align 4, !tbaa !5
  br label %1249

1249:                                             ; preds = %1284, %1232
  %1250 = load i32, ptr %64, align 4, !tbaa !5
  %1251 = load i32, ptr %62, align 4, !tbaa !5
  %1252 = icmp slt i32 %1250, %1251
  br i1 %1252, label %1253, label %1287

1253:                                             ; preds = %1249
  store i32 0, ptr %65, align 4, !tbaa !5
  br label %1254

1254:                                             ; preds = %1280, %1253
  %1255 = load i32, ptr %65, align 4, !tbaa !5
  %1256 = load i32, ptr %63, align 4, !tbaa !5
  %1257 = icmp slt i32 %1255, %1256
  br i1 %1257, label %1258, label %1283

1258:                                             ; preds = %1254
  call void @llvm.lifetime.start.p0(i64 4, ptr %72) #8
  %1259 = load i32, ptr %64, align 4, !tbaa !5
  %1260 = load i32, ptr %63, align 4, !tbaa !5
  %1261 = mul nsw i32 %1259, %1260
  %1262 = load i32, ptr %65, align 4, !tbaa !5
  %1263 = add nsw i32 %1261, %1262
  store i32 %1263, ptr %72, align 4, !tbaa !5
  %1264 = load float, ptr %70, align 4, !tbaa !15
  %1265 = load i64, ptr %71, align 8, !tbaa !9
  %1266 = load i32, ptr %72, align 4, !tbaa !5
  %1267 = sext i32 %1266 to i64
  %1268 = mul i64 %1265, %1267
  %1269 = load i32, ptr %68, align 4, !tbaa !5
  %1270 = sext i32 %1269 to i64
  %1271 = urem i64 %1268, %1270
  %1272 = uitofp i64 %1271 to float
  %1273 = load float, ptr %69, align 4, !tbaa !15
  %1274 = fsub float %1272, %1273
  %1275 = fmul float %1264, %1274
  %1276 = load ptr, ptr %9, align 8, !tbaa !11
  %1277 = load i32, ptr %72, align 4, !tbaa !5
  %1278 = sext i32 %1277 to i64
  %1279 = getelementptr inbounds float, ptr %1276, i64 %1278
  store float %1275, ptr %1279, align 4, !tbaa !15
  call void @llvm.lifetime.end.p0(i64 4, ptr %72) #8
  br label %1280

1280:                                             ; preds = %1258
  %1281 = load i32, ptr %65, align 4, !tbaa !5
  %1282 = add nsw i32 %1281, 1
  store i32 %1282, ptr %65, align 4, !tbaa !5
  br label %1254, !llvm.loop !36

1283:                                             ; preds = %1254
  br label %1284

1284:                                             ; preds = %1283
  %1285 = load i32, ptr %64, align 4, !tbaa !5
  %1286 = add nsw i32 %1285, 1
  store i32 %1286, ptr %64, align 4, !tbaa !5
  br label %1249, !llvm.loop !37

1287:                                             ; preds = %1249
  call void @llvm.lifetime.end.p0(i64 8, ptr %71) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %70) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %69) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %68) #8
  br label %1288

1288:                                             ; preds = %1287, %1231
  call void @llvm.lifetime.end.p0(i64 4, ptr %65) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %64) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %63) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %62) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %61) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %60) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %59) #8
  br label %1289

1289:                                             ; preds = %1288
  br label %1290

1290:                                             ; preds = %1289
  %1291 = load ptr, ptr %9, align 8, !tbaa !11
  %1292 = load ptr, ptr %10, align 8, !tbaa !11
  %1293 = load i64, ptr %58, align 8, !tbaa !9
  call void @libxsmm_rnaz_convert_fp32_bf16(ptr noundef %1291, ptr noundef %1292, i64 noundef %1293)
  %1294 = load ptr, ptr %10, align 8, !tbaa !11
  %1295 = load ptr, ptr %9, align 8, !tbaa !11
  %1296 = load i64, ptr %58, align 8, !tbaa !9
  call void @libxsmm_convert_bf16_f32(ptr noundef %1294, ptr noundef %1295, i64 noundef %1296)
  %1297 = getelementptr inbounds [2 x i64], ptr %4, i64 0, i64 0
  %1298 = load i64, ptr %6, align 8, !tbaa !9
  %1299 = load i64, ptr %7, align 8, !tbaa !9
  %1300 = load i32, ptr %3, align 4, !tbaa !5
  %1301 = load ptr, ptr %9, align 8, !tbaa !11
  %1302 = call i32 @libxsmm_mhd_write(ptr noundef @.str.3, ptr noundef null, ptr noundef %1297, ptr noundef null, i64 noundef %1298, i64 noundef %1299, i32 noundef %1300, ptr noundef null, ptr noundef %1301, ptr noundef null, ptr noundef null, ptr noundef null, i64 noundef 0)
  store i32 %1302, ptr %2, align 4, !tbaa !5
  br label %1304

1303:                                             ; preds = %1149, %1146, %1143
  store i32 1, ptr %2, align 4, !tbaa !5
  br label %1304

1304:                                             ; preds = %1303, %1290
  call void @llvm.lifetime.end.p0(i64 8, ptr %58) #8
  br label %1305

1305:                                             ; preds = %1304, %1037
  %1306 = getelementptr inbounds [1024 x i8], ptr %11, i64 0, i64 0
  %1307 = getelementptr inbounds [2 x i64], ptr %4, i64 0, i64 0
  %1308 = call i32 @libxsmm_mhd_read_header(ptr noundef @.str.4, i64 noundef 1024, ptr noundef %1306, ptr noundef %6, ptr noundef %1307, ptr noundef %7, ptr noundef %3, ptr noundef %8, ptr noundef null)
  %1309 = icmp eq i32 0, %1308
  br i1 %1309, label %1310, label %1579

1310:                                             ; preds = %1305
  call void @llvm.lifetime.start.p0(i64 8, ptr %73) #8
  %1311 = getelementptr inbounds [2 x i64], ptr %4, i64 0, i64 0
  %1312 = load i64, ptr %1311, align 16, !tbaa !9
  %1313 = getelementptr inbounds [2 x i64], ptr %4, i64 0, i64 1
  %1314 = load i64, ptr %1313, align 8, !tbaa !9
  %1315 = mul i64 %1312, %1314
  store i64 %1315, ptr %73, align 8, !tbaa !9
  %1316 = load i64, ptr %5, align 8, !tbaa !9
  %1317 = load i64, ptr %73, align 8, !tbaa !9
  %1318 = icmp ult i64 %1316, %1317
  br i1 %1318, label %1319, label %1415

1319:                                             ; preds = %1310
  %1320 = load ptr, ptr %10, align 8, !tbaa !11
  call void @free(ptr noundef %1320) #8
  %1321 = load ptr, ptr %9, align 8, !tbaa !11
  call void @free(ptr noundef %1321) #8
  %1322 = load i64, ptr %73, align 8, !tbaa !9
  %1323 = mul i64 2, %1322
  %1324 = call noalias ptr @malloc(i64 noundef %1323) #9
  store ptr %1324, ptr %10, align 8, !tbaa !11
  %1325 = load i32, ptr %3, align 4, !tbaa !5
  %1326 = icmp eq i32 0, %1325
  br i1 %1326, label %1327, label %1328

1327:                                             ; preds = %1319
  br label %1408

1328:                                             ; preds = %1319
  %1329 = load i32, ptr %3, align 4, !tbaa !5
  %1330 = icmp eq i32 1, %1329
  br i1 %1330, label %1331, label %1332

1331:                                             ; preds = %1328
  br label %1406

1332:                                             ; preds = %1328
  %1333 = load i32, ptr %3, align 4, !tbaa !5
  %1334 = icmp eq i32 2, %1333
  br i1 %1334, label %1335, label %1336

1335:                                             ; preds = %1332
  br label %1404

1336:                                             ; preds = %1332
  %1337 = load i32, ptr %3, align 4, !tbaa !5
  %1338 = icmp eq i32 3, %1337
  br i1 %1338, label %1339, label %1340

1339:                                             ; preds = %1336
  br label %1402

1340:                                             ; preds = %1336
  %1341 = load i32, ptr %3, align 4, !tbaa !5
  %1342 = icmp eq i32 4, %1341
  br i1 %1342, label %1343, label %1344

1343:                                             ; preds = %1340
  br label %1400

1344:                                             ; preds = %1340
  %1345 = load i32, ptr %3, align 4, !tbaa !5
  %1346 = icmp eq i32 5, %1345
  br i1 %1346, label %1347, label %1348

1347:                                             ; preds = %1344
  br label %1398

1348:                                             ; preds = %1344
  %1349 = load i32, ptr %3, align 4, !tbaa !5
  %1350 = icmp eq i32 6, %1349
  br i1 %1350, label %1351, label %1352

1351:                                             ; preds = %1348
  br label %1396

1352:                                             ; preds = %1348
  %1353 = load i32, ptr %3, align 4, !tbaa !5
  %1354 = icmp eq i32 7, %1353
  br i1 %1354, label %1355, label %1356

1355:                                             ; preds = %1352
  br label %1394

1356:                                             ; preds = %1352
  %1357 = load i32, ptr %3, align 4, !tbaa !5
  %1358 = icmp eq i32 8, %1357
  br i1 %1358, label %1359, label %1360

1359:                                             ; preds = %1356
  br label %1392

1360:                                             ; preds = %1356
  %1361 = load i32, ptr %3, align 4, !tbaa !5
  %1362 = icmp eq i32 9, %1361
  br i1 %1362, label %1363, label %1364

1363:                                             ; preds = %1360
  br label %1390

1364:                                             ; preds = %1360
  %1365 = load i32, ptr %3, align 4, !tbaa !5
  %1366 = icmp eq i32 10, %1365
  br i1 %1366, label %1367, label %1368

1367:                                             ; preds = %1364
  br label %1388

1368:                                             ; preds = %1364
  %1369 = load i32, ptr %3, align 4, !tbaa !5
  %1370 = icmp eq i32 11, %1369
  br i1 %1370, label %1371, label %1372

1371:                                             ; preds = %1368
  br label %1386

1372:                                             ; preds = %1368
  %1373 = load i32, ptr %3, align 4, !tbaa !5
  %1374 = icmp eq i32 12, %1373
  br i1 %1374, label %1375, label %1376

1375:                                             ; preds = %1372
  br label %1384

1376:                                             ; preds = %1372
  %1377 = load i32, ptr %3, align 4, !tbaa !5
  %1378 = icmp eq i32 13, %1377
  br i1 %1378, label %1379, label %1380

1379:                                             ; preds = %1376
  br label %1382

1380:                                             ; preds = %1376
  call void @__assert_fail(ptr noundef @.str.1, ptr noundef @.str.2, i32 noundef 130, ptr noundef @__PRETTY_FUNCTION__.main) #10
  unreachable

1381:                                             ; No predecessors!
  br label %1382

1382:                                             ; preds = %1381, %1379
  %1383 = phi i32 [ 1, %1379 ], [ 0, %1381 ]
  br label %1384

1384:                                             ; preds = %1382, %1375
  %1385 = phi i32 [ 1, %1375 ], [ %1383, %1382 ]
  br label %1386

1386:                                             ; preds = %1384, %1371
  %1387 = phi i32 [ 2, %1371 ], [ %1385, %1384 ]
  br label %1388

1388:                                             ; preds = %1386, %1367
  %1389 = phi i32 [ 2, %1367 ], [ %1387, %1386 ]
  br label %1390

1390:                                             ; preds = %1388, %1363
  %1391 = phi i32 [ 4, %1363 ], [ %1389, %1388 ]
  br label %1392

1392:                                             ; preds = %1390, %1359
  %1393 = phi i32 [ 4, %1359 ], [ %1391, %1390 ]
  br label %1394

1394:                                             ; preds = %1392, %1355
  %1395 = phi i32 [ 8, %1355 ], [ %1393, %1392 ]
  br label %1396

1396:                                             ; preds = %1394, %1351
  %1397 = phi i32 [ 8, %1351 ], [ %1395, %1394 ]
  br label %1398

1398:                                             ; preds = %1396, %1347
  %1399 = phi i32 [ 1, %1347 ], [ %1397, %1396 ]
  br label %1400

1400:                                             ; preds = %1398, %1343
  %1401 = phi i32 [ 1, %1343 ], [ %1399, %1398 ]
  br label %1402

1402:                                             ; preds = %1400, %1339
  %1403 = phi i32 [ 2, %1339 ], [ %1401, %1400 ]
  br label %1404

1404:                                             ; preds = %1402, %1335
  %1405 = phi i32 [ 2, %1335 ], [ %1403, %1402 ]
  br label %1406

1406:                                             ; preds = %1404, %1331
  %1407 = phi i32 [ 4, %1331 ], [ %1405, %1404 ]
  br label %1408

1408:                                             ; preds = %1406, %1327
  %1409 = phi i32 [ 8, %1327 ], [ %1407, %1406 ]
  %1410 = sext i32 %1409 to i64
  %1411 = load i64, ptr %73, align 8, !tbaa !9
  %1412 = mul i64 %1410, %1411
  %1413 = call noalias ptr @malloc(i64 noundef %1412) #9
  store ptr %1413, ptr %9, align 8, !tbaa !11
  %1414 = load i64, ptr %73, align 8, !tbaa !9
  store i64 %1414, ptr %5, align 8, !tbaa !9
  br label %1415

1415:                                             ; preds = %1408, %1310
  %1416 = load ptr, ptr %9, align 8, !tbaa !11
  %1417 = icmp ne ptr null, %1416
  br i1 %1417, label %1418, label %1577

1418:                                             ; preds = %1415
  %1419 = load ptr, ptr %10, align 8, !tbaa !11
  %1420 = icmp ne ptr null, %1419
  br i1 %1420, label %1421, label %1577

1421:                                             ; preds = %1418
  %1422 = load i32, ptr %2, align 4, !tbaa !5
  %1423 = icmp eq i32 0, %1422
  br i1 %1423, label %1424, label %1577

1424:                                             ; preds = %1421
  br label %1425

1425:                                             ; preds = %1424
  call void @llvm.lifetime.start.p0(i64 8, ptr %74) #8
  store double 1.000000e+00, ptr %74, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr %75) #8
  %1426 = load double, ptr %74, align 8, !tbaa !13
  %1427 = load i64, ptr %73, align 8, !tbaa !9
  %1428 = uitofp i64 %1427 to double
  %1429 = fdiv double 1.000000e+00, %1428
  %1430 = load i64, ptr %73, align 8, !tbaa !9
  %1431 = uitofp i64 %1430 to double
  %1432 = fdiv double 1.000000e+00, %1431
  %1433 = call double @llvm.fmuladd.f64(double %1426, double %1429, double %1432)
  store double %1433, ptr %75, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 4, ptr %76) #8
  %1434 = getelementptr inbounds [2 x i64], ptr %4, i64 0, i64 0
  %1435 = load i64, ptr %1434, align 16, !tbaa !9
  %1436 = trunc i64 %1435 to i32
  store i32 %1436, ptr %76, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %77) #8
  %1437 = getelementptr inbounds [2 x i64], ptr %4, i64 0, i64 1
  %1438 = load i64, ptr %1437, align 8, !tbaa !9
  %1439 = trunc i64 %1438 to i32
  store i32 %1439, ptr %77, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %78) #8
  %1440 = getelementptr inbounds [2 x i64], ptr %4, i64 0, i64 0
  %1441 = load i64, ptr %1440, align 16, !tbaa !9
  %1442 = trunc i64 %1441 to i32
  store i32 %1442, ptr %78, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %79) #8
  store i32 0, ptr %79, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %80) #8
  store i32 0, ptr %80, align 4, !tbaa !5
  %1443 = load double, ptr %74, align 8, !tbaa !13
  %1444 = fcmp une double 0.000000e+00, %1443
  br i1 %1444, label %1445, label %1504

1445:                                             ; preds = %1425
  store i32 0, ptr %79, align 4, !tbaa !5
  br label %1446

1446:                                             ; preds = %1500, %1445
  %1447 = load i32, ptr %79, align 4, !tbaa !5
  %1448 = load i32, ptr %77, align 4, !tbaa !5
  %1449 = icmp slt i32 %1447, %1448
  br i1 %1449, label %1450, label %1503

1450:                                             ; preds = %1446
  store i32 0, ptr %80, align 4, !tbaa !5
  br label %1451

1451:                                             ; preds = %1476, %1450
  %1452 = load i32, ptr %80, align 4, !tbaa !5
  %1453 = load i32, ptr %76, align 4, !tbaa !5
  %1454 = icmp slt i32 %1452, %1453
  br i1 %1454, label %1455, label %1479

1455:                                             ; preds = %1451
  call void @llvm.lifetime.start.p0(i64 4, ptr %81) #8
  %1456 = load i32, ptr %79, align 4, !tbaa !5
  %1457 = load i32, ptr %78, align 4, !tbaa !5
  %1458 = mul nsw i32 %1456, %1457
  %1459 = load i32, ptr %80, align 4, !tbaa !5
  %1460 = add nsw i32 %1458, %1459
  store i32 %1460, ptr %81, align 4, !tbaa !5
  %1461 = load double, ptr %75, align 8, !tbaa !13
  %1462 = load i32, ptr %79, align 4, !tbaa !5
  %1463 = sitofp i32 %1462 to double
  %1464 = load i32, ptr %76, align 4, !tbaa !5
  %1465 = sitofp i32 %1464 to double
  %1466 = call double @llvm.fmuladd.f64(double %1463, double %1465, double 1.000000e+00)
  %1467 = load i32, ptr %80, align 4, !tbaa !5
  %1468 = sitofp i32 %1467 to double
  %1469 = fadd double %1466, %1468
  %1470 = fmul double %1461, %1469
  %1471 = fptrunc double %1470 to float
  %1472 = load ptr, ptr %9, align 8, !tbaa !11
  %1473 = load i32, ptr %81, align 4, !tbaa !5
  %1474 = sext i32 %1473 to i64
  %1475 = getelementptr inbounds float, ptr %1472, i64 %1474
  store float %1471, ptr %1475, align 4, !tbaa !15
  call void @llvm.lifetime.end.p0(i64 4, ptr %81) #8
  br label %1476

1476:                                             ; preds = %1455
  %1477 = load i32, ptr %80, align 4, !tbaa !5
  %1478 = add nsw i32 %1477, 1
  store i32 %1478, ptr %80, align 4, !tbaa !5
  br label %1451, !llvm.loop !38

1479:                                             ; preds = %1451
  br label %1480

1480:                                             ; preds = %1496, %1479
  %1481 = load i32, ptr %80, align 4, !tbaa !5
  %1482 = load i32, ptr %78, align 4, !tbaa !5
  %1483 = icmp slt i32 %1481, %1482
  br i1 %1483, label %1484, label %1499

1484:                                             ; preds = %1480
  call void @llvm.lifetime.start.p0(i64 4, ptr %82) #8
  %1485 = load i32, ptr %79, align 4, !tbaa !5
  %1486 = load i32, ptr %78, align 4, !tbaa !5
  %1487 = mul nsw i32 %1485, %1486
  %1488 = load i32, ptr %80, align 4, !tbaa !5
  %1489 = add nsw i32 %1487, %1488
  store i32 %1489, ptr %82, align 4, !tbaa !5
  %1490 = load double, ptr %74, align 8, !tbaa !13
  %1491 = fptrunc double %1490 to float
  %1492 = load ptr, ptr %9, align 8, !tbaa !11
  %1493 = load i32, ptr %82, align 4, !tbaa !5
  %1494 = sext i32 %1493 to i64
  %1495 = getelementptr inbounds float, ptr %1492, i64 %1494
  store float %1491, ptr %1495, align 4, !tbaa !15
  call void @llvm.lifetime.end.p0(i64 4, ptr %82) #8
  br label %1496

1496:                                             ; preds = %1484
  %1497 = load i32, ptr %80, align 4, !tbaa !5
  %1498 = add nsw i32 %1497, 1
  store i32 %1498, ptr %80, align 4, !tbaa !5
  br label %1480, !llvm.loop !39

1499:                                             ; preds = %1480
  br label %1500

1500:                                             ; preds = %1499
  %1501 = load i32, ptr %79, align 4, !tbaa !5
  %1502 = add nsw i32 %1501, 1
  store i32 %1502, ptr %79, align 4, !tbaa !5
  br label %1446, !llvm.loop !40

1503:                                             ; preds = %1446
  br label %1560

1504:                                             ; preds = %1425
  call void @llvm.lifetime.start.p0(i64 4, ptr %83) #8
  %1505 = load i32, ptr %77, align 4, !tbaa !5
  %1506 = load i32, ptr %78, align 4, !tbaa !5
  %1507 = mul nsw i32 %1505, %1506
  store i32 %1507, ptr %83, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %84) #8
  %1508 = load i32, ptr %83, align 4, !tbaa !5
  %1509 = add nsw i32 %1508, 1
  %1510 = sdiv i32 %1509, 2
  %1511 = sitofp i32 %1510 to float
  store float %1511, ptr %84, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %85) #8
  %1512 = load i64, ptr %73, align 8, !tbaa !9
  %1513 = uitofp i64 %1512 to double
  %1514 = fdiv double 1.000000e+00, %1513
  %1515 = fptrunc double %1514 to float
  %1516 = load float, ptr %84, align 4, !tbaa !15
  %1517 = fdiv float %1515, %1516
  store float %1517, ptr %85, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 8, ptr %86) #8
  %1518 = load i32, ptr %83, align 4, !tbaa !5
  %1519 = sext i32 %1518 to i64
  %1520 = call i64 @libxsmm_coprime2(i64 noundef %1519)
  store i64 %1520, ptr %86, align 8, !tbaa !9
  store i32 0, ptr %79, align 4, !tbaa !5
  br label %1521

1521:                                             ; preds = %1556, %1504
  %1522 = load i32, ptr %79, align 4, !tbaa !5
  %1523 = load i32, ptr %77, align 4, !tbaa !5
  %1524 = icmp slt i32 %1522, %1523
  br i1 %1524, label %1525, label %1559

1525:                                             ; preds = %1521
  store i32 0, ptr %80, align 4, !tbaa !5
  br label %1526

1526:                                             ; preds = %1552, %1525
  %1527 = load i32, ptr %80, align 4, !tbaa !5
  %1528 = load i32, ptr %78, align 4, !tbaa !5
  %1529 = icmp slt i32 %1527, %1528
  br i1 %1529, label %1530, label %1555

1530:                                             ; preds = %1526
  call void @llvm.lifetime.start.p0(i64 4, ptr %87) #8
  %1531 = load i32, ptr %79, align 4, !tbaa !5
  %1532 = load i32, ptr %78, align 4, !tbaa !5
  %1533 = mul nsw i32 %1531, %1532
  %1534 = load i32, ptr %80, align 4, !tbaa !5
  %1535 = add nsw i32 %1533, %1534
  store i32 %1535, ptr %87, align 4, !tbaa !5
  %1536 = load float, ptr %85, align 4, !tbaa !15
  %1537 = load i64, ptr %86, align 8, !tbaa !9
  %1538 = load i32, ptr %87, align 4, !tbaa !5
  %1539 = sext i32 %1538 to i64
  %1540 = mul i64 %1537, %1539
  %1541 = load i32, ptr %83, align 4, !tbaa !5
  %1542 = sext i32 %1541 to i64
  %1543 = urem i64 %1540, %1542
  %1544 = uitofp i64 %1543 to float
  %1545 = load float, ptr %84, align 4, !tbaa !15
  %1546 = fsub float %1544, %1545
  %1547 = fmul float %1536, %1546
  %1548 = load ptr, ptr %9, align 8, !tbaa !11
  %1549 = load i32, ptr %87, align 4, !tbaa !5
  %1550 = sext i32 %1549 to i64
  %1551 = getelementptr inbounds float, ptr %1548, i64 %1550
  store float %1547, ptr %1551, align 4, !tbaa !15
  call void @llvm.lifetime.end.p0(i64 4, ptr %87) #8
  br label %1552

1552:                                             ; preds = %1530
  %1553 = load i32, ptr %80, align 4, !tbaa !5
  %1554 = add nsw i32 %1553, 1
  store i32 %1554, ptr %80, align 4, !tbaa !5
  br label %1526, !llvm.loop !41

1555:                                             ; preds = %1526
  br label %1556

1556:                                             ; preds = %1555
  %1557 = load i32, ptr %79, align 4, !tbaa !5
  %1558 = add nsw i32 %1557, 1
  store i32 %1558, ptr %79, align 4, !tbaa !5
  br label %1521, !llvm.loop !42

1559:                                             ; preds = %1521
  call void @llvm.lifetime.end.p0(i64 8, ptr %86) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %85) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %84) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %83) #8
  br label %1560

1560:                                             ; preds = %1559, %1503
  call void @llvm.lifetime.end.p0(i64 4, ptr %80) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %79) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %78) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %77) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %76) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %75) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %74) #8
  br label %1561

1561:                                             ; preds = %1560
  br label %1562

1562:                                             ; preds = %1561
  %1563 = load ptr, ptr %9, align 8, !tbaa !11
  %1564 = load ptr, ptr %10, align 8, !tbaa !11
  %1565 = load i64, ptr %73, align 8, !tbaa !9
  call void @libxsmm_rne_convert_fp32_bf16(ptr noundef %1563, ptr noundef %1564, i64 noundef %1565)
  %1566 = load ptr, ptr %10, align 8, !tbaa !11
  %1567 = load ptr, ptr %9, align 8, !tbaa !11
  %1568 = load i64, ptr %73, align 8, !tbaa !9
  call void @libxsmm_convert_bf16_f32(ptr noundef %1566, ptr noundef %1567, i64 noundef %1568)
  %1569 = getelementptr inbounds [1024 x i8], ptr %11, i64 0, i64 0
  %1570 = getelementptr inbounds [2 x i64], ptr %4, i64 0, i64 0
  %1571 = load i64, ptr %6, align 8, !tbaa !9
  %1572 = load i64, ptr %7, align 8, !tbaa !9
  %1573 = load i64, ptr %8, align 8, !tbaa !9
  %1574 = load i32, ptr %3, align 4, !tbaa !5
  %1575 = load ptr, ptr %9, align 8, !tbaa !11
  %1576 = call i32 @libxsmm_mhd_read(ptr noundef %1569, ptr noundef null, ptr noundef %1570, ptr noundef null, i64 noundef %1571, i64 noundef %1572, i64 noundef %1573, i32 noundef %1574, ptr noundef null, ptr noundef %1575, ptr noundef @libxsmm_mhd_element_comparison, ptr noundef null, i64 noundef 0)
  store i32 %1576, ptr %2, align 4, !tbaa !5
  br label %1578

1577:                                             ; preds = %1421, %1418, %1415
  store i32 1, ptr %2, align 4, !tbaa !5
  br label %1578

1578:                                             ; preds = %1577, %1562
  call void @llvm.lifetime.end.p0(i64 8, ptr %73) #8
  br label %1846

1579:                                             ; preds = %1305
  call void @llvm.lifetime.start.p0(i64 8, ptr %88) #8
  %1580 = getelementptr inbounds [2 x i64], ptr %4, i64 0, i64 0
  %1581 = load i64, ptr %1580, align 16, !tbaa !9
  %1582 = getelementptr inbounds [2 x i64], ptr %4, i64 0, i64 1
  %1583 = load i64, ptr %1582, align 8, !tbaa !9
  %1584 = mul i64 %1581, %1583
  store i64 %1584, ptr %88, align 8, !tbaa !9
  %1585 = load i64, ptr %5, align 8, !tbaa !9
  %1586 = load i64, ptr %88, align 8, !tbaa !9
  %1587 = icmp ult i64 %1585, %1586
  br i1 %1587, label %1588, label %1684

1588:                                             ; preds = %1579
  %1589 = load ptr, ptr %10, align 8, !tbaa !11
  call void @free(ptr noundef %1589) #8
  %1590 = load ptr, ptr %9, align 8, !tbaa !11
  call void @free(ptr noundef %1590) #8
  %1591 = load i64, ptr %88, align 8, !tbaa !9
  %1592 = mul i64 2, %1591
  %1593 = call noalias ptr @malloc(i64 noundef %1592) #9
  store ptr %1593, ptr %10, align 8, !tbaa !11
  %1594 = load i32, ptr %3, align 4, !tbaa !5
  %1595 = icmp eq i32 0, %1594
  br i1 %1595, label %1596, label %1597

1596:                                             ; preds = %1588
  br label %1677

1597:                                             ; preds = %1588
  %1598 = load i32, ptr %3, align 4, !tbaa !5
  %1599 = icmp eq i32 1, %1598
  br i1 %1599, label %1600, label %1601

1600:                                             ; preds = %1597
  br label %1675

1601:                                             ; preds = %1597
  %1602 = load i32, ptr %3, align 4, !tbaa !5
  %1603 = icmp eq i32 2, %1602
  br i1 %1603, label %1604, label %1605

1604:                                             ; preds = %1601
  br label %1673

1605:                                             ; preds = %1601
  %1606 = load i32, ptr %3, align 4, !tbaa !5
  %1607 = icmp eq i32 3, %1606
  br i1 %1607, label %1608, label %1609

1608:                                             ; preds = %1605
  br label %1671

1609:                                             ; preds = %1605
  %1610 = load i32, ptr %3, align 4, !tbaa !5
  %1611 = icmp eq i32 4, %1610
  br i1 %1611, label %1612, label %1613

1612:                                             ; preds = %1609
  br label %1669

1613:                                             ; preds = %1609
  %1614 = load i32, ptr %3, align 4, !tbaa !5
  %1615 = icmp eq i32 5, %1614
  br i1 %1615, label %1616, label %1617

1616:                                             ; preds = %1613
  br label %1667

1617:                                             ; preds = %1613
  %1618 = load i32, ptr %3, align 4, !tbaa !5
  %1619 = icmp eq i32 6, %1618
  br i1 %1619, label %1620, label %1621

1620:                                             ; preds = %1617
  br label %1665

1621:                                             ; preds = %1617
  %1622 = load i32, ptr %3, align 4, !tbaa !5
  %1623 = icmp eq i32 7, %1622
  br i1 %1623, label %1624, label %1625

1624:                                             ; preds = %1621
  br label %1663

1625:                                             ; preds = %1621
  %1626 = load i32, ptr %3, align 4, !tbaa !5
  %1627 = icmp eq i32 8, %1626
  br i1 %1627, label %1628, label %1629

1628:                                             ; preds = %1625
  br label %1661

1629:                                             ; preds = %1625
  %1630 = load i32, ptr %3, align 4, !tbaa !5
  %1631 = icmp eq i32 9, %1630
  br i1 %1631, label %1632, label %1633

1632:                                             ; preds = %1629
  br label %1659

1633:                                             ; preds = %1629
  %1634 = load i32, ptr %3, align 4, !tbaa !5
  %1635 = icmp eq i32 10, %1634
  br i1 %1635, label %1636, label %1637

1636:                                             ; preds = %1633
  br label %1657

1637:                                             ; preds = %1633
  %1638 = load i32, ptr %3, align 4, !tbaa !5
  %1639 = icmp eq i32 11, %1638
  br i1 %1639, label %1640, label %1641

1640:                                             ; preds = %1637
  br label %1655

1641:                                             ; preds = %1637
  %1642 = load i32, ptr %3, align 4, !tbaa !5
  %1643 = icmp eq i32 12, %1642
  br i1 %1643, label %1644, label %1645

1644:                                             ; preds = %1641
  br label %1653

1645:                                             ; preds = %1641
  %1646 = load i32, ptr %3, align 4, !tbaa !5
  %1647 = icmp eq i32 13, %1646
  br i1 %1647, label %1648, label %1649

1648:                                             ; preds = %1645
  br label %1651

1649:                                             ; preds = %1645
  call void @__assert_fail(ptr noundef @.str.1, ptr noundef @.str.2, i32 noundef 149, ptr noundef @__PRETTY_FUNCTION__.main) #10
  unreachable

1650:                                             ; No predecessors!
  br label %1651

1651:                                             ; preds = %1650, %1648
  %1652 = phi i32 [ 1, %1648 ], [ 0, %1650 ]
  br label %1653

1653:                                             ; preds = %1651, %1644
  %1654 = phi i32 [ 1, %1644 ], [ %1652, %1651 ]
  br label %1655

1655:                                             ; preds = %1653, %1640
  %1656 = phi i32 [ 2, %1640 ], [ %1654, %1653 ]
  br label %1657

1657:                                             ; preds = %1655, %1636
  %1658 = phi i32 [ 2, %1636 ], [ %1656, %1655 ]
  br label %1659

1659:                                             ; preds = %1657, %1632
  %1660 = phi i32 [ 4, %1632 ], [ %1658, %1657 ]
  br label %1661

1661:                                             ; preds = %1659, %1628
  %1662 = phi i32 [ 4, %1628 ], [ %1660, %1659 ]
  br label %1663

1663:                                             ; preds = %1661, %1624
  %1664 = phi i32 [ 8, %1624 ], [ %1662, %1661 ]
  br label %1665

1665:                                             ; preds = %1663, %1620
  %1666 = phi i32 [ 8, %1620 ], [ %1664, %1663 ]
  br label %1667

1667:                                             ; preds = %1665, %1616
  %1668 = phi i32 [ 1, %1616 ], [ %1666, %1665 ]
  br label %1669

1669:                                             ; preds = %1667, %1612
  %1670 = phi i32 [ 1, %1612 ], [ %1668, %1667 ]
  br label %1671

1671:                                             ; preds = %1669, %1608
  %1672 = phi i32 [ 2, %1608 ], [ %1670, %1669 ]
  br label %1673

1673:                                             ; preds = %1671, %1604
  %1674 = phi i32 [ 2, %1604 ], [ %1672, %1671 ]
  br label %1675

1675:                                             ; preds = %1673, %1600
  %1676 = phi i32 [ 4, %1600 ], [ %1674, %1673 ]
  br label %1677

1677:                                             ; preds = %1675, %1596
  %1678 = phi i32 [ 8, %1596 ], [ %1676, %1675 ]
  %1679 = sext i32 %1678 to i64
  %1680 = load i64, ptr %88, align 8, !tbaa !9
  %1681 = mul i64 %1679, %1680
  %1682 = call noalias ptr @malloc(i64 noundef %1681) #9
  store ptr %1682, ptr %9, align 8, !tbaa !11
  %1683 = load i64, ptr %88, align 8, !tbaa !9
  store i64 %1683, ptr %5, align 8, !tbaa !9
  br label %1684

1684:                                             ; preds = %1677, %1579
  %1685 = load ptr, ptr %9, align 8, !tbaa !11
  %1686 = icmp ne ptr null, %1685
  br i1 %1686, label %1687, label %1844

1687:                                             ; preds = %1684
  %1688 = load ptr, ptr %10, align 8, !tbaa !11
  %1689 = icmp ne ptr null, %1688
  br i1 %1689, label %1690, label %1844

1690:                                             ; preds = %1687
  %1691 = load i32, ptr %2, align 4, !tbaa !5
  %1692 = icmp eq i32 0, %1691
  br i1 %1692, label %1693, label %1844

1693:                                             ; preds = %1690
  br label %1694

1694:                                             ; preds = %1693
  call void @llvm.lifetime.start.p0(i64 8, ptr %89) #8
  store double 1.000000e+00, ptr %89, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr %90) #8
  %1695 = load double, ptr %89, align 8, !tbaa !13
  %1696 = load i64, ptr %88, align 8, !tbaa !9
  %1697 = uitofp i64 %1696 to double
  %1698 = fdiv double 1.000000e+00, %1697
  %1699 = load i64, ptr %88, align 8, !tbaa !9
  %1700 = uitofp i64 %1699 to double
  %1701 = fdiv double 1.000000e+00, %1700
  %1702 = call double @llvm.fmuladd.f64(double %1695, double %1698, double %1701)
  store double %1702, ptr %90, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 4, ptr %91) #8
  %1703 = getelementptr inbounds [2 x i64], ptr %4, i64 0, i64 0
  %1704 = load i64, ptr %1703, align 16, !tbaa !9
  %1705 = trunc i64 %1704 to i32
  store i32 %1705, ptr %91, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %92) #8
  %1706 = getelementptr inbounds [2 x i64], ptr %4, i64 0, i64 1
  %1707 = load i64, ptr %1706, align 8, !tbaa !9
  %1708 = trunc i64 %1707 to i32
  store i32 %1708, ptr %92, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %93) #8
  %1709 = getelementptr inbounds [2 x i64], ptr %4, i64 0, i64 0
  %1710 = load i64, ptr %1709, align 16, !tbaa !9
  %1711 = trunc i64 %1710 to i32
  store i32 %1711, ptr %93, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %94) #8
  store i32 0, ptr %94, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %95) #8
  store i32 0, ptr %95, align 4, !tbaa !5
  %1712 = load double, ptr %89, align 8, !tbaa !13
  %1713 = fcmp une double 0.000000e+00, %1712
  br i1 %1713, label %1714, label %1773

1714:                                             ; preds = %1694
  store i32 0, ptr %94, align 4, !tbaa !5
  br label %1715

1715:                                             ; preds = %1769, %1714
  %1716 = load i32, ptr %94, align 4, !tbaa !5
  %1717 = load i32, ptr %92, align 4, !tbaa !5
  %1718 = icmp slt i32 %1716, %1717
  br i1 %1718, label %1719, label %1772

1719:                                             ; preds = %1715
  store i32 0, ptr %95, align 4, !tbaa !5
  br label %1720

1720:                                             ; preds = %1745, %1719
  %1721 = load i32, ptr %95, align 4, !tbaa !5
  %1722 = load i32, ptr %91, align 4, !tbaa !5
  %1723 = icmp slt i32 %1721, %1722
  br i1 %1723, label %1724, label %1748

1724:                                             ; preds = %1720
  call void @llvm.lifetime.start.p0(i64 4, ptr %96) #8
  %1725 = load i32, ptr %94, align 4, !tbaa !5
  %1726 = load i32, ptr %93, align 4, !tbaa !5
  %1727 = mul nsw i32 %1725, %1726
  %1728 = load i32, ptr %95, align 4, !tbaa !5
  %1729 = add nsw i32 %1727, %1728
  store i32 %1729, ptr %96, align 4, !tbaa !5
  %1730 = load double, ptr %90, align 8, !tbaa !13
  %1731 = load i32, ptr %94, align 4, !tbaa !5
  %1732 = sitofp i32 %1731 to double
  %1733 = load i32, ptr %91, align 4, !tbaa !5
  %1734 = sitofp i32 %1733 to double
  %1735 = call double @llvm.fmuladd.f64(double %1732, double %1734, double 1.000000e+00)
  %1736 = load i32, ptr %95, align 4, !tbaa !5
  %1737 = sitofp i32 %1736 to double
  %1738 = fadd double %1735, %1737
  %1739 = fmul double %1730, %1738
  %1740 = fptrunc double %1739 to float
  %1741 = load ptr, ptr %9, align 8, !tbaa !11
  %1742 = load i32, ptr %96, align 4, !tbaa !5
  %1743 = sext i32 %1742 to i64
  %1744 = getelementptr inbounds float, ptr %1741, i64 %1743
  store float %1740, ptr %1744, align 4, !tbaa !15
  call void @llvm.lifetime.end.p0(i64 4, ptr %96) #8
  br label %1745

1745:                                             ; preds = %1724
  %1746 = load i32, ptr %95, align 4, !tbaa !5
  %1747 = add nsw i32 %1746, 1
  store i32 %1747, ptr %95, align 4, !tbaa !5
  br label %1720, !llvm.loop !43

1748:                                             ; preds = %1720
  br label %1749

1749:                                             ; preds = %1765, %1748
  %1750 = load i32, ptr %95, align 4, !tbaa !5
  %1751 = load i32, ptr %93, align 4, !tbaa !5
  %1752 = icmp slt i32 %1750, %1751
  br i1 %1752, label %1753, label %1768

1753:                                             ; preds = %1749
  call void @llvm.lifetime.start.p0(i64 4, ptr %97) #8
  %1754 = load i32, ptr %94, align 4, !tbaa !5
  %1755 = load i32, ptr %93, align 4, !tbaa !5
  %1756 = mul nsw i32 %1754, %1755
  %1757 = load i32, ptr %95, align 4, !tbaa !5
  %1758 = add nsw i32 %1756, %1757
  store i32 %1758, ptr %97, align 4, !tbaa !5
  %1759 = load double, ptr %89, align 8, !tbaa !13
  %1760 = fptrunc double %1759 to float
  %1761 = load ptr, ptr %9, align 8, !tbaa !11
  %1762 = load i32, ptr %97, align 4, !tbaa !5
  %1763 = sext i32 %1762 to i64
  %1764 = getelementptr inbounds float, ptr %1761, i64 %1763
  store float %1760, ptr %1764, align 4, !tbaa !15
  call void @llvm.lifetime.end.p0(i64 4, ptr %97) #8
  br label %1765

1765:                                             ; preds = %1753
  %1766 = load i32, ptr %95, align 4, !tbaa !5
  %1767 = add nsw i32 %1766, 1
  store i32 %1767, ptr %95, align 4, !tbaa !5
  br label %1749, !llvm.loop !44

1768:                                             ; preds = %1749
  br label %1769

1769:                                             ; preds = %1768
  %1770 = load i32, ptr %94, align 4, !tbaa !5
  %1771 = add nsw i32 %1770, 1
  store i32 %1771, ptr %94, align 4, !tbaa !5
  br label %1715, !llvm.loop !45

1772:                                             ; preds = %1715
  br label %1829

1773:                                             ; preds = %1694
  call void @llvm.lifetime.start.p0(i64 4, ptr %98) #8
  %1774 = load i32, ptr %92, align 4, !tbaa !5
  %1775 = load i32, ptr %93, align 4, !tbaa !5
  %1776 = mul nsw i32 %1774, %1775
  store i32 %1776, ptr %98, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %99) #8
  %1777 = load i32, ptr %98, align 4, !tbaa !5
  %1778 = add nsw i32 %1777, 1
  %1779 = sdiv i32 %1778, 2
  %1780 = sitofp i32 %1779 to float
  store float %1780, ptr %99, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %100) #8
  %1781 = load i64, ptr %88, align 8, !tbaa !9
  %1782 = uitofp i64 %1781 to double
  %1783 = fdiv double 1.000000e+00, %1782
  %1784 = fptrunc double %1783 to float
  %1785 = load float, ptr %99, align 4, !tbaa !15
  %1786 = fdiv float %1784, %1785
  store float %1786, ptr %100, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 8, ptr %101) #8
  %1787 = load i32, ptr %98, align 4, !tbaa !5
  %1788 = sext i32 %1787 to i64
  %1789 = call i64 @libxsmm_coprime2(i64 noundef %1788)
  store i64 %1789, ptr %101, align 8, !tbaa !9
  store i32 0, ptr %94, align 4, !tbaa !5
  br label %1790

1790:                                             ; preds = %1825, %1773
  %1791 = load i32, ptr %94, align 4, !tbaa !5
  %1792 = load i32, ptr %92, align 4, !tbaa !5
  %1793 = icmp slt i32 %1791, %1792
  br i1 %1793, label %1794, label %1828

1794:                                             ; preds = %1790
  store i32 0, ptr %95, align 4, !tbaa !5
  br label %1795

1795:                                             ; preds = %1821, %1794
  %1796 = load i32, ptr %95, align 4, !tbaa !5
  %1797 = load i32, ptr %93, align 4, !tbaa !5
  %1798 = icmp slt i32 %1796, %1797
  br i1 %1798, label %1799, label %1824

1799:                                             ; preds = %1795
  call void @llvm.lifetime.start.p0(i64 4, ptr %102) #8
  %1800 = load i32, ptr %94, align 4, !tbaa !5
  %1801 = load i32, ptr %93, align 4, !tbaa !5
  %1802 = mul nsw i32 %1800, %1801
  %1803 = load i32, ptr %95, align 4, !tbaa !5
  %1804 = add nsw i32 %1802, %1803
  store i32 %1804, ptr %102, align 4, !tbaa !5
  %1805 = load float, ptr %100, align 4, !tbaa !15
  %1806 = load i64, ptr %101, align 8, !tbaa !9
  %1807 = load i32, ptr %102, align 4, !tbaa !5
  %1808 = sext i32 %1807 to i64
  %1809 = mul i64 %1806, %1808
  %1810 = load i32, ptr %98, align 4, !tbaa !5
  %1811 = sext i32 %1810 to i64
  %1812 = urem i64 %1809, %1811
  %1813 = uitofp i64 %1812 to float
  %1814 = load float, ptr %99, align 4, !tbaa !15
  %1815 = fsub float %1813, %1814
  %1816 = fmul float %1805, %1815
  %1817 = load ptr, ptr %9, align 8, !tbaa !11
  %1818 = load i32, ptr %102, align 4, !tbaa !5
  %1819 = sext i32 %1818 to i64
  %1820 = getelementptr inbounds float, ptr %1817, i64 %1819
  store float %1816, ptr %1820, align 4, !tbaa !15
  call void @llvm.lifetime.end.p0(i64 4, ptr %102) #8
  br label %1821

1821:                                             ; preds = %1799
  %1822 = load i32, ptr %95, align 4, !tbaa !5
  %1823 = add nsw i32 %1822, 1
  store i32 %1823, ptr %95, align 4, !tbaa !5
  br label %1795, !llvm.loop !46

1824:                                             ; preds = %1795
  br label %1825

1825:                                             ; preds = %1824
  %1826 = load i32, ptr %94, align 4, !tbaa !5
  %1827 = add nsw i32 %1826, 1
  store i32 %1827, ptr %94, align 4, !tbaa !5
  br label %1790, !llvm.loop !47

1828:                                             ; preds = %1790
  call void @llvm.lifetime.end.p0(i64 8, ptr %101) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %100) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %99) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %98) #8
  br label %1829

1829:                                             ; preds = %1828, %1772
  call void @llvm.lifetime.end.p0(i64 4, ptr %95) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %94) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %93) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %92) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %91) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %90) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %89) #8
  br label %1830

1830:                                             ; preds = %1829
  br label %1831

1831:                                             ; preds = %1830
  %1832 = load ptr, ptr %9, align 8, !tbaa !11
  %1833 = load ptr, ptr %10, align 8, !tbaa !11
  %1834 = load i64, ptr %88, align 8, !tbaa !9
  call void @libxsmm_rne_convert_fp32_bf16(ptr noundef %1832, ptr noundef %1833, i64 noundef %1834)
  %1835 = load ptr, ptr %10, align 8, !tbaa !11
  %1836 = load ptr, ptr %9, align 8, !tbaa !11
  %1837 = load i64, ptr %88, align 8, !tbaa !9
  call void @libxsmm_convert_bf16_f32(ptr noundef %1835, ptr noundef %1836, i64 noundef %1837)
  %1838 = getelementptr inbounds [2 x i64], ptr %4, i64 0, i64 0
  %1839 = load i64, ptr %6, align 8, !tbaa !9
  %1840 = load i64, ptr %7, align 8, !tbaa !9
  %1841 = load i32, ptr %3, align 4, !tbaa !5
  %1842 = load ptr, ptr %9, align 8, !tbaa !11
  %1843 = call i32 @libxsmm_mhd_write(ptr noundef @.str.4, ptr noundef null, ptr noundef %1838, ptr noundef null, i64 noundef %1839, i64 noundef %1840, i32 noundef %1841, ptr noundef null, ptr noundef %1842, ptr noundef null, ptr noundef null, ptr noundef null, i64 noundef 0)
  store i32 %1843, ptr %2, align 4, !tbaa !5
  br label %1845

1844:                                             ; preds = %1690, %1687, %1684
  store i32 1, ptr %2, align 4, !tbaa !5
  br label %1845

1845:                                             ; preds = %1844, %1831
  call void @llvm.lifetime.end.p0(i64 8, ptr %88) #8
  br label %1846

1846:                                             ; preds = %1845, %1578
  %1847 = getelementptr inbounds [1024 x i8], ptr %11, i64 0, i64 0
  %1848 = getelementptr inbounds [2 x i64], ptr %4, i64 0, i64 0
  %1849 = call i32 @libxsmm_mhd_read_header(ptr noundef @.str.5, i64 noundef 1024, ptr noundef %1847, ptr noundef %6, ptr noundef %1848, ptr noundef %7, ptr noundef %3, ptr noundef %8, ptr noundef null)
  %1850 = icmp eq i32 0, %1849
  br i1 %1850, label %1851, label %2120

1851:                                             ; preds = %1846
  call void @llvm.lifetime.start.p0(i64 8, ptr %103) #8
  %1852 = getelementptr inbounds [2 x i64], ptr %4, i64 0, i64 0
  %1853 = load i64, ptr %1852, align 16, !tbaa !9
  %1854 = getelementptr inbounds [2 x i64], ptr %4, i64 0, i64 1
  %1855 = load i64, ptr %1854, align 8, !tbaa !9
  %1856 = mul i64 %1853, %1855
  store i64 %1856, ptr %103, align 8, !tbaa !9
  %1857 = load i64, ptr %5, align 8, !tbaa !9
  %1858 = load i64, ptr %103, align 8, !tbaa !9
  %1859 = icmp ult i64 %1857, %1858
  br i1 %1859, label %1860, label %1956

1860:                                             ; preds = %1851
  %1861 = load ptr, ptr %10, align 8, !tbaa !11
  call void @free(ptr noundef %1861) #8
  %1862 = load ptr, ptr %9, align 8, !tbaa !11
  call void @free(ptr noundef %1862) #8
  %1863 = load i64, ptr %103, align 8, !tbaa !9
  %1864 = mul i64 2, %1863
  %1865 = call noalias ptr @malloc(i64 noundef %1864) #9
  store ptr %1865, ptr %10, align 8, !tbaa !11
  %1866 = load i32, ptr %3, align 4, !tbaa !5
  %1867 = icmp eq i32 0, %1866
  br i1 %1867, label %1868, label %1869

1868:                                             ; preds = %1860
  br label %1949

1869:                                             ; preds = %1860
  %1870 = load i32, ptr %3, align 4, !tbaa !5
  %1871 = icmp eq i32 1, %1870
  br i1 %1871, label %1872, label %1873

1872:                                             ; preds = %1869
  br label %1947

1873:                                             ; preds = %1869
  %1874 = load i32, ptr %3, align 4, !tbaa !5
  %1875 = icmp eq i32 2, %1874
  br i1 %1875, label %1876, label %1877

1876:                                             ; preds = %1873
  br label %1945

1877:                                             ; preds = %1873
  %1878 = load i32, ptr %3, align 4, !tbaa !5
  %1879 = icmp eq i32 3, %1878
  br i1 %1879, label %1880, label %1881

1880:                                             ; preds = %1877
  br label %1943

1881:                                             ; preds = %1877
  %1882 = load i32, ptr %3, align 4, !tbaa !5
  %1883 = icmp eq i32 4, %1882
  br i1 %1883, label %1884, label %1885

1884:                                             ; preds = %1881
  br label %1941

1885:                                             ; preds = %1881
  %1886 = load i32, ptr %3, align 4, !tbaa !5
  %1887 = icmp eq i32 5, %1886
  br i1 %1887, label %1888, label %1889

1888:                                             ; preds = %1885
  br label %1939

1889:                                             ; preds = %1885
  %1890 = load i32, ptr %3, align 4, !tbaa !5
  %1891 = icmp eq i32 6, %1890
  br i1 %1891, label %1892, label %1893

1892:                                             ; preds = %1889
  br label %1937

1893:                                             ; preds = %1889
  %1894 = load i32, ptr %3, align 4, !tbaa !5
  %1895 = icmp eq i32 7, %1894
  br i1 %1895, label %1896, label %1897

1896:                                             ; preds = %1893
  br label %1935

1897:                                             ; preds = %1893
  %1898 = load i32, ptr %3, align 4, !tbaa !5
  %1899 = icmp eq i32 8, %1898
  br i1 %1899, label %1900, label %1901

1900:                                             ; preds = %1897
  br label %1933

1901:                                             ; preds = %1897
  %1902 = load i32, ptr %3, align 4, !tbaa !5
  %1903 = icmp eq i32 9, %1902
  br i1 %1903, label %1904, label %1905

1904:                                             ; preds = %1901
  br label %1931

1905:                                             ; preds = %1901
  %1906 = load i32, ptr %3, align 4, !tbaa !5
  %1907 = icmp eq i32 10, %1906
  br i1 %1907, label %1908, label %1909

1908:                                             ; preds = %1905
  br label %1929

1909:                                             ; preds = %1905
  %1910 = load i32, ptr %3, align 4, !tbaa !5
  %1911 = icmp eq i32 11, %1910
  br i1 %1911, label %1912, label %1913

1912:                                             ; preds = %1909
  br label %1927

1913:                                             ; preds = %1909
  %1914 = load i32, ptr %3, align 4, !tbaa !5
  %1915 = icmp eq i32 12, %1914
  br i1 %1915, label %1916, label %1917

1916:                                             ; preds = %1913
  br label %1925

1917:                                             ; preds = %1913
  %1918 = load i32, ptr %3, align 4, !tbaa !5
  %1919 = icmp eq i32 13, %1918
  br i1 %1919, label %1920, label %1921

1920:                                             ; preds = %1917
  br label %1923

1921:                                             ; preds = %1917
  call void @__assert_fail(ptr noundef @.str.1, ptr noundef @.str.2, i32 noundef 171, ptr noundef @__PRETTY_FUNCTION__.main) #10
  unreachable

1922:                                             ; No predecessors!
  br label %1923

1923:                                             ; preds = %1922, %1920
  %1924 = phi i32 [ 1, %1920 ], [ 0, %1922 ]
  br label %1925

1925:                                             ; preds = %1923, %1916
  %1926 = phi i32 [ 1, %1916 ], [ %1924, %1923 ]
  br label %1927

1927:                                             ; preds = %1925, %1912
  %1928 = phi i32 [ 2, %1912 ], [ %1926, %1925 ]
  br label %1929

1929:                                             ; preds = %1927, %1908
  %1930 = phi i32 [ 2, %1908 ], [ %1928, %1927 ]
  br label %1931

1931:                                             ; preds = %1929, %1904
  %1932 = phi i32 [ 4, %1904 ], [ %1930, %1929 ]
  br label %1933

1933:                                             ; preds = %1931, %1900
  %1934 = phi i32 [ 4, %1900 ], [ %1932, %1931 ]
  br label %1935

1935:                                             ; preds = %1933, %1896
  %1936 = phi i32 [ 8, %1896 ], [ %1934, %1933 ]
  br label %1937

1937:                                             ; preds = %1935, %1892
  %1938 = phi i32 [ 8, %1892 ], [ %1936, %1935 ]
  br label %1939

1939:                                             ; preds = %1937, %1888
  %1940 = phi i32 [ 1, %1888 ], [ %1938, %1937 ]
  br label %1941

1941:                                             ; preds = %1939, %1884
  %1942 = phi i32 [ 1, %1884 ], [ %1940, %1939 ]
  br label %1943

1943:                                             ; preds = %1941, %1880
  %1944 = phi i32 [ 2, %1880 ], [ %1942, %1941 ]
  br label %1945

1945:                                             ; preds = %1943, %1876
  %1946 = phi i32 [ 2, %1876 ], [ %1944, %1943 ]
  br label %1947

1947:                                             ; preds = %1945, %1872
  %1948 = phi i32 [ 4, %1872 ], [ %1946, %1945 ]
  br label %1949

1949:                                             ; preds = %1947, %1868
  %1950 = phi i32 [ 8, %1868 ], [ %1948, %1947 ]
  %1951 = sext i32 %1950 to i64
  %1952 = load i64, ptr %103, align 8, !tbaa !9
  %1953 = mul i64 %1951, %1952
  %1954 = call noalias ptr @malloc(i64 noundef %1953) #9
  store ptr %1954, ptr %9, align 8, !tbaa !11
  %1955 = load i64, ptr %103, align 8, !tbaa !9
  store i64 %1955, ptr %5, align 8, !tbaa !9
  br label %1956

1956:                                             ; preds = %1949, %1851
  %1957 = load ptr, ptr %9, align 8, !tbaa !11
  %1958 = icmp ne ptr null, %1957
  br i1 %1958, label %1959, label %2118

1959:                                             ; preds = %1956
  %1960 = load ptr, ptr %10, align 8, !tbaa !11
  %1961 = icmp ne ptr null, %1960
  br i1 %1961, label %1962, label %2118

1962:                                             ; preds = %1959
  %1963 = load i32, ptr %2, align 4, !tbaa !5
  %1964 = icmp eq i32 0, %1963
  br i1 %1964, label %1965, label %2118

1965:                                             ; preds = %1962
  br label %1966

1966:                                             ; preds = %1965
  call void @llvm.lifetime.start.p0(i64 8, ptr %104) #8
  store double 1.000000e+00, ptr %104, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr %105) #8
  %1967 = load double, ptr %104, align 8, !tbaa !13
  %1968 = load i64, ptr %103, align 8, !tbaa !9
  %1969 = uitofp i64 %1968 to double
  %1970 = fdiv double 1.000000e+00, %1969
  %1971 = load i64, ptr %103, align 8, !tbaa !9
  %1972 = uitofp i64 %1971 to double
  %1973 = fdiv double 1.000000e+00, %1972
  %1974 = call double @llvm.fmuladd.f64(double %1967, double %1970, double %1973)
  store double %1974, ptr %105, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 4, ptr %106) #8
  %1975 = getelementptr inbounds [2 x i64], ptr %4, i64 0, i64 0
  %1976 = load i64, ptr %1975, align 16, !tbaa !9
  %1977 = trunc i64 %1976 to i32
  store i32 %1977, ptr %106, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %107) #8
  %1978 = getelementptr inbounds [2 x i64], ptr %4, i64 0, i64 1
  %1979 = load i64, ptr %1978, align 8, !tbaa !9
  %1980 = trunc i64 %1979 to i32
  store i32 %1980, ptr %107, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %108) #8
  %1981 = getelementptr inbounds [2 x i64], ptr %4, i64 0, i64 0
  %1982 = load i64, ptr %1981, align 16, !tbaa !9
  %1983 = trunc i64 %1982 to i32
  store i32 %1983, ptr %108, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %109) #8
  store i32 0, ptr %109, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %110) #8
  store i32 0, ptr %110, align 4, !tbaa !5
  %1984 = load double, ptr %104, align 8, !tbaa !13
  %1985 = fcmp une double 0.000000e+00, %1984
  br i1 %1985, label %1986, label %2045

1986:                                             ; preds = %1966
  store i32 0, ptr %109, align 4, !tbaa !5
  br label %1987

1987:                                             ; preds = %2041, %1986
  %1988 = load i32, ptr %109, align 4, !tbaa !5
  %1989 = load i32, ptr %107, align 4, !tbaa !5
  %1990 = icmp slt i32 %1988, %1989
  br i1 %1990, label %1991, label %2044

1991:                                             ; preds = %1987
  store i32 0, ptr %110, align 4, !tbaa !5
  br label %1992

1992:                                             ; preds = %2017, %1991
  %1993 = load i32, ptr %110, align 4, !tbaa !5
  %1994 = load i32, ptr %106, align 4, !tbaa !5
  %1995 = icmp slt i32 %1993, %1994
  br i1 %1995, label %1996, label %2020

1996:                                             ; preds = %1992
  call void @llvm.lifetime.start.p0(i64 4, ptr %111) #8
  %1997 = load i32, ptr %109, align 4, !tbaa !5
  %1998 = load i32, ptr %108, align 4, !tbaa !5
  %1999 = mul nsw i32 %1997, %1998
  %2000 = load i32, ptr %110, align 4, !tbaa !5
  %2001 = add nsw i32 %1999, %2000
  store i32 %2001, ptr %111, align 4, !tbaa !5
  %2002 = load double, ptr %105, align 8, !tbaa !13
  %2003 = load i32, ptr %109, align 4, !tbaa !5
  %2004 = sitofp i32 %2003 to double
  %2005 = load i32, ptr %106, align 4, !tbaa !5
  %2006 = sitofp i32 %2005 to double
  %2007 = call double @llvm.fmuladd.f64(double %2004, double %2006, double 1.000000e+00)
  %2008 = load i32, ptr %110, align 4, !tbaa !5
  %2009 = sitofp i32 %2008 to double
  %2010 = fadd double %2007, %2009
  %2011 = fmul double %2002, %2010
  %2012 = fptrunc double %2011 to float
  %2013 = load ptr, ptr %9, align 8, !tbaa !11
  %2014 = load i32, ptr %111, align 4, !tbaa !5
  %2015 = sext i32 %2014 to i64
  %2016 = getelementptr inbounds float, ptr %2013, i64 %2015
  store float %2012, ptr %2016, align 4, !tbaa !15
  call void @llvm.lifetime.end.p0(i64 4, ptr %111) #8
  br label %2017

2017:                                             ; preds = %1996
  %2018 = load i32, ptr %110, align 4, !tbaa !5
  %2019 = add nsw i32 %2018, 1
  store i32 %2019, ptr %110, align 4, !tbaa !5
  br label %1992, !llvm.loop !48

2020:                                             ; preds = %1992
  br label %2021

2021:                                             ; preds = %2037, %2020
  %2022 = load i32, ptr %110, align 4, !tbaa !5
  %2023 = load i32, ptr %108, align 4, !tbaa !5
  %2024 = icmp slt i32 %2022, %2023
  br i1 %2024, label %2025, label %2040

2025:                                             ; preds = %2021
  call void @llvm.lifetime.start.p0(i64 4, ptr %112) #8
  %2026 = load i32, ptr %109, align 4, !tbaa !5
  %2027 = load i32, ptr %108, align 4, !tbaa !5
  %2028 = mul nsw i32 %2026, %2027
  %2029 = load i32, ptr %110, align 4, !tbaa !5
  %2030 = add nsw i32 %2028, %2029
  store i32 %2030, ptr %112, align 4, !tbaa !5
  %2031 = load double, ptr %104, align 8, !tbaa !13
  %2032 = fptrunc double %2031 to float
  %2033 = load ptr, ptr %9, align 8, !tbaa !11
  %2034 = load i32, ptr %112, align 4, !tbaa !5
  %2035 = sext i32 %2034 to i64
  %2036 = getelementptr inbounds float, ptr %2033, i64 %2035
  store float %2032, ptr %2036, align 4, !tbaa !15
  call void @llvm.lifetime.end.p0(i64 4, ptr %112) #8
  br label %2037

2037:                                             ; preds = %2025
  %2038 = load i32, ptr %110, align 4, !tbaa !5
  %2039 = add nsw i32 %2038, 1
  store i32 %2039, ptr %110, align 4, !tbaa !5
  br label %2021, !llvm.loop !49

2040:                                             ; preds = %2021
  br label %2041

2041:                                             ; preds = %2040
  %2042 = load i32, ptr %109, align 4, !tbaa !5
  %2043 = add nsw i32 %2042, 1
  store i32 %2043, ptr %109, align 4, !tbaa !5
  br label %1987, !llvm.loop !50

2044:                                             ; preds = %1987
  br label %2101

2045:                                             ; preds = %1966
  call void @llvm.lifetime.start.p0(i64 4, ptr %113) #8
  %2046 = load i32, ptr %107, align 4, !tbaa !5
  %2047 = load i32, ptr %108, align 4, !tbaa !5
  %2048 = mul nsw i32 %2046, %2047
  store i32 %2048, ptr %113, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %114) #8
  %2049 = load i32, ptr %113, align 4, !tbaa !5
  %2050 = add nsw i32 %2049, 1
  %2051 = sdiv i32 %2050, 2
  %2052 = sitofp i32 %2051 to float
  store float %2052, ptr %114, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %115) #8
  %2053 = load i64, ptr %103, align 8, !tbaa !9
  %2054 = uitofp i64 %2053 to double
  %2055 = fdiv double 1.000000e+00, %2054
  %2056 = fptrunc double %2055 to float
  %2057 = load float, ptr %114, align 4, !tbaa !15
  %2058 = fdiv float %2056, %2057
  store float %2058, ptr %115, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 8, ptr %116) #8
  %2059 = load i32, ptr %113, align 4, !tbaa !5
  %2060 = sext i32 %2059 to i64
  %2061 = call i64 @libxsmm_coprime2(i64 noundef %2060)
  store i64 %2061, ptr %116, align 8, !tbaa !9
  store i32 0, ptr %109, align 4, !tbaa !5
  br label %2062

2062:                                             ; preds = %2097, %2045
  %2063 = load i32, ptr %109, align 4, !tbaa !5
  %2064 = load i32, ptr %107, align 4, !tbaa !5
  %2065 = icmp slt i32 %2063, %2064
  br i1 %2065, label %2066, label %2100

2066:                                             ; preds = %2062
  store i32 0, ptr %110, align 4, !tbaa !5
  br label %2067

2067:                                             ; preds = %2093, %2066
  %2068 = load i32, ptr %110, align 4, !tbaa !5
  %2069 = load i32, ptr %108, align 4, !tbaa !5
  %2070 = icmp slt i32 %2068, %2069
  br i1 %2070, label %2071, label %2096

2071:                                             ; preds = %2067
  call void @llvm.lifetime.start.p0(i64 4, ptr %117) #8
  %2072 = load i32, ptr %109, align 4, !tbaa !5
  %2073 = load i32, ptr %108, align 4, !tbaa !5
  %2074 = mul nsw i32 %2072, %2073
  %2075 = load i32, ptr %110, align 4, !tbaa !5
  %2076 = add nsw i32 %2074, %2075
  store i32 %2076, ptr %117, align 4, !tbaa !5
  %2077 = load float, ptr %115, align 4, !tbaa !15
  %2078 = load i64, ptr %116, align 8, !tbaa !9
  %2079 = load i32, ptr %117, align 4, !tbaa !5
  %2080 = sext i32 %2079 to i64
  %2081 = mul i64 %2078, %2080
  %2082 = load i32, ptr %113, align 4, !tbaa !5
  %2083 = sext i32 %2082 to i64
  %2084 = urem i64 %2081, %2083
  %2085 = uitofp i64 %2084 to float
  %2086 = load float, ptr %114, align 4, !tbaa !15
  %2087 = fsub float %2085, %2086
  %2088 = fmul float %2077, %2087
  %2089 = load ptr, ptr %9, align 8, !tbaa !11
  %2090 = load i32, ptr %117, align 4, !tbaa !5
  %2091 = sext i32 %2090 to i64
  %2092 = getelementptr inbounds float, ptr %2089, i64 %2091
  store float %2088, ptr %2092, align 4, !tbaa !15
  call void @llvm.lifetime.end.p0(i64 4, ptr %117) #8
  br label %2093

2093:                                             ; preds = %2071
  %2094 = load i32, ptr %110, align 4, !tbaa !5
  %2095 = add nsw i32 %2094, 1
  store i32 %2095, ptr %110, align 4, !tbaa !5
  br label %2067, !llvm.loop !51

2096:                                             ; preds = %2067
  br label %2097

2097:                                             ; preds = %2096
  %2098 = load i32, ptr %109, align 4, !tbaa !5
  %2099 = add nsw i32 %2098, 1
  store i32 %2099, ptr %109, align 4, !tbaa !5
  br label %2062, !llvm.loop !52

2100:                                             ; preds = %2062
  call void @llvm.lifetime.end.p0(i64 8, ptr %116) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %115) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %114) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %113) #8
  br label %2101

2101:                                             ; preds = %2100, %2044
  call void @llvm.lifetime.end.p0(i64 4, ptr %110) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %109) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %108) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %107) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %106) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %105) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %104) #8
  br label %2102

2102:                                             ; preds = %2101
  br label %2103

2103:                                             ; preds = %2102
  %2104 = load ptr, ptr %9, align 8, !tbaa !11
  %2105 = load ptr, ptr %10, align 8, !tbaa !11
  %2106 = load i64, ptr %103, align 8, !tbaa !9
  call void @libxsmm_rne_convert_fp32_f16(ptr noundef %2104, ptr noundef %2105, i64 noundef %2106)
  %2107 = load ptr, ptr %10, align 8, !tbaa !11
  %2108 = load ptr, ptr %9, align 8, !tbaa !11
  %2109 = load i64, ptr %103, align 8, !tbaa !9
  call void @libxsmm_convert_f16_f32(ptr noundef %2107, ptr noundef %2108, i64 noundef %2109)
  %2110 = getelementptr inbounds [1024 x i8], ptr %11, i64 0, i64 0
  %2111 = getelementptr inbounds [2 x i64], ptr %4, i64 0, i64 0
  %2112 = load i64, ptr %6, align 8, !tbaa !9
  %2113 = load i64, ptr %7, align 8, !tbaa !9
  %2114 = load i64, ptr %8, align 8, !tbaa !9
  %2115 = load i32, ptr %3, align 4, !tbaa !5
  %2116 = load ptr, ptr %9, align 8, !tbaa !11
  %2117 = call i32 @libxsmm_mhd_read(ptr noundef %2110, ptr noundef null, ptr noundef %2111, ptr noundef null, i64 noundef %2112, i64 noundef %2113, i64 noundef %2114, i32 noundef %2115, ptr noundef null, ptr noundef %2116, ptr noundef @libxsmm_mhd_element_comparison, ptr noundef null, i64 noundef 0)
  store i32 %2117, ptr %2, align 4, !tbaa !5
  br label %2119

2118:                                             ; preds = %1962, %1959, %1956
  store i32 1, ptr %2, align 4, !tbaa !5
  br label %2119

2119:                                             ; preds = %2118, %2103
  call void @llvm.lifetime.end.p0(i64 8, ptr %103) #8
  br label %2387

2120:                                             ; preds = %1846
  call void @llvm.lifetime.start.p0(i64 8, ptr %118) #8
  %2121 = getelementptr inbounds [2 x i64], ptr %4, i64 0, i64 0
  %2122 = load i64, ptr %2121, align 16, !tbaa !9
  %2123 = getelementptr inbounds [2 x i64], ptr %4, i64 0, i64 1
  %2124 = load i64, ptr %2123, align 8, !tbaa !9
  %2125 = mul i64 %2122, %2124
  store i64 %2125, ptr %118, align 8, !tbaa !9
  %2126 = load i64, ptr %5, align 8, !tbaa !9
  %2127 = load i64, ptr %118, align 8, !tbaa !9
  %2128 = icmp ult i64 %2126, %2127
  br i1 %2128, label %2129, label %2225

2129:                                             ; preds = %2120
  %2130 = load ptr, ptr %10, align 8, !tbaa !11
  call void @free(ptr noundef %2130) #8
  %2131 = load ptr, ptr %9, align 8, !tbaa !11
  call void @free(ptr noundef %2131) #8
  %2132 = load i64, ptr %118, align 8, !tbaa !9
  %2133 = mul i64 2, %2132
  %2134 = call noalias ptr @malloc(i64 noundef %2133) #9
  store ptr %2134, ptr %10, align 8, !tbaa !11
  %2135 = load i32, ptr %3, align 4, !tbaa !5
  %2136 = icmp eq i32 0, %2135
  br i1 %2136, label %2137, label %2138

2137:                                             ; preds = %2129
  br label %2218

2138:                                             ; preds = %2129
  %2139 = load i32, ptr %3, align 4, !tbaa !5
  %2140 = icmp eq i32 1, %2139
  br i1 %2140, label %2141, label %2142

2141:                                             ; preds = %2138
  br label %2216

2142:                                             ; preds = %2138
  %2143 = load i32, ptr %3, align 4, !tbaa !5
  %2144 = icmp eq i32 2, %2143
  br i1 %2144, label %2145, label %2146

2145:                                             ; preds = %2142
  br label %2214

2146:                                             ; preds = %2142
  %2147 = load i32, ptr %3, align 4, !tbaa !5
  %2148 = icmp eq i32 3, %2147
  br i1 %2148, label %2149, label %2150

2149:                                             ; preds = %2146
  br label %2212

2150:                                             ; preds = %2146
  %2151 = load i32, ptr %3, align 4, !tbaa !5
  %2152 = icmp eq i32 4, %2151
  br i1 %2152, label %2153, label %2154

2153:                                             ; preds = %2150
  br label %2210

2154:                                             ; preds = %2150
  %2155 = load i32, ptr %3, align 4, !tbaa !5
  %2156 = icmp eq i32 5, %2155
  br i1 %2156, label %2157, label %2158

2157:                                             ; preds = %2154
  br label %2208

2158:                                             ; preds = %2154
  %2159 = load i32, ptr %3, align 4, !tbaa !5
  %2160 = icmp eq i32 6, %2159
  br i1 %2160, label %2161, label %2162

2161:                                             ; preds = %2158
  br label %2206

2162:                                             ; preds = %2158
  %2163 = load i32, ptr %3, align 4, !tbaa !5
  %2164 = icmp eq i32 7, %2163
  br i1 %2164, label %2165, label %2166

2165:                                             ; preds = %2162
  br label %2204

2166:                                             ; preds = %2162
  %2167 = load i32, ptr %3, align 4, !tbaa !5
  %2168 = icmp eq i32 8, %2167
  br i1 %2168, label %2169, label %2170

2169:                                             ; preds = %2166
  br label %2202

2170:                                             ; preds = %2166
  %2171 = load i32, ptr %3, align 4, !tbaa !5
  %2172 = icmp eq i32 9, %2171
  br i1 %2172, label %2173, label %2174

2173:                                             ; preds = %2170
  br label %2200

2174:                                             ; preds = %2170
  %2175 = load i32, ptr %3, align 4, !tbaa !5
  %2176 = icmp eq i32 10, %2175
  br i1 %2176, label %2177, label %2178

2177:                                             ; preds = %2174
  br label %2198

2178:                                             ; preds = %2174
  %2179 = load i32, ptr %3, align 4, !tbaa !5
  %2180 = icmp eq i32 11, %2179
  br i1 %2180, label %2181, label %2182

2181:                                             ; preds = %2178
  br label %2196

2182:                                             ; preds = %2178
  %2183 = load i32, ptr %3, align 4, !tbaa !5
  %2184 = icmp eq i32 12, %2183
  br i1 %2184, label %2185, label %2186

2185:                                             ; preds = %2182
  br label %2194

2186:                                             ; preds = %2182
  %2187 = load i32, ptr %3, align 4, !tbaa !5
  %2188 = icmp eq i32 13, %2187
  br i1 %2188, label %2189, label %2190

2189:                                             ; preds = %2186
  br label %2192

2190:                                             ; preds = %2186
  call void @__assert_fail(ptr noundef @.str.1, ptr noundef @.str.2, i32 noundef 190, ptr noundef @__PRETTY_FUNCTION__.main) #10
  unreachable

2191:                                             ; No predecessors!
  br label %2192

2192:                                             ; preds = %2191, %2189
  %2193 = phi i32 [ 1, %2189 ], [ 0, %2191 ]
  br label %2194

2194:                                             ; preds = %2192, %2185
  %2195 = phi i32 [ 1, %2185 ], [ %2193, %2192 ]
  br label %2196

2196:                                             ; preds = %2194, %2181
  %2197 = phi i32 [ 2, %2181 ], [ %2195, %2194 ]
  br label %2198

2198:                                             ; preds = %2196, %2177
  %2199 = phi i32 [ 2, %2177 ], [ %2197, %2196 ]
  br label %2200

2200:                                             ; preds = %2198, %2173
  %2201 = phi i32 [ 4, %2173 ], [ %2199, %2198 ]
  br label %2202

2202:                                             ; preds = %2200, %2169
  %2203 = phi i32 [ 4, %2169 ], [ %2201, %2200 ]
  br label %2204

2204:                                             ; preds = %2202, %2165
  %2205 = phi i32 [ 8, %2165 ], [ %2203, %2202 ]
  br label %2206

2206:                                             ; preds = %2204, %2161
  %2207 = phi i32 [ 8, %2161 ], [ %2205, %2204 ]
  br label %2208

2208:                                             ; preds = %2206, %2157
  %2209 = phi i32 [ 1, %2157 ], [ %2207, %2206 ]
  br label %2210

2210:                                             ; preds = %2208, %2153
  %2211 = phi i32 [ 1, %2153 ], [ %2209, %2208 ]
  br label %2212

2212:                                             ; preds = %2210, %2149
  %2213 = phi i32 [ 2, %2149 ], [ %2211, %2210 ]
  br label %2214

2214:                                             ; preds = %2212, %2145
  %2215 = phi i32 [ 2, %2145 ], [ %2213, %2212 ]
  br label %2216

2216:                                             ; preds = %2214, %2141
  %2217 = phi i32 [ 4, %2141 ], [ %2215, %2214 ]
  br label %2218

2218:                                             ; preds = %2216, %2137
  %2219 = phi i32 [ 8, %2137 ], [ %2217, %2216 ]
  %2220 = sext i32 %2219 to i64
  %2221 = load i64, ptr %118, align 8, !tbaa !9
  %2222 = mul i64 %2220, %2221
  %2223 = call noalias ptr @malloc(i64 noundef %2222) #9
  store ptr %2223, ptr %9, align 8, !tbaa !11
  %2224 = load i64, ptr %118, align 8, !tbaa !9
  store i64 %2224, ptr %5, align 8, !tbaa !9
  br label %2225

2225:                                             ; preds = %2218, %2120
  %2226 = load ptr, ptr %9, align 8, !tbaa !11
  %2227 = icmp ne ptr null, %2226
  br i1 %2227, label %2228, label %2385

2228:                                             ; preds = %2225
  %2229 = load ptr, ptr %10, align 8, !tbaa !11
  %2230 = icmp ne ptr null, %2229
  br i1 %2230, label %2231, label %2385

2231:                                             ; preds = %2228
  %2232 = load i32, ptr %2, align 4, !tbaa !5
  %2233 = icmp eq i32 0, %2232
  br i1 %2233, label %2234, label %2385

2234:                                             ; preds = %2231
  br label %2235

2235:                                             ; preds = %2234
  call void @llvm.lifetime.start.p0(i64 8, ptr %119) #8
  store double 1.000000e+00, ptr %119, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr %120) #8
  %2236 = load double, ptr %119, align 8, !tbaa !13
  %2237 = load i64, ptr %118, align 8, !tbaa !9
  %2238 = uitofp i64 %2237 to double
  %2239 = fdiv double 1.000000e+00, %2238
  %2240 = load i64, ptr %118, align 8, !tbaa !9
  %2241 = uitofp i64 %2240 to double
  %2242 = fdiv double 1.000000e+00, %2241
  %2243 = call double @llvm.fmuladd.f64(double %2236, double %2239, double %2242)
  store double %2243, ptr %120, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 4, ptr %121) #8
  %2244 = getelementptr inbounds [2 x i64], ptr %4, i64 0, i64 0
  %2245 = load i64, ptr %2244, align 16, !tbaa !9
  %2246 = trunc i64 %2245 to i32
  store i32 %2246, ptr %121, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %122) #8
  %2247 = getelementptr inbounds [2 x i64], ptr %4, i64 0, i64 1
  %2248 = load i64, ptr %2247, align 8, !tbaa !9
  %2249 = trunc i64 %2248 to i32
  store i32 %2249, ptr %122, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %123) #8
  %2250 = getelementptr inbounds [2 x i64], ptr %4, i64 0, i64 0
  %2251 = load i64, ptr %2250, align 16, !tbaa !9
  %2252 = trunc i64 %2251 to i32
  store i32 %2252, ptr %123, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %124) #8
  store i32 0, ptr %124, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %125) #8
  store i32 0, ptr %125, align 4, !tbaa !5
  %2253 = load double, ptr %119, align 8, !tbaa !13
  %2254 = fcmp une double 0.000000e+00, %2253
  br i1 %2254, label %2255, label %2314

2255:                                             ; preds = %2235
  store i32 0, ptr %124, align 4, !tbaa !5
  br label %2256

2256:                                             ; preds = %2310, %2255
  %2257 = load i32, ptr %124, align 4, !tbaa !5
  %2258 = load i32, ptr %122, align 4, !tbaa !5
  %2259 = icmp slt i32 %2257, %2258
  br i1 %2259, label %2260, label %2313

2260:                                             ; preds = %2256
  store i32 0, ptr %125, align 4, !tbaa !5
  br label %2261

2261:                                             ; preds = %2286, %2260
  %2262 = load i32, ptr %125, align 4, !tbaa !5
  %2263 = load i32, ptr %121, align 4, !tbaa !5
  %2264 = icmp slt i32 %2262, %2263
  br i1 %2264, label %2265, label %2289

2265:                                             ; preds = %2261
  call void @llvm.lifetime.start.p0(i64 4, ptr %126) #8
  %2266 = load i32, ptr %124, align 4, !tbaa !5
  %2267 = load i32, ptr %123, align 4, !tbaa !5
  %2268 = mul nsw i32 %2266, %2267
  %2269 = load i32, ptr %125, align 4, !tbaa !5
  %2270 = add nsw i32 %2268, %2269
  store i32 %2270, ptr %126, align 4, !tbaa !5
  %2271 = load double, ptr %120, align 8, !tbaa !13
  %2272 = load i32, ptr %124, align 4, !tbaa !5
  %2273 = sitofp i32 %2272 to double
  %2274 = load i32, ptr %121, align 4, !tbaa !5
  %2275 = sitofp i32 %2274 to double
  %2276 = call double @llvm.fmuladd.f64(double %2273, double %2275, double 1.000000e+00)
  %2277 = load i32, ptr %125, align 4, !tbaa !5
  %2278 = sitofp i32 %2277 to double
  %2279 = fadd double %2276, %2278
  %2280 = fmul double %2271, %2279
  %2281 = fptrunc double %2280 to float
  %2282 = load ptr, ptr %9, align 8, !tbaa !11
  %2283 = load i32, ptr %126, align 4, !tbaa !5
  %2284 = sext i32 %2283 to i64
  %2285 = getelementptr inbounds float, ptr %2282, i64 %2284
  store float %2281, ptr %2285, align 4, !tbaa !15
  call void @llvm.lifetime.end.p0(i64 4, ptr %126) #8
  br label %2286

2286:                                             ; preds = %2265
  %2287 = load i32, ptr %125, align 4, !tbaa !5
  %2288 = add nsw i32 %2287, 1
  store i32 %2288, ptr %125, align 4, !tbaa !5
  br label %2261, !llvm.loop !53

2289:                                             ; preds = %2261
  br label %2290

2290:                                             ; preds = %2306, %2289
  %2291 = load i32, ptr %125, align 4, !tbaa !5
  %2292 = load i32, ptr %123, align 4, !tbaa !5
  %2293 = icmp slt i32 %2291, %2292
  br i1 %2293, label %2294, label %2309

2294:                                             ; preds = %2290
  call void @llvm.lifetime.start.p0(i64 4, ptr %127) #8
  %2295 = load i32, ptr %124, align 4, !tbaa !5
  %2296 = load i32, ptr %123, align 4, !tbaa !5
  %2297 = mul nsw i32 %2295, %2296
  %2298 = load i32, ptr %125, align 4, !tbaa !5
  %2299 = add nsw i32 %2297, %2298
  store i32 %2299, ptr %127, align 4, !tbaa !5
  %2300 = load double, ptr %119, align 8, !tbaa !13
  %2301 = fptrunc double %2300 to float
  %2302 = load ptr, ptr %9, align 8, !tbaa !11
  %2303 = load i32, ptr %127, align 4, !tbaa !5
  %2304 = sext i32 %2303 to i64
  %2305 = getelementptr inbounds float, ptr %2302, i64 %2304
  store float %2301, ptr %2305, align 4, !tbaa !15
  call void @llvm.lifetime.end.p0(i64 4, ptr %127) #8
  br label %2306

2306:                                             ; preds = %2294
  %2307 = load i32, ptr %125, align 4, !tbaa !5
  %2308 = add nsw i32 %2307, 1
  store i32 %2308, ptr %125, align 4, !tbaa !5
  br label %2290, !llvm.loop !54

2309:                                             ; preds = %2290
  br label %2310

2310:                                             ; preds = %2309
  %2311 = load i32, ptr %124, align 4, !tbaa !5
  %2312 = add nsw i32 %2311, 1
  store i32 %2312, ptr %124, align 4, !tbaa !5
  br label %2256, !llvm.loop !55

2313:                                             ; preds = %2256
  br label %2370

2314:                                             ; preds = %2235
  call void @llvm.lifetime.start.p0(i64 4, ptr %128) #8
  %2315 = load i32, ptr %122, align 4, !tbaa !5
  %2316 = load i32, ptr %123, align 4, !tbaa !5
  %2317 = mul nsw i32 %2315, %2316
  store i32 %2317, ptr %128, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %129) #8
  %2318 = load i32, ptr %128, align 4, !tbaa !5
  %2319 = add nsw i32 %2318, 1
  %2320 = sdiv i32 %2319, 2
  %2321 = sitofp i32 %2320 to float
  store float %2321, ptr %129, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %130) #8
  %2322 = load i64, ptr %118, align 8, !tbaa !9
  %2323 = uitofp i64 %2322 to double
  %2324 = fdiv double 1.000000e+00, %2323
  %2325 = fptrunc double %2324 to float
  %2326 = load float, ptr %129, align 4, !tbaa !15
  %2327 = fdiv float %2325, %2326
  store float %2327, ptr %130, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 8, ptr %131) #8
  %2328 = load i32, ptr %128, align 4, !tbaa !5
  %2329 = sext i32 %2328 to i64
  %2330 = call i64 @libxsmm_coprime2(i64 noundef %2329)
  store i64 %2330, ptr %131, align 8, !tbaa !9
  store i32 0, ptr %124, align 4, !tbaa !5
  br label %2331

2331:                                             ; preds = %2366, %2314
  %2332 = load i32, ptr %124, align 4, !tbaa !5
  %2333 = load i32, ptr %122, align 4, !tbaa !5
  %2334 = icmp slt i32 %2332, %2333
  br i1 %2334, label %2335, label %2369

2335:                                             ; preds = %2331
  store i32 0, ptr %125, align 4, !tbaa !5
  br label %2336

2336:                                             ; preds = %2362, %2335
  %2337 = load i32, ptr %125, align 4, !tbaa !5
  %2338 = load i32, ptr %123, align 4, !tbaa !5
  %2339 = icmp slt i32 %2337, %2338
  br i1 %2339, label %2340, label %2365

2340:                                             ; preds = %2336
  call void @llvm.lifetime.start.p0(i64 4, ptr %132) #8
  %2341 = load i32, ptr %124, align 4, !tbaa !5
  %2342 = load i32, ptr %123, align 4, !tbaa !5
  %2343 = mul nsw i32 %2341, %2342
  %2344 = load i32, ptr %125, align 4, !tbaa !5
  %2345 = add nsw i32 %2343, %2344
  store i32 %2345, ptr %132, align 4, !tbaa !5
  %2346 = load float, ptr %130, align 4, !tbaa !15
  %2347 = load i64, ptr %131, align 8, !tbaa !9
  %2348 = load i32, ptr %132, align 4, !tbaa !5
  %2349 = sext i32 %2348 to i64
  %2350 = mul i64 %2347, %2349
  %2351 = load i32, ptr %128, align 4, !tbaa !5
  %2352 = sext i32 %2351 to i64
  %2353 = urem i64 %2350, %2352
  %2354 = uitofp i64 %2353 to float
  %2355 = load float, ptr %129, align 4, !tbaa !15
  %2356 = fsub float %2354, %2355
  %2357 = fmul float %2346, %2356
  %2358 = load ptr, ptr %9, align 8, !tbaa !11
  %2359 = load i32, ptr %132, align 4, !tbaa !5
  %2360 = sext i32 %2359 to i64
  %2361 = getelementptr inbounds float, ptr %2358, i64 %2360
  store float %2357, ptr %2361, align 4, !tbaa !15
  call void @llvm.lifetime.end.p0(i64 4, ptr %132) #8
  br label %2362

2362:                                             ; preds = %2340
  %2363 = load i32, ptr %125, align 4, !tbaa !5
  %2364 = add nsw i32 %2363, 1
  store i32 %2364, ptr %125, align 4, !tbaa !5
  br label %2336, !llvm.loop !56

2365:                                             ; preds = %2336
  br label %2366

2366:                                             ; preds = %2365
  %2367 = load i32, ptr %124, align 4, !tbaa !5
  %2368 = add nsw i32 %2367, 1
  store i32 %2368, ptr %124, align 4, !tbaa !5
  br label %2331, !llvm.loop !57

2369:                                             ; preds = %2331
  call void @llvm.lifetime.end.p0(i64 8, ptr %131) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %130) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %129) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %128) #8
  br label %2370

2370:                                             ; preds = %2369, %2313
  call void @llvm.lifetime.end.p0(i64 4, ptr %125) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %124) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %123) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %122) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %121) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %120) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %119) #8
  br label %2371

2371:                                             ; preds = %2370
  br label %2372

2372:                                             ; preds = %2371
  %2373 = load ptr, ptr %9, align 8, !tbaa !11
  %2374 = load ptr, ptr %10, align 8, !tbaa !11
  %2375 = load i64, ptr %118, align 8, !tbaa !9
  call void @libxsmm_rne_convert_fp32_f16(ptr noundef %2373, ptr noundef %2374, i64 noundef %2375)
  %2376 = load ptr, ptr %10, align 8, !tbaa !11
  %2377 = load ptr, ptr %9, align 8, !tbaa !11
  %2378 = load i64, ptr %118, align 8, !tbaa !9
  call void @libxsmm_convert_f16_f32(ptr noundef %2376, ptr noundef %2377, i64 noundef %2378)
  %2379 = getelementptr inbounds [2 x i64], ptr %4, i64 0, i64 0
  %2380 = load i64, ptr %6, align 8, !tbaa !9
  %2381 = load i64, ptr %7, align 8, !tbaa !9
  %2382 = load i32, ptr %3, align 4, !tbaa !5
  %2383 = load ptr, ptr %9, align 8, !tbaa !11
  %2384 = call i32 @libxsmm_mhd_write(ptr noundef @.str.5, ptr noundef null, ptr noundef %2379, ptr noundef null, i64 noundef %2380, i64 noundef %2381, i32 noundef %2382, ptr noundef null, ptr noundef %2383, ptr noundef null, ptr noundef null, ptr noundef null, i64 noundef 0)
  store i32 %2384, ptr %2, align 4, !tbaa !5
  br label %2386

2385:                                             ; preds = %2231, %2228, %2225
  store i32 1, ptr %2, align 4, !tbaa !5
  br label %2386

2386:                                             ; preds = %2385, %2372
  call void @llvm.lifetime.end.p0(i64 8, ptr %118) #8
  br label %2387

2387:                                             ; preds = %2386, %2119
  %2388 = getelementptr inbounds [1024 x i8], ptr %11, i64 0, i64 0
  %2389 = getelementptr inbounds [2 x i64], ptr %4, i64 0, i64 0
  %2390 = call i32 @libxsmm_mhd_read_header(ptr noundef @.str.6, i64 noundef 1024, ptr noundef %2388, ptr noundef %6, ptr noundef %2389, ptr noundef %7, ptr noundef %3, ptr noundef %8, ptr noundef null)
  %2391 = icmp eq i32 0, %2390
  br i1 %2391, label %2392, label %2661

2392:                                             ; preds = %2387
  call void @llvm.lifetime.start.p0(i64 8, ptr %133) #8
  %2393 = getelementptr inbounds [2 x i64], ptr %4, i64 0, i64 0
  %2394 = load i64, ptr %2393, align 16, !tbaa !9
  %2395 = getelementptr inbounds [2 x i64], ptr %4, i64 0, i64 1
  %2396 = load i64, ptr %2395, align 8, !tbaa !9
  %2397 = mul i64 %2394, %2396
  store i64 %2397, ptr %133, align 8, !tbaa !9
  %2398 = load i64, ptr %5, align 8, !tbaa !9
  %2399 = load i64, ptr %133, align 8, !tbaa !9
  %2400 = icmp ult i64 %2398, %2399
  br i1 %2400, label %2401, label %2497

2401:                                             ; preds = %2392
  %2402 = load ptr, ptr %10, align 8, !tbaa !11
  call void @free(ptr noundef %2402) #8
  %2403 = load ptr, ptr %9, align 8, !tbaa !11
  call void @free(ptr noundef %2403) #8
  %2404 = load i64, ptr %133, align 8, !tbaa !9
  %2405 = mul i64 1, %2404
  %2406 = call noalias ptr @malloc(i64 noundef %2405) #9
  store ptr %2406, ptr %10, align 8, !tbaa !11
  %2407 = load i32, ptr %3, align 4, !tbaa !5
  %2408 = icmp eq i32 0, %2407
  br i1 %2408, label %2409, label %2410

2409:                                             ; preds = %2401
  br label %2490

2410:                                             ; preds = %2401
  %2411 = load i32, ptr %3, align 4, !tbaa !5
  %2412 = icmp eq i32 1, %2411
  br i1 %2412, label %2413, label %2414

2413:                                             ; preds = %2410
  br label %2488

2414:                                             ; preds = %2410
  %2415 = load i32, ptr %3, align 4, !tbaa !5
  %2416 = icmp eq i32 2, %2415
  br i1 %2416, label %2417, label %2418

2417:                                             ; preds = %2414
  br label %2486

2418:                                             ; preds = %2414
  %2419 = load i32, ptr %3, align 4, !tbaa !5
  %2420 = icmp eq i32 3, %2419
  br i1 %2420, label %2421, label %2422

2421:                                             ; preds = %2418
  br label %2484

2422:                                             ; preds = %2418
  %2423 = load i32, ptr %3, align 4, !tbaa !5
  %2424 = icmp eq i32 4, %2423
  br i1 %2424, label %2425, label %2426

2425:                                             ; preds = %2422
  br label %2482

2426:                                             ; preds = %2422
  %2427 = load i32, ptr %3, align 4, !tbaa !5
  %2428 = icmp eq i32 5, %2427
  br i1 %2428, label %2429, label %2430

2429:                                             ; preds = %2426
  br label %2480

2430:                                             ; preds = %2426
  %2431 = load i32, ptr %3, align 4, !tbaa !5
  %2432 = icmp eq i32 6, %2431
  br i1 %2432, label %2433, label %2434

2433:                                             ; preds = %2430
  br label %2478

2434:                                             ; preds = %2430
  %2435 = load i32, ptr %3, align 4, !tbaa !5
  %2436 = icmp eq i32 7, %2435
  br i1 %2436, label %2437, label %2438

2437:                                             ; preds = %2434
  br label %2476

2438:                                             ; preds = %2434
  %2439 = load i32, ptr %3, align 4, !tbaa !5
  %2440 = icmp eq i32 8, %2439
  br i1 %2440, label %2441, label %2442

2441:                                             ; preds = %2438
  br label %2474

2442:                                             ; preds = %2438
  %2443 = load i32, ptr %3, align 4, !tbaa !5
  %2444 = icmp eq i32 9, %2443
  br i1 %2444, label %2445, label %2446

2445:                                             ; preds = %2442
  br label %2472

2446:                                             ; preds = %2442
  %2447 = load i32, ptr %3, align 4, !tbaa !5
  %2448 = icmp eq i32 10, %2447
  br i1 %2448, label %2449, label %2450

2449:                                             ; preds = %2446
  br label %2470

2450:                                             ; preds = %2446
  %2451 = load i32, ptr %3, align 4, !tbaa !5
  %2452 = icmp eq i32 11, %2451
  br i1 %2452, label %2453, label %2454

2453:                                             ; preds = %2450
  br label %2468

2454:                                             ; preds = %2450
  %2455 = load i32, ptr %3, align 4, !tbaa !5
  %2456 = icmp eq i32 12, %2455
  br i1 %2456, label %2457, label %2458

2457:                                             ; preds = %2454
  br label %2466

2458:                                             ; preds = %2454
  %2459 = load i32, ptr %3, align 4, !tbaa !5
  %2460 = icmp eq i32 13, %2459
  br i1 %2460, label %2461, label %2462

2461:                                             ; preds = %2458
  br label %2464

2462:                                             ; preds = %2458
  call void @__assert_fail(ptr noundef @.str.1, ptr noundef @.str.2, i32 noundef 212, ptr noundef @__PRETTY_FUNCTION__.main) #10
  unreachable

2463:                                             ; No predecessors!
  br label %2464

2464:                                             ; preds = %2463, %2461
  %2465 = phi i32 [ 1, %2461 ], [ 0, %2463 ]
  br label %2466

2466:                                             ; preds = %2464, %2457
  %2467 = phi i32 [ 1, %2457 ], [ %2465, %2464 ]
  br label %2468

2468:                                             ; preds = %2466, %2453
  %2469 = phi i32 [ 2, %2453 ], [ %2467, %2466 ]
  br label %2470

2470:                                             ; preds = %2468, %2449
  %2471 = phi i32 [ 2, %2449 ], [ %2469, %2468 ]
  br label %2472

2472:                                             ; preds = %2470, %2445
  %2473 = phi i32 [ 4, %2445 ], [ %2471, %2470 ]
  br label %2474

2474:                                             ; preds = %2472, %2441
  %2475 = phi i32 [ 4, %2441 ], [ %2473, %2472 ]
  br label %2476

2476:                                             ; preds = %2474, %2437
  %2477 = phi i32 [ 8, %2437 ], [ %2475, %2474 ]
  br label %2478

2478:                                             ; preds = %2476, %2433
  %2479 = phi i32 [ 8, %2433 ], [ %2477, %2476 ]
  br label %2480

2480:                                             ; preds = %2478, %2429
  %2481 = phi i32 [ 1, %2429 ], [ %2479, %2478 ]
  br label %2482

2482:                                             ; preds = %2480, %2425
  %2483 = phi i32 [ 1, %2425 ], [ %2481, %2480 ]
  br label %2484

2484:                                             ; preds = %2482, %2421
  %2485 = phi i32 [ 2, %2421 ], [ %2483, %2482 ]
  br label %2486

2486:                                             ; preds = %2484, %2417
  %2487 = phi i32 [ 2, %2417 ], [ %2485, %2484 ]
  br label %2488

2488:                                             ; preds = %2486, %2413
  %2489 = phi i32 [ 4, %2413 ], [ %2487, %2486 ]
  br label %2490

2490:                                             ; preds = %2488, %2409
  %2491 = phi i32 [ 8, %2409 ], [ %2489, %2488 ]
  %2492 = sext i32 %2491 to i64
  %2493 = load i64, ptr %133, align 8, !tbaa !9
  %2494 = mul i64 %2492, %2493
  %2495 = call noalias ptr @malloc(i64 noundef %2494) #9
  store ptr %2495, ptr %9, align 8, !tbaa !11
  %2496 = load i64, ptr %133, align 8, !tbaa !9
  store i64 %2496, ptr %5, align 8, !tbaa !9
  br label %2497

2497:                                             ; preds = %2490, %2392
  %2498 = load ptr, ptr %9, align 8, !tbaa !11
  %2499 = icmp ne ptr null, %2498
  br i1 %2499, label %2500, label %2659

2500:                                             ; preds = %2497
  %2501 = load ptr, ptr %10, align 8, !tbaa !11
  %2502 = icmp ne ptr null, %2501
  br i1 %2502, label %2503, label %2659

2503:                                             ; preds = %2500
  %2504 = load i32, ptr %2, align 4, !tbaa !5
  %2505 = icmp eq i32 0, %2504
  br i1 %2505, label %2506, label %2659

2506:                                             ; preds = %2503
  br label %2507

2507:                                             ; preds = %2506
  call void @llvm.lifetime.start.p0(i64 8, ptr %134) #8
  store double 1.000000e+00, ptr %134, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr %135) #8
  %2508 = load double, ptr %134, align 8, !tbaa !13
  %2509 = load i64, ptr %133, align 8, !tbaa !9
  %2510 = uitofp i64 %2509 to double
  %2511 = fdiv double 1.000000e+00, %2510
  %2512 = load i64, ptr %133, align 8, !tbaa !9
  %2513 = uitofp i64 %2512 to double
  %2514 = fdiv double 1.000000e+00, %2513
  %2515 = call double @llvm.fmuladd.f64(double %2508, double %2511, double %2514)
  store double %2515, ptr %135, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 4, ptr %136) #8
  %2516 = getelementptr inbounds [2 x i64], ptr %4, i64 0, i64 0
  %2517 = load i64, ptr %2516, align 16, !tbaa !9
  %2518 = trunc i64 %2517 to i32
  store i32 %2518, ptr %136, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %137) #8
  %2519 = getelementptr inbounds [2 x i64], ptr %4, i64 0, i64 1
  %2520 = load i64, ptr %2519, align 8, !tbaa !9
  %2521 = trunc i64 %2520 to i32
  store i32 %2521, ptr %137, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %138) #8
  %2522 = getelementptr inbounds [2 x i64], ptr %4, i64 0, i64 0
  %2523 = load i64, ptr %2522, align 16, !tbaa !9
  %2524 = trunc i64 %2523 to i32
  store i32 %2524, ptr %138, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %139) #8
  store i32 0, ptr %139, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %140) #8
  store i32 0, ptr %140, align 4, !tbaa !5
  %2525 = load double, ptr %134, align 8, !tbaa !13
  %2526 = fcmp une double 0.000000e+00, %2525
  br i1 %2526, label %2527, label %2586

2527:                                             ; preds = %2507
  store i32 0, ptr %139, align 4, !tbaa !5
  br label %2528

2528:                                             ; preds = %2582, %2527
  %2529 = load i32, ptr %139, align 4, !tbaa !5
  %2530 = load i32, ptr %137, align 4, !tbaa !5
  %2531 = icmp slt i32 %2529, %2530
  br i1 %2531, label %2532, label %2585

2532:                                             ; preds = %2528
  store i32 0, ptr %140, align 4, !tbaa !5
  br label %2533

2533:                                             ; preds = %2558, %2532
  %2534 = load i32, ptr %140, align 4, !tbaa !5
  %2535 = load i32, ptr %136, align 4, !tbaa !5
  %2536 = icmp slt i32 %2534, %2535
  br i1 %2536, label %2537, label %2561

2537:                                             ; preds = %2533
  call void @llvm.lifetime.start.p0(i64 4, ptr %141) #8
  %2538 = load i32, ptr %139, align 4, !tbaa !5
  %2539 = load i32, ptr %138, align 4, !tbaa !5
  %2540 = mul nsw i32 %2538, %2539
  %2541 = load i32, ptr %140, align 4, !tbaa !5
  %2542 = add nsw i32 %2540, %2541
  store i32 %2542, ptr %141, align 4, !tbaa !5
  %2543 = load double, ptr %135, align 8, !tbaa !13
  %2544 = load i32, ptr %139, align 4, !tbaa !5
  %2545 = sitofp i32 %2544 to double
  %2546 = load i32, ptr %136, align 4, !tbaa !5
  %2547 = sitofp i32 %2546 to double
  %2548 = call double @llvm.fmuladd.f64(double %2545, double %2547, double 1.000000e+00)
  %2549 = load i32, ptr %140, align 4, !tbaa !5
  %2550 = sitofp i32 %2549 to double
  %2551 = fadd double %2548, %2550
  %2552 = fmul double %2543, %2551
  %2553 = fptrunc double %2552 to float
  %2554 = load ptr, ptr %9, align 8, !tbaa !11
  %2555 = load i32, ptr %141, align 4, !tbaa !5
  %2556 = sext i32 %2555 to i64
  %2557 = getelementptr inbounds float, ptr %2554, i64 %2556
  store float %2553, ptr %2557, align 4, !tbaa !15
  call void @llvm.lifetime.end.p0(i64 4, ptr %141) #8
  br label %2558

2558:                                             ; preds = %2537
  %2559 = load i32, ptr %140, align 4, !tbaa !5
  %2560 = add nsw i32 %2559, 1
  store i32 %2560, ptr %140, align 4, !tbaa !5
  br label %2533, !llvm.loop !58

2561:                                             ; preds = %2533
  br label %2562

2562:                                             ; preds = %2578, %2561
  %2563 = load i32, ptr %140, align 4, !tbaa !5
  %2564 = load i32, ptr %138, align 4, !tbaa !5
  %2565 = icmp slt i32 %2563, %2564
  br i1 %2565, label %2566, label %2581

2566:                                             ; preds = %2562
  call void @llvm.lifetime.start.p0(i64 4, ptr %142) #8
  %2567 = load i32, ptr %139, align 4, !tbaa !5
  %2568 = load i32, ptr %138, align 4, !tbaa !5
  %2569 = mul nsw i32 %2567, %2568
  %2570 = load i32, ptr %140, align 4, !tbaa !5
  %2571 = add nsw i32 %2569, %2570
  store i32 %2571, ptr %142, align 4, !tbaa !5
  %2572 = load double, ptr %134, align 8, !tbaa !13
  %2573 = fptrunc double %2572 to float
  %2574 = load ptr, ptr %9, align 8, !tbaa !11
  %2575 = load i32, ptr %142, align 4, !tbaa !5
  %2576 = sext i32 %2575 to i64
  %2577 = getelementptr inbounds float, ptr %2574, i64 %2576
  store float %2573, ptr %2577, align 4, !tbaa !15
  call void @llvm.lifetime.end.p0(i64 4, ptr %142) #8
  br label %2578

2578:                                             ; preds = %2566
  %2579 = load i32, ptr %140, align 4, !tbaa !5
  %2580 = add nsw i32 %2579, 1
  store i32 %2580, ptr %140, align 4, !tbaa !5
  br label %2562, !llvm.loop !59

2581:                                             ; preds = %2562
  br label %2582

2582:                                             ; preds = %2581
  %2583 = load i32, ptr %139, align 4, !tbaa !5
  %2584 = add nsw i32 %2583, 1
  store i32 %2584, ptr %139, align 4, !tbaa !5
  br label %2528, !llvm.loop !60

2585:                                             ; preds = %2528
  br label %2642

2586:                                             ; preds = %2507
  call void @llvm.lifetime.start.p0(i64 4, ptr %143) #8
  %2587 = load i32, ptr %137, align 4, !tbaa !5
  %2588 = load i32, ptr %138, align 4, !tbaa !5
  %2589 = mul nsw i32 %2587, %2588
  store i32 %2589, ptr %143, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %144) #8
  %2590 = load i32, ptr %143, align 4, !tbaa !5
  %2591 = add nsw i32 %2590, 1
  %2592 = sdiv i32 %2591, 2
  %2593 = sitofp i32 %2592 to float
  store float %2593, ptr %144, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %145) #8
  %2594 = load i64, ptr %133, align 8, !tbaa !9
  %2595 = uitofp i64 %2594 to double
  %2596 = fdiv double 1.000000e+00, %2595
  %2597 = fptrunc double %2596 to float
  %2598 = load float, ptr %144, align 4, !tbaa !15
  %2599 = fdiv float %2597, %2598
  store float %2599, ptr %145, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 8, ptr %146) #8
  %2600 = load i32, ptr %143, align 4, !tbaa !5
  %2601 = sext i32 %2600 to i64
  %2602 = call i64 @libxsmm_coprime2(i64 noundef %2601)
  store i64 %2602, ptr %146, align 8, !tbaa !9
  store i32 0, ptr %139, align 4, !tbaa !5
  br label %2603

2603:                                             ; preds = %2638, %2586
  %2604 = load i32, ptr %139, align 4, !tbaa !5
  %2605 = load i32, ptr %137, align 4, !tbaa !5
  %2606 = icmp slt i32 %2604, %2605
  br i1 %2606, label %2607, label %2641

2607:                                             ; preds = %2603
  store i32 0, ptr %140, align 4, !tbaa !5
  br label %2608

2608:                                             ; preds = %2634, %2607
  %2609 = load i32, ptr %140, align 4, !tbaa !5
  %2610 = load i32, ptr %138, align 4, !tbaa !5
  %2611 = icmp slt i32 %2609, %2610
  br i1 %2611, label %2612, label %2637

2612:                                             ; preds = %2608
  call void @llvm.lifetime.start.p0(i64 4, ptr %147) #8
  %2613 = load i32, ptr %139, align 4, !tbaa !5
  %2614 = load i32, ptr %138, align 4, !tbaa !5
  %2615 = mul nsw i32 %2613, %2614
  %2616 = load i32, ptr %140, align 4, !tbaa !5
  %2617 = add nsw i32 %2615, %2616
  store i32 %2617, ptr %147, align 4, !tbaa !5
  %2618 = load float, ptr %145, align 4, !tbaa !15
  %2619 = load i64, ptr %146, align 8, !tbaa !9
  %2620 = load i32, ptr %147, align 4, !tbaa !5
  %2621 = sext i32 %2620 to i64
  %2622 = mul i64 %2619, %2621
  %2623 = load i32, ptr %143, align 4, !tbaa !5
  %2624 = sext i32 %2623 to i64
  %2625 = urem i64 %2622, %2624
  %2626 = uitofp i64 %2625 to float
  %2627 = load float, ptr %144, align 4, !tbaa !15
  %2628 = fsub float %2626, %2627
  %2629 = fmul float %2618, %2628
  %2630 = load ptr, ptr %9, align 8, !tbaa !11
  %2631 = load i32, ptr %147, align 4, !tbaa !5
  %2632 = sext i32 %2631 to i64
  %2633 = getelementptr inbounds float, ptr %2630, i64 %2632
  store float %2629, ptr %2633, align 4, !tbaa !15
  call void @llvm.lifetime.end.p0(i64 4, ptr %147) #8
  br label %2634

2634:                                             ; preds = %2612
  %2635 = load i32, ptr %140, align 4, !tbaa !5
  %2636 = add nsw i32 %2635, 1
  store i32 %2636, ptr %140, align 4, !tbaa !5
  br label %2608, !llvm.loop !61

2637:                                             ; preds = %2608
  br label %2638

2638:                                             ; preds = %2637
  %2639 = load i32, ptr %139, align 4, !tbaa !5
  %2640 = add nsw i32 %2639, 1
  store i32 %2640, ptr %139, align 4, !tbaa !5
  br label %2603, !llvm.loop !62

2641:                                             ; preds = %2603
  call void @llvm.lifetime.end.p0(i64 8, ptr %146) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %145) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %144) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %143) #8
  br label %2642

2642:                                             ; preds = %2641, %2585
  call void @llvm.lifetime.end.p0(i64 4, ptr %140) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %139) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %138) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %137) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %136) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %135) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %134) #8
  br label %2643

2643:                                             ; preds = %2642
  br label %2644

2644:                                             ; preds = %2643
  %2645 = load ptr, ptr %9, align 8, !tbaa !11
  %2646 = load ptr, ptr %10, align 8, !tbaa !11
  %2647 = load i64, ptr %133, align 8, !tbaa !9
  call void @libxsmm_rne_convert_fp32_bf8(ptr noundef %2645, ptr noundef %2646, i64 noundef %2647)
  %2648 = load ptr, ptr %10, align 8, !tbaa !11
  %2649 = load ptr, ptr %9, align 8, !tbaa !11
  %2650 = load i64, ptr %133, align 8, !tbaa !9
  call void @libxsmm_convert_bf8_f32(ptr noundef %2648, ptr noundef %2649, i64 noundef %2650)
  %2651 = getelementptr inbounds [1024 x i8], ptr %11, i64 0, i64 0
  %2652 = getelementptr inbounds [2 x i64], ptr %4, i64 0, i64 0
  %2653 = load i64, ptr %6, align 8, !tbaa !9
  %2654 = load i64, ptr %7, align 8, !tbaa !9
  %2655 = load i64, ptr %8, align 8, !tbaa !9
  %2656 = load i32, ptr %3, align 4, !tbaa !5
  %2657 = load ptr, ptr %9, align 8, !tbaa !11
  %2658 = call i32 @libxsmm_mhd_read(ptr noundef %2651, ptr noundef null, ptr noundef %2652, ptr noundef null, i64 noundef %2653, i64 noundef %2654, i64 noundef %2655, i32 noundef %2656, ptr noundef null, ptr noundef %2657, ptr noundef @libxsmm_mhd_element_comparison, ptr noundef null, i64 noundef 0)
  store i32 %2658, ptr %2, align 4, !tbaa !5
  br label %2660

2659:                                             ; preds = %2503, %2500, %2497
  store i32 1, ptr %2, align 4, !tbaa !5
  br label %2660

2660:                                             ; preds = %2659, %2644
  call void @llvm.lifetime.end.p0(i64 8, ptr %133) #8
  br label %2928

2661:                                             ; preds = %2387
  call void @llvm.lifetime.start.p0(i64 8, ptr %148) #8
  %2662 = getelementptr inbounds [2 x i64], ptr %4, i64 0, i64 0
  %2663 = load i64, ptr %2662, align 16, !tbaa !9
  %2664 = getelementptr inbounds [2 x i64], ptr %4, i64 0, i64 1
  %2665 = load i64, ptr %2664, align 8, !tbaa !9
  %2666 = mul i64 %2663, %2665
  store i64 %2666, ptr %148, align 8, !tbaa !9
  %2667 = load i64, ptr %5, align 8, !tbaa !9
  %2668 = load i64, ptr %148, align 8, !tbaa !9
  %2669 = icmp ult i64 %2667, %2668
  br i1 %2669, label %2670, label %2766

2670:                                             ; preds = %2661
  %2671 = load ptr, ptr %10, align 8, !tbaa !11
  call void @free(ptr noundef %2671) #8
  %2672 = load ptr, ptr %9, align 8, !tbaa !11
  call void @free(ptr noundef %2672) #8
  %2673 = load i64, ptr %148, align 8, !tbaa !9
  %2674 = mul i64 1, %2673
  %2675 = call noalias ptr @malloc(i64 noundef %2674) #9
  store ptr %2675, ptr %10, align 8, !tbaa !11
  %2676 = load i32, ptr %3, align 4, !tbaa !5
  %2677 = icmp eq i32 0, %2676
  br i1 %2677, label %2678, label %2679

2678:                                             ; preds = %2670
  br label %2759

2679:                                             ; preds = %2670
  %2680 = load i32, ptr %3, align 4, !tbaa !5
  %2681 = icmp eq i32 1, %2680
  br i1 %2681, label %2682, label %2683

2682:                                             ; preds = %2679
  br label %2757

2683:                                             ; preds = %2679
  %2684 = load i32, ptr %3, align 4, !tbaa !5
  %2685 = icmp eq i32 2, %2684
  br i1 %2685, label %2686, label %2687

2686:                                             ; preds = %2683
  br label %2755

2687:                                             ; preds = %2683
  %2688 = load i32, ptr %3, align 4, !tbaa !5
  %2689 = icmp eq i32 3, %2688
  br i1 %2689, label %2690, label %2691

2690:                                             ; preds = %2687
  br label %2753

2691:                                             ; preds = %2687
  %2692 = load i32, ptr %3, align 4, !tbaa !5
  %2693 = icmp eq i32 4, %2692
  br i1 %2693, label %2694, label %2695

2694:                                             ; preds = %2691
  br label %2751

2695:                                             ; preds = %2691
  %2696 = load i32, ptr %3, align 4, !tbaa !5
  %2697 = icmp eq i32 5, %2696
  br i1 %2697, label %2698, label %2699

2698:                                             ; preds = %2695
  br label %2749

2699:                                             ; preds = %2695
  %2700 = load i32, ptr %3, align 4, !tbaa !5
  %2701 = icmp eq i32 6, %2700
  br i1 %2701, label %2702, label %2703

2702:                                             ; preds = %2699
  br label %2747

2703:                                             ; preds = %2699
  %2704 = load i32, ptr %3, align 4, !tbaa !5
  %2705 = icmp eq i32 7, %2704
  br i1 %2705, label %2706, label %2707

2706:                                             ; preds = %2703
  br label %2745

2707:                                             ; preds = %2703
  %2708 = load i32, ptr %3, align 4, !tbaa !5
  %2709 = icmp eq i32 8, %2708
  br i1 %2709, label %2710, label %2711

2710:                                             ; preds = %2707
  br label %2743

2711:                                             ; preds = %2707
  %2712 = load i32, ptr %3, align 4, !tbaa !5
  %2713 = icmp eq i32 9, %2712
  br i1 %2713, label %2714, label %2715

2714:                                             ; preds = %2711
  br label %2741

2715:                                             ; preds = %2711
  %2716 = load i32, ptr %3, align 4, !tbaa !5
  %2717 = icmp eq i32 10, %2716
  br i1 %2717, label %2718, label %2719

2718:                                             ; preds = %2715
  br label %2739

2719:                                             ; preds = %2715
  %2720 = load i32, ptr %3, align 4, !tbaa !5
  %2721 = icmp eq i32 11, %2720
  br i1 %2721, label %2722, label %2723

2722:                                             ; preds = %2719
  br label %2737

2723:                                             ; preds = %2719
  %2724 = load i32, ptr %3, align 4, !tbaa !5
  %2725 = icmp eq i32 12, %2724
  br i1 %2725, label %2726, label %2727

2726:                                             ; preds = %2723
  br label %2735

2727:                                             ; preds = %2723
  %2728 = load i32, ptr %3, align 4, !tbaa !5
  %2729 = icmp eq i32 13, %2728
  br i1 %2729, label %2730, label %2731

2730:                                             ; preds = %2727
  br label %2733

2731:                                             ; preds = %2727
  call void @__assert_fail(ptr noundef @.str.1, ptr noundef @.str.2, i32 noundef 231, ptr noundef @__PRETTY_FUNCTION__.main) #10
  unreachable

2732:                                             ; No predecessors!
  br label %2733

2733:                                             ; preds = %2732, %2730
  %2734 = phi i32 [ 1, %2730 ], [ 0, %2732 ]
  br label %2735

2735:                                             ; preds = %2733, %2726
  %2736 = phi i32 [ 1, %2726 ], [ %2734, %2733 ]
  br label %2737

2737:                                             ; preds = %2735, %2722
  %2738 = phi i32 [ 2, %2722 ], [ %2736, %2735 ]
  br label %2739

2739:                                             ; preds = %2737, %2718
  %2740 = phi i32 [ 2, %2718 ], [ %2738, %2737 ]
  br label %2741

2741:                                             ; preds = %2739, %2714
  %2742 = phi i32 [ 4, %2714 ], [ %2740, %2739 ]
  br label %2743

2743:                                             ; preds = %2741, %2710
  %2744 = phi i32 [ 4, %2710 ], [ %2742, %2741 ]
  br label %2745

2745:                                             ; preds = %2743, %2706
  %2746 = phi i32 [ 8, %2706 ], [ %2744, %2743 ]
  br label %2747

2747:                                             ; preds = %2745, %2702
  %2748 = phi i32 [ 8, %2702 ], [ %2746, %2745 ]
  br label %2749

2749:                                             ; preds = %2747, %2698
  %2750 = phi i32 [ 1, %2698 ], [ %2748, %2747 ]
  br label %2751

2751:                                             ; preds = %2749, %2694
  %2752 = phi i32 [ 1, %2694 ], [ %2750, %2749 ]
  br label %2753

2753:                                             ; preds = %2751, %2690
  %2754 = phi i32 [ 2, %2690 ], [ %2752, %2751 ]
  br label %2755

2755:                                             ; preds = %2753, %2686
  %2756 = phi i32 [ 2, %2686 ], [ %2754, %2753 ]
  br label %2757

2757:                                             ; preds = %2755, %2682
  %2758 = phi i32 [ 4, %2682 ], [ %2756, %2755 ]
  br label %2759

2759:                                             ; preds = %2757, %2678
  %2760 = phi i32 [ 8, %2678 ], [ %2758, %2757 ]
  %2761 = sext i32 %2760 to i64
  %2762 = load i64, ptr %148, align 8, !tbaa !9
  %2763 = mul i64 %2761, %2762
  %2764 = call noalias ptr @malloc(i64 noundef %2763) #9
  store ptr %2764, ptr %9, align 8, !tbaa !11
  %2765 = load i64, ptr %148, align 8, !tbaa !9
  store i64 %2765, ptr %5, align 8, !tbaa !9
  br label %2766

2766:                                             ; preds = %2759, %2661
  %2767 = load ptr, ptr %9, align 8, !tbaa !11
  %2768 = icmp ne ptr null, %2767
  br i1 %2768, label %2769, label %2926

2769:                                             ; preds = %2766
  %2770 = load ptr, ptr %10, align 8, !tbaa !11
  %2771 = icmp ne ptr null, %2770
  br i1 %2771, label %2772, label %2926

2772:                                             ; preds = %2769
  %2773 = load i32, ptr %2, align 4, !tbaa !5
  %2774 = icmp eq i32 0, %2773
  br i1 %2774, label %2775, label %2926

2775:                                             ; preds = %2772
  br label %2776

2776:                                             ; preds = %2775
  call void @llvm.lifetime.start.p0(i64 8, ptr %149) #8
  store double 1.000000e+00, ptr %149, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr %150) #8
  %2777 = load double, ptr %149, align 8, !tbaa !13
  %2778 = load i64, ptr %148, align 8, !tbaa !9
  %2779 = uitofp i64 %2778 to double
  %2780 = fdiv double 1.000000e+00, %2779
  %2781 = load i64, ptr %148, align 8, !tbaa !9
  %2782 = uitofp i64 %2781 to double
  %2783 = fdiv double 1.000000e+00, %2782
  %2784 = call double @llvm.fmuladd.f64(double %2777, double %2780, double %2783)
  store double %2784, ptr %150, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 4, ptr %151) #8
  %2785 = getelementptr inbounds [2 x i64], ptr %4, i64 0, i64 0
  %2786 = load i64, ptr %2785, align 16, !tbaa !9
  %2787 = trunc i64 %2786 to i32
  store i32 %2787, ptr %151, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %152) #8
  %2788 = getelementptr inbounds [2 x i64], ptr %4, i64 0, i64 1
  %2789 = load i64, ptr %2788, align 8, !tbaa !9
  %2790 = trunc i64 %2789 to i32
  store i32 %2790, ptr %152, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %153) #8
  %2791 = getelementptr inbounds [2 x i64], ptr %4, i64 0, i64 0
  %2792 = load i64, ptr %2791, align 16, !tbaa !9
  %2793 = trunc i64 %2792 to i32
  store i32 %2793, ptr %153, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %154) #8
  store i32 0, ptr %154, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %155) #8
  store i32 0, ptr %155, align 4, !tbaa !5
  %2794 = load double, ptr %149, align 8, !tbaa !13
  %2795 = fcmp une double 0.000000e+00, %2794
  br i1 %2795, label %2796, label %2855

2796:                                             ; preds = %2776
  store i32 0, ptr %154, align 4, !tbaa !5
  br label %2797

2797:                                             ; preds = %2851, %2796
  %2798 = load i32, ptr %154, align 4, !tbaa !5
  %2799 = load i32, ptr %152, align 4, !tbaa !5
  %2800 = icmp slt i32 %2798, %2799
  br i1 %2800, label %2801, label %2854

2801:                                             ; preds = %2797
  store i32 0, ptr %155, align 4, !tbaa !5
  br label %2802

2802:                                             ; preds = %2827, %2801
  %2803 = load i32, ptr %155, align 4, !tbaa !5
  %2804 = load i32, ptr %151, align 4, !tbaa !5
  %2805 = icmp slt i32 %2803, %2804
  br i1 %2805, label %2806, label %2830

2806:                                             ; preds = %2802
  call void @llvm.lifetime.start.p0(i64 4, ptr %156) #8
  %2807 = load i32, ptr %154, align 4, !tbaa !5
  %2808 = load i32, ptr %153, align 4, !tbaa !5
  %2809 = mul nsw i32 %2807, %2808
  %2810 = load i32, ptr %155, align 4, !tbaa !5
  %2811 = add nsw i32 %2809, %2810
  store i32 %2811, ptr %156, align 4, !tbaa !5
  %2812 = load double, ptr %150, align 8, !tbaa !13
  %2813 = load i32, ptr %154, align 4, !tbaa !5
  %2814 = sitofp i32 %2813 to double
  %2815 = load i32, ptr %151, align 4, !tbaa !5
  %2816 = sitofp i32 %2815 to double
  %2817 = call double @llvm.fmuladd.f64(double %2814, double %2816, double 1.000000e+00)
  %2818 = load i32, ptr %155, align 4, !tbaa !5
  %2819 = sitofp i32 %2818 to double
  %2820 = fadd double %2817, %2819
  %2821 = fmul double %2812, %2820
  %2822 = fptrunc double %2821 to float
  %2823 = load ptr, ptr %9, align 8, !tbaa !11
  %2824 = load i32, ptr %156, align 4, !tbaa !5
  %2825 = sext i32 %2824 to i64
  %2826 = getelementptr inbounds float, ptr %2823, i64 %2825
  store float %2822, ptr %2826, align 4, !tbaa !15
  call void @llvm.lifetime.end.p0(i64 4, ptr %156) #8
  br label %2827

2827:                                             ; preds = %2806
  %2828 = load i32, ptr %155, align 4, !tbaa !5
  %2829 = add nsw i32 %2828, 1
  store i32 %2829, ptr %155, align 4, !tbaa !5
  br label %2802, !llvm.loop !63

2830:                                             ; preds = %2802
  br label %2831

2831:                                             ; preds = %2847, %2830
  %2832 = load i32, ptr %155, align 4, !tbaa !5
  %2833 = load i32, ptr %153, align 4, !tbaa !5
  %2834 = icmp slt i32 %2832, %2833
  br i1 %2834, label %2835, label %2850

2835:                                             ; preds = %2831
  call void @llvm.lifetime.start.p0(i64 4, ptr %157) #8
  %2836 = load i32, ptr %154, align 4, !tbaa !5
  %2837 = load i32, ptr %153, align 4, !tbaa !5
  %2838 = mul nsw i32 %2836, %2837
  %2839 = load i32, ptr %155, align 4, !tbaa !5
  %2840 = add nsw i32 %2838, %2839
  store i32 %2840, ptr %157, align 4, !tbaa !5
  %2841 = load double, ptr %149, align 8, !tbaa !13
  %2842 = fptrunc double %2841 to float
  %2843 = load ptr, ptr %9, align 8, !tbaa !11
  %2844 = load i32, ptr %157, align 4, !tbaa !5
  %2845 = sext i32 %2844 to i64
  %2846 = getelementptr inbounds float, ptr %2843, i64 %2845
  store float %2842, ptr %2846, align 4, !tbaa !15
  call void @llvm.lifetime.end.p0(i64 4, ptr %157) #8
  br label %2847

2847:                                             ; preds = %2835
  %2848 = load i32, ptr %155, align 4, !tbaa !5
  %2849 = add nsw i32 %2848, 1
  store i32 %2849, ptr %155, align 4, !tbaa !5
  br label %2831, !llvm.loop !64

2850:                                             ; preds = %2831
  br label %2851

2851:                                             ; preds = %2850
  %2852 = load i32, ptr %154, align 4, !tbaa !5
  %2853 = add nsw i32 %2852, 1
  store i32 %2853, ptr %154, align 4, !tbaa !5
  br label %2797, !llvm.loop !65

2854:                                             ; preds = %2797
  br label %2911

2855:                                             ; preds = %2776
  call void @llvm.lifetime.start.p0(i64 4, ptr %158) #8
  %2856 = load i32, ptr %152, align 4, !tbaa !5
  %2857 = load i32, ptr %153, align 4, !tbaa !5
  %2858 = mul nsw i32 %2856, %2857
  store i32 %2858, ptr %158, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %159) #8
  %2859 = load i32, ptr %158, align 4, !tbaa !5
  %2860 = add nsw i32 %2859, 1
  %2861 = sdiv i32 %2860, 2
  %2862 = sitofp i32 %2861 to float
  store float %2862, ptr %159, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %160) #8
  %2863 = load i64, ptr %148, align 8, !tbaa !9
  %2864 = uitofp i64 %2863 to double
  %2865 = fdiv double 1.000000e+00, %2864
  %2866 = fptrunc double %2865 to float
  %2867 = load float, ptr %159, align 4, !tbaa !15
  %2868 = fdiv float %2866, %2867
  store float %2868, ptr %160, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 8, ptr %161) #8
  %2869 = load i32, ptr %158, align 4, !tbaa !5
  %2870 = sext i32 %2869 to i64
  %2871 = call i64 @libxsmm_coprime2(i64 noundef %2870)
  store i64 %2871, ptr %161, align 8, !tbaa !9
  store i32 0, ptr %154, align 4, !tbaa !5
  br label %2872

2872:                                             ; preds = %2907, %2855
  %2873 = load i32, ptr %154, align 4, !tbaa !5
  %2874 = load i32, ptr %152, align 4, !tbaa !5
  %2875 = icmp slt i32 %2873, %2874
  br i1 %2875, label %2876, label %2910

2876:                                             ; preds = %2872
  store i32 0, ptr %155, align 4, !tbaa !5
  br label %2877

2877:                                             ; preds = %2903, %2876
  %2878 = load i32, ptr %155, align 4, !tbaa !5
  %2879 = load i32, ptr %153, align 4, !tbaa !5
  %2880 = icmp slt i32 %2878, %2879
  br i1 %2880, label %2881, label %2906

2881:                                             ; preds = %2877
  call void @llvm.lifetime.start.p0(i64 4, ptr %162) #8
  %2882 = load i32, ptr %154, align 4, !tbaa !5
  %2883 = load i32, ptr %153, align 4, !tbaa !5
  %2884 = mul nsw i32 %2882, %2883
  %2885 = load i32, ptr %155, align 4, !tbaa !5
  %2886 = add nsw i32 %2884, %2885
  store i32 %2886, ptr %162, align 4, !tbaa !5
  %2887 = load float, ptr %160, align 4, !tbaa !15
  %2888 = load i64, ptr %161, align 8, !tbaa !9
  %2889 = load i32, ptr %162, align 4, !tbaa !5
  %2890 = sext i32 %2889 to i64
  %2891 = mul i64 %2888, %2890
  %2892 = load i32, ptr %158, align 4, !tbaa !5
  %2893 = sext i32 %2892 to i64
  %2894 = urem i64 %2891, %2893
  %2895 = uitofp i64 %2894 to float
  %2896 = load float, ptr %159, align 4, !tbaa !15
  %2897 = fsub float %2895, %2896
  %2898 = fmul float %2887, %2897
  %2899 = load ptr, ptr %9, align 8, !tbaa !11
  %2900 = load i32, ptr %162, align 4, !tbaa !5
  %2901 = sext i32 %2900 to i64
  %2902 = getelementptr inbounds float, ptr %2899, i64 %2901
  store float %2898, ptr %2902, align 4, !tbaa !15
  call void @llvm.lifetime.end.p0(i64 4, ptr %162) #8
  br label %2903

2903:                                             ; preds = %2881
  %2904 = load i32, ptr %155, align 4, !tbaa !5
  %2905 = add nsw i32 %2904, 1
  store i32 %2905, ptr %155, align 4, !tbaa !5
  br label %2877, !llvm.loop !66

2906:                                             ; preds = %2877
  br label %2907

2907:                                             ; preds = %2906
  %2908 = load i32, ptr %154, align 4, !tbaa !5
  %2909 = add nsw i32 %2908, 1
  store i32 %2909, ptr %154, align 4, !tbaa !5
  br label %2872, !llvm.loop !67

2910:                                             ; preds = %2872
  call void @llvm.lifetime.end.p0(i64 8, ptr %161) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %160) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %159) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %158) #8
  br label %2911

2911:                                             ; preds = %2910, %2854
  call void @llvm.lifetime.end.p0(i64 4, ptr %155) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %154) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %153) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %152) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %151) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %150) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %149) #8
  br label %2912

2912:                                             ; preds = %2911
  br label %2913

2913:                                             ; preds = %2912
  %2914 = load ptr, ptr %9, align 8, !tbaa !11
  %2915 = load ptr, ptr %10, align 8, !tbaa !11
  %2916 = load i64, ptr %148, align 8, !tbaa !9
  call void @libxsmm_rne_convert_fp32_bf8(ptr noundef %2914, ptr noundef %2915, i64 noundef %2916)
  %2917 = load ptr, ptr %10, align 8, !tbaa !11
  %2918 = load ptr, ptr %9, align 8, !tbaa !11
  %2919 = load i64, ptr %148, align 8, !tbaa !9
  call void @libxsmm_convert_bf8_f32(ptr noundef %2917, ptr noundef %2918, i64 noundef %2919)
  %2920 = getelementptr inbounds [2 x i64], ptr %4, i64 0, i64 0
  %2921 = load i64, ptr %6, align 8, !tbaa !9
  %2922 = load i64, ptr %7, align 8, !tbaa !9
  %2923 = load i32, ptr %3, align 4, !tbaa !5
  %2924 = load ptr, ptr %9, align 8, !tbaa !11
  %2925 = call i32 @libxsmm_mhd_write(ptr noundef @.str.6, ptr noundef null, ptr noundef %2920, ptr noundef null, i64 noundef %2921, i64 noundef %2922, i32 noundef %2923, ptr noundef null, ptr noundef %2924, ptr noundef null, ptr noundef null, ptr noundef null, i64 noundef 0)
  store i32 %2925, ptr %2, align 4, !tbaa !5
  br label %2927

2926:                                             ; preds = %2772, %2769, %2766
  store i32 1, ptr %2, align 4, !tbaa !5
  br label %2927

2927:                                             ; preds = %2926, %2913
  call void @llvm.lifetime.end.p0(i64 8, ptr %148) #8
  br label %2928

2928:                                             ; preds = %2927, %2660
  %2929 = getelementptr inbounds [1024 x i8], ptr %11, i64 0, i64 0
  %2930 = getelementptr inbounds [2 x i64], ptr %4, i64 0, i64 0
  %2931 = call i32 @libxsmm_mhd_read_header(ptr noundef @.str.7, i64 noundef 1024, ptr noundef %2929, ptr noundef %6, ptr noundef %2930, ptr noundef %7, ptr noundef %3, ptr noundef %8, ptr noundef null)
  %2932 = icmp eq i32 0, %2931
  br i1 %2932, label %2933, label %3204

2933:                                             ; preds = %2928
  call void @llvm.lifetime.start.p0(i64 8, ptr %163) #8
  %2934 = getelementptr inbounds [2 x i64], ptr %4, i64 0, i64 0
  %2935 = load i64, ptr %2934, align 16, !tbaa !9
  %2936 = getelementptr inbounds [2 x i64], ptr %4, i64 0, i64 1
  %2937 = load i64, ptr %2936, align 8, !tbaa !9
  %2938 = mul i64 %2935, %2937
  store i64 %2938, ptr %163, align 8, !tbaa !9
  %2939 = load i64, ptr %5, align 8, !tbaa !9
  %2940 = load i64, ptr %163, align 8, !tbaa !9
  %2941 = icmp ult i64 %2939, %2940
  br i1 %2941, label %2942, label %3038

2942:                                             ; preds = %2933
  %2943 = load ptr, ptr %10, align 8, !tbaa !11
  call void @free(ptr noundef %2943) #8
  %2944 = load ptr, ptr %9, align 8, !tbaa !11
  call void @free(ptr noundef %2944) #8
  %2945 = load i64, ptr %163, align 8, !tbaa !9
  %2946 = mul i64 1, %2945
  %2947 = call noalias ptr @malloc(i64 noundef %2946) #9
  store ptr %2947, ptr %10, align 8, !tbaa !11
  %2948 = load i32, ptr %3, align 4, !tbaa !5
  %2949 = icmp eq i32 0, %2948
  br i1 %2949, label %2950, label %2951

2950:                                             ; preds = %2942
  br label %3031

2951:                                             ; preds = %2942
  %2952 = load i32, ptr %3, align 4, !tbaa !5
  %2953 = icmp eq i32 1, %2952
  br i1 %2953, label %2954, label %2955

2954:                                             ; preds = %2951
  br label %3029

2955:                                             ; preds = %2951
  %2956 = load i32, ptr %3, align 4, !tbaa !5
  %2957 = icmp eq i32 2, %2956
  br i1 %2957, label %2958, label %2959

2958:                                             ; preds = %2955
  br label %3027

2959:                                             ; preds = %2955
  %2960 = load i32, ptr %3, align 4, !tbaa !5
  %2961 = icmp eq i32 3, %2960
  br i1 %2961, label %2962, label %2963

2962:                                             ; preds = %2959
  br label %3025

2963:                                             ; preds = %2959
  %2964 = load i32, ptr %3, align 4, !tbaa !5
  %2965 = icmp eq i32 4, %2964
  br i1 %2965, label %2966, label %2967

2966:                                             ; preds = %2963
  br label %3023

2967:                                             ; preds = %2963
  %2968 = load i32, ptr %3, align 4, !tbaa !5
  %2969 = icmp eq i32 5, %2968
  br i1 %2969, label %2970, label %2971

2970:                                             ; preds = %2967
  br label %3021

2971:                                             ; preds = %2967
  %2972 = load i32, ptr %3, align 4, !tbaa !5
  %2973 = icmp eq i32 6, %2972
  br i1 %2973, label %2974, label %2975

2974:                                             ; preds = %2971
  br label %3019

2975:                                             ; preds = %2971
  %2976 = load i32, ptr %3, align 4, !tbaa !5
  %2977 = icmp eq i32 7, %2976
  br i1 %2977, label %2978, label %2979

2978:                                             ; preds = %2975
  br label %3017

2979:                                             ; preds = %2975
  %2980 = load i32, ptr %3, align 4, !tbaa !5
  %2981 = icmp eq i32 8, %2980
  br i1 %2981, label %2982, label %2983

2982:                                             ; preds = %2979
  br label %3015

2983:                                             ; preds = %2979
  %2984 = load i32, ptr %3, align 4, !tbaa !5
  %2985 = icmp eq i32 9, %2984
  br i1 %2985, label %2986, label %2987

2986:                                             ; preds = %2983
  br label %3013

2987:                                             ; preds = %2983
  %2988 = load i32, ptr %3, align 4, !tbaa !5
  %2989 = icmp eq i32 10, %2988
  br i1 %2989, label %2990, label %2991

2990:                                             ; preds = %2987
  br label %3011

2991:                                             ; preds = %2987
  %2992 = load i32, ptr %3, align 4, !tbaa !5
  %2993 = icmp eq i32 11, %2992
  br i1 %2993, label %2994, label %2995

2994:                                             ; preds = %2991
  br label %3009

2995:                                             ; preds = %2991
  %2996 = load i32, ptr %3, align 4, !tbaa !5
  %2997 = icmp eq i32 12, %2996
  br i1 %2997, label %2998, label %2999

2998:                                             ; preds = %2995
  br label %3007

2999:                                             ; preds = %2995
  %3000 = load i32, ptr %3, align 4, !tbaa !5
  %3001 = icmp eq i32 13, %3000
  br i1 %3001, label %3002, label %3003

3002:                                             ; preds = %2999
  br label %3005

3003:                                             ; preds = %2999
  call void @__assert_fail(ptr noundef @.str.1, ptr noundef @.str.2, i32 noundef 253, ptr noundef @__PRETTY_FUNCTION__.main) #10
  unreachable

3004:                                             ; No predecessors!
  br label %3005

3005:                                             ; preds = %3004, %3002
  %3006 = phi i32 [ 1, %3002 ], [ 0, %3004 ]
  br label %3007

3007:                                             ; preds = %3005, %2998
  %3008 = phi i32 [ 1, %2998 ], [ %3006, %3005 ]
  br label %3009

3009:                                             ; preds = %3007, %2994
  %3010 = phi i32 [ 2, %2994 ], [ %3008, %3007 ]
  br label %3011

3011:                                             ; preds = %3009, %2990
  %3012 = phi i32 [ 2, %2990 ], [ %3010, %3009 ]
  br label %3013

3013:                                             ; preds = %3011, %2986
  %3014 = phi i32 [ 4, %2986 ], [ %3012, %3011 ]
  br label %3015

3015:                                             ; preds = %3013, %2982
  %3016 = phi i32 [ 4, %2982 ], [ %3014, %3013 ]
  br label %3017

3017:                                             ; preds = %3015, %2978
  %3018 = phi i32 [ 8, %2978 ], [ %3016, %3015 ]
  br label %3019

3019:                                             ; preds = %3017, %2974
  %3020 = phi i32 [ 8, %2974 ], [ %3018, %3017 ]
  br label %3021

3021:                                             ; preds = %3019, %2970
  %3022 = phi i32 [ 1, %2970 ], [ %3020, %3019 ]
  br label %3023

3023:                                             ; preds = %3021, %2966
  %3024 = phi i32 [ 1, %2966 ], [ %3022, %3021 ]
  br label %3025

3025:                                             ; preds = %3023, %2962
  %3026 = phi i32 [ 2, %2962 ], [ %3024, %3023 ]
  br label %3027

3027:                                             ; preds = %3025, %2958
  %3028 = phi i32 [ 2, %2958 ], [ %3026, %3025 ]
  br label %3029

3029:                                             ; preds = %3027, %2954
  %3030 = phi i32 [ 4, %2954 ], [ %3028, %3027 ]
  br label %3031

3031:                                             ; preds = %3029, %2950
  %3032 = phi i32 [ 8, %2950 ], [ %3030, %3029 ]
  %3033 = sext i32 %3032 to i64
  %3034 = load i64, ptr %163, align 8, !tbaa !9
  %3035 = mul i64 %3033, %3034
  %3036 = call noalias ptr @malloc(i64 noundef %3035) #9
  store ptr %3036, ptr %9, align 8, !tbaa !11
  %3037 = load i64, ptr %163, align 8, !tbaa !9
  store i64 %3037, ptr %5, align 8, !tbaa !9
  br label %3038

3038:                                             ; preds = %3031, %2933
  %3039 = load ptr, ptr %9, align 8, !tbaa !11
  %3040 = icmp ne ptr null, %3039
  br i1 %3040, label %3041, label %3202

3041:                                             ; preds = %3038
  %3042 = load ptr, ptr %10, align 8, !tbaa !11
  %3043 = icmp ne ptr null, %3042
  br i1 %3043, label %3044, label %3202

3044:                                             ; preds = %3041
  %3045 = load i32, ptr %2, align 4, !tbaa !5
  %3046 = icmp eq i32 0, %3045
  br i1 %3046, label %3047, label %3202

3047:                                             ; preds = %3044
  br label %3048

3048:                                             ; preds = %3047
  call void @llvm.lifetime.start.p0(i64 8, ptr %164) #8
  store double 1.000000e+00, ptr %164, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr %165) #8
  %3049 = load double, ptr %164, align 8, !tbaa !13
  %3050 = load i64, ptr %163, align 8, !tbaa !9
  %3051 = uitofp i64 %3050 to double
  %3052 = fdiv double 1.000000e+00, %3051
  %3053 = load i64, ptr %163, align 8, !tbaa !9
  %3054 = uitofp i64 %3053 to double
  %3055 = fdiv double 1.000000e+00, %3054
  %3056 = call double @llvm.fmuladd.f64(double %3049, double %3052, double %3055)
  store double %3056, ptr %165, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 4, ptr %166) #8
  %3057 = getelementptr inbounds [2 x i64], ptr %4, i64 0, i64 0
  %3058 = load i64, ptr %3057, align 16, !tbaa !9
  %3059 = trunc i64 %3058 to i32
  store i32 %3059, ptr %166, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %167) #8
  %3060 = getelementptr inbounds [2 x i64], ptr %4, i64 0, i64 1
  %3061 = load i64, ptr %3060, align 8, !tbaa !9
  %3062 = trunc i64 %3061 to i32
  store i32 %3062, ptr %167, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %168) #8
  %3063 = getelementptr inbounds [2 x i64], ptr %4, i64 0, i64 0
  %3064 = load i64, ptr %3063, align 16, !tbaa !9
  %3065 = trunc i64 %3064 to i32
  store i32 %3065, ptr %168, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %169) #8
  store i32 0, ptr %169, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %170) #8
  store i32 0, ptr %170, align 4, !tbaa !5
  %3066 = load double, ptr %164, align 8, !tbaa !13
  %3067 = fcmp une double 0.000000e+00, %3066
  br i1 %3067, label %3068, label %3127

3068:                                             ; preds = %3048
  store i32 0, ptr %169, align 4, !tbaa !5
  br label %3069

3069:                                             ; preds = %3123, %3068
  %3070 = load i32, ptr %169, align 4, !tbaa !5
  %3071 = load i32, ptr %167, align 4, !tbaa !5
  %3072 = icmp slt i32 %3070, %3071
  br i1 %3072, label %3073, label %3126

3073:                                             ; preds = %3069
  store i32 0, ptr %170, align 4, !tbaa !5
  br label %3074

3074:                                             ; preds = %3099, %3073
  %3075 = load i32, ptr %170, align 4, !tbaa !5
  %3076 = load i32, ptr %166, align 4, !tbaa !5
  %3077 = icmp slt i32 %3075, %3076
  br i1 %3077, label %3078, label %3102

3078:                                             ; preds = %3074
  call void @llvm.lifetime.start.p0(i64 4, ptr %171) #8
  %3079 = load i32, ptr %169, align 4, !tbaa !5
  %3080 = load i32, ptr %168, align 4, !tbaa !5
  %3081 = mul nsw i32 %3079, %3080
  %3082 = load i32, ptr %170, align 4, !tbaa !5
  %3083 = add nsw i32 %3081, %3082
  store i32 %3083, ptr %171, align 4, !tbaa !5
  %3084 = load double, ptr %165, align 8, !tbaa !13
  %3085 = load i32, ptr %169, align 4, !tbaa !5
  %3086 = sitofp i32 %3085 to double
  %3087 = load i32, ptr %166, align 4, !tbaa !5
  %3088 = sitofp i32 %3087 to double
  %3089 = call double @llvm.fmuladd.f64(double %3086, double %3088, double 1.000000e+00)
  %3090 = load i32, ptr %170, align 4, !tbaa !5
  %3091 = sitofp i32 %3090 to double
  %3092 = fadd double %3089, %3091
  %3093 = fmul double %3084, %3092
  %3094 = fptrunc double %3093 to float
  %3095 = load ptr, ptr %9, align 8, !tbaa !11
  %3096 = load i32, ptr %171, align 4, !tbaa !5
  %3097 = sext i32 %3096 to i64
  %3098 = getelementptr inbounds float, ptr %3095, i64 %3097
  store float %3094, ptr %3098, align 4, !tbaa !15
  call void @llvm.lifetime.end.p0(i64 4, ptr %171) #8
  br label %3099

3099:                                             ; preds = %3078
  %3100 = load i32, ptr %170, align 4, !tbaa !5
  %3101 = add nsw i32 %3100, 1
  store i32 %3101, ptr %170, align 4, !tbaa !5
  br label %3074, !llvm.loop !68

3102:                                             ; preds = %3074
  br label %3103

3103:                                             ; preds = %3119, %3102
  %3104 = load i32, ptr %170, align 4, !tbaa !5
  %3105 = load i32, ptr %168, align 4, !tbaa !5
  %3106 = icmp slt i32 %3104, %3105
  br i1 %3106, label %3107, label %3122

3107:                                             ; preds = %3103
  call void @llvm.lifetime.start.p0(i64 4, ptr %172) #8
  %3108 = load i32, ptr %169, align 4, !tbaa !5
  %3109 = load i32, ptr %168, align 4, !tbaa !5
  %3110 = mul nsw i32 %3108, %3109
  %3111 = load i32, ptr %170, align 4, !tbaa !5
  %3112 = add nsw i32 %3110, %3111
  store i32 %3112, ptr %172, align 4, !tbaa !5
  %3113 = load double, ptr %164, align 8, !tbaa !13
  %3114 = fptrunc double %3113 to float
  %3115 = load ptr, ptr %9, align 8, !tbaa !11
  %3116 = load i32, ptr %172, align 4, !tbaa !5
  %3117 = sext i32 %3116 to i64
  %3118 = getelementptr inbounds float, ptr %3115, i64 %3117
  store float %3114, ptr %3118, align 4, !tbaa !15
  call void @llvm.lifetime.end.p0(i64 4, ptr %172) #8
  br label %3119

3119:                                             ; preds = %3107
  %3120 = load i32, ptr %170, align 4, !tbaa !5
  %3121 = add nsw i32 %3120, 1
  store i32 %3121, ptr %170, align 4, !tbaa !5
  br label %3103, !llvm.loop !69

3122:                                             ; preds = %3103
  br label %3123

3123:                                             ; preds = %3122
  %3124 = load i32, ptr %169, align 4, !tbaa !5
  %3125 = add nsw i32 %3124, 1
  store i32 %3125, ptr %169, align 4, !tbaa !5
  br label %3069, !llvm.loop !70

3126:                                             ; preds = %3069
  br label %3183

3127:                                             ; preds = %3048
  call void @llvm.lifetime.start.p0(i64 4, ptr %173) #8
  %3128 = load i32, ptr %167, align 4, !tbaa !5
  %3129 = load i32, ptr %168, align 4, !tbaa !5
  %3130 = mul nsw i32 %3128, %3129
  store i32 %3130, ptr %173, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %174) #8
  %3131 = load i32, ptr %173, align 4, !tbaa !5
  %3132 = add nsw i32 %3131, 1
  %3133 = sdiv i32 %3132, 2
  %3134 = sitofp i32 %3133 to float
  store float %3134, ptr %174, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %175) #8
  %3135 = load i64, ptr %163, align 8, !tbaa !9
  %3136 = uitofp i64 %3135 to double
  %3137 = fdiv double 1.000000e+00, %3136
  %3138 = fptrunc double %3137 to float
  %3139 = load float, ptr %174, align 4, !tbaa !15
  %3140 = fdiv float %3138, %3139
  store float %3140, ptr %175, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 8, ptr %176) #8
  %3141 = load i32, ptr %173, align 4, !tbaa !5
  %3142 = sext i32 %3141 to i64
  %3143 = call i64 @libxsmm_coprime2(i64 noundef %3142)
  store i64 %3143, ptr %176, align 8, !tbaa !9
  store i32 0, ptr %169, align 4, !tbaa !5
  br label %3144

3144:                                             ; preds = %3179, %3127
  %3145 = load i32, ptr %169, align 4, !tbaa !5
  %3146 = load i32, ptr %167, align 4, !tbaa !5
  %3147 = icmp slt i32 %3145, %3146
  br i1 %3147, label %3148, label %3182

3148:                                             ; preds = %3144
  store i32 0, ptr %170, align 4, !tbaa !5
  br label %3149

3149:                                             ; preds = %3175, %3148
  %3150 = load i32, ptr %170, align 4, !tbaa !5
  %3151 = load i32, ptr %168, align 4, !tbaa !5
  %3152 = icmp slt i32 %3150, %3151
  br i1 %3152, label %3153, label %3178

3153:                                             ; preds = %3149
  call void @llvm.lifetime.start.p0(i64 4, ptr %177) #8
  %3154 = load i32, ptr %169, align 4, !tbaa !5
  %3155 = load i32, ptr %168, align 4, !tbaa !5
  %3156 = mul nsw i32 %3154, %3155
  %3157 = load i32, ptr %170, align 4, !tbaa !5
  %3158 = add nsw i32 %3156, %3157
  store i32 %3158, ptr %177, align 4, !tbaa !5
  %3159 = load float, ptr %175, align 4, !tbaa !15
  %3160 = load i64, ptr %176, align 8, !tbaa !9
  %3161 = load i32, ptr %177, align 4, !tbaa !5
  %3162 = sext i32 %3161 to i64
  %3163 = mul i64 %3160, %3162
  %3164 = load i32, ptr %173, align 4, !tbaa !5
  %3165 = sext i32 %3164 to i64
  %3166 = urem i64 %3163, %3165
  %3167 = uitofp i64 %3166 to float
  %3168 = load float, ptr %174, align 4, !tbaa !15
  %3169 = fsub float %3167, %3168
  %3170 = fmul float %3159, %3169
  %3171 = load ptr, ptr %9, align 8, !tbaa !11
  %3172 = load i32, ptr %177, align 4, !tbaa !5
  %3173 = sext i32 %3172 to i64
  %3174 = getelementptr inbounds float, ptr %3171, i64 %3173
  store float %3170, ptr %3174, align 4, !tbaa !15
  call void @llvm.lifetime.end.p0(i64 4, ptr %177) #8
  br label %3175

3175:                                             ; preds = %3153
  %3176 = load i32, ptr %170, align 4, !tbaa !5
  %3177 = add nsw i32 %3176, 1
  store i32 %3177, ptr %170, align 4, !tbaa !5
  br label %3149, !llvm.loop !71

3178:                                             ; preds = %3149
  br label %3179

3179:                                             ; preds = %3178
  %3180 = load i32, ptr %169, align 4, !tbaa !5
  %3181 = add nsw i32 %3180, 1
  store i32 %3181, ptr %169, align 4, !tbaa !5
  br label %3144, !llvm.loop !72

3182:                                             ; preds = %3144
  call void @llvm.lifetime.end.p0(i64 8, ptr %176) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %175) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %174) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %173) #8
  br label %3183

3183:                                             ; preds = %3182, %3126
  call void @llvm.lifetime.end.p0(i64 4, ptr %170) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %169) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %168) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %167) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %166) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %165) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %164) #8
  br label %3184

3184:                                             ; preds = %3183
  br label %3185

3185:                                             ; preds = %3184
  %3186 = load ptr, ptr %9, align 8, !tbaa !11
  %3187 = load ptr, ptr %10, align 8, !tbaa !11
  %3188 = load i64, ptr %163, align 8, !tbaa !9
  %3189 = trunc i64 %3188 to i32
  %3190 = load ptr, ptr %12, align 8, !tbaa !11
  call void @libxsmm_stochastic_convert_fp32_bf8(ptr noundef %3186, ptr noundef %3187, i32 noundef %3189, ptr noundef %3190, i32 noundef 0)
  %3191 = load ptr, ptr %10, align 8, !tbaa !11
  %3192 = load ptr, ptr %9, align 8, !tbaa !11
  %3193 = load i64, ptr %163, align 8, !tbaa !9
  call void @libxsmm_convert_bf8_f32(ptr noundef %3191, ptr noundef %3192, i64 noundef %3193)
  %3194 = getelementptr inbounds [1024 x i8], ptr %11, i64 0, i64 0
  %3195 = getelementptr inbounds [2 x i64], ptr %4, i64 0, i64 0
  %3196 = load i64, ptr %6, align 8, !tbaa !9
  %3197 = load i64, ptr %7, align 8, !tbaa !9
  %3198 = load i64, ptr %8, align 8, !tbaa !9
  %3199 = load i32, ptr %3, align 4, !tbaa !5
  %3200 = load ptr, ptr %9, align 8, !tbaa !11
  %3201 = call i32 @libxsmm_mhd_read(ptr noundef %3194, ptr noundef null, ptr noundef %3195, ptr noundef null, i64 noundef %3196, i64 noundef %3197, i64 noundef %3198, i32 noundef %3199, ptr noundef null, ptr noundef %3200, ptr noundef @libxsmm_mhd_element_comparison, ptr noundef null, i64 noundef 0)
  store i32 %3201, ptr %2, align 4, !tbaa !5
  br label %3203

3202:                                             ; preds = %3044, %3041, %3038
  store i32 1, ptr %2, align 4, !tbaa !5
  br label %3203

3203:                                             ; preds = %3202, %3185
  call void @llvm.lifetime.end.p0(i64 8, ptr %163) #8
  br label %3473

3204:                                             ; preds = %2928
  call void @llvm.lifetime.start.p0(i64 8, ptr %178) #8
  %3205 = getelementptr inbounds [2 x i64], ptr %4, i64 0, i64 0
  %3206 = load i64, ptr %3205, align 16, !tbaa !9
  %3207 = getelementptr inbounds [2 x i64], ptr %4, i64 0, i64 1
  %3208 = load i64, ptr %3207, align 8, !tbaa !9
  %3209 = mul i64 %3206, %3208
  store i64 %3209, ptr %178, align 8, !tbaa !9
  %3210 = load i64, ptr %5, align 8, !tbaa !9
  %3211 = load i64, ptr %178, align 8, !tbaa !9
  %3212 = icmp ult i64 %3210, %3211
  br i1 %3212, label %3213, label %3309

3213:                                             ; preds = %3204
  %3214 = load ptr, ptr %10, align 8, !tbaa !11
  call void @free(ptr noundef %3214) #8
  %3215 = load ptr, ptr %9, align 8, !tbaa !11
  call void @free(ptr noundef %3215) #8
  %3216 = load i64, ptr %178, align 8, !tbaa !9
  %3217 = mul i64 1, %3216
  %3218 = call noalias ptr @malloc(i64 noundef %3217) #9
  store ptr %3218, ptr %10, align 8, !tbaa !11
  %3219 = load i32, ptr %3, align 4, !tbaa !5
  %3220 = icmp eq i32 0, %3219
  br i1 %3220, label %3221, label %3222

3221:                                             ; preds = %3213
  br label %3302

3222:                                             ; preds = %3213
  %3223 = load i32, ptr %3, align 4, !tbaa !5
  %3224 = icmp eq i32 1, %3223
  br i1 %3224, label %3225, label %3226

3225:                                             ; preds = %3222
  br label %3300

3226:                                             ; preds = %3222
  %3227 = load i32, ptr %3, align 4, !tbaa !5
  %3228 = icmp eq i32 2, %3227
  br i1 %3228, label %3229, label %3230

3229:                                             ; preds = %3226
  br label %3298

3230:                                             ; preds = %3226
  %3231 = load i32, ptr %3, align 4, !tbaa !5
  %3232 = icmp eq i32 3, %3231
  br i1 %3232, label %3233, label %3234

3233:                                             ; preds = %3230
  br label %3296

3234:                                             ; preds = %3230
  %3235 = load i32, ptr %3, align 4, !tbaa !5
  %3236 = icmp eq i32 4, %3235
  br i1 %3236, label %3237, label %3238

3237:                                             ; preds = %3234
  br label %3294

3238:                                             ; preds = %3234
  %3239 = load i32, ptr %3, align 4, !tbaa !5
  %3240 = icmp eq i32 5, %3239
  br i1 %3240, label %3241, label %3242

3241:                                             ; preds = %3238
  br label %3292

3242:                                             ; preds = %3238
  %3243 = load i32, ptr %3, align 4, !tbaa !5
  %3244 = icmp eq i32 6, %3243
  br i1 %3244, label %3245, label %3246

3245:                                             ; preds = %3242
  br label %3290

3246:                                             ; preds = %3242
  %3247 = load i32, ptr %3, align 4, !tbaa !5
  %3248 = icmp eq i32 7, %3247
  br i1 %3248, label %3249, label %3250

3249:                                             ; preds = %3246
  br label %3288

3250:                                             ; preds = %3246
  %3251 = load i32, ptr %3, align 4, !tbaa !5
  %3252 = icmp eq i32 8, %3251
  br i1 %3252, label %3253, label %3254

3253:                                             ; preds = %3250
  br label %3286

3254:                                             ; preds = %3250
  %3255 = load i32, ptr %3, align 4, !tbaa !5
  %3256 = icmp eq i32 9, %3255
  br i1 %3256, label %3257, label %3258

3257:                                             ; preds = %3254
  br label %3284

3258:                                             ; preds = %3254
  %3259 = load i32, ptr %3, align 4, !tbaa !5
  %3260 = icmp eq i32 10, %3259
  br i1 %3260, label %3261, label %3262

3261:                                             ; preds = %3258
  br label %3282

3262:                                             ; preds = %3258
  %3263 = load i32, ptr %3, align 4, !tbaa !5
  %3264 = icmp eq i32 11, %3263
  br i1 %3264, label %3265, label %3266

3265:                                             ; preds = %3262
  br label %3280

3266:                                             ; preds = %3262
  %3267 = load i32, ptr %3, align 4, !tbaa !5
  %3268 = icmp eq i32 12, %3267
  br i1 %3268, label %3269, label %3270

3269:                                             ; preds = %3266
  br label %3278

3270:                                             ; preds = %3266
  %3271 = load i32, ptr %3, align 4, !tbaa !5
  %3272 = icmp eq i32 13, %3271
  br i1 %3272, label %3273, label %3274

3273:                                             ; preds = %3270
  br label %3276

3274:                                             ; preds = %3270
  call void @__assert_fail(ptr noundef @.str.1, ptr noundef @.str.2, i32 noundef 273, ptr noundef @__PRETTY_FUNCTION__.main) #10
  unreachable

3275:                                             ; No predecessors!
  br label %3276

3276:                                             ; preds = %3275, %3273
  %3277 = phi i32 [ 1, %3273 ], [ 0, %3275 ]
  br label %3278

3278:                                             ; preds = %3276, %3269
  %3279 = phi i32 [ 1, %3269 ], [ %3277, %3276 ]
  br label %3280

3280:                                             ; preds = %3278, %3265
  %3281 = phi i32 [ 2, %3265 ], [ %3279, %3278 ]
  br label %3282

3282:                                             ; preds = %3280, %3261
  %3283 = phi i32 [ 2, %3261 ], [ %3281, %3280 ]
  br label %3284

3284:                                             ; preds = %3282, %3257
  %3285 = phi i32 [ 4, %3257 ], [ %3283, %3282 ]
  br label %3286

3286:                                             ; preds = %3284, %3253
  %3287 = phi i32 [ 4, %3253 ], [ %3285, %3284 ]
  br label %3288

3288:                                             ; preds = %3286, %3249
  %3289 = phi i32 [ 8, %3249 ], [ %3287, %3286 ]
  br label %3290

3290:                                             ; preds = %3288, %3245
  %3291 = phi i32 [ 8, %3245 ], [ %3289, %3288 ]
  br label %3292

3292:                                             ; preds = %3290, %3241
  %3293 = phi i32 [ 1, %3241 ], [ %3291, %3290 ]
  br label %3294

3294:                                             ; preds = %3292, %3237
  %3295 = phi i32 [ 1, %3237 ], [ %3293, %3292 ]
  br label %3296

3296:                                             ; preds = %3294, %3233
  %3297 = phi i32 [ 2, %3233 ], [ %3295, %3294 ]
  br label %3298

3298:                                             ; preds = %3296, %3229
  %3299 = phi i32 [ 2, %3229 ], [ %3297, %3296 ]
  br label %3300

3300:                                             ; preds = %3298, %3225
  %3301 = phi i32 [ 4, %3225 ], [ %3299, %3298 ]
  br label %3302

3302:                                             ; preds = %3300, %3221
  %3303 = phi i32 [ 8, %3221 ], [ %3301, %3300 ]
  %3304 = sext i32 %3303 to i64
  %3305 = load i64, ptr %178, align 8, !tbaa !9
  %3306 = mul i64 %3304, %3305
  %3307 = call noalias ptr @malloc(i64 noundef %3306) #9
  store ptr %3307, ptr %9, align 8, !tbaa !11
  %3308 = load i64, ptr %178, align 8, !tbaa !9
  store i64 %3308, ptr %5, align 8, !tbaa !9
  br label %3309

3309:                                             ; preds = %3302, %3204
  %3310 = load ptr, ptr %9, align 8, !tbaa !11
  %3311 = icmp ne ptr null, %3310
  br i1 %3311, label %3312, label %3471

3312:                                             ; preds = %3309
  %3313 = load ptr, ptr %10, align 8, !tbaa !11
  %3314 = icmp ne ptr null, %3313
  br i1 %3314, label %3315, label %3471

3315:                                             ; preds = %3312
  %3316 = load i32, ptr %2, align 4, !tbaa !5
  %3317 = icmp eq i32 0, %3316
  br i1 %3317, label %3318, label %3471

3318:                                             ; preds = %3315
  br label %3319

3319:                                             ; preds = %3318
  call void @llvm.lifetime.start.p0(i64 8, ptr %179) #8
  store double 1.000000e+00, ptr %179, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr %180) #8
  %3320 = load double, ptr %179, align 8, !tbaa !13
  %3321 = load i64, ptr %178, align 8, !tbaa !9
  %3322 = uitofp i64 %3321 to double
  %3323 = fdiv double 1.000000e+00, %3322
  %3324 = load i64, ptr %178, align 8, !tbaa !9
  %3325 = uitofp i64 %3324 to double
  %3326 = fdiv double 1.000000e+00, %3325
  %3327 = call double @llvm.fmuladd.f64(double %3320, double %3323, double %3326)
  store double %3327, ptr %180, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 4, ptr %181) #8
  %3328 = getelementptr inbounds [2 x i64], ptr %4, i64 0, i64 0
  %3329 = load i64, ptr %3328, align 16, !tbaa !9
  %3330 = trunc i64 %3329 to i32
  store i32 %3330, ptr %181, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %182) #8
  %3331 = getelementptr inbounds [2 x i64], ptr %4, i64 0, i64 1
  %3332 = load i64, ptr %3331, align 8, !tbaa !9
  %3333 = trunc i64 %3332 to i32
  store i32 %3333, ptr %182, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %183) #8
  %3334 = getelementptr inbounds [2 x i64], ptr %4, i64 0, i64 0
  %3335 = load i64, ptr %3334, align 16, !tbaa !9
  %3336 = trunc i64 %3335 to i32
  store i32 %3336, ptr %183, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %184) #8
  store i32 0, ptr %184, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %185) #8
  store i32 0, ptr %185, align 4, !tbaa !5
  %3337 = load double, ptr %179, align 8, !tbaa !13
  %3338 = fcmp une double 0.000000e+00, %3337
  br i1 %3338, label %3339, label %3398

3339:                                             ; preds = %3319
  store i32 0, ptr %184, align 4, !tbaa !5
  br label %3340

3340:                                             ; preds = %3394, %3339
  %3341 = load i32, ptr %184, align 4, !tbaa !5
  %3342 = load i32, ptr %182, align 4, !tbaa !5
  %3343 = icmp slt i32 %3341, %3342
  br i1 %3343, label %3344, label %3397

3344:                                             ; preds = %3340
  store i32 0, ptr %185, align 4, !tbaa !5
  br label %3345

3345:                                             ; preds = %3370, %3344
  %3346 = load i32, ptr %185, align 4, !tbaa !5
  %3347 = load i32, ptr %181, align 4, !tbaa !5
  %3348 = icmp slt i32 %3346, %3347
  br i1 %3348, label %3349, label %3373

3349:                                             ; preds = %3345
  call void @llvm.lifetime.start.p0(i64 4, ptr %186) #8
  %3350 = load i32, ptr %184, align 4, !tbaa !5
  %3351 = load i32, ptr %183, align 4, !tbaa !5
  %3352 = mul nsw i32 %3350, %3351
  %3353 = load i32, ptr %185, align 4, !tbaa !5
  %3354 = add nsw i32 %3352, %3353
  store i32 %3354, ptr %186, align 4, !tbaa !5
  %3355 = load double, ptr %180, align 8, !tbaa !13
  %3356 = load i32, ptr %184, align 4, !tbaa !5
  %3357 = sitofp i32 %3356 to double
  %3358 = load i32, ptr %181, align 4, !tbaa !5
  %3359 = sitofp i32 %3358 to double
  %3360 = call double @llvm.fmuladd.f64(double %3357, double %3359, double 1.000000e+00)
  %3361 = load i32, ptr %185, align 4, !tbaa !5
  %3362 = sitofp i32 %3361 to double
  %3363 = fadd double %3360, %3362
  %3364 = fmul double %3355, %3363
  %3365 = fptrunc double %3364 to float
  %3366 = load ptr, ptr %9, align 8, !tbaa !11
  %3367 = load i32, ptr %186, align 4, !tbaa !5
  %3368 = sext i32 %3367 to i64
  %3369 = getelementptr inbounds float, ptr %3366, i64 %3368
  store float %3365, ptr %3369, align 4, !tbaa !15
  call void @llvm.lifetime.end.p0(i64 4, ptr %186) #8
  br label %3370

3370:                                             ; preds = %3349
  %3371 = load i32, ptr %185, align 4, !tbaa !5
  %3372 = add nsw i32 %3371, 1
  store i32 %3372, ptr %185, align 4, !tbaa !5
  br label %3345, !llvm.loop !73

3373:                                             ; preds = %3345
  br label %3374

3374:                                             ; preds = %3390, %3373
  %3375 = load i32, ptr %185, align 4, !tbaa !5
  %3376 = load i32, ptr %183, align 4, !tbaa !5
  %3377 = icmp slt i32 %3375, %3376
  br i1 %3377, label %3378, label %3393

3378:                                             ; preds = %3374
  call void @llvm.lifetime.start.p0(i64 4, ptr %187) #8
  %3379 = load i32, ptr %184, align 4, !tbaa !5
  %3380 = load i32, ptr %183, align 4, !tbaa !5
  %3381 = mul nsw i32 %3379, %3380
  %3382 = load i32, ptr %185, align 4, !tbaa !5
  %3383 = add nsw i32 %3381, %3382
  store i32 %3383, ptr %187, align 4, !tbaa !5
  %3384 = load double, ptr %179, align 8, !tbaa !13
  %3385 = fptrunc double %3384 to float
  %3386 = load ptr, ptr %9, align 8, !tbaa !11
  %3387 = load i32, ptr %187, align 4, !tbaa !5
  %3388 = sext i32 %3387 to i64
  %3389 = getelementptr inbounds float, ptr %3386, i64 %3388
  store float %3385, ptr %3389, align 4, !tbaa !15
  call void @llvm.lifetime.end.p0(i64 4, ptr %187) #8
  br label %3390

3390:                                             ; preds = %3378
  %3391 = load i32, ptr %185, align 4, !tbaa !5
  %3392 = add nsw i32 %3391, 1
  store i32 %3392, ptr %185, align 4, !tbaa !5
  br label %3374, !llvm.loop !74

3393:                                             ; preds = %3374
  br label %3394

3394:                                             ; preds = %3393
  %3395 = load i32, ptr %184, align 4, !tbaa !5
  %3396 = add nsw i32 %3395, 1
  store i32 %3396, ptr %184, align 4, !tbaa !5
  br label %3340, !llvm.loop !75

3397:                                             ; preds = %3340
  br label %3454

3398:                                             ; preds = %3319
  call void @llvm.lifetime.start.p0(i64 4, ptr %188) #8
  %3399 = load i32, ptr %182, align 4, !tbaa !5
  %3400 = load i32, ptr %183, align 4, !tbaa !5
  %3401 = mul nsw i32 %3399, %3400
  store i32 %3401, ptr %188, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %189) #8
  %3402 = load i32, ptr %188, align 4, !tbaa !5
  %3403 = add nsw i32 %3402, 1
  %3404 = sdiv i32 %3403, 2
  %3405 = sitofp i32 %3404 to float
  store float %3405, ptr %189, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %190) #8
  %3406 = load i64, ptr %178, align 8, !tbaa !9
  %3407 = uitofp i64 %3406 to double
  %3408 = fdiv double 1.000000e+00, %3407
  %3409 = fptrunc double %3408 to float
  %3410 = load float, ptr %189, align 4, !tbaa !15
  %3411 = fdiv float %3409, %3410
  store float %3411, ptr %190, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 8, ptr %191) #8
  %3412 = load i32, ptr %188, align 4, !tbaa !5
  %3413 = sext i32 %3412 to i64
  %3414 = call i64 @libxsmm_coprime2(i64 noundef %3413)
  store i64 %3414, ptr %191, align 8, !tbaa !9
  store i32 0, ptr %184, align 4, !tbaa !5
  br label %3415

3415:                                             ; preds = %3450, %3398
  %3416 = load i32, ptr %184, align 4, !tbaa !5
  %3417 = load i32, ptr %182, align 4, !tbaa !5
  %3418 = icmp slt i32 %3416, %3417
  br i1 %3418, label %3419, label %3453

3419:                                             ; preds = %3415
  store i32 0, ptr %185, align 4, !tbaa !5
  br label %3420

3420:                                             ; preds = %3446, %3419
  %3421 = load i32, ptr %185, align 4, !tbaa !5
  %3422 = load i32, ptr %183, align 4, !tbaa !5
  %3423 = icmp slt i32 %3421, %3422
  br i1 %3423, label %3424, label %3449

3424:                                             ; preds = %3420
  call void @llvm.lifetime.start.p0(i64 4, ptr %192) #8
  %3425 = load i32, ptr %184, align 4, !tbaa !5
  %3426 = load i32, ptr %183, align 4, !tbaa !5
  %3427 = mul nsw i32 %3425, %3426
  %3428 = load i32, ptr %185, align 4, !tbaa !5
  %3429 = add nsw i32 %3427, %3428
  store i32 %3429, ptr %192, align 4, !tbaa !5
  %3430 = load float, ptr %190, align 4, !tbaa !15
  %3431 = load i64, ptr %191, align 8, !tbaa !9
  %3432 = load i32, ptr %192, align 4, !tbaa !5
  %3433 = sext i32 %3432 to i64
  %3434 = mul i64 %3431, %3433
  %3435 = load i32, ptr %188, align 4, !tbaa !5
  %3436 = sext i32 %3435 to i64
  %3437 = urem i64 %3434, %3436
  %3438 = uitofp i64 %3437 to float
  %3439 = load float, ptr %189, align 4, !tbaa !15
  %3440 = fsub float %3438, %3439
  %3441 = fmul float %3430, %3440
  %3442 = load ptr, ptr %9, align 8, !tbaa !11
  %3443 = load i32, ptr %192, align 4, !tbaa !5
  %3444 = sext i32 %3443 to i64
  %3445 = getelementptr inbounds float, ptr %3442, i64 %3444
  store float %3441, ptr %3445, align 4, !tbaa !15
  call void @llvm.lifetime.end.p0(i64 4, ptr %192) #8
  br label %3446

3446:                                             ; preds = %3424
  %3447 = load i32, ptr %185, align 4, !tbaa !5
  %3448 = add nsw i32 %3447, 1
  store i32 %3448, ptr %185, align 4, !tbaa !5
  br label %3420, !llvm.loop !76

3449:                                             ; preds = %3420
  br label %3450

3450:                                             ; preds = %3449
  %3451 = load i32, ptr %184, align 4, !tbaa !5
  %3452 = add nsw i32 %3451, 1
  store i32 %3452, ptr %184, align 4, !tbaa !5
  br label %3415, !llvm.loop !77

3453:                                             ; preds = %3415
  call void @llvm.lifetime.end.p0(i64 8, ptr %191) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %190) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %189) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %188) #8
  br label %3454

3454:                                             ; preds = %3453, %3397
  call void @llvm.lifetime.end.p0(i64 4, ptr %185) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %184) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %183) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %182) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %181) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %180) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %179) #8
  br label %3455

3455:                                             ; preds = %3454
  br label %3456

3456:                                             ; preds = %3455
  %3457 = load ptr, ptr %9, align 8, !tbaa !11
  %3458 = load ptr, ptr %10, align 8, !tbaa !11
  %3459 = load i64, ptr %178, align 8, !tbaa !9
  %3460 = trunc i64 %3459 to i32
  %3461 = load ptr, ptr %12, align 8, !tbaa !11
  call void @libxsmm_stochastic_convert_fp32_bf8(ptr noundef %3457, ptr noundef %3458, i32 noundef %3460, ptr noundef %3461, i32 noundef 0)
  %3462 = load ptr, ptr %10, align 8, !tbaa !11
  %3463 = load ptr, ptr %9, align 8, !tbaa !11
  %3464 = load i64, ptr %178, align 8, !tbaa !9
  call void @libxsmm_convert_bf8_f32(ptr noundef %3462, ptr noundef %3463, i64 noundef %3464)
  %3465 = getelementptr inbounds [2 x i64], ptr %4, i64 0, i64 0
  %3466 = load i64, ptr %6, align 8, !tbaa !9
  %3467 = load i64, ptr %7, align 8, !tbaa !9
  %3468 = load i32, ptr %3, align 4, !tbaa !5
  %3469 = load ptr, ptr %9, align 8, !tbaa !11
  %3470 = call i32 @libxsmm_mhd_write(ptr noundef @.str.7, ptr noundef null, ptr noundef %3465, ptr noundef null, i64 noundef %3466, i64 noundef %3467, i32 noundef %3468, ptr noundef null, ptr noundef %3469, ptr noundef null, ptr noundef null, ptr noundef null, i64 noundef 0)
  store i32 %3470, ptr %2, align 4, !tbaa !5
  br label %3472

3471:                                             ; preds = %3315, %3312, %3309
  store i32 1, ptr %2, align 4, !tbaa !5
  br label %3472

3472:                                             ; preds = %3471, %3456
  call void @llvm.lifetime.end.p0(i64 8, ptr %178) #8
  br label %3473

3473:                                             ; preds = %3472, %3203
  %3474 = getelementptr inbounds [1024 x i8], ptr %11, i64 0, i64 0
  %3475 = getelementptr inbounds [2 x i64], ptr %4, i64 0, i64 0
  %3476 = call i32 @libxsmm_mhd_read_header(ptr noundef @.str.8, i64 noundef 1024, ptr noundef %3474, ptr noundef %6, ptr noundef %3475, ptr noundef %7, ptr noundef %3, ptr noundef %8, ptr noundef null)
  %3477 = icmp eq i32 0, %3476
  br i1 %3477, label %3478, label %3747

3478:                                             ; preds = %3473
  call void @llvm.lifetime.start.p0(i64 8, ptr %193) #8
  %3479 = getelementptr inbounds [2 x i64], ptr %4, i64 0, i64 0
  %3480 = load i64, ptr %3479, align 16, !tbaa !9
  %3481 = getelementptr inbounds [2 x i64], ptr %4, i64 0, i64 1
  %3482 = load i64, ptr %3481, align 8, !tbaa !9
  %3483 = mul i64 %3480, %3482
  store i64 %3483, ptr %193, align 8, !tbaa !9
  %3484 = load i64, ptr %5, align 8, !tbaa !9
  %3485 = load i64, ptr %193, align 8, !tbaa !9
  %3486 = icmp ult i64 %3484, %3485
  br i1 %3486, label %3487, label %3583

3487:                                             ; preds = %3478
  %3488 = load ptr, ptr %10, align 8, !tbaa !11
  call void @free(ptr noundef %3488) #8
  %3489 = load ptr, ptr %9, align 8, !tbaa !11
  call void @free(ptr noundef %3489) #8
  %3490 = load i64, ptr %193, align 8, !tbaa !9
  %3491 = mul i64 1, %3490
  %3492 = call noalias ptr @malloc(i64 noundef %3491) #9
  store ptr %3492, ptr %10, align 8, !tbaa !11
  %3493 = load i32, ptr %3, align 4, !tbaa !5
  %3494 = icmp eq i32 0, %3493
  br i1 %3494, label %3495, label %3496

3495:                                             ; preds = %3487
  br label %3576

3496:                                             ; preds = %3487
  %3497 = load i32, ptr %3, align 4, !tbaa !5
  %3498 = icmp eq i32 1, %3497
  br i1 %3498, label %3499, label %3500

3499:                                             ; preds = %3496
  br label %3574

3500:                                             ; preds = %3496
  %3501 = load i32, ptr %3, align 4, !tbaa !5
  %3502 = icmp eq i32 2, %3501
  br i1 %3502, label %3503, label %3504

3503:                                             ; preds = %3500
  br label %3572

3504:                                             ; preds = %3500
  %3505 = load i32, ptr %3, align 4, !tbaa !5
  %3506 = icmp eq i32 3, %3505
  br i1 %3506, label %3507, label %3508

3507:                                             ; preds = %3504
  br label %3570

3508:                                             ; preds = %3504
  %3509 = load i32, ptr %3, align 4, !tbaa !5
  %3510 = icmp eq i32 4, %3509
  br i1 %3510, label %3511, label %3512

3511:                                             ; preds = %3508
  br label %3568

3512:                                             ; preds = %3508
  %3513 = load i32, ptr %3, align 4, !tbaa !5
  %3514 = icmp eq i32 5, %3513
  br i1 %3514, label %3515, label %3516

3515:                                             ; preds = %3512
  br label %3566

3516:                                             ; preds = %3512
  %3517 = load i32, ptr %3, align 4, !tbaa !5
  %3518 = icmp eq i32 6, %3517
  br i1 %3518, label %3519, label %3520

3519:                                             ; preds = %3516
  br label %3564

3520:                                             ; preds = %3516
  %3521 = load i32, ptr %3, align 4, !tbaa !5
  %3522 = icmp eq i32 7, %3521
  br i1 %3522, label %3523, label %3524

3523:                                             ; preds = %3520
  br label %3562

3524:                                             ; preds = %3520
  %3525 = load i32, ptr %3, align 4, !tbaa !5
  %3526 = icmp eq i32 8, %3525
  br i1 %3526, label %3527, label %3528

3527:                                             ; preds = %3524
  br label %3560

3528:                                             ; preds = %3524
  %3529 = load i32, ptr %3, align 4, !tbaa !5
  %3530 = icmp eq i32 9, %3529
  br i1 %3530, label %3531, label %3532

3531:                                             ; preds = %3528
  br label %3558

3532:                                             ; preds = %3528
  %3533 = load i32, ptr %3, align 4, !tbaa !5
  %3534 = icmp eq i32 10, %3533
  br i1 %3534, label %3535, label %3536

3535:                                             ; preds = %3532
  br label %3556

3536:                                             ; preds = %3532
  %3537 = load i32, ptr %3, align 4, !tbaa !5
  %3538 = icmp eq i32 11, %3537
  br i1 %3538, label %3539, label %3540

3539:                                             ; preds = %3536
  br label %3554

3540:                                             ; preds = %3536
  %3541 = load i32, ptr %3, align 4, !tbaa !5
  %3542 = icmp eq i32 12, %3541
  br i1 %3542, label %3543, label %3544

3543:                                             ; preds = %3540
  br label %3552

3544:                                             ; preds = %3540
  %3545 = load i32, ptr %3, align 4, !tbaa !5
  %3546 = icmp eq i32 13, %3545
  br i1 %3546, label %3547, label %3548

3547:                                             ; preds = %3544
  br label %3550

3548:                                             ; preds = %3544
  call void @__assert_fail(ptr noundef @.str.1, ptr noundef @.str.2, i32 noundef 296, ptr noundef @__PRETTY_FUNCTION__.main) #10
  unreachable

3549:                                             ; No predecessors!
  br label %3550

3550:                                             ; preds = %3549, %3547
  %3551 = phi i32 [ 1, %3547 ], [ 0, %3549 ]
  br label %3552

3552:                                             ; preds = %3550, %3543
  %3553 = phi i32 [ 1, %3543 ], [ %3551, %3550 ]
  br label %3554

3554:                                             ; preds = %3552, %3539
  %3555 = phi i32 [ 2, %3539 ], [ %3553, %3552 ]
  br label %3556

3556:                                             ; preds = %3554, %3535
  %3557 = phi i32 [ 2, %3535 ], [ %3555, %3554 ]
  br label %3558

3558:                                             ; preds = %3556, %3531
  %3559 = phi i32 [ 4, %3531 ], [ %3557, %3556 ]
  br label %3560

3560:                                             ; preds = %3558, %3527
  %3561 = phi i32 [ 4, %3527 ], [ %3559, %3558 ]
  br label %3562

3562:                                             ; preds = %3560, %3523
  %3563 = phi i32 [ 8, %3523 ], [ %3561, %3560 ]
  br label %3564

3564:                                             ; preds = %3562, %3519
  %3565 = phi i32 [ 8, %3519 ], [ %3563, %3562 ]
  br label %3566

3566:                                             ; preds = %3564, %3515
  %3567 = phi i32 [ 1, %3515 ], [ %3565, %3564 ]
  br label %3568

3568:                                             ; preds = %3566, %3511
  %3569 = phi i32 [ 1, %3511 ], [ %3567, %3566 ]
  br label %3570

3570:                                             ; preds = %3568, %3507
  %3571 = phi i32 [ 2, %3507 ], [ %3569, %3568 ]
  br label %3572

3572:                                             ; preds = %3570, %3503
  %3573 = phi i32 [ 2, %3503 ], [ %3571, %3570 ]
  br label %3574

3574:                                             ; preds = %3572, %3499
  %3575 = phi i32 [ 4, %3499 ], [ %3573, %3572 ]
  br label %3576

3576:                                             ; preds = %3574, %3495
  %3577 = phi i32 [ 8, %3495 ], [ %3575, %3574 ]
  %3578 = sext i32 %3577 to i64
  %3579 = load i64, ptr %193, align 8, !tbaa !9
  %3580 = mul i64 %3578, %3579
  %3581 = call noalias ptr @malloc(i64 noundef %3580) #9
  store ptr %3581, ptr %9, align 8, !tbaa !11
  %3582 = load i64, ptr %193, align 8, !tbaa !9
  store i64 %3582, ptr %5, align 8, !tbaa !9
  br label %3583

3583:                                             ; preds = %3576, %3478
  %3584 = load ptr, ptr %9, align 8, !tbaa !11
  %3585 = icmp ne ptr null, %3584
  br i1 %3585, label %3586, label %3745

3586:                                             ; preds = %3583
  %3587 = load ptr, ptr %10, align 8, !tbaa !11
  %3588 = icmp ne ptr null, %3587
  br i1 %3588, label %3589, label %3745

3589:                                             ; preds = %3586
  %3590 = load i32, ptr %2, align 4, !tbaa !5
  %3591 = icmp eq i32 0, %3590
  br i1 %3591, label %3592, label %3745

3592:                                             ; preds = %3589
  br label %3593

3593:                                             ; preds = %3592
  call void @llvm.lifetime.start.p0(i64 8, ptr %194) #8
  store double 1.000000e+00, ptr %194, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr %195) #8
  %3594 = load double, ptr %194, align 8, !tbaa !13
  %3595 = load i64, ptr %193, align 8, !tbaa !9
  %3596 = uitofp i64 %3595 to double
  %3597 = fdiv double 1.000000e+00, %3596
  %3598 = load i64, ptr %193, align 8, !tbaa !9
  %3599 = uitofp i64 %3598 to double
  %3600 = fdiv double 1.000000e+00, %3599
  %3601 = call double @llvm.fmuladd.f64(double %3594, double %3597, double %3600)
  store double %3601, ptr %195, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 4, ptr %196) #8
  %3602 = getelementptr inbounds [2 x i64], ptr %4, i64 0, i64 0
  %3603 = load i64, ptr %3602, align 16, !tbaa !9
  %3604 = trunc i64 %3603 to i32
  store i32 %3604, ptr %196, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %197) #8
  %3605 = getelementptr inbounds [2 x i64], ptr %4, i64 0, i64 1
  %3606 = load i64, ptr %3605, align 8, !tbaa !9
  %3607 = trunc i64 %3606 to i32
  store i32 %3607, ptr %197, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %198) #8
  %3608 = getelementptr inbounds [2 x i64], ptr %4, i64 0, i64 0
  %3609 = load i64, ptr %3608, align 16, !tbaa !9
  %3610 = trunc i64 %3609 to i32
  store i32 %3610, ptr %198, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %199) #8
  store i32 0, ptr %199, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %200) #8
  store i32 0, ptr %200, align 4, !tbaa !5
  %3611 = load double, ptr %194, align 8, !tbaa !13
  %3612 = fcmp une double 0.000000e+00, %3611
  br i1 %3612, label %3613, label %3672

3613:                                             ; preds = %3593
  store i32 0, ptr %199, align 4, !tbaa !5
  br label %3614

3614:                                             ; preds = %3668, %3613
  %3615 = load i32, ptr %199, align 4, !tbaa !5
  %3616 = load i32, ptr %197, align 4, !tbaa !5
  %3617 = icmp slt i32 %3615, %3616
  br i1 %3617, label %3618, label %3671

3618:                                             ; preds = %3614
  store i32 0, ptr %200, align 4, !tbaa !5
  br label %3619

3619:                                             ; preds = %3644, %3618
  %3620 = load i32, ptr %200, align 4, !tbaa !5
  %3621 = load i32, ptr %196, align 4, !tbaa !5
  %3622 = icmp slt i32 %3620, %3621
  br i1 %3622, label %3623, label %3647

3623:                                             ; preds = %3619
  call void @llvm.lifetime.start.p0(i64 4, ptr %201) #8
  %3624 = load i32, ptr %199, align 4, !tbaa !5
  %3625 = load i32, ptr %198, align 4, !tbaa !5
  %3626 = mul nsw i32 %3624, %3625
  %3627 = load i32, ptr %200, align 4, !tbaa !5
  %3628 = add nsw i32 %3626, %3627
  store i32 %3628, ptr %201, align 4, !tbaa !5
  %3629 = load double, ptr %195, align 8, !tbaa !13
  %3630 = load i32, ptr %199, align 4, !tbaa !5
  %3631 = sitofp i32 %3630 to double
  %3632 = load i32, ptr %196, align 4, !tbaa !5
  %3633 = sitofp i32 %3632 to double
  %3634 = call double @llvm.fmuladd.f64(double %3631, double %3633, double 1.000000e+00)
  %3635 = load i32, ptr %200, align 4, !tbaa !5
  %3636 = sitofp i32 %3635 to double
  %3637 = fadd double %3634, %3636
  %3638 = fmul double %3629, %3637
  %3639 = fptrunc double %3638 to float
  %3640 = load ptr, ptr %9, align 8, !tbaa !11
  %3641 = load i32, ptr %201, align 4, !tbaa !5
  %3642 = sext i32 %3641 to i64
  %3643 = getelementptr inbounds float, ptr %3640, i64 %3642
  store float %3639, ptr %3643, align 4, !tbaa !15
  call void @llvm.lifetime.end.p0(i64 4, ptr %201) #8
  br label %3644

3644:                                             ; preds = %3623
  %3645 = load i32, ptr %200, align 4, !tbaa !5
  %3646 = add nsw i32 %3645, 1
  store i32 %3646, ptr %200, align 4, !tbaa !5
  br label %3619, !llvm.loop !78

3647:                                             ; preds = %3619
  br label %3648

3648:                                             ; preds = %3664, %3647
  %3649 = load i32, ptr %200, align 4, !tbaa !5
  %3650 = load i32, ptr %198, align 4, !tbaa !5
  %3651 = icmp slt i32 %3649, %3650
  br i1 %3651, label %3652, label %3667

3652:                                             ; preds = %3648
  call void @llvm.lifetime.start.p0(i64 4, ptr %202) #8
  %3653 = load i32, ptr %199, align 4, !tbaa !5
  %3654 = load i32, ptr %198, align 4, !tbaa !5
  %3655 = mul nsw i32 %3653, %3654
  %3656 = load i32, ptr %200, align 4, !tbaa !5
  %3657 = add nsw i32 %3655, %3656
  store i32 %3657, ptr %202, align 4, !tbaa !5
  %3658 = load double, ptr %194, align 8, !tbaa !13
  %3659 = fptrunc double %3658 to float
  %3660 = load ptr, ptr %9, align 8, !tbaa !11
  %3661 = load i32, ptr %202, align 4, !tbaa !5
  %3662 = sext i32 %3661 to i64
  %3663 = getelementptr inbounds float, ptr %3660, i64 %3662
  store float %3659, ptr %3663, align 4, !tbaa !15
  call void @llvm.lifetime.end.p0(i64 4, ptr %202) #8
  br label %3664

3664:                                             ; preds = %3652
  %3665 = load i32, ptr %200, align 4, !tbaa !5
  %3666 = add nsw i32 %3665, 1
  store i32 %3666, ptr %200, align 4, !tbaa !5
  br label %3648, !llvm.loop !79

3667:                                             ; preds = %3648
  br label %3668

3668:                                             ; preds = %3667
  %3669 = load i32, ptr %199, align 4, !tbaa !5
  %3670 = add nsw i32 %3669, 1
  store i32 %3670, ptr %199, align 4, !tbaa !5
  br label %3614, !llvm.loop !80

3671:                                             ; preds = %3614
  br label %3728

3672:                                             ; preds = %3593
  call void @llvm.lifetime.start.p0(i64 4, ptr %203) #8
  %3673 = load i32, ptr %197, align 4, !tbaa !5
  %3674 = load i32, ptr %198, align 4, !tbaa !5
  %3675 = mul nsw i32 %3673, %3674
  store i32 %3675, ptr %203, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %204) #8
  %3676 = load i32, ptr %203, align 4, !tbaa !5
  %3677 = add nsw i32 %3676, 1
  %3678 = sdiv i32 %3677, 2
  %3679 = sitofp i32 %3678 to float
  store float %3679, ptr %204, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %205) #8
  %3680 = load i64, ptr %193, align 8, !tbaa !9
  %3681 = uitofp i64 %3680 to double
  %3682 = fdiv double 1.000000e+00, %3681
  %3683 = fptrunc double %3682 to float
  %3684 = load float, ptr %204, align 4, !tbaa !15
  %3685 = fdiv float %3683, %3684
  store float %3685, ptr %205, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 8, ptr %206) #8
  %3686 = load i32, ptr %203, align 4, !tbaa !5
  %3687 = sext i32 %3686 to i64
  %3688 = call i64 @libxsmm_coprime2(i64 noundef %3687)
  store i64 %3688, ptr %206, align 8, !tbaa !9
  store i32 0, ptr %199, align 4, !tbaa !5
  br label %3689

3689:                                             ; preds = %3724, %3672
  %3690 = load i32, ptr %199, align 4, !tbaa !5
  %3691 = load i32, ptr %197, align 4, !tbaa !5
  %3692 = icmp slt i32 %3690, %3691
  br i1 %3692, label %3693, label %3727

3693:                                             ; preds = %3689
  store i32 0, ptr %200, align 4, !tbaa !5
  br label %3694

3694:                                             ; preds = %3720, %3693
  %3695 = load i32, ptr %200, align 4, !tbaa !5
  %3696 = load i32, ptr %198, align 4, !tbaa !5
  %3697 = icmp slt i32 %3695, %3696
  br i1 %3697, label %3698, label %3723

3698:                                             ; preds = %3694
  call void @llvm.lifetime.start.p0(i64 4, ptr %207) #8
  %3699 = load i32, ptr %199, align 4, !tbaa !5
  %3700 = load i32, ptr %198, align 4, !tbaa !5
  %3701 = mul nsw i32 %3699, %3700
  %3702 = load i32, ptr %200, align 4, !tbaa !5
  %3703 = add nsw i32 %3701, %3702
  store i32 %3703, ptr %207, align 4, !tbaa !5
  %3704 = load float, ptr %205, align 4, !tbaa !15
  %3705 = load i64, ptr %206, align 8, !tbaa !9
  %3706 = load i32, ptr %207, align 4, !tbaa !5
  %3707 = sext i32 %3706 to i64
  %3708 = mul i64 %3705, %3707
  %3709 = load i32, ptr %203, align 4, !tbaa !5
  %3710 = sext i32 %3709 to i64
  %3711 = urem i64 %3708, %3710
  %3712 = uitofp i64 %3711 to float
  %3713 = load float, ptr %204, align 4, !tbaa !15
  %3714 = fsub float %3712, %3713
  %3715 = fmul float %3704, %3714
  %3716 = load ptr, ptr %9, align 8, !tbaa !11
  %3717 = load i32, ptr %207, align 4, !tbaa !5
  %3718 = sext i32 %3717 to i64
  %3719 = getelementptr inbounds float, ptr %3716, i64 %3718
  store float %3715, ptr %3719, align 4, !tbaa !15
  call void @llvm.lifetime.end.p0(i64 4, ptr %207) #8
  br label %3720

3720:                                             ; preds = %3698
  %3721 = load i32, ptr %200, align 4, !tbaa !5
  %3722 = add nsw i32 %3721, 1
  store i32 %3722, ptr %200, align 4, !tbaa !5
  br label %3694, !llvm.loop !81

3723:                                             ; preds = %3694
  br label %3724

3724:                                             ; preds = %3723
  %3725 = load i32, ptr %199, align 4, !tbaa !5
  %3726 = add nsw i32 %3725, 1
  store i32 %3726, ptr %199, align 4, !tbaa !5
  br label %3689, !llvm.loop !82

3727:                                             ; preds = %3689
  call void @llvm.lifetime.end.p0(i64 8, ptr %206) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %205) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %204) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %203) #8
  br label %3728

3728:                                             ; preds = %3727, %3671
  call void @llvm.lifetime.end.p0(i64 4, ptr %200) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %199) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %198) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %197) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %196) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %195) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %194) #8
  br label %3729

3729:                                             ; preds = %3728
  br label %3730

3730:                                             ; preds = %3729
  %3731 = load ptr, ptr %9, align 8, !tbaa !11
  %3732 = load ptr, ptr %10, align 8, !tbaa !11
  %3733 = load i64, ptr %193, align 8, !tbaa !9
  call void @libxsmm_rne_convert_fp32_hf8(ptr noundef %3731, ptr noundef %3732, i64 noundef %3733)
  %3734 = load ptr, ptr %10, align 8, !tbaa !11
  %3735 = load ptr, ptr %9, align 8, !tbaa !11
  %3736 = load i64, ptr %193, align 8, !tbaa !9
  call void @libxsmm_convert_hf8_f32(ptr noundef %3734, ptr noundef %3735, i64 noundef %3736)
  %3737 = getelementptr inbounds [1024 x i8], ptr %11, i64 0, i64 0
  %3738 = getelementptr inbounds [2 x i64], ptr %4, i64 0, i64 0
  %3739 = load i64, ptr %6, align 8, !tbaa !9
  %3740 = load i64, ptr %7, align 8, !tbaa !9
  %3741 = load i64, ptr %8, align 8, !tbaa !9
  %3742 = load i32, ptr %3, align 4, !tbaa !5
  %3743 = load ptr, ptr %9, align 8, !tbaa !11
  %3744 = call i32 @libxsmm_mhd_read(ptr noundef %3737, ptr noundef null, ptr noundef %3738, ptr noundef null, i64 noundef %3739, i64 noundef %3740, i64 noundef %3741, i32 noundef %3742, ptr noundef null, ptr noundef %3743, ptr noundef @libxsmm_mhd_element_comparison, ptr noundef null, i64 noundef 0)
  store i32 %3744, ptr %2, align 4, !tbaa !5
  br label %3746

3745:                                             ; preds = %3589, %3586, %3583
  store i32 1, ptr %2, align 4, !tbaa !5
  br label %3746

3746:                                             ; preds = %3745, %3730
  call void @llvm.lifetime.end.p0(i64 8, ptr %193) #8
  br label %4014

3747:                                             ; preds = %3473
  call void @llvm.lifetime.start.p0(i64 8, ptr %208) #8
  %3748 = getelementptr inbounds [2 x i64], ptr %4, i64 0, i64 0
  %3749 = load i64, ptr %3748, align 16, !tbaa !9
  %3750 = getelementptr inbounds [2 x i64], ptr %4, i64 0, i64 1
  %3751 = load i64, ptr %3750, align 8, !tbaa !9
  %3752 = mul i64 %3749, %3751
  store i64 %3752, ptr %208, align 8, !tbaa !9
  %3753 = load i64, ptr %5, align 8, !tbaa !9
  %3754 = load i64, ptr %208, align 8, !tbaa !9
  %3755 = icmp ult i64 %3753, %3754
  br i1 %3755, label %3756, label %3852

3756:                                             ; preds = %3747
  %3757 = load ptr, ptr %10, align 8, !tbaa !11
  call void @free(ptr noundef %3757) #8
  %3758 = load ptr, ptr %9, align 8, !tbaa !11
  call void @free(ptr noundef %3758) #8
  %3759 = load i64, ptr %208, align 8, !tbaa !9
  %3760 = mul i64 1, %3759
  %3761 = call noalias ptr @malloc(i64 noundef %3760) #9
  store ptr %3761, ptr %10, align 8, !tbaa !11
  %3762 = load i32, ptr %3, align 4, !tbaa !5
  %3763 = icmp eq i32 0, %3762
  br i1 %3763, label %3764, label %3765

3764:                                             ; preds = %3756
  br label %3845

3765:                                             ; preds = %3756
  %3766 = load i32, ptr %3, align 4, !tbaa !5
  %3767 = icmp eq i32 1, %3766
  br i1 %3767, label %3768, label %3769

3768:                                             ; preds = %3765
  br label %3843

3769:                                             ; preds = %3765
  %3770 = load i32, ptr %3, align 4, !tbaa !5
  %3771 = icmp eq i32 2, %3770
  br i1 %3771, label %3772, label %3773

3772:                                             ; preds = %3769
  br label %3841

3773:                                             ; preds = %3769
  %3774 = load i32, ptr %3, align 4, !tbaa !5
  %3775 = icmp eq i32 3, %3774
  br i1 %3775, label %3776, label %3777

3776:                                             ; preds = %3773
  br label %3839

3777:                                             ; preds = %3773
  %3778 = load i32, ptr %3, align 4, !tbaa !5
  %3779 = icmp eq i32 4, %3778
  br i1 %3779, label %3780, label %3781

3780:                                             ; preds = %3777
  br label %3837

3781:                                             ; preds = %3777
  %3782 = load i32, ptr %3, align 4, !tbaa !5
  %3783 = icmp eq i32 5, %3782
  br i1 %3783, label %3784, label %3785

3784:                                             ; preds = %3781
  br label %3835

3785:                                             ; preds = %3781
  %3786 = load i32, ptr %3, align 4, !tbaa !5
  %3787 = icmp eq i32 6, %3786
  br i1 %3787, label %3788, label %3789

3788:                                             ; preds = %3785
  br label %3833

3789:                                             ; preds = %3785
  %3790 = load i32, ptr %3, align 4, !tbaa !5
  %3791 = icmp eq i32 7, %3790
  br i1 %3791, label %3792, label %3793

3792:                                             ; preds = %3789
  br label %3831

3793:                                             ; preds = %3789
  %3794 = load i32, ptr %3, align 4, !tbaa !5
  %3795 = icmp eq i32 8, %3794
  br i1 %3795, label %3796, label %3797

3796:                                             ; preds = %3793
  br label %3829

3797:                                             ; preds = %3793
  %3798 = load i32, ptr %3, align 4, !tbaa !5
  %3799 = icmp eq i32 9, %3798
  br i1 %3799, label %3800, label %3801

3800:                                             ; preds = %3797
  br label %3827

3801:                                             ; preds = %3797
  %3802 = load i32, ptr %3, align 4, !tbaa !5
  %3803 = icmp eq i32 10, %3802
  br i1 %3803, label %3804, label %3805

3804:                                             ; preds = %3801
  br label %3825

3805:                                             ; preds = %3801
  %3806 = load i32, ptr %3, align 4, !tbaa !5
  %3807 = icmp eq i32 11, %3806
  br i1 %3807, label %3808, label %3809

3808:                                             ; preds = %3805
  br label %3823

3809:                                             ; preds = %3805
  %3810 = load i32, ptr %3, align 4, !tbaa !5
  %3811 = icmp eq i32 12, %3810
  br i1 %3811, label %3812, label %3813

3812:                                             ; preds = %3809
  br label %3821

3813:                                             ; preds = %3809
  %3814 = load i32, ptr %3, align 4, !tbaa !5
  %3815 = icmp eq i32 13, %3814
  br i1 %3815, label %3816, label %3817

3816:                                             ; preds = %3813
  br label %3819

3817:                                             ; preds = %3813
  call void @__assert_fail(ptr noundef @.str.1, ptr noundef @.str.2, i32 noundef 315, ptr noundef @__PRETTY_FUNCTION__.main) #10
  unreachable

3818:                                             ; No predecessors!
  br label %3819

3819:                                             ; preds = %3818, %3816
  %3820 = phi i32 [ 1, %3816 ], [ 0, %3818 ]
  br label %3821

3821:                                             ; preds = %3819, %3812
  %3822 = phi i32 [ 1, %3812 ], [ %3820, %3819 ]
  br label %3823

3823:                                             ; preds = %3821, %3808
  %3824 = phi i32 [ 2, %3808 ], [ %3822, %3821 ]
  br label %3825

3825:                                             ; preds = %3823, %3804
  %3826 = phi i32 [ 2, %3804 ], [ %3824, %3823 ]
  br label %3827

3827:                                             ; preds = %3825, %3800
  %3828 = phi i32 [ 4, %3800 ], [ %3826, %3825 ]
  br label %3829

3829:                                             ; preds = %3827, %3796
  %3830 = phi i32 [ 4, %3796 ], [ %3828, %3827 ]
  br label %3831

3831:                                             ; preds = %3829, %3792
  %3832 = phi i32 [ 8, %3792 ], [ %3830, %3829 ]
  br label %3833

3833:                                             ; preds = %3831, %3788
  %3834 = phi i32 [ 8, %3788 ], [ %3832, %3831 ]
  br label %3835

3835:                                             ; preds = %3833, %3784
  %3836 = phi i32 [ 1, %3784 ], [ %3834, %3833 ]
  br label %3837

3837:                                             ; preds = %3835, %3780
  %3838 = phi i32 [ 1, %3780 ], [ %3836, %3835 ]
  br label %3839

3839:                                             ; preds = %3837, %3776
  %3840 = phi i32 [ 2, %3776 ], [ %3838, %3837 ]
  br label %3841

3841:                                             ; preds = %3839, %3772
  %3842 = phi i32 [ 2, %3772 ], [ %3840, %3839 ]
  br label %3843

3843:                                             ; preds = %3841, %3768
  %3844 = phi i32 [ 4, %3768 ], [ %3842, %3841 ]
  br label %3845

3845:                                             ; preds = %3843, %3764
  %3846 = phi i32 [ 8, %3764 ], [ %3844, %3843 ]
  %3847 = sext i32 %3846 to i64
  %3848 = load i64, ptr %208, align 8, !tbaa !9
  %3849 = mul i64 %3847, %3848
  %3850 = call noalias ptr @malloc(i64 noundef %3849) #9
  store ptr %3850, ptr %9, align 8, !tbaa !11
  %3851 = load i64, ptr %208, align 8, !tbaa !9
  store i64 %3851, ptr %5, align 8, !tbaa !9
  br label %3852

3852:                                             ; preds = %3845, %3747
  %3853 = load ptr, ptr %9, align 8, !tbaa !11
  %3854 = icmp ne ptr null, %3853
  br i1 %3854, label %3855, label %4012

3855:                                             ; preds = %3852
  %3856 = load ptr, ptr %10, align 8, !tbaa !11
  %3857 = icmp ne ptr null, %3856
  br i1 %3857, label %3858, label %4012

3858:                                             ; preds = %3855
  %3859 = load i32, ptr %2, align 4, !tbaa !5
  %3860 = icmp eq i32 0, %3859
  br i1 %3860, label %3861, label %4012

3861:                                             ; preds = %3858
  br label %3862

3862:                                             ; preds = %3861
  call void @llvm.lifetime.start.p0(i64 8, ptr %209) #8
  store double 1.000000e+00, ptr %209, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr %210) #8
  %3863 = load double, ptr %209, align 8, !tbaa !13
  %3864 = load i64, ptr %208, align 8, !tbaa !9
  %3865 = uitofp i64 %3864 to double
  %3866 = fdiv double 1.000000e+00, %3865
  %3867 = load i64, ptr %208, align 8, !tbaa !9
  %3868 = uitofp i64 %3867 to double
  %3869 = fdiv double 1.000000e+00, %3868
  %3870 = call double @llvm.fmuladd.f64(double %3863, double %3866, double %3869)
  store double %3870, ptr %210, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 4, ptr %211) #8
  %3871 = getelementptr inbounds [2 x i64], ptr %4, i64 0, i64 0
  %3872 = load i64, ptr %3871, align 16, !tbaa !9
  %3873 = trunc i64 %3872 to i32
  store i32 %3873, ptr %211, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %212) #8
  %3874 = getelementptr inbounds [2 x i64], ptr %4, i64 0, i64 1
  %3875 = load i64, ptr %3874, align 8, !tbaa !9
  %3876 = trunc i64 %3875 to i32
  store i32 %3876, ptr %212, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %213) #8
  %3877 = getelementptr inbounds [2 x i64], ptr %4, i64 0, i64 0
  %3878 = load i64, ptr %3877, align 16, !tbaa !9
  %3879 = trunc i64 %3878 to i32
  store i32 %3879, ptr %213, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %214) #8
  store i32 0, ptr %214, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %215) #8
  store i32 0, ptr %215, align 4, !tbaa !5
  %3880 = load double, ptr %209, align 8, !tbaa !13
  %3881 = fcmp une double 0.000000e+00, %3880
  br i1 %3881, label %3882, label %3941

3882:                                             ; preds = %3862
  store i32 0, ptr %214, align 4, !tbaa !5
  br label %3883

3883:                                             ; preds = %3937, %3882
  %3884 = load i32, ptr %214, align 4, !tbaa !5
  %3885 = load i32, ptr %212, align 4, !tbaa !5
  %3886 = icmp slt i32 %3884, %3885
  br i1 %3886, label %3887, label %3940

3887:                                             ; preds = %3883
  store i32 0, ptr %215, align 4, !tbaa !5
  br label %3888

3888:                                             ; preds = %3913, %3887
  %3889 = load i32, ptr %215, align 4, !tbaa !5
  %3890 = load i32, ptr %211, align 4, !tbaa !5
  %3891 = icmp slt i32 %3889, %3890
  br i1 %3891, label %3892, label %3916

3892:                                             ; preds = %3888
  call void @llvm.lifetime.start.p0(i64 4, ptr %216) #8
  %3893 = load i32, ptr %214, align 4, !tbaa !5
  %3894 = load i32, ptr %213, align 4, !tbaa !5
  %3895 = mul nsw i32 %3893, %3894
  %3896 = load i32, ptr %215, align 4, !tbaa !5
  %3897 = add nsw i32 %3895, %3896
  store i32 %3897, ptr %216, align 4, !tbaa !5
  %3898 = load double, ptr %210, align 8, !tbaa !13
  %3899 = load i32, ptr %214, align 4, !tbaa !5
  %3900 = sitofp i32 %3899 to double
  %3901 = load i32, ptr %211, align 4, !tbaa !5
  %3902 = sitofp i32 %3901 to double
  %3903 = call double @llvm.fmuladd.f64(double %3900, double %3902, double 1.000000e+00)
  %3904 = load i32, ptr %215, align 4, !tbaa !5
  %3905 = sitofp i32 %3904 to double
  %3906 = fadd double %3903, %3905
  %3907 = fmul double %3898, %3906
  %3908 = fptrunc double %3907 to float
  %3909 = load ptr, ptr %9, align 8, !tbaa !11
  %3910 = load i32, ptr %216, align 4, !tbaa !5
  %3911 = sext i32 %3910 to i64
  %3912 = getelementptr inbounds float, ptr %3909, i64 %3911
  store float %3908, ptr %3912, align 4, !tbaa !15
  call void @llvm.lifetime.end.p0(i64 4, ptr %216) #8
  br label %3913

3913:                                             ; preds = %3892
  %3914 = load i32, ptr %215, align 4, !tbaa !5
  %3915 = add nsw i32 %3914, 1
  store i32 %3915, ptr %215, align 4, !tbaa !5
  br label %3888, !llvm.loop !83

3916:                                             ; preds = %3888
  br label %3917

3917:                                             ; preds = %3933, %3916
  %3918 = load i32, ptr %215, align 4, !tbaa !5
  %3919 = load i32, ptr %213, align 4, !tbaa !5
  %3920 = icmp slt i32 %3918, %3919
  br i1 %3920, label %3921, label %3936

3921:                                             ; preds = %3917
  call void @llvm.lifetime.start.p0(i64 4, ptr %217) #8
  %3922 = load i32, ptr %214, align 4, !tbaa !5
  %3923 = load i32, ptr %213, align 4, !tbaa !5
  %3924 = mul nsw i32 %3922, %3923
  %3925 = load i32, ptr %215, align 4, !tbaa !5
  %3926 = add nsw i32 %3924, %3925
  store i32 %3926, ptr %217, align 4, !tbaa !5
  %3927 = load double, ptr %209, align 8, !tbaa !13
  %3928 = fptrunc double %3927 to float
  %3929 = load ptr, ptr %9, align 8, !tbaa !11
  %3930 = load i32, ptr %217, align 4, !tbaa !5
  %3931 = sext i32 %3930 to i64
  %3932 = getelementptr inbounds float, ptr %3929, i64 %3931
  store float %3928, ptr %3932, align 4, !tbaa !15
  call void @llvm.lifetime.end.p0(i64 4, ptr %217) #8
  br label %3933

3933:                                             ; preds = %3921
  %3934 = load i32, ptr %215, align 4, !tbaa !5
  %3935 = add nsw i32 %3934, 1
  store i32 %3935, ptr %215, align 4, !tbaa !5
  br label %3917, !llvm.loop !84

3936:                                             ; preds = %3917
  br label %3937

3937:                                             ; preds = %3936
  %3938 = load i32, ptr %214, align 4, !tbaa !5
  %3939 = add nsw i32 %3938, 1
  store i32 %3939, ptr %214, align 4, !tbaa !5
  br label %3883, !llvm.loop !85

3940:                                             ; preds = %3883
  br label %3997

3941:                                             ; preds = %3862
  call void @llvm.lifetime.start.p0(i64 4, ptr %218) #8
  %3942 = load i32, ptr %212, align 4, !tbaa !5
  %3943 = load i32, ptr %213, align 4, !tbaa !5
  %3944 = mul nsw i32 %3942, %3943
  store i32 %3944, ptr %218, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %219) #8
  %3945 = load i32, ptr %218, align 4, !tbaa !5
  %3946 = add nsw i32 %3945, 1
  %3947 = sdiv i32 %3946, 2
  %3948 = sitofp i32 %3947 to float
  store float %3948, ptr %219, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %220) #8
  %3949 = load i64, ptr %208, align 8, !tbaa !9
  %3950 = uitofp i64 %3949 to double
  %3951 = fdiv double 1.000000e+00, %3950
  %3952 = fptrunc double %3951 to float
  %3953 = load float, ptr %219, align 4, !tbaa !15
  %3954 = fdiv float %3952, %3953
  store float %3954, ptr %220, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 8, ptr %221) #8
  %3955 = load i32, ptr %218, align 4, !tbaa !5
  %3956 = sext i32 %3955 to i64
  %3957 = call i64 @libxsmm_coprime2(i64 noundef %3956)
  store i64 %3957, ptr %221, align 8, !tbaa !9
  store i32 0, ptr %214, align 4, !tbaa !5
  br label %3958

3958:                                             ; preds = %3993, %3941
  %3959 = load i32, ptr %214, align 4, !tbaa !5
  %3960 = load i32, ptr %212, align 4, !tbaa !5
  %3961 = icmp slt i32 %3959, %3960
  br i1 %3961, label %3962, label %3996

3962:                                             ; preds = %3958
  store i32 0, ptr %215, align 4, !tbaa !5
  br label %3963

3963:                                             ; preds = %3989, %3962
  %3964 = load i32, ptr %215, align 4, !tbaa !5
  %3965 = load i32, ptr %213, align 4, !tbaa !5
  %3966 = icmp slt i32 %3964, %3965
  br i1 %3966, label %3967, label %3992

3967:                                             ; preds = %3963
  call void @llvm.lifetime.start.p0(i64 4, ptr %222) #8
  %3968 = load i32, ptr %214, align 4, !tbaa !5
  %3969 = load i32, ptr %213, align 4, !tbaa !5
  %3970 = mul nsw i32 %3968, %3969
  %3971 = load i32, ptr %215, align 4, !tbaa !5
  %3972 = add nsw i32 %3970, %3971
  store i32 %3972, ptr %222, align 4, !tbaa !5
  %3973 = load float, ptr %220, align 4, !tbaa !15
  %3974 = load i64, ptr %221, align 8, !tbaa !9
  %3975 = load i32, ptr %222, align 4, !tbaa !5
  %3976 = sext i32 %3975 to i64
  %3977 = mul i64 %3974, %3976
  %3978 = load i32, ptr %218, align 4, !tbaa !5
  %3979 = sext i32 %3978 to i64
  %3980 = urem i64 %3977, %3979
  %3981 = uitofp i64 %3980 to float
  %3982 = load float, ptr %219, align 4, !tbaa !15
  %3983 = fsub float %3981, %3982
  %3984 = fmul float %3973, %3983
  %3985 = load ptr, ptr %9, align 8, !tbaa !11
  %3986 = load i32, ptr %222, align 4, !tbaa !5
  %3987 = sext i32 %3986 to i64
  %3988 = getelementptr inbounds float, ptr %3985, i64 %3987
  store float %3984, ptr %3988, align 4, !tbaa !15
  call void @llvm.lifetime.end.p0(i64 4, ptr %222) #8
  br label %3989

3989:                                             ; preds = %3967
  %3990 = load i32, ptr %215, align 4, !tbaa !5
  %3991 = add nsw i32 %3990, 1
  store i32 %3991, ptr %215, align 4, !tbaa !5
  br label %3963, !llvm.loop !86

3992:                                             ; preds = %3963
  br label %3993

3993:                                             ; preds = %3992
  %3994 = load i32, ptr %214, align 4, !tbaa !5
  %3995 = add nsw i32 %3994, 1
  store i32 %3995, ptr %214, align 4, !tbaa !5
  br label %3958, !llvm.loop !87

3996:                                             ; preds = %3958
  call void @llvm.lifetime.end.p0(i64 8, ptr %221) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %220) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %219) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %218) #8
  br label %3997

3997:                                             ; preds = %3996, %3940
  call void @llvm.lifetime.end.p0(i64 4, ptr %215) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %214) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %213) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %212) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %211) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %210) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %209) #8
  br label %3998

3998:                                             ; preds = %3997
  br label %3999

3999:                                             ; preds = %3998
  %4000 = load ptr, ptr %9, align 8, !tbaa !11
  %4001 = load ptr, ptr %10, align 8, !tbaa !11
  %4002 = load i64, ptr %208, align 8, !tbaa !9
  call void @libxsmm_rne_convert_fp32_hf8(ptr noundef %4000, ptr noundef %4001, i64 noundef %4002)
  %4003 = load ptr, ptr %10, align 8, !tbaa !11
  %4004 = load ptr, ptr %9, align 8, !tbaa !11
  %4005 = load i64, ptr %208, align 8, !tbaa !9
  call void @libxsmm_convert_hf8_f32(ptr noundef %4003, ptr noundef %4004, i64 noundef %4005)
  %4006 = getelementptr inbounds [2 x i64], ptr %4, i64 0, i64 0
  %4007 = load i64, ptr %6, align 8, !tbaa !9
  %4008 = load i64, ptr %7, align 8, !tbaa !9
  %4009 = load i32, ptr %3, align 4, !tbaa !5
  %4010 = load ptr, ptr %9, align 8, !tbaa !11
  %4011 = call i32 @libxsmm_mhd_write(ptr noundef @.str.8, ptr noundef null, ptr noundef %4006, ptr noundef null, i64 noundef %4007, i64 noundef %4008, i32 noundef %4009, ptr noundef null, ptr noundef %4010, ptr noundef null, ptr noundef null, ptr noundef null, i64 noundef 0)
  store i32 %4011, ptr %2, align 4, !tbaa !5
  br label %4013

4012:                                             ; preds = %3858, %3855, %3852
  store i32 1, ptr %2, align 4, !tbaa !5
  br label %4013

4013:                                             ; preds = %4012, %3999
  call void @llvm.lifetime.end.p0(i64 8, ptr %208) #8
  br label %4014

4014:                                             ; preds = %4013, %3746
  %4015 = load ptr, ptr %10, align 8, !tbaa !11
  call void @free(ptr noundef %4015) #8
  %4016 = load ptr, ptr %9, align 8, !tbaa !11
  call void @free(ptr noundef %4016) #8
  %4017 = load i32, ptr %2, align 4, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #8
  call void @llvm.lifetime.end.p0(i64 1024, ptr %11) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %6) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %5) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr %4) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %3) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %2) #8
  ret i32 %4017
}

; Function Attrs: nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.start.p0(i64 immarg, ptr nocapture) #1

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #2

declare ptr @libxsmm_rng_create_extstate(i32 noundef) #3

declare i32 @libxsmm_mhd_read_header(ptr noundef, i64 noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) #3

; Function Attrs: nounwind
declare void @free(ptr noundef) #4

; Function Attrs: nounwind allocsize(0)
declare noalias ptr @malloc(i64 noundef) #5

; Function Attrs: noreturn nounwind
declare void @__assert_fail(ptr noundef, ptr noundef, i32 noundef, ptr noundef) #6

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare double @llvm.fmuladd.f64(double, double, double) #7

; Function Attrs: nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.end.p0(i64 immarg, ptr nocapture) #1

declare i64 @libxsmm_coprime2(i64 noundef) #3

declare void @libxsmm_truncate_convert_f32_bf16(ptr noundef, ptr noundef, i64 noundef) #3

declare void @libxsmm_convert_bf16_f32(ptr noundef, ptr noundef, i64 noundef) #3

declare i32 @libxsmm_mhd_read(ptr noundef, ptr noundef, ptr noundef, ptr noundef, i64 noundef, i64 noundef, i64 noundef, i32 noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, i64 noundef) #3

declare i32 @libxsmm_mhd_element_comparison(ptr noundef, i32 noundef, i32 noundef, ptr noundef, ptr noundef, ptr noundef) #3

declare i32 @libxsmm_mhd_write(ptr noundef, ptr noundef, ptr noundef, ptr noundef, i64 noundef, i64 noundef, i32 noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, i64 noundef) #3

declare void @libxsmm_rnaz_convert_fp32_bf16(ptr noundef, ptr noundef, i64 noundef) #3

declare void @libxsmm_rne_convert_fp32_bf16(ptr noundef, ptr noundef, i64 noundef) #3

declare void @libxsmm_rne_convert_fp32_f16(ptr noundef, ptr noundef, i64 noundef) #3

declare void @libxsmm_convert_f16_f32(ptr noundef, ptr noundef, i64 noundef) #3

declare void @libxsmm_rne_convert_fp32_bf8(ptr noundef, ptr noundef, i64 noundef) #3

declare void @libxsmm_convert_bf8_f32(ptr noundef, ptr noundef, i64 noundef) #3

declare void @libxsmm_stochastic_convert_fp32_bf8(ptr noundef, ptr noundef, i32 noundef, ptr noundef, i32 noundef) #3

declare void @libxsmm_rne_convert_fp32_hf8(ptr noundef, ptr noundef, i64 noundef) #3

declare void @libxsmm_convert_hf8_f32(ptr noundef, ptr noundef, i64 noundef) #3

attributes #0 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #3 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { nounwind allocsize(0) "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { noreturn nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #7 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #8 = { nounwind }
attributes #9 = { nounwind allocsize(0) }
attributes #10 = { noreturn nounwind }

!llvm.module.flags = !{!0, !1, !2, !3}
!llvm.ident = !{!4}

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"long", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"any pointer", !7, i64 0}
!13 = !{!14, !14, i64 0}
!14 = !{!"double", !7, i64 0}
!15 = !{!16, !16, i64 0}
!16 = !{!"float", !7, i64 0}
!17 = distinct !{!17, !18}
!18 = !{!"llvm.loop.mustprogress"}
!19 = distinct !{!19, !18}
!20 = distinct !{!20, !18}
!21 = distinct !{!21, !18}
!22 = distinct !{!22, !18}
!23 = distinct !{!23, !18}
!24 = distinct !{!24, !18}
!25 = distinct !{!25, !18}
!26 = distinct !{!26, !18}
!27 = distinct !{!27, !18}
!28 = distinct !{!28, !18}
!29 = distinct !{!29, !18}
!30 = distinct !{!30, !18}
!31 = distinct !{!31, !18}
!32 = distinct !{!32, !18}
!33 = distinct !{!33, !18}
!34 = distinct !{!34, !18}
!35 = distinct !{!35, !18}
!36 = distinct !{!36, !18}
!37 = distinct !{!37, !18}
!38 = distinct !{!38, !18}
!39 = distinct !{!39, !18}
!40 = distinct !{!40, !18}
!41 = distinct !{!41, !18}
!42 = distinct !{!42, !18}
!43 = distinct !{!43, !18}
!44 = distinct !{!44, !18}
!45 = distinct !{!45, !18}
!46 = distinct !{!46, !18}
!47 = distinct !{!47, !18}
!48 = distinct !{!48, !18}
!49 = distinct !{!49, !18}
!50 = distinct !{!50, !18}
!51 = distinct !{!51, !18}
!52 = distinct !{!52, !18}
!53 = distinct !{!53, !18}
!54 = distinct !{!54, !18}
!55 = distinct !{!55, !18}
!56 = distinct !{!56, !18}
!57 = distinct !{!57, !18}
!58 = distinct !{!58, !18}
!59 = distinct !{!59, !18}
!60 = distinct !{!60, !18}
!61 = distinct !{!61, !18}
!62 = distinct !{!62, !18}
!63 = distinct !{!63, !18}
!64 = distinct !{!64, !18}
!65 = distinct !{!65, !18}
!66 = distinct !{!66, !18}
!67 = distinct !{!67, !18}
!68 = distinct !{!68, !18}
!69 = distinct !{!69, !18}
!70 = distinct !{!70, !18}
!71 = distinct !{!71, !18}
!72 = distinct !{!72, !18}
!73 = distinct !{!73, !18}
!74 = distinct !{!74, !18}
!75 = distinct !{!75, !18}
!76 = distinct !{!76, !18}
!77 = distinct !{!77, !18}
!78 = distinct !{!78, !18}
!79 = distinct !{!79, !18}
!80 = distinct !{!80, !18}
!81 = distinct !{!81, !18}
!82 = distinct !{!82, !18}
!83 = distinct !{!83, !18}
!84 = distinct !{!84, !18}
!85 = distinct !{!85, !18}
!86 = distinct !{!86, !18}
!87 = distinct !{!87, !18}


; Optimized IR (opt -passes='default<O3>'):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

@__const.main.size = external hidden unnamed_addr constant [2 x i64], align 16
@.str = external hidden unnamed_addr constant [26 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [65 x i8], align 1
@__PRETTY_FUNCTION__.main = external hidden unnamed_addr constant [15 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [20 x i8], align 1
@switch.table.main.13 = private unnamed_addr constant [11 x i64] [i64 2, i64 2, i64 1, i64 2, i64 8, i64 2, i64 4, i64 2, i64 2, i64 2, i64 1], align 8

; Function Attrs: nounwind uwtable
define dso_local i32 @main() local_unnamed_addr #0 {
  %1 = alloca i32, align 4
  %2 = alloca [2 x i64], align 16
  %3 = alloca i64, align 8
  %4 = alloca i64, align 8
  %5 = alloca i64, align 8
  %6 = alloca [1024 x i8], align 16
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %1) #8
  store i32 1, ptr %1, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %2) #8
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(16) %2, ptr noundef nonnull align 16 dereferenceable(16) @__const.main.size, i64 16, i1 false)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %3) #8
  store i64 2, ptr %3, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %4) #8
  store i64 1, ptr %4, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %5) #8
  store i64 0, ptr %5, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 1024, ptr nonnull %6) #8
  %7 = tail call ptr @libxsmm_rng_create_extstate(i32 noundef 1) #8
  %8 = call i32 @libxsmm_mhd_read_header(ptr noundef nonnull @.str, i64 noundef 1024, ptr noundef nonnull %6, ptr noundef nonnull %3, ptr noundef nonnull %2, ptr noundef nonnull %4, ptr noundef nonnull %1, ptr noundef nonnull %5, ptr noundef null) #8
  %9 = icmp eq i32 %8, 0
  %10 = load i64, ptr %2, align 16, !tbaa !9
  %11 = getelementptr inbounds i8, ptr %2, i64 8
  %12 = load i64, ptr %11, align 8, !tbaa !9
  %13 = mul i64 %12, %10
  %.not1365 = icmp eq i64 %13, 0
  br i1 %9, label %14, label %60

14:                                               ; preds = %0
  br i1 %.not1365, label %.thread, label %15

15:                                               ; preds = %14
  %16 = shl i64 %13, 1
  %17 = call noalias ptr @malloc(i64 noundef %16) #9
  %18 = load i32, ptr %1, align 4
  switch i32 %18, label %19 [
    i32 0, label %24
    i32 1, label %.fold.split
  ]

19:                                               ; preds = %15
  %20 = and i32 %18, -2
  %switch.tableidx = add i32 %20, -2
  %21 = icmp ult i32 %switch.tableidx, 11
  br i1 %21, label %switch.hole_check, label %22

22:                                               ; preds = %switch.hole_check, %19
  call void @__assert_fail(ptr noundef nonnull @.str.1, ptr noundef nonnull @.str.2, i32 noundef 48, ptr noundef nonnull @__PRETTY_FUNCTION__.main) #10
  unreachable

.fold.split:                                      ; preds = %15
  br label %24

switch.hole_check:                                ; preds = %19
  %switch.maskindex = trunc nuw i32 %switch.tableidx to i16
  %switch.shifted = lshr i16 1365, %switch.maskindex
  %switch.lobit = trunc i16 %switch.shifted to i1
  br i1 %switch.lobit, label %switch.lookup, label %22

switch.lookup:                                    ; preds = %switch.hole_check
  %23 = zext nneg i32 %switch.tableidx to i64
  %switch.gep = getelementptr inbounds [11 x i64], ptr @switch.table.main.13, i64 0, i64 %23
  %switch.load = load i64, ptr %switch.gep, align 8
  br label %24

24:                                               ; preds = %switch.lookup, %.fold.split, %15
  %25 = phi i64 [ 8, %15 ], [ 4, %.fold.split ], [ %switch.load, %switch.lookup ]
  %26 = mul i64 %25, %13
  %27 = call noalias ptr @malloc(i64 noundef %26) #9
  %28 = icmp ne ptr %27, null
  %29 = icmp ne ptr %17, null
  %or.cond = and i1 %29, %28
  br i1 %or.cond, label %30, label %.thread

30:                                               ; preds = %24
  %31 = uitofp i64 %13 to double
  %32 = fdiv double 1.000000e+00, %31
  %33 = fadd double %32, %32
  %34 = trunc i64 %12 to i32
  %35 = icmp sgt i32 %34, 0
  br i1 %35, label %.preheader1468.lr.ph, label %._crit_edge1483

.preheader1468.lr.ph:                             ; preds = %30
  %36 = trunc i64 %10 to i32
  %37 = icmp sgt i32 %36, 0
  %38 = sitofp i32 %36 to double
  %wide.trip.count1617 = and i64 %12, 2147483647
  %wide.trip.count1607 = and i64 %10, 2147483647
  %min.iters.check1850 = icmp ult i64 %wide.trip.count1607, 4
  %n.mod.vf1852 = and i64 %10, 3
  %n.vec1853 = sub nsw i64 %wide.trip.count1607, %n.mod.vf1852
  %broadcast.splatinsert1861 = insertelement <4 x double> poison, double %33, i64 0
  %broadcast.splat1862 = shufflevector <4 x double> %broadcast.splatinsert1861, <4 x double> poison, <4 x i32> zeroinitializer
  %cmp.n1864 = icmp eq i64 %n.mod.vf1852, 0
  br label %.preheader1468

.preheader1468:                                   ; preds = %.preheader1468.lr.ph, %._crit_edge1481
  %indvars.iv1614 = phi i64 [ 0, %.preheader1468.lr.ph ], [ %indvars.iv.next1615, %._crit_edge1481 ]
  br i1 %37, label %.lr.ph1477, label %._crit_edge1481

.lr.ph1477:                                       ; preds = %.preheader1468
  %39 = mul i64 %indvars.iv1614, %10
  %40 = trunc nuw nsw i64 %indvars.iv1614 to i32
  %41 = uitofp nneg i32 %40 to double
  %42 = call double @llvm.fmuladd.f64(double %41, double %38, double 1.000000e+00)
  %43 = and i64 %39, 4294967295
  %invariant.gep1844 = getelementptr inbounds float, ptr %27, i64 %43
  br i1 %min.iters.check1850, label %scalar.ph1849.preheader, label %vector.ph1851

vector.ph1851:                                    ; preds = %.lr.ph1477
  %broadcast.splatinsert1859 = insertelement <4 x double> poison, double %42, i64 0
  %broadcast.splat1860 = shufflevector <4 x double> %broadcast.splatinsert1859, <4 x double> poison, <4 x i32> zeroinitializer
  br label %vector.body1855

vector.body1855:                                  ; preds = %vector.body1855, %vector.ph1851
  %index1856 = phi i64 [ 0, %vector.ph1851 ], [ %index.next1863, %vector.body1855 ]
  %vec.ind1857 = phi <4 x i32> [ <i32 0, i32 1, i32 2, i32 3>, %vector.ph1851 ], [ %vec.ind.next1858, %vector.body1855 ]
  %44 = uitofp <4 x i32> %vec.ind1857 to <4 x double>
  %45 = fadd <4 x double> %broadcast.splat1860, %44
  %46 = fmul <4 x double> %broadcast.splat1862, %45
  %47 = fptrunc <4 x double> %46 to <4 x float>
  %48 = getelementptr inbounds float, ptr %invariant.gep1844, i64 %index1856
  store <4 x float> %47, ptr %48, align 4, !tbaa !11
  %index.next1863 = add nuw i64 %index1856, 4
  %vec.ind.next1858 = add <4 x i32> %vec.ind1857, <i32 4, i32 4, i32 4, i32 4>
  %49 = icmp eq i64 %index.next1863, %n.vec1853
  br i1 %49, label %middle.block1848, label %vector.body1855, !llvm.loop !13

middle.block1848:                                 ; preds = %vector.body1855
  br i1 %cmp.n1864, label %._crit_edge1481, label %scalar.ph1849.preheader

scalar.ph1849.preheader:                          ; preds = %middle.block1848, %.lr.ph1477
  %indvars.iv1604.ph = phi i64 [ 0, %.lr.ph1477 ], [ %n.vec1853, %middle.block1848 ]
  br label %scalar.ph1849

scalar.ph1849:                                    ; preds = %scalar.ph1849.preheader, %scalar.ph1849
  %indvars.iv1604 = phi i64 [ %indvars.iv.next1605, %scalar.ph1849 ], [ %indvars.iv1604.ph, %scalar.ph1849.preheader ]
  %50 = trunc nuw nsw i64 %indvars.iv1604 to i32
  %51 = uitofp nneg i32 %50 to double
  %52 = fadd double %42, %51
  %53 = fmul double %33, %52
  %54 = fptrunc double %53 to float
  %gep1845 = getelementptr inbounds float, ptr %invariant.gep1844, i64 %indvars.iv1604
  store float %54, ptr %gep1845, align 4, !tbaa !11
  %indvars.iv.next1605 = add nuw nsw i64 %indvars.iv1604, 1
  %exitcond1608.not = icmp eq i64 %indvars.iv.next1605, %wide.trip.count1607
  br i1 %exitcond1608.not, label %._crit_edge1481, label %scalar.ph1849, !llvm.loop !17

._crit_edge1481:                                  ; preds = %scalar.ph1849, %middle.block1848, %.preheader1468
  %indvars.iv.next1615 = add nuw nsw i64 %indvars.iv1614, 1
  %exitcond1618.not = icmp eq i64 %indvars.iv.next1615, %wide.trip.count1617
  br i1 %exitcond1618.not, label %._crit_edge1483, label %.preheader1468, !llvm.loop !18

._crit_edge1483:                                  ; preds = %._crit_edge1481, %30
  call void @libxsmm_truncate_convert_f32_bf16(ptr noundef nonnull %27, ptr noundef nonnull %17, i64 noundef %13) #8
  call void @libxsmm_convert_bf16_f32(ptr noundef nonnull %17, ptr noundef nonnull %27, i64 noundef %13) #8
  %55 = load i64, ptr %3, align 8, !tbaa !9
  %56 = load i64, ptr %4, align 8, !tbaa !9
  %57 = load i64, ptr %5, align 8, !tbaa !9
  %58 = load i32, ptr %1, align 4, !tbaa !5
  %59 = call i32 @libxsmm_mhd_read(ptr noundef nonnull %6, ptr noundef null, ptr noundef nonnull %2, ptr noundef null, i64 noundef %55, i64 noundef %56, i64 noundef %57, i32 noundef %58, ptr noundef null, ptr noundef nonnull %27, ptr noundef nonnull @libxsmm_mhd_element_comparison, ptr noundef null, i64 noundef 0) #8
  br label %.thread

60:                                               ; preds = %0
  br i1 %.not1365, label %.thread, label %61

61:                                               ; preds = %60
  %62 = shl i64 %13, 1
  %63 = call noalias ptr @malloc(i64 noundef %62) #9
  %64 = load i32, ptr %1, align 4
  switch i32 %64, label %65 [
    i32 0, label %70
    i32 1, label %.fold.split1366
  ]

65:                                               ; preds = %61
  %66 = and i32 %64, -2
  %switch.tableidx2070 = add i32 %66, -2
  %67 = icmp ult i32 %switch.tableidx2070, 11
  br i1 %67, label %switch.hole_check2071, label %68

68:                                               ; preds = %switch.hole_check2071, %65
  call void @__assert_fail(ptr noundef nonnull @.str.1, ptr noundef nonnull @.str.2, i32 noundef 67, ptr noundef nonnull @__PRETTY_FUNCTION__.main) #10
  unreachable

.fold.split1366:                                  ; preds = %61
  br label %70

switch.hole_check2071:                            ; preds = %65
  %switch.maskindex2073 = trunc nuw i32 %switch.tableidx2070 to i16
  %switch.shifted2074 = lshr i16 1365, %switch.maskindex2073
  %switch.lobit2075 = trunc i16 %switch.shifted2074 to i1
  br i1 %switch.lobit2075, label %switch.lookup2072, label %68

switch.lookup2072:                                ; preds = %switch.hole_check2071
  %69 = zext nneg i32 %switch.tableidx2070 to i64
  %switch.gep2076 = getelementptr inbounds [11 x i64], ptr @switch.table.main.13, i64 0, i64 %69
  %switch.load2077 = load i64, ptr %switch.gep2076, align 8
  br label %70

70:                                               ; preds = %switch.lookup2072, %.fold.split1366, %61
  %71 = phi i64 [ 8, %61 ], [ 4, %.fold.split1366 ], [ %switch.load2077, %switch.lookup2072 ]
  %72 = mul i64 %71, %13
  %73 = call noalias ptr @malloc(i64 noundef %72) #9
  %74 = icmp ne ptr %73, null
  %75 = icmp ne ptr %63, null
  %or.cond5 = and i1 %75, %74
  br i1 %or.cond5, label %76, label %.thread

76:                                               ; preds = %70
  %77 = uitofp i64 %13 to double
  %78 = fdiv double 1.000000e+00, %77
  %79 = fadd double %78, %78
  %80 = trunc i64 %12 to i32
  %81 = icmp sgt i32 %80, 0
  br i1 %81, label %.preheader1470.lr.ph, label %._crit_edge1475

.preheader1470.lr.ph:                             ; preds = %76
  %82 = trunc i64 %10 to i32
  %83 = icmp sgt i32 %82, 0
  %84 = sitofp i32 %82 to double
  %wide.trip.count1602 = and i64 %12, 2147483647
  %wide.trip.count = and i64 %10, 2147483647
  %min.iters.check = icmp ult i64 %wide.trip.count, 4
  %n.mod.vf = and i64 %10, 3
  %n.vec = sub nsw i64 %wide.trip.count, %n.mod.vf
  %broadcast.splatinsert1846 = insertelement <4 x double> poison, double %79, i64 0
  %broadcast.splat1847 = shufflevector <4 x double> %broadcast.splatinsert1846, <4 x double> poison, <4 x i32> zeroinitializer
  %cmp.n = icmp eq i64 %n.mod.vf, 0
  br label %.preheader1470

.preheader1470:                                   ; preds = %.preheader1470.lr.ph, %._crit_edge
  %indvars.iv1599 = phi i64 [ 0, %.preheader1470.lr.ph ], [ %indvars.iv.next1600, %._crit_edge ]
  br i1 %83, label %.lr.ph, label %._crit_edge

.lr.ph:                                           ; preds = %.preheader1470
  %85 = mul i64 %indvars.iv1599, %10
  %86 = trunc nuw nsw i64 %indvars.iv1599 to i32
  %87 = uitofp nneg i32 %86 to double
  %88 = call double @llvm.fmuladd.f64(double %87, double %84, double 1.000000e+00)
  %89 = and i64 %85, 4294967295
  %invariant.gep1840 = getelementptr inbounds float, ptr %73, i64 %89
  br i1 %min.iters.check, label %scalar.ph.preheader, label %vector.ph

vector.ph:                                        ; preds = %.lr.ph
  %broadcast.splatinsert = insertelement <4 x double> poison, double %88, i64 0
  %broadcast.splat = shufflevector <4 x double> %broadcast.splatinsert, <4 x double> poison, <4 x i32> zeroinitializer
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %vec.ind = phi <4 x i32> [ <i32 0, i32 1, i32 2, i32 3>, %vector.ph ], [ %vec.ind.next, %vector.body ]
  %90 = uitofp <4 x i32> %vec.ind to <4 x double>
  %91 = fadd <4 x double> %broadcast.splat, %90
  %92 = fmul <4 x double> %broadcast.splat1847, %91
  %93 = fptrunc <4 x double> %92 to <4 x float>
  %94 = getelementptr inbounds float, ptr %invariant.gep1840, i64 %index
  store <4 x float> %93, ptr %94, align 4, !tbaa !11
  %index.next = add nuw i64 %index, 4
  %vec.ind.next = add <4 x i32> %vec.ind, <i32 4, i32 4, i32 4, i32 4>
  %95 = icmp eq i64 %index.next, %n.vec
  br i1 %95, label %middle.block, label %vector.body, !llvm.loop !19

middle.block:                                     ; preds = %vector.body
  br i1 %cmp.n, label %._crit_edge, label %scalar.ph.preheader

scalar.ph.preheader:                              ; preds = %middle.block, %.lr.ph
  %indvars.iv.ph = phi i64 [ 0, %.lr.ph ], [ %n.vec, %middle.block ]
  br label %scalar.ph

scalar.ph:                                        ; preds = %scalar.ph.preheader, %scalar.ph
  %indvars.iv = phi i64 [ %indvars.iv.next, %scalar.ph ], [ %indvars.iv.ph, %scalar.ph.preheader ]
  %96 = trunc nuw nsw i64 %indvars.iv to i32
  %97 = uitofp nneg i32 %96 to double
  %98 = fadd double %88, %97
  %99 = fmul double %79, %98
  %100 = fptrunc double %99 to float
  %gep1841 = getelementptr inbounds float, ptr %invariant.gep1840, i64 %indvars.iv
  store float %100, ptr %gep1841, align 4, !tbaa !11
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, %wide.trip.count
  br i1 %exitcond.not, label %._crit_edge, label %scalar.ph, !llvm.loop !20

._crit_edge:                                      ; preds = %scalar.ph, %middle.block, %.preheader1470
  %indvars.iv.next1600 = add nuw nsw i64 %indvars.iv1599, 1
  %exitcond1603.not = icmp eq i64 %indvars.iv.next1600, %wide.trip.count1602
  br i1 %exitcond1603.not, label %._crit_edge1475, label %.preheader1470, !llvm.loop !21

._crit_edge1475:                                  ; preds = %._crit_edge, %76
  call void @libxsmm_truncate_convert_f32_bf16(ptr noundef nonnull %73, ptr noundef nonnull %63, i64 noundef %13) #8
  call void @libxsmm_convert_bf16_f32(ptr noundef nonnull %63, ptr noundef nonnull %73, i64 noundef %13) #8
  %101 = load i64, ptr %3, align 8, !tbaa !9
  %102 = load i64, ptr %4, align 8, !tbaa !9
  %103 = load i32, ptr %1, align 4, !tbaa !5
  %104 = call i32 @libxsmm_mhd_write(ptr noundef nonnull @.str, ptr noundef null, ptr noundef nonnull %2, ptr noundef null, i64 noundef %101, i64 noundef %102, i32 noundef %103, ptr noundef null, ptr noundef nonnull %73, ptr noundef null, ptr noundef null, ptr noundef null, i64 noundef 0) #8
  br label %.thread

.thread:                                          ; preds = %60, %14, %._crit_edge1475, %70, %._crit_edge1483, %24
  %.21206 = phi ptr [ %17, %24 ], [ %17, %._crit_edge1483 ], [ %63, %70 ], [ %63, %._crit_edge1475 ], [ null, %14 ], [ null, %60 ]
  %.21185 = phi ptr [ %27, %24 ], [ %27, %._crit_edge1483 ], [ %73, %70 ], [ %73, %._crit_edge1475 ], [ null, %14 ], [ null, %60 ]
  %.21167 = phi i64 [ %13, %24 ], [ %13, %._crit_edge1483 ], [ %13, %70 ], [ %13, %._crit_edge1475 ], [ 0, %14 ], [ 0, %60 ]
  %.2 = phi i32 [ 1, %24 ], [ %59, %._crit_edge1483 ], [ 1, %70 ], [ %104, %._crit_edge1475 ], [ 1, %14 ], [ 1, %60 ]
  %105 = call i32 @libxsmm_mhd_read_header(ptr noundef nonnull @.str.3, i64 noundef 1024, ptr noundef nonnull %6, ptr noundef nonnull %3, ptr noundef nonnull %2, ptr noundef nonnull %4, ptr noundef nonnull %1, ptr noundef nonnull %5, ptr noundef null) #8
  %106 = icmp eq i32 %105, 0
  %107 = load i64, ptr %2, align 16, !tbaa !9
  %108 = getelementptr inbounds i8, ptr %2, i64 8
  %109 = load i64, ptr %108, align 8, !tbaa !9
  %110 = mul i64 %109, %107
  %111 = icmp ult i64 %.21167, %110
  br i1 %106, label %112, label %163

112:                                              ; preds = %.thread
  br i1 %111, label %113, label %126

113:                                              ; preds = %112
  call void @free(ptr noundef %.21206) #8
  call void @free(ptr noundef %.21185) #8
  %114 = shl i64 %110, 1
  %115 = call noalias ptr @malloc(i64 noundef %114) #9
  %116 = load i32, ptr %1, align 4
  switch i32 %116, label %117 [
    i32 0, label %122
    i32 1, label %.fold.split1367
  ]

117:                                              ; preds = %113
  %118 = and i32 %116, -2
  %switch.tableidx2079 = add i32 %118, -2
  %119 = icmp ult i32 %switch.tableidx2079, 11
  br i1 %119, label %switch.hole_check2080, label %120

120:                                              ; preds = %switch.hole_check2080, %117
  call void @__assert_fail(ptr noundef nonnull @.str.1, ptr noundef nonnull @.str.2, i32 noundef 89, ptr noundef nonnull @__PRETTY_FUNCTION__.main) #10
  unreachable

.fold.split1367:                                  ; preds = %113
  br label %122

switch.hole_check2080:                            ; preds = %117
  %switch.maskindex2082 = trunc nuw i32 %switch.tableidx2079 to i16
  %switch.shifted2083 = lshr i16 1365, %switch.maskindex2082
  %switch.lobit2084 = trunc i16 %switch.shifted2083 to i1
  br i1 %switch.lobit2084, label %switch.lookup2081, label %120

switch.lookup2081:                                ; preds = %switch.hole_check2080
  %121 = zext nneg i32 %switch.tableidx2079 to i64
  %switch.gep2085 = getelementptr inbounds [11 x i64], ptr @switch.table.main.13, i64 0, i64 %121
  %switch.load2086 = load i64, ptr %switch.gep2085, align 8
  br label %122

122:                                              ; preds = %switch.lookup2081, %113, %.fold.split1367
  %123 = phi i64 [ 8, %113 ], [ 4, %.fold.split1367 ], [ %switch.load2086, %switch.lookup2081 ]
  %124 = mul i64 %123, %110
  %125 = call noalias ptr @malloc(i64 noundef %124) #9
  br label %126

126:                                              ; preds = %122, %112
  %.31207 = phi ptr [ %115, %122 ], [ %.21206, %112 ]
  %.31186 = phi ptr [ %125, %122 ], [ %.21185, %112 ]
  %.31168 = phi i64 [ %110, %122 ], [ %.21167, %112 ]
  %127 = icmp ne ptr %.31186, null
  %128 = icmp ne ptr %.31207, null
  %or.cond9 = and i1 %128, %127
  %129 = icmp eq i32 %.2, 0
  %or.cond11 = select i1 %or.cond9, i1 %129, i1 false
  br i1 %or.cond11, label %130, label %213

130:                                              ; preds = %126
  %131 = uitofp i64 %110 to double
  %132 = fdiv double 1.000000e+00, %131
  %133 = fadd double %132, %132
  %134 = trunc i64 %109 to i32
  %135 = icmp sgt i32 %134, 0
  br i1 %135, label %.preheader1464.lr.ph, label %._crit_edge1499

.preheader1464.lr.ph:                             ; preds = %130
  %136 = trunc i64 %107 to i32
  %137 = icmp sgt i32 %136, 0
  %138 = sitofp i32 %136 to double
  %wide.trip.count1647 = and i64 %109, 2147483647
  %wide.trip.count1637 = and i64 %107, 2147483647
  %min.iters.check1884 = icmp ult i64 %wide.trip.count1637, 4
  %n.mod.vf1886 = and i64 %107, 3
  %n.vec1887 = sub nsw i64 %wide.trip.count1637, %n.mod.vf1886
  %broadcast.splatinsert1895 = insertelement <4 x double> poison, double %133, i64 0
  %broadcast.splat1896 = shufflevector <4 x double> %broadcast.splatinsert1895, <4 x double> poison, <4 x i32> zeroinitializer
  %cmp.n1898 = icmp eq i64 %n.mod.vf1886, 0
  br label %.preheader1464

.preheader1464:                                   ; preds = %.preheader1464.lr.ph, %._crit_edge1497
  %indvars.iv1644 = phi i64 [ 0, %.preheader1464.lr.ph ], [ %indvars.iv.next1645, %._crit_edge1497 ]
  br i1 %137, label %.lr.ph1493, label %._crit_edge1497

.lr.ph1493:                                       ; preds = %.preheader1464
  %139 = mul i64 %indvars.iv1644, %107
  %140 = trunc nuw nsw i64 %indvars.iv1644 to i32
  %141 = uitofp nneg i32 %140 to double
  %142 = call double @llvm.fmuladd.f64(double %141, double %138, double 1.000000e+00)
  %143 = and i64 %139, 4294967295
  br i1 %min.iters.check1884, label %scalar.ph1883.preheader, label %vector.ph1885

vector.ph1885:                                    ; preds = %.lr.ph1493
  %broadcast.splatinsert1893 = insertelement <4 x double> poison, double %142, i64 0
  %broadcast.splat1894 = shufflevector <4 x double> %broadcast.splatinsert1893, <4 x double> poison, <4 x i32> zeroinitializer
  br label %vector.body1889

vector.body1889:                                  ; preds = %vector.body1889, %vector.ph1885
  %index1890 = phi i64 [ 0, %vector.ph1885 ], [ %index.next1897, %vector.body1889 ]
  %vec.ind1891 = phi <4 x i32> [ <i32 0, i32 1, i32 2, i32 3>, %vector.ph1885 ], [ %vec.ind.next1892, %vector.body1889 ]
  %144 = add nuw nsw i64 %index1890, %143
  %145 = uitofp <4 x i32> %vec.ind1891 to <4 x double>
  %146 = fadd <4 x double> %broadcast.splat1894, %145
  %147 = fmul <4 x double> %broadcast.splat1896, %146
  %148 = fptrunc <4 x double> %147 to <4 x float>
  %149 = getelementptr inbounds float, ptr %.31186, i64 %144
  store <4 x float> %148, ptr %149, align 4, !tbaa !11
  %index.next1897 = add nuw i64 %index1890, 4
  %vec.ind.next1892 = add <4 x i32> %vec.ind1891, <i32 4, i32 4, i32 4, i32 4>
  %150 = icmp eq i64 %index.next1897, %n.vec1887
  br i1 %150, label %middle.block1882, label %vector.body1889, !llvm.loop !22

middle.block1882:                                 ; preds = %vector.body1889
  br i1 %cmp.n1898, label %._crit_edge1497, label %scalar.ph1883.preheader

scalar.ph1883.preheader:                          ; preds = %middle.block1882, %.lr.ph1493
  %indvars.iv1634.ph = phi i64 [ 0, %.lr.ph1493 ], [ %n.vec1887, %middle.block1882 ]
  br label %scalar.ph1883

scalar.ph1883:                                    ; preds = %scalar.ph1883.preheader, %scalar.ph1883
  %indvars.iv1634 = phi i64 [ %indvars.iv.next1635, %scalar.ph1883 ], [ %indvars.iv1634.ph, %scalar.ph1883.preheader ]
  %151 = add nuw nsw i64 %indvars.iv1634, %143
  %152 = trunc nuw nsw i64 %indvars.iv1634 to i32
  %153 = uitofp nneg i32 %152 to double
  %154 = fadd double %142, %153
  %155 = fmul double %133, %154
  %156 = fptrunc double %155 to float
  %157 = getelementptr inbounds float, ptr %.31186, i64 %151
  store float %156, ptr %157, align 4, !tbaa !11
  %indvars.iv.next1635 = add nuw nsw i64 %indvars.iv1634, 1
  %exitcond1638.not = icmp eq i64 %indvars.iv.next1635, %wide.trip.count1637
  br i1 %exitcond1638.not, label %._crit_edge1497, label %scalar.ph1883, !llvm.loop !23

._crit_edge1497:                                  ; preds = %scalar.ph1883, %middle.block1882, %.preheader1464
  %indvars.iv.next1645 = add nuw nsw i64 %indvars.iv1644, 1
  %exitcond1648.not = icmp eq i64 %indvars.iv.next1645, %wide.trip.count1647
  br i1 %exitcond1648.not, label %._crit_edge1499, label %.preheader1464, !llvm.loop !24

._crit_edge1499:                                  ; preds = %._crit_edge1497, %130
  call void @libxsmm_rnaz_convert_fp32_bf16(ptr noundef nonnull %.31186, ptr noundef nonnull %.31207, i64 noundef %110) #8
  call void @libxsmm_convert_bf16_f32(ptr noundef nonnull %.31207, ptr noundef nonnull %.31186, i64 noundef %110) #8
  %158 = load i64, ptr %3, align 8, !tbaa !9
  %159 = load i64, ptr %4, align 8, !tbaa !9
  %160 = load i64, ptr %5, align 8, !tbaa !9
  %161 = load i32, ptr %1, align 4, !tbaa !5
  %162 = call i32 @libxsmm_mhd_read(ptr noundef nonnull %6, ptr noundef null, ptr noundef nonnull %2, ptr noundef null, i64 noundef %158, i64 noundef %159, i64 noundef %160, i32 noundef %161, ptr noundef null, ptr noundef nonnull %.31186, ptr noundef nonnull @libxsmm_mhd_element_comparison, ptr noundef null, i64 noundef 0) #8
  br label %213

163:                                              ; preds = %.thread
  br i1 %111, label %164, label %177

164:                                              ; preds = %163
  call void @free(ptr noundef %.21206) #8
  call void @free(ptr noundef %.21185) #8
  %165 = shl i64 %110, 1
  %166 = call noalias ptr @malloc(i64 noundef %165) #9
  %167 = load i32, ptr %1, align 4
  switch i32 %167, label %168 [
    i32 0, label %173
    i32 1, label %.fold.split1368
  ]

168:                                              ; preds = %164
  %169 = and i32 %167, -2
  %switch.tableidx2088 = add i32 %169, -2
  %170 = icmp ult i32 %switch.tableidx2088, 11
  br i1 %170, label %switch.hole_check2089, label %171

171:                                              ; preds = %switch.hole_check2089, %168
  call void @__assert_fail(ptr noundef nonnull @.str.1, ptr noundef nonnull @.str.2, i32 noundef 108, ptr noundef nonnull @__PRETTY_FUNCTION__.main) #10
  unreachable

.fold.split1368:                                  ; preds = %164
  br label %173

switch.hole_check2089:                            ; preds = %168
  %switch.maskindex2091 = trunc nuw i32 %switch.tableidx2088 to i16
  %switch.shifted2092 = lshr i16 1365, %switch.maskindex2091
  %switch.lobit2093 = trunc i16 %switch.shifted2092 to i1
  br i1 %switch.lobit2093, label %switch.lookup2090, label %171

switch.lookup2090:                                ; preds = %switch.hole_check2089
  %172 = zext nneg i32 %switch.tableidx2088 to i64
  %switch.gep2094 = getelementptr inbounds [11 x i64], ptr @switch.table.main.13, i64 0, i64 %172
  %switch.load2095 = load i64, ptr %switch.gep2094, align 8
  br label %173

173:                                              ; preds = %switch.lookup2090, %164, %.fold.split1368
  %174 = phi i64 [ 8, %164 ], [ 4, %.fold.split1368 ], [ %switch.load2095, %switch.lookup2090 ]
  %175 = mul i64 %174, %110
  %176 = call noalias ptr @malloc(i64 noundef %175) #9
  br label %177

177:                                              ; preds = %173, %163
  %.41208 = phi ptr [ %166, %173 ], [ %.21206, %163 ]
  %.41187 = phi ptr [ %176, %173 ], [ %.21185, %163 ]
  %.41169 = phi i64 [ %110, %173 ], [ %.21167, %163 ]
  %178 = icmp ne ptr %.41187, null
  %179 = icmp ne ptr %.41208, null
  %or.cond13 = and i1 %179, %178
  %180 = icmp eq i32 %.2, 0
  %or.cond15 = select i1 %or.cond13, i1 %180, i1 false
  br i1 %or.cond15, label %181, label %213

181:                                              ; preds = %177
  %182 = uitofp i64 %110 to double
  %183 = fdiv double 1.000000e+00, %182
  %184 = fadd double %183, %183
  %185 = trunc i64 %109 to i32
  %186 = icmp sgt i32 %185, 0
  br i1 %186, label %.preheader1466.lr.ph, label %._crit_edge1491

.preheader1466.lr.ph:                             ; preds = %181
  %187 = trunc i64 %107 to i32
  %188 = icmp sgt i32 %187, 0
  %189 = sitofp i32 %187 to double
  %wide.trip.count1632 = and i64 %109, 2147483647
  %wide.trip.count1622 = and i64 %107, 2147483647
  %min.iters.check1867 = icmp ult i64 %wide.trip.count1622, 4
  %n.mod.vf1869 = and i64 %107, 3
  %n.vec1870 = sub nsw i64 %wide.trip.count1622, %n.mod.vf1869
  %broadcast.splatinsert1878 = insertelement <4 x double> poison, double %184, i64 0
  %broadcast.splat1879 = shufflevector <4 x double> %broadcast.splatinsert1878, <4 x double> poison, <4 x i32> zeroinitializer
  %cmp.n1881 = icmp eq i64 %n.mod.vf1869, 0
  br label %.preheader1466

.preheader1466:                                   ; preds = %.preheader1466.lr.ph, %._crit_edge1489
  %indvars.iv1629 = phi i64 [ 0, %.preheader1466.lr.ph ], [ %indvars.iv.next1630, %._crit_edge1489 ]
  br i1 %188, label %.lr.ph1485, label %._crit_edge1489

.lr.ph1485:                                       ; preds = %.preheader1466
  %190 = mul i64 %indvars.iv1629, %107
  %191 = trunc nuw nsw i64 %indvars.iv1629 to i32
  %192 = uitofp nneg i32 %191 to double
  %193 = call double @llvm.fmuladd.f64(double %192, double %189, double 1.000000e+00)
  %194 = and i64 %190, 4294967295
  br i1 %min.iters.check1867, label %scalar.ph1866.preheader, label %vector.ph1868

vector.ph1868:                                    ; preds = %.lr.ph1485
  %broadcast.splatinsert1876 = insertelement <4 x double> poison, double %193, i64 0
  %broadcast.splat1877 = shufflevector <4 x double> %broadcast.splatinsert1876, <4 x double> poison, <4 x i32> zeroinitializer
  br label %vector.body1872

vector.body1872:                                  ; preds = %vector.body1872, %vector.ph1868
  %index1873 = phi i64 [ 0, %vector.ph1868 ], [ %index.next1880, %vector.body1872 ]
  %vec.ind1874 = phi <4 x i32> [ <i32 0, i32 1, i32 2, i32 3>, %vector.ph1868 ], [ %vec.ind.next1875, %vector.body1872 ]
  %195 = add nuw nsw i64 %index1873, %194
  %196 = uitofp <4 x i32> %vec.ind1874 to <4 x double>
  %197 = fadd <4 x double> %broadcast.splat1877, %196
  %198 = fmul <4 x double> %broadcast.splat1879, %197
  %199 = fptrunc <4 x double> %198 to <4 x float>
  %200 = getelementptr inbounds float, ptr %.41187, i64 %195
  store <4 x float> %199, ptr %200, align 4, !tbaa !11
  %index.next1880 = add nuw i64 %index1873, 4
  %vec.ind.next1875 = add <4 x i32> %vec.ind1874, <i32 4, i32 4, i32 4, i32 4>
  %201 = icmp eq i64 %index.next1880, %n.vec1870
  br i1 %201, label %middle.block1865, label %vector.body1872, !llvm.loop !25

middle.block1865:                                 ; preds = %vector.body1872
  br i1 %cmp.n1881, label %._crit_edge1489, label %scalar.ph1866.preheader

scalar.ph1866.preheader:                          ; preds = %middle.block1865, %.lr.ph1485
  %indvars.iv1619.ph = phi i64 [ 0, %.lr.ph1485 ], [ %n.vec1870, %middle.block1865 ]
  br label %scalar.ph1866

scalar.ph1866:                                    ; preds = %scalar.ph1866.preheader, %scalar.ph1866
  %indvars.iv1619 = phi i64 [ %indvars.iv.next1620, %scalar.ph1866 ], [ %indvars.iv1619.ph, %scalar.ph1866.preheader ]
  %202 = add nuw nsw i64 %indvars.iv1619, %194
  %203 = trunc nuw nsw i64 %indvars.iv1619 to i32
  %204 = uitofp nneg i32 %203 to double
  %205 = fadd double %193, %204
  %206 = fmul double %184, %205
  %207 = fptrunc double %206 to float
  %208 = getelementptr inbounds float, ptr %.41187, i64 %202
  store float %207, ptr %208, align 4, !tbaa !11
  %indvars.iv.next1620 = add nuw nsw i64 %indvars.iv1619, 1
  %exitcond1623.not = icmp eq i64 %indvars.iv.next1620, %wide.trip.count1622
  br i1 %exitcond1623.not, label %._crit_edge1489, label %scalar.ph1866, !llvm.loop !26

._crit_edge1489:                                  ; preds = %scalar.ph1866, %middle.block1865, %.preheader1466
  %indvars.iv.next1630 = add nuw nsw i64 %indvars.iv1629, 1
  %exitcond1633.not = icmp eq i64 %indvars.iv.next1630, %wide.trip.count1632
  br i1 %exitcond1633.not, label %._crit_edge1491, label %.preheader1466, !llvm.loop !27

._crit_edge1491:                                  ; preds = %._crit_edge1489, %181
  call void @libxsmm_rnaz_convert_fp32_bf16(ptr noundef nonnull %.41187, ptr noundef nonnull %.41208, i64 noundef %110) #8
  call void @libxsmm_convert_bf16_f32(ptr noundef nonnull %.41208, ptr noundef nonnull %.41187, i64 noundef %110) #8
  %209 = load i64, ptr %3, align 8, !tbaa !9
  %210 = load i64, ptr %4, align 8, !tbaa !9
  %211 = load i32, ptr %1, align 4, !tbaa !5
  %212 = call i32 @libxsmm_mhd_write(ptr noundef nonnull @.str.3, ptr noundef null, ptr noundef nonnull %2, ptr noundef null, i64 noundef %209, i64 noundef %210, i32 noundef %211, ptr noundef null, ptr noundef nonnull %.41187, ptr noundef null, ptr noundef null, ptr noundef null, i64 noundef 0) #8
  br label %213

213:                                              ; preds = %._crit_edge1491, %177, %._crit_edge1499, %126
  %.51209 = phi ptr [ %.31207, %126 ], [ %.31207, %._crit_edge1499 ], [ %.41208, %177 ], [ %.41208, %._crit_edge1491 ]
  %.51188 = phi ptr [ %.31186, %126 ], [ %.31186, %._crit_edge1499 ], [ %.41187, %177 ], [ %.41187, %._crit_edge1491 ]
  %.51170 = phi i64 [ %.31168, %126 ], [ %.31168, %._crit_edge1499 ], [ %.41169, %177 ], [ %.41169, %._crit_edge1491 ]
  %.5 = phi i32 [ 1, %126 ], [ %162, %._crit_edge1499 ], [ 1, %177 ], [ %212, %._crit_edge1491 ]
  %214 = call i32 @libxsmm_mhd_read_header(ptr noundef nonnull @.str.4, i64 noundef 1024, ptr noundef nonnull %6, ptr noundef nonnull %3, ptr noundef nonnull %2, ptr noundef nonnull %4, ptr noundef nonnull %1, ptr noundef nonnull %5, ptr noundef null) #8
  %215 = icmp eq i32 %214, 0
  %216 = load i64, ptr %2, align 16, !tbaa !9
  %217 = getelementptr inbounds i8, ptr %2, i64 8
  %218 = load i64, ptr %217, align 8, !tbaa !9
  %219 = mul i64 %218, %216
  %220 = icmp ult i64 %.51170, %219
  br i1 %215, label %221, label %274

221:                                              ; preds = %213
  br i1 %220, label %222, label %235

222:                                              ; preds = %221
  call void @free(ptr noundef %.51209) #8
  call void @free(ptr noundef %.51188) #8
  %223 = shl i64 %219, 1
  %224 = call noalias ptr @malloc(i64 noundef %223) #9
  %225 = load i32, ptr %1, align 4
  switch i32 %225, label %226 [
    i32 0, label %231
    i32 1, label %.fold.split1369
  ]

226:                                              ; preds = %222
  %227 = and i32 %225, -2
  %switch.tableidx2097 = add i32 %227, -2
  %228 = icmp ult i32 %switch.tableidx2097, 11
  br i1 %228, label %switch.hole_check2098, label %229

229:                                              ; preds = %switch.hole_check2098, %226
  call void @__assert_fail(ptr noundef nonnull @.str.1, ptr noundef nonnull @.str.2, i32 noundef 130, ptr noundef nonnull @__PRETTY_FUNCTION__.main) #10
  unreachable

.fold.split1369:                                  ; preds = %222
  br label %231

switch.hole_check2098:                            ; preds = %226
  %switch.maskindex2100 = trunc nuw i32 %switch.tableidx2097 to i16
  %switch.shifted2101 = lshr i16 1365, %switch.maskindex2100
  %switch.lobit2102 = trunc i16 %switch.shifted2101 to i1
  br i1 %switch.lobit2102, label %switch.lookup2099, label %229

switch.lookup2099:                                ; preds = %switch.hole_check2098
  %230 = zext nneg i32 %switch.tableidx2097 to i64
  %switch.gep2103 = getelementptr inbounds [11 x i64], ptr @switch.table.main.13, i64 0, i64 %230
  %switch.load2104 = load i64, ptr %switch.gep2103, align 8
  br label %231

231:                                              ; preds = %switch.lookup2099, %222, %.fold.split1369
  %232 = phi i64 [ 8, %222 ], [ 4, %.fold.split1369 ], [ %switch.load2104, %switch.lookup2099 ]
  %233 = mul i64 %232, %219
  %234 = call noalias ptr @malloc(i64 noundef %233) #9
  br label %235

235:                                              ; preds = %231, %221
  %.61210 = phi ptr [ %224, %231 ], [ %.51209, %221 ]
  %.61189 = phi ptr [ %234, %231 ], [ %.51188, %221 ]
  %.61171 = phi i64 [ %219, %231 ], [ %.51170, %221 ]
  %236 = icmp ne ptr %.61189, null
  %237 = icmp ne ptr %.61210, null
  %or.cond17 = and i1 %237, %236
  %238 = icmp eq i32 %.5, 0
  %or.cond19 = select i1 %or.cond17, i1 %238, i1 false
  br i1 %or.cond19, label %239, label %326

239:                                              ; preds = %235
  %240 = uitofp i64 %219 to double
  %241 = fdiv double 1.000000e+00, %240
  %242 = fadd double %241, %241
  %243 = load i64, ptr %2, align 16, !tbaa !9
  %244 = load i64, ptr %217, align 8, !tbaa !9
  %245 = trunc i64 %244 to i32
  %246 = icmp sgt i32 %245, 0
  br i1 %246, label %.preheader1460.lr.ph, label %._crit_edge1515

.preheader1460.lr.ph:                             ; preds = %239
  %247 = trunc i64 %243 to i32
  %248 = icmp sgt i32 %247, 0
  %249 = sitofp i32 %247 to double
  %wide.trip.count1677 = and i64 %244, 2147483647
  %wide.trip.count1667 = and i64 %243, 2147483647
  %min.iters.check1918 = icmp ult i64 %wide.trip.count1667, 4
  %n.mod.vf1920 = and i64 %243, 3
  %n.vec1921 = sub nsw i64 %wide.trip.count1667, %n.mod.vf1920
  %broadcast.splatinsert1929 = insertelement <4 x double> poison, double %242, i64 0
  %broadcast.splat1930 = shufflevector <4 x double> %broadcast.splatinsert1929, <4 x double> poison, <4 x i32> zeroinitializer
  %cmp.n1932 = icmp eq i64 %n.mod.vf1920, 0
  br label %.preheader1460

.preheader1460:                                   ; preds = %.preheader1460.lr.ph, %._crit_edge1513
  %indvars.iv1674 = phi i64 [ 0, %.preheader1460.lr.ph ], [ %indvars.iv.next1675, %._crit_edge1513 ]
  br i1 %248, label %.lr.ph1509, label %._crit_edge1513

.lr.ph1509:                                       ; preds = %.preheader1460
  %250 = mul i64 %indvars.iv1674, %243
  %251 = trunc nuw nsw i64 %indvars.iv1674 to i32
  %252 = uitofp nneg i32 %251 to double
  %253 = call double @llvm.fmuladd.f64(double %252, double %249, double 1.000000e+00)
  %254 = and i64 %250, 4294967295
  br i1 %min.iters.check1918, label %scalar.ph1917.preheader, label %vector.ph1919

vector.ph1919:                                    ; preds = %.lr.ph1509
  %broadcast.splatinsert1927 = insertelement <4 x double> poison, double %253, i64 0
  %broadcast.splat1928 = shufflevector <4 x double> %broadcast.splatinsert1927, <4 x double> poison, <4 x i32> zeroinitializer
  br label %vector.body1923

vector.body1923:                                  ; preds = %vector.body1923, %vector.ph1919
  %index1924 = phi i64 [ 0, %vector.ph1919 ], [ %index.next1931, %vector.body1923 ]
  %vec.ind1925 = phi <4 x i32> [ <i32 0, i32 1, i32 2, i32 3>, %vector.ph1919 ], [ %vec.ind.next1926, %vector.body1923 ]
  %255 = add nuw nsw i64 %index1924, %254
  %256 = uitofp <4 x i32> %vec.ind1925 to <4 x double>
  %257 = fadd <4 x double> %broadcast.splat1928, %256
  %258 = fmul <4 x double> %broadcast.splat1930, %257
  %259 = fptrunc <4 x double> %258 to <4 x float>
  %260 = getelementptr inbounds float, ptr %.61189, i64 %255
  store <4 x float> %259, ptr %260, align 4, !tbaa !11
  %index.next1931 = add nuw i64 %index1924, 4
  %vec.ind.next1926 = add <4 x i32> %vec.ind1925, <i32 4, i32 4, i32 4, i32 4>
  %261 = icmp eq i64 %index.next1931, %n.vec1921
  br i1 %261, label %middle.block1916, label %vector.body1923, !llvm.loop !28

middle.block1916:                                 ; preds = %vector.body1923
  br i1 %cmp.n1932, label %._crit_edge1513, label %scalar.ph1917.preheader

scalar.ph1917.preheader:                          ; preds = %middle.block1916, %.lr.ph1509
  %indvars.iv1664.ph = phi i64 [ 0, %.lr.ph1509 ], [ %n.vec1921, %middle.block1916 ]
  br label %scalar.ph1917

scalar.ph1917:                                    ; preds = %scalar.ph1917.preheader, %scalar.ph1917
  %indvars.iv1664 = phi i64 [ %indvars.iv.next1665, %scalar.ph1917 ], [ %indvars.iv1664.ph, %scalar.ph1917.preheader ]
  %262 = add nuw nsw i64 %indvars.iv1664, %254
  %263 = trunc nuw nsw i64 %indvars.iv1664 to i32
  %264 = uitofp nneg i32 %263 to double
  %265 = fadd double %253, %264
  %266 = fmul double %242, %265
  %267 = fptrunc double %266 to float
  %268 = getelementptr inbounds float, ptr %.61189, i64 %262
  store float %267, ptr %268, align 4, !tbaa !11
  %indvars.iv.next1665 = add nuw nsw i64 %indvars.iv1664, 1
  %exitcond1668.not = icmp eq i64 %indvars.iv.next1665, %wide.trip.count1667
  br i1 %exitcond1668.not, label %._crit_edge1513, label %scalar.ph1917, !llvm.loop !29

._crit_edge1513:                                  ; preds = %scalar.ph1917, %middle.block1916, %.preheader1460
  %indvars.iv.next1675 = add nuw nsw i64 %indvars.iv1674, 1
  %exitcond1678.not = icmp eq i64 %indvars.iv.next1675, %wide.trip.count1677
  br i1 %exitcond1678.not, label %._crit_edge1515, label %.preheader1460, !llvm.loop !30

._crit_edge1515:                                  ; preds = %._crit_edge1513, %239
  call void @libxsmm_rne_convert_fp32_bf16(ptr noundef nonnull %.61189, ptr noundef nonnull %.61210, i64 noundef %219) #8
  call void @libxsmm_convert_bf16_f32(ptr noundef nonnull %.61210, ptr noundef nonnull %.61189, i64 noundef %219) #8
  %269 = load i64, ptr %3, align 8, !tbaa !9
  %270 = load i64, ptr %4, align 8, !tbaa !9
  %271 = load i64, ptr %5, align 8, !tbaa !9
  %272 = load i32, ptr %1, align 4, !tbaa !5
  %273 = call i32 @libxsmm_mhd_read(ptr noundef nonnull %6, ptr noundef null, ptr noundef nonnull %2, ptr noundef null, i64 noundef %269, i64 noundef %270, i64 noundef %271, i32 noundef %272, ptr noundef null, ptr noundef nonnull %.61189, ptr noundef nonnull @libxsmm_mhd_element_comparison, ptr noundef null, i64 noundef 0) #8
  br label %326

274:                                              ; preds = %213
  br i1 %220, label %275, label %288

275:                                              ; preds = %274
  call void @free(ptr noundef %.51209) #8
  call void @free(ptr noundef %.51188) #8
  %276 = shl i64 %219, 1
  %277 = call noalias ptr @malloc(i64 noundef %276) #9
  %278 = load i32, ptr %1, align 4
  switch i32 %278, label %279 [
    i32 0, label %284
    i32 1, label %.fold.split1370
  ]

279:                                              ; preds = %275
  %280 = and i32 %278, -2
  %switch.tableidx2106 = add i32 %280, -2
  %281 = icmp ult i32 %switch.tableidx2106, 11
  br i1 %281, label %switch.hole_check2107, label %282

282:                                              ; preds = %switch.hole_check2107, %279
  call void @__assert_fail(ptr noundef nonnull @.str.1, ptr noundef nonnull @.str.2, i32 noundef 149, ptr noundef nonnull @__PRETTY_FUNCTION__.main) #10
  unreachable

.fold.split1370:                                  ; preds = %275
  br label %284

switch.hole_check2107:                            ; preds = %279
  %switch.maskindex2109 = trunc nuw i32 %switch.tableidx2106 to i16
  %switch.shifted2110 = lshr i16 1365, %switch.maskindex2109
  %switch.lobit2111 = trunc i16 %switch.shifted2110 to i1
  br i1 %switch.lobit2111, label %switch.lookup2108, label %282

switch.lookup2108:                                ; preds = %switch.hole_check2107
  %283 = zext nneg i32 %switch.tableidx2106 to i64
  %switch.gep2112 = getelementptr inbounds [11 x i64], ptr @switch.table.main.13, i64 0, i64 %283
  %switch.load2113 = load i64, ptr %switch.gep2112, align 8
  br label %284

284:                                              ; preds = %switch.lookup2108, %275, %.fold.split1370
  %285 = phi i64 [ 8, %275 ], [ 4, %.fold.split1370 ], [ %switch.load2113, %switch.lookup2108 ]
  %286 = mul i64 %285, %219
  %287 = call noalias ptr @malloc(i64 noundef %286) #9
  br label %288

288:                                              ; preds = %284, %274
  %.71211 = phi ptr [ %277, %284 ], [ %.51209, %274 ]
  %.71190 = phi ptr [ %287, %284 ], [ %.51188, %274 ]
  %.71172 = phi i64 [ %219, %284 ], [ %.51170, %274 ]
  %289 = icmp ne ptr %.71190, null
  %290 = icmp ne ptr %.71211, null
  %or.cond21 = and i1 %290, %289
  %291 = icmp eq i32 %.5, 0
  %or.cond23 = select i1 %or.cond21, i1 %291, i1 false
  br i1 %or.cond23, label %292, label %326

292:                                              ; preds = %288
  %293 = uitofp i64 %219 to double
  %294 = fdiv double 1.000000e+00, %293
  %295 = fadd double %294, %294
  %296 = load i64, ptr %2, align 16, !tbaa !9
  %297 = load i64, ptr %217, align 8, !tbaa !9
  %298 = trunc i64 %297 to i32
  %299 = icmp sgt i32 %298, 0
  br i1 %299, label %.preheader1462.lr.ph, label %._crit_edge1507

.preheader1462.lr.ph:                             ; preds = %292
  %300 = trunc i64 %296 to i32
  %301 = icmp sgt i32 %300, 0
  %302 = sitofp i32 %300 to double
  %wide.trip.count1662 = and i64 %297, 2147483647
  %wide.trip.count1652 = and i64 %296, 2147483647
  %min.iters.check1901 = icmp ult i64 %wide.trip.count1652, 4
  %n.mod.vf1903 = and i64 %296, 3
  %n.vec1904 = sub nsw i64 %wide.trip.count1652, %n.mod.vf1903
  %broadcast.splatinsert1912 = insertelement <4 x double> poison, double %295, i64 0
  %broadcast.splat1913 = shufflevector <4 x double> %broadcast.splatinsert1912, <4 x double> poison, <4 x i32> zeroinitializer
  %cmp.n1915 = icmp eq i64 %n.mod.vf1903, 0
  br label %.preheader1462

.preheader1462:                                   ; preds = %.preheader1462.lr.ph, %._crit_edge1505
  %indvars.iv1659 = phi i64 [ 0, %.preheader1462.lr.ph ], [ %indvars.iv.next1660, %._crit_edge1505 ]
  br i1 %301, label %.lr.ph1501, label %._crit_edge1505

.lr.ph1501:                                       ; preds = %.preheader1462
  %303 = mul i64 %indvars.iv1659, %296
  %304 = trunc nuw nsw i64 %indvars.iv1659 to i32
  %305 = uitofp nneg i32 %304 to double
  %306 = call double @llvm.fmuladd.f64(double %305, double %302, double 1.000000e+00)
  %307 = and i64 %303, 4294967295
  br i1 %min.iters.check1901, label %scalar.ph1900.preheader, label %vector.ph1902

vector.ph1902:                                    ; preds = %.lr.ph1501
  %broadcast.splatinsert1910 = insertelement <4 x double> poison, double %306, i64 0
  %broadcast.splat1911 = shufflevector <4 x double> %broadcast.splatinsert1910, <4 x double> poison, <4 x i32> zeroinitializer
  br label %vector.body1906

vector.body1906:                                  ; preds = %vector.body1906, %vector.ph1902
  %index1907 = phi i64 [ 0, %vector.ph1902 ], [ %index.next1914, %vector.body1906 ]
  %vec.ind1908 = phi <4 x i32> [ <i32 0, i32 1, i32 2, i32 3>, %vector.ph1902 ], [ %vec.ind.next1909, %vector.body1906 ]
  %308 = add nuw nsw i64 %index1907, %307
  %309 = uitofp <4 x i32> %vec.ind1908 to <4 x double>
  %310 = fadd <4 x double> %broadcast.splat1911, %309
  %311 = fmul <4 x double> %broadcast.splat1913, %310
  %312 = fptrunc <4 x double> %311 to <4 x float>
  %313 = getelementptr inbounds float, ptr %.71190, i64 %308
  store <4 x float> %312, ptr %313, align 4, !tbaa !11
  %index.next1914 = add nuw i64 %index1907, 4
  %vec.ind.next1909 = add <4 x i32> %vec.ind1908, <i32 4, i32 4, i32 4, i32 4>
  %314 = icmp eq i64 %index.next1914, %n.vec1904
  br i1 %314, label %middle.block1899, label %vector.body1906, !llvm.loop !31

middle.block1899:                                 ; preds = %vector.body1906
  br i1 %cmp.n1915, label %._crit_edge1505, label %scalar.ph1900.preheader

scalar.ph1900.preheader:                          ; preds = %middle.block1899, %.lr.ph1501
  %indvars.iv1649.ph = phi i64 [ 0, %.lr.ph1501 ], [ %n.vec1904, %middle.block1899 ]
  br label %scalar.ph1900

scalar.ph1900:                                    ; preds = %scalar.ph1900.preheader, %scalar.ph1900
  %indvars.iv1649 = phi i64 [ %indvars.iv.next1650, %scalar.ph1900 ], [ %indvars.iv1649.ph, %scalar.ph1900.preheader ]
  %315 = add nuw nsw i64 %indvars.iv1649, %307
  %316 = trunc nuw nsw i64 %indvars.iv1649 to i32
  %317 = uitofp nneg i32 %316 to double
  %318 = fadd double %306, %317
  %319 = fmul double %295, %318
  %320 = fptrunc double %319 to float
  %321 = getelementptr inbounds float, ptr %.71190, i64 %315
  store float %320, ptr %321, align 4, !tbaa !11
  %indvars.iv.next1650 = add nuw nsw i64 %indvars.iv1649, 1
  %exitcond1653.not = icmp eq i64 %indvars.iv.next1650, %wide.trip.count1652
  br i1 %exitcond1653.not, label %._crit_edge1505, label %scalar.ph1900, !llvm.loop !32

._crit_edge1505:                                  ; preds = %scalar.ph1900, %middle.block1899, %.preheader1462
  %indvars.iv.next1660 = add nuw nsw i64 %indvars.iv1659, 1
  %exitcond1663.not = icmp eq i64 %indvars.iv.next1660, %wide.trip.count1662
  br i1 %exitcond1663.not, label %._crit_edge1507, label %.preheader1462, !llvm.loop !33

._crit_edge1507:                                  ; preds = %._crit_edge1505, %292
  call void @libxsmm_rne_convert_fp32_bf16(ptr noundef nonnull %.71190, ptr noundef nonnull %.71211, i64 noundef %219) #8
  call void @libxsmm_convert_bf16_f32(ptr noundef nonnull %.71211, ptr noundef nonnull %.71190, i64 noundef %219) #8
  %322 = load i64, ptr %3, align 8, !tbaa !9
  %323 = load i64, ptr %4, align 8, !tbaa !9
  %324 = load i32, ptr %1, align 4, !tbaa !5
  %325 = call i32 @libxsmm_mhd_write(ptr noundef nonnull @.str.4, ptr noundef null, ptr noundef nonnull %2, ptr noundef null, i64 noundef %322, i64 noundef %323, i32 noundef %324, ptr noundef null, ptr noundef nonnull %.71190, ptr noundef null, ptr noundef null, ptr noundef null, i64 noundef 0) #8
  br label %326

326:                                              ; preds = %._crit_edge1507, %288, %._crit_edge1515, %235
  %.81212 = phi ptr [ %.61210, %235 ], [ %.61210, %._crit_edge1515 ], [ %.71211, %288 ], [ %.71211, %._crit_edge1507 ]
  %.81191 = phi ptr [ %.61189, %235 ], [ %.61189, %._crit_edge1515 ], [ %.71190, %288 ], [ %.71190, %._crit_edge1507 ]
  %.81173 = phi i64 [ %.61171, %235 ], [ %.61171, %._crit_edge1515 ], [ %.71172, %288 ], [ %.71172, %._crit_edge1507 ]
  %.8 = phi i32 [ 1, %235 ], [ %273, %._crit_edge1515 ], [ 1, %288 ], [ %325, %._crit_edge1507 ]
  %327 = call i32 @libxsmm_mhd_read_header(ptr noundef nonnull @.str.5, i64 noundef 1024, ptr noundef nonnull %6, ptr noundef nonnull %3, ptr noundef nonnull %2, ptr noundef nonnull %4, ptr noundef nonnull %1, ptr noundef nonnull %5, ptr noundef null) #8
  %328 = icmp eq i32 %327, 0
  %329 = load i64, ptr %2, align 16, !tbaa !9
  %330 = getelementptr inbounds i8, ptr %2, i64 8
  %331 = load i64, ptr %330, align 8, !tbaa !9
  %332 = mul i64 %331, %329
  %333 = icmp ult i64 %.81173, %332
  br i1 %328, label %334, label %387

334:                                              ; preds = %326
  br i1 %333, label %335, label %348

335:                                              ; preds = %334
  call void @free(ptr noundef %.81212) #8
  call void @free(ptr noundef %.81191) #8
  %336 = shl i64 %332, 1
  %337 = call noalias ptr @malloc(i64 noundef %336) #9
  %338 = load i32, ptr %1, align 4
  switch i32 %338, label %339 [
    i32 0, label %344
    i32 1, label %.fold.split1371
  ]

339:                                              ; preds = %335
  %340 = and i32 %338, -2
  %switch.tableidx2115 = add i32 %340, -2
  %341 = icmp ult i32 %switch.tableidx2115, 11
  br i1 %341, label %switch.hole_check2116, label %342

342:                                              ; preds = %switch.hole_check2116, %339
  call void @__assert_fail(ptr noundef nonnull @.str.1, ptr noundef nonnull @.str.2, i32 noundef 171, ptr noundef nonnull @__PRETTY_FUNCTION__.main) #10
  unreachable

.fold.split1371:                                  ; preds = %335
  br label %344

switch.hole_check2116:                            ; preds = %339
  %switch.maskindex2118 = trunc nuw i32 %switch.tableidx2115 to i16
  %switch.shifted2119 = lshr i16 1365, %switch.maskindex2118
  %switch.lobit2120 = trunc i16 %switch.shifted2119 to i1
  br i1 %switch.lobit2120, label %switch.lookup2117, label %342

switch.lookup2117:                                ; preds = %switch.hole_check2116
  %343 = zext nneg i32 %switch.tableidx2115 to i64
  %switch.gep2121 = getelementptr inbounds [11 x i64], ptr @switch.table.main.13, i64 0, i64 %343
  %switch.load2122 = load i64, ptr %switch.gep2121, align 8
  br label %344

344:                                              ; preds = %switch.lookup2117, %335, %.fold.split1371
  %345 = phi i64 [ 8, %335 ], [ 4, %.fold.split1371 ], [ %switch.load2122, %switch.lookup2117 ]
  %346 = mul i64 %345, %332
  %347 = call noalias ptr @malloc(i64 noundef %346) #9
  br label %348

348:                                              ; preds = %344, %334
  %.91213 = phi ptr [ %337, %344 ], [ %.81212, %334 ]
  %.91192 = phi ptr [ %347, %344 ], [ %.81191, %334 ]
  %.91174 = phi i64 [ %332, %344 ], [ %.81173, %334 ]
  %349 = icmp ne ptr %.91192, null
  %350 = icmp ne ptr %.91213, null
  %or.cond25 = and i1 %350, %349
  %351 = icmp eq i32 %.8, 0
  %or.cond27 = select i1 %or.cond25, i1 %351, i1 false
  br i1 %or.cond27, label %352, label %439

352:                                              ; preds = %348
  %353 = uitofp i64 %332 to double
  %354 = fdiv double 1.000000e+00, %353
  %355 = fadd double %354, %354
  %356 = load i64, ptr %2, align 16, !tbaa !9
  %357 = load i64, ptr %330, align 8, !tbaa !9
  %358 = trunc i64 %357 to i32
  %359 = icmp sgt i32 %358, 0
  br i1 %359, label %.preheader1456.lr.ph, label %._crit_edge1531

.preheader1456.lr.ph:                             ; preds = %352
  %360 = trunc i64 %356 to i32
  %361 = icmp sgt i32 %360, 0
  %362 = sitofp i32 %360 to double
  %wide.trip.count1707 = and i64 %357, 2147483647
  %wide.trip.count1697 = and i64 %356, 2147483647
  %min.iters.check1952 = icmp ult i64 %wide.trip.count1697, 4
  %n.mod.vf1954 = and i64 %356, 3
  %n.vec1955 = sub nsw i64 %wide.trip.count1697, %n.mod.vf1954
  %broadcast.splatinsert1963 = insertelement <4 x double> poison, double %355, i64 0
  %broadcast.splat1964 = shufflevector <4 x double> %broadcast.splatinsert1963, <4 x double> poison, <4 x i32> zeroinitializer
  %cmp.n1966 = icmp eq i64 %n.mod.vf1954, 0
  br label %.preheader1456

.preheader1456:                                   ; preds = %.preheader1456.lr.ph, %._crit_edge1529
  %indvars.iv1704 = phi i64 [ 0, %.preheader1456.lr.ph ], [ %indvars.iv.next1705, %._crit_edge1529 ]
  br i1 %361, label %.lr.ph1525, label %._crit_edge1529

.lr.ph1525:                                       ; preds = %.preheader1456
  %363 = mul i64 %indvars.iv1704, %356
  %364 = trunc nuw nsw i64 %indvars.iv1704 to i32
  %365 = uitofp nneg i32 %364 to double
  %366 = call double @llvm.fmuladd.f64(double %365, double %362, double 1.000000e+00)
  %367 = and i64 %363, 4294967295
  br i1 %min.iters.check1952, label %scalar.ph1951.preheader, label %vector.ph1953

vector.ph1953:                                    ; preds = %.lr.ph1525
  %broadcast.splatinsert1961 = insertelement <4 x double> poison, double %366, i64 0
  %broadcast.splat1962 = shufflevector <4 x double> %broadcast.splatinsert1961, <4 x double> poison, <4 x i32> zeroinitializer
  br label %vector.body1957

vector.body1957:                                  ; preds = %vector.body1957, %vector.ph1953
  %index1958 = phi i64 [ 0, %vector.ph1953 ], [ %index.next1965, %vector.body1957 ]
  %vec.ind1959 = phi <4 x i32> [ <i32 0, i32 1, i32 2, i32 3>, %vector.ph1953 ], [ %vec.ind.next1960, %vector.body1957 ]
  %368 = add nuw nsw i64 %index1958, %367
  %369 = uitofp <4 x i32> %vec.ind1959 to <4 x double>
  %370 = fadd <4 x double> %broadcast.splat1962, %369
  %371 = fmul <4 x double> %broadcast.splat1964, %370
  %372 = fptrunc <4 x double> %371 to <4 x float>
  %373 = getelementptr inbounds float, ptr %.91192, i64 %368
  store <4 x float> %372, ptr %373, align 4, !tbaa !11
  %index.next1965 = add nuw i64 %index1958, 4
  %vec.ind.next1960 = add <4 x i32> %vec.ind1959, <i32 4, i32 4, i32 4, i32 4>
  %374 = icmp eq i64 %index.next1965, %n.vec1955
  br i1 %374, label %middle.block1950, label %vector.body1957, !llvm.loop !34

middle.block1950:                                 ; preds = %vector.body1957
  br i1 %cmp.n1966, label %._crit_edge1529, label %scalar.ph1951.preheader

scalar.ph1951.preheader:                          ; preds = %middle.block1950, %.lr.ph1525
  %indvars.iv1694.ph = phi i64 [ 0, %.lr.ph1525 ], [ %n.vec1955, %middle.block1950 ]
  br label %scalar.ph1951

scalar.ph1951:                                    ; preds = %scalar.ph1951.preheader, %scalar.ph1951
  %indvars.iv1694 = phi i64 [ %indvars.iv.next1695, %scalar.ph1951 ], [ %indvars.iv1694.ph, %scalar.ph1951.preheader ]
  %375 = add nuw nsw i64 %indvars.iv1694, %367
  %376 = trunc nuw nsw i64 %indvars.iv1694 to i32
  %377 = uitofp nneg i32 %376 to double
  %378 = fadd double %366, %377
  %379 = fmul double %355, %378
  %380 = fptrunc double %379 to float
  %381 = getelementptr inbounds float, ptr %.91192, i64 %375
  store float %380, ptr %381, align 4, !tbaa !11
  %indvars.iv.next1695 = add nuw nsw i64 %indvars.iv1694, 1
  %exitcond1698.not = icmp eq i64 %indvars.iv.next1695, %wide.trip.count1697
  br i1 %exitcond1698.not, label %._crit_edge1529, label %scalar.ph1951, !llvm.loop !35

._crit_edge1529:                                  ; preds = %scalar.ph1951, %middle.block1950, %.preheader1456
  %indvars.iv.next1705 = add nuw nsw i64 %indvars.iv1704, 1
  %exitcond1708.not = icmp eq i64 %indvars.iv.next1705, %wide.trip.count1707
  br i1 %exitcond1708.not, label %._crit_edge1531, label %.preheader1456, !llvm.loop !36

._crit_edge1531:                                  ; preds = %._crit_edge1529, %352
  call void @libxsmm_rne_convert_fp32_f16(ptr noundef nonnull %.91192, ptr noundef nonnull %.91213, i64 noundef %332) #8
  call void @libxsmm_convert_f16_f32(ptr noundef nonnull %.91213, ptr noundef nonnull %.91192, i64 noundef %332) #8
  %382 = load i64, ptr %3, align 8, !tbaa !9
  %383 = load i64, ptr %4, align 8, !tbaa !9
  %384 = load i64, ptr %5, align 8, !tbaa !9
  %385 = load i32, ptr %1, align 4, !tbaa !5
  %386 = call i32 @libxsmm_mhd_read(ptr noundef nonnull %6, ptr noundef null, ptr noundef nonnull %2, ptr noundef null, i64 noundef %382, i64 noundef %383, i64 noundef %384, i32 noundef %385, ptr noundef null, ptr noundef nonnull %.91192, ptr noundef nonnull @libxsmm_mhd_element_comparison, ptr noundef null, i64 noundef 0) #8
  br label %439

387:                                              ; preds = %326
  br i1 %333, label %388, label %401

388:                                              ; preds = %387
  call void @free(ptr noundef %.81212) #8
  call void @free(ptr noundef %.81191) #8
  %389 = shl i64 %332, 1
  %390 = call noalias ptr @malloc(i64 noundef %389) #9
  %391 = load i32, ptr %1, align 4
  switch i32 %391, label %392 [
    i32 0, label %397
    i32 1, label %.fold.split1372
  ]

392:                                              ; preds = %388
  %393 = and i32 %391, -2
  %switch.tableidx2124 = add i32 %393, -2
  %394 = icmp ult i32 %switch.tableidx2124, 11
  br i1 %394, label %switch.hole_check2125, label %395

395:                                              ; preds = %switch.hole_check2125, %392
  call void @__assert_fail(ptr noundef nonnull @.str.1, ptr noundef nonnull @.str.2, i32 noundef 190, ptr noundef nonnull @__PRETTY_FUNCTION__.main) #10
  unreachable

.fold.split1372:                                  ; preds = %388
  br label %397

switch.hole_check2125:                            ; preds = %392
  %switch.maskindex2127 = trunc nuw i32 %switch.tableidx2124 to i16
  %switch.shifted2128 = lshr i16 1365, %switch.maskindex2127
  %switch.lobit2129 = trunc i16 %switch.shifted2128 to i1
  br i1 %switch.lobit2129, label %switch.lookup2126, label %395

switch.lookup2126:                                ; preds = %switch.hole_check2125
  %396 = zext nneg i32 %switch.tableidx2124 to i64
  %switch.gep2130 = getelementptr inbounds [11 x i64], ptr @switch.table.main.13, i64 0, i64 %396
  %switch.load2131 = load i64, ptr %switch.gep2130, align 8
  br label %397

397:                                              ; preds = %switch.lookup2126, %388, %.fold.split1372
  %398 = phi i64 [ 8, %388 ], [ 4, %.fold.split1372 ], [ %switch.load2131, %switch.lookup2126 ]
  %399 = mul i64 %398, %332
  %400 = call noalias ptr @malloc(i64 noundef %399) #9
  br label %401

401:                                              ; preds = %397, %387
  %.101214 = phi ptr [ %390, %397 ], [ %.81212, %387 ]
  %.101193 = phi ptr [ %400, %397 ], [ %.81191, %387 ]
  %.101175 = phi i64 [ %332, %397 ], [ %.81173, %387 ]
  %402 = icmp ne ptr %.101193, null
  %403 = icmp ne ptr %.101214, null
  %or.cond29 = and i1 %403, %402
  %404 = icmp eq i32 %.8, 0
  %or.cond31 = select i1 %or.cond29, i1 %404, i1 false
  br i1 %or.cond31, label %405, label %439

405:                                              ; preds = %401
  %406 = uitofp i64 %332 to double
  %407 = fdiv double 1.000000e+00, %406
  %408 = fadd double %407, %407
  %409 = load i64, ptr %2, align 16, !tbaa !9
  %410 = load i64, ptr %330, align 8, !tbaa !9
  %411 = trunc i64 %410 to i32
  %412 = icmp sgt i32 %411, 0
  br i1 %412, label %.preheader1458.lr.ph, label %._crit_edge1523

.preheader1458.lr.ph:                             ; preds = %405
  %413 = trunc i64 %409 to i32
  %414 = icmp sgt i32 %413, 0
  %415 = sitofp i32 %413 to double
  %wide.trip.count1692 = and i64 %410, 2147483647
  %wide.trip.count1682 = and i64 %409, 2147483647
  %min.iters.check1935 = icmp ult i64 %wide.trip.count1682, 4
  %n.mod.vf1937 = and i64 %409, 3
  %n.vec1938 = sub nsw i64 %wide.trip.count1682, %n.mod.vf1937
  %broadcast.splatinsert1946 = insertelement <4 x double> poison, double %408, i64 0
  %broadcast.splat1947 = shufflevector <4 x double> %broadcast.splatinsert1946, <4 x double> poison, <4 x i32> zeroinitializer
  %cmp.n1949 = icmp eq i64 %n.mod.vf1937, 0
  br label %.preheader1458

.preheader1458:                                   ; preds = %.preheader1458.lr.ph, %._crit_edge1521
  %indvars.iv1689 = phi i64 [ 0, %.preheader1458.lr.ph ], [ %indvars.iv.next1690, %._crit_edge1521 ]
  br i1 %414, label %.lr.ph1517, label %._crit_edge1521

.lr.ph1517:                                       ; preds = %.preheader1458
  %416 = mul i64 %indvars.iv1689, %409
  %417 = trunc nuw nsw i64 %indvars.iv1689 to i32
  %418 = uitofp nneg i32 %417 to double
  %419 = call double @llvm.fmuladd.f64(double %418, double %415, double 1.000000e+00)
  %420 = and i64 %416, 4294967295
  br i1 %min.iters.check1935, label %scalar.ph1934.preheader, label %vector.ph1936

vector.ph1936:                                    ; preds = %.lr.ph1517
  %broadcast.splatinsert1944 = insertelement <4 x double> poison, double %419, i64 0
  %broadcast.splat1945 = shufflevector <4 x double> %broadcast.splatinsert1944, <4 x double> poison, <4 x i32> zeroinitializer
  br label %vector.body1940

vector.body1940:                                  ; preds = %vector.body1940, %vector.ph1936
  %index1941 = phi i64 [ 0, %vector.ph1936 ], [ %index.next1948, %vector.body1940 ]
  %vec.ind1942 = phi <4 x i32> [ <i32 0, i32 1, i32 2, i32 3>, %vector.ph1936 ], [ %vec.ind.next1943, %vector.body1940 ]
  %421 = add nuw nsw i64 %index1941, %420
  %422 = uitofp <4 x i32> %vec.ind1942 to <4 x double>
  %423 = fadd <4 x double> %broadcast.splat1945, %422
  %424 = fmul <4 x double> %broadcast.splat1947, %423
  %425 = fptrunc <4 x double> %424 to <4 x float>
  %426 = getelementptr inbounds float, ptr %.101193, i64 %421
  store <4 x float> %425, ptr %426, align 4, !tbaa !11
  %index.next1948 = add nuw i64 %index1941, 4
  %vec.ind.next1943 = add <4 x i32> %vec.ind1942, <i32 4, i32 4, i32 4, i32 4>
  %427 = icmp eq i64 %index.next1948, %n.vec1938
  br i1 %427, label %middle.block1933, label %vector.body1940, !llvm.loop !37

middle.block1933:                                 ; preds = %vector.body1940
  br i1 %cmp.n1949, label %._crit_edge1521, label %scalar.ph1934.preheader

scalar.ph1934.preheader:                          ; preds = %middle.block1933, %.lr.ph1517
  %indvars.iv1679.ph = phi i64 [ 0, %.lr.ph1517 ], [ %n.vec1938, %middle.block1933 ]
  br label %scalar.ph1934

scalar.ph1934:                                    ; preds = %scalar.ph1934.preheader, %scalar.ph1934
  %indvars.iv1679 = phi i64 [ %indvars.iv.next1680, %scalar.ph1934 ], [ %indvars.iv1679.ph, %scalar.ph1934.preheader ]
  %428 = add nuw nsw i64 %indvars.iv1679, %420
  %429 = trunc nuw nsw i64 %indvars.iv1679 to i32
  %430 = uitofp nneg i32 %429 to double
  %431 = fadd double %419, %430
  %432 = fmul double %408, %431
  %433 = fptrunc double %432 to float
  %434 = getelementptr inbounds float, ptr %.101193, i64 %428
  store float %433, ptr %434, align 4, !tbaa !11
  %indvars.iv.next1680 = add nuw nsw i64 %indvars.iv1679, 1
  %exitcond1683.not = icmp eq i64 %indvars.iv.next1680, %wide.trip.count1682
  br i1 %exitcond1683.not, label %._crit_edge1521, label %scalar.ph1934, !llvm.loop !38

._crit_edge1521:                                  ; preds = %scalar.ph1934, %middle.block1933, %.preheader1458
  %indvars.iv.next1690 = add nuw nsw i64 %indvars.iv1689, 1
  %exitcond1693.not = icmp eq i64 %indvars.iv.next1690, %wide.trip.count1692
  br i1 %exitcond1693.not, label %._crit_edge1523, label %.preheader1458, !llvm.loop !39

._crit_edge1523:                                  ; preds = %._crit_edge1521, %405
  call void @libxsmm_rne_convert_fp32_f16(ptr noundef nonnull %.101193, ptr noundef nonnull %.101214, i64 noundef %332) #8
  call void @libxsmm_convert_f16_f32(ptr noundef nonnull %.101214, ptr noundef nonnull %.101193, i64 noundef %332) #8
  %435 = load i64, ptr %3, align 8, !tbaa !9
  %436 = load i64, ptr %4, align 8, !tbaa !9
  %437 = load i32, ptr %1, align 4, !tbaa !5
  %438 = call i32 @libxsmm_mhd_write(ptr noundef nonnull @.str.5, ptr noundef null, ptr noundef nonnull %2, ptr noundef null, i64 noundef %435, i64 noundef %436, i32 noundef %437, ptr noundef null, ptr noundef nonnull %.101193, ptr noundef null, ptr noundef null, ptr noundef null, i64 noundef 0) #8
  br label %439

439:                                              ; preds = %._crit_edge1523, %401, %._crit_edge1531, %348
  %.111215 = phi ptr [ %.91213, %348 ], [ %.91213, %._crit_edge1531 ], [ %.101214, %401 ], [ %.101214, %._crit_edge1523 ]
  %.111194 = phi ptr [ %.91192, %348 ], [ %.91192, %._crit_edge1531 ], [ %.101193, %401 ], [ %.101193, %._crit_edge1523 ]
  %.111176 = phi i64 [ %.91174, %348 ], [ %.91174, %._crit_edge1531 ], [ %.101175, %401 ], [ %.101175, %._crit_edge1523 ]
  %.11 = phi i32 [ 1, %348 ], [ %386, %._crit_edge1531 ], [ 1, %401 ], [ %438, %._crit_edge1523 ]
  %440 = call i32 @libxsmm_mhd_read_header(ptr noundef nonnull @.str.6, i64 noundef 1024, ptr noundef nonnull %6, ptr noundef nonnull %3, ptr noundef nonnull %2, ptr noundef nonnull %4, ptr noundef nonnull %1, ptr noundef nonnull %5, ptr noundef null) #8
  %441 = icmp eq i32 %440, 0
  %442 = load i64, ptr %2, align 16, !tbaa !9
  %443 = getelementptr inbounds i8, ptr %2, i64 8
  %444 = load i64, ptr %443, align 8, !tbaa !9
  %445 = mul i64 %444, %442
  %446 = icmp ult i64 %.111176, %445
  br i1 %441, label %447, label %499

447:                                              ; preds = %439
  br i1 %446, label %448, label %460

448:                                              ; preds = %447
  call void @free(ptr noundef %.111215) #8
  call void @free(ptr noundef %.111194) #8
  %449 = call noalias ptr @malloc(i64 noundef %445) #9
  %450 = load i32, ptr %1, align 4
  switch i32 %450, label %451 [
    i32 0, label %456
    i32 1, label %.fold.split1373
  ]

451:                                              ; preds = %448
  %452 = and i32 %450, -2
  %switch.tableidx2133 = add i32 %452, -2
  %453 = icmp ult i32 %switch.tableidx2133, 11
  br i1 %453, label %switch.hole_check2134, label %454

454:                                              ; preds = %switch.hole_check2134, %451
  call void @__assert_fail(ptr noundef nonnull @.str.1, ptr noundef nonnull @.str.2, i32 noundef 212, ptr noundef nonnull @__PRETTY_FUNCTION__.main) #10
  unreachable

.fold.split1373:                                  ; preds = %448
  br label %456

switch.hole_check2134:                            ; preds = %451
  %switch.maskindex2136 = trunc nuw i32 %switch.tableidx2133 to i16
  %switch.shifted2137 = lshr i16 1365, %switch.maskindex2136
  %switch.lobit2138 = trunc i16 %switch.shifted2137 to i1
  br i1 %switch.lobit2138, label %switch.lookup2135, label %454

switch.lookup2135:                                ; preds = %switch.hole_check2134
  %455 = zext nneg i32 %switch.tableidx2133 to i64
  %switch.gep2139 = getelementptr inbounds [11 x i64], ptr @switch.table.main.13, i64 0, i64 %455
  %switch.load2140 = load i64, ptr %switch.gep2139, align 8
  br label %456

456:                                              ; preds = %switch.lookup2135, %448, %.fold.split1373
  %457 = phi i64 [ 8, %448 ], [ 4, %.fold.split1373 ], [ %switch.load2140, %switch.lookup2135 ]
  %458 = mul i64 %457, %445
  %459 = call noalias ptr @malloc(i64 noundef %458) #9
  br label %460

460:                                              ; preds = %456, %447
  %.121216 = phi ptr [ %449, %456 ], [ %.111215, %447 ]
  %.121195 = phi ptr [ %459, %456 ], [ %.111194, %447 ]
  %.121177 = phi i64 [ %445, %456 ], [ %.111176, %447 ]
  %461 = icmp ne ptr %.121195, null
  %462 = icmp ne ptr %.121216, null
  %or.cond33 = and i1 %462, %461
  %463 = icmp eq i32 %.11, 0
  %or.cond35 = select i1 %or.cond33, i1 %463, i1 false
  br i1 %or.cond35, label %464, label %550

464:                                              ; preds = %460
  %465 = uitofp i64 %445 to double
  %466 = fdiv double 1.000000e+00, %465
  %467 = fadd double %466, %466
  %468 = load i64, ptr %2, align 16, !tbaa !9
  %469 = load i64, ptr %443, align 8, !tbaa !9
  %470 = trunc i64 %469 to i32
  %471 = icmp sgt i32 %470, 0
  br i1 %471, label %.preheader1452.lr.ph, label %._crit_edge1547

.preheader1452.lr.ph:                             ; preds = %464
  %472 = trunc i64 %468 to i32
  %473 = icmp sgt i32 %472, 0
  %474 = sitofp i32 %472 to double
  %wide.trip.count1737 = and i64 %469, 2147483647
  %wide.trip.count1727 = and i64 %468, 2147483647
  %min.iters.check1986 = icmp ult i64 %wide.trip.count1727, 4
  %n.mod.vf1988 = and i64 %468, 3
  %n.vec1989 = sub nsw i64 %wide.trip.count1727, %n.mod.vf1988
  %broadcast.splatinsert1997 = insertelement <4 x double> poison, double %467, i64 0
  %broadcast.splat1998 = shufflevector <4 x double> %broadcast.splatinsert1997, <4 x double> poison, <4 x i32> zeroinitializer
  %cmp.n2000 = icmp eq i64 %n.mod.vf1988, 0
  br label %.preheader1452

.preheader1452:                                   ; preds = %.preheader1452.lr.ph, %._crit_edge1545
  %indvars.iv1734 = phi i64 [ 0, %.preheader1452.lr.ph ], [ %indvars.iv.next1735, %._crit_edge1545 ]
  br i1 %473, label %.lr.ph1541, label %._crit_edge1545

.lr.ph1541:                                       ; preds = %.preheader1452
  %475 = mul i64 %indvars.iv1734, %468
  %476 = trunc nuw nsw i64 %indvars.iv1734 to i32
  %477 = uitofp nneg i32 %476 to double
  %478 = call double @llvm.fmuladd.f64(double %477, double %474, double 1.000000e+00)
  %479 = and i64 %475, 4294967295
  br i1 %min.iters.check1986, label %scalar.ph1985.preheader, label %vector.ph1987

vector.ph1987:                                    ; preds = %.lr.ph1541
  %broadcast.splatinsert1995 = insertelement <4 x double> poison, double %478, i64 0
  %broadcast.splat1996 = shufflevector <4 x double> %broadcast.splatinsert1995, <4 x double> poison, <4 x i32> zeroinitializer
  br label %vector.body1991

vector.body1991:                                  ; preds = %vector.body1991, %vector.ph1987
  %index1992 = phi i64 [ 0, %vector.ph1987 ], [ %index.next1999, %vector.body1991 ]
  %vec.ind1993 = phi <4 x i32> [ <i32 0, i32 1, i32 2, i32 3>, %vector.ph1987 ], [ %vec.ind.next1994, %vector.body1991 ]
  %480 = add nuw nsw i64 %index1992, %479
  %481 = uitofp <4 x i32> %vec.ind1993 to <4 x double>
  %482 = fadd <4 x double> %broadcast.splat1996, %481
  %483 = fmul <4 x double> %broadcast.splat1998, %482
  %484 = fptrunc <4 x double> %483 to <4 x float>
  %485 = getelementptr inbounds float, ptr %.121195, i64 %480
  store <4 x float> %484, ptr %485, align 4, !tbaa !11
  %index.next1999 = add nuw i64 %index1992, 4
  %vec.ind.next1994 = add <4 x i32> %vec.ind1993, <i32 4, i32 4, i32 4, i32 4>
  %486 = icmp eq i64 %index.next1999, %n.vec1989
  br i1 %486, label %middle.block1984, label %vector.body1991, !llvm.loop !40

middle.block1984:                                 ; preds = %vector.body1991
  br i1 %cmp.n2000, label %._crit_edge1545, label %scalar.ph1985.preheader

scalar.ph1985.preheader:                          ; preds = %middle.block1984, %.lr.ph1541
  %indvars.iv1724.ph = phi i64 [ 0, %.lr.ph1541 ], [ %n.vec1989, %middle.block1984 ]
  br label %scalar.ph1985

scalar.ph1985:                                    ; preds = %scalar.ph1985.preheader, %scalar.ph1985
  %indvars.iv1724 = phi i64 [ %indvars.iv.next1725, %scalar.ph1985 ], [ %indvars.iv1724.ph, %scalar.ph1985.preheader ]
  %487 = add nuw nsw i64 %indvars.iv1724, %479
  %488 = trunc nuw nsw i64 %indvars.iv1724 to i32
  %489 = uitofp nneg i32 %488 to double
  %490 = fadd double %478, %489
  %491 = fmul double %467, %490
  %492 = fptrunc double %491 to float
  %493 = getelementptr inbounds float, ptr %.121195, i64 %487
  store float %492, ptr %493, align 4, !tbaa !11
  %indvars.iv.next1725 = add nuw nsw i64 %indvars.iv1724, 1
  %exitcond1728.not = icmp eq i64 %indvars.iv.next1725, %wide.trip.count1727
  br i1 %exitcond1728.not, label %._crit_edge1545, label %scalar.ph1985, !llvm.loop !41

._crit_edge1545:                                  ; preds = %scalar.ph1985, %middle.block1984, %.preheader1452
  %indvars.iv.next1735 = add nuw nsw i64 %indvars.iv1734, 1
  %exitcond1738.not = icmp eq i64 %indvars.iv.next1735, %wide.trip.count1737
  br i1 %exitcond1738.not, label %._crit_edge1547, label %.preheader1452, !llvm.loop !42

._crit_edge1547:                                  ; preds = %._crit_edge1545, %464
  call void @libxsmm_rne_convert_fp32_bf8(ptr noundef nonnull %.121195, ptr noundef nonnull %.121216, i64 noundef %445) #8
  call void @libxsmm_convert_bf8_f32(ptr noundef nonnull %.121216, ptr noundef nonnull %.121195, i64 noundef %445) #8
  %494 = load i64, ptr %3, align 8, !tbaa !9
  %495 = load i64, ptr %4, align 8, !tbaa !9
  %496 = load i64, ptr %5, align 8, !tbaa !9
  %497 = load i32, ptr %1, align 4, !tbaa !5
  %498 = call i32 @libxsmm_mhd_read(ptr noundef nonnull %6, ptr noundef null, ptr noundef nonnull %2, ptr noundef null, i64 noundef %494, i64 noundef %495, i64 noundef %496, i32 noundef %497, ptr noundef null, ptr noundef nonnull %.121195, ptr noundef nonnull @libxsmm_mhd_element_comparison, ptr noundef null, i64 noundef 0) #8
  br label %550

499:                                              ; preds = %439
  br i1 %446, label %500, label %512

500:                                              ; preds = %499
  call void @free(ptr noundef %.111215) #8
  call void @free(ptr noundef %.111194) #8
  %501 = call noalias ptr @malloc(i64 noundef %445) #9
  %502 = load i32, ptr %1, align 4
  switch i32 %502, label %503 [
    i32 0, label %508
    i32 1, label %.fold.split1374
  ]

503:                                              ; preds = %500
  %504 = and i32 %502, -2
  %switch.tableidx2142 = add i32 %504, -2
  %505 = icmp ult i32 %switch.tableidx2142, 11
  br i1 %505, label %switch.hole_check2143, label %506

506:                                              ; preds = %switch.hole_check2143, %503
  call void @__assert_fail(ptr noundef nonnull @.str.1, ptr noundef nonnull @.str.2, i32 noundef 231, ptr noundef nonnull @__PRETTY_FUNCTION__.main) #10
  unreachable

.fold.split1374:                                  ; preds = %500
  br label %508

switch.hole_check2143:                            ; preds = %503
  %switch.maskindex2145 = trunc nuw i32 %switch.tableidx2142 to i16
  %switch.shifted2146 = lshr i16 1365, %switch.maskindex2145
  %switch.lobit2147 = trunc i16 %switch.shifted2146 to i1
  br i1 %switch.lobit2147, label %switch.lookup2144, label %506

switch.lookup2144:                                ; preds = %switch.hole_check2143
  %507 = zext nneg i32 %switch.tableidx2142 to i64
  %switch.gep2148 = getelementptr inbounds [11 x i64], ptr @switch.table.main.13, i64 0, i64 %507
  %switch.load2149 = load i64, ptr %switch.gep2148, align 8
  br label %508

508:                                              ; preds = %switch.lookup2144, %500, %.fold.split1374
  %509 = phi i64 [ 8, %500 ], [ 4, %.fold.split1374 ], [ %switch.load2149, %switch.lookup2144 ]
  %510 = mul i64 %509, %445
  %511 = call noalias ptr @malloc(i64 noundef %510) #9
  br label %512

512:                                              ; preds = %508, %499
  %.131217 = phi ptr [ %501, %508 ], [ %.111215, %499 ]
  %.131196 = phi ptr [ %511, %508 ], [ %.111194, %499 ]
  %.131178 = phi i64 [ %445, %508 ], [ %.111176, %499 ]
  %513 = icmp ne ptr %.131196, null
  %514 = icmp ne ptr %.131217, null
  %or.cond37 = and i1 %514, %513
  %515 = icmp eq i32 %.11, 0
  %or.cond39 = select i1 %or.cond37, i1 %515, i1 false
  br i1 %or.cond39, label %516, label %550

516:                                              ; preds = %512
  %517 = uitofp i64 %445 to double
  %518 = fdiv double 1.000000e+00, %517
  %519 = fadd double %518, %518
  %520 = load i64, ptr %2, align 16, !tbaa !9
  %521 = load i64, ptr %443, align 8, !tbaa !9
  %522 = trunc i64 %521 to i32
  %523 = icmp sgt i32 %522, 0
  br i1 %523, label %.preheader1454.lr.ph, label %._crit_edge1539

.preheader1454.lr.ph:                             ; preds = %516
  %524 = trunc i64 %520 to i32
  %525 = icmp sgt i32 %524, 0
  %526 = sitofp i32 %524 to double
  %wide.trip.count1722 = and i64 %521, 2147483647
  %wide.trip.count1712 = and i64 %520, 2147483647
  %min.iters.check1969 = icmp ult i64 %wide.trip.count1712, 4
  %n.mod.vf1971 = and i64 %520, 3
  %n.vec1972 = sub nsw i64 %wide.trip.count1712, %n.mod.vf1971
  %broadcast.splatinsert1980 = insertelement <4 x double> poison, double %519, i64 0
  %broadcast.splat1981 = shufflevector <4 x double> %broadcast.splatinsert1980, <4 x double> poison, <4 x i32> zeroinitializer
  %cmp.n1983 = icmp eq i64 %n.mod.vf1971, 0
  br label %.preheader1454

.preheader1454:                                   ; preds = %.preheader1454.lr.ph, %._crit_edge1537
  %indvars.iv1719 = phi i64 [ 0, %.preheader1454.lr.ph ], [ %indvars.iv.next1720, %._crit_edge1537 ]
  br i1 %525, label %.lr.ph1533, label %._crit_edge1537

.lr.ph1533:                                       ; preds = %.preheader1454
  %527 = mul i64 %indvars.iv1719, %520
  %528 = trunc nuw nsw i64 %indvars.iv1719 to i32
  %529 = uitofp nneg i32 %528 to double
  %530 = call double @llvm.fmuladd.f64(double %529, double %526, double 1.000000e+00)
  %531 = and i64 %527, 4294967295
  br i1 %min.iters.check1969, label %scalar.ph1968.preheader, label %vector.ph1970

vector.ph1970:                                    ; preds = %.lr.ph1533
  %broadcast.splatinsert1978 = insertelement <4 x double> poison, double %530, i64 0
  %broadcast.splat1979 = shufflevector <4 x double> %broadcast.splatinsert1978, <4 x double> poison, <4 x i32> zeroinitializer
  br label %vector.body1974

vector.body1974:                                  ; preds = %vector.body1974, %vector.ph1970
  %index1975 = phi i64 [ 0, %vector.ph1970 ], [ %index.next1982, %vector.body1974 ]
  %vec.ind1976 = phi <4 x i32> [ <i32 0, i32 1, i32 2, i32 3>, %vector.ph1970 ], [ %vec.ind.next1977, %vector.body1974 ]
  %532 = add nuw nsw i64 %index1975, %531
  %533 = uitofp <4 x i32> %vec.ind1976 to <4 x double>
  %534 = fadd <4 x double> %broadcast.splat1979, %533
  %535 = fmul <4 x double> %broadcast.splat1981, %534
  %536 = fptrunc <4 x double> %535 to <4 x float>
  %537 = getelementptr inbounds float, ptr %.131196, i64 %532
  store <4 x float> %536, ptr %537, align 4, !tbaa !11
  %index.next1982 = add nuw i64 %index1975, 4
  %vec.ind.next1977 = add <4 x i32> %vec.ind1976, <i32 4, i32 4, i32 4, i32 4>
  %538 = icmp eq i64 %index.next1982, %n.vec1972
  br i1 %538, label %middle.block1967, label %vector.body1974, !llvm.loop !43

middle.block1967:                                 ; preds = %vector.body1974
  br i1 %cmp.n1983, label %._crit_edge1537, label %scalar.ph1968.preheader

scalar.ph1968.preheader:                          ; preds = %middle.block1967, %.lr.ph1533
  %indvars.iv1709.ph = phi i64 [ 0, %.lr.ph1533 ], [ %n.vec1972, %middle.block1967 ]
  br label %scalar.ph1968

scalar.ph1968:                                    ; preds = %scalar.ph1968.preheader, %scalar.ph1968
  %indvars.iv1709 = phi i64 [ %indvars.iv.next1710, %scalar.ph1968 ], [ %indvars.iv1709.ph, %scalar.ph1968.preheader ]
  %539 = add nuw nsw i64 %indvars.iv1709, %531
  %540 = trunc nuw nsw i64 %indvars.iv1709 to i32
  %541 = uitofp nneg i32 %540 to double
  %542 = fadd double %530, %541
  %543 = fmul double %519, %542
  %544 = fptrunc double %543 to float
  %545 = getelementptr inbounds float, ptr %.131196, i64 %539
  store float %544, ptr %545, align 4, !tbaa !11
  %indvars.iv.next1710 = add nuw nsw i64 %indvars.iv1709, 1
  %exitcond1713.not = icmp eq i64 %indvars.iv.next1710, %wide.trip.count1712
  br i1 %exitcond1713.not, label %._crit_edge1537, label %scalar.ph1968, !llvm.loop !44

._crit_edge1537:                                  ; preds = %scalar.ph1968, %middle.block1967, %.preheader1454
  %indvars.iv.next1720 = add nuw nsw i64 %indvars.iv1719, 1
  %exitcond1723.not = icmp eq i64 %indvars.iv.next1720, %wide.trip.count1722
  br i1 %exitcond1723.not, label %._crit_edge1539, label %.preheader1454, !llvm.loop !45

._crit_edge1539:                                  ; preds = %._crit_edge1537, %516
  call void @libxsmm_rne_convert_fp32_bf8(ptr noundef nonnull %.131196, ptr noundef nonnull %.131217, i64 noundef %445) #8
  call void @libxsmm_convert_bf8_f32(ptr noundef nonnull %.131217, ptr noundef nonnull %.131196, i64 noundef %445) #8
  %546 = load i64, ptr %3, align 8, !tbaa !9
  %547 = load i64, ptr %4, align 8, !tbaa !9
  %548 = load i32, ptr %1, align 4, !tbaa !5
  %549 = call i32 @libxsmm_mhd_write(ptr noundef nonnull @.str.6, ptr noundef null, ptr noundef nonnull %2, ptr noundef null, i64 noundef %546, i64 noundef %547, i32 noundef %548, ptr noundef null, ptr noundef nonnull %.131196, ptr noundef null, ptr noundef null, ptr noundef null, i64 noundef 0) #8
  br label %550

550:                                              ; preds = %._crit_edge1539, %512, %._crit_edge1547, %460
  %.141218 = phi ptr [ %.121216, %460 ], [ %.121216, %._crit_edge1547 ], [ %.131217, %512 ], [ %.131217, %._crit_edge1539 ]
  %.141197 = phi ptr [ %.121195, %460 ], [ %.121195, %._crit_edge1547 ], [ %.131196, %512 ], [ %.131196, %._crit_edge1539 ]
  %.141179 = phi i64 [ %.121177, %460 ], [ %.121177, %._crit_edge1547 ], [ %.131178, %512 ], [ %.131178, %._crit_edge1539 ]
  %.14 = phi i32 [ 1, %460 ], [ %498, %._crit_edge1547 ], [ 1, %512 ], [ %549, %._crit_edge1539 ]
  %551 = call i32 @libxsmm_mhd_read_header(ptr noundef nonnull @.str.7, i64 noundef 1024, ptr noundef nonnull %6, ptr noundef nonnull %3, ptr noundef nonnull %2, ptr noundef nonnull %4, ptr noundef nonnull %1, ptr noundef nonnull %5, ptr noundef null) #8
  %552 = icmp eq i32 %551, 0
  %553 = load i64, ptr %2, align 16, !tbaa !9
  %554 = getelementptr inbounds i8, ptr %2, i64 8
  %555 = load i64, ptr %554, align 8, !tbaa !9
  %556 = mul i64 %555, %553
  %557 = icmp ult i64 %.141179, %556
  br i1 %552, label %558, label %611

558:                                              ; preds = %550
  br i1 %557, label %559, label %571

559:                                              ; preds = %558
  call void @free(ptr noundef %.141218) #8
  call void @free(ptr noundef %.141197) #8
  %560 = call noalias ptr @malloc(i64 noundef %556) #9
  %561 = load i32, ptr %1, align 4
  switch i32 %561, label %562 [
    i32 0, label %567
    i32 1, label %.fold.split1375
  ]

562:                                              ; preds = %559
  %563 = and i32 %561, -2
  %switch.tableidx2151 = add i32 %563, -2
  %564 = icmp ult i32 %switch.tableidx2151, 11
  br i1 %564, label %switch.hole_check2152, label %565

565:                                              ; preds = %switch.hole_check2152, %562
  call void @__assert_fail(ptr noundef nonnull @.str.1, ptr noundef nonnull @.str.2, i32 noundef 253, ptr noundef nonnull @__PRETTY_FUNCTION__.main) #10
  unreachable

.fold.split1375:                                  ; preds = %559
  br label %567

switch.hole_check2152:                            ; preds = %562
  %switch.maskindex2154 = trunc nuw i32 %switch.tableidx2151 to i16
  %switch.shifted2155 = lshr i16 1365, %switch.maskindex2154
  %switch.lobit2156 = trunc i16 %switch.shifted2155 to i1
  br i1 %switch.lobit2156, label %switch.lookup2153, label %565

switch.lookup2153:                                ; preds = %switch.hole_check2152
  %566 = zext nneg i32 %switch.tableidx2151 to i64
  %switch.gep2157 = getelementptr inbounds [11 x i64], ptr @switch.table.main.13, i64 0, i64 %566
  %switch.load2158 = load i64, ptr %switch.gep2157, align 8
  br label %567

567:                                              ; preds = %switch.lookup2153, %559, %.fold.split1375
  %568 = phi i64 [ 8, %559 ], [ 4, %.fold.split1375 ], [ %switch.load2158, %switch.lookup2153 ]
  %569 = mul i64 %568, %556
  %570 = call noalias ptr @malloc(i64 noundef %569) #9
  br label %571

571:                                              ; preds = %567, %558
  %.151219 = phi ptr [ %560, %567 ], [ %.141218, %558 ]
  %.151198 = phi ptr [ %570, %567 ], [ %.141197, %558 ]
  %.151180 = phi i64 [ %556, %567 ], [ %.141179, %558 ]
  %572 = icmp ne ptr %.151198, null
  %573 = icmp ne ptr %.151219, null
  %or.cond41 = and i1 %573, %572
  %574 = icmp eq i32 %.14, 0
  %or.cond43 = select i1 %or.cond41, i1 %574, i1 false
  br i1 %or.cond43, label %575, label %663

575:                                              ; preds = %571
  %576 = uitofp i64 %556 to double
  %577 = fdiv double 1.000000e+00, %576
  %578 = fadd double %577, %577
  %579 = load i64, ptr %2, align 16, !tbaa !9
  %580 = load i64, ptr %554, align 8, !tbaa !9
  %581 = trunc i64 %580 to i32
  %582 = icmp sgt i32 %581, 0
  br i1 %582, label %.preheader1448.lr.ph, label %._crit_edge1563

.preheader1448.lr.ph:                             ; preds = %575
  %583 = trunc i64 %579 to i32
  %584 = icmp sgt i32 %583, 0
  %585 = sitofp i32 %583 to double
  %wide.trip.count1767 = and i64 %580, 2147483647
  %wide.trip.count1757 = and i64 %579, 2147483647
  %min.iters.check2020 = icmp ult i64 %wide.trip.count1757, 4
  %n.mod.vf2022 = and i64 %579, 3
  %n.vec2023 = sub nsw i64 %wide.trip.count1757, %n.mod.vf2022
  %broadcast.splatinsert2031 = insertelement <4 x double> poison, double %578, i64 0
  %broadcast.splat2032 = shufflevector <4 x double> %broadcast.splatinsert2031, <4 x double> poison, <4 x i32> zeroinitializer
  %cmp.n2034 = icmp eq i64 %n.mod.vf2022, 0
  br label %.preheader1448

.preheader1448:                                   ; preds = %.preheader1448.lr.ph, %._crit_edge1561
  %indvars.iv1764 = phi i64 [ 0, %.preheader1448.lr.ph ], [ %indvars.iv.next1765, %._crit_edge1561 ]
  br i1 %584, label %.lr.ph1557, label %._crit_edge1561

.lr.ph1557:                                       ; preds = %.preheader1448
  %586 = mul i64 %indvars.iv1764, %579
  %587 = trunc nuw nsw i64 %indvars.iv1764 to i32
  %588 = uitofp nneg i32 %587 to double
  %589 = call double @llvm.fmuladd.f64(double %588, double %585, double 1.000000e+00)
  %590 = and i64 %586, 4294967295
  br i1 %min.iters.check2020, label %scalar.ph2019.preheader, label %vector.ph2021

vector.ph2021:                                    ; preds = %.lr.ph1557
  %broadcast.splatinsert2029 = insertelement <4 x double> poison, double %589, i64 0
  %broadcast.splat2030 = shufflevector <4 x double> %broadcast.splatinsert2029, <4 x double> poison, <4 x i32> zeroinitializer
  br label %vector.body2025

vector.body2025:                                  ; preds = %vector.body2025, %vector.ph2021
  %index2026 = phi i64 [ 0, %vector.ph2021 ], [ %index.next2033, %vector.body2025 ]
  %vec.ind2027 = phi <4 x i32> [ <i32 0, i32 1, i32 2, i32 3>, %vector.ph2021 ], [ %vec.ind.next2028, %vector.body2025 ]
  %591 = add nuw nsw i64 %index2026, %590
  %592 = uitofp <4 x i32> %vec.ind2027 to <4 x double>
  %593 = fadd <4 x double> %broadcast.splat2030, %592
  %594 = fmul <4 x double> %broadcast.splat2032, %593
  %595 = fptrunc <4 x double> %594 to <4 x float>
  %596 = getelementptr inbounds float, ptr %.151198, i64 %591
  store <4 x float> %595, ptr %596, align 4, !tbaa !11
  %index.next2033 = add nuw i64 %index2026, 4
  %vec.ind.next2028 = add <4 x i32> %vec.ind2027, <i32 4, i32 4, i32 4, i32 4>
  %597 = icmp eq i64 %index.next2033, %n.vec2023
  br i1 %597, label %middle.block2018, label %vector.body2025, !llvm.loop !46

middle.block2018:                                 ; preds = %vector.body2025
  br i1 %cmp.n2034, label %._crit_edge1561, label %scalar.ph2019.preheader

scalar.ph2019.preheader:                          ; preds = %middle.block2018, %.lr.ph1557
  %indvars.iv1754.ph = phi i64 [ 0, %.lr.ph1557 ], [ %n.vec2023, %middle.block2018 ]
  br label %scalar.ph2019

scalar.ph2019:                                    ; preds = %scalar.ph2019.preheader, %scalar.ph2019
  %indvars.iv1754 = phi i64 [ %indvars.iv.next1755, %scalar.ph2019 ], [ %indvars.iv1754.ph, %scalar.ph2019.preheader ]
  %598 = add nuw nsw i64 %indvars.iv1754, %590
  %599 = trunc nuw nsw i64 %indvars.iv1754 to i32
  %600 = uitofp nneg i32 %599 to double
  %601 = fadd double %589, %600
  %602 = fmul double %578, %601
  %603 = fptrunc double %602 to float
  %604 = getelementptr inbounds float, ptr %.151198, i64 %598
  store float %603, ptr %604, align 4, !tbaa !11
  %indvars.iv.next1755 = add nuw nsw i64 %indvars.iv1754, 1
  %exitcond1758.not = icmp eq i64 %indvars.iv.next1755, %wide.trip.count1757
  br i1 %exitcond1758.not, label %._crit_edge1561, label %scalar.ph2019, !llvm.loop !47

._crit_edge1561:                                  ; preds = %scalar.ph2019, %middle.block2018, %.preheader1448
  %indvars.iv.next1765 = add nuw nsw i64 %indvars.iv1764, 1
  %exitcond1768.not = icmp eq i64 %indvars.iv.next1765, %wide.trip.count1767
  br i1 %exitcond1768.not, label %._crit_edge1563, label %.preheader1448, !llvm.loop !48

._crit_edge1563:                                  ; preds = %._crit_edge1561, %575
  %605 = trunc i64 %556 to i32
  call void @libxsmm_stochastic_convert_fp32_bf8(ptr noundef nonnull %.151198, ptr noundef nonnull %.151219, i32 noundef %605, ptr noundef %7, i32 noundef 0) #8
  call void @libxsmm_convert_bf8_f32(ptr noundef nonnull %.151219, ptr noundef nonnull %.151198, i64 noundef %556) #8
  %606 = load i64, ptr %3, align 8, !tbaa !9
  %607 = load i64, ptr %4, align 8, !tbaa !9
  %608 = load i64, ptr %5, align 8, !tbaa !9
  %609 = load i32, ptr %1, align 4, !tbaa !5
  %610 = call i32 @libxsmm_mhd_read(ptr noundef nonnull %6, ptr noundef null, ptr noundef nonnull %2, ptr noundef null, i64 noundef %606, i64 noundef %607, i64 noundef %608, i32 noundef %609, ptr noundef null, ptr noundef nonnull %.151198, ptr noundef nonnull @libxsmm_mhd_element_comparison, ptr noundef null, i64 noundef 0) #8
  br label %663

611:                                              ; preds = %550
  br i1 %557, label %612, label %624

612:                                              ; preds = %611
  call void @free(ptr noundef %.141218) #8
  call void @free(ptr noundef %.141197) #8
  %613 = call noalias ptr @malloc(i64 noundef %556) #9
  %614 = load i32, ptr %1, align 4
  switch i32 %614, label %615 [
    i32 0, label %620
    i32 1, label %.fold.split1376
  ]

615:                                              ; preds = %612
  %616 = and i32 %614, -2
  %switch.tableidx2160 = add i32 %616, -2
  %617 = icmp ult i32 %switch.tableidx2160, 11
  br i1 %617, label %switch.hole_check2161, label %618

618:                                              ; preds = %switch.hole_check2161, %615
  call void @__assert_fail(ptr noundef nonnull @.str.1, ptr noundef nonnull @.str.2, i32 noundef 273, ptr noundef nonnull @__PRETTY_FUNCTION__.main) #10
  unreachable

.fold.split1376:                                  ; preds = %612
  br label %620

switch.hole_check2161:                            ; preds = %615
  %switch.maskindex2163 = trunc nuw i32 %switch.tableidx2160 to i16
  %switch.shifted2164 = lshr i16 1365, %switch.maskindex2163
  %switch.lobit2165 = trunc i16 %switch.shifted2164 to i1
  br i1 %switch.lobit2165, label %switch.lookup2162, label %618

switch.lookup2162:                                ; preds = %switch.hole_check2161
  %619 = zext nneg i32 %switch.tableidx2160 to i64
  %switch.gep2166 = getelementptr inbounds [11 x i64], ptr @switch.table.main.13, i64 0, i64 %619
  %switch.load2167 = load i64, ptr %switch.gep2166, align 8
  br label %620

620:                                              ; preds = %switch.lookup2162, %612, %.fold.split1376
  %621 = phi i64 [ 8, %612 ], [ 4, %.fold.split1376 ], [ %switch.load2167, %switch.lookup2162 ]
  %622 = mul i64 %621, %556
  %623 = call noalias ptr @malloc(i64 noundef %622) #9
  br label %624

624:                                              ; preds = %620, %611
  %.161220 = phi ptr [ %613, %620 ], [ %.141218, %611 ]
  %.161199 = phi ptr [ %623, %620 ], [ %.141197, %611 ]
  %.161181 = phi i64 [ %556, %620 ], [ %.141179, %611 ]
  %625 = icmp ne ptr %.161199, null
  %626 = icmp ne ptr %.161220, null
  %or.cond45 = and i1 %626, %625
  %627 = icmp eq i32 %.14, 0
  %or.cond47 = select i1 %or.cond45, i1 %627, i1 false
  br i1 %or.cond47, label %628, label %663

628:                                              ; preds = %624
  %629 = uitofp i64 %556 to double
  %630 = fdiv double 1.000000e+00, %629
  %631 = fadd double %630, %630
  %632 = load i64, ptr %2, align 16, !tbaa !9
  %633 = load i64, ptr %554, align 8, !tbaa !9
  %634 = trunc i64 %633 to i32
  %635 = icmp sgt i32 %634, 0
  br i1 %635, label %.preheader1450.lr.ph, label %._crit_edge1555

.preheader1450.lr.ph:                             ; preds = %628
  %636 = trunc i64 %632 to i32
  %637 = icmp sgt i32 %636, 0
  %638 = sitofp i32 %636 to double
  %wide.trip.count1752 = and i64 %633, 2147483647
  %wide.trip.count1742 = and i64 %632, 2147483647
  %min.iters.check2003 = icmp ult i64 %wide.trip.count1742, 4
  %n.mod.vf2005 = and i64 %632, 3
  %n.vec2006 = sub nsw i64 %wide.trip.count1742, %n.mod.vf2005
  %broadcast.splatinsert2014 = insertelement <4 x double> poison, double %631, i64 0
  %broadcast.splat2015 = shufflevector <4 x double> %broadcast.splatinsert2014, <4 x double> poison, <4 x i32> zeroinitializer
  %cmp.n2017 = icmp eq i64 %n.mod.vf2005, 0
  br label %.preheader1450

.preheader1450:                                   ; preds = %.preheader1450.lr.ph, %._crit_edge1553
  %indvars.iv1749 = phi i64 [ 0, %.preheader1450.lr.ph ], [ %indvars.iv.next1750, %._crit_edge1553 ]
  br i1 %637, label %.lr.ph1549, label %._crit_edge1553

.lr.ph1549:                                       ; preds = %.preheader1450
  %639 = mul i64 %indvars.iv1749, %632
  %640 = trunc nuw nsw i64 %indvars.iv1749 to i32
  %641 = uitofp nneg i32 %640 to double
  %642 = call double @llvm.fmuladd.f64(double %641, double %638, double 1.000000e+00)
  %643 = and i64 %639, 4294967295
  br i1 %min.iters.check2003, label %scalar.ph2002.preheader, label %vector.ph2004

vector.ph2004:                                    ; preds = %.lr.ph1549
  %broadcast.splatinsert2012 = insertelement <4 x double> poison, double %642, i64 0
  %broadcast.splat2013 = shufflevector <4 x double> %broadcast.splatinsert2012, <4 x double> poison, <4 x i32> zeroinitializer
  br label %vector.body2008

vector.body2008:                                  ; preds = %vector.body2008, %vector.ph2004
  %index2009 = phi i64 [ 0, %vector.ph2004 ], [ %index.next2016, %vector.body2008 ]
  %vec.ind2010 = phi <4 x i32> [ <i32 0, i32 1, i32 2, i32 3>, %vector.ph2004 ], [ %vec.ind.next2011, %vector.body2008 ]
  %644 = add nuw nsw i64 %index2009, %643
  %645 = uitofp <4 x i32> %vec.ind2010 to <4 x double>
  %646 = fadd <4 x double> %broadcast.splat2013, %645
  %647 = fmul <4 x double> %broadcast.splat2015, %646
  %648 = fptrunc <4 x double> %647 to <4 x float>
  %649 = getelementptr inbounds float, ptr %.161199, i64 %644
  store <4 x float> %648, ptr %649, align 4, !tbaa !11
  %index.next2016 = add nuw i64 %index2009, 4
  %vec.ind.next2011 = add <4 x i32> %vec.ind2010, <i32 4, i32 4, i32 4, i32 4>
  %650 = icmp eq i64 %index.next2016, %n.vec2006
  br i1 %650, label %middle.block2001, label %vector.body2008, !llvm.loop !49

middle.block2001:                                 ; preds = %vector.body2008
  br i1 %cmp.n2017, label %._crit_edge1553, label %scalar.ph2002.preheader

scalar.ph2002.preheader:                          ; preds = %middle.block2001, %.lr.ph1549
  %indvars.iv1739.ph = phi i64 [ 0, %.lr.ph1549 ], [ %n.vec2006, %middle.block2001 ]
  br label %scalar.ph2002

scalar.ph2002:                                    ; preds = %scalar.ph2002.preheader, %scalar.ph2002
  %indvars.iv1739 = phi i64 [ %indvars.iv.next1740, %scalar.ph2002 ], [ %indvars.iv1739.ph, %scalar.ph2002.preheader ]
  %651 = add nuw nsw i64 %indvars.iv1739, %643
  %652 = trunc nuw nsw i64 %indvars.iv1739 to i32
  %653 = uitofp nneg i32 %652 to double
  %654 = fadd double %642, %653
  %655 = fmul double %631, %654
  %656 = fptrunc double %655 to float
  %657 = getelementptr inbounds float, ptr %.161199, i64 %651
  store float %656, ptr %657, align 4, !tbaa !11
  %indvars.iv.next1740 = add nuw nsw i64 %indvars.iv1739, 1
  %exitcond1743.not = icmp eq i64 %indvars.iv.next1740, %wide.trip.count1742
  br i1 %exitcond1743.not, label %._crit_edge1553, label %scalar.ph2002, !llvm.loop !50

._crit_edge1553:                                  ; preds = %scalar.ph2002, %middle.block2001, %.preheader1450
  %indvars.iv.next1750 = add nuw nsw i64 %indvars.iv1749, 1
  %exitcond1753.not = icmp eq i64 %indvars.iv.next1750, %wide.trip.count1752
  br i1 %exitcond1753.not, label %._crit_edge1555, label %.preheader1450, !llvm.loop !51

._crit_edge1555:                                  ; preds = %._crit_edge1553, %628
  %658 = trunc i64 %556 to i32
  call void @libxsmm_stochastic_convert_fp32_bf8(ptr noundef nonnull %.161199, ptr noundef nonnull %.161220, i32 noundef %658, ptr noundef %7, i32 noundef 0) #8
  call void @libxsmm_convert_bf8_f32(ptr noundef nonnull %.161220, ptr noundef nonnull %.161199, i64 noundef %556) #8
  %659 = load i64, ptr %3, align 8, !tbaa !9
  %660 = load i64, ptr %4, align 8, !tbaa !9
  %661 = load i32, ptr %1, align 4, !tbaa !5
  %662 = call i32 @libxsmm_mhd_write(ptr noundef nonnull @.str.7, ptr noundef null, ptr noundef nonnull %2, ptr noundef null, i64 noundef %659, i64 noundef %660, i32 noundef %661, ptr noundef null, ptr noundef nonnull %.161199, ptr noundef null, ptr noundef null, ptr noundef null, i64 noundef 0) #8
  br label %663

663:                                              ; preds = %._crit_edge1555, %624, %._crit_edge1563, %571
  %.171221 = phi ptr [ %.151219, %571 ], [ %.151219, %._crit_edge1563 ], [ %.161220, %624 ], [ %.161220, %._crit_edge1555 ]
  %.171200 = phi ptr [ %.151198, %571 ], [ %.151198, %._crit_edge1563 ], [ %.161199, %624 ], [ %.161199, %._crit_edge1555 ]
  %.171182 = phi i64 [ %.151180, %571 ], [ %.151180, %._crit_edge1563 ], [ %.161181, %624 ], [ %.161181, %._crit_edge1555 ]
  %.17 = phi i32 [ 1, %571 ], [ %610, %._crit_edge1563 ], [ 1, %624 ], [ %662, %._crit_edge1555 ]
  %664 = call i32 @libxsmm_mhd_read_header(ptr noundef nonnull @.str.8, i64 noundef 1024, ptr noundef nonnull %6, ptr noundef nonnull %3, ptr noundef nonnull %2, ptr noundef nonnull %4, ptr noundef nonnull %1, ptr noundef nonnull %5, ptr noundef null) #8
  %665 = icmp eq i32 %664, 0
  %666 = load i64, ptr %2, align 16, !tbaa !9
  %667 = getelementptr inbounds i8, ptr %2, i64 8
  %668 = load i64, ptr %667, align 8, !tbaa !9
  %669 = mul i64 %668, %666
  %670 = icmp ult i64 %.171182, %669
  br i1 %665, label %671, label %723

671:                                              ; preds = %663
  br i1 %670, label %672, label %684

672:                                              ; preds = %671
  call void @free(ptr noundef %.171221) #8
  call void @free(ptr noundef %.171200) #8
  %673 = call noalias ptr @malloc(i64 noundef %669) #9
  %674 = load i32, ptr %1, align 4
  switch i32 %674, label %675 [
    i32 0, label %680
    i32 1, label %.fold.split1377
  ]

675:                                              ; preds = %672
  %676 = and i32 %674, -2
  %switch.tableidx2169 = add i32 %676, -2
  %677 = icmp ult i32 %switch.tableidx2169, 11
  br i1 %677, label %switch.hole_check2170, label %678

678:                                              ; preds = %switch.hole_check2170, %675
  call void @__assert_fail(ptr noundef nonnull @.str.1, ptr noundef nonnull @.str.2, i32 noundef 296, ptr noundef nonnull @__PRETTY_FUNCTION__.main) #10
  unreachable

.fold.split1377:                                  ; preds = %672
  br label %680

switch.hole_check2170:                            ; preds = %675
  %switch.maskindex2172 = trunc nuw i32 %switch.tableidx2169 to i16
  %switch.shifted2173 = lshr i16 1365, %switch.maskindex2172
  %switch.lobit2174 = trunc i16 %switch.shifted2173 to i1
  br i1 %switch.lobit2174, label %switch.lookup2171, label %678

switch.lookup2171:                                ; preds = %switch.hole_check2170
  %679 = zext nneg i32 %switch.tableidx2169 to i64
  %switch.gep2175 = getelementptr inbounds [11 x i64], ptr @switch.table.main.13, i64 0, i64 %679
  %switch.load2176 = load i64, ptr %switch.gep2175, align 8
  br label %680

680:                                              ; preds = %switch.lookup2171, %672, %.fold.split1377
  %681 = phi i64 [ 8, %672 ], [ 4, %.fold.split1377 ], [ %switch.load2176, %switch.lookup2171 ]
  %682 = mul i64 %681, %669
  %683 = call noalias ptr @malloc(i64 noundef %682) #9
  br label %684

684:                                              ; preds = %680, %671
  %.181222 = phi ptr [ %673, %680 ], [ %.171221, %671 ]
  %.181201 = phi ptr [ %683, %680 ], [ %.171200, %671 ]
  %685 = icmp ne ptr %.181201, null
  %686 = icmp ne ptr %.181222, null
  %or.cond49 = and i1 %686, %685
  %687 = icmp eq i32 %.17, 0
  %or.cond51 = select i1 %or.cond49, i1 %687, i1 false
  br i1 %or.cond51, label %688, label %774

688:                                              ; preds = %684
  %689 = uitofp i64 %669 to double
  %690 = fdiv double 1.000000e+00, %689
  %691 = fadd double %690, %690
  %692 = load i64, ptr %2, align 16, !tbaa !9
  %693 = load i64, ptr %667, align 8, !tbaa !9
  %694 = trunc i64 %693 to i32
  %695 = icmp sgt i32 %694, 0
  br i1 %695, label %.preheader1444.lr.ph, label %._crit_edge1579

.preheader1444.lr.ph:                             ; preds = %688
  %696 = trunc i64 %692 to i32
  %697 = icmp sgt i32 %696, 0
  %698 = sitofp i32 %696 to double
  %wide.trip.count1797 = and i64 %693, 2147483647
  %wide.trip.count1787 = and i64 %692, 2147483647
  %min.iters.check2054 = icmp ult i64 %wide.trip.count1787, 4
  %n.mod.vf2056 = and i64 %692, 3
  %n.vec2057 = sub nsw i64 %wide.trip.count1787, %n.mod.vf2056
  %broadcast.splatinsert2065 = insertelement <4 x double> poison, double %691, i64 0
  %broadcast.splat2066 = shufflevector <4 x double> %broadcast.splatinsert2065, <4 x double> poison, <4 x i32> zeroinitializer
  %cmp.n2068 = icmp eq i64 %n.mod.vf2056, 0
  br label %.preheader1444

.preheader1444:                                   ; preds = %.preheader1444.lr.ph, %._crit_edge1577
  %indvars.iv1794 = phi i64 [ 0, %.preheader1444.lr.ph ], [ %indvars.iv.next1795, %._crit_edge1577 ]
  br i1 %697, label %.lr.ph1573, label %._crit_edge1577

.lr.ph1573:                                       ; preds = %.preheader1444
  %699 = mul i64 %indvars.iv1794, %692
  %700 = trunc nuw nsw i64 %indvars.iv1794 to i32
  %701 = uitofp nneg i32 %700 to double
  %702 = call double @llvm.fmuladd.f64(double %701, double %698, double 1.000000e+00)
  %703 = and i64 %699, 4294967295
  br i1 %min.iters.check2054, label %scalar.ph2053.preheader, label %vector.ph2055

vector.ph2055:                                    ; preds = %.lr.ph1573
  %broadcast.splatinsert2063 = insertelement <4 x double> poison, double %702, i64 0
  %broadcast.splat2064 = shufflevector <4 x double> %broadcast.splatinsert2063, <4 x double> poison, <4 x i32> zeroinitializer
  br label %vector.body2059

vector.body2059:                                  ; preds = %vector.body2059, %vector.ph2055
  %index2060 = phi i64 [ 0, %vector.ph2055 ], [ %index.next2067, %vector.body2059 ]
  %vec.ind2061 = phi <4 x i32> [ <i32 0, i32 1, i32 2, i32 3>, %vector.ph2055 ], [ %vec.ind.next2062, %vector.body2059 ]
  %704 = add nuw nsw i64 %index2060, %703
  %705 = uitofp <4 x i32> %vec.ind2061 to <4 x double>
  %706 = fadd <4 x double> %broadcast.splat2064, %705
  %707 = fmul <4 x double> %broadcast.splat2066, %706
  %708 = fptrunc <4 x double> %707 to <4 x float>
  %709 = getelementptr inbounds float, ptr %.181201, i64 %704
  store <4 x float> %708, ptr %709, align 4, !tbaa !11
  %index.next2067 = add nuw i64 %index2060, 4
  %vec.ind.next2062 = add <4 x i32> %vec.ind2061, <i32 4, i32 4, i32 4, i32 4>
  %710 = icmp eq i64 %index.next2067, %n.vec2057
  br i1 %710, label %middle.block2052, label %vector.body2059, !llvm.loop !52

middle.block2052:                                 ; preds = %vector.body2059
  br i1 %cmp.n2068, label %._crit_edge1577, label %scalar.ph2053.preheader

scalar.ph2053.preheader:                          ; preds = %middle.block2052, %.lr.ph1573
  %indvars.iv1784.ph = phi i64 [ 0, %.lr.ph1573 ], [ %n.vec2057, %middle.block2052 ]
  br label %scalar.ph2053

scalar.ph2053:                                    ; preds = %scalar.ph2053.preheader, %scalar.ph2053
  %indvars.iv1784 = phi i64 [ %indvars.iv.next1785, %scalar.ph2053 ], [ %indvars.iv1784.ph, %scalar.ph2053.preheader ]
  %711 = add nuw nsw i64 %indvars.iv1784, %703
  %712 = trunc nuw nsw i64 %indvars.iv1784 to i32
  %713 = uitofp nneg i32 %712 to double
  %714 = fadd double %702, %713
  %715 = fmul double %691, %714
  %716 = fptrunc double %715 to float
  %717 = getelementptr inbounds float, ptr %.181201, i64 %711
  store float %716, ptr %717, align 4, !tbaa !11
  %indvars.iv.next1785 = add nuw nsw i64 %indvars.iv1784, 1
  %exitcond1788.not = icmp eq i64 %indvars.iv.next1785, %wide.trip.count1787
  br i1 %exitcond1788.not, label %._crit_edge1577, label %scalar.ph2053, !llvm.loop !53

._crit_edge1577:                                  ; preds = %scalar.ph2053, %middle.block2052, %.preheader1444
  %indvars.iv.next1795 = add nuw nsw i64 %indvars.iv1794, 1
  %exitcond1798.not = icmp eq i64 %indvars.iv.next1795, %wide.trip.count1797
  br i1 %exitcond1798.not, label %._crit_edge1579, label %.preheader1444, !llvm.loop !54

._crit_edge1579:                                  ; preds = %._crit_edge1577, %688
  call void @libxsmm_rne_convert_fp32_hf8(ptr noundef nonnull %.181201, ptr noundef nonnull %.181222, i64 noundef %669) #8
  call void @libxsmm_convert_hf8_f32(ptr noundef nonnull %.181222, ptr noundef nonnull %.181201, i64 noundef %669) #8
  %718 = load i64, ptr %3, align 8, !tbaa !9
  %719 = load i64, ptr %4, align 8, !tbaa !9
  %720 = load i64, ptr %5, align 8, !tbaa !9
  %721 = load i32, ptr %1, align 4, !tbaa !5
  %722 = call i32 @libxsmm_mhd_read(ptr noundef nonnull %6, ptr noundef null, ptr noundef nonnull %2, ptr noundef null, i64 noundef %718, i64 noundef %719, i64 noundef %720, i32 noundef %721, ptr noundef null, ptr noundef nonnull %.181201, ptr noundef nonnull @libxsmm_mhd_element_comparison, ptr noundef null, i64 noundef 0) #8
  br label %774

723:                                              ; preds = %663
  br i1 %670, label %724, label %736

724:                                              ; preds = %723
  call void @free(ptr noundef %.171221) #8
  call void @free(ptr noundef %.171200) #8
  %725 = call noalias ptr @malloc(i64 noundef %669) #9
  %726 = load i32, ptr %1, align 4
  switch i32 %726, label %727 [
    i32 0, label %732
    i32 1, label %.fold.split1378
  ]

727:                                              ; preds = %724
  %728 = and i32 %726, -2
  %switch.tableidx2178 = add i32 %728, -2
  %729 = icmp ult i32 %switch.tableidx2178, 11
  br i1 %729, label %switch.hole_check2179, label %730

730:                                              ; preds = %switch.hole_check2179, %727
  call void @__assert_fail(ptr noundef nonnull @.str.1, ptr noundef nonnull @.str.2, i32 noundef 315, ptr noundef nonnull @__PRETTY_FUNCTION__.main) #10
  unreachable

.fold.split1378:                                  ; preds = %724
  br label %732

switch.hole_check2179:                            ; preds = %727
  %switch.maskindex2181 = trunc nuw i32 %switch.tableidx2178 to i16
  %switch.shifted2182 = lshr i16 1365, %switch.maskindex2181
  %switch.lobit2183 = trunc i16 %switch.shifted2182 to i1
  br i1 %switch.lobit2183, label %switch.lookup2180, label %730

switch.lookup2180:                                ; preds = %switch.hole_check2179
  %731 = zext nneg i32 %switch.tableidx2178 to i64
  %switch.gep2184 = getelementptr inbounds [11 x i64], ptr @switch.table.main.13, i64 0, i64 %731
  %switch.load2185 = load i64, ptr %switch.gep2184, align 8
  br label %732

732:                                              ; preds = %switch.lookup2180, %724, %.fold.split1378
  %733 = phi i64 [ 8, %724 ], [ 4, %.fold.split1378 ], [ %switch.load2185, %switch.lookup2180 ]
  %734 = mul i64 %733, %669
  %735 = call noalias ptr @malloc(i64 noundef %734) #9
  br label %736

736:                                              ; preds = %732, %723
  %.191223 = phi ptr [ %725, %732 ], [ %.171221, %723 ]
  %.191202 = phi ptr [ %735, %732 ], [ %.171200, %723 ]
  %737 = icmp ne ptr %.191202, null
  %738 = icmp ne ptr %.191223, null
  %or.cond53 = and i1 %738, %737
  %739 = icmp eq i32 %.17, 0
  %or.cond55 = select i1 %or.cond53, i1 %739, i1 false
  br i1 %or.cond55, label %740, label %774

740:                                              ; preds = %736
  %741 = uitofp i64 %669 to double
  %742 = fdiv double 1.000000e+00, %741
  %743 = fadd double %742, %742
  %744 = load i64, ptr %2, align 16, !tbaa !9
  %745 = load i64, ptr %667, align 8, !tbaa !9
  %746 = trunc i64 %745 to i32
  %747 = icmp sgt i32 %746, 0
  br i1 %747, label %.preheader1446.lr.ph, label %._crit_edge1571

.preheader1446.lr.ph:                             ; preds = %740
  %748 = trunc i64 %744 to i32
  %749 = icmp sgt i32 %748, 0
  %750 = sitofp i32 %748 to double
  %wide.trip.count1782 = and i64 %745, 2147483647
  %wide.trip.count1772 = and i64 %744, 2147483647
  %min.iters.check2037 = icmp ult i64 %wide.trip.count1772, 4
  %n.mod.vf2039 = and i64 %744, 3
  %n.vec2040 = sub nsw i64 %wide.trip.count1772, %n.mod.vf2039
  %broadcast.splatinsert2048 = insertelement <4 x double> poison, double %743, i64 0
  %broadcast.splat2049 = shufflevector <4 x double> %broadcast.splatinsert2048, <4 x double> poison, <4 x i32> zeroinitializer
  %cmp.n2051 = icmp eq i64 %n.mod.vf2039, 0
  br label %.preheader1446

.preheader1446:                                   ; preds = %.preheader1446.lr.ph, %._crit_edge1569
  %indvars.iv1779 = phi i64 [ 0, %.preheader1446.lr.ph ], [ %indvars.iv.next1780, %._crit_edge1569 ]
  br i1 %749, label %.lr.ph1565, label %._crit_edge1569

.lr.ph1565:                                       ; preds = %.preheader1446
  %751 = mul i64 %indvars.iv1779, %744
  %752 = trunc nuw nsw i64 %indvars.iv1779 to i32
  %753 = uitofp nneg i32 %752 to double
  %754 = call double @llvm.fmuladd.f64(double %753, double %750, double 1.000000e+00)
  %755 = and i64 %751, 4294967295
  br i1 %min.iters.check2037, label %scalar.ph2036.preheader, label %vector.ph2038

vector.ph2038:                                    ; preds = %.lr.ph1565
  %broadcast.splatinsert2046 = insertelement <4 x double> poison, double %754, i64 0
  %broadcast.splat2047 = shufflevector <4 x double> %broadcast.splatinsert2046, <4 x double> poison, <4 x i32> zeroinitializer
  br label %vector.body2042

vector.body2042:                                  ; preds = %vector.body2042, %vector.ph2038
  %index2043 = phi i64 [ 0, %vector.ph2038 ], [ %index.next2050, %vector.body2042 ]
  %vec.ind2044 = phi <4 x i32> [ <i32 0, i32 1, i32 2, i32 3>, %vector.ph2038 ], [ %vec.ind.next2045, %vector.body2042 ]
  %756 = add nuw nsw i64 %index2043, %755
  %757 = uitofp <4 x i32> %vec.ind2044 to <4 x double>
  %758 = fadd <4 x double> %broadcast.splat2047, %757
  %759 = fmul <4 x double> %broadcast.splat2049, %758
  %760 = fptrunc <4 x double> %759 to <4 x float>
  %761 = getelementptr inbounds float, ptr %.191202, i64 %756
  store <4 x float> %760, ptr %761, align 4, !tbaa !11
  %index.next2050 = add nuw i64 %index2043, 4
  %vec.ind.next2045 = add <4 x i32> %vec.ind2044, <i32 4, i32 4, i32 4, i32 4>
  %762 = icmp eq i64 %index.next2050, %n.vec2040
  br i1 %762, label %middle.block2035, label %vector.body2042, !llvm.loop !55

middle.block2035:                                 ; preds = %vector.body2042
  br i1 %cmp.n2051, label %._crit_edge1569, label %scalar.ph2036.preheader

scalar.ph2036.preheader:                          ; preds = %middle.block2035, %.lr.ph1565
  %indvars.iv1769.ph = phi i64 [ 0, %.lr.ph1565 ], [ %n.vec2040, %middle.block2035 ]
  br label %scalar.ph2036

scalar.ph2036:                                    ; preds = %scalar.ph2036.preheader, %scalar.ph2036
  %indvars.iv1769 = phi i64 [ %indvars.iv.next1770, %scalar.ph2036 ], [ %indvars.iv1769.ph, %scalar.ph2036.preheader ]
  %763 = add nuw nsw i64 %indvars.iv1769, %755
  %764 = trunc nuw nsw i64 %indvars.iv1769 to i32
  %765 = uitofp nneg i32 %764 to double
  %766 = fadd double %754, %765
  %767 = fmul double %743, %766
  %768 = fptrunc double %767 to float
  %769 = getelementptr inbounds float, ptr %.191202, i64 %763
  store float %768, ptr %769, align 4, !tbaa !11
  %indvars.iv.next1770 = add nuw nsw i64 %indvars.iv1769, 1
  %exitcond1773.not = icmp eq i64 %indvars.iv.next1770, %wide.trip.count1772
  br i1 %exitcond1773.not, label %._crit_edge1569, label %scalar.ph2036, !llvm.loop !56

._crit_edge1569:                                  ; preds = %scalar.ph2036, %middle.block2035, %.preheader1446
  %indvars.iv.next1780 = add nuw nsw i64 %indvars.iv1779, 1
  %exitcond1783.not = icmp eq i64 %indvars.iv.next1780, %wide.trip.count1782
  br i1 %exitcond1783.not, label %._crit_edge1571, label %.preheader1446, !llvm.loop !57

._crit_edge1571:                                  ; preds = %._crit_edge1569, %740
  call void @libxsmm_rne_convert_fp32_hf8(ptr noundef nonnull %.191202, ptr noundef nonnull %.191223, i64 noundef %669) #8
  call void @libxsmm_convert_hf8_f32(ptr noundef nonnull %.191223, ptr noundef nonnull %.191202, i64 noundef %669) #8
  %770 = load i64, ptr %3, align 8, !tbaa !9
  %771 = load i64, ptr %4, align 8, !tbaa !9
  %772 = load i32, ptr %1, align 4, !tbaa !5
  %773 = call i32 @libxsmm_mhd_write(ptr noundef nonnull @.str.8, ptr noundef null, ptr noundef nonnull %2, ptr noundef null, i64 noundef %770, i64 noundef %771, i32 noundef %772, ptr noundef null, ptr noundef nonnull %.191202, ptr noundef null, ptr noundef null, ptr noundef null, i64 noundef 0) #8
  br label %774

774:                                              ; preds = %._crit_edge1571, %736, %._crit_edge1579, %684
  %.201224 = phi ptr [ %.181222, %684 ], [ %.181222, %._crit_edge1579 ], [ %.191223, %736 ], [ %.191223, %._crit_edge1571 ]
  %.201203 = phi ptr [ %.181201, %684 ], [ %.181201, %._crit_edge1579 ], [ %.191202, %736 ], [ %.191202, %._crit_edge1571 ]
  %.20 = phi i32 [ 1, %684 ], [ %722, %._crit_edge1579 ], [ 1, %736 ], [ %773, %._crit_edge1571 ]
  call void @free(ptr noundef %.201224) #8
  call void @free(ptr noundef %.201203) #8
  call void @llvm.lifetime.end.p0(i64 1024, ptr nonnull %6) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %5) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %4) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %3) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %2) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %1) #8
  ret i32 %.20
}

; Function Attrs: mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.start.p0(i64 immarg, ptr nocapture) #1

; Function Attrs: mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #2

declare ptr @libxsmm_rng_create_extstate(i32 noundef) local_unnamed_addr #3

declare i32 @libxsmm_mhd_read_header(ptr noundef, i64 noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #3

; Function Attrs: mustprogress nounwind willreturn allockind("free") memory(argmem: readwrite, inaccessiblemem: readwrite)
declare void @free(ptr allocptr nocapture noundef) local_unnamed_addr #4

; Function Attrs: mustprogress nofree nounwind willreturn allockind("alloc,uninitialized") allocsize(0) memory(inaccessiblemem: readwrite)
declare noalias noundef ptr @malloc(i64 noundef) local_unnamed_addr #5

; Function Attrs: noreturn nounwind
declare void @__assert_fail(ptr noundef, ptr noundef, i32 noundef, ptr noundef) local_unnamed_addr #6

; Function Attrs: mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare double @llvm.fmuladd.f64(double, double, double) #7

; Function Attrs: mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.end.p0(i64 immarg, ptr nocapture) #1

declare void @libxsmm_truncate_convert_f32_bf16(ptr noundef, ptr noundef, i64 noundef) local_unnamed_addr #3

declare void @libxsmm_convert_bf16_f32(ptr noundef, ptr noundef, i64 noundef) local_unnamed_addr #3

declare i32 @libxsmm_mhd_read(ptr noundef, ptr noundef, ptr noundef, ptr noundef, i64 noundef, i64 noundef, i64 noundef, i32 noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, i64 noundef) local_unnamed_addr #3

declare i32 @libxsmm_mhd_element_comparison(ptr noundef, i32 noundef, i32 noundef, ptr noundef, ptr noundef, ptr noundef) #3

declare i32 @libxsmm_mhd_write(ptr noundef, ptr noundef, ptr noundef, ptr noundef, i64 noundef, i64 noundef, i32 noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, i64 noundef) local_unnamed_addr #3

declare void @libxsmm_rnaz_convert_fp32_bf16(ptr noundef, ptr noundef, i64 noundef) local_unnamed_addr #3

declare void @libxsmm_rne_convert_fp32_bf16(ptr noundef, ptr noundef, i64 noundef) local_unnamed_addr #3

declare void @libxsmm_rne_convert_fp32_f16(ptr noundef, ptr noundef, i64 noundef) local_unnamed_addr #3

declare void @libxsmm_convert_f16_f32(ptr noundef, ptr noundef, i64 noundef) local_unnamed_addr #3

declare void @libxsmm_rne_convert_fp32_bf8(ptr noundef, ptr noundef, i64 noundef) local_unnamed_addr #3

declare void @libxsmm_convert_bf8_f32(ptr noundef, ptr noundef, i64 noundef) local_unnamed_addr #3

declare void @libxsmm_stochastic_convert_fp32_bf8(ptr noundef, ptr noundef, i32 noundef, ptr noundef, i32 noundef) local_unnamed_addr #3

declare void @libxsmm_rne_convert_fp32_hf8(ptr noundef, ptr noundef, i64 noundef) local_unnamed_addr #3

declare void @libxsmm_convert_hf8_f32(ptr noundef, ptr noundef, i64 noundef) local_unnamed_addr #3

attributes #0 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #3 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { mustprogress nounwind willreturn allockind("free") memory(argmem: readwrite, inaccessiblemem: readwrite) "alloc-family"="malloc" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { mustprogress nofree nounwind willreturn allockind("alloc,uninitialized") allocsize(0) memory(inaccessiblemem: readwrite) "alloc-family"="malloc" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { noreturn nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #7 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #8 = { nounwind }
attributes #9 = { nounwind allocsize(0) }
attributes #10 = { noreturn nounwind }

!llvm.module.flags = !{!0, !1, !2, !3}
!llvm.ident = !{!4}

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"long", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"float", !7, i64 0}
!13 = distinct !{!13, !14, !15, !16}
!14 = !{!"llvm.loop.mustprogress"}
!15 = !{!"llvm.loop.isvectorized", i32 1}
!16 = !{!"llvm.loop.unroll.runtime.disable"}
!17 = distinct !{!17, !14, !16, !15}
!18 = distinct !{!18, !14}
!19 = distinct !{!19, !14, !15, !16}
!20 = distinct !{!20, !14, !16, !15}
!21 = distinct !{!21, !14}
!22 = distinct !{!22, !14, !15, !16}
!23 = distinct !{!23, !14, !16, !15}
!24 = distinct !{!24, !14}
!25 = distinct !{!25, !14, !15, !16}
!26 = distinct !{!26, !14, !16, !15}
!27 = distinct !{!27, !14}
!28 = distinct !{!28, !14, !15, !16}
!29 = distinct !{!29, !14, !16, !15}
!30 = distinct !{!30, !14}
!31 = distinct !{!31, !14, !15, !16}
!32 = distinct !{!32, !14, !16, !15}
!33 = distinct !{!33, !14}
!34 = distinct !{!34, !14, !15, !16}
!35 = distinct !{!35, !14, !16, !15}
!36 = distinct !{!36, !14}
!37 = distinct !{!37, !14, !15, !16}
!38 = distinct !{!38, !14, !16, !15}
!39 = distinct !{!39, !14}
!40 = distinct !{!40, !14, !15, !16}
!41 = distinct !{!41, !14, !16, !15}
!42 = distinct !{!42, !14}
!43 = distinct !{!43, !14, !15, !16}
!44 = distinct !{!44, !14, !16, !15}
!45 = distinct !{!45, !14}
!46 = distinct !{!46, !14, !15, !16}
!47 = distinct !{!47, !14, !16, !15}
!48 = distinct !{!48, !14}
!49 = distinct !{!49, !14, !15, !16}
!50 = distinct !{!50, !14, !16, !15}
!51 = distinct !{!51, !14}
!52 = distinct !{!52, !14, !15, !16}
!53 = distinct !{!53, !14, !16, !15}
!54 = distinct !{!54, !14}
!55 = distinct !{!55, !14, !15, !16}
!56 = distinct !{!56, !14, !16, !15}
!57 = distinct !{!57, !14}


; Effective O3 passes: ADCEPass,ConstantMergePass,CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,JumpThreadingPass,LCSSAPass,LICMPass,LoopLoadEliminationPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,LoopVectorizePass,ReassociatePass,SROAPass,SimplifyCFGPass,TailCallElimPass