; LLVM IR from libxsmm/libxsmm :: src (libxsmm_math)

; 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"

%struct.libxsmm_matdiff_info = type { double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, i32, i32, i32, i32 }

@.str = external hidden unnamed_addr constant [24 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [71 x i8], align 1
@__PRETTY_FUNCTION__.libxsmm_matdiff = external hidden unnamed_addr constant [174 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [19 x i8], align 1
@libxsmm_matdiff.error_once = external hidden global i32, align 4
@libxsmm_verbosity = external global i32, align 4
@stderr = external global ptr, align 8
@.str.4 = external hidden unnamed_addr constant [49 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [63 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [68 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [13 x i8], align 1
@libxsmm_ninit = external global i32, align 4
@.str.9 = external hidden unnamed_addr constant [59 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [59 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local i32 @libxsmm_matdiff(ptr noundef %0, i32 noundef %1, i32 noundef %2, i32 noundef %3, ptr noundef %4, ptr noundef %5, ptr noundef %6, ptr noundef %7) #0 {
  %9 = alloca ptr, align 8
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  %13 = alloca ptr, align 8
  %14 = alloca ptr, align 8
  %15 = alloca ptr, align 8
  %16 = alloca ptr, align 8
  %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 ptr, align 8
  %23 = alloca i32, align 4
  %24 = alloca i64, align 8
  %25 = alloca i32, align 4
  %26 = alloca i32, align 4
  %27 = alloca double, align 8
  %28 = alloca ptr, align 8
  %29 = alloca ptr, align 8
  %30 = alloca double, align 8
  %31 = alloca double, align 8
  %32 = alloca double, align 8
  %33 = alloca double, align 8
  %34 = alloca double, align 8
  %35 = alloca double, align 8
  %36 = alloca double, align 8
  %37 = alloca double, align 8
  %38 = alloca double, align 8
  %39 = alloca double, align 8
  %40 = alloca double, align 8
  %41 = alloca double, align 8
  %42 = alloca i32, align 4
  %43 = alloca i32, align 4
  %44 = alloca double, align 8
  %45 = alloca double, align 8
  %46 = alloca double, align 8
  %47 = alloca double, align 8
  %48 = alloca double, align 8
  %49 = alloca double, align 8
  %50 = alloca double, align 8
  %51 = alloca double, align 8
  %52 = alloca i32, align 4
  %53 = alloca i32, align 4
  %54 = alloca double, align 8
  %55 = alloca double, align 8
  %56 = alloca double, align 8
  %57 = alloca double, align 8
  %58 = alloca double, align 8
  %59 = alloca double, align 8
  %60 = alloca i32, align 4
  %61 = alloca double, align 8
  %62 = alloca double, align 8
  %63 = alloca double, align 8
  %64 = alloca double, align 8
  %65 = alloca double, align 8
  %66 = alloca double, align 8
  %67 = alloca double, align 8
  %68 = alloca double, align 8
  %69 = alloca i32, align 4
  %70 = alloca i32, align 4
  %71 = alloca double, align 8
  %72 = alloca double, align 8
  %73 = alloca double, align 8
  %74 = alloca double, align 8
  %75 = alloca double, align 8
  %76 = alloca double, align 8
  %77 = alloca double, align 8
  %78 = alloca ptr, align 8
  %79 = alloca ptr, align 8
  %80 = alloca double, align 8
  %81 = alloca double, align 8
  %82 = alloca double, align 8
  %83 = alloca double, align 8
  %84 = alloca double, align 8
  %85 = alloca double, align 8
  %86 = alloca double, align 8
  %87 = alloca double, align 8
  %88 = alloca double, align 8
  %89 = alloca double, align 8
  %90 = alloca double, align 8
  %91 = alloca double, align 8
  %92 = alloca i64, align 8
  %93 = alloca i64, align 8
  %94 = alloca i32, align 4
  %95 = alloca i32, align 4
  %96 = alloca double, align 8
  %97 = alloca double, align 8
  %98 = alloca double, align 8
  %99 = alloca double, align 8
  %100 = alloca double, align 8
  %101 = alloca double, align 8
  %102 = alloca double, align 8
  %103 = alloca double, align 8
  %104 = alloca i64, align 8
  %105 = alloca i32, align 4
  %106 = alloca i32, align 4
  %107 = alloca double, align 8
  %108 = alloca double, align 8
  %109 = alloca double, align 8
  %110 = alloca double, align 8
  %111 = alloca double, align 8
  %112 = alloca double, align 8
  %113 = alloca double, align 8
  %114 = alloca double, align 8
  %115 = alloca double, align 8
  %116 = alloca double, align 8
  %117 = alloca double, align 8
  %118 = alloca double, align 8
  %119 = alloca double, align 8
  %120 = alloca double, align 8
  %121 = alloca i64, align 8
  %122 = alloca i32, align 4
  %123 = alloca i32, align 4
  %124 = alloca double, align 8
  %125 = alloca double, align 8
  %126 = alloca double, align 8
  %127 = alloca double, align 8
  %128 = alloca double, align 8
  %129 = alloca double, align 8
  %130 = alloca double, align 8
  %131 = alloca ptr, align 8
  %132 = alloca ptr, align 8
  %133 = alloca double, align 8
  %134 = alloca double, align 8
  %135 = alloca double, align 8
  %136 = alloca double, align 8
  %137 = alloca double, align 8
  %138 = alloca double, align 8
  %139 = alloca double, align 8
  %140 = alloca double, align 8
  %141 = alloca double, align 8
  %142 = alloca double, align 8
  %143 = alloca double, align 8
  %144 = alloca double, align 8
  %145 = alloca i32, align 4
  %146 = alloca i32, align 4
  %147 = alloca double, align 8
  %148 = alloca double, align 8
  %149 = alloca double, align 8
  %150 = alloca double, align 8
  %151 = alloca double, align 8
  %152 = alloca double, align 8
  %153 = alloca double, align 8
  %154 = alloca double, align 8
  %155 = alloca i32, align 4
  %156 = alloca i32, align 4
  %157 = alloca double, align 8
  %158 = alloca double, align 8
  %159 = alloca double, align 8
  %160 = alloca double, align 8
  %161 = alloca double, align 8
  %162 = alloca double, align 8
  %163 = alloca double, align 8
  %164 = alloca double, align 8
  %165 = alloca double, align 8
  %166 = alloca double, align 8
  %167 = alloca double, align 8
  %168 = alloca double, align 8
  %169 = alloca double, align 8
  %170 = alloca double, align 8
  %171 = alloca i32, align 4
  %172 = alloca i32, align 4
  %173 = alloca double, align 8
  %174 = alloca double, align 8
  %175 = alloca double, align 8
  %176 = alloca double, align 8
  %177 = alloca double, align 8
  %178 = alloca double, align 8
  %179 = alloca double, align 8
  %180 = alloca ptr, align 8
  %181 = alloca ptr, align 8
  %182 = alloca double, align 8
  %183 = alloca double, align 8
  %184 = alloca double, align 8
  %185 = alloca double, align 8
  %186 = alloca double, align 8
  %187 = alloca double, align 8
  %188 = alloca double, align 8
  %189 = alloca double, align 8
  %190 = alloca double, align 8
  %191 = alloca double, align 8
  %192 = alloca double, align 8
  %193 = alloca double, align 8
  %194 = alloca i64, align 8
  %195 = alloca i64, align 8
  %196 = alloca i32, align 4
  %197 = alloca i32, align 4
  %198 = alloca double, align 8
  %199 = alloca double, align 8
  %200 = alloca double, align 8
  %201 = alloca double, align 8
  %202 = alloca double, align 8
  %203 = alloca double, align 8
  %204 = alloca double, align 8
  %205 = alloca double, align 8
  %206 = alloca i64, align 8
  %207 = alloca i32, align 4
  %208 = alloca i32, align 4
  %209 = alloca double, align 8
  %210 = alloca double, align 8
  %211 = alloca double, align 8
  %212 = alloca double, align 8
  %213 = alloca double, align 8
  %214 = alloca double, align 8
  %215 = alloca double, align 8
  %216 = alloca double, align 8
  %217 = alloca double, align 8
  %218 = alloca double, align 8
  %219 = alloca double, align 8
  %220 = alloca double, align 8
  %221 = alloca double, align 8
  %222 = alloca double, align 8
  %223 = alloca i64, align 8
  %224 = alloca i32, align 4
  %225 = alloca i32, align 4
  %226 = alloca double, align 8
  %227 = alloca double, align 8
  %228 = alloca double, align 8
  %229 = alloca double, align 8
  %230 = alloca double, align 8
  %231 = alloca double, align 8
  %232 = alloca double, align 8
  %233 = alloca ptr, align 8
  %234 = alloca ptr, align 8
  %235 = alloca double, align 8
  %236 = alloca double, align 8
  %237 = alloca double, align 8
  %238 = alloca double, align 8
  %239 = alloca double, align 8
  %240 = alloca double, align 8
  %241 = alloca double, align 8
  %242 = alloca double, align 8
  %243 = alloca double, align 8
  %244 = alloca double, align 8
  %245 = alloca double, align 8
  %246 = alloca double, align 8
  %247 = alloca i32, align 4
  %248 = alloca i32, align 4
  %249 = alloca double, align 8
  %250 = alloca double, align 8
  %251 = alloca double, align 8
  %252 = alloca double, align 8
  %253 = alloca double, align 8
  %254 = alloca double, align 8
  %255 = alloca double, align 8
  %256 = alloca double, align 8
  %257 = alloca i32, align 4
  %258 = alloca i32, align 4
  %259 = alloca double, align 8
  %260 = alloca double, align 8
  %261 = alloca double, align 8
  %262 = alloca double, align 8
  %263 = alloca double, align 8
  %264 = alloca double, align 8
  %265 = alloca double, align 8
  %266 = alloca double, align 8
  %267 = alloca double, align 8
  %268 = alloca double, align 8
  %269 = alloca double, align 8
  %270 = alloca double, align 8
  %271 = alloca double, align 8
  %272 = alloca double, align 8
  %273 = alloca i32, align 4
  %274 = alloca i32, align 4
  %275 = alloca double, align 8
  %276 = alloca double, align 8
  %277 = alloca double, align 8
  %278 = alloca double, align 8
  %279 = alloca double, align 8
  %280 = alloca double, align 8
  %281 = alloca double, align 8
  %282 = alloca ptr, align 8
  %283 = alloca ptr, align 8
  %284 = alloca double, align 8
  %285 = alloca double, align 8
  %286 = alloca double, align 8
  %287 = alloca double, align 8
  %288 = alloca double, align 8
  %289 = alloca double, align 8
  %290 = alloca double, align 8
  %291 = alloca double, align 8
  %292 = alloca double, align 8
  %293 = alloca double, align 8
  %294 = alloca double, align 8
  %295 = alloca double, align 8
  %296 = alloca i64, align 8
  %297 = alloca i64, align 8
  %298 = alloca i32, align 4
  %299 = alloca i32, align 4
  %300 = alloca double, align 8
  %301 = alloca double, align 8
  %302 = alloca double, align 8
  %303 = alloca double, align 8
  %304 = alloca double, align 8
  %305 = alloca double, align 8
  %306 = alloca double, align 8
  %307 = alloca double, align 8
  %308 = alloca i64, align 8
  %309 = alloca i32, align 4
  %310 = alloca i32, align 4
  %311 = alloca double, align 8
  %312 = alloca double, align 8
  %313 = alloca double, align 8
  %314 = alloca double, align 8
  %315 = alloca double, align 8
  %316 = alloca double, align 8
  %317 = alloca double, align 8
  %318 = alloca double, align 8
  %319 = alloca double, align 8
  %320 = alloca double, align 8
  %321 = alloca double, align 8
  %322 = alloca double, align 8
  %323 = alloca double, align 8
  %324 = alloca double, align 8
  %325 = alloca i64, align 8
  %326 = alloca i32, align 4
  %327 = alloca i32, align 4
  %328 = alloca double, align 8
  %329 = alloca double, align 8
  %330 = alloca double, align 8
  %331 = alloca double, align 8
  %332 = alloca double, align 8
  %333 = alloca double, align 8
  %334 = alloca double, align 8
  %335 = alloca ptr, align 8
  %336 = alloca ptr, align 8
  %337 = alloca double, align 8
  %338 = alloca double, align 8
  %339 = alloca double, align 8
  %340 = alloca double, align 8
  %341 = alloca double, align 8
  %342 = alloca double, align 8
  %343 = alloca double, align 8
  %344 = alloca double, align 8
  %345 = alloca double, align 8
  %346 = alloca double, align 8
  %347 = alloca double, align 8
  %348 = alloca double, align 8
  %349 = alloca i32, align 4
  %350 = alloca i32, align 4
  %351 = alloca double, align 8
  %352 = alloca double, align 8
  %353 = alloca double, align 8
  %354 = alloca double, align 8
  %355 = alloca double, align 8
  %356 = alloca double, align 8
  %357 = alloca double, align 8
  %358 = alloca double, align 8
  %359 = alloca i32, align 4
  %360 = alloca i32, align 4
  %361 = alloca double, align 8
  %362 = alloca double, align 8
  %363 = alloca double, align 8
  %364 = alloca double, align 8
  %365 = alloca double, align 8
  %366 = alloca double, align 8
  %367 = alloca double, align 8
  %368 = alloca double, align 8
  %369 = alloca double, align 8
  %370 = alloca double, align 8
  %371 = alloca double, align 8
  %372 = alloca double, align 8
  %373 = alloca double, align 8
  %374 = alloca double, align 8
  %375 = alloca i32, align 4
  %376 = alloca i32, align 4
  %377 = alloca double, align 8
  %378 = alloca double, align 8
  %379 = alloca double, align 8
  %380 = alloca double, align 8
  %381 = alloca double, align 8
  %382 = alloca double, align 8
  %383 = alloca double, align 8
  %384 = alloca ptr, align 8
  %385 = alloca ptr, align 8
  %386 = alloca double, align 8
  %387 = alloca double, align 8
  %388 = alloca double, align 8
  %389 = alloca double, align 8
  %390 = alloca double, align 8
  %391 = alloca double, align 8
  %392 = alloca double, align 8
  %393 = alloca double, align 8
  %394 = alloca double, align 8
  %395 = alloca double, align 8
  %396 = alloca double, align 8
  %397 = alloca double, align 8
  %398 = alloca i64, align 8
  %399 = alloca i64, align 8
  %400 = alloca i32, align 4
  %401 = alloca i32, align 4
  %402 = alloca double, align 8
  %403 = alloca double, align 8
  %404 = alloca double, align 8
  %405 = alloca double, align 8
  %406 = alloca double, align 8
  %407 = alloca double, align 8
  %408 = alloca double, align 8
  %409 = alloca double, align 8
  %410 = alloca i64, align 8
  %411 = alloca i32, align 4
  %412 = alloca i32, align 4
  %413 = alloca double, align 8
  %414 = alloca double, align 8
  %415 = alloca double, align 8
  %416 = alloca double, align 8
  %417 = alloca double, align 8
  %418 = alloca double, align 8
  %419 = alloca double, align 8
  %420 = alloca double, align 8
  %421 = alloca double, align 8
  %422 = alloca double, align 8
  %423 = alloca double, align 8
  %424 = alloca double, align 8
  %425 = alloca double, align 8
  %426 = alloca double, align 8
  %427 = alloca i64, align 8
  %428 = alloca i32, align 4
  %429 = alloca i32, align 4
  %430 = alloca double, align 8
  %431 = alloca double, align 8
  %432 = alloca double, align 8
  %433 = alloca double, align 8
  %434 = alloca double, align 8
  %435 = alloca double, align 8
  %436 = alloca double, align 8
  %437 = alloca ptr, align 8
  %438 = alloca ptr, align 8
  %439 = alloca double, align 8
  %440 = alloca double, align 8
  %441 = alloca double, align 8
  %442 = alloca double, align 8
  %443 = alloca double, align 8
  %444 = alloca double, align 8
  %445 = alloca double, align 8
  %446 = alloca double, align 8
  %447 = alloca double, align 8
  %448 = alloca double, align 8
  %449 = alloca double, align 8
  %450 = alloca double, align 8
  %451 = alloca i32, align 4
  %452 = alloca i32, align 4
  %453 = alloca double, align 8
  %454 = alloca double, align 8
  %455 = alloca double, align 8
  %456 = alloca double, align 8
  %457 = alloca double, align 8
  %458 = alloca double, align 8
  %459 = alloca double, align 8
  %460 = alloca double, align 8
  %461 = alloca i32, align 4
  %462 = alloca i32, align 4
  %463 = alloca double, align 8
  %464 = alloca double, align 8
  %465 = alloca double, align 8
  %466 = alloca double, align 8
  %467 = alloca double, align 8
  %468 = alloca double, align 8
  %469 = alloca double, align 8
  %470 = alloca double, align 8
  %471 = alloca double, align 8
  %472 = alloca double, align 8
  %473 = alloca double, align 8
  %474 = alloca double, align 8
  %475 = alloca double, align 8
  %476 = alloca double, align 8
  %477 = alloca i32, align 4
  %478 = alloca i32, align 4
  %479 = alloca double, align 8
  %480 = alloca double, align 8
  %481 = alloca double, align 8
  %482 = alloca double, align 8
  %483 = alloca double, align 8
  %484 = alloca double, align 8
  %485 = alloca double, align 8
  %486 = alloca ptr, align 8
  %487 = alloca ptr, align 8
  %488 = alloca double, align 8
  %489 = alloca double, align 8
  %490 = alloca double, align 8
  %491 = alloca double, align 8
  %492 = alloca double, align 8
  %493 = alloca double, align 8
  %494 = alloca double, align 8
  %495 = alloca double, align 8
  %496 = alloca double, align 8
  %497 = alloca double, align 8
  %498 = alloca double, align 8
  %499 = alloca double, align 8
  %500 = alloca i64, align 8
  %501 = alloca i64, align 8
  %502 = alloca i32, align 4
  %503 = alloca i32, align 4
  %504 = alloca double, align 8
  %505 = alloca double, align 8
  %506 = alloca double, align 8
  %507 = alloca double, align 8
  %508 = alloca double, align 8
  %509 = alloca double, align 8
  %510 = alloca double, align 8
  %511 = alloca double, align 8
  %512 = alloca i64, align 8
  %513 = alloca i32, align 4
  %514 = alloca i32, align 4
  %515 = alloca double, align 8
  %516 = alloca double, align 8
  %517 = alloca double, align 8
  %518 = alloca double, align 8
  %519 = alloca double, align 8
  %520 = alloca double, align 8
  %521 = alloca double, align 8
  %522 = alloca double, align 8
  %523 = alloca double, align 8
  %524 = alloca double, align 8
  %525 = alloca double, align 8
  %526 = alloca double, align 8
  %527 = alloca double, align 8
  %528 = alloca double, align 8
  %529 = alloca i64, align 8
  %530 = alloca i32, align 4
  %531 = alloca i32, align 4
  %532 = alloca double, align 8
  %533 = alloca double, align 8
  %534 = alloca double, align 8
  %535 = alloca double, align 8
  %536 = alloca double, align 8
  %537 = alloca double, align 8
  %538 = alloca double, align 8
  %539 = alloca ptr, align 8
  %540 = alloca ptr, align 8
  %541 = alloca double, align 8
  %542 = alloca double, align 8
  %543 = alloca double, align 8
  %544 = alloca double, align 8
  %545 = alloca double, align 8
  %546 = alloca double, align 8
  %547 = alloca double, align 8
  %548 = alloca double, align 8
  %549 = alloca double, align 8
  %550 = alloca double, align 8
  %551 = alloca double, align 8
  %552 = alloca double, align 8
  %553 = alloca i32, align 4
  %554 = alloca i32, align 4
  %555 = alloca double, align 8
  %556 = alloca double, align 8
  %557 = alloca double, align 8
  %558 = alloca double, align 8
  %559 = alloca double, align 8
  %560 = alloca double, align 8
  %561 = alloca double, align 8
  %562 = alloca double, align 8
  %563 = alloca i32, align 4
  %564 = alloca i32, align 4
  %565 = alloca double, align 8
  %566 = alloca double, align 8
  %567 = alloca double, align 8
  %568 = alloca double, align 8
  %569 = alloca double, align 8
  %570 = alloca double, align 8
  %571 = alloca double, align 8
  %572 = alloca double, align 8
  %573 = alloca double, align 8
  %574 = alloca double, align 8
  %575 = alloca double, align 8
  %576 = alloca double, align 8
  %577 = alloca double, align 8
  %578 = alloca double, align 8
  %579 = alloca i32, align 4
  %580 = alloca i32, align 4
  %581 = alloca double, align 8
  %582 = alloca double, align 8
  %583 = alloca double, align 8
  %584 = alloca double, align 8
  %585 = alloca double, align 8
  %586 = alloca double, align 8
  %587 = alloca double, align 8
  %588 = alloca ptr, align 8
  %589 = alloca ptr, align 8
  %590 = alloca double, align 8
  %591 = alloca double, align 8
  %592 = alloca double, align 8
  %593 = alloca double, align 8
  %594 = alloca double, align 8
  %595 = alloca double, align 8
  %596 = alloca double, align 8
  %597 = alloca double, align 8
  %598 = alloca double, align 8
  %599 = alloca double, align 8
  %600 = alloca double, align 8
  %601 = alloca double, align 8
  %602 = alloca i64, align 8
  %603 = alloca i64, align 8
  %604 = alloca i32, align 4
  %605 = alloca i32, align 4
  %606 = alloca double, align 8
  %607 = alloca double, align 8
  %608 = alloca double, align 8
  %609 = alloca double, align 8
  %610 = alloca double, align 8
  %611 = alloca double, align 8
  %612 = alloca double, align 8
  %613 = alloca double, align 8
  %614 = alloca i64, align 8
  %615 = alloca i32, align 4
  %616 = alloca i32, align 4
  %617 = alloca double, align 8
  %618 = alloca double, align 8
  %619 = alloca double, align 8
  %620 = alloca double, align 8
  %621 = alloca double, align 8
  %622 = alloca double, align 8
  %623 = alloca double, align 8
  %624 = alloca double, align 8
  %625 = alloca double, align 8
  %626 = alloca double, align 8
  %627 = alloca double, align 8
  %628 = alloca double, align 8
  %629 = alloca double, align 8
  %630 = alloca double, align 8
  %631 = alloca i64, align 8
  %632 = alloca i32, align 4
  %633 = alloca i32, align 4
  %634 = alloca double, align 8
  %635 = alloca double, align 8
  %636 = alloca double, align 8
  %637 = alloca double, align 8
  %638 = alloca double, align 8
  %639 = alloca double, align 8
  %640 = alloca double, align 8
  %641 = alloca ptr, align 8
  %642 = alloca ptr, align 8
  %643 = alloca double, align 8
  %644 = alloca double, align 8
  %645 = alloca double, align 8
  %646 = alloca double, align 8
  %647 = alloca double, align 8
  %648 = alloca double, align 8
  %649 = alloca double, align 8
  %650 = alloca double, align 8
  %651 = alloca double, align 8
  %652 = alloca double, align 8
  %653 = alloca double, align 8
  %654 = alloca double, align 8
  %655 = alloca i32, align 4
  %656 = alloca i32, align 4
  %657 = alloca double, align 8
  %658 = alloca double, align 8
  %659 = alloca double, align 8
  %660 = alloca double, align 8
  %661 = alloca double, align 8
  %662 = alloca double, align 8
  %663 = alloca double, align 8
  %664 = alloca double, align 8
  %665 = alloca i32, align 4
  %666 = alloca i32, align 4
  %667 = alloca double, align 8
  %668 = alloca double, align 8
  %669 = alloca double, align 8
  %670 = alloca double, align 8
  %671 = alloca double, align 8
  %672 = alloca double, align 8
  %673 = alloca double, align 8
  %674 = alloca double, align 8
  %675 = alloca double, align 8
  %676 = alloca double, align 8
  %677 = alloca double, align 8
  %678 = alloca double, align 8
  %679 = alloca double, align 8
  %680 = alloca double, align 8
  %681 = alloca i32, align 4
  %682 = alloca i32, align 4
  %683 = alloca double, align 8
  %684 = alloca double, align 8
  %685 = alloca double, align 8
  %686 = alloca double, align 8
  %687 = alloca double, align 8
  %688 = alloca double, align 8
  %689 = alloca double, align 8
  %690 = alloca ptr, align 8
  %691 = alloca ptr, align 8
  %692 = alloca double, align 8
  %693 = alloca double, align 8
  %694 = alloca double, align 8
  %695 = alloca double, align 8
  %696 = alloca double, align 8
  %697 = alloca double, align 8
  %698 = alloca double, align 8
  %699 = alloca double, align 8
  %700 = alloca double, align 8
  %701 = alloca double, align 8
  %702 = alloca double, align 8
  %703 = alloca double, align 8
  %704 = alloca i64, align 8
  %705 = alloca i64, align 8
  %706 = alloca i32, align 4
  %707 = alloca i32, align 4
  %708 = alloca double, align 8
  %709 = alloca double, align 8
  %710 = alloca double, align 8
  %711 = alloca double, align 8
  %712 = alloca double, align 8
  %713 = alloca double, align 8
  %714 = alloca double, align 8
  %715 = alloca double, align 8
  %716 = alloca i64, align 8
  %717 = alloca i32, align 4
  %718 = alloca i32, align 4
  %719 = alloca double, align 8
  %720 = alloca double, align 8
  %721 = alloca double, align 8
  %722 = alloca double, align 8
  %723 = alloca double, align 8
  %724 = alloca double, align 8
  %725 = alloca double, align 8
  %726 = alloca double, align 8
  %727 = alloca double, align 8
  %728 = alloca double, align 8
  %729 = alloca double, align 8
  %730 = alloca double, align 8
  %731 = alloca double, align 8
  %732 = alloca double, align 8
  %733 = alloca i64, align 8
  %734 = alloca i32, align 4
  %735 = alloca i32, align 4
  %736 = alloca double, align 8
  %737 = alloca double, align 8
  %738 = alloca double, align 8
  %739 = alloca double, align 8
  %740 = alloca double, align 8
  %741 = alloca double, align 8
  %742 = alloca double, align 8
  %743 = alloca ptr, align 8
  %744 = alloca ptr, align 8
  %745 = alloca double, align 8
  %746 = alloca double, align 8
  %747 = alloca double, align 8
  %748 = alloca double, align 8
  %749 = alloca double, align 8
  %750 = alloca double, align 8
  %751 = alloca double, align 8
  %752 = alloca double, align 8
  %753 = alloca double, align 8
  %754 = alloca double, align 8
  %755 = alloca double, align 8
  %756 = alloca double, align 8
  %757 = alloca i32, align 4
  %758 = alloca i32, align 4
  %759 = alloca double, align 8
  %760 = alloca double, align 8
  %761 = alloca double, align 8
  %762 = alloca double, align 8
  %763 = alloca double, align 8
  %764 = alloca double, align 8
  %765 = alloca double, align 8
  %766 = alloca double, align 8
  %767 = alloca i32, align 4
  %768 = alloca i32, align 4
  %769 = alloca double, align 8
  %770 = alloca double, align 8
  %771 = alloca double, align 8
  %772 = alloca double, align 8
  %773 = alloca double, align 8
  %774 = alloca double, align 8
  %775 = alloca double, align 8
  %776 = alloca double, align 8
  %777 = alloca double, align 8
  %778 = alloca double, align 8
  %779 = alloca double, align 8
  %780 = alloca double, align 8
  %781 = alloca double, align 8
  %782 = alloca double, align 8
  %783 = alloca i32, align 4
  %784 = alloca i32, align 4
  %785 = alloca double, align 8
  %786 = alloca double, align 8
  %787 = alloca double, align 8
  %788 = alloca double, align 8
  %789 = alloca double, align 8
  %790 = alloca double, align 8
  %791 = alloca double, align 8
  %792 = alloca ptr, align 8
  %793 = alloca ptr, align 8
  %794 = alloca double, align 8
  %795 = alloca double, align 8
  %796 = alloca double, align 8
  %797 = alloca double, align 8
  %798 = alloca double, align 8
  %799 = alloca double, align 8
  %800 = alloca double, align 8
  %801 = alloca double, align 8
  %802 = alloca double, align 8
  %803 = alloca double, align 8
  %804 = alloca double, align 8
  %805 = alloca double, align 8
  %806 = alloca i64, align 8
  %807 = alloca i64, align 8
  %808 = alloca i32, align 4
  %809 = alloca i32, align 4
  %810 = alloca double, align 8
  %811 = alloca double, align 8
  %812 = alloca double, align 8
  %813 = alloca double, align 8
  %814 = alloca double, align 8
  %815 = alloca double, align 8
  %816 = alloca double, align 8
  %817 = alloca double, align 8
  %818 = alloca i64, align 8
  %819 = alloca i32, align 4
  %820 = alloca i32, align 4
  %821 = alloca double, align 8
  %822 = alloca double, align 8
  %823 = alloca double, align 8
  %824 = alloca double, align 8
  %825 = alloca double, align 8
  %826 = alloca double, align 8
  %827 = alloca double, align 8
  %828 = alloca double, align 8
  %829 = alloca double, align 8
  %830 = alloca double, align 8
  %831 = alloca double, align 8
  %832 = alloca double, align 8
  %833 = alloca double, align 8
  %834 = alloca double, align 8
  %835 = alloca i64, align 8
  %836 = alloca i32, align 4
  %837 = alloca i32, align 4
  %838 = alloca double, align 8
  %839 = alloca double, align 8
  %840 = alloca double, align 8
  %841 = alloca double, align 8
  %842 = alloca double, align 8
  %843 = alloca double, align 8
  %844 = alloca double, align 8
  %845 = alloca ptr, align 8
  %846 = alloca ptr, align 8
  %847 = alloca double, align 8
  %848 = alloca double, align 8
  %849 = alloca double, align 8
  %850 = alloca double, align 8
  %851 = alloca double, align 8
  %852 = alloca double, align 8
  %853 = alloca double, align 8
  %854 = alloca double, align 8
  %855 = alloca double, align 8
  %856 = alloca double, align 8
  %857 = alloca double, align 8
  %858 = alloca double, align 8
  %859 = alloca i32, align 4
  %860 = alloca i32, align 4
  %861 = alloca double, align 8
  %862 = alloca double, align 8
  %863 = alloca double, align 8
  %864 = alloca double, align 8
  %865 = alloca double, align 8
  %866 = alloca double, align 8
  %867 = alloca double, align 8
  %868 = alloca double, align 8
  %869 = alloca i32, align 4
  %870 = alloca i32, align 4
  %871 = alloca double, align 8
  %872 = alloca double, align 8
  %873 = alloca double, align 8
  %874 = alloca double, align 8
  %875 = alloca double, align 8
  %876 = alloca double, align 8
  %877 = alloca double, align 8
  %878 = alloca double, align 8
  %879 = alloca double, align 8
  %880 = alloca double, align 8
  %881 = alloca double, align 8
  %882 = alloca double, align 8
  %883 = alloca double, align 8
  %884 = alloca double, align 8
  %885 = alloca i32, align 4
  %886 = alloca i32, align 4
  %887 = alloca double, align 8
  %888 = alloca double, align 8
  %889 = alloca double, align 8
  %890 = alloca double, align 8
  %891 = alloca double, align 8
  %892 = alloca double, align 8
  %893 = alloca double, align 8
  %894 = alloca ptr, align 8
  %895 = alloca ptr, align 8
  %896 = alloca double, align 8
  %897 = alloca double, align 8
  %898 = alloca double, align 8
  %899 = alloca double, align 8
  %900 = alloca double, align 8
  %901 = alloca double, align 8
  %902 = alloca double, align 8
  %903 = alloca double, align 8
  %904 = alloca double, align 8
  %905 = alloca double, align 8
  %906 = alloca double, align 8
  %907 = alloca double, align 8
  %908 = alloca i64, align 8
  %909 = alloca i64, align 8
  %910 = alloca i32, align 4
  %911 = alloca i32, align 4
  %912 = alloca double, align 8
  %913 = alloca double, align 8
  %914 = alloca double, align 8
  %915 = alloca double, align 8
  %916 = alloca double, align 8
  %917 = alloca double, align 8
  %918 = alloca double, align 8
  %919 = alloca double, align 8
  %920 = alloca i64, align 8
  %921 = alloca i32, align 4
  %922 = alloca i32, align 4
  %923 = alloca double, align 8
  %924 = alloca double, align 8
  %925 = alloca double, align 8
  %926 = alloca double, align 8
  %927 = alloca double, align 8
  %928 = alloca double, align 8
  %929 = alloca double, align 8
  %930 = alloca double, align 8
  %931 = alloca double, align 8
  %932 = alloca double, align 8
  %933 = alloca double, align 8
  %934 = alloca double, align 8
  %935 = alloca double, align 8
  %936 = alloca double, align 8
  %937 = alloca i64, align 8
  %938 = alloca i32, align 4
  %939 = alloca i32, align 4
  %940 = alloca double, align 8
  %941 = alloca double, align 8
  %942 = alloca double, align 8
  %943 = alloca double, align 8
  %944 = alloca double, align 8
  %945 = alloca double, align 8
  %946 = alloca double, align 8
  %947 = alloca ptr, align 8
  %948 = alloca ptr, align 8
  %949 = alloca double, align 8
  %950 = alloca double, align 8
  %951 = alloca double, align 8
  %952 = alloca double, align 8
  %953 = alloca double, align 8
  %954 = alloca double, align 8
  %955 = alloca double, align 8
  %956 = alloca double, align 8
  %957 = alloca double, align 8
  %958 = alloca double, align 8
  %959 = alloca double, align 8
  %960 = alloca double, align 8
  %961 = alloca i32, align 4
  %962 = alloca i32, align 4
  %963 = alloca double, align 8
  %964 = alloca double, align 8
  %965 = alloca double, align 8
  %966 = alloca double, align 8
  %967 = alloca double, align 8
  %968 = alloca double, align 8
  %969 = alloca double, align 8
  %970 = alloca double, align 8
  %971 = alloca i32, align 4
  %972 = alloca i32, align 4
  %973 = alloca double, align 8
  %974 = alloca double, align 8
  %975 = alloca double, align 8
  %976 = alloca double, align 8
  %977 = alloca double, align 8
  %978 = alloca double, align 8
  %979 = alloca double, align 8
  %980 = alloca double, align 8
  %981 = alloca double, align 8
  %982 = alloca double, align 8
  %983 = alloca double, align 8
  %984 = alloca double, align 8
  %985 = alloca double, align 8
  %986 = alloca double, align 8
  %987 = alloca i32, align 4
  %988 = alloca i32, align 4
  %989 = alloca double, align 8
  %990 = alloca double, align 8
  %991 = alloca double, align 8
  %992 = alloca double, align 8
  %993 = alloca double, align 8
  %994 = alloca double, align 8
  %995 = alloca double, align 8
  %996 = alloca ptr, align 8
  %997 = alloca ptr, align 8
  %998 = alloca double, align 8
  %999 = alloca double, align 8
  %1000 = alloca double, align 8
  %1001 = alloca double, align 8
  %1002 = alloca double, align 8
  %1003 = alloca double, align 8
  %1004 = alloca double, align 8
  %1005 = alloca double, align 8
  %1006 = alloca double, align 8
  %1007 = alloca double, align 8
  %1008 = alloca double, align 8
  %1009 = alloca double, align 8
  %1010 = alloca i64, align 8
  %1011 = alloca i64, align 8
  %1012 = alloca i32, align 4
  %1013 = alloca i32, align 4
  %1014 = alloca double, align 8
  %1015 = alloca double, align 8
  %1016 = alloca double, align 8
  %1017 = alloca double, align 8
  %1018 = alloca double, align 8
  %1019 = alloca double, align 8
  %1020 = alloca double, align 8
  %1021 = alloca double, align 8
  %1022 = alloca i64, align 8
  %1023 = alloca i32, align 4
  %1024 = alloca i32, align 4
  %1025 = alloca double, align 8
  %1026 = alloca double, align 8
  %1027 = alloca double, align 8
  %1028 = alloca double, align 8
  %1029 = alloca double, align 8
  %1030 = alloca double, align 8
  %1031 = alloca double, align 8
  %1032 = alloca double, align 8
  %1033 = alloca double, align 8
  %1034 = alloca double, align 8
  %1035 = alloca double, align 8
  %1036 = alloca double, align 8
  %1037 = alloca double, align 8
  %1038 = alloca double, align 8
  %1039 = alloca i64, align 8
  %1040 = alloca i32, align 4
  %1041 = alloca i32, align 4
  %1042 = alloca double, align 8
  %1043 = alloca double, align 8
  %1044 = alloca double, align 8
  %1045 = alloca double, align 8
  %1046 = alloca double, align 8
  %1047 = alloca double, align 8
  %1048 = alloca double, align 8
  %1049 = alloca ptr, align 8
  %1050 = alloca ptr, align 8
  %1051 = alloca double, align 8
  %1052 = alloca double, align 8
  %1053 = alloca double, align 8
  %1054 = alloca double, align 8
  %1055 = alloca double, align 8
  %1056 = alloca double, align 8
  %1057 = alloca double, align 8
  %1058 = alloca double, align 8
  %1059 = alloca double, align 8
  %1060 = alloca double, align 8
  %1061 = alloca double, align 8
  %1062 = alloca double, align 8
  %1063 = alloca i32, align 4
  %1064 = alloca i32, align 4
  %1065 = alloca double, align 8
  %1066 = alloca double, align 8
  %1067 = alloca double, align 8
  %1068 = alloca double, align 8
  %1069 = alloca double, align 8
  %1070 = alloca double, align 8
  %1071 = alloca double, align 8
  %1072 = alloca double, align 8
  %1073 = alloca i32, align 4
  %1074 = alloca i32, align 4
  %1075 = alloca double, align 8
  %1076 = alloca double, align 8
  %1077 = alloca double, align 8
  %1078 = alloca double, align 8
  %1079 = alloca double, align 8
  %1080 = alloca double, align 8
  %1081 = alloca double, align 8
  %1082 = alloca double, align 8
  %1083 = alloca double, align 8
  %1084 = alloca double, align 8
  %1085 = alloca double, align 8
  %1086 = alloca double, align 8
  %1087 = alloca double, align 8
  %1088 = alloca double, align 8
  %1089 = alloca i32, align 4
  %1090 = alloca i32, align 4
  %1091 = alloca double, align 8
  %1092 = alloca double, align 8
  %1093 = alloca double, align 8
  %1094 = alloca double, align 8
  %1095 = alloca double, align 8
  %1096 = alloca double, align 8
  %1097 = alloca double, align 8
  %1098 = alloca ptr, align 8
  %1099 = alloca ptr, align 8
  %1100 = alloca double, align 8
  %1101 = alloca double, align 8
  %1102 = alloca double, align 8
  %1103 = alloca double, align 8
  %1104 = alloca double, align 8
  %1105 = alloca double, align 8
  %1106 = alloca double, align 8
  %1107 = alloca double, align 8
  %1108 = alloca double, align 8
  %1109 = alloca double, align 8
  %1110 = alloca double, align 8
  %1111 = alloca double, align 8
  %1112 = alloca i64, align 8
  %1113 = alloca i64, align 8
  %1114 = alloca i32, align 4
  %1115 = alloca i32, align 4
  %1116 = alloca double, align 8
  %1117 = alloca double, align 8
  %1118 = alloca double, align 8
  %1119 = alloca double, align 8
  %1120 = alloca double, align 8
  %1121 = alloca double, align 8
  %1122 = alloca double, align 8
  %1123 = alloca double, align 8
  %1124 = alloca i64, align 8
  %1125 = alloca i32, align 4
  %1126 = alloca i32, align 4
  %1127 = alloca double, align 8
  %1128 = alloca double, align 8
  %1129 = alloca double, align 8
  %1130 = alloca double, align 8
  %1131 = alloca double, align 8
  %1132 = alloca double, align 8
  %1133 = alloca double, align 8
  %1134 = alloca double, align 8
  %1135 = alloca double, align 8
  %1136 = alloca double, align 8
  %1137 = alloca double, align 8
  %1138 = alloca double, align 8
  %1139 = alloca double, align 8
  %1140 = alloca double, align 8
  %1141 = alloca i64, align 8
  %1142 = alloca i32, align 4
  %1143 = alloca i32, align 4
  %1144 = alloca double, align 8
  %1145 = alloca double, align 8
  %1146 = alloca double, align 8
  %1147 = alloca double, align 8
  %1148 = alloca double, align 8
  %1149 = alloca double, align 8
  %1150 = alloca double, align 8
  %1151 = alloca ptr, align 8
  %1152 = alloca ptr, align 8
  %1153 = alloca double, align 8
  %1154 = alloca double, align 8
  %1155 = alloca double, align 8
  %1156 = alloca double, align 8
  %1157 = alloca double, align 8
  %1158 = alloca double, align 8
  %1159 = alloca double, align 8
  %1160 = alloca double, align 8
  %1161 = alloca double, align 8
  %1162 = alloca double, align 8
  %1163 = alloca double, align 8
  %1164 = alloca double, align 8
  %1165 = alloca i32, align 4
  %1166 = alloca i32, align 4
  %1167 = alloca double, align 8
  %1168 = alloca double, align 8
  %1169 = alloca double, align 8
  %1170 = alloca double, align 8
  %1171 = alloca double, align 8
  %1172 = alloca double, align 8
  %1173 = alloca double, align 8
  %1174 = alloca double, align 8
  %1175 = alloca i32, align 4
  %1176 = alloca i32, align 4
  %1177 = alloca double, align 8
  %1178 = alloca double, align 8
  %1179 = alloca double, align 8
  %1180 = alloca double, align 8
  %1181 = alloca double, align 8
  %1182 = alloca double, align 8
  %1183 = alloca double, align 8
  %1184 = alloca double, align 8
  %1185 = alloca double, align 8
  %1186 = alloca double, align 8
  %1187 = alloca double, align 8
  %1188 = alloca double, align 8
  %1189 = alloca double, align 8
  %1190 = alloca double, align 8
  %1191 = alloca i32, align 4
  %1192 = alloca i32, align 4
  %1193 = alloca double, align 8
  %1194 = alloca double, align 8
  %1195 = alloca double, align 8
  %1196 = alloca double, align 8
  %1197 = alloca double, align 8
  %1198 = alloca double, align 8
  %1199 = alloca double, align 8
  %1200 = alloca ptr, align 8
  %1201 = alloca ptr, align 8
  %1202 = alloca double, align 8
  %1203 = alloca double, align 8
  %1204 = alloca double, align 8
  %1205 = alloca double, align 8
  %1206 = alloca double, align 8
  %1207 = alloca double, align 8
  %1208 = alloca double, align 8
  %1209 = alloca double, align 8
  %1210 = alloca double, align 8
  %1211 = alloca double, align 8
  %1212 = alloca double, align 8
  %1213 = alloca double, align 8
  %1214 = alloca i64, align 8
  %1215 = alloca i64, align 8
  %1216 = alloca i32, align 4
  %1217 = alloca i32, align 4
  %1218 = alloca double, align 8
  %1219 = alloca double, align 8
  %1220 = alloca double, align 8
  %1221 = alloca double, align 8
  %1222 = alloca double, align 8
  %1223 = alloca double, align 8
  %1224 = alloca double, align 8
  %1225 = alloca double, align 8
  %1226 = alloca i64, align 8
  %1227 = alloca i32, align 4
  %1228 = alloca i32, align 4
  %1229 = alloca double, align 8
  %1230 = alloca double, align 8
  %1231 = alloca double, align 8
  %1232 = alloca double, align 8
  %1233 = alloca double, align 8
  %1234 = alloca double, align 8
  %1235 = alloca double, align 8
  %1236 = alloca double, align 8
  %1237 = alloca double, align 8
  %1238 = alloca double, align 8
  %1239 = alloca double, align 8
  %1240 = alloca double, align 8
  %1241 = alloca double, align 8
  %1242 = alloca double, align 8
  %1243 = alloca i64, align 8
  %1244 = alloca i32, align 4
  %1245 = alloca i32, align 4
  %1246 = alloca double, align 8
  %1247 = alloca double, align 8
  %1248 = alloca double, align 8
  %1249 = alloca double, align 8
  %1250 = alloca double, align 8
  %1251 = alloca double, align 8
  %1252 = alloca double, align 8
  %1253 = alloca ptr, align 8
  %1254 = alloca double, align 8
  store ptr %0, ptr %9, align 8, !tbaa !5
  store i32 %1, ptr %10, align 4, !tbaa !9
  store i32 %2, ptr %11, align 4, !tbaa !9
  store i32 %3, ptr %12, align 4, !tbaa !9
  store ptr %4, ptr %13, align 8, !tbaa !5
  store ptr %5, ptr %14, align 8, !tbaa !5
  store ptr %6, ptr %15, align 8, !tbaa !5
  store ptr %7, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #7
  store i32 0, ptr %17, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #7
  store i32 0, ptr %18, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #7
  store i32 0, ptr %19, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #7
  %1255 = load ptr, ptr %15, align 8, !tbaa !5
  %1256 = icmp eq ptr null, %1255
  br i1 %1256, label %1257, label %1259

1257:                                             ; preds = %8
  %1258 = load i32, ptr %11, align 4, !tbaa !9
  br label %1262

1259:                                             ; preds = %8
  %1260 = load ptr, ptr %15, align 8, !tbaa !5
  %1261 = load i32, ptr %1260, align 4, !tbaa !9
  br label %1262

1262:                                             ; preds = %1259, %1257
  %1263 = phi i32 [ %1258, %1257 ], [ %1261, %1259 ]
  store i32 %1263, ptr %20, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #7
  %1264 = load ptr, ptr %16, align 8, !tbaa !5
  %1265 = icmp eq ptr null, %1264
  br i1 %1265, label %1266, label %1268

1266:                                             ; preds = %1262
  %1267 = load i32, ptr %11, align 4, !tbaa !9
  br label %1271

1268:                                             ; preds = %1262
  %1269 = load ptr, ptr %16, align 8, !tbaa !5
  %1270 = load i32, ptr %1269, align 4, !tbaa !9
  br label %1271

1271:                                             ; preds = %1268, %1266
  %1272 = phi i32 [ %1267, %1266 ], [ %1270, %1268 ]
  store i32 %1272, ptr %21, align 4, !tbaa !9
  %1273 = load ptr, ptr %13, align 8, !tbaa !5
  %1274 = icmp eq ptr null, %1273
  br i1 %1274, label %1275, label %1280

1275:                                             ; preds = %1271
  %1276 = load ptr, ptr %14, align 8, !tbaa !5
  %1277 = icmp ne ptr null, %1276
  br i1 %1277, label %1278, label %1280

1278:                                             ; preds = %1275
  %1279 = load ptr, ptr %14, align 8, !tbaa !5
  store ptr %1279, ptr %13, align 8, !tbaa !5
  store ptr null, ptr %14, align 8, !tbaa !5
  store i32 1, ptr %18, align 4, !tbaa !9
  br label %1280

1280:                                             ; preds = %1278, %1275, %1271
  %1281 = load ptr, ptr %13, align 8, !tbaa !5
  %1282 = icmp ne ptr null, %1281
  br i1 %1282, label %1283, label %15539

1283:                                             ; preds = %1280
  %1284 = load ptr, ptr %9, align 8, !tbaa !5
  %1285 = icmp ne ptr null, %1284
  br i1 %1285, label %1286, label %15539

1286:                                             ; preds = %1283
  %1287 = load i32, ptr %11, align 4, !tbaa !9
  %1288 = load i32, ptr %20, align 4, !tbaa !9
  %1289 = icmp sle i32 %1287, %1288
  br i1 %1289, label %1290, label %15539

1290:                                             ; preds = %1286
  %1291 = load i32, ptr %11, align 4, !tbaa !9
  %1292 = load i32, ptr %21, align 4, !tbaa !9
  %1293 = icmp sle i32 %1291, %1292
  br i1 %1293, label %1294, label %15539

1294:                                             ; preds = %1290
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #7
  %1295 = call ptr @getenv(ptr noundef @.str) #7
  store ptr %1295, ptr %22, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #7
  %1296 = load ptr, ptr %22, align 8, !tbaa !5
  %1297 = icmp eq ptr null, %1296
  br i1 %1297, label %1298, label %1299

1298:                                             ; preds = %1294
  br label %1310

1299:                                             ; preds = %1294
  %1300 = load ptr, ptr %22, align 8, !tbaa !5
  %1301 = load i8, ptr %1300, align 1, !tbaa !11
  %1302 = sext i8 %1301 to i32
  %1303 = icmp ne i32 0, %1302
  br i1 %1303, label %1304, label %1307

1304:                                             ; preds = %1299
  %1305 = load ptr, ptr %22, align 8, !tbaa !5
  %1306 = call i32 @atoi(ptr noundef %1305) #8
  br label %1308

1307:                                             ; preds = %1299
  br label %1308

1308:                                             ; preds = %1307, %1304
  %1309 = phi i32 [ %1306, %1304 ], [ 1, %1307 ]
  br label %1310

1310:                                             ; preds = %1308, %1298
  %1311 = phi i32 [ 0, %1298 ], [ %1309, %1308 ]
  store i32 %1311, ptr %23, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #7
  %1312 = load i32, ptr %11, align 4, !tbaa !9
  %1313 = sext i32 %1312 to i64
  %1314 = load i32, ptr %12, align 4, !tbaa !9
  %1315 = sext i32 %1314 to i64
  %1316 = mul i64 %1313, %1315
  store i64 %1316, ptr %24, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #7
  %1317 = load i32, ptr %11, align 4, !tbaa !9
  store i32 %1317, ptr %25, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #7
  %1318 = load i32, ptr %12, align 4, !tbaa !9
  store i32 %1318, ptr %26, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #7
  %1319 = load i32, ptr %12, align 4, !tbaa !9
  %1320 = icmp eq i32 1, %1319
  br i1 %1320, label %1321, label %1323

1321:                                             ; preds = %1310
  store i32 1, ptr %21, align 4, !tbaa !9
  store i32 1, ptr %20, align 4, !tbaa !9
  store i32 1, ptr %25, align 4, !tbaa !9
  %1322 = load i32, ptr %11, align 4, !tbaa !9
  store i32 %1322, ptr %26, align 4, !tbaa !9
  br label %1323

1323:                                             ; preds = %1321, %1310
  %1324 = load ptr, ptr %9, align 8, !tbaa !5
  call void @libxsmm_matdiff_clear(ptr noundef %1324)
  %1325 = load ptr, ptr %9, align 8, !tbaa !5
  %1326 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %1325, i32 0, i32 11
  %1327 = load double, ptr %1326, align 8, !tbaa !14
  store double %1327, ptr %27, align 8, !tbaa !17
  %1328 = load i32, ptr %10, align 4, !tbaa !9
  switch i32 %1328, label %15189 [
    i32 6, label %1329
    i32 8, label %2482
    i32 9, label %3635
    i32 10, label %4788
    i32 11, label %5941
    i32 12, label %7094
    i32 0, label %8247
    i32 1, label %9392
    i32 3, label %10545
    i32 2, label %11706
    i32 4, label %12867
    i32 5, label %14028
  ]

1329:                                             ; preds = %1323
  %1330 = load i32, ptr %23, align 4, !tbaa !9
  %1331 = icmp eq i32 0, %1330
  br i1 %1331, label %1332, label %1885

1332:                                             ; preds = %1329
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #7
  %1333 = load ptr, ptr %13, align 8, !tbaa !5
  store ptr %1333, ptr %28, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #7
  %1334 = load ptr, ptr %14, align 8, !tbaa !5
  store ptr %1334, ptr %29, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #7
  store double 0.000000e+00, ptr %30, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #7
  store double 0.000000e+00, ptr %31, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #7
  store double 0.000000e+00, ptr %32, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #7
  store double 0.000000e+00, ptr %33, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #7
  store double 0.000000e+00, ptr %34, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #7
  store double 0.000000e+00, ptr %35, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #7
  store double 0.000000e+00, ptr %36, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #7
  store double 0.000000e+00, ptr %37, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #7
  store double 0.000000e+00, ptr %38, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %39) #7
  store double 0.000000e+00, ptr %39, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %40) #7
  store double 0.000000e+00, ptr %40, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %41) #7
  store double 0.000000e+00, ptr %41, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 4, ptr %42) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %43) #7
  store i32 0, ptr %42, align 4, !tbaa !9
  br label %1335

1335:                                             ; preds = %1632, %1332
  %1336 = load i32, ptr %42, align 4, !tbaa !9
  %1337 = load i32, ptr %26, align 4, !tbaa !9
  %1338 = icmp slt i32 %1336, %1337
  br i1 %1338, label %1339, label %1635

1339:                                             ; preds = %1335
  call void @llvm.lifetime.start.p0(i64 8, ptr %44) #7
  store double 0.000000e+00, ptr %44, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %45) #7
  store double 0.000000e+00, ptr %45, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %46) #7
  store double 0.000000e+00, ptr %46, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %47) #7
  store double 0.000000e+00, ptr %47, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %48) #7
  store double 0.000000e+00, ptr %48, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %49) #7
  store double 0.000000e+00, ptr %49, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %50) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %51) #7
  store i32 0, ptr %43, align 4, !tbaa !9
  br label %1340

1340:                                             ; preds = %1590, %1339
  %1341 = load i32, ptr %43, align 4, !tbaa !9
  %1342 = load i32, ptr %25, align 4, !tbaa !9
  %1343 = icmp slt i32 %1341, %1342
  br i1 %1343, label %1344, label %1593

1344:                                             ; preds = %1340
  call void @llvm.lifetime.start.p0(i64 4, ptr %52) #7
  %1345 = load i32, ptr %42, align 4, !tbaa !9
  store i32 %1345, ptr %52, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %53) #7
  %1346 = load i32, ptr %43, align 4, !tbaa !9
  store i32 %1346, ptr %53, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %54) #7
  %1347 = load ptr, ptr %29, align 8, !tbaa !5
  %1348 = icmp ne ptr null, %1347
  br i1 %1348, label %1349, label %1360

1349:                                             ; preds = %1344
  %1350 = load ptr, ptr %29, align 8, !tbaa !5
  %1351 = load i32, ptr %52, align 4, !tbaa !9
  %1352 = load i32, ptr %21, align 4, !tbaa !9
  %1353 = mul nsw i32 %1351, %1352
  %1354 = load i32, ptr %53, align 4, !tbaa !9
  %1355 = add nsw i32 %1353, %1354
  %1356 = sext i32 %1355 to i64
  %1357 = getelementptr inbounds i64, ptr %1350, i64 %1356
  %1358 = load i64, ptr %1357, align 8, !tbaa !18
  %1359 = sitofp i64 %1358 to double
  br label %1361

1360:                                             ; preds = %1344
  br label %1361

1361:                                             ; preds = %1360, %1349
  %1362 = phi double [ %1359, %1349 ], [ 0.000000e+00, %1360 ]
  store double %1362, ptr %54, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %55) #7
  %1363 = load ptr, ptr %28, align 8, !tbaa !5
  %1364 = load i32, ptr %52, align 4, !tbaa !9
  %1365 = load i32, ptr %20, align 4, !tbaa !9
  %1366 = mul nsw i32 %1364, %1365
  %1367 = load i32, ptr %53, align 4, !tbaa !9
  %1368 = add nsw i32 %1366, %1367
  %1369 = sext i32 %1368 to i64
  %1370 = getelementptr inbounds i64, ptr %1363, i64 %1369
  %1371 = load i64, ptr %1370, align 8, !tbaa !18
  %1372 = sitofp i64 %1371 to double
  store double %1372, ptr %55, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %56) #7
  %1373 = load double, ptr %54, align 8, !tbaa !17
  %1374 = fcmp ole double 0.000000e+00, %1373
  br i1 %1374, label %1375, label %1377

1375:                                             ; preds = %1361
  %1376 = load double, ptr %54, align 8, !tbaa !17
  br label %1380

1377:                                             ; preds = %1361
  %1378 = load double, ptr %54, align 8, !tbaa !17
  %1379 = fneg double %1378
  br label %1380

1380:                                             ; preds = %1377, %1375
  %1381 = phi double [ %1376, %1375 ], [ %1379, %1377 ]
  store double %1381, ptr %56, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %57) #7
  %1382 = load double, ptr %55, align 8, !tbaa !17
  %1383 = fcmp ole double 0.000000e+00, %1382
  br i1 %1383, label %1384, label %1386

1384:                                             ; preds = %1380
  %1385 = load double, ptr %55, align 8, !tbaa !17
  br label %1389

1386:                                             ; preds = %1380
  %1387 = load double, ptr %55, align 8, !tbaa !17
  %1388 = fneg double %1387
  br label %1389

1389:                                             ; preds = %1386, %1384
  %1390 = phi double [ %1385, %1384 ], [ %1388, %1386 ]
  store double %1390, ptr %57, align 8, !tbaa !17
  %1391 = load double, ptr %55, align 8, !tbaa !17
  %1392 = load ptr, ptr %9, align 8, !tbaa !5
  %1393 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %1392, i32 0, i32 11
  %1394 = load double, ptr %1393, align 8, !tbaa !14
  %1395 = fcmp olt double %1391, %1394
  br i1 %1395, label %1396, label %1400

1396:                                             ; preds = %1389
  %1397 = load double, ptr %55, align 8, !tbaa !17
  %1398 = load ptr, ptr %9, align 8, !tbaa !5
  %1399 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %1398, i32 0, i32 11
  store double %1397, ptr %1399, align 8, !tbaa !14
  br label %1400

1400:                                             ; preds = %1396, %1389
  %1401 = load double, ptr %55, align 8, !tbaa !17
  %1402 = load ptr, ptr %9, align 8, !tbaa !5
  %1403 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %1402, i32 0, i32 12
  %1404 = load double, ptr %1403, align 8, !tbaa !20
  %1405 = fcmp ogt double %1401, %1404
  br i1 %1405, label %1406, label %1410

1406:                                             ; preds = %1400
  %1407 = load double, ptr %55, align 8, !tbaa !17
  %1408 = load ptr, ptr %9, align 8, !tbaa !5
  %1409 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %1408, i32 0, i32 12
  store double %1407, ptr %1409, align 8, !tbaa !20
  br label %1410

1410:                                             ; preds = %1406, %1400
  %1411 = load double, ptr %54, align 8, !tbaa !17
  %1412 = load double, ptr %54, align 8, !tbaa !17
  %1413 = fcmp oeq double %1411, %1412
  br i1 %1413, label %1414, label %1562

1414:                                             ; preds = %1410
  %1415 = load double, ptr %27, align 8, !tbaa !17
  %1416 = load double, ptr %56, align 8, !tbaa !17
  %1417 = fcmp ogt double %1415, %1416
  br i1 %1417, label %1422, label %1418

1418:                                             ; preds = %1414
  %1419 = load double, ptr %54, align 8, !tbaa !17
  %1420 = load double, ptr %55, align 8, !tbaa !17
  %1421 = fcmp oeq double %1419, %1420
  br i1 %1421, label %1422, label %1562

1422:                                             ; preds = %1418, %1414
  call void @llvm.lifetime.start.p0(i64 8, ptr %58) #7
  %1423 = load ptr, ptr %29, align 8, !tbaa !5
  %1424 = icmp ne ptr null, %1423
  br i1 %1424, label %1425, label %1439

1425:                                             ; preds = %1422
  %1426 = load double, ptr %55, align 8, !tbaa !17
  %1427 = load double, ptr %54, align 8, !tbaa !17
  %1428 = fcmp olt double %1426, %1427
  br i1 %1428, label %1429, label %1433

1429:                                             ; preds = %1425
  %1430 = load double, ptr %54, align 8, !tbaa !17
  %1431 = load double, ptr %55, align 8, !tbaa !17
  %1432 = fsub double %1430, %1431
  br label %1437

1433:                                             ; preds = %1425
  %1434 = load double, ptr %55, align 8, !tbaa !17
  %1435 = load double, ptr %54, align 8, !tbaa !17
  %1436 = fsub double %1434, %1435
  br label %1437

1437:                                             ; preds = %1433, %1429
  %1438 = phi double [ %1432, %1429 ], [ %1436, %1433 ]
  br label %1440

1439:                                             ; preds = %1422
  br label %1440

1440:                                             ; preds = %1439, %1437
  %1441 = phi double [ %1438, %1437 ], [ 0.000000e+00, %1439 ]
  store double %1441, ptr %58, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %59) #7
  %1442 = load double, ptr %57, align 8, !tbaa !17
  %1443 = fcmp oge double 0.000000e+00, %1442
  br i1 %1443, label %1444, label %1446

1444:                                             ; preds = %1440
  %1445 = load double, ptr %56, align 8, !tbaa !17
  br label %1456

1446:                                             ; preds = %1440
  %1447 = load double, ptr %58, align 8, !tbaa !17
  %1448 = load double, ptr %57, align 8, !tbaa !17
  %1449 = fcmp olt double 0.000000e+00, %1448
  br i1 %1449, label %1450, label %1452

1450:                                             ; preds = %1446
  %1451 = load double, ptr %57, align 8, !tbaa !17
  br label %1453

1452:                                             ; preds = %1446
  br label %1453

1453:                                             ; preds = %1452, %1450
  %1454 = phi double [ %1451, %1450 ], [ 1.000000e+00, %1452 ]
  %1455 = fdiv double %1447, %1454
  br label %1456

1456:                                             ; preds = %1453, %1444
  %1457 = phi double [ %1445, %1444 ], [ %1455, %1453 ]
  store double %1457, ptr %59, align 8, !tbaa !17
  %1458 = load double, ptr %54, align 8, !tbaa !17
  %1459 = load ptr, ptr %9, align 8, !tbaa !5
  %1460 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %1459, i32 0, i32 16
  %1461 = load double, ptr %1460, align 8, !tbaa !21
  %1462 = fcmp olt double %1458, %1461
  br i1 %1462, label %1463, label %1467

1463:                                             ; preds = %1456
  %1464 = load double, ptr %54, align 8, !tbaa !17
  %1465 = load ptr, ptr %9, align 8, !tbaa !5
  %1466 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %1465, i32 0, i32 16
  store double %1464, ptr %1466, align 8, !tbaa !21
  br label %1467

1467:                                             ; preds = %1463, %1456
  %1468 = load double, ptr %54, align 8, !tbaa !17
  %1469 = load ptr, ptr %9, align 8, !tbaa !5
  %1470 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %1469, i32 0, i32 17
  %1471 = load double, ptr %1470, align 8, !tbaa !22
  %1472 = fcmp ogt double %1468, %1471
  br i1 %1472, label %1473, label %1477

1473:                                             ; preds = %1467
  %1474 = load double, ptr %54, align 8, !tbaa !17
  %1475 = load ptr, ptr %9, align 8, !tbaa !5
  %1476 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %1475, i32 0, i32 17
  store double %1474, ptr %1476, align 8, !tbaa !22
  br label %1477

1477:                                             ; preds = %1473, %1467
  %1478 = load ptr, ptr %9, align 8, !tbaa !5
  %1479 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %1478, i32 0, i32 5
  %1480 = load double, ptr %1479, align 8, !tbaa !23
  %1481 = load double, ptr %58, align 8, !tbaa !17
  %1482 = fcmp olt double %1480, %1481
  br i1 %1482, label %1483, label %1499

1483:                                             ; preds = %1477
  %1484 = load double, ptr %58, align 8, !tbaa !17
  %1485 = load ptr, ptr %9, align 8, !tbaa !5
  %1486 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %1485, i32 0, i32 5
  store double %1484, ptr %1486, align 8, !tbaa !23
  %1487 = load double, ptr %55, align 8, !tbaa !17
  %1488 = load ptr, ptr %9, align 8, !tbaa !5
  %1489 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %1488, i32 0, i32 20
  store double %1487, ptr %1489, align 8, !tbaa !24
  %1490 = load double, ptr %54, align 8, !tbaa !17
  %1491 = load ptr, ptr %9, align 8, !tbaa !5
  %1492 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %1491, i32 0, i32 21
  store double %1490, ptr %1492, align 8, !tbaa !25
  %1493 = load i32, ptr %53, align 4, !tbaa !9
  %1494 = load ptr, ptr %9, align 8, !tbaa !5
  %1495 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %1494, i32 0, i32 22
  store i32 %1493, ptr %1495, align 8, !tbaa !26
  %1496 = load i32, ptr %52, align 4, !tbaa !9
  %1497 = load ptr, ptr %9, align 8, !tbaa !5
  %1498 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %1497, i32 0, i32 23
  store i32 %1496, ptr %1498, align 4, !tbaa !27
  br label %1499

1499:                                             ; preds = %1483, %1477
  %1500 = load ptr, ptr %9, align 8, !tbaa !5
  %1501 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %1500, i32 0, i32 6
  %1502 = load double, ptr %1501, align 8, !tbaa !28
  %1503 = load double, ptr %59, align 8, !tbaa !17
  %1504 = fcmp olt double %1502, %1503
  br i1 %1504, label %1505, label %1509

1505:                                             ; preds = %1499
  %1506 = load double, ptr %59, align 8, !tbaa !17
  %1507 = load ptr, ptr %9, align 8, !tbaa !5
  %1508 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %1507, i32 0, i32 6
  store double %1506, ptr %1508, align 8, !tbaa !28
  br label %1509

1509:                                             ; preds = %1505, %1499
  %1510 = load double, ptr %59, align 8, !tbaa !17
  %1511 = load double, ptr %59, align 8, !tbaa !17
  %1512 = fmul double %1510, %1511
  store double %1512, ptr %50, align 8, !tbaa !17
  %1513 = load double, ptr %27, align 8, !tbaa !17
  %1514 = load double, ptr %50, align 8, !tbaa !17
  %1515 = fcmp ogt double %1513, %1514
  br i1 %1515, label %1516, label %1535

1516:                                             ; preds = %1509
  %1517 = load double, ptr %41, align 8, !tbaa !17
  %1518 = load double, ptr %50, align 8, !tbaa !17
  %1519 = fsub double %1518, %1517
  store double %1519, ptr %50, align 8, !tbaa !17
  %1520 = load ptr, ptr %9, align 8, !tbaa !5
  %1521 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %1520, i32 0, i32 8
  %1522 = load double, ptr %1521, align 8, !tbaa !29
  %1523 = load double, ptr %50, align 8, !tbaa !17
  %1524 = fadd double %1522, %1523
  store double %1524, ptr %51, align 8, !tbaa !17
  %1525 = load double, ptr %51, align 8, !tbaa !17
  %1526 = load ptr, ptr %9, align 8, !tbaa !5
  %1527 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %1526, i32 0, i32 8
  %1528 = load double, ptr %1527, align 8, !tbaa !29
  %1529 = fsub double %1525, %1528
  %1530 = load double, ptr %50, align 8, !tbaa !17
  %1531 = fsub double %1529, %1530
  store double %1531, ptr %41, align 8, !tbaa !17
  %1532 = load double, ptr %51, align 8, !tbaa !17
  %1533 = load ptr, ptr %9, align 8, !tbaa !5
  %1534 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %1533, i32 0, i32 8
  store double %1532, ptr %1534, align 8, !tbaa !29
  br label %1535

1535:                                             ; preds = %1516, %1509
  %1536 = load double, ptr %57, align 8, !tbaa !17
  %1537 = call double @libxsmm_kahan_sum(double noundef %1536, ptr noundef %47, ptr noundef %44)
  %1538 = load double, ptr %56, align 8, !tbaa !17
  %1539 = call double @libxsmm_kahan_sum(double noundef %1538, ptr noundef %48, ptr noundef %45)
  %1540 = load double, ptr %58, align 8, !tbaa !17
  %1541 = call double @libxsmm_kahan_sum(double noundef %1540, ptr noundef %49, ptr noundef %46)
  %1542 = load double, ptr %55, align 8, !tbaa !17
  %1543 = load double, ptr %55, align 8, !tbaa !17
  %1544 = fmul double %1542, %1543
  %1545 = call double @libxsmm_kahan_sum(double noundef %1544, ptr noundef %33, ptr noundef %31)
  %1546 = load double, ptr %54, align 8, !tbaa !17
  %1547 = load double, ptr %54, align 8, !tbaa !17
  %1548 = fmul double %1546, %1547
  %1549 = call double @libxsmm_kahan_sum(double noundef %1548, ptr noundef %34, ptr noundef %32)
  %1550 = load double, ptr %58, align 8, !tbaa !17
  %1551 = load double, ptr %58, align 8, !tbaa !17
  %1552 = fmul double %1550, %1551
  store double %1552, ptr %50, align 8, !tbaa !17
  %1553 = load double, ptr %27, align 8, !tbaa !17
  %1554 = load double, ptr %50, align 8, !tbaa !17
  %1555 = fcmp ogt double %1553, %1554
  br i1 %1555, label %1556, label %1561

1556:                                             ; preds = %1535
  %1557 = load double, ptr %50, align 8, !tbaa !17
  %1558 = load ptr, ptr %9, align 8, !tbaa !5
  %1559 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %1558, i32 0, i32 7
  %1560 = call double @libxsmm_kahan_sum(double noundef %1557, ptr noundef %1559, ptr noundef %30)
  br label %1561

1561:                                             ; preds = %1556, %1535
  call void @llvm.lifetime.end.p0(i64 8, ptr %59) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %58) #7
  br label %1586

1562:                                             ; preds = %1418, %1410
  %1563 = load double, ptr %55, align 8, !tbaa !17
  %1564 = load double, ptr %55, align 8, !tbaa !17
  %1565 = fcmp oeq double %1563, %1564
  br i1 %1565, label %1566, label %1570

1566:                                             ; preds = %1562
  %1567 = load double, ptr %27, align 8, !tbaa !17
  %1568 = load double, ptr %57, align 8, !tbaa !17
  %1569 = fcmp ogt double %1567, %1568
  br label %1570

1570:                                             ; preds = %1566, %1562
  %1571 = phi i1 [ false, %1562 ], [ %1569, %1566 ]
  %1572 = zext i1 %1571 to i64
  %1573 = select i1 %1571, i32 1, i32 2
  store i32 %1573, ptr %19, align 4, !tbaa !9
  %1574 = load i32, ptr %53, align 4, !tbaa !9
  %1575 = load ptr, ptr %9, align 8, !tbaa !5
  %1576 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %1575, i32 0, i32 22
  store i32 %1574, ptr %1576, align 8, !tbaa !26
  %1577 = load i32, ptr %52, align 4, !tbaa !9
  %1578 = load ptr, ptr %9, align 8, !tbaa !5
  %1579 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %1578, i32 0, i32 23
  store i32 %1577, ptr %1579, align 4, !tbaa !27
  %1580 = load double, ptr %55, align 8, !tbaa !17
  %1581 = load ptr, ptr %9, align 8, !tbaa !5
  %1582 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %1581, i32 0, i32 20
  store double %1580, ptr %1582, align 8, !tbaa !24
  %1583 = load double, ptr %54, align 8, !tbaa !17
  %1584 = load ptr, ptr %9, align 8, !tbaa !5
  %1585 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %1584, i32 0, i32 21
  store double %1583, ptr %1585, align 8, !tbaa !25
  store i32 6, ptr %60, align 4
  br label %1587

1586:                                             ; preds = %1561
  store i32 0, ptr %60, align 4
  br label %1587

1587:                                             ; preds = %1586, %1570
  call void @llvm.lifetime.end.p0(i64 8, ptr %57) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %56) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %55) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %54) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %53) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %52) #7
  %1588 = load i32, ptr %60, align 4
  switch i32 %1588, label %15542 [
    i32 0, label %1589
    i32 6, label %1593
  ]

1589:                                             ; preds = %1587
  br label %1590

1590:                                             ; preds = %1589
  %1591 = load i32, ptr %43, align 4, !tbaa !9
  %1592 = add nsw i32 %1591, 1
  store i32 %1592, ptr %43, align 4, !tbaa !9
  br label %1340, !llvm.loop !30

1593:                                             ; preds = %1587, %1340
  %1594 = load i32, ptr %19, align 4, !tbaa !9
  %1595 = icmp eq i32 0, %1594
  br i1 %1595, label %1596, label %1627

1596:                                             ; preds = %1593
  %1597 = load double, ptr %47, align 8, !tbaa !17
  %1598 = load ptr, ptr %9, align 8, !tbaa !5
  %1599 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %1598, i32 0, i32 10
  %1600 = call double @libxsmm_kahan_sum(double noundef %1597, ptr noundef %1599, ptr noundef %39)
  %1601 = load double, ptr %48, align 8, !tbaa !17
  %1602 = load ptr, ptr %9, align 8, !tbaa !5
  %1603 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %1602, i32 0, i32 15
  %1604 = call double @libxsmm_kahan_sum(double noundef %1601, ptr noundef %1603, ptr noundef %40)
  %1605 = load ptr, ptr %9, align 8, !tbaa !5
  %1606 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %1605, i32 0, i32 2
  %1607 = load double, ptr %1606, align 8, !tbaa !32
  %1608 = load double, ptr %49, align 8, !tbaa !17
  %1609 = fcmp olt double %1607, %1608
  br i1 %1609, label %1610, label %1614

1610:                                             ; preds = %1596
  %1611 = load double, ptr %49, align 8, !tbaa !17
  %1612 = load ptr, ptr %9, align 8, !tbaa !5
  %1613 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %1612, i32 0, i32 2
  store double %1611, ptr %1613, align 8, !tbaa !32
  br label %1614

1614:                                             ; preds = %1610, %1596
  %1615 = load double, ptr %35, align 8, !tbaa !17
  %1616 = load double, ptr %47, align 8, !tbaa !17
  %1617 = fcmp olt double %1615, %1616
  br i1 %1617, label %1618, label %1620

1618:                                             ; preds = %1614
  %1619 = load double, ptr %47, align 8, !tbaa !17
  store double %1619, ptr %35, align 8, !tbaa !17
  br label %1620

1620:                                             ; preds = %1618, %1614
  %1621 = load double, ptr %36, align 8, !tbaa !17
  %1622 = load double, ptr %48, align 8, !tbaa !17
  %1623 = fcmp olt double %1621, %1622
  br i1 %1623, label %1624, label %1626

1624:                                             ; preds = %1620
  %1625 = load double, ptr %48, align 8, !tbaa !17
  store double %1625, ptr %36, align 8, !tbaa !17
  br label %1626

1626:                                             ; preds = %1624, %1620
  br label %1628

1627:                                             ; preds = %1593
  store i32 3, ptr %60, align 4
  br label %1629

1628:                                             ; preds = %1626
  store i32 0, ptr %60, align 4
  br label %1629

1629:                                             ; preds = %1628, %1627
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #7
  %1630 = load i32, ptr %60, align 4
  switch i32 %1630, label %15542 [
    i32 0, label %1631
    i32 3, label %1635
  ]

1631:                                             ; preds = %1629
  br label %1632

1632:                                             ; preds = %1631
  %1633 = load i32, ptr %42, align 4, !tbaa !9
  %1634 = add nsw i32 %1633, 1
  store i32 %1634, ptr %42, align 4, !tbaa !9
  br label %1335, !llvm.loop !33

1635:                                             ; preds = %1629, %1335
  %1636 = load i32, ptr %19, align 4, !tbaa !9
  %1637 = icmp eq i32 0, %1636
  br i1 %1637, label %1638, label %1884

1638:                                             ; preds = %1635
  call void @llvm.lifetime.start.p0(i64 8, ptr %61) #7
  store double 0.000000e+00, ptr %61, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %62) #7
  store double 0.000000e+00, ptr %62, align 8, !tbaa !17
  %1639 = load ptr, ptr %9, align 8, !tbaa !5
  %1640 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %1639, i32 0, i32 14
  %1641 = load double, ptr %1640, align 8, !tbaa !34
  %1642 = fcmp oeq double 0.000000e+00, %1641
  br i1 %1642, label %1643, label %1644

1643:                                             ; preds = %1638
  br label %1645

1644:                                             ; preds = %1638
  call void @__assert_fail(ptr noundef @.str.1, ptr noundef @.str.2, i32 noundef 130, ptr noundef @__PRETTY_FUNCTION__.libxsmm_matdiff) #9
  unreachable

1645:                                             ; preds = %1643
  %1646 = load ptr, ptr %9, align 8, !tbaa !5
  %1647 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %1646, i32 0, i32 19
  %1648 = load double, ptr %1647, align 8, !tbaa !35
  %1649 = fcmp oeq double 0.000000e+00, %1648
  br i1 %1649, label %1650, label %1651

1650:                                             ; preds = %1645
  br label %1652

1651:                                             ; preds = %1645
  call void @__assert_fail(ptr noundef @.str.3, ptr noundef @.str.2, i32 noundef 131, ptr noundef @__PRETTY_FUNCTION__.libxsmm_matdiff) #9
  unreachable

1652:                                             ; preds = %1650
  %1653 = load i64, ptr %24, align 8, !tbaa !12
  %1654 = icmp ne i64 0, %1653
  br i1 %1654, label %1655, label %1672

1655:                                             ; preds = %1652
  %1656 = load ptr, ptr %9, align 8, !tbaa !5
  %1657 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %1656, i32 0, i32 10
  %1658 = load double, ptr %1657, align 8, !tbaa !36
  %1659 = load i64, ptr %24, align 8, !tbaa !12
  %1660 = uitofp i64 %1659 to double
  %1661 = fdiv double %1658, %1660
  %1662 = load ptr, ptr %9, align 8, !tbaa !5
  %1663 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %1662, i32 0, i32 13
  store double %1661, ptr %1663, align 8, !tbaa !37
  %1664 = load ptr, ptr %9, align 8, !tbaa !5
  %1665 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %1664, i32 0, i32 15
  %1666 = load double, ptr %1665, align 8, !tbaa !38
  %1667 = load i64, ptr %24, align 8, !tbaa !12
  %1668 = uitofp i64 %1667 to double
  %1669 = fdiv double %1666, %1668
  %1670 = load ptr, ptr %9, align 8, !tbaa !5
  %1671 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %1670, i32 0, i32 18
  store double %1669, ptr %1671, align 8, !tbaa !39
  br label %1672

1672:                                             ; preds = %1655, %1652
  %1673 = load double, ptr %35, align 8, !tbaa !17
  %1674 = fcmp oge double 0.000000e+00, %1673
  br i1 %1674, label %1675, label %1677

1675:                                             ; preds = %1672
  %1676 = load double, ptr %36, align 8, !tbaa !17
  br label %1689

1677:                                             ; preds = %1672
  %1678 = load ptr, ptr %9, align 8, !tbaa !5
  %1679 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %1678, i32 0, i32 2
  %1680 = load double, ptr %1679, align 8, !tbaa !32
  %1681 = load double, ptr %35, align 8, !tbaa !17
  %1682 = fcmp olt double 0.000000e+00, %1681
  br i1 %1682, label %1683, label %1685

1683:                                             ; preds = %1677
  %1684 = load double, ptr %35, align 8, !tbaa !17
  br label %1686

1685:                                             ; preds = %1677
  br label %1686

1686:                                             ; preds = %1685, %1683
  %1687 = phi double [ %1684, %1683 ], [ 1.000000e+00, %1685 ]
  %1688 = fdiv double %1680, %1687
  br label %1689

1689:                                             ; preds = %1686, %1675
  %1690 = phi double [ %1676, %1675 ], [ %1688, %1686 ]
  %1691 = load ptr, ptr %9, align 8, !tbaa !5
  %1692 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %1691, i32 0, i32 3
  store double %1690, ptr %1692, align 8, !tbaa !40
  %1693 = load double, ptr %33, align 8, !tbaa !17
  %1694 = fcmp oge double 0.000000e+00, %1693
  br i1 %1694, label %1695, label %1713

1695:                                             ; preds = %1689
  %1696 = load double, ptr %34, align 8, !tbaa !17
  %1697 = load double, ptr %34, align 8, !tbaa !17
  %1698 = fmul double %1696, %1697
  %1699 = load ptr, ptr %9, align 8, !tbaa !5
  %1700 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %1699, i32 0, i32 7
  %1701 = load double, ptr %1700, align 8, !tbaa !41
  %1702 = fcmp olt double %1698, %1701
  br i1 %1702, label %1703, label %1707

1703:                                             ; preds = %1695
  %1704 = load double, ptr %34, align 8, !tbaa !17
  %1705 = load double, ptr %34, align 8, !tbaa !17
  %1706 = fmul double %1704, %1705
  br label %1711

1707:                                             ; preds = %1695
  %1708 = load ptr, ptr %9, align 8, !tbaa !5
  %1709 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %1708, i32 0, i32 7
  %1710 = load double, ptr %1709, align 8, !tbaa !41
  br label %1711

1711:                                             ; preds = %1707, %1703
  %1712 = phi double [ %1706, %1703 ], [ %1710, %1707 ]
  br label %1725

1713:                                             ; preds = %1689
  %1714 = load ptr, ptr %9, align 8, !tbaa !5
  %1715 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %1714, i32 0, i32 7
  %1716 = load double, ptr %1715, align 8, !tbaa !41
  %1717 = load double, ptr %33, align 8, !tbaa !17
  %1718 = fcmp olt double 0.000000e+00, %1717
  br i1 %1718, label %1719, label %1721

1719:                                             ; preds = %1713
  %1720 = load double, ptr %33, align 8, !tbaa !17
  br label %1722

1721:                                             ; preds = %1713
  br label %1722

1722:                                             ; preds = %1721, %1719
  %1723 = phi double [ %1720, %1719 ], [ 1.000000e+00, %1721 ]
  %1724 = fdiv double %1716, %1723
  br label %1725

1725:                                             ; preds = %1722, %1711
  %1726 = phi double [ %1712, %1711 ], [ %1724, %1722 ]
  %1727 = load ptr, ptr %9, align 8, !tbaa !5
  %1728 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %1727, i32 0, i32 4
  store double %1726, ptr %1728, align 8, !tbaa !42
  store i32 0, ptr %43, align 4, !tbaa !9
  br label %1729

1729:                                             ; preds = %1858, %1725
  %1730 = load i32, ptr %43, align 4, !tbaa !9
  %1731 = load i32, ptr %25, align 4, !tbaa !9
  %1732 = icmp slt i32 %1730, %1731
  br i1 %1732, label %1733, label %1861

1733:                                             ; preds = %1729
  call void @llvm.lifetime.start.p0(i64 8, ptr %63) #7
  store double 0.000000e+00, ptr %63, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %64) #7
  store double 0.000000e+00, ptr %64, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %65) #7
  store double 0.000000e+00, ptr %65, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %66) #7
  store double 0.000000e+00, ptr %66, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %67) #7
  store double 0.000000e+00, ptr %67, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %68) #7
  store double 0.000000e+00, ptr %68, align 8, !tbaa !17
  store i32 0, ptr %42, align 4, !tbaa !9
  br label %1734

1734:                                             ; preds = %1832, %1733
  %1735 = load i32, ptr %42, align 4, !tbaa !9
  %1736 = load i32, ptr %26, align 4, !tbaa !9
  %1737 = icmp slt i32 %1735, %1736
  br i1 %1737, label %1738, label %1835

1738:                                             ; preds = %1734
  call void @llvm.lifetime.start.p0(i64 4, ptr %69) #7
  %1739 = load i32, ptr %42, align 4, !tbaa !9
  store i32 %1739, ptr %69, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %70) #7
  %1740 = load i32, ptr %43, align 4, !tbaa !9
  store i32 %1740, ptr %70, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %71) #7
  %1741 = load ptr, ptr %28, align 8, !tbaa !5
  %1742 = load i32, ptr %69, align 4, !tbaa !9
  %1743 = load i32, ptr %20, align 4, !tbaa !9
  %1744 = mul nsw i32 %1742, %1743
  %1745 = load i32, ptr %70, align 4, !tbaa !9
  %1746 = add nsw i32 %1744, %1745
  %1747 = sext i32 %1746 to i64
  %1748 = getelementptr inbounds i64, ptr %1741, i64 %1747
  %1749 = load i64, ptr %1748, align 8, !tbaa !18
  %1750 = sitofp i64 %1749 to double
  store double %1750, ptr %71, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %72) #7
  %1751 = load ptr, ptr %29, align 8, !tbaa !5
  %1752 = icmp ne ptr null, %1751
  br i1 %1752, label %1753, label %1764

1753:                                             ; preds = %1738
  %1754 = load ptr, ptr %29, align 8, !tbaa !5
  %1755 = load i32, ptr %69, align 4, !tbaa !9
  %1756 = load i32, ptr %21, align 4, !tbaa !9
  %1757 = mul nsw i32 %1755, %1756
  %1758 = load i32, ptr %70, align 4, !tbaa !9
  %1759 = add nsw i32 %1757, %1758
  %1760 = sext i32 %1759 to i64
  %1761 = getelementptr inbounds i64, ptr %1754, i64 %1760
  %1762 = load i64, ptr %1761, align 8, !tbaa !18
  %1763 = sitofp i64 %1762 to double
  br label %1765

1764:                                             ; preds = %1738
  br label %1765

1765:                                             ; preds = %1764, %1753
  %1766 = phi double [ %1763, %1753 ], [ 0.000000e+00, %1764 ]
  store double %1766, ptr %72, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %73) #7
  %1767 = load ptr, ptr %29, align 8, !tbaa !5
  %1768 = icmp ne ptr null, %1767
  br i1 %1768, label %1769, label %1783

1769:                                             ; preds = %1765
  %1770 = load double, ptr %71, align 8, !tbaa !17
  %1771 = load double, ptr %72, align 8, !tbaa !17
  %1772 = fcmp olt double %1770, %1771
  br i1 %1772, label %1773, label %1777

1773:                                             ; preds = %1769
  %1774 = load double, ptr %72, align 8, !tbaa !17
  %1775 = load double, ptr %71, align 8, !tbaa !17
  %1776 = fsub double %1774, %1775
  br label %1781

1777:                                             ; preds = %1769
  %1778 = load double, ptr %71, align 8, !tbaa !17
  %1779 = load double, ptr %72, align 8, !tbaa !17
  %1780 = fsub double %1778, %1779
  br label %1781

1781:                                             ; preds = %1777, %1773
  %1782 = phi double [ %1776, %1773 ], [ %1780, %1777 ]
  br label %1784

1783:                                             ; preds = %1765
  br label %1784

1784:                                             ; preds = %1783, %1781
  %1785 = phi double [ %1782, %1781 ], [ 0.000000e+00, %1783 ]
  store double %1785, ptr %73, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %74) #7
  %1786 = load double, ptr %71, align 8, !tbaa !17
  %1787 = load ptr, ptr %9, align 8, !tbaa !5
  %1788 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %1787, i32 0, i32 13
  %1789 = load double, ptr %1788, align 8, !tbaa !37
  %1790 = fsub double %1786, %1789
  store double %1790, ptr %74, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %75) #7
  %1791 = load double, ptr %72, align 8, !tbaa !17
  %1792 = load ptr, ptr %9, align 8, !tbaa !5
  %1793 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %1792, i32 0, i32 18
  %1794 = load double, ptr %1793, align 8, !tbaa !39
  %1795 = fsub double %1791, %1794
  store double %1795, ptr %75, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %76) #7
  %1796 = load double, ptr %71, align 8, !tbaa !17
  %1797 = fcmp ole double 0.000000e+00, %1796
  br i1 %1797, label %1798, label %1800

1798:                                             ; preds = %1784
  %1799 = load double, ptr %71, align 8, !tbaa !17
  br label %1803

1800:                                             ; preds = %1784
  %1801 = load double, ptr %71, align 8, !tbaa !17
  %1802 = fneg double %1801
  br label %1803

1803:                                             ; preds = %1800, %1798
  %1804 = phi double [ %1799, %1798 ], [ %1802, %1800 ]
  store double %1804, ptr %76, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %77) #7
  %1805 = load double, ptr %72, align 8, !tbaa !17
  %1806 = fcmp ole double 0.000000e+00, %1805
  br i1 %1806, label %1807, label %1809

1807:                                             ; preds = %1803
  %1808 = load double, ptr %72, align 8, !tbaa !17
  br label %1812

1809:                                             ; preds = %1803
  %1810 = load double, ptr %72, align 8, !tbaa !17
  %1811 = fneg double %1810
  br label %1812

1812:                                             ; preds = %1809, %1807
  %1813 = phi double [ %1808, %1807 ], [ %1811, %1809 ]
  store double %1813, ptr %77, align 8, !tbaa !17
  %1814 = load double, ptr %74, align 8, !tbaa !17
  %1815 = load double, ptr %74, align 8, !tbaa !17
  %1816 = fmul double %1814, %1815
  %1817 = load ptr, ptr %9, align 8, !tbaa !5
  %1818 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %1817, i32 0, i32 14
  %1819 = call double @libxsmm_kahan_sum(double noundef %1816, ptr noundef %1818, ptr noundef %61)
  %1820 = load double, ptr %75, align 8, !tbaa !17
  %1821 = load double, ptr %75, align 8, !tbaa !17
  %1822 = fmul double %1820, %1821
  %1823 = load ptr, ptr %9, align 8, !tbaa !5
  %1824 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %1823, i32 0, i32 19
  %1825 = call double @libxsmm_kahan_sum(double noundef %1822, ptr noundef %1824, ptr noundef %62)
  %1826 = load double, ptr %76, align 8, !tbaa !17
  %1827 = call double @libxsmm_kahan_sum(double noundef %1826, ptr noundef %66, ptr noundef %63)
  %1828 = load double, ptr %77, align 8, !tbaa !17
  %1829 = call double @libxsmm_kahan_sum(double noundef %1828, ptr noundef %67, ptr noundef %64)
  %1830 = load double, ptr %73, align 8, !tbaa !17
  %1831 = call double @libxsmm_kahan_sum(double noundef %1830, ptr noundef %68, ptr noundef %65)
  call void @llvm.lifetime.end.p0(i64 8, ptr %77) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %76) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %75) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %74) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %73) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %72) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %71) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %70) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %69) #7
  br label %1832

1832:                                             ; preds = %1812
  %1833 = load i32, ptr %42, align 4, !tbaa !9
  %1834 = add nsw i32 %1833, 1
  store i32 %1834, ptr %42, align 4, !tbaa !9
  br label %1734, !llvm.loop !43

1835:                                             ; preds = %1734
  %1836 = load ptr, ptr %9, align 8, !tbaa !5
  %1837 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %1836, i32 0, i32 0
  %1838 = load double, ptr %1837, align 8, !tbaa !44
  %1839 = load double, ptr %68, align 8, !tbaa !17
  %1840 = fcmp olt double %1838, %1839
  br i1 %1840, label %1841, label %1845

1841:                                             ; preds = %1835
  %1842 = load double, ptr %68, align 8, !tbaa !17
  %1843 = load ptr, ptr %9, align 8, !tbaa !5
  %1844 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %1843, i32 0, i32 0
  store double %1842, ptr %1844, align 8, !tbaa !44
  br label %1845

1845:                                             ; preds = %1841, %1835
  %1846 = load double, ptr %37, align 8, !tbaa !17
  %1847 = load double, ptr %66, align 8, !tbaa !17
  %1848 = fcmp olt double %1846, %1847
  br i1 %1848, label %1849, label %1851

1849:                                             ; preds = %1845
  %1850 = load double, ptr %66, align 8, !tbaa !17
  store double %1850, ptr %37, align 8, !tbaa !17
  br label %1851

1851:                                             ; preds = %1849, %1845
  %1852 = load double, ptr %38, align 8, !tbaa !17
  %1853 = load double, ptr %67, align 8, !tbaa !17
  %1854 = fcmp olt double %1852, %1853
  br i1 %1854, label %1855, label %1857

1855:                                             ; preds = %1851
  %1856 = load double, ptr %67, align 8, !tbaa !17
  store double %1856, ptr %38, align 8, !tbaa !17
  br label %1857

1857:                                             ; preds = %1855, %1851
  call void @llvm.lifetime.end.p0(i64 8, ptr %68) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %67) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %66) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %65) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %64) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %63) #7
  br label %1858

1858:                                             ; preds = %1857
  %1859 = load i32, ptr %43, align 4, !tbaa !9
  %1860 = add nsw i32 %1859, 1
  store i32 %1860, ptr %43, align 4, !tbaa !9
  br label %1729, !llvm.loop !45

1861:                                             ; preds = %1729
  %1862 = load double, ptr %37, align 8, !tbaa !17
  %1863 = fcmp oge double 0.000000e+00, %1862
  br i1 %1863, label %1864, label %1868

1864:                                             ; preds = %1861
  %1865 = load ptr, ptr %9, align 8, !tbaa !5
  %1866 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %1865, i32 0, i32 0
  %1867 = load double, ptr %1866, align 8, !tbaa !44
  br label %1880

1868:                                             ; preds = %1861
  %1869 = load ptr, ptr %9, align 8, !tbaa !5
  %1870 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %1869, i32 0, i32 0
  %1871 = load double, ptr %1870, align 8, !tbaa !44
  %1872 = load double, ptr %37, align 8, !tbaa !17
  %1873 = fcmp olt double 0.000000e+00, %1872
  br i1 %1873, label %1874, label %1876

1874:                                             ; preds = %1868
  %1875 = load double, ptr %37, align 8, !tbaa !17
  br label %1877

1876:                                             ; preds = %1868
  br label %1877

1877:                                             ; preds = %1876, %1874
  %1878 = phi double [ %1875, %1874 ], [ 1.000000e+00, %1876 ]
  %1879 = fdiv double %1871, %1878
  br label %1880

1880:                                             ; preds = %1877, %1864
  %1881 = phi double [ %1867, %1864 ], [ %1879, %1877 ]
  %1882 = load ptr, ptr %9, align 8, !tbaa !5
  %1883 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %1882, i32 0, i32 1
  store double %1881, ptr %1883, align 8, !tbaa !46
  call void @llvm.lifetime.end.p0(i64 8, ptr %62) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %61) #7
  br label %1884

1884:                                             ; preds = %1880, %1635
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #7
  br label %2481

1885:                                             ; preds = %1329
  call void @llvm.lifetime.start.p0(i64 8, ptr %78) #7
  %1886 = load ptr, ptr %13, align 8, !tbaa !5
  store ptr %1886, ptr %78, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %79) #7
  %1887 = load ptr, ptr %14, align 8, !tbaa !5
  store ptr %1887, ptr %79, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %80) #7
  store double 0.000000e+00, ptr %80, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %81) #7
  store double 0.000000e+00, ptr %81, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %82) #7
  store double 0.000000e+00, ptr %82, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %83) #7
  store double 0.000000e+00, ptr %83, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %84) #7
  store double 0.000000e+00, ptr %84, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %85) #7
  store double 0.000000e+00, ptr %85, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %86) #7
  store double 0.000000e+00, ptr %86, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %87) #7
  store double 0.000000e+00, ptr %87, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %88) #7
  store double 0.000000e+00, ptr %88, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %89) #7
  store double 0.000000e+00, ptr %89, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %90) #7
  store double 0.000000e+00, ptr %90, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %91) #7
  store double 0.000000e+00, ptr %91, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %92) #7
  %1888 = load i32, ptr %25, align 4, !tbaa !9
  %1889 = sext i32 %1888 to i64
  %1890 = load i32, ptr %26, align 4, !tbaa !9
  %1891 = sext i32 %1890 to i64
  %1892 = mul i64 %1889, %1891
  store i64 %1892, ptr %92, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 8, ptr %93) #7
  %1893 = load i64, ptr %92, align 8, !tbaa !12
  %1894 = call i64 @libxsmm_coprime2(i64 noundef %1893)
  store i64 %1894, ptr %93, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 4, ptr %94) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %95) #7
  store i32 0, ptr %94, align 4, !tbaa !9
  br label %1895

1895:                                             ; preds = %2210, %1885
  %1896 = load i32, ptr %94, align 4, !tbaa !9
  %1897 = load i32, ptr %26, align 4, !tbaa !9
  %1898 = icmp slt i32 %1896, %1897
  br i1 %1898, label %1899, label %2213

1899:                                             ; preds = %1895
  call void @llvm.lifetime.start.p0(i64 8, ptr %96) #7
  store double 0.000000e+00, ptr %96, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %97) #7
  store double 0.000000e+00, ptr %97, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %98) #7
  store double 0.000000e+00, ptr %98, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %99) #7
  store double 0.000000e+00, ptr %99, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %100) #7
  store double 0.000000e+00, ptr %100, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %101) #7
  store double 0.000000e+00, ptr %101, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %102) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %103) #7
  store i32 0, ptr %95, align 4, !tbaa !9
  br label %1900

1900:                                             ; preds = %2168, %1899
  %1901 = load i32, ptr %95, align 4, !tbaa !9
  %1902 = load i32, ptr %25, align 4, !tbaa !9
  %1903 = icmp slt i32 %1901, %1902
  br i1 %1903, label %1904, label %2171

1904:                                             ; preds = %1900
  call void @llvm.lifetime.start.p0(i64 8, ptr %104) #7
  %1905 = load i64, ptr %93, align 8, !tbaa !12
  %1906 = load i32, ptr %94, align 4, !tbaa !9
  %1907 = load i32, ptr %25, align 4, !tbaa !9
  %1908 = mul nsw i32 %1906, %1907
  %1909 = load i32, ptr %95, align 4, !tbaa !9
  %1910 = add nsw i32 %1908, %1909
  %1911 = sext i32 %1910 to i64
  %1912 = mul i64 %1905, %1911
  %1913 = load i64, ptr %92, align 8, !tbaa !12
  %1914 = urem i64 %1912, %1913
  store i64 %1914, ptr %104, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 4, ptr %105) #7
  %1915 = load i64, ptr %104, align 8, !tbaa !12
  %1916 = load i32, ptr %25, align 4, !tbaa !9
  %1917 = sext i32 %1916 to i64
  %1918 = udiv i64 %1915, %1917
  %1919 = trunc i64 %1918 to i32
  store i32 %1919, ptr %105, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %106) #7
  %1920 = load i64, ptr %104, align 8, !tbaa !12
  %1921 = load i32, ptr %25, align 4, !tbaa !9
  %1922 = sext i32 %1921 to i64
  %1923 = urem i64 %1920, %1922
  %1924 = trunc i64 %1923 to i32
  store i32 %1924, ptr %106, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %107) #7
  %1925 = load ptr, ptr %79, align 8, !tbaa !5
  %1926 = icmp ne ptr null, %1925
  br i1 %1926, label %1927, label %1938

1927:                                             ; preds = %1904
  %1928 = load ptr, ptr %79, align 8, !tbaa !5
  %1929 = load i32, ptr %105, align 4, !tbaa !9
  %1930 = load i32, ptr %21, align 4, !tbaa !9
  %1931 = mul nsw i32 %1929, %1930
  %1932 = load i32, ptr %106, align 4, !tbaa !9
  %1933 = add nsw i32 %1931, %1932
  %1934 = sext i32 %1933 to i64
  %1935 = getelementptr inbounds i64, ptr %1928, i64 %1934
  %1936 = load i64, ptr %1935, align 8, !tbaa !18
  %1937 = sitofp i64 %1936 to double
  br label %1939

1938:                                             ; preds = %1904
  br label %1939

1939:                                             ; preds = %1938, %1927
  %1940 = phi double [ %1937, %1927 ], [ 0.000000e+00, %1938 ]
  store double %1940, ptr %107, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %108) #7
  %1941 = load ptr, ptr %78, align 8, !tbaa !5
  %1942 = load i32, ptr %105, align 4, !tbaa !9
  %1943 = load i32, ptr %20, align 4, !tbaa !9
  %1944 = mul nsw i32 %1942, %1943
  %1945 = load i32, ptr %106, align 4, !tbaa !9
  %1946 = add nsw i32 %1944, %1945
  %1947 = sext i32 %1946 to i64
  %1948 = getelementptr inbounds i64, ptr %1941, i64 %1947
  %1949 = load i64, ptr %1948, align 8, !tbaa !18
  %1950 = sitofp i64 %1949 to double
  store double %1950, ptr %108, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %109) #7
  %1951 = load double, ptr %107, align 8, !tbaa !17
  %1952 = fcmp ole double 0.000000e+00, %1951
  br i1 %1952, label %1953, label %1955

1953:                                             ; preds = %1939
  %1954 = load double, ptr %107, align 8, !tbaa !17
  br label %1958

1955:                                             ; preds = %1939
  %1956 = load double, ptr %107, align 8, !tbaa !17
  %1957 = fneg double %1956
  br label %1958

1958:                                             ; preds = %1955, %1953
  %1959 = phi double [ %1954, %1953 ], [ %1957, %1955 ]
  store double %1959, ptr %109, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %110) #7
  %1960 = load double, ptr %108, align 8, !tbaa !17
  %1961 = fcmp ole double 0.000000e+00, %1960
  br i1 %1961, label %1962, label %1964

1962:                                             ; preds = %1958
  %1963 = load double, ptr %108, align 8, !tbaa !17
  br label %1967

1964:                                             ; preds = %1958
  %1965 = load double, ptr %108, align 8, !tbaa !17
  %1966 = fneg double %1965
  br label %1967

1967:                                             ; preds = %1964, %1962
  %1968 = phi double [ %1963, %1962 ], [ %1966, %1964 ]
  store double %1968, ptr %110, align 8, !tbaa !17
  %1969 = load double, ptr %108, align 8, !tbaa !17
  %1970 = load ptr, ptr %9, align 8, !tbaa !5
  %1971 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %1970, i32 0, i32 11
  %1972 = load double, ptr %1971, align 8, !tbaa !14
  %1973 = fcmp olt double %1969, %1972
  br i1 %1973, label %1974, label %1978

1974:                                             ; preds = %1967
  %1975 = load double, ptr %108, align 8, !tbaa !17
  %1976 = load ptr, ptr %9, align 8, !tbaa !5
  %1977 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %1976, i32 0, i32 11
  store double %1975, ptr %1977, align 8, !tbaa !14
  br label %1978

1978:                                             ; preds = %1974, %1967
  %1979 = load double, ptr %108, align 8, !tbaa !17
  %1980 = load ptr, ptr %9, align 8, !tbaa !5
  %1981 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %1980, i32 0, i32 12
  %1982 = load double, ptr %1981, align 8, !tbaa !20
  %1983 = fcmp ogt double %1979, %1982
  br i1 %1983, label %1984, label %1988

1984:                                             ; preds = %1978
  %1985 = load double, ptr %108, align 8, !tbaa !17
  %1986 = load ptr, ptr %9, align 8, !tbaa !5
  %1987 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %1986, i32 0, i32 12
  store double %1985, ptr %1987, align 8, !tbaa !20
  br label %1988

1988:                                             ; preds = %1984, %1978
  %1989 = load double, ptr %107, align 8, !tbaa !17
  %1990 = load double, ptr %107, align 8, !tbaa !17
  %1991 = fcmp oeq double %1989, %1990
  br i1 %1991, label %1992, label %2140

1992:                                             ; preds = %1988
  %1993 = load double, ptr %27, align 8, !tbaa !17
  %1994 = load double, ptr %109, align 8, !tbaa !17
  %1995 = fcmp ogt double %1993, %1994
  br i1 %1995, label %2000, label %1996

1996:                                             ; preds = %1992
  %1997 = load double, ptr %107, align 8, !tbaa !17
  %1998 = load double, ptr %108, align 8, !tbaa !17
  %1999 = fcmp oeq double %1997, %1998
  br i1 %1999, label %2000, label %2140

2000:                                             ; preds = %1996, %1992
  call void @llvm.lifetime.start.p0(i64 8, ptr %111) #7
  %2001 = load ptr, ptr %79, align 8, !tbaa !5
  %2002 = icmp ne ptr null, %2001
  br i1 %2002, label %2003, label %2017

2003:                                             ; preds = %2000
  %2004 = load double, ptr %108, align 8, !tbaa !17
  %2005 = load double, ptr %107, align 8, !tbaa !17
  %2006 = fcmp olt double %2004, %2005
  br i1 %2006, label %2007, label %2011

2007:                                             ; preds = %2003
  %2008 = load double, ptr %107, align 8, !tbaa !17
  %2009 = load double, ptr %108, align 8, !tbaa !17
  %2010 = fsub double %2008, %2009
  br label %2015

2011:                                             ; preds = %2003
  %2012 = load double, ptr %108, align 8, !tbaa !17
  %2013 = load double, ptr %107, align 8, !tbaa !17
  %2014 = fsub double %2012, %2013
  br label %2015

2015:                                             ; preds = %2011, %2007
  %2016 = phi double [ %2010, %2007 ], [ %2014, %2011 ]
  br label %2018

2017:                                             ; preds = %2000
  br label %2018

2018:                                             ; preds = %2017, %2015
  %2019 = phi double [ %2016, %2015 ], [ 0.000000e+00, %2017 ]
  store double %2019, ptr %111, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %112) #7
  %2020 = load double, ptr %110, align 8, !tbaa !17
  %2021 = fcmp oge double 0.000000e+00, %2020
  br i1 %2021, label %2022, label %2024

2022:                                             ; preds = %2018
  %2023 = load double, ptr %109, align 8, !tbaa !17
  br label %2034

2024:                                             ; preds = %2018
  %2025 = load double, ptr %111, align 8, !tbaa !17
  %2026 = load double, ptr %110, align 8, !tbaa !17
  %2027 = fcmp olt double 0.000000e+00, %2026
  br i1 %2027, label %2028, label %2030

2028:                                             ; preds = %2024
  %2029 = load double, ptr %110, align 8, !tbaa !17
  br label %2031

2030:                                             ; preds = %2024
  br label %2031

2031:                                             ; preds = %2030, %2028
  %2032 = phi double [ %2029, %2028 ], [ 1.000000e+00, %2030 ]
  %2033 = fdiv double %2025, %2032
  br label %2034

2034:                                             ; preds = %2031, %2022
  %2035 = phi double [ %2023, %2022 ], [ %2033, %2031 ]
  store double %2035, ptr %112, align 8, !tbaa !17
  %2036 = load double, ptr %107, align 8, !tbaa !17
  %2037 = load ptr, ptr %9, align 8, !tbaa !5
  %2038 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %2037, i32 0, i32 16
  %2039 = load double, ptr %2038, align 8, !tbaa !21
  %2040 = fcmp olt double %2036, %2039
  br i1 %2040, label %2041, label %2045

2041:                                             ; preds = %2034
  %2042 = load double, ptr %107, align 8, !tbaa !17
  %2043 = load ptr, ptr %9, align 8, !tbaa !5
  %2044 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %2043, i32 0, i32 16
  store double %2042, ptr %2044, align 8, !tbaa !21
  br label %2045

2045:                                             ; preds = %2041, %2034
  %2046 = load double, ptr %107, align 8, !tbaa !17
  %2047 = load ptr, ptr %9, align 8, !tbaa !5
  %2048 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %2047, i32 0, i32 17
  %2049 = load double, ptr %2048, align 8, !tbaa !22
  %2050 = fcmp ogt double %2046, %2049
  br i1 %2050, label %2051, label %2055

2051:                                             ; preds = %2045
  %2052 = load double, ptr %107, align 8, !tbaa !17
  %2053 = load ptr, ptr %9, align 8, !tbaa !5
  %2054 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %2053, i32 0, i32 17
  store double %2052, ptr %2054, align 8, !tbaa !22
  br label %2055

2055:                                             ; preds = %2051, %2045
  %2056 = load ptr, ptr %9, align 8, !tbaa !5
  %2057 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %2056, i32 0, i32 5
  %2058 = load double, ptr %2057, align 8, !tbaa !23
  %2059 = load double, ptr %111, align 8, !tbaa !17
  %2060 = fcmp olt double %2058, %2059
  br i1 %2060, label %2061, label %2077

2061:                                             ; preds = %2055
  %2062 = load double, ptr %111, align 8, !tbaa !17
  %2063 = load ptr, ptr %9, align 8, !tbaa !5
  %2064 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %2063, i32 0, i32 5
  store double %2062, ptr %2064, align 8, !tbaa !23
  %2065 = load double, ptr %108, align 8, !tbaa !17
  %2066 = load ptr, ptr %9, align 8, !tbaa !5
  %2067 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %2066, i32 0, i32 20
  store double %2065, ptr %2067, align 8, !tbaa !24
  %2068 = load double, ptr %107, align 8, !tbaa !17
  %2069 = load ptr, ptr %9, align 8, !tbaa !5
  %2070 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %2069, i32 0, i32 21
  store double %2068, ptr %2070, align 8, !tbaa !25
  %2071 = load i32, ptr %106, align 4, !tbaa !9
  %2072 = load ptr, ptr %9, align 8, !tbaa !5
  %2073 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %2072, i32 0, i32 22
  store i32 %2071, ptr %2073, align 8, !tbaa !26
  %2074 = load i32, ptr %105, align 4, !tbaa !9
  %2075 = load ptr, ptr %9, align 8, !tbaa !5
  %2076 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %2075, i32 0, i32 23
  store i32 %2074, ptr %2076, align 4, !tbaa !27
  br label %2077

2077:                                             ; preds = %2061, %2055
  %2078 = load ptr, ptr %9, align 8, !tbaa !5
  %2079 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %2078, i32 0, i32 6
  %2080 = load double, ptr %2079, align 8, !tbaa !28
  %2081 = load double, ptr %112, align 8, !tbaa !17
  %2082 = fcmp olt double %2080, %2081
  br i1 %2082, label %2083, label %2087

2083:                                             ; preds = %2077
  %2084 = load double, ptr %112, align 8, !tbaa !17
  %2085 = load ptr, ptr %9, align 8, !tbaa !5
  %2086 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %2085, i32 0, i32 6
  store double %2084, ptr %2086, align 8, !tbaa !28
  br label %2087

2087:                                             ; preds = %2083, %2077
  %2088 = load double, ptr %112, align 8, !tbaa !17
  %2089 = load double, ptr %112, align 8, !tbaa !17
  %2090 = fmul double %2088, %2089
  store double %2090, ptr %102, align 8, !tbaa !17
  %2091 = load double, ptr %27, align 8, !tbaa !17
  %2092 = load double, ptr %102, align 8, !tbaa !17
  %2093 = fcmp ogt double %2091, %2092
  br i1 %2093, label %2094, label %2113

2094:                                             ; preds = %2087
  %2095 = load double, ptr %91, align 8, !tbaa !17
  %2096 = load double, ptr %102, align 8, !tbaa !17
  %2097 = fsub double %2096, %2095
  store double %2097, ptr %102, align 8, !tbaa !17
  %2098 = load ptr, ptr %9, align 8, !tbaa !5
  %2099 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %2098, i32 0, i32 8
  %2100 = load double, ptr %2099, align 8, !tbaa !29
  %2101 = load double, ptr %102, align 8, !tbaa !17
  %2102 = fadd double %2100, %2101
  store double %2102, ptr %103, align 8, !tbaa !17
  %2103 = load double, ptr %103, align 8, !tbaa !17
  %2104 = load ptr, ptr %9, align 8, !tbaa !5
  %2105 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %2104, i32 0, i32 8
  %2106 = load double, ptr %2105, align 8, !tbaa !29
  %2107 = fsub double %2103, %2106
  %2108 = load double, ptr %102, align 8, !tbaa !17
  %2109 = fsub double %2107, %2108
  store double %2109, ptr %91, align 8, !tbaa !17
  %2110 = load double, ptr %103, align 8, !tbaa !17
  %2111 = load ptr, ptr %9, align 8, !tbaa !5
  %2112 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %2111, i32 0, i32 8
  store double %2110, ptr %2112, align 8, !tbaa !29
  br label %2113

2113:                                             ; preds = %2094, %2087
  %2114 = load double, ptr %110, align 8, !tbaa !17
  %2115 = call double @libxsmm_kahan_sum(double noundef %2114, ptr noundef %99, ptr noundef %96)
  %2116 = load double, ptr %109, align 8, !tbaa !17
  %2117 = call double @libxsmm_kahan_sum(double noundef %2116, ptr noundef %100, ptr noundef %97)
  %2118 = load double, ptr %111, align 8, !tbaa !17
  %2119 = call double @libxsmm_kahan_sum(double noundef %2118, ptr noundef %101, ptr noundef %98)
  %2120 = load double, ptr %108, align 8, !tbaa !17
  %2121 = load double, ptr %108, align 8, !tbaa !17
  %2122 = fmul double %2120, %2121
  %2123 = call double @libxsmm_kahan_sum(double noundef %2122, ptr noundef %83, ptr noundef %81)
  %2124 = load double, ptr %107, align 8, !tbaa !17
  %2125 = load double, ptr %107, align 8, !tbaa !17
  %2126 = fmul double %2124, %2125
  %2127 = call double @libxsmm_kahan_sum(double noundef %2126, ptr noundef %84, ptr noundef %82)
  %2128 = load double, ptr %111, align 8, !tbaa !17
  %2129 = load double, ptr %111, align 8, !tbaa !17
  %2130 = fmul double %2128, %2129
  store double %2130, ptr %102, align 8, !tbaa !17
  %2131 = load double, ptr %27, align 8, !tbaa !17
  %2132 = load double, ptr %102, align 8, !tbaa !17
  %2133 = fcmp ogt double %2131, %2132
  br i1 %2133, label %2134, label %2139

2134:                                             ; preds = %2113
  %2135 = load double, ptr %102, align 8, !tbaa !17
  %2136 = load ptr, ptr %9, align 8, !tbaa !5
  %2137 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %2136, i32 0, i32 7
  %2138 = call double @libxsmm_kahan_sum(double noundef %2135, ptr noundef %2137, ptr noundef %80)
  br label %2139

2139:                                             ; preds = %2134, %2113
  call void @llvm.lifetime.end.p0(i64 8, ptr %112) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %111) #7
  br label %2164

2140:                                             ; preds = %1996, %1988
  %2141 = load double, ptr %108, align 8, !tbaa !17
  %2142 = load double, ptr %108, align 8, !tbaa !17
  %2143 = fcmp oeq double %2141, %2142
  br i1 %2143, label %2144, label %2148

2144:                                             ; preds = %2140
  %2145 = load double, ptr %27, align 8, !tbaa !17
  %2146 = load double, ptr %110, align 8, !tbaa !17
  %2147 = fcmp ogt double %2145, %2146
  br label %2148

2148:                                             ; preds = %2144, %2140
  %2149 = phi i1 [ false, %2140 ], [ %2147, %2144 ]
  %2150 = zext i1 %2149 to i64
  %2151 = select i1 %2149, i32 1, i32 2
  store i32 %2151, ptr %19, align 4, !tbaa !9
  %2152 = load i32, ptr %106, align 4, !tbaa !9
  %2153 = load ptr, ptr %9, align 8, !tbaa !5
  %2154 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %2153, i32 0, i32 22
  store i32 %2152, ptr %2154, align 8, !tbaa !26
  %2155 = load i32, ptr %105, align 4, !tbaa !9
  %2156 = load ptr, ptr %9, align 8, !tbaa !5
  %2157 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %2156, i32 0, i32 23
  store i32 %2155, ptr %2157, align 4, !tbaa !27
  %2158 = load double, ptr %108, align 8, !tbaa !17
  %2159 = load ptr, ptr %9, align 8, !tbaa !5
  %2160 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %2159, i32 0, i32 20
  store double %2158, ptr %2160, align 8, !tbaa !24
  %2161 = load double, ptr %107, align 8, !tbaa !17
  %2162 = load ptr, ptr %9, align 8, !tbaa !5
  %2163 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %2162, i32 0, i32 21
  store double %2161, ptr %2163, align 8, !tbaa !25
  store i32 18, ptr %60, align 4
  br label %2165

2164:                                             ; preds = %2139
  store i32 0, ptr %60, align 4
  br label %2165

2165:                                             ; preds = %2164, %2148
  call void @llvm.lifetime.end.p0(i64 8, ptr %110) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %109) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %108) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %107) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %106) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %105) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %104) #7
  %2166 = load i32, ptr %60, align 4
  switch i32 %2166, label %15542 [
    i32 0, label %2167
    i32 18, label %2171
  ]

2167:                                             ; preds = %2165
  br label %2168

2168:                                             ; preds = %2167
  %2169 = load i32, ptr %95, align 4, !tbaa !9
  %2170 = add nsw i32 %2169, 1
  store i32 %2170, ptr %95, align 4, !tbaa !9
  br label %1900, !llvm.loop !47

2171:                                             ; preds = %2165, %1900
  %2172 = load i32, ptr %19, align 4, !tbaa !9
  %2173 = icmp eq i32 0, %2172
  br i1 %2173, label %2174, label %2205

2174:                                             ; preds = %2171
  %2175 = load double, ptr %99, align 8, !tbaa !17
  %2176 = load ptr, ptr %9, align 8, !tbaa !5
  %2177 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %2176, i32 0, i32 10
  %2178 = call double @libxsmm_kahan_sum(double noundef %2175, ptr noundef %2177, ptr noundef %89)
  %2179 = load double, ptr %100, align 8, !tbaa !17
  %2180 = load ptr, ptr %9, align 8, !tbaa !5
  %2181 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %2180, i32 0, i32 15
  %2182 = call double @libxsmm_kahan_sum(double noundef %2179, ptr noundef %2181, ptr noundef %90)
  %2183 = load ptr, ptr %9, align 8, !tbaa !5
  %2184 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %2183, i32 0, i32 2
  %2185 = load double, ptr %2184, align 8, !tbaa !32
  %2186 = load double, ptr %101, align 8, !tbaa !17
  %2187 = fcmp olt double %2185, %2186
  br i1 %2187, label %2188, label %2192

2188:                                             ; preds = %2174
  %2189 = load double, ptr %101, align 8, !tbaa !17
  %2190 = load ptr, ptr %9, align 8, !tbaa !5
  %2191 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %2190, i32 0, i32 2
  store double %2189, ptr %2191, align 8, !tbaa !32
  br label %2192

2192:                                             ; preds = %2188, %2174
  %2193 = load double, ptr %85, align 8, !tbaa !17
  %2194 = load double, ptr %99, align 8, !tbaa !17
  %2195 = fcmp olt double %2193, %2194
  br i1 %2195, label %2196, label %2198

2196:                                             ; preds = %2192
  %2197 = load double, ptr %99, align 8, !tbaa !17
  store double %2197, ptr %85, align 8, !tbaa !17
  br label %2198

2198:                                             ; preds = %2196, %2192
  %2199 = load double, ptr %86, align 8, !tbaa !17
  %2200 = load double, ptr %100, align 8, !tbaa !17
  %2201 = fcmp olt double %2199, %2200
  br i1 %2201, label %2202, label %2204

2202:                                             ; preds = %2198
  %2203 = load double, ptr %100, align 8, !tbaa !17
  store double %2203, ptr %86, align 8, !tbaa !17
  br label %2204

2204:                                             ; preds = %2202, %2198
  br label %2206

2205:                                             ; preds = %2171
  store i32 15, ptr %60, align 4
  br label %2207

2206:                                             ; preds = %2204
  store i32 0, ptr %60, align 4
  br label %2207

2207:                                             ; preds = %2206, %2205
  call void @llvm.lifetime.end.p0(i64 8, ptr %103) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %102) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %101) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %100) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %99) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %98) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %97) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %96) #7
  %2208 = load i32, ptr %60, align 4
  switch i32 %2208, label %15542 [
    i32 0, label %2209
    i32 15, label %2213
  ]

2209:                                             ; preds = %2207
  br label %2210

2210:                                             ; preds = %2209
  %2211 = load i32, ptr %94, align 4, !tbaa !9
  %2212 = add nsw i32 %2211, 1
  store i32 %2212, ptr %94, align 4, !tbaa !9
  br label %1895, !llvm.loop !48

2213:                                             ; preds = %2207, %1895
  %2214 = load i32, ptr %19, align 4, !tbaa !9
  %2215 = icmp eq i32 0, %2214
  br i1 %2215, label %2216, label %2480

2216:                                             ; preds = %2213
  call void @llvm.lifetime.start.p0(i64 8, ptr %113) #7
  store double 0.000000e+00, ptr %113, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %114) #7
  store double 0.000000e+00, ptr %114, align 8, !tbaa !17
  %2217 = load ptr, ptr %9, align 8, !tbaa !5
  %2218 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %2217, i32 0, i32 14
  %2219 = load double, ptr %2218, align 8, !tbaa !34
  %2220 = fcmp oeq double 0.000000e+00, %2219
  br i1 %2220, label %2221, label %2222

2221:                                             ; preds = %2216
  br label %2223

2222:                                             ; preds = %2216
  call void @__assert_fail(ptr noundef @.str.1, ptr noundef @.str.2, i32 noundef 130, ptr noundef @__PRETTY_FUNCTION__.libxsmm_matdiff) #9
  unreachable

2223:                                             ; preds = %2221
  %2224 = load ptr, ptr %9, align 8, !tbaa !5
  %2225 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %2224, i32 0, i32 19
  %2226 = load double, ptr %2225, align 8, !tbaa !35
  %2227 = fcmp oeq double 0.000000e+00, %2226
  br i1 %2227, label %2228, label %2229

2228:                                             ; preds = %2223
  br label %2230

2229:                                             ; preds = %2223
  call void @__assert_fail(ptr noundef @.str.3, ptr noundef @.str.2, i32 noundef 131, ptr noundef @__PRETTY_FUNCTION__.libxsmm_matdiff) #9
  unreachable

2230:                                             ; preds = %2228
  %2231 = load i64, ptr %24, align 8, !tbaa !12
  %2232 = icmp ne i64 0, %2231
  br i1 %2232, label %2233, label %2250

2233:                                             ; preds = %2230
  %2234 = load ptr, ptr %9, align 8, !tbaa !5
  %2235 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %2234, i32 0, i32 10
  %2236 = load double, ptr %2235, align 8, !tbaa !36
  %2237 = load i64, ptr %24, align 8, !tbaa !12
  %2238 = uitofp i64 %2237 to double
  %2239 = fdiv double %2236, %2238
  %2240 = load ptr, ptr %9, align 8, !tbaa !5
  %2241 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %2240, i32 0, i32 13
  store double %2239, ptr %2241, align 8, !tbaa !37
  %2242 = load ptr, ptr %9, align 8, !tbaa !5
  %2243 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %2242, i32 0, i32 15
  %2244 = load double, ptr %2243, align 8, !tbaa !38
  %2245 = load i64, ptr %24, align 8, !tbaa !12
  %2246 = uitofp i64 %2245 to double
  %2247 = fdiv double %2244, %2246
  %2248 = load ptr, ptr %9, align 8, !tbaa !5
  %2249 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %2248, i32 0, i32 18
  store double %2247, ptr %2249, align 8, !tbaa !39
  br label %2250

2250:                                             ; preds = %2233, %2230
  %2251 = load double, ptr %85, align 8, !tbaa !17
  %2252 = fcmp oge double 0.000000e+00, %2251
  br i1 %2252, label %2253, label %2255

2253:                                             ; preds = %2250
  %2254 = load double, ptr %86, align 8, !tbaa !17
  br label %2267

2255:                                             ; preds = %2250
  %2256 = load ptr, ptr %9, align 8, !tbaa !5
  %2257 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %2256, i32 0, i32 2
  %2258 = load double, ptr %2257, align 8, !tbaa !32
  %2259 = load double, ptr %85, align 8, !tbaa !17
  %2260 = fcmp olt double 0.000000e+00, %2259
  br i1 %2260, label %2261, label %2263

2261:                                             ; preds = %2255
  %2262 = load double, ptr %85, align 8, !tbaa !17
  br label %2264

2263:                                             ; preds = %2255
  br label %2264

2264:                                             ; preds = %2263, %2261
  %2265 = phi double [ %2262, %2261 ], [ 1.000000e+00, %2263 ]
  %2266 = fdiv double %2258, %2265
  br label %2267

2267:                                             ; preds = %2264, %2253
  %2268 = phi double [ %2254, %2253 ], [ %2266, %2264 ]
  %2269 = load ptr, ptr %9, align 8, !tbaa !5
  %2270 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %2269, i32 0, i32 3
  store double %2268, ptr %2270, align 8, !tbaa !40
  %2271 = load double, ptr %83, align 8, !tbaa !17
  %2272 = fcmp oge double 0.000000e+00, %2271
  br i1 %2272, label %2273, label %2291

2273:                                             ; preds = %2267
  %2274 = load double, ptr %84, align 8, !tbaa !17
  %2275 = load double, ptr %84, align 8, !tbaa !17
  %2276 = fmul double %2274, %2275
  %2277 = load ptr, ptr %9, align 8, !tbaa !5
  %2278 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %2277, i32 0, i32 7
  %2279 = load double, ptr %2278, align 8, !tbaa !41
  %2280 = fcmp olt double %2276, %2279
  br i1 %2280, label %2281, label %2285

2281:                                             ; preds = %2273
  %2282 = load double, ptr %84, align 8, !tbaa !17
  %2283 = load double, ptr %84, align 8, !tbaa !17
  %2284 = fmul double %2282, %2283
  br label %2289

2285:                                             ; preds = %2273
  %2286 = load ptr, ptr %9, align 8, !tbaa !5
  %2287 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %2286, i32 0, i32 7
  %2288 = load double, ptr %2287, align 8, !tbaa !41
  br label %2289

2289:                                             ; preds = %2285, %2281
  %2290 = phi double [ %2284, %2281 ], [ %2288, %2285 ]
  br label %2303

2291:                                             ; preds = %2267
  %2292 = load ptr, ptr %9, align 8, !tbaa !5
  %2293 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %2292, i32 0, i32 7
  %2294 = load double, ptr %2293, align 8, !tbaa !41
  %2295 = load double, ptr %83, align 8, !tbaa !17
  %2296 = fcmp olt double 0.000000e+00, %2295
  br i1 %2296, label %2297, label %2299

2297:                                             ; preds = %2291
  %2298 = load double, ptr %83, align 8, !tbaa !17
  br label %2300

2299:                                             ; preds = %2291
  br label %2300

2300:                                             ; preds = %2299, %2297
  %2301 = phi double [ %2298, %2297 ], [ 1.000000e+00, %2299 ]
  %2302 = fdiv double %2294, %2301
  br label %2303

2303:                                             ; preds = %2300, %2289
  %2304 = phi double [ %2290, %2289 ], [ %2302, %2300 ]
  %2305 = load ptr, ptr %9, align 8, !tbaa !5
  %2306 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %2305, i32 0, i32 4
  store double %2304, ptr %2306, align 8, !tbaa !42
  store i32 0, ptr %95, align 4, !tbaa !9
  br label %2307

2307:                                             ; preds = %2454, %2303
  %2308 = load i32, ptr %95, align 4, !tbaa !9
  %2309 = load i32, ptr %25, align 4, !tbaa !9
  %2310 = icmp slt i32 %2308, %2309
  br i1 %2310, label %2311, label %2457

2311:                                             ; preds = %2307
  call void @llvm.lifetime.start.p0(i64 8, ptr %115) #7
  store double 0.000000e+00, ptr %115, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %116) #7
  store double 0.000000e+00, ptr %116, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %117) #7
  store double 0.000000e+00, ptr %117, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %118) #7
  store double 0.000000e+00, ptr %118, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %119) #7
  store double 0.000000e+00, ptr %119, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %120) #7
  store double 0.000000e+00, ptr %120, align 8, !tbaa !17
  store i32 0, ptr %94, align 4, !tbaa !9
  br label %2312

2312:                                             ; preds = %2428, %2311
  %2313 = load i32, ptr %94, align 4, !tbaa !9
  %2314 = load i32, ptr %26, align 4, !tbaa !9
  %2315 = icmp slt i32 %2313, %2314
  br i1 %2315, label %2316, label %2431

2316:                                             ; preds = %2312
  call void @llvm.lifetime.start.p0(i64 8, ptr %121) #7
  %2317 = load i64, ptr %93, align 8, !tbaa !12
  %2318 = load i32, ptr %94, align 4, !tbaa !9
  %2319 = load i32, ptr %25, align 4, !tbaa !9
  %2320 = mul nsw i32 %2318, %2319
  %2321 = load i32, ptr %95, align 4, !tbaa !9
  %2322 = add nsw i32 %2320, %2321
  %2323 = sext i32 %2322 to i64
  %2324 = mul i64 %2317, %2323
  %2325 = load i64, ptr %92, align 8, !tbaa !12
  %2326 = urem i64 %2324, %2325
  store i64 %2326, ptr %121, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 4, ptr %122) #7
  %2327 = load i64, ptr %121, align 8, !tbaa !12
  %2328 = load i32, ptr %25, align 4, !tbaa !9
  %2329 = sext i32 %2328 to i64
  %2330 = udiv i64 %2327, %2329
  %2331 = trunc i64 %2330 to i32
  store i32 %2331, ptr %122, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %123) #7
  %2332 = load i64, ptr %121, align 8, !tbaa !12
  %2333 = load i32, ptr %25, align 4, !tbaa !9
  %2334 = sext i32 %2333 to i64
  %2335 = urem i64 %2332, %2334
  %2336 = trunc i64 %2335 to i32
  store i32 %2336, ptr %123, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %124) #7
  %2337 = load ptr, ptr %78, align 8, !tbaa !5
  %2338 = load i32, ptr %122, align 4, !tbaa !9
  %2339 = load i32, ptr %20, align 4, !tbaa !9
  %2340 = mul nsw i32 %2338, %2339
  %2341 = load i32, ptr %123, align 4, !tbaa !9
  %2342 = add nsw i32 %2340, %2341
  %2343 = sext i32 %2342 to i64
  %2344 = getelementptr inbounds i64, ptr %2337, i64 %2343
  %2345 = load i64, ptr %2344, align 8, !tbaa !18
  %2346 = sitofp i64 %2345 to double
  store double %2346, ptr %124, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %125) #7
  %2347 = load ptr, ptr %79, align 8, !tbaa !5
  %2348 = icmp ne ptr null, %2347
  br i1 %2348, label %2349, label %2360

2349:                                             ; preds = %2316
  %2350 = load ptr, ptr %79, align 8, !tbaa !5
  %2351 = load i32, ptr %122, align 4, !tbaa !9
  %2352 = load i32, ptr %21, align 4, !tbaa !9
  %2353 = mul nsw i32 %2351, %2352
  %2354 = load i32, ptr %123, align 4, !tbaa !9
  %2355 = add nsw i32 %2353, %2354
  %2356 = sext i32 %2355 to i64
  %2357 = getelementptr inbounds i64, ptr %2350, i64 %2356
  %2358 = load i64, ptr %2357, align 8, !tbaa !18
  %2359 = sitofp i64 %2358 to double
  br label %2361

2360:                                             ; preds = %2316
  br label %2361

2361:                                             ; preds = %2360, %2349
  %2362 = phi double [ %2359, %2349 ], [ 0.000000e+00, %2360 ]
  store double %2362, ptr %125, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %126) #7
  %2363 = load ptr, ptr %79, align 8, !tbaa !5
  %2364 = icmp ne ptr null, %2363
  br i1 %2364, label %2365, label %2379

2365:                                             ; preds = %2361
  %2366 = load double, ptr %124, align 8, !tbaa !17
  %2367 = load double, ptr %125, align 8, !tbaa !17
  %2368 = fcmp olt double %2366, %2367
  br i1 %2368, label %2369, label %2373

2369:                                             ; preds = %2365
  %2370 = load double, ptr %125, align 8, !tbaa !17
  %2371 = load double, ptr %124, align 8, !tbaa !17
  %2372 = fsub double %2370, %2371
  br label %2377

2373:                                             ; preds = %2365
  %2374 = load double, ptr %124, align 8, !tbaa !17
  %2375 = load double, ptr %125, align 8, !tbaa !17
  %2376 = fsub double %2374, %2375
  br label %2377

2377:                                             ; preds = %2373, %2369
  %2378 = phi double [ %2372, %2369 ], [ %2376, %2373 ]
  br label %2380

2379:                                             ; preds = %2361
  br label %2380

2380:                                             ; preds = %2379, %2377
  %2381 = phi double [ %2378, %2377 ], [ 0.000000e+00, %2379 ]
  store double %2381, ptr %126, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %127) #7
  %2382 = load double, ptr %124, align 8, !tbaa !17
  %2383 = load ptr, ptr %9, align 8, !tbaa !5
  %2384 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %2383, i32 0, i32 13
  %2385 = load double, ptr %2384, align 8, !tbaa !37
  %2386 = fsub double %2382, %2385
  store double %2386, ptr %127, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %128) #7
  %2387 = load double, ptr %125, align 8, !tbaa !17
  %2388 = load ptr, ptr %9, align 8, !tbaa !5
  %2389 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %2388, i32 0, i32 18
  %2390 = load double, ptr %2389, align 8, !tbaa !39
  %2391 = fsub double %2387, %2390
  store double %2391, ptr %128, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %129) #7
  %2392 = load double, ptr %124, align 8, !tbaa !17
  %2393 = fcmp ole double 0.000000e+00, %2392
  br i1 %2393, label %2394, label %2396

2394:                                             ; preds = %2380
  %2395 = load double, ptr %124, align 8, !tbaa !17
  br label %2399

2396:                                             ; preds = %2380
  %2397 = load double, ptr %124, align 8, !tbaa !17
  %2398 = fneg double %2397
  br label %2399

2399:                                             ; preds = %2396, %2394
  %2400 = phi double [ %2395, %2394 ], [ %2398, %2396 ]
  store double %2400, ptr %129, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %130) #7
  %2401 = load double, ptr %125, align 8, !tbaa !17
  %2402 = fcmp ole double 0.000000e+00, %2401
  br i1 %2402, label %2403, label %2405

2403:                                             ; preds = %2399
  %2404 = load double, ptr %125, align 8, !tbaa !17
  br label %2408

2405:                                             ; preds = %2399
  %2406 = load double, ptr %125, align 8, !tbaa !17
  %2407 = fneg double %2406
  br label %2408

2408:                                             ; preds = %2405, %2403
  %2409 = phi double [ %2404, %2403 ], [ %2407, %2405 ]
  store double %2409, ptr %130, align 8, !tbaa !17
  %2410 = load double, ptr %127, align 8, !tbaa !17
  %2411 = load double, ptr %127, align 8, !tbaa !17
  %2412 = fmul double %2410, %2411
  %2413 = load ptr, ptr %9, align 8, !tbaa !5
  %2414 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %2413, i32 0, i32 14
  %2415 = call double @libxsmm_kahan_sum(double noundef %2412, ptr noundef %2414, ptr noundef %113)
  %2416 = load double, ptr %128, align 8, !tbaa !17
  %2417 = load double, ptr %128, align 8, !tbaa !17
  %2418 = fmul double %2416, %2417
  %2419 = load ptr, ptr %9, align 8, !tbaa !5
  %2420 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %2419, i32 0, i32 19
  %2421 = call double @libxsmm_kahan_sum(double noundef %2418, ptr noundef %2420, ptr noundef %114)
  %2422 = load double, ptr %129, align 8, !tbaa !17
  %2423 = call double @libxsmm_kahan_sum(double noundef %2422, ptr noundef %118, ptr noundef %115)
  %2424 = load double, ptr %130, align 8, !tbaa !17
  %2425 = call double @libxsmm_kahan_sum(double noundef %2424, ptr noundef %119, ptr noundef %116)
  %2426 = load double, ptr %126, align 8, !tbaa !17
  %2427 = call double @libxsmm_kahan_sum(double noundef %2426, ptr noundef %120, ptr noundef %117)
  call void @llvm.lifetime.end.p0(i64 8, ptr %130) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %129) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %128) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %127) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %126) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %125) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %124) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %123) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %122) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %121) #7
  br label %2428

2428:                                             ; preds = %2408
  %2429 = load i32, ptr %94, align 4, !tbaa !9
  %2430 = add nsw i32 %2429, 1
  store i32 %2430, ptr %94, align 4, !tbaa !9
  br label %2312, !llvm.loop !49

2431:                                             ; preds = %2312
  %2432 = load ptr, ptr %9, align 8, !tbaa !5
  %2433 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %2432, i32 0, i32 0
  %2434 = load double, ptr %2433, align 8, !tbaa !44
  %2435 = load double, ptr %120, align 8, !tbaa !17
  %2436 = fcmp olt double %2434, %2435
  br i1 %2436, label %2437, label %2441

2437:                                             ; preds = %2431
  %2438 = load double, ptr %120, align 8, !tbaa !17
  %2439 = load ptr, ptr %9, align 8, !tbaa !5
  %2440 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %2439, i32 0, i32 0
  store double %2438, ptr %2440, align 8, !tbaa !44
  br label %2441

2441:                                             ; preds = %2437, %2431
  %2442 = load double, ptr %87, align 8, !tbaa !17
  %2443 = load double, ptr %118, align 8, !tbaa !17
  %2444 = fcmp olt double %2442, %2443
  br i1 %2444, label %2445, label %2447

2445:                                             ; preds = %2441
  %2446 = load double, ptr %118, align 8, !tbaa !17
  store double %2446, ptr %87, align 8, !tbaa !17
  br label %2447

2447:                                             ; preds = %2445, %2441
  %2448 = load double, ptr %88, align 8, !tbaa !17
  %2449 = load double, ptr %119, align 8, !tbaa !17
  %2450 = fcmp olt double %2448, %2449
  br i1 %2450, label %2451, label %2453

2451:                                             ; preds = %2447
  %2452 = load double, ptr %119, align 8, !tbaa !17
  store double %2452, ptr %88, align 8, !tbaa !17
  br label %2453

2453:                                             ; preds = %2451, %2447
  call void @llvm.lifetime.end.p0(i64 8, ptr %120) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %119) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %118) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %117) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %116) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %115) #7
  br label %2454

2454:                                             ; preds = %2453
  %2455 = load i32, ptr %95, align 4, !tbaa !9
  %2456 = add nsw i32 %2455, 1
  store i32 %2456, ptr %95, align 4, !tbaa !9
  br label %2307, !llvm.loop !50

2457:                                             ; preds = %2307
  %2458 = load double, ptr %87, align 8, !tbaa !17
  %2459 = fcmp oge double 0.000000e+00, %2458
  br i1 %2459, label %2460, label %2464

2460:                                             ; preds = %2457
  %2461 = load ptr, ptr %9, align 8, !tbaa !5
  %2462 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %2461, i32 0, i32 0
  %2463 = load double, ptr %2462, align 8, !tbaa !44
  br label %2476

2464:                                             ; preds = %2457
  %2465 = load ptr, ptr %9, align 8, !tbaa !5
  %2466 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %2465, i32 0, i32 0
  %2467 = load double, ptr %2466, align 8, !tbaa !44
  %2468 = load double, ptr %87, align 8, !tbaa !17
  %2469 = fcmp olt double 0.000000e+00, %2468
  br i1 %2469, label %2470, label %2472

2470:                                             ; preds = %2464
  %2471 = load double, ptr %87, align 8, !tbaa !17
  br label %2473

2472:                                             ; preds = %2464
  br label %2473

2473:                                             ; preds = %2472, %2470
  %2474 = phi double [ %2471, %2470 ], [ 1.000000e+00, %2472 ]
  %2475 = fdiv double %2467, %2474
  br label %2476

2476:                                             ; preds = %2473, %2460
  %2477 = phi double [ %2463, %2460 ], [ %2475, %2473 ]
  %2478 = load ptr, ptr %9, align 8, !tbaa !5
  %2479 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %2478, i32 0, i32 1
  store double %2477, ptr %2479, align 8, !tbaa !46
  call void @llvm.lifetime.end.p0(i64 8, ptr %114) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %113) #7
  br label %2480

2480:                                             ; preds = %2476, %2213
  call void @llvm.lifetime.end.p0(i64 4, ptr %95) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %94) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %93) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %92) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %91) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %90) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %89) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %88) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %87) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %86) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %85) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %84) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %83) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %82) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %81) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %80) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %79) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %78) #7
  br label %2481

2481:                                             ; preds = %2480, %1884
  br label %15200

2482:                                             ; preds = %1323
  %2483 = load i32, ptr %23, align 4, !tbaa !9
  %2484 = icmp eq i32 0, %2483
  br i1 %2484, label %2485, label %3038

2485:                                             ; preds = %2482
  call void @llvm.lifetime.start.p0(i64 8, ptr %131) #7
  %2486 = load ptr, ptr %13, align 8, !tbaa !5
  store ptr %2486, ptr %131, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %132) #7
  %2487 = load ptr, ptr %14, align 8, !tbaa !5
  store ptr %2487, ptr %132, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %133) #7
  store double 0.000000e+00, ptr %133, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %134) #7
  store double 0.000000e+00, ptr %134, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %135) #7
  store double 0.000000e+00, ptr %135, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %136) #7
  store double 0.000000e+00, ptr %136, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %137) #7
  store double 0.000000e+00, ptr %137, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %138) #7
  store double 0.000000e+00, ptr %138, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %139) #7
  store double 0.000000e+00, ptr %139, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %140) #7
  store double 0.000000e+00, ptr %140, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %141) #7
  store double 0.000000e+00, ptr %141, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %142) #7
  store double 0.000000e+00, ptr %142, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %143) #7
  store double 0.000000e+00, ptr %143, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %144) #7
  store double 0.000000e+00, ptr %144, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 4, ptr %145) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %146) #7
  store i32 0, ptr %145, align 4, !tbaa !9
  br label %2488

2488:                                             ; preds = %2785, %2485
  %2489 = load i32, ptr %145, align 4, !tbaa !9
  %2490 = load i32, ptr %26, align 4, !tbaa !9
  %2491 = icmp slt i32 %2489, %2490
  br i1 %2491, label %2492, label %2788

2492:                                             ; preds = %2488
  call void @llvm.lifetime.start.p0(i64 8, ptr %147) #7
  store double 0.000000e+00, ptr %147, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %148) #7
  store double 0.000000e+00, ptr %148, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %149) #7
  store double 0.000000e+00, ptr %149, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %150) #7
  store double 0.000000e+00, ptr %150, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %151) #7
  store double 0.000000e+00, ptr %151, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %152) #7
  store double 0.000000e+00, ptr %152, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %153) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %154) #7
  store i32 0, ptr %146, align 4, !tbaa !9
  br label %2493

2493:                                             ; preds = %2743, %2492
  %2494 = load i32, ptr %146, align 4, !tbaa !9
  %2495 = load i32, ptr %25, align 4, !tbaa !9
  %2496 = icmp slt i32 %2494, %2495
  br i1 %2496, label %2497, label %2746

2497:                                             ; preds = %2493
  call void @llvm.lifetime.start.p0(i64 4, ptr %155) #7
  %2498 = load i32, ptr %145, align 4, !tbaa !9
  store i32 %2498, ptr %155, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %156) #7
  %2499 = load i32, ptr %146, align 4, !tbaa !9
  store i32 %2499, ptr %156, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %157) #7
  %2500 = load ptr, ptr %132, align 8, !tbaa !5
  %2501 = icmp ne ptr null, %2500
  br i1 %2501, label %2502, label %2513

2502:                                             ; preds = %2497
  %2503 = load ptr, ptr %132, align 8, !tbaa !5
  %2504 = load i32, ptr %155, align 4, !tbaa !9
  %2505 = load i32, ptr %21, align 4, !tbaa !9
  %2506 = mul nsw i32 %2504, %2505
  %2507 = load i32, ptr %156, align 4, !tbaa !9
  %2508 = add nsw i32 %2506, %2507
  %2509 = sext i32 %2508 to i64
  %2510 = getelementptr inbounds i32, ptr %2503, i64 %2509
  %2511 = load i32, ptr %2510, align 4, !tbaa !9
  %2512 = sitofp i32 %2511 to double
  br label %2514

2513:                                             ; preds = %2497
  br label %2514

2514:                                             ; preds = %2513, %2502
  %2515 = phi double [ %2512, %2502 ], [ 0.000000e+00, %2513 ]
  store double %2515, ptr %157, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %158) #7
  %2516 = load ptr, ptr %131, align 8, !tbaa !5
  %2517 = load i32, ptr %155, align 4, !tbaa !9
  %2518 = load i32, ptr %20, align 4, !tbaa !9
  %2519 = mul nsw i32 %2517, %2518
  %2520 = load i32, ptr %156, align 4, !tbaa !9
  %2521 = add nsw i32 %2519, %2520
  %2522 = sext i32 %2521 to i64
  %2523 = getelementptr inbounds i32, ptr %2516, i64 %2522
  %2524 = load i32, ptr %2523, align 4, !tbaa !9
  %2525 = sitofp i32 %2524 to double
  store double %2525, ptr %158, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %159) #7
  %2526 = load double, ptr %157, align 8, !tbaa !17
  %2527 = fcmp ole double 0.000000e+00, %2526
  br i1 %2527, label %2528, label %2530

2528:                                             ; preds = %2514
  %2529 = load double, ptr %157, align 8, !tbaa !17
  br label %2533

2530:                                             ; preds = %2514
  %2531 = load double, ptr %157, align 8, !tbaa !17
  %2532 = fneg double %2531
  br label %2533

2533:                                             ; preds = %2530, %2528
  %2534 = phi double [ %2529, %2528 ], [ %2532, %2530 ]
  store double %2534, ptr %159, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %160) #7
  %2535 = load double, ptr %158, align 8, !tbaa !17
  %2536 = fcmp ole double 0.000000e+00, %2535
  br i1 %2536, label %2537, label %2539

2537:                                             ; preds = %2533
  %2538 = load double, ptr %158, align 8, !tbaa !17
  br label %2542

2539:                                             ; preds = %2533
  %2540 = load double, ptr %158, align 8, !tbaa !17
  %2541 = fneg double %2540
  br label %2542

2542:                                             ; preds = %2539, %2537
  %2543 = phi double [ %2538, %2537 ], [ %2541, %2539 ]
  store double %2543, ptr %160, align 8, !tbaa !17
  %2544 = load double, ptr %158, align 8, !tbaa !17
  %2545 = load ptr, ptr %9, align 8, !tbaa !5
  %2546 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %2545, i32 0, i32 11
  %2547 = load double, ptr %2546, align 8, !tbaa !14
  %2548 = fcmp olt double %2544, %2547
  br i1 %2548, label %2549, label %2553

2549:                                             ; preds = %2542
  %2550 = load double, ptr %158, align 8, !tbaa !17
  %2551 = load ptr, ptr %9, align 8, !tbaa !5
  %2552 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %2551, i32 0, i32 11
  store double %2550, ptr %2552, align 8, !tbaa !14
  br label %2553

2553:                                             ; preds = %2549, %2542
  %2554 = load double, ptr %158, align 8, !tbaa !17
  %2555 = load ptr, ptr %9, align 8, !tbaa !5
  %2556 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %2555, i32 0, i32 12
  %2557 = load double, ptr %2556, align 8, !tbaa !20
  %2558 = fcmp ogt double %2554, %2557
  br i1 %2558, label %2559, label %2563

2559:                                             ; preds = %2553
  %2560 = load double, ptr %158, align 8, !tbaa !17
  %2561 = load ptr, ptr %9, align 8, !tbaa !5
  %2562 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %2561, i32 0, i32 12
  store double %2560, ptr %2562, align 8, !tbaa !20
  br label %2563

2563:                                             ; preds = %2559, %2553
  %2564 = load double, ptr %157, align 8, !tbaa !17
  %2565 = load double, ptr %157, align 8, !tbaa !17
  %2566 = fcmp oeq double %2564, %2565
  br i1 %2566, label %2567, label %2715

2567:                                             ; preds = %2563
  %2568 = load double, ptr %27, align 8, !tbaa !17
  %2569 = load double, ptr %159, align 8, !tbaa !17
  %2570 = fcmp ogt double %2568, %2569
  br i1 %2570, label %2575, label %2571

2571:                                             ; preds = %2567
  %2572 = load double, ptr %157, align 8, !tbaa !17
  %2573 = load double, ptr %158, align 8, !tbaa !17
  %2574 = fcmp oeq double %2572, %2573
  br i1 %2574, label %2575, label %2715

2575:                                             ; preds = %2571, %2567
  call void @llvm.lifetime.start.p0(i64 8, ptr %161) #7
  %2576 = load ptr, ptr %132, align 8, !tbaa !5
  %2577 = icmp ne ptr null, %2576
  br i1 %2577, label %2578, label %2592

2578:                                             ; preds = %2575
  %2579 = load double, ptr %158, align 8, !tbaa !17
  %2580 = load double, ptr %157, align 8, !tbaa !17
  %2581 = fcmp olt double %2579, %2580
  br i1 %2581, label %2582, label %2586

2582:                                             ; preds = %2578
  %2583 = load double, ptr %157, align 8, !tbaa !17
  %2584 = load double, ptr %158, align 8, !tbaa !17
  %2585 = fsub double %2583, %2584
  br label %2590

2586:                                             ; preds = %2578
  %2587 = load double, ptr %158, align 8, !tbaa !17
  %2588 = load double, ptr %157, align 8, !tbaa !17
  %2589 = fsub double %2587, %2588
  br label %2590

2590:                                             ; preds = %2586, %2582
  %2591 = phi double [ %2585, %2582 ], [ %2589, %2586 ]
  br label %2593

2592:                                             ; preds = %2575
  br label %2593

2593:                                             ; preds = %2592, %2590
  %2594 = phi double [ %2591, %2590 ], [ 0.000000e+00, %2592 ]
  store double %2594, ptr %161, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %162) #7
  %2595 = load double, ptr %160, align 8, !tbaa !17
  %2596 = fcmp oge double 0.000000e+00, %2595
  br i1 %2596, label %2597, label %2599

2597:                                             ; preds = %2593
  %2598 = load double, ptr %159, align 8, !tbaa !17
  br label %2609

2599:                                             ; preds = %2593
  %2600 = load double, ptr %161, align 8, !tbaa !17
  %2601 = load double, ptr %160, align 8, !tbaa !17
  %2602 = fcmp olt double 0.000000e+00, %2601
  br i1 %2602, label %2603, label %2605

2603:                                             ; preds = %2599
  %2604 = load double, ptr %160, align 8, !tbaa !17
  br label %2606

2605:                                             ; preds = %2599
  br label %2606

2606:                                             ; preds = %2605, %2603
  %2607 = phi double [ %2604, %2603 ], [ 1.000000e+00, %2605 ]
  %2608 = fdiv double %2600, %2607
  br label %2609

2609:                                             ; preds = %2606, %2597
  %2610 = phi double [ %2598, %2597 ], [ %2608, %2606 ]
  store double %2610, ptr %162, align 8, !tbaa !17
  %2611 = load double, ptr %157, align 8, !tbaa !17
  %2612 = load ptr, ptr %9, align 8, !tbaa !5
  %2613 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %2612, i32 0, i32 16
  %2614 = load double, ptr %2613, align 8, !tbaa !21
  %2615 = fcmp olt double %2611, %2614
  br i1 %2615, label %2616, label %2620

2616:                                             ; preds = %2609
  %2617 = load double, ptr %157, align 8, !tbaa !17
  %2618 = load ptr, ptr %9, align 8, !tbaa !5
  %2619 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %2618, i32 0, i32 16
  store double %2617, ptr %2619, align 8, !tbaa !21
  br label %2620

2620:                                             ; preds = %2616, %2609
  %2621 = load double, ptr %157, align 8, !tbaa !17
  %2622 = load ptr, ptr %9, align 8, !tbaa !5
  %2623 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %2622, i32 0, i32 17
  %2624 = load double, ptr %2623, align 8, !tbaa !22
  %2625 = fcmp ogt double %2621, %2624
  br i1 %2625, label %2626, label %2630

2626:                                             ; preds = %2620
  %2627 = load double, ptr %157, align 8, !tbaa !17
  %2628 = load ptr, ptr %9, align 8, !tbaa !5
  %2629 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %2628, i32 0, i32 17
  store double %2627, ptr %2629, align 8, !tbaa !22
  br label %2630

2630:                                             ; preds = %2626, %2620
  %2631 = load ptr, ptr %9, align 8, !tbaa !5
  %2632 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %2631, i32 0, i32 5
  %2633 = load double, ptr %2632, align 8, !tbaa !23
  %2634 = load double, ptr %161, align 8, !tbaa !17
  %2635 = fcmp olt double %2633, %2634
  br i1 %2635, label %2636, label %2652

2636:                                             ; preds = %2630
  %2637 = load double, ptr %161, align 8, !tbaa !17
  %2638 = load ptr, ptr %9, align 8, !tbaa !5
  %2639 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %2638, i32 0, i32 5
  store double %2637, ptr %2639, align 8, !tbaa !23
  %2640 = load double, ptr %158, align 8, !tbaa !17
  %2641 = load ptr, ptr %9, align 8, !tbaa !5
  %2642 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %2641, i32 0, i32 20
  store double %2640, ptr %2642, align 8, !tbaa !24
  %2643 = load double, ptr %157, align 8, !tbaa !17
  %2644 = load ptr, ptr %9, align 8, !tbaa !5
  %2645 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %2644, i32 0, i32 21
  store double %2643, ptr %2645, align 8, !tbaa !25
  %2646 = load i32, ptr %156, align 4, !tbaa !9
  %2647 = load ptr, ptr %9, align 8, !tbaa !5
  %2648 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %2647, i32 0, i32 22
  store i32 %2646, ptr %2648, align 8, !tbaa !26
  %2649 = load i32, ptr %155, align 4, !tbaa !9
  %2650 = load ptr, ptr %9, align 8, !tbaa !5
  %2651 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %2650, i32 0, i32 23
  store i32 %2649, ptr %2651, align 4, !tbaa !27
  br label %2652

2652:                                             ; preds = %2636, %2630
  %2653 = load ptr, ptr %9, align 8, !tbaa !5
  %2654 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %2653, i32 0, i32 6
  %2655 = load double, ptr %2654, align 8, !tbaa !28
  %2656 = load double, ptr %162, align 8, !tbaa !17
  %2657 = fcmp olt double %2655, %2656
  br i1 %2657, label %2658, label %2662

2658:                                             ; preds = %2652
  %2659 = load double, ptr %162, align 8, !tbaa !17
  %2660 = load ptr, ptr %9, align 8, !tbaa !5
  %2661 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %2660, i32 0, i32 6
  store double %2659, ptr %2661, align 8, !tbaa !28
  br label %2662

2662:                                             ; preds = %2658, %2652
  %2663 = load double, ptr %162, align 8, !tbaa !17
  %2664 = load double, ptr %162, align 8, !tbaa !17
  %2665 = fmul double %2663, %2664
  store double %2665, ptr %153, align 8, !tbaa !17
  %2666 = load double, ptr %27, align 8, !tbaa !17
  %2667 = load double, ptr %153, align 8, !tbaa !17
  %2668 = fcmp ogt double %2666, %2667
  br i1 %2668, label %2669, label %2688

2669:                                             ; preds = %2662
  %2670 = load double, ptr %144, align 8, !tbaa !17
  %2671 = load double, ptr %153, align 8, !tbaa !17
  %2672 = fsub double %2671, %2670
  store double %2672, ptr %153, align 8, !tbaa !17
  %2673 = load ptr, ptr %9, align 8, !tbaa !5
  %2674 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %2673, i32 0, i32 8
  %2675 = load double, ptr %2674, align 8, !tbaa !29
  %2676 = load double, ptr %153, align 8, !tbaa !17
  %2677 = fadd double %2675, %2676
  store double %2677, ptr %154, align 8, !tbaa !17
  %2678 = load double, ptr %154, align 8, !tbaa !17
  %2679 = load ptr, ptr %9, align 8, !tbaa !5
  %2680 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %2679, i32 0, i32 8
  %2681 = load double, ptr %2680, align 8, !tbaa !29
  %2682 = fsub double %2678, %2681
  %2683 = load double, ptr %153, align 8, !tbaa !17
  %2684 = fsub double %2682, %2683
  store double %2684, ptr %144, align 8, !tbaa !17
  %2685 = load double, ptr %154, align 8, !tbaa !17
  %2686 = load ptr, ptr %9, align 8, !tbaa !5
  %2687 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %2686, i32 0, i32 8
  store double %2685, ptr %2687, align 8, !tbaa !29
  br label %2688

2688:                                             ; preds = %2669, %2662
  %2689 = load double, ptr %160, align 8, !tbaa !17
  %2690 = call double @libxsmm_kahan_sum(double noundef %2689, ptr noundef %150, ptr noundef %147)
  %2691 = load double, ptr %159, align 8, !tbaa !17
  %2692 = call double @libxsmm_kahan_sum(double noundef %2691, ptr noundef %151, ptr noundef %148)
  %2693 = load double, ptr %161, align 8, !tbaa !17
  %2694 = call double @libxsmm_kahan_sum(double noundef %2693, ptr noundef %152, ptr noundef %149)
  %2695 = load double, ptr %158, align 8, !tbaa !17
  %2696 = load double, ptr %158, align 8, !tbaa !17
  %2697 = fmul double %2695, %2696
  %2698 = call double @libxsmm_kahan_sum(double noundef %2697, ptr noundef %136, ptr noundef %134)
  %2699 = load double, ptr %157, align 8, !tbaa !17
  %2700 = load double, ptr %157, align 8, !tbaa !17
  %2701 = fmul double %2699, %2700
  %2702 = call double @libxsmm_kahan_sum(double noundef %2701, ptr noundef %137, ptr noundef %135)
  %2703 = load double, ptr %161, align 8, !tbaa !17
  %2704 = load double, ptr %161, align 8, !tbaa !17
  %2705 = fmul double %2703, %2704
  store double %2705, ptr %153, align 8, !tbaa !17
  %2706 = load double, ptr %27, align 8, !tbaa !17
  %2707 = load double, ptr %153, align 8, !tbaa !17
  %2708 = fcmp ogt double %2706, %2707
  br i1 %2708, label %2709, label %2714

2709:                                             ; preds = %2688
  %2710 = load double, ptr %153, align 8, !tbaa !17
  %2711 = load ptr, ptr %9, align 8, !tbaa !5
  %2712 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %2711, i32 0, i32 7
  %2713 = call double @libxsmm_kahan_sum(double noundef %2710, ptr noundef %2712, ptr noundef %133)
  br label %2714

2714:                                             ; preds = %2709, %2688
  call void @llvm.lifetime.end.p0(i64 8, ptr %162) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %161) #7
  br label %2739

2715:                                             ; preds = %2571, %2563
  %2716 = load double, ptr %158, align 8, !tbaa !17
  %2717 = load double, ptr %158, align 8, !tbaa !17
  %2718 = fcmp oeq double %2716, %2717
  br i1 %2718, label %2719, label %2723

2719:                                             ; preds = %2715
  %2720 = load double, ptr %27, align 8, !tbaa !17
  %2721 = load double, ptr %160, align 8, !tbaa !17
  %2722 = fcmp ogt double %2720, %2721
  br label %2723

2723:                                             ; preds = %2719, %2715
  %2724 = phi i1 [ false, %2715 ], [ %2722, %2719 ]
  %2725 = zext i1 %2724 to i64
  %2726 = select i1 %2724, i32 1, i32 2
  store i32 %2726, ptr %19, align 4, !tbaa !9
  %2727 = load i32, ptr %156, align 4, !tbaa !9
  %2728 = load ptr, ptr %9, align 8, !tbaa !5
  %2729 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %2728, i32 0, i32 22
  store i32 %2727, ptr %2729, align 8, !tbaa !26
  %2730 = load i32, ptr %155, align 4, !tbaa !9
  %2731 = load ptr, ptr %9, align 8, !tbaa !5
  %2732 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %2731, i32 0, i32 23
  store i32 %2730, ptr %2732, align 4, !tbaa !27
  %2733 = load double, ptr %158, align 8, !tbaa !17
  %2734 = load ptr, ptr %9, align 8, !tbaa !5
  %2735 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %2734, i32 0, i32 20
  store double %2733, ptr %2735, align 8, !tbaa !24
  %2736 = load double, ptr %157, align 8, !tbaa !17
  %2737 = load ptr, ptr %9, align 8, !tbaa !5
  %2738 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %2737, i32 0, i32 21
  store double %2736, ptr %2738, align 8, !tbaa !25
  store i32 30, ptr %60, align 4
  br label %2740

2739:                                             ; preds = %2714
  store i32 0, ptr %60, align 4
  br label %2740

2740:                                             ; preds = %2739, %2723
  call void @llvm.lifetime.end.p0(i64 8, ptr %160) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %159) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %158) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %157) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %156) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %155) #7
  %2741 = load i32, ptr %60, align 4
  switch i32 %2741, label %15542 [
    i32 0, label %2742
    i32 30, label %2746
  ]

2742:                                             ; preds = %2740
  br label %2743

2743:                                             ; preds = %2742
  %2744 = load i32, ptr %146, align 4, !tbaa !9
  %2745 = add nsw i32 %2744, 1
  store i32 %2745, ptr %146, align 4, !tbaa !9
  br label %2493, !llvm.loop !51

2746:                                             ; preds = %2740, %2493
  %2747 = load i32, ptr %19, align 4, !tbaa !9
  %2748 = icmp eq i32 0, %2747
  br i1 %2748, label %2749, label %2780

2749:                                             ; preds = %2746
  %2750 = load double, ptr %150, align 8, !tbaa !17
  %2751 = load ptr, ptr %9, align 8, !tbaa !5
  %2752 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %2751, i32 0, i32 10
  %2753 = call double @libxsmm_kahan_sum(double noundef %2750, ptr noundef %2752, ptr noundef %142)
  %2754 = load double, ptr %151, align 8, !tbaa !17
  %2755 = load ptr, ptr %9, align 8, !tbaa !5
  %2756 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %2755, i32 0, i32 15
  %2757 = call double @libxsmm_kahan_sum(double noundef %2754, ptr noundef %2756, ptr noundef %143)
  %2758 = load ptr, ptr %9, align 8, !tbaa !5
  %2759 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %2758, i32 0, i32 2
  %2760 = load double, ptr %2759, align 8, !tbaa !32
  %2761 = load double, ptr %152, align 8, !tbaa !17
  %2762 = fcmp olt double %2760, %2761
  br i1 %2762, label %2763, label %2767

2763:                                             ; preds = %2749
  %2764 = load double, ptr %152, align 8, !tbaa !17
  %2765 = load ptr, ptr %9, align 8, !tbaa !5
  %2766 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %2765, i32 0, i32 2
  store double %2764, ptr %2766, align 8, !tbaa !32
  br label %2767

2767:                                             ; preds = %2763, %2749
  %2768 = load double, ptr %138, align 8, !tbaa !17
  %2769 = load double, ptr %150, align 8, !tbaa !17
  %2770 = fcmp olt double %2768, %2769
  br i1 %2770, label %2771, label %2773

2771:                                             ; preds = %2767
  %2772 = load double, ptr %150, align 8, !tbaa !17
  store double %2772, ptr %138, align 8, !tbaa !17
  br label %2773

2773:                                             ; preds = %2771, %2767
  %2774 = load double, ptr %139, align 8, !tbaa !17
  %2775 = load double, ptr %151, align 8, !tbaa !17
  %2776 = fcmp olt double %2774, %2775
  br i1 %2776, label %2777, label %2779

2777:                                             ; preds = %2773
  %2778 = load double, ptr %151, align 8, !tbaa !17
  store double %2778, ptr %139, align 8, !tbaa !17
  br label %2779

2779:                                             ; preds = %2777, %2773
  br label %2781

2780:                                             ; preds = %2746
  store i32 27, ptr %60, align 4
  br label %2782

2781:                                             ; preds = %2779
  store i32 0, ptr %60, align 4
  br label %2782

2782:                                             ; preds = %2781, %2780
  call void @llvm.lifetime.end.p0(i64 8, ptr %154) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %153) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %152) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %151) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %150) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %149) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %148) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %147) #7
  %2783 = load i32, ptr %60, align 4
  switch i32 %2783, label %15542 [
    i32 0, label %2784
    i32 27, label %2788
  ]

2784:                                             ; preds = %2782
  br label %2785

2785:                                             ; preds = %2784
  %2786 = load i32, ptr %145, align 4, !tbaa !9
  %2787 = add nsw i32 %2786, 1
  store i32 %2787, ptr %145, align 4, !tbaa !9
  br label %2488, !llvm.loop !52

2788:                                             ; preds = %2782, %2488
  %2789 = load i32, ptr %19, align 4, !tbaa !9
  %2790 = icmp eq i32 0, %2789
  br i1 %2790, label %2791, label %3037

2791:                                             ; preds = %2788
  call void @llvm.lifetime.start.p0(i64 8, ptr %163) #7
  store double 0.000000e+00, ptr %163, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %164) #7
  store double 0.000000e+00, ptr %164, align 8, !tbaa !17
  %2792 = load ptr, ptr %9, align 8, !tbaa !5
  %2793 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %2792, i32 0, i32 14
  %2794 = load double, ptr %2793, align 8, !tbaa !34
  %2795 = fcmp oeq double 0.000000e+00, %2794
  br i1 %2795, label %2796, label %2797

2796:                                             ; preds = %2791
  br label %2798

2797:                                             ; preds = %2791
  call void @__assert_fail(ptr noundef @.str.1, ptr noundef @.str.2, i32 noundef 130, ptr noundef @__PRETTY_FUNCTION__.libxsmm_matdiff) #9
  unreachable

2798:                                             ; preds = %2796
  %2799 = load ptr, ptr %9, align 8, !tbaa !5
  %2800 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %2799, i32 0, i32 19
  %2801 = load double, ptr %2800, align 8, !tbaa !35
  %2802 = fcmp oeq double 0.000000e+00, %2801
  br i1 %2802, label %2803, label %2804

2803:                                             ; preds = %2798
  br label %2805

2804:                                             ; preds = %2798
  call void @__assert_fail(ptr noundef @.str.3, ptr noundef @.str.2, i32 noundef 131, ptr noundef @__PRETTY_FUNCTION__.libxsmm_matdiff) #9
  unreachable

2805:                                             ; preds = %2803
  %2806 = load i64, ptr %24, align 8, !tbaa !12
  %2807 = icmp ne i64 0, %2806
  br i1 %2807, label %2808, label %2825

2808:                                             ; preds = %2805
  %2809 = load ptr, ptr %9, align 8, !tbaa !5
  %2810 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %2809, i32 0, i32 10
  %2811 = load double, ptr %2810, align 8, !tbaa !36
  %2812 = load i64, ptr %24, align 8, !tbaa !12
  %2813 = uitofp i64 %2812 to double
  %2814 = fdiv double %2811, %2813
  %2815 = load ptr, ptr %9, align 8, !tbaa !5
  %2816 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %2815, i32 0, i32 13
  store double %2814, ptr %2816, align 8, !tbaa !37
  %2817 = load ptr, ptr %9, align 8, !tbaa !5
  %2818 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %2817, i32 0, i32 15
  %2819 = load double, ptr %2818, align 8, !tbaa !38
  %2820 = load i64, ptr %24, align 8, !tbaa !12
  %2821 = uitofp i64 %2820 to double
  %2822 = fdiv double %2819, %2821
  %2823 = load ptr, ptr %9, align 8, !tbaa !5
  %2824 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %2823, i32 0, i32 18
  store double %2822, ptr %2824, align 8, !tbaa !39
  br label %2825

2825:                                             ; preds = %2808, %2805
  %2826 = load double, ptr %138, align 8, !tbaa !17
  %2827 = fcmp oge double 0.000000e+00, %2826
  br i1 %2827, label %2828, label %2830

2828:                                             ; preds = %2825
  %2829 = load double, ptr %139, align 8, !tbaa !17
  br label %2842

2830:                                             ; preds = %2825
  %2831 = load ptr, ptr %9, align 8, !tbaa !5
  %2832 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %2831, i32 0, i32 2
  %2833 = load double, ptr %2832, align 8, !tbaa !32
  %2834 = load double, ptr %138, align 8, !tbaa !17
  %2835 = fcmp olt double 0.000000e+00, %2834
  br i1 %2835, label %2836, label %2838

2836:                                             ; preds = %2830
  %2837 = load double, ptr %138, align 8, !tbaa !17
  br label %2839

2838:                                             ; preds = %2830
  br label %2839

2839:                                             ; preds = %2838, %2836
  %2840 = phi double [ %2837, %2836 ], [ 1.000000e+00, %2838 ]
  %2841 = fdiv double %2833, %2840
  br label %2842

2842:                                             ; preds = %2839, %2828
  %2843 = phi double [ %2829, %2828 ], [ %2841, %2839 ]
  %2844 = load ptr, ptr %9, align 8, !tbaa !5
  %2845 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %2844, i32 0, i32 3
  store double %2843, ptr %2845, align 8, !tbaa !40
  %2846 = load double, ptr %136, align 8, !tbaa !17
  %2847 = fcmp oge double 0.000000e+00, %2846
  br i1 %2847, label %2848, label %2866

2848:                                             ; preds = %2842
  %2849 = load double, ptr %137, align 8, !tbaa !17
  %2850 = load double, ptr %137, align 8, !tbaa !17
  %2851 = fmul double %2849, %2850
  %2852 = load ptr, ptr %9, align 8, !tbaa !5
  %2853 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %2852, i32 0, i32 7
  %2854 = load double, ptr %2853, align 8, !tbaa !41
  %2855 = fcmp olt double %2851, %2854
  br i1 %2855, label %2856, label %2860

2856:                                             ; preds = %2848
  %2857 = load double, ptr %137, align 8, !tbaa !17
  %2858 = load double, ptr %137, align 8, !tbaa !17
  %2859 = fmul double %2857, %2858
  br label %2864

2860:                                             ; preds = %2848
  %2861 = load ptr, ptr %9, align 8, !tbaa !5
  %2862 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %2861, i32 0, i32 7
  %2863 = load double, ptr %2862, align 8, !tbaa !41
  br label %2864

2864:                                             ; preds = %2860, %2856
  %2865 = phi double [ %2859, %2856 ], [ %2863, %2860 ]
  br label %2878

2866:                                             ; preds = %2842
  %2867 = load ptr, ptr %9, align 8, !tbaa !5
  %2868 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %2867, i32 0, i32 7
  %2869 = load double, ptr %2868, align 8, !tbaa !41
  %2870 = load double, ptr %136, align 8, !tbaa !17
  %2871 = fcmp olt double 0.000000e+00, %2870
  br i1 %2871, label %2872, label %2874

2872:                                             ; preds = %2866
  %2873 = load double, ptr %136, align 8, !tbaa !17
  br label %2875

2874:                                             ; preds = %2866
  br label %2875

2875:                                             ; preds = %2874, %2872
  %2876 = phi double [ %2873, %2872 ], [ 1.000000e+00, %2874 ]
  %2877 = fdiv double %2869, %2876
  br label %2878

2878:                                             ; preds = %2875, %2864
  %2879 = phi double [ %2865, %2864 ], [ %2877, %2875 ]
  %2880 = load ptr, ptr %9, align 8, !tbaa !5
  %2881 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %2880, i32 0, i32 4
  store double %2879, ptr %2881, align 8, !tbaa !42
  store i32 0, ptr %146, align 4, !tbaa !9
  br label %2882

2882:                                             ; preds = %3011, %2878
  %2883 = load i32, ptr %146, align 4, !tbaa !9
  %2884 = load i32, ptr %25, align 4, !tbaa !9
  %2885 = icmp slt i32 %2883, %2884
  br i1 %2885, label %2886, label %3014

2886:                                             ; preds = %2882
  call void @llvm.lifetime.start.p0(i64 8, ptr %165) #7
  store double 0.000000e+00, ptr %165, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %166) #7
  store double 0.000000e+00, ptr %166, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %167) #7
  store double 0.000000e+00, ptr %167, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %168) #7
  store double 0.000000e+00, ptr %168, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %169) #7
  store double 0.000000e+00, ptr %169, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %170) #7
  store double 0.000000e+00, ptr %170, align 8, !tbaa !17
  store i32 0, ptr %145, align 4, !tbaa !9
  br label %2887

2887:                                             ; preds = %2985, %2886
  %2888 = load i32, ptr %145, align 4, !tbaa !9
  %2889 = load i32, ptr %26, align 4, !tbaa !9
  %2890 = icmp slt i32 %2888, %2889
  br i1 %2890, label %2891, label %2988

2891:                                             ; preds = %2887
  call void @llvm.lifetime.start.p0(i64 4, ptr %171) #7
  %2892 = load i32, ptr %145, align 4, !tbaa !9
  store i32 %2892, ptr %171, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %172) #7
  %2893 = load i32, ptr %146, align 4, !tbaa !9
  store i32 %2893, ptr %172, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %173) #7
  %2894 = load ptr, ptr %131, align 8, !tbaa !5
  %2895 = load i32, ptr %171, align 4, !tbaa !9
  %2896 = load i32, ptr %20, align 4, !tbaa !9
  %2897 = mul nsw i32 %2895, %2896
  %2898 = load i32, ptr %172, align 4, !tbaa !9
  %2899 = add nsw i32 %2897, %2898
  %2900 = sext i32 %2899 to i64
  %2901 = getelementptr inbounds i32, ptr %2894, i64 %2900
  %2902 = load i32, ptr %2901, align 4, !tbaa !9
  %2903 = sitofp i32 %2902 to double
  store double %2903, ptr %173, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %174) #7
  %2904 = load ptr, ptr %132, align 8, !tbaa !5
  %2905 = icmp ne ptr null, %2904
  br i1 %2905, label %2906, label %2917

2906:                                             ; preds = %2891
  %2907 = load ptr, ptr %132, align 8, !tbaa !5
  %2908 = load i32, ptr %171, align 4, !tbaa !9
  %2909 = load i32, ptr %21, align 4, !tbaa !9
  %2910 = mul nsw i32 %2908, %2909
  %2911 = load i32, ptr %172, align 4, !tbaa !9
  %2912 = add nsw i32 %2910, %2911
  %2913 = sext i32 %2912 to i64
  %2914 = getelementptr inbounds i32, ptr %2907, i64 %2913
  %2915 = load i32, ptr %2914, align 4, !tbaa !9
  %2916 = sitofp i32 %2915 to double
  br label %2918

2917:                                             ; preds = %2891
  br label %2918

2918:                                             ; preds = %2917, %2906
  %2919 = phi double [ %2916, %2906 ], [ 0.000000e+00, %2917 ]
  store double %2919, ptr %174, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %175) #7
  %2920 = load ptr, ptr %132, align 8, !tbaa !5
  %2921 = icmp ne ptr null, %2920
  br i1 %2921, label %2922, label %2936

2922:                                             ; preds = %2918
  %2923 = load double, ptr %173, align 8, !tbaa !17
  %2924 = load double, ptr %174, align 8, !tbaa !17
  %2925 = fcmp olt double %2923, %2924
  br i1 %2925, label %2926, label %2930

2926:                                             ; preds = %2922
  %2927 = load double, ptr %174, align 8, !tbaa !17
  %2928 = load double, ptr %173, align 8, !tbaa !17
  %2929 = fsub double %2927, %2928
  br label %2934

2930:                                             ; preds = %2922
  %2931 = load double, ptr %173, align 8, !tbaa !17
  %2932 = load double, ptr %174, align 8, !tbaa !17
  %2933 = fsub double %2931, %2932
  br label %2934

2934:                                             ; preds = %2930, %2926
  %2935 = phi double [ %2929, %2926 ], [ %2933, %2930 ]
  br label %2937

2936:                                             ; preds = %2918
  br label %2937

2937:                                             ; preds = %2936, %2934
  %2938 = phi double [ %2935, %2934 ], [ 0.000000e+00, %2936 ]
  store double %2938, ptr %175, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %176) #7
  %2939 = load double, ptr %173, align 8, !tbaa !17
  %2940 = load ptr, ptr %9, align 8, !tbaa !5
  %2941 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %2940, i32 0, i32 13
  %2942 = load double, ptr %2941, align 8, !tbaa !37
  %2943 = fsub double %2939, %2942
  store double %2943, ptr %176, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %177) #7
  %2944 = load double, ptr %174, align 8, !tbaa !17
  %2945 = load ptr, ptr %9, align 8, !tbaa !5
  %2946 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %2945, i32 0, i32 18
  %2947 = load double, ptr %2946, align 8, !tbaa !39
  %2948 = fsub double %2944, %2947
  store double %2948, ptr %177, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %178) #7
  %2949 = load double, ptr %173, align 8, !tbaa !17
  %2950 = fcmp ole double 0.000000e+00, %2949
  br i1 %2950, label %2951, label %2953

2951:                                             ; preds = %2937
  %2952 = load double, ptr %173, align 8, !tbaa !17
  br label %2956

2953:                                             ; preds = %2937
  %2954 = load double, ptr %173, align 8, !tbaa !17
  %2955 = fneg double %2954
  br label %2956

2956:                                             ; preds = %2953, %2951
  %2957 = phi double [ %2952, %2951 ], [ %2955, %2953 ]
  store double %2957, ptr %178, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %179) #7
  %2958 = load double, ptr %174, align 8, !tbaa !17
  %2959 = fcmp ole double 0.000000e+00, %2958
  br i1 %2959, label %2960, label %2962

2960:                                             ; preds = %2956
  %2961 = load double, ptr %174, align 8, !tbaa !17
  br label %2965

2962:                                             ; preds = %2956
  %2963 = load double, ptr %174, align 8, !tbaa !17
  %2964 = fneg double %2963
  br label %2965

2965:                                             ; preds = %2962, %2960
  %2966 = phi double [ %2961, %2960 ], [ %2964, %2962 ]
  store double %2966, ptr %179, align 8, !tbaa !17
  %2967 = load double, ptr %176, align 8, !tbaa !17
  %2968 = load double, ptr %176, align 8, !tbaa !17
  %2969 = fmul double %2967, %2968
  %2970 = load ptr, ptr %9, align 8, !tbaa !5
  %2971 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %2970, i32 0, i32 14
  %2972 = call double @libxsmm_kahan_sum(double noundef %2969, ptr noundef %2971, ptr noundef %163)
  %2973 = load double, ptr %177, align 8, !tbaa !17
  %2974 = load double, ptr %177, align 8, !tbaa !17
  %2975 = fmul double %2973, %2974
  %2976 = load ptr, ptr %9, align 8, !tbaa !5
  %2977 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %2976, i32 0, i32 19
  %2978 = call double @libxsmm_kahan_sum(double noundef %2975, ptr noundef %2977, ptr noundef %164)
  %2979 = load double, ptr %178, align 8, !tbaa !17
  %2980 = call double @libxsmm_kahan_sum(double noundef %2979, ptr noundef %168, ptr noundef %165)
  %2981 = load double, ptr %179, align 8, !tbaa !17
  %2982 = call double @libxsmm_kahan_sum(double noundef %2981, ptr noundef %169, ptr noundef %166)
  %2983 = load double, ptr %175, align 8, !tbaa !17
  %2984 = call double @libxsmm_kahan_sum(double noundef %2983, ptr noundef %170, ptr noundef %167)
  call void @llvm.lifetime.end.p0(i64 8, ptr %179) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %178) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %177) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %176) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %175) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %174) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %173) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %172) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %171) #7
  br label %2985

2985:                                             ; preds = %2965
  %2986 = load i32, ptr %145, align 4, !tbaa !9
  %2987 = add nsw i32 %2986, 1
  store i32 %2987, ptr %145, align 4, !tbaa !9
  br label %2887, !llvm.loop !53

2988:                                             ; preds = %2887
  %2989 = load ptr, ptr %9, align 8, !tbaa !5
  %2990 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %2989, i32 0, i32 0
  %2991 = load double, ptr %2990, align 8, !tbaa !44
  %2992 = load double, ptr %170, align 8, !tbaa !17
  %2993 = fcmp olt double %2991, %2992
  br i1 %2993, label %2994, label %2998

2994:                                             ; preds = %2988
  %2995 = load double, ptr %170, align 8, !tbaa !17
  %2996 = load ptr, ptr %9, align 8, !tbaa !5
  %2997 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %2996, i32 0, i32 0
  store double %2995, ptr %2997, align 8, !tbaa !44
  br label %2998

2998:                                             ; preds = %2994, %2988
  %2999 = load double, ptr %140, align 8, !tbaa !17
  %3000 = load double, ptr %168, align 8, !tbaa !17
  %3001 = fcmp olt double %2999, %3000
  br i1 %3001, label %3002, label %3004

3002:                                             ; preds = %2998
  %3003 = load double, ptr %168, align 8, !tbaa !17
  store double %3003, ptr %140, align 8, !tbaa !17
  br label %3004

3004:                                             ; preds = %3002, %2998
  %3005 = load double, ptr %141, align 8, !tbaa !17
  %3006 = load double, ptr %169, align 8, !tbaa !17
  %3007 = fcmp olt double %3005, %3006
  br i1 %3007, label %3008, label %3010

3008:                                             ; preds = %3004
  %3009 = load double, ptr %169, align 8, !tbaa !17
  store double %3009, ptr %141, align 8, !tbaa !17
  br label %3010

3010:                                             ; preds = %3008, %3004
  call void @llvm.lifetime.end.p0(i64 8, ptr %170) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %169) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %168) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %167) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %166) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %165) #7
  br label %3011

3011:                                             ; preds = %3010
  %3012 = load i32, ptr %146, align 4, !tbaa !9
  %3013 = add nsw i32 %3012, 1
  store i32 %3013, ptr %146, align 4, !tbaa !9
  br label %2882, !llvm.loop !54

3014:                                             ; preds = %2882
  %3015 = load double, ptr %140, align 8, !tbaa !17
  %3016 = fcmp oge double 0.000000e+00, %3015
  br i1 %3016, label %3017, label %3021

3017:                                             ; preds = %3014
  %3018 = load ptr, ptr %9, align 8, !tbaa !5
  %3019 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %3018, i32 0, i32 0
  %3020 = load double, ptr %3019, align 8, !tbaa !44
  br label %3033

3021:                                             ; preds = %3014
  %3022 = load ptr, ptr %9, align 8, !tbaa !5
  %3023 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %3022, i32 0, i32 0
  %3024 = load double, ptr %3023, align 8, !tbaa !44
  %3025 = load double, ptr %140, align 8, !tbaa !17
  %3026 = fcmp olt double 0.000000e+00, %3025
  br i1 %3026, label %3027, label %3029

3027:                                             ; preds = %3021
  %3028 = load double, ptr %140, align 8, !tbaa !17
  br label %3030

3029:                                             ; preds = %3021
  br label %3030

3030:                                             ; preds = %3029, %3027
  %3031 = phi double [ %3028, %3027 ], [ 1.000000e+00, %3029 ]
  %3032 = fdiv double %3024, %3031
  br label %3033

3033:                                             ; preds = %3030, %3017
  %3034 = phi double [ %3020, %3017 ], [ %3032, %3030 ]
  %3035 = load ptr, ptr %9, align 8, !tbaa !5
  %3036 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %3035, i32 0, i32 1
  store double %3034, ptr %3036, align 8, !tbaa !46
  call void @llvm.lifetime.end.p0(i64 8, ptr %164) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %163) #7
  br label %3037

3037:                                             ; preds = %3033, %2788
  call void @llvm.lifetime.end.p0(i64 4, ptr %146) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %145) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %144) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %143) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %142) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %141) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %140) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %139) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %138) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %137) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %136) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %135) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %134) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %133) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %132) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %131) #7
  br label %3634

3038:                                             ; preds = %2482
  call void @llvm.lifetime.start.p0(i64 8, ptr %180) #7
  %3039 = load ptr, ptr %13, align 8, !tbaa !5
  store ptr %3039, ptr %180, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %181) #7
  %3040 = load ptr, ptr %14, align 8, !tbaa !5
  store ptr %3040, ptr %181, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %182) #7
  store double 0.000000e+00, ptr %182, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %183) #7
  store double 0.000000e+00, ptr %183, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %184) #7
  store double 0.000000e+00, ptr %184, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %185) #7
  store double 0.000000e+00, ptr %185, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %186) #7
  store double 0.000000e+00, ptr %186, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %187) #7
  store double 0.000000e+00, ptr %187, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %188) #7
  store double 0.000000e+00, ptr %188, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %189) #7
  store double 0.000000e+00, ptr %189, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %190) #7
  store double 0.000000e+00, ptr %190, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %191) #7
  store double 0.000000e+00, ptr %191, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %192) #7
  store double 0.000000e+00, ptr %192, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %193) #7
  store double 0.000000e+00, ptr %193, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %194) #7
  %3041 = load i32, ptr %25, align 4, !tbaa !9
  %3042 = sext i32 %3041 to i64
  %3043 = load i32, ptr %26, align 4, !tbaa !9
  %3044 = sext i32 %3043 to i64
  %3045 = mul i64 %3042, %3044
  store i64 %3045, ptr %194, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 8, ptr %195) #7
  %3046 = load i64, ptr %194, align 8, !tbaa !12
  %3047 = call i64 @libxsmm_coprime2(i64 noundef %3046)
  store i64 %3047, ptr %195, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 4, ptr %196) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %197) #7
  store i32 0, ptr %196, align 4, !tbaa !9
  br label %3048

3048:                                             ; preds = %3363, %3038
  %3049 = load i32, ptr %196, align 4, !tbaa !9
  %3050 = load i32, ptr %26, align 4, !tbaa !9
  %3051 = icmp slt i32 %3049, %3050
  br i1 %3051, label %3052, label %3366

3052:                                             ; preds = %3048
  call void @llvm.lifetime.start.p0(i64 8, ptr %198) #7
  store double 0.000000e+00, ptr %198, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %199) #7
  store double 0.000000e+00, ptr %199, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %200) #7
  store double 0.000000e+00, ptr %200, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %201) #7
  store double 0.000000e+00, ptr %201, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %202) #7
  store double 0.000000e+00, ptr %202, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %203) #7
  store double 0.000000e+00, ptr %203, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %204) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %205) #7
  store i32 0, ptr %197, align 4, !tbaa !9
  br label %3053

3053:                                             ; preds = %3321, %3052
  %3054 = load i32, ptr %197, align 4, !tbaa !9
  %3055 = load i32, ptr %25, align 4, !tbaa !9
  %3056 = icmp slt i32 %3054, %3055
  br i1 %3056, label %3057, label %3324

3057:                                             ; preds = %3053
  call void @llvm.lifetime.start.p0(i64 8, ptr %206) #7
  %3058 = load i64, ptr %195, align 8, !tbaa !12
  %3059 = load i32, ptr %196, align 4, !tbaa !9
  %3060 = load i32, ptr %25, align 4, !tbaa !9
  %3061 = mul nsw i32 %3059, %3060
  %3062 = load i32, ptr %197, align 4, !tbaa !9
  %3063 = add nsw i32 %3061, %3062
  %3064 = sext i32 %3063 to i64
  %3065 = mul i64 %3058, %3064
  %3066 = load i64, ptr %194, align 8, !tbaa !12
  %3067 = urem i64 %3065, %3066
  store i64 %3067, ptr %206, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 4, ptr %207) #7
  %3068 = load i64, ptr %206, align 8, !tbaa !12
  %3069 = load i32, ptr %25, align 4, !tbaa !9
  %3070 = sext i32 %3069 to i64
  %3071 = udiv i64 %3068, %3070
  %3072 = trunc i64 %3071 to i32
  store i32 %3072, ptr %207, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %208) #7
  %3073 = load i64, ptr %206, align 8, !tbaa !12
  %3074 = load i32, ptr %25, align 4, !tbaa !9
  %3075 = sext i32 %3074 to i64
  %3076 = urem i64 %3073, %3075
  %3077 = trunc i64 %3076 to i32
  store i32 %3077, ptr %208, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %209) #7
  %3078 = load ptr, ptr %181, align 8, !tbaa !5
  %3079 = icmp ne ptr null, %3078
  br i1 %3079, label %3080, label %3091

3080:                                             ; preds = %3057
  %3081 = load ptr, ptr %181, align 8, !tbaa !5
  %3082 = load i32, ptr %207, align 4, !tbaa !9
  %3083 = load i32, ptr %21, align 4, !tbaa !9
  %3084 = mul nsw i32 %3082, %3083
  %3085 = load i32, ptr %208, align 4, !tbaa !9
  %3086 = add nsw i32 %3084, %3085
  %3087 = sext i32 %3086 to i64
  %3088 = getelementptr inbounds i32, ptr %3081, i64 %3087
  %3089 = load i32, ptr %3088, align 4, !tbaa !9
  %3090 = sitofp i32 %3089 to double
  br label %3092

3091:                                             ; preds = %3057
  br label %3092

3092:                                             ; preds = %3091, %3080
  %3093 = phi double [ %3090, %3080 ], [ 0.000000e+00, %3091 ]
  store double %3093, ptr %209, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %210) #7
  %3094 = load ptr, ptr %180, align 8, !tbaa !5
  %3095 = load i32, ptr %207, align 4, !tbaa !9
  %3096 = load i32, ptr %20, align 4, !tbaa !9
  %3097 = mul nsw i32 %3095, %3096
  %3098 = load i32, ptr %208, align 4, !tbaa !9
  %3099 = add nsw i32 %3097, %3098
  %3100 = sext i32 %3099 to i64
  %3101 = getelementptr inbounds i32, ptr %3094, i64 %3100
  %3102 = load i32, ptr %3101, align 4, !tbaa !9
  %3103 = sitofp i32 %3102 to double
  store double %3103, ptr %210, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %211) #7
  %3104 = load double, ptr %209, align 8, !tbaa !17
  %3105 = fcmp ole double 0.000000e+00, %3104
  br i1 %3105, label %3106, label %3108

3106:                                             ; preds = %3092
  %3107 = load double, ptr %209, align 8, !tbaa !17
  br label %3111

3108:                                             ; preds = %3092
  %3109 = load double, ptr %209, align 8, !tbaa !17
  %3110 = fneg double %3109
  br label %3111

3111:                                             ; preds = %3108, %3106
  %3112 = phi double [ %3107, %3106 ], [ %3110, %3108 ]
  store double %3112, ptr %211, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %212) #7
  %3113 = load double, ptr %210, align 8, !tbaa !17
  %3114 = fcmp ole double 0.000000e+00, %3113
  br i1 %3114, label %3115, label %3117

3115:                                             ; preds = %3111
  %3116 = load double, ptr %210, align 8, !tbaa !17
  br label %3120

3117:                                             ; preds = %3111
  %3118 = load double, ptr %210, align 8, !tbaa !17
  %3119 = fneg double %3118
  br label %3120

3120:                                             ; preds = %3117, %3115
  %3121 = phi double [ %3116, %3115 ], [ %3119, %3117 ]
  store double %3121, ptr %212, align 8, !tbaa !17
  %3122 = load double, ptr %210, align 8, !tbaa !17
  %3123 = load ptr, ptr %9, align 8, !tbaa !5
  %3124 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %3123, i32 0, i32 11
  %3125 = load double, ptr %3124, align 8, !tbaa !14
  %3126 = fcmp olt double %3122, %3125
  br i1 %3126, label %3127, label %3131

3127:                                             ; preds = %3120
  %3128 = load double, ptr %210, align 8, !tbaa !17
  %3129 = load ptr, ptr %9, align 8, !tbaa !5
  %3130 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %3129, i32 0, i32 11
  store double %3128, ptr %3130, align 8, !tbaa !14
  br label %3131

3131:                                             ; preds = %3127, %3120
  %3132 = load double, ptr %210, align 8, !tbaa !17
  %3133 = load ptr, ptr %9, align 8, !tbaa !5
  %3134 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %3133, i32 0, i32 12
  %3135 = load double, ptr %3134, align 8, !tbaa !20
  %3136 = fcmp ogt double %3132, %3135
  br i1 %3136, label %3137, label %3141

3137:                                             ; preds = %3131
  %3138 = load double, ptr %210, align 8, !tbaa !17
  %3139 = load ptr, ptr %9, align 8, !tbaa !5
  %3140 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %3139, i32 0, i32 12
  store double %3138, ptr %3140, align 8, !tbaa !20
  br label %3141

3141:                                             ; preds = %3137, %3131
  %3142 = load double, ptr %209, align 8, !tbaa !17
  %3143 = load double, ptr %209, align 8, !tbaa !17
  %3144 = fcmp oeq double %3142, %3143
  br i1 %3144, label %3145, label %3293

3145:                                             ; preds = %3141
  %3146 = load double, ptr %27, align 8, !tbaa !17
  %3147 = load double, ptr %211, align 8, !tbaa !17
  %3148 = fcmp ogt double %3146, %3147
  br i1 %3148, label %3153, label %3149

3149:                                             ; preds = %3145
  %3150 = load double, ptr %209, align 8, !tbaa !17
  %3151 = load double, ptr %210, align 8, !tbaa !17
  %3152 = fcmp oeq double %3150, %3151
  br i1 %3152, label %3153, label %3293

3153:                                             ; preds = %3149, %3145
  call void @llvm.lifetime.start.p0(i64 8, ptr %213) #7
  %3154 = load ptr, ptr %181, align 8, !tbaa !5
  %3155 = icmp ne ptr null, %3154
  br i1 %3155, label %3156, label %3170

3156:                                             ; preds = %3153
  %3157 = load double, ptr %210, align 8, !tbaa !17
  %3158 = load double, ptr %209, align 8, !tbaa !17
  %3159 = fcmp olt double %3157, %3158
  br i1 %3159, label %3160, label %3164

3160:                                             ; preds = %3156
  %3161 = load double, ptr %209, align 8, !tbaa !17
  %3162 = load double, ptr %210, align 8, !tbaa !17
  %3163 = fsub double %3161, %3162
  br label %3168

3164:                                             ; preds = %3156
  %3165 = load double, ptr %210, align 8, !tbaa !17
  %3166 = load double, ptr %209, align 8, !tbaa !17
  %3167 = fsub double %3165, %3166
  br label %3168

3168:                                             ; preds = %3164, %3160
  %3169 = phi double [ %3163, %3160 ], [ %3167, %3164 ]
  br label %3171

3170:                                             ; preds = %3153
  br label %3171

3171:                                             ; preds = %3170, %3168
  %3172 = phi double [ %3169, %3168 ], [ 0.000000e+00, %3170 ]
  store double %3172, ptr %213, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %214) #7
  %3173 = load double, ptr %212, align 8, !tbaa !17
  %3174 = fcmp oge double 0.000000e+00, %3173
  br i1 %3174, label %3175, label %3177

3175:                                             ; preds = %3171
  %3176 = load double, ptr %211, align 8, !tbaa !17
  br label %3187

3177:                                             ; preds = %3171
  %3178 = load double, ptr %213, align 8, !tbaa !17
  %3179 = load double, ptr %212, align 8, !tbaa !17
  %3180 = fcmp olt double 0.000000e+00, %3179
  br i1 %3180, label %3181, label %3183

3181:                                             ; preds = %3177
  %3182 = load double, ptr %212, align 8, !tbaa !17
  br label %3184

3183:                                             ; preds = %3177
  br label %3184

3184:                                             ; preds = %3183, %3181
  %3185 = phi double [ %3182, %3181 ], [ 1.000000e+00, %3183 ]
  %3186 = fdiv double %3178, %3185
  br label %3187

3187:                                             ; preds = %3184, %3175
  %3188 = phi double [ %3176, %3175 ], [ %3186, %3184 ]
  store double %3188, ptr %214, align 8, !tbaa !17
  %3189 = load double, ptr %209, align 8, !tbaa !17
  %3190 = load ptr, ptr %9, align 8, !tbaa !5
  %3191 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %3190, i32 0, i32 16
  %3192 = load double, ptr %3191, align 8, !tbaa !21
  %3193 = fcmp olt double %3189, %3192
  br i1 %3193, label %3194, label %3198

3194:                                             ; preds = %3187
  %3195 = load double, ptr %209, align 8, !tbaa !17
  %3196 = load ptr, ptr %9, align 8, !tbaa !5
  %3197 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %3196, i32 0, i32 16
  store double %3195, ptr %3197, align 8, !tbaa !21
  br label %3198

3198:                                             ; preds = %3194, %3187
  %3199 = load double, ptr %209, align 8, !tbaa !17
  %3200 = load ptr, ptr %9, align 8, !tbaa !5
  %3201 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %3200, i32 0, i32 17
  %3202 = load double, ptr %3201, align 8, !tbaa !22
  %3203 = fcmp ogt double %3199, %3202
  br i1 %3203, label %3204, label %3208

3204:                                             ; preds = %3198
  %3205 = load double, ptr %209, align 8, !tbaa !17
  %3206 = load ptr, ptr %9, align 8, !tbaa !5
  %3207 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %3206, i32 0, i32 17
  store double %3205, ptr %3207, align 8, !tbaa !22
  br label %3208

3208:                                             ; preds = %3204, %3198
  %3209 = load ptr, ptr %9, align 8, !tbaa !5
  %3210 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %3209, i32 0, i32 5
  %3211 = load double, ptr %3210, align 8, !tbaa !23
  %3212 = load double, ptr %213, align 8, !tbaa !17
  %3213 = fcmp olt double %3211, %3212
  br i1 %3213, label %3214, label %3230

3214:                                             ; preds = %3208
  %3215 = load double, ptr %213, align 8, !tbaa !17
  %3216 = load ptr, ptr %9, align 8, !tbaa !5
  %3217 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %3216, i32 0, i32 5
  store double %3215, ptr %3217, align 8, !tbaa !23
  %3218 = load double, ptr %210, align 8, !tbaa !17
  %3219 = load ptr, ptr %9, align 8, !tbaa !5
  %3220 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %3219, i32 0, i32 20
  store double %3218, ptr %3220, align 8, !tbaa !24
  %3221 = load double, ptr %209, align 8, !tbaa !17
  %3222 = load ptr, ptr %9, align 8, !tbaa !5
  %3223 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %3222, i32 0, i32 21
  store double %3221, ptr %3223, align 8, !tbaa !25
  %3224 = load i32, ptr %208, align 4, !tbaa !9
  %3225 = load ptr, ptr %9, align 8, !tbaa !5
  %3226 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %3225, i32 0, i32 22
  store i32 %3224, ptr %3226, align 8, !tbaa !26
  %3227 = load i32, ptr %207, align 4, !tbaa !9
  %3228 = load ptr, ptr %9, align 8, !tbaa !5
  %3229 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %3228, i32 0, i32 23
  store i32 %3227, ptr %3229, align 4, !tbaa !27
  br label %3230

3230:                                             ; preds = %3214, %3208
  %3231 = load ptr, ptr %9, align 8, !tbaa !5
  %3232 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %3231, i32 0, i32 6
  %3233 = load double, ptr %3232, align 8, !tbaa !28
  %3234 = load double, ptr %214, align 8, !tbaa !17
  %3235 = fcmp olt double %3233, %3234
  br i1 %3235, label %3236, label %3240

3236:                                             ; preds = %3230
  %3237 = load double, ptr %214, align 8, !tbaa !17
  %3238 = load ptr, ptr %9, align 8, !tbaa !5
  %3239 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %3238, i32 0, i32 6
  store double %3237, ptr %3239, align 8, !tbaa !28
  br label %3240

3240:                                             ; preds = %3236, %3230
  %3241 = load double, ptr %214, align 8, !tbaa !17
  %3242 = load double, ptr %214, align 8, !tbaa !17
  %3243 = fmul double %3241, %3242
  store double %3243, ptr %204, align 8, !tbaa !17
  %3244 = load double, ptr %27, align 8, !tbaa !17
  %3245 = load double, ptr %204, align 8, !tbaa !17
  %3246 = fcmp ogt double %3244, %3245
  br i1 %3246, label %3247, label %3266

3247:                                             ; preds = %3240
  %3248 = load double, ptr %193, align 8, !tbaa !17
  %3249 = load double, ptr %204, align 8, !tbaa !17
  %3250 = fsub double %3249, %3248
  store double %3250, ptr %204, align 8, !tbaa !17
  %3251 = load ptr, ptr %9, align 8, !tbaa !5
  %3252 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %3251, i32 0, i32 8
  %3253 = load double, ptr %3252, align 8, !tbaa !29
  %3254 = load double, ptr %204, align 8, !tbaa !17
  %3255 = fadd double %3253, %3254
  store double %3255, ptr %205, align 8, !tbaa !17
  %3256 = load double, ptr %205, align 8, !tbaa !17
  %3257 = load ptr, ptr %9, align 8, !tbaa !5
  %3258 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %3257, i32 0, i32 8
  %3259 = load double, ptr %3258, align 8, !tbaa !29
  %3260 = fsub double %3256, %3259
  %3261 = load double, ptr %204, align 8, !tbaa !17
  %3262 = fsub double %3260, %3261
  store double %3262, ptr %193, align 8, !tbaa !17
  %3263 = load double, ptr %205, align 8, !tbaa !17
  %3264 = load ptr, ptr %9, align 8, !tbaa !5
  %3265 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %3264, i32 0, i32 8
  store double %3263, ptr %3265, align 8, !tbaa !29
  br label %3266

3266:                                             ; preds = %3247, %3240
  %3267 = load double, ptr %212, align 8, !tbaa !17
  %3268 = call double @libxsmm_kahan_sum(double noundef %3267, ptr noundef %201, ptr noundef %198)
  %3269 = load double, ptr %211, align 8, !tbaa !17
  %3270 = call double @libxsmm_kahan_sum(double noundef %3269, ptr noundef %202, ptr noundef %199)
  %3271 = load double, ptr %213, align 8, !tbaa !17
  %3272 = call double @libxsmm_kahan_sum(double noundef %3271, ptr noundef %203, ptr noundef %200)
  %3273 = load double, ptr %210, align 8, !tbaa !17
  %3274 = load double, ptr %210, align 8, !tbaa !17
  %3275 = fmul double %3273, %3274
  %3276 = call double @libxsmm_kahan_sum(double noundef %3275, ptr noundef %185, ptr noundef %183)
  %3277 = load double, ptr %209, align 8, !tbaa !17
  %3278 = load double, ptr %209, align 8, !tbaa !17
  %3279 = fmul double %3277, %3278
  %3280 = call double @libxsmm_kahan_sum(double noundef %3279, ptr noundef %186, ptr noundef %184)
  %3281 = load double, ptr %213, align 8, !tbaa !17
  %3282 = load double, ptr %213, align 8, !tbaa !17
  %3283 = fmul double %3281, %3282
  store double %3283, ptr %204, align 8, !tbaa !17
  %3284 = load double, ptr %27, align 8, !tbaa !17
  %3285 = load double, ptr %204, align 8, !tbaa !17
  %3286 = fcmp ogt double %3284, %3285
  br i1 %3286, label %3287, label %3292

3287:                                             ; preds = %3266
  %3288 = load double, ptr %204, align 8, !tbaa !17
  %3289 = load ptr, ptr %9, align 8, !tbaa !5
  %3290 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %3289, i32 0, i32 7
  %3291 = call double @libxsmm_kahan_sum(double noundef %3288, ptr noundef %3290, ptr noundef %182)
  br label %3292

3292:                                             ; preds = %3287, %3266
  call void @llvm.lifetime.end.p0(i64 8, ptr %214) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %213) #7
  br label %3317

3293:                                             ; preds = %3149, %3141
  %3294 = load double, ptr %210, align 8, !tbaa !17
  %3295 = load double, ptr %210, align 8, !tbaa !17
  %3296 = fcmp oeq double %3294, %3295
  br i1 %3296, label %3297, label %3301

3297:                                             ; preds = %3293
  %3298 = load double, ptr %27, align 8, !tbaa !17
  %3299 = load double, ptr %212, align 8, !tbaa !17
  %3300 = fcmp ogt double %3298, %3299
  br label %3301

3301:                                             ; preds = %3297, %3293
  %3302 = phi i1 [ false, %3293 ], [ %3300, %3297 ]
  %3303 = zext i1 %3302 to i64
  %3304 = select i1 %3302, i32 1, i32 2
  store i32 %3304, ptr %19, align 4, !tbaa !9
  %3305 = load i32, ptr %208, align 4, !tbaa !9
  %3306 = load ptr, ptr %9, align 8, !tbaa !5
  %3307 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %3306, i32 0, i32 22
  store i32 %3305, ptr %3307, align 8, !tbaa !26
  %3308 = load i32, ptr %207, align 4, !tbaa !9
  %3309 = load ptr, ptr %9, align 8, !tbaa !5
  %3310 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %3309, i32 0, i32 23
  store i32 %3308, ptr %3310, align 4, !tbaa !27
  %3311 = load double, ptr %210, align 8, !tbaa !17
  %3312 = load ptr, ptr %9, align 8, !tbaa !5
  %3313 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %3312, i32 0, i32 20
  store double %3311, ptr %3313, align 8, !tbaa !24
  %3314 = load double, ptr %209, align 8, !tbaa !17
  %3315 = load ptr, ptr %9, align 8, !tbaa !5
  %3316 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %3315, i32 0, i32 21
  store double %3314, ptr %3316, align 8, !tbaa !25
  store i32 42, ptr %60, align 4
  br label %3318

3317:                                             ; preds = %3292
  store i32 0, ptr %60, align 4
  br label %3318

3318:                                             ; preds = %3317, %3301
  call void @llvm.lifetime.end.p0(i64 8, ptr %212) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %211) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %210) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %209) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %208) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %207) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %206) #7
  %3319 = load i32, ptr %60, align 4
  switch i32 %3319, label %15542 [
    i32 0, label %3320
    i32 42, label %3324
  ]

3320:                                             ; preds = %3318
  br label %3321

3321:                                             ; preds = %3320
  %3322 = load i32, ptr %197, align 4, !tbaa !9
  %3323 = add nsw i32 %3322, 1
  store i32 %3323, ptr %197, align 4, !tbaa !9
  br label %3053, !llvm.loop !55

3324:                                             ; preds = %3318, %3053
  %3325 = load i32, ptr %19, align 4, !tbaa !9
  %3326 = icmp eq i32 0, %3325
  br i1 %3326, label %3327, label %3358

3327:                                             ; preds = %3324
  %3328 = load double, ptr %201, align 8, !tbaa !17
  %3329 = load ptr, ptr %9, align 8, !tbaa !5
  %3330 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %3329, i32 0, i32 10
  %3331 = call double @libxsmm_kahan_sum(double noundef %3328, ptr noundef %3330, ptr noundef %191)
  %3332 = load double, ptr %202, align 8, !tbaa !17
  %3333 = load ptr, ptr %9, align 8, !tbaa !5
  %3334 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %3333, i32 0, i32 15
  %3335 = call double @libxsmm_kahan_sum(double noundef %3332, ptr noundef %3334, ptr noundef %192)
  %3336 = load ptr, ptr %9, align 8, !tbaa !5
  %3337 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %3336, i32 0, i32 2
  %3338 = load double, ptr %3337, align 8, !tbaa !32
  %3339 = load double, ptr %203, align 8, !tbaa !17
  %3340 = fcmp olt double %3338, %3339
  br i1 %3340, label %3341, label %3345

3341:                                             ; preds = %3327
  %3342 = load double, ptr %203, align 8, !tbaa !17
  %3343 = load ptr, ptr %9, align 8, !tbaa !5
  %3344 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %3343, i32 0, i32 2
  store double %3342, ptr %3344, align 8, !tbaa !32
  br label %3345

3345:                                             ; preds = %3341, %3327
  %3346 = load double, ptr %187, align 8, !tbaa !17
  %3347 = load double, ptr %201, align 8, !tbaa !17
  %3348 = fcmp olt double %3346, %3347
  br i1 %3348, label %3349, label %3351

3349:                                             ; preds = %3345
  %3350 = load double, ptr %201, align 8, !tbaa !17
  store double %3350, ptr %187, align 8, !tbaa !17
  br label %3351

3351:                                             ; preds = %3349, %3345
  %3352 = load double, ptr %188, align 8, !tbaa !17
  %3353 = load double, ptr %202, align 8, !tbaa !17
  %3354 = fcmp olt double %3352, %3353
  br i1 %3354, label %3355, label %3357

3355:                                             ; preds = %3351
  %3356 = load double, ptr %202, align 8, !tbaa !17
  store double %3356, ptr %188, align 8, !tbaa !17
  br label %3357

3357:                                             ; preds = %3355, %3351
  br label %3359

3358:                                             ; preds = %3324
  store i32 39, ptr %60, align 4
  br label %3360

3359:                                             ; preds = %3357
  store i32 0, ptr %60, align 4
  br label %3360

3360:                                             ; preds = %3359, %3358
  call void @llvm.lifetime.end.p0(i64 8, ptr %205) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %204) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %203) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %202) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %201) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %200) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %199) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %198) #7
  %3361 = load i32, ptr %60, align 4
  switch i32 %3361, label %15542 [
    i32 0, label %3362
    i32 39, label %3366
  ]

3362:                                             ; preds = %3360
  br label %3363

3363:                                             ; preds = %3362
  %3364 = load i32, ptr %196, align 4, !tbaa !9
  %3365 = add nsw i32 %3364, 1
  store i32 %3365, ptr %196, align 4, !tbaa !9
  br label %3048, !llvm.loop !56

3366:                                             ; preds = %3360, %3048
  %3367 = load i32, ptr %19, align 4, !tbaa !9
  %3368 = icmp eq i32 0, %3367
  br i1 %3368, label %3369, label %3633

3369:                                             ; preds = %3366
  call void @llvm.lifetime.start.p0(i64 8, ptr %215) #7
  store double 0.000000e+00, ptr %215, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %216) #7
  store double 0.000000e+00, ptr %216, align 8, !tbaa !17
  %3370 = load ptr, ptr %9, align 8, !tbaa !5
  %3371 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %3370, i32 0, i32 14
  %3372 = load double, ptr %3371, align 8, !tbaa !34
  %3373 = fcmp oeq double 0.000000e+00, %3372
  br i1 %3373, label %3374, label %3375

3374:                                             ; preds = %3369
  br label %3376

3375:                                             ; preds = %3369
  call void @__assert_fail(ptr noundef @.str.1, ptr noundef @.str.2, i32 noundef 130, ptr noundef @__PRETTY_FUNCTION__.libxsmm_matdiff) #9
  unreachable

3376:                                             ; preds = %3374
  %3377 = load ptr, ptr %9, align 8, !tbaa !5
  %3378 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %3377, i32 0, i32 19
  %3379 = load double, ptr %3378, align 8, !tbaa !35
  %3380 = fcmp oeq double 0.000000e+00, %3379
  br i1 %3380, label %3381, label %3382

3381:                                             ; preds = %3376
  br label %3383

3382:                                             ; preds = %3376
  call void @__assert_fail(ptr noundef @.str.3, ptr noundef @.str.2, i32 noundef 131, ptr noundef @__PRETTY_FUNCTION__.libxsmm_matdiff) #9
  unreachable

3383:                                             ; preds = %3381
  %3384 = load i64, ptr %24, align 8, !tbaa !12
  %3385 = icmp ne i64 0, %3384
  br i1 %3385, label %3386, label %3403

3386:                                             ; preds = %3383
  %3387 = load ptr, ptr %9, align 8, !tbaa !5
  %3388 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %3387, i32 0, i32 10
  %3389 = load double, ptr %3388, align 8, !tbaa !36
  %3390 = load i64, ptr %24, align 8, !tbaa !12
  %3391 = uitofp i64 %3390 to double
  %3392 = fdiv double %3389, %3391
  %3393 = load ptr, ptr %9, align 8, !tbaa !5
  %3394 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %3393, i32 0, i32 13
  store double %3392, ptr %3394, align 8, !tbaa !37
  %3395 = load ptr, ptr %9, align 8, !tbaa !5
  %3396 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %3395, i32 0, i32 15
  %3397 = load double, ptr %3396, align 8, !tbaa !38
  %3398 = load i64, ptr %24, align 8, !tbaa !12
  %3399 = uitofp i64 %3398 to double
  %3400 = fdiv double %3397, %3399
  %3401 = load ptr, ptr %9, align 8, !tbaa !5
  %3402 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %3401, i32 0, i32 18
  store double %3400, ptr %3402, align 8, !tbaa !39
  br label %3403

3403:                                             ; preds = %3386, %3383
  %3404 = load double, ptr %187, align 8, !tbaa !17
  %3405 = fcmp oge double 0.000000e+00, %3404
  br i1 %3405, label %3406, label %3408

3406:                                             ; preds = %3403
  %3407 = load double, ptr %188, align 8, !tbaa !17
  br label %3420

3408:                                             ; preds = %3403
  %3409 = load ptr, ptr %9, align 8, !tbaa !5
  %3410 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %3409, i32 0, i32 2
  %3411 = load double, ptr %3410, align 8, !tbaa !32
  %3412 = load double, ptr %187, align 8, !tbaa !17
  %3413 = fcmp olt double 0.000000e+00, %3412
  br i1 %3413, label %3414, label %3416

3414:                                             ; preds = %3408
  %3415 = load double, ptr %187, align 8, !tbaa !17
  br label %3417

3416:                                             ; preds = %3408
  br label %3417

3417:                                             ; preds = %3416, %3414
  %3418 = phi double [ %3415, %3414 ], [ 1.000000e+00, %3416 ]
  %3419 = fdiv double %3411, %3418
  br label %3420

3420:                                             ; preds = %3417, %3406
  %3421 = phi double [ %3407, %3406 ], [ %3419, %3417 ]
  %3422 = load ptr, ptr %9, align 8, !tbaa !5
  %3423 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %3422, i32 0, i32 3
  store double %3421, ptr %3423, align 8, !tbaa !40
  %3424 = load double, ptr %185, align 8, !tbaa !17
  %3425 = fcmp oge double 0.000000e+00, %3424
  br i1 %3425, label %3426, label %3444

3426:                                             ; preds = %3420
  %3427 = load double, ptr %186, align 8, !tbaa !17
  %3428 = load double, ptr %186, align 8, !tbaa !17
  %3429 = fmul double %3427, %3428
  %3430 = load ptr, ptr %9, align 8, !tbaa !5
  %3431 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %3430, i32 0, i32 7
  %3432 = load double, ptr %3431, align 8, !tbaa !41
  %3433 = fcmp olt double %3429, %3432
  br i1 %3433, label %3434, label %3438

3434:                                             ; preds = %3426
  %3435 = load double, ptr %186, align 8, !tbaa !17
  %3436 = load double, ptr %186, align 8, !tbaa !17
  %3437 = fmul double %3435, %3436
  br label %3442

3438:                                             ; preds = %3426
  %3439 = load ptr, ptr %9, align 8, !tbaa !5
  %3440 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %3439, i32 0, i32 7
  %3441 = load double, ptr %3440, align 8, !tbaa !41
  br label %3442

3442:                                             ; preds = %3438, %3434
  %3443 = phi double [ %3437, %3434 ], [ %3441, %3438 ]
  br label %3456

3444:                                             ; preds = %3420
  %3445 = load ptr, ptr %9, align 8, !tbaa !5
  %3446 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %3445, i32 0, i32 7
  %3447 = load double, ptr %3446, align 8, !tbaa !41
  %3448 = load double, ptr %185, align 8, !tbaa !17
  %3449 = fcmp olt double 0.000000e+00, %3448
  br i1 %3449, label %3450, label %3452

3450:                                             ; preds = %3444
  %3451 = load double, ptr %185, align 8, !tbaa !17
  br label %3453

3452:                                             ; preds = %3444
  br label %3453

3453:                                             ; preds = %3452, %3450
  %3454 = phi double [ %3451, %3450 ], [ 1.000000e+00, %3452 ]
  %3455 = fdiv double %3447, %3454
  br label %3456

3456:                                             ; preds = %3453, %3442
  %3457 = phi double [ %3443, %3442 ], [ %3455, %3453 ]
  %3458 = load ptr, ptr %9, align 8, !tbaa !5
  %3459 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %3458, i32 0, i32 4
  store double %3457, ptr %3459, align 8, !tbaa !42
  store i32 0, ptr %197, align 4, !tbaa !9
  br label %3460

3460:                                             ; preds = %3607, %3456
  %3461 = load i32, ptr %197, align 4, !tbaa !9
  %3462 = load i32, ptr %25, align 4, !tbaa !9
  %3463 = icmp slt i32 %3461, %3462
  br i1 %3463, label %3464, label %3610

3464:                                             ; preds = %3460
  call void @llvm.lifetime.start.p0(i64 8, ptr %217) #7
  store double 0.000000e+00, ptr %217, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %218) #7
  store double 0.000000e+00, ptr %218, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %219) #7
  store double 0.000000e+00, ptr %219, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %220) #7
  store double 0.000000e+00, ptr %220, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %221) #7
  store double 0.000000e+00, ptr %221, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %222) #7
  store double 0.000000e+00, ptr %222, align 8, !tbaa !17
  store i32 0, ptr %196, align 4, !tbaa !9
  br label %3465

3465:                                             ; preds = %3581, %3464
  %3466 = load i32, ptr %196, align 4, !tbaa !9
  %3467 = load i32, ptr %26, align 4, !tbaa !9
  %3468 = icmp slt i32 %3466, %3467
  br i1 %3468, label %3469, label %3584

3469:                                             ; preds = %3465
  call void @llvm.lifetime.start.p0(i64 8, ptr %223) #7
  %3470 = load i64, ptr %195, align 8, !tbaa !12
  %3471 = load i32, ptr %196, align 4, !tbaa !9
  %3472 = load i32, ptr %25, align 4, !tbaa !9
  %3473 = mul nsw i32 %3471, %3472
  %3474 = load i32, ptr %197, align 4, !tbaa !9
  %3475 = add nsw i32 %3473, %3474
  %3476 = sext i32 %3475 to i64
  %3477 = mul i64 %3470, %3476
  %3478 = load i64, ptr %194, align 8, !tbaa !12
  %3479 = urem i64 %3477, %3478
  store i64 %3479, ptr %223, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 4, ptr %224) #7
  %3480 = load i64, ptr %223, align 8, !tbaa !12
  %3481 = load i32, ptr %25, align 4, !tbaa !9
  %3482 = sext i32 %3481 to i64
  %3483 = udiv i64 %3480, %3482
  %3484 = trunc i64 %3483 to i32
  store i32 %3484, ptr %224, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %225) #7
  %3485 = load i64, ptr %223, align 8, !tbaa !12
  %3486 = load i32, ptr %25, align 4, !tbaa !9
  %3487 = sext i32 %3486 to i64
  %3488 = urem i64 %3485, %3487
  %3489 = trunc i64 %3488 to i32
  store i32 %3489, ptr %225, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %226) #7
  %3490 = load ptr, ptr %180, align 8, !tbaa !5
  %3491 = load i32, ptr %224, align 4, !tbaa !9
  %3492 = load i32, ptr %20, align 4, !tbaa !9
  %3493 = mul nsw i32 %3491, %3492
  %3494 = load i32, ptr %225, align 4, !tbaa !9
  %3495 = add nsw i32 %3493, %3494
  %3496 = sext i32 %3495 to i64
  %3497 = getelementptr inbounds i32, ptr %3490, i64 %3496
  %3498 = load i32, ptr %3497, align 4, !tbaa !9
  %3499 = sitofp i32 %3498 to double
  store double %3499, ptr %226, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %227) #7
  %3500 = load ptr, ptr %181, align 8, !tbaa !5
  %3501 = icmp ne ptr null, %3500
  br i1 %3501, label %3502, label %3513

3502:                                             ; preds = %3469
  %3503 = load ptr, ptr %181, align 8, !tbaa !5
  %3504 = load i32, ptr %224, align 4, !tbaa !9
  %3505 = load i32, ptr %21, align 4, !tbaa !9
  %3506 = mul nsw i32 %3504, %3505
  %3507 = load i32, ptr %225, align 4, !tbaa !9
  %3508 = add nsw i32 %3506, %3507
  %3509 = sext i32 %3508 to i64
  %3510 = getelementptr inbounds i32, ptr %3503, i64 %3509
  %3511 = load i32, ptr %3510, align 4, !tbaa !9
  %3512 = sitofp i32 %3511 to double
  br label %3514

3513:                                             ; preds = %3469
  br label %3514

3514:                                             ; preds = %3513, %3502
  %3515 = phi double [ %3512, %3502 ], [ 0.000000e+00, %3513 ]
  store double %3515, ptr %227, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %228) #7
  %3516 = load ptr, ptr %181, align 8, !tbaa !5
  %3517 = icmp ne ptr null, %3516
  br i1 %3517, label %3518, label %3532

3518:                                             ; preds = %3514
  %3519 = load double, ptr %226, align 8, !tbaa !17
  %3520 = load double, ptr %227, align 8, !tbaa !17
  %3521 = fcmp olt double %3519, %3520
  br i1 %3521, label %3522, label %3526

3522:                                             ; preds = %3518
  %3523 = load double, ptr %227, align 8, !tbaa !17
  %3524 = load double, ptr %226, align 8, !tbaa !17
  %3525 = fsub double %3523, %3524
  br label %3530

3526:                                             ; preds = %3518
  %3527 = load double, ptr %226, align 8, !tbaa !17
  %3528 = load double, ptr %227, align 8, !tbaa !17
  %3529 = fsub double %3527, %3528
  br label %3530

3530:                                             ; preds = %3526, %3522
  %3531 = phi double [ %3525, %3522 ], [ %3529, %3526 ]
  br label %3533

3532:                                             ; preds = %3514
  br label %3533

3533:                                             ; preds = %3532, %3530
  %3534 = phi double [ %3531, %3530 ], [ 0.000000e+00, %3532 ]
  store double %3534, ptr %228, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %229) #7
  %3535 = load double, ptr %226, align 8, !tbaa !17
  %3536 = load ptr, ptr %9, align 8, !tbaa !5
  %3537 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %3536, i32 0, i32 13
  %3538 = load double, ptr %3537, align 8, !tbaa !37
  %3539 = fsub double %3535, %3538
  store double %3539, ptr %229, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %230) #7
  %3540 = load double, ptr %227, align 8, !tbaa !17
  %3541 = load ptr, ptr %9, align 8, !tbaa !5
  %3542 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %3541, i32 0, i32 18
  %3543 = load double, ptr %3542, align 8, !tbaa !39
  %3544 = fsub double %3540, %3543
  store double %3544, ptr %230, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %231) #7
  %3545 = load double, ptr %226, align 8, !tbaa !17
  %3546 = fcmp ole double 0.000000e+00, %3545
  br i1 %3546, label %3547, label %3549

3547:                                             ; preds = %3533
  %3548 = load double, ptr %226, align 8, !tbaa !17
  br label %3552

3549:                                             ; preds = %3533
  %3550 = load double, ptr %226, align 8, !tbaa !17
  %3551 = fneg double %3550
  br label %3552

3552:                                             ; preds = %3549, %3547
  %3553 = phi double [ %3548, %3547 ], [ %3551, %3549 ]
  store double %3553, ptr %231, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %232) #7
  %3554 = load double, ptr %227, align 8, !tbaa !17
  %3555 = fcmp ole double 0.000000e+00, %3554
  br i1 %3555, label %3556, label %3558

3556:                                             ; preds = %3552
  %3557 = load double, ptr %227, align 8, !tbaa !17
  br label %3561

3558:                                             ; preds = %3552
  %3559 = load double, ptr %227, align 8, !tbaa !17
  %3560 = fneg double %3559
  br label %3561

3561:                                             ; preds = %3558, %3556
  %3562 = phi double [ %3557, %3556 ], [ %3560, %3558 ]
  store double %3562, ptr %232, align 8, !tbaa !17
  %3563 = load double, ptr %229, align 8, !tbaa !17
  %3564 = load double, ptr %229, align 8, !tbaa !17
  %3565 = fmul double %3563, %3564
  %3566 = load ptr, ptr %9, align 8, !tbaa !5
  %3567 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %3566, i32 0, i32 14
  %3568 = call double @libxsmm_kahan_sum(double noundef %3565, ptr noundef %3567, ptr noundef %215)
  %3569 = load double, ptr %230, align 8, !tbaa !17
  %3570 = load double, ptr %230, align 8, !tbaa !17
  %3571 = fmul double %3569, %3570
  %3572 = load ptr, ptr %9, align 8, !tbaa !5
  %3573 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %3572, i32 0, i32 19
  %3574 = call double @libxsmm_kahan_sum(double noundef %3571, ptr noundef %3573, ptr noundef %216)
  %3575 = load double, ptr %231, align 8, !tbaa !17
  %3576 = call double @libxsmm_kahan_sum(double noundef %3575, ptr noundef %220, ptr noundef %217)
  %3577 = load double, ptr %232, align 8, !tbaa !17
  %3578 = call double @libxsmm_kahan_sum(double noundef %3577, ptr noundef %221, ptr noundef %218)
  %3579 = load double, ptr %228, align 8, !tbaa !17
  %3580 = call double @libxsmm_kahan_sum(double noundef %3579, ptr noundef %222, ptr noundef %219)
  call void @llvm.lifetime.end.p0(i64 8, ptr %232) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %231) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %230) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %229) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %228) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %227) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %226) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %225) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %224) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %223) #7
  br label %3581

3581:                                             ; preds = %3561
  %3582 = load i32, ptr %196, align 4, !tbaa !9
  %3583 = add nsw i32 %3582, 1
  store i32 %3583, ptr %196, align 4, !tbaa !9
  br label %3465, !llvm.loop !57

3584:                                             ; preds = %3465
  %3585 = load ptr, ptr %9, align 8, !tbaa !5
  %3586 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %3585, i32 0, i32 0
  %3587 = load double, ptr %3586, align 8, !tbaa !44
  %3588 = load double, ptr %222, align 8, !tbaa !17
  %3589 = fcmp olt double %3587, %3588
  br i1 %3589, label %3590, label %3594

3590:                                             ; preds = %3584
  %3591 = load double, ptr %222, align 8, !tbaa !17
  %3592 = load ptr, ptr %9, align 8, !tbaa !5
  %3593 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %3592, i32 0, i32 0
  store double %3591, ptr %3593, align 8, !tbaa !44
  br label %3594

3594:                                             ; preds = %3590, %3584
  %3595 = load double, ptr %189, align 8, !tbaa !17
  %3596 = load double, ptr %220, align 8, !tbaa !17
  %3597 = fcmp olt double %3595, %3596
  br i1 %3597, label %3598, label %3600

3598:                                             ; preds = %3594
  %3599 = load double, ptr %220, align 8, !tbaa !17
  store double %3599, ptr %189, align 8, !tbaa !17
  br label %3600

3600:                                             ; preds = %3598, %3594
  %3601 = load double, ptr %190, align 8, !tbaa !17
  %3602 = load double, ptr %221, align 8, !tbaa !17
  %3603 = fcmp olt double %3601, %3602
  br i1 %3603, label %3604, label %3606

3604:                                             ; preds = %3600
  %3605 = load double, ptr %221, align 8, !tbaa !17
  store double %3605, ptr %190, align 8, !tbaa !17
  br label %3606

3606:                                             ; preds = %3604, %3600
  call void @llvm.lifetime.end.p0(i64 8, ptr %222) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %221) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %220) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %219) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %218) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %217) #7
  br label %3607

3607:                                             ; preds = %3606
  %3608 = load i32, ptr %197, align 4, !tbaa !9
  %3609 = add nsw i32 %3608, 1
  store i32 %3609, ptr %197, align 4, !tbaa !9
  br label %3460, !llvm.loop !58

3610:                                             ; preds = %3460
  %3611 = load double, ptr %189, align 8, !tbaa !17
  %3612 = fcmp oge double 0.000000e+00, %3611
  br i1 %3612, label %3613, label %3617

3613:                                             ; preds = %3610
  %3614 = load ptr, ptr %9, align 8, !tbaa !5
  %3615 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %3614, i32 0, i32 0
  %3616 = load double, ptr %3615, align 8, !tbaa !44
  br label %3629

3617:                                             ; preds = %3610
  %3618 = load ptr, ptr %9, align 8, !tbaa !5
  %3619 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %3618, i32 0, i32 0
  %3620 = load double, ptr %3619, align 8, !tbaa !44
  %3621 = load double, ptr %189, align 8, !tbaa !17
  %3622 = fcmp olt double 0.000000e+00, %3621
  br i1 %3622, label %3623, label %3625

3623:                                             ; preds = %3617
  %3624 = load double, ptr %189, align 8, !tbaa !17
  br label %3626

3625:                                             ; preds = %3617
  br label %3626

3626:                                             ; preds = %3625, %3623
  %3627 = phi double [ %3624, %3623 ], [ 1.000000e+00, %3625 ]
  %3628 = fdiv double %3620, %3627
  br label %3629

3629:                                             ; preds = %3626, %3613
  %3630 = phi double [ %3616, %3613 ], [ %3628, %3626 ]
  %3631 = load ptr, ptr %9, align 8, !tbaa !5
  %3632 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %3631, i32 0, i32 1
  store double %3630, ptr %3632, align 8, !tbaa !46
  call void @llvm.lifetime.end.p0(i64 8, ptr %216) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %215) #7
  br label %3633

3633:                                             ; preds = %3629, %3366
  call void @llvm.lifetime.end.p0(i64 4, ptr %197) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %196) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %195) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %194) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %193) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %192) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %191) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %190) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %189) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %188) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %187) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %186) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %185) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %184) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %183) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %182) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %181) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %180) #7
  br label %3634

3634:                                             ; preds = %3633, %3037
  br label %15200

3635:                                             ; preds = %1323
  %3636 = load i32, ptr %23, align 4, !tbaa !9
  %3637 = icmp eq i32 0, %3636
  br i1 %3637, label %3638, label %4191

3638:                                             ; preds = %3635
  call void @llvm.lifetime.start.p0(i64 8, ptr %233) #7
  %3639 = load ptr, ptr %13, align 8, !tbaa !5
  store ptr %3639, ptr %233, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %234) #7
  %3640 = load ptr, ptr %14, align 8, !tbaa !5
  store ptr %3640, ptr %234, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %235) #7
  store double 0.000000e+00, ptr %235, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %236) #7
  store double 0.000000e+00, ptr %236, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %237) #7
  store double 0.000000e+00, ptr %237, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %238) #7
  store double 0.000000e+00, ptr %238, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %239) #7
  store double 0.000000e+00, ptr %239, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %240) #7
  store double 0.000000e+00, ptr %240, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %241) #7
  store double 0.000000e+00, ptr %241, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %242) #7
  store double 0.000000e+00, ptr %242, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %243) #7
  store double 0.000000e+00, ptr %243, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %244) #7
  store double 0.000000e+00, ptr %244, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %245) #7
  store double 0.000000e+00, ptr %245, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %246) #7
  store double 0.000000e+00, ptr %246, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 4, ptr %247) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %248) #7
  store i32 0, ptr %247, align 4, !tbaa !9
  br label %3641

3641:                                             ; preds = %3938, %3638
  %3642 = load i32, ptr %247, align 4, !tbaa !9
  %3643 = load i32, ptr %26, align 4, !tbaa !9
  %3644 = icmp slt i32 %3642, %3643
  br i1 %3644, label %3645, label %3941

3645:                                             ; preds = %3641
  call void @llvm.lifetime.start.p0(i64 8, ptr %249) #7
  store double 0.000000e+00, ptr %249, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %250) #7
  store double 0.000000e+00, ptr %250, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %251) #7
  store double 0.000000e+00, ptr %251, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %252) #7
  store double 0.000000e+00, ptr %252, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %253) #7
  store double 0.000000e+00, ptr %253, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %254) #7
  store double 0.000000e+00, ptr %254, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %255) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %256) #7
  store i32 0, ptr %248, align 4, !tbaa !9
  br label %3646

3646:                                             ; preds = %3896, %3645
  %3647 = load i32, ptr %248, align 4, !tbaa !9
  %3648 = load i32, ptr %25, align 4, !tbaa !9
  %3649 = icmp slt i32 %3647, %3648
  br i1 %3649, label %3650, label %3899

3650:                                             ; preds = %3646
  call void @llvm.lifetime.start.p0(i64 4, ptr %257) #7
  %3651 = load i32, ptr %247, align 4, !tbaa !9
  store i32 %3651, ptr %257, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %258) #7
  %3652 = load i32, ptr %248, align 4, !tbaa !9
  store i32 %3652, ptr %258, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %259) #7
  %3653 = load ptr, ptr %234, align 8, !tbaa !5
  %3654 = icmp ne ptr null, %3653
  br i1 %3654, label %3655, label %3666

3655:                                             ; preds = %3650
  %3656 = load ptr, ptr %234, align 8, !tbaa !5
  %3657 = load i32, ptr %257, align 4, !tbaa !9
  %3658 = load i32, ptr %21, align 4, !tbaa !9
  %3659 = mul nsw i32 %3657, %3658
  %3660 = load i32, ptr %258, align 4, !tbaa !9
  %3661 = add nsw i32 %3659, %3660
  %3662 = sext i32 %3661 to i64
  %3663 = getelementptr inbounds i32, ptr %3656, i64 %3662
  %3664 = load i32, ptr %3663, align 4, !tbaa !9
  %3665 = uitofp i32 %3664 to double
  br label %3667

3666:                                             ; preds = %3650
  br label %3667

3667:                                             ; preds = %3666, %3655
  %3668 = phi double [ %3665, %3655 ], [ 0.000000e+00, %3666 ]
  store double %3668, ptr %259, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %260) #7
  %3669 = load ptr, ptr %233, align 8, !tbaa !5
  %3670 = load i32, ptr %257, align 4, !tbaa !9
  %3671 = load i32, ptr %20, align 4, !tbaa !9
  %3672 = mul nsw i32 %3670, %3671
  %3673 = load i32, ptr %258, align 4, !tbaa !9
  %3674 = add nsw i32 %3672, %3673
  %3675 = sext i32 %3674 to i64
  %3676 = getelementptr inbounds i32, ptr %3669, i64 %3675
  %3677 = load i32, ptr %3676, align 4, !tbaa !9
  %3678 = uitofp i32 %3677 to double
  store double %3678, ptr %260, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %261) #7
  %3679 = load double, ptr %259, align 8, !tbaa !17
  %3680 = fcmp ole double 0.000000e+00, %3679
  br i1 %3680, label %3681, label %3683

3681:                                             ; preds = %3667
  %3682 = load double, ptr %259, align 8, !tbaa !17
  br label %3686

3683:                                             ; preds = %3667
  %3684 = load double, ptr %259, align 8, !tbaa !17
  %3685 = fneg double %3684
  br label %3686

3686:                                             ; preds = %3683, %3681
  %3687 = phi double [ %3682, %3681 ], [ %3685, %3683 ]
  store double %3687, ptr %261, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %262) #7
  %3688 = load double, ptr %260, align 8, !tbaa !17
  %3689 = fcmp ole double 0.000000e+00, %3688
  br i1 %3689, label %3690, label %3692

3690:                                             ; preds = %3686
  %3691 = load double, ptr %260, align 8, !tbaa !17
  br label %3695

3692:                                             ; preds = %3686
  %3693 = load double, ptr %260, align 8, !tbaa !17
  %3694 = fneg double %3693
  br label %3695

3695:                                             ; preds = %3692, %3690
  %3696 = phi double [ %3691, %3690 ], [ %3694, %3692 ]
  store double %3696, ptr %262, align 8, !tbaa !17
  %3697 = load double, ptr %260, align 8, !tbaa !17
  %3698 = load ptr, ptr %9, align 8, !tbaa !5
  %3699 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %3698, i32 0, i32 11
  %3700 = load double, ptr %3699, align 8, !tbaa !14
  %3701 = fcmp olt double %3697, %3700
  br i1 %3701, label %3702, label %3706

3702:                                             ; preds = %3695
  %3703 = load double, ptr %260, align 8, !tbaa !17
  %3704 = load ptr, ptr %9, align 8, !tbaa !5
  %3705 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %3704, i32 0, i32 11
  store double %3703, ptr %3705, align 8, !tbaa !14
  br label %3706

3706:                                             ; preds = %3702, %3695
  %3707 = load double, ptr %260, align 8, !tbaa !17
  %3708 = load ptr, ptr %9, align 8, !tbaa !5
  %3709 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %3708, i32 0, i32 12
  %3710 = load double, ptr %3709, align 8, !tbaa !20
  %3711 = fcmp ogt double %3707, %3710
  br i1 %3711, label %3712, label %3716

3712:                                             ; preds = %3706
  %3713 = load double, ptr %260, align 8, !tbaa !17
  %3714 = load ptr, ptr %9, align 8, !tbaa !5
  %3715 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %3714, i32 0, i32 12
  store double %3713, ptr %3715, align 8, !tbaa !20
  br label %3716

3716:                                             ; preds = %3712, %3706
  %3717 = load double, ptr %259, align 8, !tbaa !17
  %3718 = load double, ptr %259, align 8, !tbaa !17
  %3719 = fcmp oeq double %3717, %3718
  br i1 %3719, label %3720, label %3868

3720:                                             ; preds = %3716
  %3721 = load double, ptr %27, align 8, !tbaa !17
  %3722 = load double, ptr %261, align 8, !tbaa !17
  %3723 = fcmp ogt double %3721, %3722
  br i1 %3723, label %3728, label %3724

3724:                                             ; preds = %3720
  %3725 = load double, ptr %259, align 8, !tbaa !17
  %3726 = load double, ptr %260, align 8, !tbaa !17
  %3727 = fcmp oeq double %3725, %3726
  br i1 %3727, label %3728, label %3868

3728:                                             ; preds = %3724, %3720
  call void @llvm.lifetime.start.p0(i64 8, ptr %263) #7
  %3729 = load ptr, ptr %234, align 8, !tbaa !5
  %3730 = icmp ne ptr null, %3729
  br i1 %3730, label %3731, label %3745

3731:                                             ; preds = %3728
  %3732 = load double, ptr %260, align 8, !tbaa !17
  %3733 = load double, ptr %259, align 8, !tbaa !17
  %3734 = fcmp olt double %3732, %3733
  br i1 %3734, label %3735, label %3739

3735:                                             ; preds = %3731
  %3736 = load double, ptr %259, align 8, !tbaa !17
  %3737 = load double, ptr %260, align 8, !tbaa !17
  %3738 = fsub double %3736, %3737
  br label %3743

3739:                                             ; preds = %3731
  %3740 = load double, ptr %260, align 8, !tbaa !17
  %3741 = load double, ptr %259, align 8, !tbaa !17
  %3742 = fsub double %3740, %3741
  br label %3743

3743:                                             ; preds = %3739, %3735
  %3744 = phi double [ %3738, %3735 ], [ %3742, %3739 ]
  br label %3746

3745:                                             ; preds = %3728
  br label %3746

3746:                                             ; preds = %3745, %3743
  %3747 = phi double [ %3744, %3743 ], [ 0.000000e+00, %3745 ]
  store double %3747, ptr %263, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %264) #7
  %3748 = load double, ptr %262, align 8, !tbaa !17
  %3749 = fcmp oge double 0.000000e+00, %3748
  br i1 %3749, label %3750, label %3752

3750:                                             ; preds = %3746
  %3751 = load double, ptr %261, align 8, !tbaa !17
  br label %3762

3752:                                             ; preds = %3746
  %3753 = load double, ptr %263, align 8, !tbaa !17
  %3754 = load double, ptr %262, align 8, !tbaa !17
  %3755 = fcmp olt double 0.000000e+00, %3754
  br i1 %3755, label %3756, label %3758

3756:                                             ; preds = %3752
  %3757 = load double, ptr %262, align 8, !tbaa !17
  br label %3759

3758:                                             ; preds = %3752
  br label %3759

3759:                                             ; preds = %3758, %3756
  %3760 = phi double [ %3757, %3756 ], [ 1.000000e+00, %3758 ]
  %3761 = fdiv double %3753, %3760
  br label %3762

3762:                                             ; preds = %3759, %3750
  %3763 = phi double [ %3751, %3750 ], [ %3761, %3759 ]
  store double %3763, ptr %264, align 8, !tbaa !17
  %3764 = load double, ptr %259, align 8, !tbaa !17
  %3765 = load ptr, ptr %9, align 8, !tbaa !5
  %3766 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %3765, i32 0, i32 16
  %3767 = load double, ptr %3766, align 8, !tbaa !21
  %3768 = fcmp olt double %3764, %3767
  br i1 %3768, label %3769, label %3773

3769:                                             ; preds = %3762
  %3770 = load double, ptr %259, align 8, !tbaa !17
  %3771 = load ptr, ptr %9, align 8, !tbaa !5
  %3772 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %3771, i32 0, i32 16
  store double %3770, ptr %3772, align 8, !tbaa !21
  br label %3773

3773:                                             ; preds = %3769, %3762
  %3774 = load double, ptr %259, align 8, !tbaa !17
  %3775 = load ptr, ptr %9, align 8, !tbaa !5
  %3776 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %3775, i32 0, i32 17
  %3777 = load double, ptr %3776, align 8, !tbaa !22
  %3778 = fcmp ogt double %3774, %3777
  br i1 %3778, label %3779, label %3783

3779:                                             ; preds = %3773
  %3780 = load double, ptr %259, align 8, !tbaa !17
  %3781 = load ptr, ptr %9, align 8, !tbaa !5
  %3782 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %3781, i32 0, i32 17
  store double %3780, ptr %3782, align 8, !tbaa !22
  br label %3783

3783:                                             ; preds = %3779, %3773
  %3784 = load ptr, ptr %9, align 8, !tbaa !5
  %3785 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %3784, i32 0, i32 5
  %3786 = load double, ptr %3785, align 8, !tbaa !23
  %3787 = load double, ptr %263, align 8, !tbaa !17
  %3788 = fcmp olt double %3786, %3787
  br i1 %3788, label %3789, label %3805

3789:                                             ; preds = %3783
  %3790 = load double, ptr %263, align 8, !tbaa !17
  %3791 = load ptr, ptr %9, align 8, !tbaa !5
  %3792 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %3791, i32 0, i32 5
  store double %3790, ptr %3792, align 8, !tbaa !23
  %3793 = load double, ptr %260, align 8, !tbaa !17
  %3794 = load ptr, ptr %9, align 8, !tbaa !5
  %3795 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %3794, i32 0, i32 20
  store double %3793, ptr %3795, align 8, !tbaa !24
  %3796 = load double, ptr %259, align 8, !tbaa !17
  %3797 = load ptr, ptr %9, align 8, !tbaa !5
  %3798 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %3797, i32 0, i32 21
  store double %3796, ptr %3798, align 8, !tbaa !25
  %3799 = load i32, ptr %258, align 4, !tbaa !9
  %3800 = load ptr, ptr %9, align 8, !tbaa !5
  %3801 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %3800, i32 0, i32 22
  store i32 %3799, ptr %3801, align 8, !tbaa !26
  %3802 = load i32, ptr %257, align 4, !tbaa !9
  %3803 = load ptr, ptr %9, align 8, !tbaa !5
  %3804 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %3803, i32 0, i32 23
  store i32 %3802, ptr %3804, align 4, !tbaa !27
  br label %3805

3805:                                             ; preds = %3789, %3783
  %3806 = load ptr, ptr %9, align 8, !tbaa !5
  %3807 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %3806, i32 0, i32 6
  %3808 = load double, ptr %3807, align 8, !tbaa !28
  %3809 = load double, ptr %264, align 8, !tbaa !17
  %3810 = fcmp olt double %3808, %3809
  br i1 %3810, label %3811, label %3815

3811:                                             ; preds = %3805
  %3812 = load double, ptr %264, align 8, !tbaa !17
  %3813 = load ptr, ptr %9, align 8, !tbaa !5
  %3814 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %3813, i32 0, i32 6
  store double %3812, ptr %3814, align 8, !tbaa !28
  br label %3815

3815:                                             ; preds = %3811, %3805
  %3816 = load double, ptr %264, align 8, !tbaa !17
  %3817 = load double, ptr %264, align 8, !tbaa !17
  %3818 = fmul double %3816, %3817
  store double %3818, ptr %255, align 8, !tbaa !17
  %3819 = load double, ptr %27, align 8, !tbaa !17
  %3820 = load double, ptr %255, align 8, !tbaa !17
  %3821 = fcmp ogt double %3819, %3820
  br i1 %3821, label %3822, label %3841

3822:                                             ; preds = %3815
  %3823 = load double, ptr %246, align 8, !tbaa !17
  %3824 = load double, ptr %255, align 8, !tbaa !17
  %3825 = fsub double %3824, %3823
  store double %3825, ptr %255, align 8, !tbaa !17
  %3826 = load ptr, ptr %9, align 8, !tbaa !5
  %3827 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %3826, i32 0, i32 8
  %3828 = load double, ptr %3827, align 8, !tbaa !29
  %3829 = load double, ptr %255, align 8, !tbaa !17
  %3830 = fadd double %3828, %3829
  store double %3830, ptr %256, align 8, !tbaa !17
  %3831 = load double, ptr %256, align 8, !tbaa !17
  %3832 = load ptr, ptr %9, align 8, !tbaa !5
  %3833 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %3832, i32 0, i32 8
  %3834 = load double, ptr %3833, align 8, !tbaa !29
  %3835 = fsub double %3831, %3834
  %3836 = load double, ptr %255, align 8, !tbaa !17
  %3837 = fsub double %3835, %3836
  store double %3837, ptr %246, align 8, !tbaa !17
  %3838 = load double, ptr %256, align 8, !tbaa !17
  %3839 = load ptr, ptr %9, align 8, !tbaa !5
  %3840 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %3839, i32 0, i32 8
  store double %3838, ptr %3840, align 8, !tbaa !29
  br label %3841

3841:                                             ; preds = %3822, %3815
  %3842 = load double, ptr %262, align 8, !tbaa !17
  %3843 = call double @libxsmm_kahan_sum(double noundef %3842, ptr noundef %252, ptr noundef %249)
  %3844 = load double, ptr %261, align 8, !tbaa !17
  %3845 = call double @libxsmm_kahan_sum(double noundef %3844, ptr noundef %253, ptr noundef %250)
  %3846 = load double, ptr %263, align 8, !tbaa !17
  %3847 = call double @libxsmm_kahan_sum(double noundef %3846, ptr noundef %254, ptr noundef %251)
  %3848 = load double, ptr %260, align 8, !tbaa !17
  %3849 = load double, ptr %260, align 8, !tbaa !17
  %3850 = fmul double %3848, %3849
  %3851 = call double @libxsmm_kahan_sum(double noundef %3850, ptr noundef %238, ptr noundef %236)
  %3852 = load double, ptr %259, align 8, !tbaa !17
  %3853 = load double, ptr %259, align 8, !tbaa !17
  %3854 = fmul double %3852, %3853
  %3855 = call double @libxsmm_kahan_sum(double noundef %3854, ptr noundef %239, ptr noundef %237)
  %3856 = load double, ptr %263, align 8, !tbaa !17
  %3857 = load double, ptr %263, align 8, !tbaa !17
  %3858 = fmul double %3856, %3857
  store double %3858, ptr %255, align 8, !tbaa !17
  %3859 = load double, ptr %27, align 8, !tbaa !17
  %3860 = load double, ptr %255, align 8, !tbaa !17
  %3861 = fcmp ogt double %3859, %3860
  br i1 %3861, label %3862, label %3867

3862:                                             ; preds = %3841
  %3863 = load double, ptr %255, align 8, !tbaa !17
  %3864 = load ptr, ptr %9, align 8, !tbaa !5
  %3865 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %3864, i32 0, i32 7
  %3866 = call double @libxsmm_kahan_sum(double noundef %3863, ptr noundef %3865, ptr noundef %235)
  br label %3867

3867:                                             ; preds = %3862, %3841
  call void @llvm.lifetime.end.p0(i64 8, ptr %264) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %263) #7
  br label %3892

3868:                                             ; preds = %3724, %3716
  %3869 = load double, ptr %260, align 8, !tbaa !17
  %3870 = load double, ptr %260, align 8, !tbaa !17
  %3871 = fcmp oeq double %3869, %3870
  br i1 %3871, label %3872, label %3876

3872:                                             ; preds = %3868
  %3873 = load double, ptr %27, align 8, !tbaa !17
  %3874 = load double, ptr %262, align 8, !tbaa !17
  %3875 = fcmp ogt double %3873, %3874
  br label %3876

3876:                                             ; preds = %3872, %3868
  %3877 = phi i1 [ false, %3868 ], [ %3875, %3872 ]
  %3878 = zext i1 %3877 to i64
  %3879 = select i1 %3877, i32 1, i32 2
  store i32 %3879, ptr %19, align 4, !tbaa !9
  %3880 = load i32, ptr %258, align 4, !tbaa !9
  %3881 = load ptr, ptr %9, align 8, !tbaa !5
  %3882 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %3881, i32 0, i32 22
  store i32 %3880, ptr %3882, align 8, !tbaa !26
  %3883 = load i32, ptr %257, align 4, !tbaa !9
  %3884 = load ptr, ptr %9, align 8, !tbaa !5
  %3885 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %3884, i32 0, i32 23
  store i32 %3883, ptr %3885, align 4, !tbaa !27
  %3886 = load double, ptr %260, align 8, !tbaa !17
  %3887 = load ptr, ptr %9, align 8, !tbaa !5
  %3888 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %3887, i32 0, i32 20
  store double %3886, ptr %3888, align 8, !tbaa !24
  %3889 = load double, ptr %259, align 8, !tbaa !17
  %3890 = load ptr, ptr %9, align 8, !tbaa !5
  %3891 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %3890, i32 0, i32 21
  store double %3889, ptr %3891, align 8, !tbaa !25
  store i32 54, ptr %60, align 4
  br label %3893

3892:                                             ; preds = %3867
  store i32 0, ptr %60, align 4
  br label %3893

3893:                                             ; preds = %3892, %3876
  call void @llvm.lifetime.end.p0(i64 8, ptr %262) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %261) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %260) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %259) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %258) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %257) #7
  %3894 = load i32, ptr %60, align 4
  switch i32 %3894, label %15542 [
    i32 0, label %3895
    i32 54, label %3899
  ]

3895:                                             ; preds = %3893
  br label %3896

3896:                                             ; preds = %3895
  %3897 = load i32, ptr %248, align 4, !tbaa !9
  %3898 = add nsw i32 %3897, 1
  store i32 %3898, ptr %248, align 4, !tbaa !9
  br label %3646, !llvm.loop !59

3899:                                             ; preds = %3893, %3646
  %3900 = load i32, ptr %19, align 4, !tbaa !9
  %3901 = icmp eq i32 0, %3900
  br i1 %3901, label %3902, label %3933

3902:                                             ; preds = %3899
  %3903 = load double, ptr %252, align 8, !tbaa !17
  %3904 = load ptr, ptr %9, align 8, !tbaa !5
  %3905 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %3904, i32 0, i32 10
  %3906 = call double @libxsmm_kahan_sum(double noundef %3903, ptr noundef %3905, ptr noundef %244)
  %3907 = load double, ptr %253, align 8, !tbaa !17
  %3908 = load ptr, ptr %9, align 8, !tbaa !5
  %3909 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %3908, i32 0, i32 15
  %3910 = call double @libxsmm_kahan_sum(double noundef %3907, ptr noundef %3909, ptr noundef %245)
  %3911 = load ptr, ptr %9, align 8, !tbaa !5
  %3912 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %3911, i32 0, i32 2
  %3913 = load double, ptr %3912, align 8, !tbaa !32
  %3914 = load double, ptr %254, align 8, !tbaa !17
  %3915 = fcmp olt double %3913, %3914
  br i1 %3915, label %3916, label %3920

3916:                                             ; preds = %3902
  %3917 = load double, ptr %254, align 8, !tbaa !17
  %3918 = load ptr, ptr %9, align 8, !tbaa !5
  %3919 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %3918, i32 0, i32 2
  store double %3917, ptr %3919, align 8, !tbaa !32
  br label %3920

3920:                                             ; preds = %3916, %3902
  %3921 = load double, ptr %240, align 8, !tbaa !17
  %3922 = load double, ptr %252, align 8, !tbaa !17
  %3923 = fcmp olt double %3921, %3922
  br i1 %3923, label %3924, label %3926

3924:                                             ; preds = %3920
  %3925 = load double, ptr %252, align 8, !tbaa !17
  store double %3925, ptr %240, align 8, !tbaa !17
  br label %3926

3926:                                             ; preds = %3924, %3920
  %3927 = load double, ptr %241, align 8, !tbaa !17
  %3928 = load double, ptr %253, align 8, !tbaa !17
  %3929 = fcmp olt double %3927, %3928
  br i1 %3929, label %3930, label %3932

3930:                                             ; preds = %3926
  %3931 = load double, ptr %253, align 8, !tbaa !17
  store double %3931, ptr %241, align 8, !tbaa !17
  br label %3932

3932:                                             ; preds = %3930, %3926
  br label %3934

3933:                                             ; preds = %3899
  store i32 51, ptr %60, align 4
  br label %3935

3934:                                             ; preds = %3932
  store i32 0, ptr %60, align 4
  br label %3935

3935:                                             ; preds = %3934, %3933
  call void @llvm.lifetime.end.p0(i64 8, ptr %256) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %255) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %254) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %253) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %252) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %251) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %250) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %249) #7
  %3936 = load i32, ptr %60, align 4
  switch i32 %3936, label %15542 [
    i32 0, label %3937
    i32 51, label %3941
  ]

3937:                                             ; preds = %3935
  br label %3938

3938:                                             ; preds = %3937
  %3939 = load i32, ptr %247, align 4, !tbaa !9
  %3940 = add nsw i32 %3939, 1
  store i32 %3940, ptr %247, align 4, !tbaa !9
  br label %3641, !llvm.loop !60

3941:                                             ; preds = %3935, %3641
  %3942 = load i32, ptr %19, align 4, !tbaa !9
  %3943 = icmp eq i32 0, %3942
  br i1 %3943, label %3944, label %4190

3944:                                             ; preds = %3941
  call void @llvm.lifetime.start.p0(i64 8, ptr %265) #7
  store double 0.000000e+00, ptr %265, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %266) #7
  store double 0.000000e+00, ptr %266, align 8, !tbaa !17
  %3945 = load ptr, ptr %9, align 8, !tbaa !5
  %3946 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %3945, i32 0, i32 14
  %3947 = load double, ptr %3946, align 8, !tbaa !34
  %3948 = fcmp oeq double 0.000000e+00, %3947
  br i1 %3948, label %3949, label %3950

3949:                                             ; preds = %3944
  br label %3951

3950:                                             ; preds = %3944
  call void @__assert_fail(ptr noundef @.str.1, ptr noundef @.str.2, i32 noundef 130, ptr noundef @__PRETTY_FUNCTION__.libxsmm_matdiff) #9
  unreachable

3951:                                             ; preds = %3949
  %3952 = load ptr, ptr %9, align 8, !tbaa !5
  %3953 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %3952, i32 0, i32 19
  %3954 = load double, ptr %3953, align 8, !tbaa !35
  %3955 = fcmp oeq double 0.000000e+00, %3954
  br i1 %3955, label %3956, label %3957

3956:                                             ; preds = %3951
  br label %3958

3957:                                             ; preds = %3951
  call void @__assert_fail(ptr noundef @.str.3, ptr noundef @.str.2, i32 noundef 131, ptr noundef @__PRETTY_FUNCTION__.libxsmm_matdiff) #9
  unreachable

3958:                                             ; preds = %3956
  %3959 = load i64, ptr %24, align 8, !tbaa !12
  %3960 = icmp ne i64 0, %3959
  br i1 %3960, label %3961, label %3978

3961:                                             ; preds = %3958
  %3962 = load ptr, ptr %9, align 8, !tbaa !5
  %3963 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %3962, i32 0, i32 10
  %3964 = load double, ptr %3963, align 8, !tbaa !36
  %3965 = load i64, ptr %24, align 8, !tbaa !12
  %3966 = uitofp i64 %3965 to double
  %3967 = fdiv double %3964, %3966
  %3968 = load ptr, ptr %9, align 8, !tbaa !5
  %3969 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %3968, i32 0, i32 13
  store double %3967, ptr %3969, align 8, !tbaa !37
  %3970 = load ptr, ptr %9, align 8, !tbaa !5
  %3971 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %3970, i32 0, i32 15
  %3972 = load double, ptr %3971, align 8, !tbaa !38
  %3973 = load i64, ptr %24, align 8, !tbaa !12
  %3974 = uitofp i64 %3973 to double
  %3975 = fdiv double %3972, %3974
  %3976 = load ptr, ptr %9, align 8, !tbaa !5
  %3977 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %3976, i32 0, i32 18
  store double %3975, ptr %3977, align 8, !tbaa !39
  br label %3978

3978:                                             ; preds = %3961, %3958
  %3979 = load double, ptr %240, align 8, !tbaa !17
  %3980 = fcmp oge double 0.000000e+00, %3979
  br i1 %3980, label %3981, label %3983

3981:                                             ; preds = %3978
  %3982 = load double, ptr %241, align 8, !tbaa !17
  br label %3995

3983:                                             ; preds = %3978
  %3984 = load ptr, ptr %9, align 8, !tbaa !5
  %3985 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %3984, i32 0, i32 2
  %3986 = load double, ptr %3985, align 8, !tbaa !32
  %3987 = load double, ptr %240, align 8, !tbaa !17
  %3988 = fcmp olt double 0.000000e+00, %3987
  br i1 %3988, label %3989, label %3991

3989:                                             ; preds = %3983
  %3990 = load double, ptr %240, align 8, !tbaa !17
  br label %3992

3991:                                             ; preds = %3983
  br label %3992

3992:                                             ; preds = %3991, %3989
  %3993 = phi double [ %3990, %3989 ], [ 1.000000e+00, %3991 ]
  %3994 = fdiv double %3986, %3993
  br label %3995

3995:                                             ; preds = %3992, %3981
  %3996 = phi double [ %3982, %3981 ], [ %3994, %3992 ]
  %3997 = load ptr, ptr %9, align 8, !tbaa !5
  %3998 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %3997, i32 0, i32 3
  store double %3996, ptr %3998, align 8, !tbaa !40
  %3999 = load double, ptr %238, align 8, !tbaa !17
  %4000 = fcmp oge double 0.000000e+00, %3999
  br i1 %4000, label %4001, label %4019

4001:                                             ; preds = %3995
  %4002 = load double, ptr %239, align 8, !tbaa !17
  %4003 = load double, ptr %239, align 8, !tbaa !17
  %4004 = fmul double %4002, %4003
  %4005 = load ptr, ptr %9, align 8, !tbaa !5
  %4006 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %4005, i32 0, i32 7
  %4007 = load double, ptr %4006, align 8, !tbaa !41
  %4008 = fcmp olt double %4004, %4007
  br i1 %4008, label %4009, label %4013

4009:                                             ; preds = %4001
  %4010 = load double, ptr %239, align 8, !tbaa !17
  %4011 = load double, ptr %239, align 8, !tbaa !17
  %4012 = fmul double %4010, %4011
  br label %4017

4013:                                             ; preds = %4001
  %4014 = load ptr, ptr %9, align 8, !tbaa !5
  %4015 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %4014, i32 0, i32 7
  %4016 = load double, ptr %4015, align 8, !tbaa !41
  br label %4017

4017:                                             ; preds = %4013, %4009
  %4018 = phi double [ %4012, %4009 ], [ %4016, %4013 ]
  br label %4031

4019:                                             ; preds = %3995
  %4020 = load ptr, ptr %9, align 8, !tbaa !5
  %4021 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %4020, i32 0, i32 7
  %4022 = load double, ptr %4021, align 8, !tbaa !41
  %4023 = load double, ptr %238, align 8, !tbaa !17
  %4024 = fcmp olt double 0.000000e+00, %4023
  br i1 %4024, label %4025, label %4027

4025:                                             ; preds = %4019
  %4026 = load double, ptr %238, align 8, !tbaa !17
  br label %4028

4027:                                             ; preds = %4019
  br label %4028

4028:                                             ; preds = %4027, %4025
  %4029 = phi double [ %4026, %4025 ], [ 1.000000e+00, %4027 ]
  %4030 = fdiv double %4022, %4029
  br label %4031

4031:                                             ; preds = %4028, %4017
  %4032 = phi double [ %4018, %4017 ], [ %4030, %4028 ]
  %4033 = load ptr, ptr %9, align 8, !tbaa !5
  %4034 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %4033, i32 0, i32 4
  store double %4032, ptr %4034, align 8, !tbaa !42
  store i32 0, ptr %248, align 4, !tbaa !9
  br label %4035

4035:                                             ; preds = %4164, %4031
  %4036 = load i32, ptr %248, align 4, !tbaa !9
  %4037 = load i32, ptr %25, align 4, !tbaa !9
  %4038 = icmp slt i32 %4036, %4037
  br i1 %4038, label %4039, label %4167

4039:                                             ; preds = %4035
  call void @llvm.lifetime.start.p0(i64 8, ptr %267) #7
  store double 0.000000e+00, ptr %267, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %268) #7
  store double 0.000000e+00, ptr %268, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %269) #7
  store double 0.000000e+00, ptr %269, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %270) #7
  store double 0.000000e+00, ptr %270, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %271) #7
  store double 0.000000e+00, ptr %271, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %272) #7
  store double 0.000000e+00, ptr %272, align 8, !tbaa !17
  store i32 0, ptr %247, align 4, !tbaa !9
  br label %4040

4040:                                             ; preds = %4138, %4039
  %4041 = load i32, ptr %247, align 4, !tbaa !9
  %4042 = load i32, ptr %26, align 4, !tbaa !9
  %4043 = icmp slt i32 %4041, %4042
  br i1 %4043, label %4044, label %4141

4044:                                             ; preds = %4040
  call void @llvm.lifetime.start.p0(i64 4, ptr %273) #7
  %4045 = load i32, ptr %247, align 4, !tbaa !9
  store i32 %4045, ptr %273, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %274) #7
  %4046 = load i32, ptr %248, align 4, !tbaa !9
  store i32 %4046, ptr %274, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %275) #7
  %4047 = load ptr, ptr %233, align 8, !tbaa !5
  %4048 = load i32, ptr %273, align 4, !tbaa !9
  %4049 = load i32, ptr %20, align 4, !tbaa !9
  %4050 = mul nsw i32 %4048, %4049
  %4051 = load i32, ptr %274, align 4, !tbaa !9
  %4052 = add nsw i32 %4050, %4051
  %4053 = sext i32 %4052 to i64
  %4054 = getelementptr inbounds i32, ptr %4047, i64 %4053
  %4055 = load i32, ptr %4054, align 4, !tbaa !9
  %4056 = uitofp i32 %4055 to double
  store double %4056, ptr %275, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %276) #7
  %4057 = load ptr, ptr %234, align 8, !tbaa !5
  %4058 = icmp ne ptr null, %4057
  br i1 %4058, label %4059, label %4070

4059:                                             ; preds = %4044
  %4060 = load ptr, ptr %234, align 8, !tbaa !5
  %4061 = load i32, ptr %273, align 4, !tbaa !9
  %4062 = load i32, ptr %21, align 4, !tbaa !9
  %4063 = mul nsw i32 %4061, %4062
  %4064 = load i32, ptr %274, align 4, !tbaa !9
  %4065 = add nsw i32 %4063, %4064
  %4066 = sext i32 %4065 to i64
  %4067 = getelementptr inbounds i32, ptr %4060, i64 %4066
  %4068 = load i32, ptr %4067, align 4, !tbaa !9
  %4069 = uitofp i32 %4068 to double
  br label %4071

4070:                                             ; preds = %4044
  br label %4071

4071:                                             ; preds = %4070, %4059
  %4072 = phi double [ %4069, %4059 ], [ 0.000000e+00, %4070 ]
  store double %4072, ptr %276, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %277) #7
  %4073 = load ptr, ptr %234, align 8, !tbaa !5
  %4074 = icmp ne ptr null, %4073
  br i1 %4074, label %4075, label %4089

4075:                                             ; preds = %4071
  %4076 = load double, ptr %275, align 8, !tbaa !17
  %4077 = load double, ptr %276, align 8, !tbaa !17
  %4078 = fcmp olt double %4076, %4077
  br i1 %4078, label %4079, label %4083

4079:                                             ; preds = %4075
  %4080 = load double, ptr %276, align 8, !tbaa !17
  %4081 = load double, ptr %275, align 8, !tbaa !17
  %4082 = fsub double %4080, %4081
  br label %4087

4083:                                             ; preds = %4075
  %4084 = load double, ptr %275, align 8, !tbaa !17
  %4085 = load double, ptr %276, align 8, !tbaa !17
  %4086 = fsub double %4084, %4085
  br label %4087

4087:                                             ; preds = %4083, %4079
  %4088 = phi double [ %4082, %4079 ], [ %4086, %4083 ]
  br label %4090

4089:                                             ; preds = %4071
  br label %4090

4090:                                             ; preds = %4089, %4087
  %4091 = phi double [ %4088, %4087 ], [ 0.000000e+00, %4089 ]
  store double %4091, ptr %277, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %278) #7
  %4092 = load double, ptr %275, align 8, !tbaa !17
  %4093 = load ptr, ptr %9, align 8, !tbaa !5
  %4094 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %4093, i32 0, i32 13
  %4095 = load double, ptr %4094, align 8, !tbaa !37
  %4096 = fsub double %4092, %4095
  store double %4096, ptr %278, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %279) #7
  %4097 = load double, ptr %276, align 8, !tbaa !17
  %4098 = load ptr, ptr %9, align 8, !tbaa !5
  %4099 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %4098, i32 0, i32 18
  %4100 = load double, ptr %4099, align 8, !tbaa !39
  %4101 = fsub double %4097, %4100
  store double %4101, ptr %279, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %280) #7
  %4102 = load double, ptr %275, align 8, !tbaa !17
  %4103 = fcmp ole double 0.000000e+00, %4102
  br i1 %4103, label %4104, label %4106

4104:                                             ; preds = %4090
  %4105 = load double, ptr %275, align 8, !tbaa !17
  br label %4109

4106:                                             ; preds = %4090
  %4107 = load double, ptr %275, align 8, !tbaa !17
  %4108 = fneg double %4107
  br label %4109

4109:                                             ; preds = %4106, %4104
  %4110 = phi double [ %4105, %4104 ], [ %4108, %4106 ]
  store double %4110, ptr %280, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %281) #7
  %4111 = load double, ptr %276, align 8, !tbaa !17
  %4112 = fcmp ole double 0.000000e+00, %4111
  br i1 %4112, label %4113, label %4115

4113:                                             ; preds = %4109
  %4114 = load double, ptr %276, align 8, !tbaa !17
  br label %4118

4115:                                             ; preds = %4109
  %4116 = load double, ptr %276, align 8, !tbaa !17
  %4117 = fneg double %4116
  br label %4118

4118:                                             ; preds = %4115, %4113
  %4119 = phi double [ %4114, %4113 ], [ %4117, %4115 ]
  store double %4119, ptr %281, align 8, !tbaa !17
  %4120 = load double, ptr %278, align 8, !tbaa !17
  %4121 = load double, ptr %278, align 8, !tbaa !17
  %4122 = fmul double %4120, %4121
  %4123 = load ptr, ptr %9, align 8, !tbaa !5
  %4124 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %4123, i32 0, i32 14
  %4125 = call double @libxsmm_kahan_sum(double noundef %4122, ptr noundef %4124, ptr noundef %265)
  %4126 = load double, ptr %279, align 8, !tbaa !17
  %4127 = load double, ptr %279, align 8, !tbaa !17
  %4128 = fmul double %4126, %4127
  %4129 = load ptr, ptr %9, align 8, !tbaa !5
  %4130 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %4129, i32 0, i32 19
  %4131 = call double @libxsmm_kahan_sum(double noundef %4128, ptr noundef %4130, ptr noundef %266)
  %4132 = load double, ptr %280, align 8, !tbaa !17
  %4133 = call double @libxsmm_kahan_sum(double noundef %4132, ptr noundef %270, ptr noundef %267)
  %4134 = load double, ptr %281, align 8, !tbaa !17
  %4135 = call double @libxsmm_kahan_sum(double noundef %4134, ptr noundef %271, ptr noundef %268)
  %4136 = load double, ptr %277, align 8, !tbaa !17
  %4137 = call double @libxsmm_kahan_sum(double noundef %4136, ptr noundef %272, ptr noundef %269)
  call void @llvm.lifetime.end.p0(i64 8, ptr %281) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %280) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %279) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %278) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %277) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %276) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %275) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %274) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %273) #7
  br label %4138

4138:                                             ; preds = %4118
  %4139 = load i32, ptr %247, align 4, !tbaa !9
  %4140 = add nsw i32 %4139, 1
  store i32 %4140, ptr %247, align 4, !tbaa !9
  br label %4040, !llvm.loop !61

4141:                                             ; preds = %4040
  %4142 = load ptr, ptr %9, align 8, !tbaa !5
  %4143 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %4142, i32 0, i32 0
  %4144 = load double, ptr %4143, align 8, !tbaa !44
  %4145 = load double, ptr %272, align 8, !tbaa !17
  %4146 = fcmp olt double %4144, %4145
  br i1 %4146, label %4147, label %4151

4147:                                             ; preds = %4141
  %4148 = load double, ptr %272, align 8, !tbaa !17
  %4149 = load ptr, ptr %9, align 8, !tbaa !5
  %4150 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %4149, i32 0, i32 0
  store double %4148, ptr %4150, align 8, !tbaa !44
  br label %4151

4151:                                             ; preds = %4147, %4141
  %4152 = load double, ptr %242, align 8, !tbaa !17
  %4153 = load double, ptr %270, align 8, !tbaa !17
  %4154 = fcmp olt double %4152, %4153
  br i1 %4154, label %4155, label %4157

4155:                                             ; preds = %4151
  %4156 = load double, ptr %270, align 8, !tbaa !17
  store double %4156, ptr %242, align 8, !tbaa !17
  br label %4157

4157:                                             ; preds = %4155, %4151
  %4158 = load double, ptr %243, align 8, !tbaa !17
  %4159 = load double, ptr %271, align 8, !tbaa !17
  %4160 = fcmp olt double %4158, %4159
  br i1 %4160, label %4161, label %4163

4161:                                             ; preds = %4157
  %4162 = load double, ptr %271, align 8, !tbaa !17
  store double %4162, ptr %243, align 8, !tbaa !17
  br label %4163

4163:                                             ; preds = %4161, %4157
  call void @llvm.lifetime.end.p0(i64 8, ptr %272) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %271) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %270) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %269) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %268) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %267) #7
  br label %4164

4164:                                             ; preds = %4163
  %4165 = load i32, ptr %248, align 4, !tbaa !9
  %4166 = add nsw i32 %4165, 1
  store i32 %4166, ptr %248, align 4, !tbaa !9
  br label %4035, !llvm.loop !62

4167:                                             ; preds = %4035
  %4168 = load double, ptr %242, align 8, !tbaa !17
  %4169 = fcmp oge double 0.000000e+00, %4168
  br i1 %4169, label %4170, label %4174

4170:                                             ; preds = %4167
  %4171 = load ptr, ptr %9, align 8, !tbaa !5
  %4172 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %4171, i32 0, i32 0
  %4173 = load double, ptr %4172, align 8, !tbaa !44
  br label %4186

4174:                                             ; preds = %4167
  %4175 = load ptr, ptr %9, align 8, !tbaa !5
  %4176 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %4175, i32 0, i32 0
  %4177 = load double, ptr %4176, align 8, !tbaa !44
  %4178 = load double, ptr %242, align 8, !tbaa !17
  %4179 = fcmp olt double 0.000000e+00, %4178
  br i1 %4179, label %4180, label %4182

4180:                                             ; preds = %4174
  %4181 = load double, ptr %242, align 8, !tbaa !17
  br label %4183

4182:                                             ; preds = %4174
  br label %4183

4183:                                             ; preds = %4182, %4180
  %4184 = phi double [ %4181, %4180 ], [ 1.000000e+00, %4182 ]
  %4185 = fdiv double %4177, %4184
  br label %4186

4186:                                             ; preds = %4183, %4170
  %4187 = phi double [ %4173, %4170 ], [ %4185, %4183 ]
  %4188 = load ptr, ptr %9, align 8, !tbaa !5
  %4189 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %4188, i32 0, i32 1
  store double %4187, ptr %4189, align 8, !tbaa !46
  call void @llvm.lifetime.end.p0(i64 8, ptr %266) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %265) #7
  br label %4190

4190:                                             ; preds = %4186, %3941
  call void @llvm.lifetime.end.p0(i64 4, ptr %248) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %247) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %246) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %245) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %244) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %243) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %242) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %241) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %240) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %239) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %238) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %237) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %236) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %235) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %234) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %233) #7
  br label %4787

4191:                                             ; preds = %3635
  call void @llvm.lifetime.start.p0(i64 8, ptr %282) #7
  %4192 = load ptr, ptr %13, align 8, !tbaa !5
  store ptr %4192, ptr %282, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %283) #7
  %4193 = load ptr, ptr %14, align 8, !tbaa !5
  store ptr %4193, ptr %283, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %284) #7
  store double 0.000000e+00, ptr %284, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %285) #7
  store double 0.000000e+00, ptr %285, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %286) #7
  store double 0.000000e+00, ptr %286, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %287) #7
  store double 0.000000e+00, ptr %287, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %288) #7
  store double 0.000000e+00, ptr %288, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %289) #7
  store double 0.000000e+00, ptr %289, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %290) #7
  store double 0.000000e+00, ptr %290, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %291) #7
  store double 0.000000e+00, ptr %291, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %292) #7
  store double 0.000000e+00, ptr %292, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %293) #7
  store double 0.000000e+00, ptr %293, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %294) #7
  store double 0.000000e+00, ptr %294, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %295) #7
  store double 0.000000e+00, ptr %295, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %296) #7
  %4194 = load i32, ptr %25, align 4, !tbaa !9
  %4195 = sext i32 %4194 to i64
  %4196 = load i32, ptr %26, align 4, !tbaa !9
  %4197 = sext i32 %4196 to i64
  %4198 = mul i64 %4195, %4197
  store i64 %4198, ptr %296, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 8, ptr %297) #7
  %4199 = load i64, ptr %296, align 8, !tbaa !12
  %4200 = call i64 @libxsmm_coprime2(i64 noundef %4199)
  store i64 %4200, ptr %297, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 4, ptr %298) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %299) #7
  store i32 0, ptr %298, align 4, !tbaa !9
  br label %4201

4201:                                             ; preds = %4516, %4191
  %4202 = load i32, ptr %298, align 4, !tbaa !9
  %4203 = load i32, ptr %26, align 4, !tbaa !9
  %4204 = icmp slt i32 %4202, %4203
  br i1 %4204, label %4205, label %4519

4205:                                             ; preds = %4201
  call void @llvm.lifetime.start.p0(i64 8, ptr %300) #7
  store double 0.000000e+00, ptr %300, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %301) #7
  store double 0.000000e+00, ptr %301, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %302) #7
  store double 0.000000e+00, ptr %302, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %303) #7
  store double 0.000000e+00, ptr %303, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %304) #7
  store double 0.000000e+00, ptr %304, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %305) #7
  store double 0.000000e+00, ptr %305, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %306) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %307) #7
  store i32 0, ptr %299, align 4, !tbaa !9
  br label %4206

4206:                                             ; preds = %4474, %4205
  %4207 = load i32, ptr %299, align 4, !tbaa !9
  %4208 = load i32, ptr %25, align 4, !tbaa !9
  %4209 = icmp slt i32 %4207, %4208
  br i1 %4209, label %4210, label %4477

4210:                                             ; preds = %4206
  call void @llvm.lifetime.start.p0(i64 8, ptr %308) #7
  %4211 = load i64, ptr %297, align 8, !tbaa !12
  %4212 = load i32, ptr %298, align 4, !tbaa !9
  %4213 = load i32, ptr %25, align 4, !tbaa !9
  %4214 = mul nsw i32 %4212, %4213
  %4215 = load i32, ptr %299, align 4, !tbaa !9
  %4216 = add nsw i32 %4214, %4215
  %4217 = sext i32 %4216 to i64
  %4218 = mul i64 %4211, %4217
  %4219 = load i64, ptr %296, align 8, !tbaa !12
  %4220 = urem i64 %4218, %4219
  store i64 %4220, ptr %308, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 4, ptr %309) #7
  %4221 = load i64, ptr %308, align 8, !tbaa !12
  %4222 = load i32, ptr %25, align 4, !tbaa !9
  %4223 = sext i32 %4222 to i64
  %4224 = udiv i64 %4221, %4223
  %4225 = trunc i64 %4224 to i32
  store i32 %4225, ptr %309, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %310) #7
  %4226 = load i64, ptr %308, align 8, !tbaa !12
  %4227 = load i32, ptr %25, align 4, !tbaa !9
  %4228 = sext i32 %4227 to i64
  %4229 = urem i64 %4226, %4228
  %4230 = trunc i64 %4229 to i32
  store i32 %4230, ptr %310, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %311) #7
  %4231 = load ptr, ptr %283, align 8, !tbaa !5
  %4232 = icmp ne ptr null, %4231
  br i1 %4232, label %4233, label %4244

4233:                                             ; preds = %4210
  %4234 = load ptr, ptr %283, align 8, !tbaa !5
  %4235 = load i32, ptr %309, align 4, !tbaa !9
  %4236 = load i32, ptr %21, align 4, !tbaa !9
  %4237 = mul nsw i32 %4235, %4236
  %4238 = load i32, ptr %310, align 4, !tbaa !9
  %4239 = add nsw i32 %4237, %4238
  %4240 = sext i32 %4239 to i64
  %4241 = getelementptr inbounds i32, ptr %4234, i64 %4240
  %4242 = load i32, ptr %4241, align 4, !tbaa !9
  %4243 = uitofp i32 %4242 to double
  br label %4245

4244:                                             ; preds = %4210
  br label %4245

4245:                                             ; preds = %4244, %4233
  %4246 = phi double [ %4243, %4233 ], [ 0.000000e+00, %4244 ]
  store double %4246, ptr %311, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %312) #7
  %4247 = load ptr, ptr %282, align 8, !tbaa !5
  %4248 = load i32, ptr %309, align 4, !tbaa !9
  %4249 = load i32, ptr %20, align 4, !tbaa !9
  %4250 = mul nsw i32 %4248, %4249
  %4251 = load i32, ptr %310, align 4, !tbaa !9
  %4252 = add nsw i32 %4250, %4251
  %4253 = sext i32 %4252 to i64
  %4254 = getelementptr inbounds i32, ptr %4247, i64 %4253
  %4255 = load i32, ptr %4254, align 4, !tbaa !9
  %4256 = uitofp i32 %4255 to double
  store double %4256, ptr %312, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %313) #7
  %4257 = load double, ptr %311, align 8, !tbaa !17
  %4258 = fcmp ole double 0.000000e+00, %4257
  br i1 %4258, label %4259, label %4261

4259:                                             ; preds = %4245
  %4260 = load double, ptr %311, align 8, !tbaa !17
  br label %4264

4261:                                             ; preds = %4245
  %4262 = load double, ptr %311, align 8, !tbaa !17
  %4263 = fneg double %4262
  br label %4264

4264:                                             ; preds = %4261, %4259
  %4265 = phi double [ %4260, %4259 ], [ %4263, %4261 ]
  store double %4265, ptr %313, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %314) #7
  %4266 = load double, ptr %312, align 8, !tbaa !17
  %4267 = fcmp ole double 0.000000e+00, %4266
  br i1 %4267, label %4268, label %4270

4268:                                             ; preds = %4264
  %4269 = load double, ptr %312, align 8, !tbaa !17
  br label %4273

4270:                                             ; preds = %4264
  %4271 = load double, ptr %312, align 8, !tbaa !17
  %4272 = fneg double %4271
  br label %4273

4273:                                             ; preds = %4270, %4268
  %4274 = phi double [ %4269, %4268 ], [ %4272, %4270 ]
  store double %4274, ptr %314, align 8, !tbaa !17
  %4275 = load double, ptr %312, align 8, !tbaa !17
  %4276 = load ptr, ptr %9, align 8, !tbaa !5
  %4277 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %4276, i32 0, i32 11
  %4278 = load double, ptr %4277, align 8, !tbaa !14
  %4279 = fcmp olt double %4275, %4278
  br i1 %4279, label %4280, label %4284

4280:                                             ; preds = %4273
  %4281 = load double, ptr %312, align 8, !tbaa !17
  %4282 = load ptr, ptr %9, align 8, !tbaa !5
  %4283 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %4282, i32 0, i32 11
  store double %4281, ptr %4283, align 8, !tbaa !14
  br label %4284

4284:                                             ; preds = %4280, %4273
  %4285 = load double, ptr %312, align 8, !tbaa !17
  %4286 = load ptr, ptr %9, align 8, !tbaa !5
  %4287 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %4286, i32 0, i32 12
  %4288 = load double, ptr %4287, align 8, !tbaa !20
  %4289 = fcmp ogt double %4285, %4288
  br i1 %4289, label %4290, label %4294

4290:                                             ; preds = %4284
  %4291 = load double, ptr %312, align 8, !tbaa !17
  %4292 = load ptr, ptr %9, align 8, !tbaa !5
  %4293 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %4292, i32 0, i32 12
  store double %4291, ptr %4293, align 8, !tbaa !20
  br label %4294

4294:                                             ; preds = %4290, %4284
  %4295 = load double, ptr %311, align 8, !tbaa !17
  %4296 = load double, ptr %311, align 8, !tbaa !17
  %4297 = fcmp oeq double %4295, %4296
  br i1 %4297, label %4298, label %4446

4298:                                             ; preds = %4294
  %4299 = load double, ptr %27, align 8, !tbaa !17
  %4300 = load double, ptr %313, align 8, !tbaa !17
  %4301 = fcmp ogt double %4299, %4300
  br i1 %4301, label %4306, label %4302

4302:                                             ; preds = %4298
  %4303 = load double, ptr %311, align 8, !tbaa !17
  %4304 = load double, ptr %312, align 8, !tbaa !17
  %4305 = fcmp oeq double %4303, %4304
  br i1 %4305, label %4306, label %4446

4306:                                             ; preds = %4302, %4298
  call void @llvm.lifetime.start.p0(i64 8, ptr %315) #7
  %4307 = load ptr, ptr %283, align 8, !tbaa !5
  %4308 = icmp ne ptr null, %4307
  br i1 %4308, label %4309, label %4323

4309:                                             ; preds = %4306
  %4310 = load double, ptr %312, align 8, !tbaa !17
  %4311 = load double, ptr %311, align 8, !tbaa !17
  %4312 = fcmp olt double %4310, %4311
  br i1 %4312, label %4313, label %4317

4313:                                             ; preds = %4309
  %4314 = load double, ptr %311, align 8, !tbaa !17
  %4315 = load double, ptr %312, align 8, !tbaa !17
  %4316 = fsub double %4314, %4315
  br label %4321

4317:                                             ; preds = %4309
  %4318 = load double, ptr %312, align 8, !tbaa !17
  %4319 = load double, ptr %311, align 8, !tbaa !17
  %4320 = fsub double %4318, %4319
  br label %4321

4321:                                             ; preds = %4317, %4313
  %4322 = phi double [ %4316, %4313 ], [ %4320, %4317 ]
  br label %4324

4323:                                             ; preds = %4306
  br label %4324

4324:                                             ; preds = %4323, %4321
  %4325 = phi double [ %4322, %4321 ], [ 0.000000e+00, %4323 ]
  store double %4325, ptr %315, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %316) #7
  %4326 = load double, ptr %314, align 8, !tbaa !17
  %4327 = fcmp oge double 0.000000e+00, %4326
  br i1 %4327, label %4328, label %4330

4328:                                             ; preds = %4324
  %4329 = load double, ptr %313, align 8, !tbaa !17
  br label %4340

4330:                                             ; preds = %4324
  %4331 = load double, ptr %315, align 8, !tbaa !17
  %4332 = load double, ptr %314, align 8, !tbaa !17
  %4333 = fcmp olt double 0.000000e+00, %4332
  br i1 %4333, label %4334, label %4336

4334:                                             ; preds = %4330
  %4335 = load double, ptr %314, align 8, !tbaa !17
  br label %4337

4336:                                             ; preds = %4330
  br label %4337

4337:                                             ; preds = %4336, %4334
  %4338 = phi double [ %4335, %4334 ], [ 1.000000e+00, %4336 ]
  %4339 = fdiv double %4331, %4338
  br label %4340

4340:                                             ; preds = %4337, %4328
  %4341 = phi double [ %4329, %4328 ], [ %4339, %4337 ]
  store double %4341, ptr %316, align 8, !tbaa !17
  %4342 = load double, ptr %311, align 8, !tbaa !17
  %4343 = load ptr, ptr %9, align 8, !tbaa !5
  %4344 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %4343, i32 0, i32 16
  %4345 = load double, ptr %4344, align 8, !tbaa !21
  %4346 = fcmp olt double %4342, %4345
  br i1 %4346, label %4347, label %4351

4347:                                             ; preds = %4340
  %4348 = load double, ptr %311, align 8, !tbaa !17
  %4349 = load ptr, ptr %9, align 8, !tbaa !5
  %4350 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %4349, i32 0, i32 16
  store double %4348, ptr %4350, align 8, !tbaa !21
  br label %4351

4351:                                             ; preds = %4347, %4340
  %4352 = load double, ptr %311, align 8, !tbaa !17
  %4353 = load ptr, ptr %9, align 8, !tbaa !5
  %4354 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %4353, i32 0, i32 17
  %4355 = load double, ptr %4354, align 8, !tbaa !22
  %4356 = fcmp ogt double %4352, %4355
  br i1 %4356, label %4357, label %4361

4357:                                             ; preds = %4351
  %4358 = load double, ptr %311, align 8, !tbaa !17
  %4359 = load ptr, ptr %9, align 8, !tbaa !5
  %4360 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %4359, i32 0, i32 17
  store double %4358, ptr %4360, align 8, !tbaa !22
  br label %4361

4361:                                             ; preds = %4357, %4351
  %4362 = load ptr, ptr %9, align 8, !tbaa !5
  %4363 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %4362, i32 0, i32 5
  %4364 = load double, ptr %4363, align 8, !tbaa !23
  %4365 = load double, ptr %315, align 8, !tbaa !17
  %4366 = fcmp olt double %4364, %4365
  br i1 %4366, label %4367, label %4383

4367:                                             ; preds = %4361
  %4368 = load double, ptr %315, align 8, !tbaa !17
  %4369 = load ptr, ptr %9, align 8, !tbaa !5
  %4370 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %4369, i32 0, i32 5
  store double %4368, ptr %4370, align 8, !tbaa !23
  %4371 = load double, ptr %312, align 8, !tbaa !17
  %4372 = load ptr, ptr %9, align 8, !tbaa !5
  %4373 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %4372, i32 0, i32 20
  store double %4371, ptr %4373, align 8, !tbaa !24
  %4374 = load double, ptr %311, align 8, !tbaa !17
  %4375 = load ptr, ptr %9, align 8, !tbaa !5
  %4376 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %4375, i32 0, i32 21
  store double %4374, ptr %4376, align 8, !tbaa !25
  %4377 = load i32, ptr %310, align 4, !tbaa !9
  %4378 = load ptr, ptr %9, align 8, !tbaa !5
  %4379 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %4378, i32 0, i32 22
  store i32 %4377, ptr %4379, align 8, !tbaa !26
  %4380 = load i32, ptr %309, align 4, !tbaa !9
  %4381 = load ptr, ptr %9, align 8, !tbaa !5
  %4382 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %4381, i32 0, i32 23
  store i32 %4380, ptr %4382, align 4, !tbaa !27
  br label %4383

4383:                                             ; preds = %4367, %4361
  %4384 = load ptr, ptr %9, align 8, !tbaa !5
  %4385 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %4384, i32 0, i32 6
  %4386 = load double, ptr %4385, align 8, !tbaa !28
  %4387 = load double, ptr %316, align 8, !tbaa !17
  %4388 = fcmp olt double %4386, %4387
  br i1 %4388, label %4389, label %4393

4389:                                             ; preds = %4383
  %4390 = load double, ptr %316, align 8, !tbaa !17
  %4391 = load ptr, ptr %9, align 8, !tbaa !5
  %4392 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %4391, i32 0, i32 6
  store double %4390, ptr %4392, align 8, !tbaa !28
  br label %4393

4393:                                             ; preds = %4389, %4383
  %4394 = load double, ptr %316, align 8, !tbaa !17
  %4395 = load double, ptr %316, align 8, !tbaa !17
  %4396 = fmul double %4394, %4395
  store double %4396, ptr %306, align 8, !tbaa !17
  %4397 = load double, ptr %27, align 8, !tbaa !17
  %4398 = load double, ptr %306, align 8, !tbaa !17
  %4399 = fcmp ogt double %4397, %4398
  br i1 %4399, label %4400, label %4419

4400:                                             ; preds = %4393
  %4401 = load double, ptr %295, align 8, !tbaa !17
  %4402 = load double, ptr %306, align 8, !tbaa !17
  %4403 = fsub double %4402, %4401
  store double %4403, ptr %306, align 8, !tbaa !17
  %4404 = load ptr, ptr %9, align 8, !tbaa !5
  %4405 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %4404, i32 0, i32 8
  %4406 = load double, ptr %4405, align 8, !tbaa !29
  %4407 = load double, ptr %306, align 8, !tbaa !17
  %4408 = fadd double %4406, %4407
  store double %4408, ptr %307, align 8, !tbaa !17
  %4409 = load double, ptr %307, align 8, !tbaa !17
  %4410 = load ptr, ptr %9, align 8, !tbaa !5
  %4411 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %4410, i32 0, i32 8
  %4412 = load double, ptr %4411, align 8, !tbaa !29
  %4413 = fsub double %4409, %4412
  %4414 = load double, ptr %306, align 8, !tbaa !17
  %4415 = fsub double %4413, %4414
  store double %4415, ptr %295, align 8, !tbaa !17
  %4416 = load double, ptr %307, align 8, !tbaa !17
  %4417 = load ptr, ptr %9, align 8, !tbaa !5
  %4418 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %4417, i32 0, i32 8
  store double %4416, ptr %4418, align 8, !tbaa !29
  br label %4419

4419:                                             ; preds = %4400, %4393
  %4420 = load double, ptr %314, align 8, !tbaa !17
  %4421 = call double @libxsmm_kahan_sum(double noundef %4420, ptr noundef %303, ptr noundef %300)
  %4422 = load double, ptr %313, align 8, !tbaa !17
  %4423 = call double @libxsmm_kahan_sum(double noundef %4422, ptr noundef %304, ptr noundef %301)
  %4424 = load double, ptr %315, align 8, !tbaa !17
  %4425 = call double @libxsmm_kahan_sum(double noundef %4424, ptr noundef %305, ptr noundef %302)
  %4426 = load double, ptr %312, align 8, !tbaa !17
  %4427 = load double, ptr %312, align 8, !tbaa !17
  %4428 = fmul double %4426, %4427
  %4429 = call double @libxsmm_kahan_sum(double noundef %4428, ptr noundef %287, ptr noundef %285)
  %4430 = load double, ptr %311, align 8, !tbaa !17
  %4431 = load double, ptr %311, align 8, !tbaa !17
  %4432 = fmul double %4430, %4431
  %4433 = call double @libxsmm_kahan_sum(double noundef %4432, ptr noundef %288, ptr noundef %286)
  %4434 = load double, ptr %315, align 8, !tbaa !17
  %4435 = load double, ptr %315, align 8, !tbaa !17
  %4436 = fmul double %4434, %4435
  store double %4436, ptr %306, align 8, !tbaa !17
  %4437 = load double, ptr %27, align 8, !tbaa !17
  %4438 = load double, ptr %306, align 8, !tbaa !17
  %4439 = fcmp ogt double %4437, %4438
  br i1 %4439, label %4440, label %4445

4440:                                             ; preds = %4419
  %4441 = load double, ptr %306, align 8, !tbaa !17
  %4442 = load ptr, ptr %9, align 8, !tbaa !5
  %4443 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %4442, i32 0, i32 7
  %4444 = call double @libxsmm_kahan_sum(double noundef %4441, ptr noundef %4443, ptr noundef %284)
  br label %4445

4445:                                             ; preds = %4440, %4419
  call void @llvm.lifetime.end.p0(i64 8, ptr %316) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %315) #7
  br label %4470

4446:                                             ; preds = %4302, %4294
  %4447 = load double, ptr %312, align 8, !tbaa !17
  %4448 = load double, ptr %312, align 8, !tbaa !17
  %4449 = fcmp oeq double %4447, %4448
  br i1 %4449, label %4450, label %4454

4450:                                             ; preds = %4446
  %4451 = load double, ptr %27, align 8, !tbaa !17
  %4452 = load double, ptr %314, align 8, !tbaa !17
  %4453 = fcmp ogt double %4451, %4452
  br label %4454

4454:                                             ; preds = %4450, %4446
  %4455 = phi i1 [ false, %4446 ], [ %4453, %4450 ]
  %4456 = zext i1 %4455 to i64
  %4457 = select i1 %4455, i32 1, i32 2
  store i32 %4457, ptr %19, align 4, !tbaa !9
  %4458 = load i32, ptr %310, align 4, !tbaa !9
  %4459 = load ptr, ptr %9, align 8, !tbaa !5
  %4460 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %4459, i32 0, i32 22
  store i32 %4458, ptr %4460, align 8, !tbaa !26
  %4461 = load i32, ptr %309, align 4, !tbaa !9
  %4462 = load ptr, ptr %9, align 8, !tbaa !5
  %4463 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %4462, i32 0, i32 23
  store i32 %4461, ptr %4463, align 4, !tbaa !27
  %4464 = load double, ptr %312, align 8, !tbaa !17
  %4465 = load ptr, ptr %9, align 8, !tbaa !5
  %4466 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %4465, i32 0, i32 20
  store double %4464, ptr %4466, align 8, !tbaa !24
  %4467 = load double, ptr %311, align 8, !tbaa !17
  %4468 = load ptr, ptr %9, align 8, !tbaa !5
  %4469 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %4468, i32 0, i32 21
  store double %4467, ptr %4469, align 8, !tbaa !25
  store i32 66, ptr %60, align 4
  br label %4471

4470:                                             ; preds = %4445
  store i32 0, ptr %60, align 4
  br label %4471

4471:                                             ; preds = %4470, %4454
  call void @llvm.lifetime.end.p0(i64 8, ptr %314) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %313) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %312) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %311) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %310) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %309) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %308) #7
  %4472 = load i32, ptr %60, align 4
  switch i32 %4472, label %15542 [
    i32 0, label %4473
    i32 66, label %4477
  ]

4473:                                             ; preds = %4471
  br label %4474

4474:                                             ; preds = %4473
  %4475 = load i32, ptr %299, align 4, !tbaa !9
  %4476 = add nsw i32 %4475, 1
  store i32 %4476, ptr %299, align 4, !tbaa !9
  br label %4206, !llvm.loop !63

4477:                                             ; preds = %4471, %4206
  %4478 = load i32, ptr %19, align 4, !tbaa !9
  %4479 = icmp eq i32 0, %4478
  br i1 %4479, label %4480, label %4511

4480:                                             ; preds = %4477
  %4481 = load double, ptr %303, align 8, !tbaa !17
  %4482 = load ptr, ptr %9, align 8, !tbaa !5
  %4483 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %4482, i32 0, i32 10
  %4484 = call double @libxsmm_kahan_sum(double noundef %4481, ptr noundef %4483, ptr noundef %293)
  %4485 = load double, ptr %304, align 8, !tbaa !17
  %4486 = load ptr, ptr %9, align 8, !tbaa !5
  %4487 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %4486, i32 0, i32 15
  %4488 = call double @libxsmm_kahan_sum(double noundef %4485, ptr noundef %4487, ptr noundef %294)
  %4489 = load ptr, ptr %9, align 8, !tbaa !5
  %4490 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %4489, i32 0, i32 2
  %4491 = load double, ptr %4490, align 8, !tbaa !32
  %4492 = load double, ptr %305, align 8, !tbaa !17
  %4493 = fcmp olt double %4491, %4492
  br i1 %4493, label %4494, label %4498

4494:                                             ; preds = %4480
  %4495 = load double, ptr %305, align 8, !tbaa !17
  %4496 = load ptr, ptr %9, align 8, !tbaa !5
  %4497 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %4496, i32 0, i32 2
  store double %4495, ptr %4497, align 8, !tbaa !32
  br label %4498

4498:                                             ; preds = %4494, %4480
  %4499 = load double, ptr %289, align 8, !tbaa !17
  %4500 = load double, ptr %303, align 8, !tbaa !17
  %4501 = fcmp olt double %4499, %4500
  br i1 %4501, label %4502, label %4504

4502:                                             ; preds = %4498
  %4503 = load double, ptr %303, align 8, !tbaa !17
  store double %4503, ptr %289, align 8, !tbaa !17
  br label %4504

4504:                                             ; preds = %4502, %4498
  %4505 = load double, ptr %290, align 8, !tbaa !17
  %4506 = load double, ptr %304, align 8, !tbaa !17
  %4507 = fcmp olt double %4505, %4506
  br i1 %4507, label %4508, label %4510

4508:                                             ; preds = %4504
  %4509 = load double, ptr %304, align 8, !tbaa !17
  store double %4509, ptr %290, align 8, !tbaa !17
  br label %4510

4510:                                             ; preds = %4508, %4504
  br label %4512

4511:                                             ; preds = %4477
  store i32 63, ptr %60, align 4
  br label %4513

4512:                                             ; preds = %4510
  store i32 0, ptr %60, align 4
  br label %4513

4513:                                             ; preds = %4512, %4511
  call void @llvm.lifetime.end.p0(i64 8, ptr %307) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %306) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %305) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %304) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %303) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %302) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %301) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %300) #7
  %4514 = load i32, ptr %60, align 4
  switch i32 %4514, label %15542 [
    i32 0, label %4515
    i32 63, label %4519
  ]

4515:                                             ; preds = %4513
  br label %4516

4516:                                             ; preds = %4515
  %4517 = load i32, ptr %298, align 4, !tbaa !9
  %4518 = add nsw i32 %4517, 1
  store i32 %4518, ptr %298, align 4, !tbaa !9
  br label %4201, !llvm.loop !64

4519:                                             ; preds = %4513, %4201
  %4520 = load i32, ptr %19, align 4, !tbaa !9
  %4521 = icmp eq i32 0, %4520
  br i1 %4521, label %4522, label %4786

4522:                                             ; preds = %4519
  call void @llvm.lifetime.start.p0(i64 8, ptr %317) #7
  store double 0.000000e+00, ptr %317, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %318) #7
  store double 0.000000e+00, ptr %318, align 8, !tbaa !17
  %4523 = load ptr, ptr %9, align 8, !tbaa !5
  %4524 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %4523, i32 0, i32 14
  %4525 = load double, ptr %4524, align 8, !tbaa !34
  %4526 = fcmp oeq double 0.000000e+00, %4525
  br i1 %4526, label %4527, label %4528

4527:                                             ; preds = %4522
  br label %4529

4528:                                             ; preds = %4522
  call void @__assert_fail(ptr noundef @.str.1, ptr noundef @.str.2, i32 noundef 130, ptr noundef @__PRETTY_FUNCTION__.libxsmm_matdiff) #9
  unreachable

4529:                                             ; preds = %4527
  %4530 = load ptr, ptr %9, align 8, !tbaa !5
  %4531 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %4530, i32 0, i32 19
  %4532 = load double, ptr %4531, align 8, !tbaa !35
  %4533 = fcmp oeq double 0.000000e+00, %4532
  br i1 %4533, label %4534, label %4535

4534:                                             ; preds = %4529
  br label %4536

4535:                                             ; preds = %4529
  call void @__assert_fail(ptr noundef @.str.3, ptr noundef @.str.2, i32 noundef 131, ptr noundef @__PRETTY_FUNCTION__.libxsmm_matdiff) #9
  unreachable

4536:                                             ; preds = %4534
  %4537 = load i64, ptr %24, align 8, !tbaa !12
  %4538 = icmp ne i64 0, %4537
  br i1 %4538, label %4539, label %4556

4539:                                             ; preds = %4536
  %4540 = load ptr, ptr %9, align 8, !tbaa !5
  %4541 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %4540, i32 0, i32 10
  %4542 = load double, ptr %4541, align 8, !tbaa !36
  %4543 = load i64, ptr %24, align 8, !tbaa !12
  %4544 = uitofp i64 %4543 to double
  %4545 = fdiv double %4542, %4544
  %4546 = load ptr, ptr %9, align 8, !tbaa !5
  %4547 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %4546, i32 0, i32 13
  store double %4545, ptr %4547, align 8, !tbaa !37
  %4548 = load ptr, ptr %9, align 8, !tbaa !5
  %4549 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %4548, i32 0, i32 15
  %4550 = load double, ptr %4549, align 8, !tbaa !38
  %4551 = load i64, ptr %24, align 8, !tbaa !12
  %4552 = uitofp i64 %4551 to double
  %4553 = fdiv double %4550, %4552
  %4554 = load ptr, ptr %9, align 8, !tbaa !5
  %4555 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %4554, i32 0, i32 18
  store double %4553, ptr %4555, align 8, !tbaa !39
  br label %4556

4556:                                             ; preds = %4539, %4536
  %4557 = load double, ptr %289, align 8, !tbaa !17
  %4558 = fcmp oge double 0.000000e+00, %4557
  br i1 %4558, label %4559, label %4561

4559:                                             ; preds = %4556
  %4560 = load double, ptr %290, align 8, !tbaa !17
  br label %4573

4561:                                             ; preds = %4556
  %4562 = load ptr, ptr %9, align 8, !tbaa !5
  %4563 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %4562, i32 0, i32 2
  %4564 = load double, ptr %4563, align 8, !tbaa !32
  %4565 = load double, ptr %289, align 8, !tbaa !17
  %4566 = fcmp olt double 0.000000e+00, %4565
  br i1 %4566, label %4567, label %4569

4567:                                             ; preds = %4561
  %4568 = load double, ptr %289, align 8, !tbaa !17
  br label %4570

4569:                                             ; preds = %4561
  br label %4570

4570:                                             ; preds = %4569, %4567
  %4571 = phi double [ %4568, %4567 ], [ 1.000000e+00, %4569 ]
  %4572 = fdiv double %4564, %4571
  br label %4573

4573:                                             ; preds = %4570, %4559
  %4574 = phi double [ %4560, %4559 ], [ %4572, %4570 ]
  %4575 = load ptr, ptr %9, align 8, !tbaa !5
  %4576 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %4575, i32 0, i32 3
  store double %4574, ptr %4576, align 8, !tbaa !40
  %4577 = load double, ptr %287, align 8, !tbaa !17
  %4578 = fcmp oge double 0.000000e+00, %4577
  br i1 %4578, label %4579, label %4597

4579:                                             ; preds = %4573
  %4580 = load double, ptr %288, align 8, !tbaa !17
  %4581 = load double, ptr %288, align 8, !tbaa !17
  %4582 = fmul double %4580, %4581
  %4583 = load ptr, ptr %9, align 8, !tbaa !5
  %4584 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %4583, i32 0, i32 7
  %4585 = load double, ptr %4584, align 8, !tbaa !41
  %4586 = fcmp olt double %4582, %4585
  br i1 %4586, label %4587, label %4591

4587:                                             ; preds = %4579
  %4588 = load double, ptr %288, align 8, !tbaa !17
  %4589 = load double, ptr %288, align 8, !tbaa !17
  %4590 = fmul double %4588, %4589
  br label %4595

4591:                                             ; preds = %4579
  %4592 = load ptr, ptr %9, align 8, !tbaa !5
  %4593 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %4592, i32 0, i32 7
  %4594 = load double, ptr %4593, align 8, !tbaa !41
  br label %4595

4595:                                             ; preds = %4591, %4587
  %4596 = phi double [ %4590, %4587 ], [ %4594, %4591 ]
  br label %4609

4597:                                             ; preds = %4573
  %4598 = load ptr, ptr %9, align 8, !tbaa !5
  %4599 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %4598, i32 0, i32 7
  %4600 = load double, ptr %4599, align 8, !tbaa !41
  %4601 = load double, ptr %287, align 8, !tbaa !17
  %4602 = fcmp olt double 0.000000e+00, %4601
  br i1 %4602, label %4603, label %4605

4603:                                             ; preds = %4597
  %4604 = load double, ptr %287, align 8, !tbaa !17
  br label %4606

4605:                                             ; preds = %4597
  br label %4606

4606:                                             ; preds = %4605, %4603
  %4607 = phi double [ %4604, %4603 ], [ 1.000000e+00, %4605 ]
  %4608 = fdiv double %4600, %4607
  br label %4609

4609:                                             ; preds = %4606, %4595
  %4610 = phi double [ %4596, %4595 ], [ %4608, %4606 ]
  %4611 = load ptr, ptr %9, align 8, !tbaa !5
  %4612 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %4611, i32 0, i32 4
  store double %4610, ptr %4612, align 8, !tbaa !42
  store i32 0, ptr %299, align 4, !tbaa !9
  br label %4613

4613:                                             ; preds = %4760, %4609
  %4614 = load i32, ptr %299, align 4, !tbaa !9
  %4615 = load i32, ptr %25, align 4, !tbaa !9
  %4616 = icmp slt i32 %4614, %4615
  br i1 %4616, label %4617, label %4763

4617:                                             ; preds = %4613
  call void @llvm.lifetime.start.p0(i64 8, ptr %319) #7
  store double 0.000000e+00, ptr %319, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %320) #7
  store double 0.000000e+00, ptr %320, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %321) #7
  store double 0.000000e+00, ptr %321, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %322) #7
  store double 0.000000e+00, ptr %322, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %323) #7
  store double 0.000000e+00, ptr %323, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %324) #7
  store double 0.000000e+00, ptr %324, align 8, !tbaa !17
  store i32 0, ptr %298, align 4, !tbaa !9
  br label %4618

4618:                                             ; preds = %4734, %4617
  %4619 = load i32, ptr %298, align 4, !tbaa !9
  %4620 = load i32, ptr %26, align 4, !tbaa !9
  %4621 = icmp slt i32 %4619, %4620
  br i1 %4621, label %4622, label %4737

4622:                                             ; preds = %4618
  call void @llvm.lifetime.start.p0(i64 8, ptr %325) #7
  %4623 = load i64, ptr %297, align 8, !tbaa !12
  %4624 = load i32, ptr %298, align 4, !tbaa !9
  %4625 = load i32, ptr %25, align 4, !tbaa !9
  %4626 = mul nsw i32 %4624, %4625
  %4627 = load i32, ptr %299, align 4, !tbaa !9
  %4628 = add nsw i32 %4626, %4627
  %4629 = sext i32 %4628 to i64
  %4630 = mul i64 %4623, %4629
  %4631 = load i64, ptr %296, align 8, !tbaa !12
  %4632 = urem i64 %4630, %4631
  store i64 %4632, ptr %325, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 4, ptr %326) #7
  %4633 = load i64, ptr %325, align 8, !tbaa !12
  %4634 = load i32, ptr %25, align 4, !tbaa !9
  %4635 = sext i32 %4634 to i64
  %4636 = udiv i64 %4633, %4635
  %4637 = trunc i64 %4636 to i32
  store i32 %4637, ptr %326, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %327) #7
  %4638 = load i64, ptr %325, align 8, !tbaa !12
  %4639 = load i32, ptr %25, align 4, !tbaa !9
  %4640 = sext i32 %4639 to i64
  %4641 = urem i64 %4638, %4640
  %4642 = trunc i64 %4641 to i32
  store i32 %4642, ptr %327, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %328) #7
  %4643 = load ptr, ptr %282, align 8, !tbaa !5
  %4644 = load i32, ptr %326, align 4, !tbaa !9
  %4645 = load i32, ptr %20, align 4, !tbaa !9
  %4646 = mul nsw i32 %4644, %4645
  %4647 = load i32, ptr %327, align 4, !tbaa !9
  %4648 = add nsw i32 %4646, %4647
  %4649 = sext i32 %4648 to i64
  %4650 = getelementptr inbounds i32, ptr %4643, i64 %4649
  %4651 = load i32, ptr %4650, align 4, !tbaa !9
  %4652 = uitofp i32 %4651 to double
  store double %4652, ptr %328, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %329) #7
  %4653 = load ptr, ptr %283, align 8, !tbaa !5
  %4654 = icmp ne ptr null, %4653
  br i1 %4654, label %4655, label %4666

4655:                                             ; preds = %4622
  %4656 = load ptr, ptr %283, align 8, !tbaa !5
  %4657 = load i32, ptr %326, align 4, !tbaa !9
  %4658 = load i32, ptr %21, align 4, !tbaa !9
  %4659 = mul nsw i32 %4657, %4658
  %4660 = load i32, ptr %327, align 4, !tbaa !9
  %4661 = add nsw i32 %4659, %4660
  %4662 = sext i32 %4661 to i64
  %4663 = getelementptr inbounds i32, ptr %4656, i64 %4662
  %4664 = load i32, ptr %4663, align 4, !tbaa !9
  %4665 = uitofp i32 %4664 to double
  br label %4667

4666:                                             ; preds = %4622
  br label %4667

4667:                                             ; preds = %4666, %4655
  %4668 = phi double [ %4665, %4655 ], [ 0.000000e+00, %4666 ]
  store double %4668, ptr %329, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %330) #7
  %4669 = load ptr, ptr %283, align 8, !tbaa !5
  %4670 = icmp ne ptr null, %4669
  br i1 %4670, label %4671, label %4685

4671:                                             ; preds = %4667
  %4672 = load double, ptr %328, align 8, !tbaa !17
  %4673 = load double, ptr %329, align 8, !tbaa !17
  %4674 = fcmp olt double %4672, %4673
  br i1 %4674, label %4675, label %4679

4675:                                             ; preds = %4671
  %4676 = load double, ptr %329, align 8, !tbaa !17
  %4677 = load double, ptr %328, align 8, !tbaa !17
  %4678 = fsub double %4676, %4677
  br label %4683

4679:                                             ; preds = %4671
  %4680 = load double, ptr %328, align 8, !tbaa !17
  %4681 = load double, ptr %329, align 8, !tbaa !17
  %4682 = fsub double %4680, %4681
  br label %4683

4683:                                             ; preds = %4679, %4675
  %4684 = phi double [ %4678, %4675 ], [ %4682, %4679 ]
  br label %4686

4685:                                             ; preds = %4667
  br label %4686

4686:                                             ; preds = %4685, %4683
  %4687 = phi double [ %4684, %4683 ], [ 0.000000e+00, %4685 ]
  store double %4687, ptr %330, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %331) #7
  %4688 = load double, ptr %328, align 8, !tbaa !17
  %4689 = load ptr, ptr %9, align 8, !tbaa !5
  %4690 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %4689, i32 0, i32 13
  %4691 = load double, ptr %4690, align 8, !tbaa !37
  %4692 = fsub double %4688, %4691
  store double %4692, ptr %331, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %332) #7
  %4693 = load double, ptr %329, align 8, !tbaa !17
  %4694 = load ptr, ptr %9, align 8, !tbaa !5
  %4695 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %4694, i32 0, i32 18
  %4696 = load double, ptr %4695, align 8, !tbaa !39
  %4697 = fsub double %4693, %4696
  store double %4697, ptr %332, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %333) #7
  %4698 = load double, ptr %328, align 8, !tbaa !17
  %4699 = fcmp ole double 0.000000e+00, %4698
  br i1 %4699, label %4700, label %4702

4700:                                             ; preds = %4686
  %4701 = load double, ptr %328, align 8, !tbaa !17
  br label %4705

4702:                                             ; preds = %4686
  %4703 = load double, ptr %328, align 8, !tbaa !17
  %4704 = fneg double %4703
  br label %4705

4705:                                             ; preds = %4702, %4700
  %4706 = phi double [ %4701, %4700 ], [ %4704, %4702 ]
  store double %4706, ptr %333, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %334) #7
  %4707 = load double, ptr %329, align 8, !tbaa !17
  %4708 = fcmp ole double 0.000000e+00, %4707
  br i1 %4708, label %4709, label %4711

4709:                                             ; preds = %4705
  %4710 = load double, ptr %329, align 8, !tbaa !17
  br label %4714

4711:                                             ; preds = %4705
  %4712 = load double, ptr %329, align 8, !tbaa !17
  %4713 = fneg double %4712
  br label %4714

4714:                                             ; preds = %4711, %4709
  %4715 = phi double [ %4710, %4709 ], [ %4713, %4711 ]
  store double %4715, ptr %334, align 8, !tbaa !17
  %4716 = load double, ptr %331, align 8, !tbaa !17
  %4717 = load double, ptr %331, align 8, !tbaa !17
  %4718 = fmul double %4716, %4717
  %4719 = load ptr, ptr %9, align 8, !tbaa !5
  %4720 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %4719, i32 0, i32 14
  %4721 = call double @libxsmm_kahan_sum(double noundef %4718, ptr noundef %4720, ptr noundef %317)
  %4722 = load double, ptr %332, align 8, !tbaa !17
  %4723 = load double, ptr %332, align 8, !tbaa !17
  %4724 = fmul double %4722, %4723
  %4725 = load ptr, ptr %9, align 8, !tbaa !5
  %4726 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %4725, i32 0, i32 19
  %4727 = call double @libxsmm_kahan_sum(double noundef %4724, ptr noundef %4726, ptr noundef %318)
  %4728 = load double, ptr %333, align 8, !tbaa !17
  %4729 = call double @libxsmm_kahan_sum(double noundef %4728, ptr noundef %322, ptr noundef %319)
  %4730 = load double, ptr %334, align 8, !tbaa !17
  %4731 = call double @libxsmm_kahan_sum(double noundef %4730, ptr noundef %323, ptr noundef %320)
  %4732 = load double, ptr %330, align 8, !tbaa !17
  %4733 = call double @libxsmm_kahan_sum(double noundef %4732, ptr noundef %324, ptr noundef %321)
  call void @llvm.lifetime.end.p0(i64 8, ptr %334) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %333) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %332) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %331) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %330) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %329) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %328) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %327) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %326) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %325) #7
  br label %4734

4734:                                             ; preds = %4714
  %4735 = load i32, ptr %298, align 4, !tbaa !9
  %4736 = add nsw i32 %4735, 1
  store i32 %4736, ptr %298, align 4, !tbaa !9
  br label %4618, !llvm.loop !65

4737:                                             ; preds = %4618
  %4738 = load ptr, ptr %9, align 8, !tbaa !5
  %4739 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %4738, i32 0, i32 0
  %4740 = load double, ptr %4739, align 8, !tbaa !44
  %4741 = load double, ptr %324, align 8, !tbaa !17
  %4742 = fcmp olt double %4740, %4741
  br i1 %4742, label %4743, label %4747

4743:                                             ; preds = %4737
  %4744 = load double, ptr %324, align 8, !tbaa !17
  %4745 = load ptr, ptr %9, align 8, !tbaa !5
  %4746 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %4745, i32 0, i32 0
  store double %4744, ptr %4746, align 8, !tbaa !44
  br label %4747

4747:                                             ; preds = %4743, %4737
  %4748 = load double, ptr %291, align 8, !tbaa !17
  %4749 = load double, ptr %322, align 8, !tbaa !17
  %4750 = fcmp olt double %4748, %4749
  br i1 %4750, label %4751, label %4753

4751:                                             ; preds = %4747
  %4752 = load double, ptr %322, align 8, !tbaa !17
  store double %4752, ptr %291, align 8, !tbaa !17
  br label %4753

4753:                                             ; preds = %4751, %4747
  %4754 = load double, ptr %292, align 8, !tbaa !17
  %4755 = load double, ptr %323, align 8, !tbaa !17
  %4756 = fcmp olt double %4754, %4755
  br i1 %4756, label %4757, label %4759

4757:                                             ; preds = %4753
  %4758 = load double, ptr %323, align 8, !tbaa !17
  store double %4758, ptr %292, align 8, !tbaa !17
  br label %4759

4759:                                             ; preds = %4757, %4753
  call void @llvm.lifetime.end.p0(i64 8, ptr %324) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %323) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %322) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %321) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %320) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %319) #7
  br label %4760

4760:                                             ; preds = %4759
  %4761 = load i32, ptr %299, align 4, !tbaa !9
  %4762 = add nsw i32 %4761, 1
  store i32 %4762, ptr %299, align 4, !tbaa !9
  br label %4613, !llvm.loop !66

4763:                                             ; preds = %4613
  %4764 = load double, ptr %291, align 8, !tbaa !17
  %4765 = fcmp oge double 0.000000e+00, %4764
  br i1 %4765, label %4766, label %4770

4766:                                             ; preds = %4763
  %4767 = load ptr, ptr %9, align 8, !tbaa !5
  %4768 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %4767, i32 0, i32 0
  %4769 = load double, ptr %4768, align 8, !tbaa !44
  br label %4782

4770:                                             ; preds = %4763
  %4771 = load ptr, ptr %9, align 8, !tbaa !5
  %4772 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %4771, i32 0, i32 0
  %4773 = load double, ptr %4772, align 8, !tbaa !44
  %4774 = load double, ptr %291, align 8, !tbaa !17
  %4775 = fcmp olt double 0.000000e+00, %4774
  br i1 %4775, label %4776, label %4778

4776:                                             ; preds = %4770
  %4777 = load double, ptr %291, align 8, !tbaa !17
  br label %4779

4778:                                             ; preds = %4770
  br label %4779

4779:                                             ; preds = %4778, %4776
  %4780 = phi double [ %4777, %4776 ], [ 1.000000e+00, %4778 ]
  %4781 = fdiv double %4773, %4780
  br label %4782

4782:                                             ; preds = %4779, %4766
  %4783 = phi double [ %4769, %4766 ], [ %4781, %4779 ]
  %4784 = load ptr, ptr %9, align 8, !tbaa !5
  %4785 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %4784, i32 0, i32 1
  store double %4783, ptr %4785, align 8, !tbaa !46
  call void @llvm.lifetime.end.p0(i64 8, ptr %318) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %317) #7
  br label %4786

4786:                                             ; preds = %4782, %4519
  call void @llvm.lifetime.end.p0(i64 4, ptr %299) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %298) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %297) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %296) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %295) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %294) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %293) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %292) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %291) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %290) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %289) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %288) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %287) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %286) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %285) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %284) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %283) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %282) #7
  br label %4787

4787:                                             ; preds = %4786, %4190
  br label %15200

4788:                                             ; preds = %1323
  %4789 = load i32, ptr %23, align 4, !tbaa !9
  %4790 = icmp eq i32 0, %4789
  br i1 %4790, label %4791, label %5344

4791:                                             ; preds = %4788
  call void @llvm.lifetime.start.p0(i64 8, ptr %335) #7
  %4792 = load ptr, ptr %13, align 8, !tbaa !5
  store ptr %4792, ptr %335, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %336) #7
  %4793 = load ptr, ptr %14, align 8, !tbaa !5
  store ptr %4793, ptr %336, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %337) #7
  store double 0.000000e+00, ptr %337, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %338) #7
  store double 0.000000e+00, ptr %338, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %339) #7
  store double 0.000000e+00, ptr %339, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %340) #7
  store double 0.000000e+00, ptr %340, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %341) #7
  store double 0.000000e+00, ptr %341, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %342) #7
  store double 0.000000e+00, ptr %342, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %343) #7
  store double 0.000000e+00, ptr %343, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %344) #7
  store double 0.000000e+00, ptr %344, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %345) #7
  store double 0.000000e+00, ptr %345, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %346) #7
  store double 0.000000e+00, ptr %346, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %347) #7
  store double 0.000000e+00, ptr %347, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %348) #7
  store double 0.000000e+00, ptr %348, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 4, ptr %349) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %350) #7
  store i32 0, ptr %349, align 4, !tbaa !9
  br label %4794

4794:                                             ; preds = %5091, %4791
  %4795 = load i32, ptr %349, align 4, !tbaa !9
  %4796 = load i32, ptr %26, align 4, !tbaa !9
  %4797 = icmp slt i32 %4795, %4796
  br i1 %4797, label %4798, label %5094

4798:                                             ; preds = %4794
  call void @llvm.lifetime.start.p0(i64 8, ptr %351) #7
  store double 0.000000e+00, ptr %351, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %352) #7
  store double 0.000000e+00, ptr %352, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %353) #7
  store double 0.000000e+00, ptr %353, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %354) #7
  store double 0.000000e+00, ptr %354, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %355) #7
  store double 0.000000e+00, ptr %355, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %356) #7
  store double 0.000000e+00, ptr %356, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %357) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %358) #7
  store i32 0, ptr %350, align 4, !tbaa !9
  br label %4799

4799:                                             ; preds = %5049, %4798
  %4800 = load i32, ptr %350, align 4, !tbaa !9
  %4801 = load i32, ptr %25, align 4, !tbaa !9
  %4802 = icmp slt i32 %4800, %4801
  br i1 %4802, label %4803, label %5052

4803:                                             ; preds = %4799
  call void @llvm.lifetime.start.p0(i64 4, ptr %359) #7
  %4804 = load i32, ptr %349, align 4, !tbaa !9
  store i32 %4804, ptr %359, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %360) #7
  %4805 = load i32, ptr %350, align 4, !tbaa !9
  store i32 %4805, ptr %360, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %361) #7
  %4806 = load ptr, ptr %336, align 8, !tbaa !5
  %4807 = icmp ne ptr null, %4806
  br i1 %4807, label %4808, label %4819

4808:                                             ; preds = %4803
  %4809 = load ptr, ptr %336, align 8, !tbaa !5
  %4810 = load i32, ptr %359, align 4, !tbaa !9
  %4811 = load i32, ptr %21, align 4, !tbaa !9
  %4812 = mul nsw i32 %4810, %4811
  %4813 = load i32, ptr %360, align 4, !tbaa !9
  %4814 = add nsw i32 %4812, %4813
  %4815 = sext i32 %4814 to i64
  %4816 = getelementptr inbounds i16, ptr %4809, i64 %4815
  %4817 = load i16, ptr %4816, align 2, !tbaa !67
  %4818 = sitofp i16 %4817 to double
  br label %4820

4819:                                             ; preds = %4803
  br label %4820

4820:                                             ; preds = %4819, %4808
  %4821 = phi double [ %4818, %4808 ], [ 0.000000e+00, %4819 ]
  store double %4821, ptr %361, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %362) #7
  %4822 = load ptr, ptr %335, align 8, !tbaa !5
  %4823 = load i32, ptr %359, align 4, !tbaa !9
  %4824 = load i32, ptr %20, align 4, !tbaa !9
  %4825 = mul nsw i32 %4823, %4824
  %4826 = load i32, ptr %360, align 4, !tbaa !9
  %4827 = add nsw i32 %4825, %4826
  %4828 = sext i32 %4827 to i64
  %4829 = getelementptr inbounds i16, ptr %4822, i64 %4828
  %4830 = load i16, ptr %4829, align 2, !tbaa !67
  %4831 = sitofp i16 %4830 to double
  store double %4831, ptr %362, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %363) #7
  %4832 = load double, ptr %361, align 8, !tbaa !17
  %4833 = fcmp ole double 0.000000e+00, %4832
  br i1 %4833, label %4834, label %4836

4834:                                             ; preds = %4820
  %4835 = load double, ptr %361, align 8, !tbaa !17
  br label %4839

4836:                                             ; preds = %4820
  %4837 = load double, ptr %361, align 8, !tbaa !17
  %4838 = fneg double %4837
  br label %4839

4839:                                             ; preds = %4836, %4834
  %4840 = phi double [ %4835, %4834 ], [ %4838, %4836 ]
  store double %4840, ptr %363, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %364) #7
  %4841 = load double, ptr %362, align 8, !tbaa !17
  %4842 = fcmp ole double 0.000000e+00, %4841
  br i1 %4842, label %4843, label %4845

4843:                                             ; preds = %4839
  %4844 = load double, ptr %362, align 8, !tbaa !17
  br label %4848

4845:                                             ; preds = %4839
  %4846 = load double, ptr %362, align 8, !tbaa !17
  %4847 = fneg double %4846
  br label %4848

4848:                                             ; preds = %4845, %4843
  %4849 = phi double [ %4844, %4843 ], [ %4847, %4845 ]
  store double %4849, ptr %364, align 8, !tbaa !17
  %4850 = load double, ptr %362, align 8, !tbaa !17
  %4851 = load ptr, ptr %9, align 8, !tbaa !5
  %4852 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %4851, i32 0, i32 11
  %4853 = load double, ptr %4852, align 8, !tbaa !14
  %4854 = fcmp olt double %4850, %4853
  br i1 %4854, label %4855, label %4859

4855:                                             ; preds = %4848
  %4856 = load double, ptr %362, align 8, !tbaa !17
  %4857 = load ptr, ptr %9, align 8, !tbaa !5
  %4858 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %4857, i32 0, i32 11
  store double %4856, ptr %4858, align 8, !tbaa !14
  br label %4859

4859:                                             ; preds = %4855, %4848
  %4860 = load double, ptr %362, align 8, !tbaa !17
  %4861 = load ptr, ptr %9, align 8, !tbaa !5
  %4862 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %4861, i32 0, i32 12
  %4863 = load double, ptr %4862, align 8, !tbaa !20
  %4864 = fcmp ogt double %4860, %4863
  br i1 %4864, label %4865, label %4869

4865:                                             ; preds = %4859
  %4866 = load double, ptr %362, align 8, !tbaa !17
  %4867 = load ptr, ptr %9, align 8, !tbaa !5
  %4868 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %4867, i32 0, i32 12
  store double %4866, ptr %4868, align 8, !tbaa !20
  br label %4869

4869:                                             ; preds = %4865, %4859
  %4870 = load double, ptr %361, align 8, !tbaa !17
  %4871 = load double, ptr %361, align 8, !tbaa !17
  %4872 = fcmp oeq double %4870, %4871
  br i1 %4872, label %4873, label %5021

4873:                                             ; preds = %4869
  %4874 = load double, ptr %27, align 8, !tbaa !17
  %4875 = load double, ptr %363, align 8, !tbaa !17
  %4876 = fcmp ogt double %4874, %4875
  br i1 %4876, label %4881, label %4877

4877:                                             ; preds = %4873
  %4878 = load double, ptr %361, align 8, !tbaa !17
  %4879 = load double, ptr %362, align 8, !tbaa !17
  %4880 = fcmp oeq double %4878, %4879
  br i1 %4880, label %4881, label %5021

4881:                                             ; preds = %4877, %4873
  call void @llvm.lifetime.start.p0(i64 8, ptr %365) #7
  %4882 = load ptr, ptr %336, align 8, !tbaa !5
  %4883 = icmp ne ptr null, %4882
  br i1 %4883, label %4884, label %4898

4884:                                             ; preds = %4881
  %4885 = load double, ptr %362, align 8, !tbaa !17
  %4886 = load double, ptr %361, align 8, !tbaa !17
  %4887 = fcmp olt double %4885, %4886
  br i1 %4887, label %4888, label %4892

4888:                                             ; preds = %4884
  %4889 = load double, ptr %361, align 8, !tbaa !17
  %4890 = load double, ptr %362, align 8, !tbaa !17
  %4891 = fsub double %4889, %4890
  br label %4896

4892:                                             ; preds = %4884
  %4893 = load double, ptr %362, align 8, !tbaa !17
  %4894 = load double, ptr %361, align 8, !tbaa !17
  %4895 = fsub double %4893, %4894
  br label %4896

4896:                                             ; preds = %4892, %4888
  %4897 = phi double [ %4891, %4888 ], [ %4895, %4892 ]
  br label %4899

4898:                                             ; preds = %4881
  br label %4899

4899:                                             ; preds = %4898, %4896
  %4900 = phi double [ %4897, %4896 ], [ 0.000000e+00, %4898 ]
  store double %4900, ptr %365, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %366) #7
  %4901 = load double, ptr %364, align 8, !tbaa !17
  %4902 = fcmp oge double 0.000000e+00, %4901
  br i1 %4902, label %4903, label %4905

4903:                                             ; preds = %4899
  %4904 = load double, ptr %363, align 8, !tbaa !17
  br label %4915

4905:                                             ; preds = %4899
  %4906 = load double, ptr %365, align 8, !tbaa !17
  %4907 = load double, ptr %364, align 8, !tbaa !17
  %4908 = fcmp olt double 0.000000e+00, %4907
  br i1 %4908, label %4909, label %4911

4909:                                             ; preds = %4905
  %4910 = load double, ptr %364, align 8, !tbaa !17
  br label %4912

4911:                                             ; preds = %4905
  br label %4912

4912:                                             ; preds = %4911, %4909
  %4913 = phi double [ %4910, %4909 ], [ 1.000000e+00, %4911 ]
  %4914 = fdiv double %4906, %4913
  br label %4915

4915:                                             ; preds = %4912, %4903
  %4916 = phi double [ %4904, %4903 ], [ %4914, %4912 ]
  store double %4916, ptr %366, align 8, !tbaa !17
  %4917 = load double, ptr %361, align 8, !tbaa !17
  %4918 = load ptr, ptr %9, align 8, !tbaa !5
  %4919 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %4918, i32 0, i32 16
  %4920 = load double, ptr %4919, align 8, !tbaa !21
  %4921 = fcmp olt double %4917, %4920
  br i1 %4921, label %4922, label %4926

4922:                                             ; preds = %4915
  %4923 = load double, ptr %361, align 8, !tbaa !17
  %4924 = load ptr, ptr %9, align 8, !tbaa !5
  %4925 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %4924, i32 0, i32 16
  store double %4923, ptr %4925, align 8, !tbaa !21
  br label %4926

4926:                                             ; preds = %4922, %4915
  %4927 = load double, ptr %361, align 8, !tbaa !17
  %4928 = load ptr, ptr %9, align 8, !tbaa !5
  %4929 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %4928, i32 0, i32 17
  %4930 = load double, ptr %4929, align 8, !tbaa !22
  %4931 = fcmp ogt double %4927, %4930
  br i1 %4931, label %4932, label %4936

4932:                                             ; preds = %4926
  %4933 = load double, ptr %361, align 8, !tbaa !17
  %4934 = load ptr, ptr %9, align 8, !tbaa !5
  %4935 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %4934, i32 0, i32 17
  store double %4933, ptr %4935, align 8, !tbaa !22
  br label %4936

4936:                                             ; preds = %4932, %4926
  %4937 = load ptr, ptr %9, align 8, !tbaa !5
  %4938 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %4937, i32 0, i32 5
  %4939 = load double, ptr %4938, align 8, !tbaa !23
  %4940 = load double, ptr %365, align 8, !tbaa !17
  %4941 = fcmp olt double %4939, %4940
  br i1 %4941, label %4942, label %4958

4942:                                             ; preds = %4936
  %4943 = load double, ptr %365, align 8, !tbaa !17
  %4944 = load ptr, ptr %9, align 8, !tbaa !5
  %4945 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %4944, i32 0, i32 5
  store double %4943, ptr %4945, align 8, !tbaa !23
  %4946 = load double, ptr %362, align 8, !tbaa !17
  %4947 = load ptr, ptr %9, align 8, !tbaa !5
  %4948 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %4947, i32 0, i32 20
  store double %4946, ptr %4948, align 8, !tbaa !24
  %4949 = load double, ptr %361, align 8, !tbaa !17
  %4950 = load ptr, ptr %9, align 8, !tbaa !5
  %4951 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %4950, i32 0, i32 21
  store double %4949, ptr %4951, align 8, !tbaa !25
  %4952 = load i32, ptr %360, align 4, !tbaa !9
  %4953 = load ptr, ptr %9, align 8, !tbaa !5
  %4954 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %4953, i32 0, i32 22
  store i32 %4952, ptr %4954, align 8, !tbaa !26
  %4955 = load i32, ptr %359, align 4, !tbaa !9
  %4956 = load ptr, ptr %9, align 8, !tbaa !5
  %4957 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %4956, i32 0, i32 23
  store i32 %4955, ptr %4957, align 4, !tbaa !27
  br label %4958

4958:                                             ; preds = %4942, %4936
  %4959 = load ptr, ptr %9, align 8, !tbaa !5
  %4960 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %4959, i32 0, i32 6
  %4961 = load double, ptr %4960, align 8, !tbaa !28
  %4962 = load double, ptr %366, align 8, !tbaa !17
  %4963 = fcmp olt double %4961, %4962
  br i1 %4963, label %4964, label %4968

4964:                                             ; preds = %4958
  %4965 = load double, ptr %366, align 8, !tbaa !17
  %4966 = load ptr, ptr %9, align 8, !tbaa !5
  %4967 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %4966, i32 0, i32 6
  store double %4965, ptr %4967, align 8, !tbaa !28
  br label %4968

4968:                                             ; preds = %4964, %4958
  %4969 = load double, ptr %366, align 8, !tbaa !17
  %4970 = load double, ptr %366, align 8, !tbaa !17
  %4971 = fmul double %4969, %4970
  store double %4971, ptr %357, align 8, !tbaa !17
  %4972 = load double, ptr %27, align 8, !tbaa !17
  %4973 = load double, ptr %357, align 8, !tbaa !17
  %4974 = fcmp ogt double %4972, %4973
  br i1 %4974, label %4975, label %4994

4975:                                             ; preds = %4968
  %4976 = load double, ptr %348, align 8, !tbaa !17
  %4977 = load double, ptr %357, align 8, !tbaa !17
  %4978 = fsub double %4977, %4976
  store double %4978, ptr %357, align 8, !tbaa !17
  %4979 = load ptr, ptr %9, align 8, !tbaa !5
  %4980 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %4979, i32 0, i32 8
  %4981 = load double, ptr %4980, align 8, !tbaa !29
  %4982 = load double, ptr %357, align 8, !tbaa !17
  %4983 = fadd double %4981, %4982
  store double %4983, ptr %358, align 8, !tbaa !17
  %4984 = load double, ptr %358, align 8, !tbaa !17
  %4985 = load ptr, ptr %9, align 8, !tbaa !5
  %4986 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %4985, i32 0, i32 8
  %4987 = load double, ptr %4986, align 8, !tbaa !29
  %4988 = fsub double %4984, %4987
  %4989 = load double, ptr %357, align 8, !tbaa !17
  %4990 = fsub double %4988, %4989
  store double %4990, ptr %348, align 8, !tbaa !17
  %4991 = load double, ptr %358, align 8, !tbaa !17
  %4992 = load ptr, ptr %9, align 8, !tbaa !5
  %4993 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %4992, i32 0, i32 8
  store double %4991, ptr %4993, align 8, !tbaa !29
  br label %4994

4994:                                             ; preds = %4975, %4968
  %4995 = load double, ptr %364, align 8, !tbaa !17
  %4996 = call double @libxsmm_kahan_sum(double noundef %4995, ptr noundef %354, ptr noundef %351)
  %4997 = load double, ptr %363, align 8, !tbaa !17
  %4998 = call double @libxsmm_kahan_sum(double noundef %4997, ptr noundef %355, ptr noundef %352)
  %4999 = load double, ptr %365, align 8, !tbaa !17
  %5000 = call double @libxsmm_kahan_sum(double noundef %4999, ptr noundef %356, ptr noundef %353)
  %5001 = load double, ptr %362, align 8, !tbaa !17
  %5002 = load double, ptr %362, align 8, !tbaa !17
  %5003 = fmul double %5001, %5002
  %5004 = call double @libxsmm_kahan_sum(double noundef %5003, ptr noundef %340, ptr noundef %338)
  %5005 = load double, ptr %361, align 8, !tbaa !17
  %5006 = load double, ptr %361, align 8, !tbaa !17
  %5007 = fmul double %5005, %5006
  %5008 = call double @libxsmm_kahan_sum(double noundef %5007, ptr noundef %341, ptr noundef %339)
  %5009 = load double, ptr %365, align 8, !tbaa !17
  %5010 = load double, ptr %365, align 8, !tbaa !17
  %5011 = fmul double %5009, %5010
  store double %5011, ptr %357, align 8, !tbaa !17
  %5012 = load double, ptr %27, align 8, !tbaa !17
  %5013 = load double, ptr %357, align 8, !tbaa !17
  %5014 = fcmp ogt double %5012, %5013
  br i1 %5014, label %5015, label %5020

5015:                                             ; preds = %4994
  %5016 = load double, ptr %357, align 8, !tbaa !17
  %5017 = load ptr, ptr %9, align 8, !tbaa !5
  %5018 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %5017, i32 0, i32 7
  %5019 = call double @libxsmm_kahan_sum(double noundef %5016, ptr noundef %5018, ptr noundef %337)
  br label %5020

5020:                                             ; preds = %5015, %4994
  call void @llvm.lifetime.end.p0(i64 8, ptr %366) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %365) #7
  br label %5045

5021:                                             ; preds = %4877, %4869
  %5022 = load double, ptr %362, align 8, !tbaa !17
  %5023 = load double, ptr %362, align 8, !tbaa !17
  %5024 = fcmp oeq double %5022, %5023
  br i1 %5024, label %5025, label %5029

5025:                                             ; preds = %5021
  %5026 = load double, ptr %27, align 8, !tbaa !17
  %5027 = load double, ptr %364, align 8, !tbaa !17
  %5028 = fcmp ogt double %5026, %5027
  br label %5029

5029:                                             ; preds = %5025, %5021
  %5030 = phi i1 [ false, %5021 ], [ %5028, %5025 ]
  %5031 = zext i1 %5030 to i64
  %5032 = select i1 %5030, i32 1, i32 2
  store i32 %5032, ptr %19, align 4, !tbaa !9
  %5033 = load i32, ptr %360, align 4, !tbaa !9
  %5034 = load ptr, ptr %9, align 8, !tbaa !5
  %5035 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %5034, i32 0, i32 22
  store i32 %5033, ptr %5035, align 8, !tbaa !26
  %5036 = load i32, ptr %359, align 4, !tbaa !9
  %5037 = load ptr, ptr %9, align 8, !tbaa !5
  %5038 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %5037, i32 0, i32 23
  store i32 %5036, ptr %5038, align 4, !tbaa !27
  %5039 = load double, ptr %362, align 8, !tbaa !17
  %5040 = load ptr, ptr %9, align 8, !tbaa !5
  %5041 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %5040, i32 0, i32 20
  store double %5039, ptr %5041, align 8, !tbaa !24
  %5042 = load double, ptr %361, align 8, !tbaa !17
  %5043 = load ptr, ptr %9, align 8, !tbaa !5
  %5044 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %5043, i32 0, i32 21
  store double %5042, ptr %5044, align 8, !tbaa !25
  store i32 78, ptr %60, align 4
  br label %5046

5045:                                             ; preds = %5020
  store i32 0, ptr %60, align 4
  br label %5046

5046:                                             ; preds = %5045, %5029
  call void @llvm.lifetime.end.p0(i64 8, ptr %364) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %363) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %362) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %361) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %360) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %359) #7
  %5047 = load i32, ptr %60, align 4
  switch i32 %5047, label %15542 [
    i32 0, label %5048
    i32 78, label %5052
  ]

5048:                                             ; preds = %5046
  br label %5049

5049:                                             ; preds = %5048
  %5050 = load i32, ptr %350, align 4, !tbaa !9
  %5051 = add nsw i32 %5050, 1
  store i32 %5051, ptr %350, align 4, !tbaa !9
  br label %4799, !llvm.loop !69

5052:                                             ; preds = %5046, %4799
  %5053 = load i32, ptr %19, align 4, !tbaa !9
  %5054 = icmp eq i32 0, %5053
  br i1 %5054, label %5055, label %5086

5055:                                             ; preds = %5052
  %5056 = load double, ptr %354, align 8, !tbaa !17
  %5057 = load ptr, ptr %9, align 8, !tbaa !5
  %5058 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %5057, i32 0, i32 10
  %5059 = call double @libxsmm_kahan_sum(double noundef %5056, ptr noundef %5058, ptr noundef %346)
  %5060 = load double, ptr %355, align 8, !tbaa !17
  %5061 = load ptr, ptr %9, align 8, !tbaa !5
  %5062 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %5061, i32 0, i32 15
  %5063 = call double @libxsmm_kahan_sum(double noundef %5060, ptr noundef %5062, ptr noundef %347)
  %5064 = load ptr, ptr %9, align 8, !tbaa !5
  %5065 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %5064, i32 0, i32 2
  %5066 = load double, ptr %5065, align 8, !tbaa !32
  %5067 = load double, ptr %356, align 8, !tbaa !17
  %5068 = fcmp olt double %5066, %5067
  br i1 %5068, label %5069, label %5073

5069:                                             ; preds = %5055
  %5070 = load double, ptr %356, align 8, !tbaa !17
  %5071 = load ptr, ptr %9, align 8, !tbaa !5
  %5072 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %5071, i32 0, i32 2
  store double %5070, ptr %5072, align 8, !tbaa !32
  br label %5073

5073:                                             ; preds = %5069, %5055
  %5074 = load double, ptr %342, align 8, !tbaa !17
  %5075 = load double, ptr %354, align 8, !tbaa !17
  %5076 = fcmp olt double %5074, %5075
  br i1 %5076, label %5077, label %5079

5077:                                             ; preds = %5073
  %5078 = load double, ptr %354, align 8, !tbaa !17
  store double %5078, ptr %342, align 8, !tbaa !17
  br label %5079

5079:                                             ; preds = %5077, %5073
  %5080 = load double, ptr %343, align 8, !tbaa !17
  %5081 = load double, ptr %355, align 8, !tbaa !17
  %5082 = fcmp olt double %5080, %5081
  br i1 %5082, label %5083, label %5085

5083:                                             ; preds = %5079
  %5084 = load double, ptr %355, align 8, !tbaa !17
  store double %5084, ptr %343, align 8, !tbaa !17
  br label %5085

5085:                                             ; preds = %5083, %5079
  br label %5087

5086:                                             ; preds = %5052
  store i32 75, ptr %60, align 4
  br label %5088

5087:                                             ; preds = %5085
  store i32 0, ptr %60, align 4
  br label %5088

5088:                                             ; preds = %5087, %5086
  call void @llvm.lifetime.end.p0(i64 8, ptr %358) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %357) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %356) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %355) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %354) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %353) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %352) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %351) #7
  %5089 = load i32, ptr %60, align 4
  switch i32 %5089, label %15542 [
    i32 0, label %5090
    i32 75, label %5094
  ]

5090:                                             ; preds = %5088
  br label %5091

5091:                                             ; preds = %5090
  %5092 = load i32, ptr %349, align 4, !tbaa !9
  %5093 = add nsw i32 %5092, 1
  store i32 %5093, ptr %349, align 4, !tbaa !9
  br label %4794, !llvm.loop !70

5094:                                             ; preds = %5088, %4794
  %5095 = load i32, ptr %19, align 4, !tbaa !9
  %5096 = icmp eq i32 0, %5095
  br i1 %5096, label %5097, label %5343

5097:                                             ; preds = %5094
  call void @llvm.lifetime.start.p0(i64 8, ptr %367) #7
  store double 0.000000e+00, ptr %367, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %368) #7
  store double 0.000000e+00, ptr %368, align 8, !tbaa !17
  %5098 = load ptr, ptr %9, align 8, !tbaa !5
  %5099 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %5098, i32 0, i32 14
  %5100 = load double, ptr %5099, align 8, !tbaa !34
  %5101 = fcmp oeq double 0.000000e+00, %5100
  br i1 %5101, label %5102, label %5103

5102:                                             ; preds = %5097
  br label %5104

5103:                                             ; preds = %5097
  call void @__assert_fail(ptr noundef @.str.1, ptr noundef @.str.2, i32 noundef 130, ptr noundef @__PRETTY_FUNCTION__.libxsmm_matdiff) #9
  unreachable

5104:                                             ; preds = %5102
  %5105 = load ptr, ptr %9, align 8, !tbaa !5
  %5106 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %5105, i32 0, i32 19
  %5107 = load double, ptr %5106, align 8, !tbaa !35
  %5108 = fcmp oeq double 0.000000e+00, %5107
  br i1 %5108, label %5109, label %5110

5109:                                             ; preds = %5104
  br label %5111

5110:                                             ; preds = %5104
  call void @__assert_fail(ptr noundef @.str.3, ptr noundef @.str.2, i32 noundef 131, ptr noundef @__PRETTY_FUNCTION__.libxsmm_matdiff) #9
  unreachable

5111:                                             ; preds = %5109
  %5112 = load i64, ptr %24, align 8, !tbaa !12
  %5113 = icmp ne i64 0, %5112
  br i1 %5113, label %5114, label %5131

5114:                                             ; preds = %5111
  %5115 = load ptr, ptr %9, align 8, !tbaa !5
  %5116 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %5115, i32 0, i32 10
  %5117 = load double, ptr %5116, align 8, !tbaa !36
  %5118 = load i64, ptr %24, align 8, !tbaa !12
  %5119 = uitofp i64 %5118 to double
  %5120 = fdiv double %5117, %5119
  %5121 = load ptr, ptr %9, align 8, !tbaa !5
  %5122 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %5121, i32 0, i32 13
  store double %5120, ptr %5122, align 8, !tbaa !37
  %5123 = load ptr, ptr %9, align 8, !tbaa !5
  %5124 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %5123, i32 0, i32 15
  %5125 = load double, ptr %5124, align 8, !tbaa !38
  %5126 = load i64, ptr %24, align 8, !tbaa !12
  %5127 = uitofp i64 %5126 to double
  %5128 = fdiv double %5125, %5127
  %5129 = load ptr, ptr %9, align 8, !tbaa !5
  %5130 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %5129, i32 0, i32 18
  store double %5128, ptr %5130, align 8, !tbaa !39
  br label %5131

5131:                                             ; preds = %5114, %5111
  %5132 = load double, ptr %342, align 8, !tbaa !17
  %5133 = fcmp oge double 0.000000e+00, %5132
  br i1 %5133, label %5134, label %5136

5134:                                             ; preds = %5131
  %5135 = load double, ptr %343, align 8, !tbaa !17
  br label %5148

5136:                                             ; preds = %5131
  %5137 = load ptr, ptr %9, align 8, !tbaa !5
  %5138 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %5137, i32 0, i32 2
  %5139 = load double, ptr %5138, align 8, !tbaa !32
  %5140 = load double, ptr %342, align 8, !tbaa !17
  %5141 = fcmp olt double 0.000000e+00, %5140
  br i1 %5141, label %5142, label %5144

5142:                                             ; preds = %5136
  %5143 = load double, ptr %342, align 8, !tbaa !17
  br label %5145

5144:                                             ; preds = %5136
  br label %5145

5145:                                             ; preds = %5144, %5142
  %5146 = phi double [ %5143, %5142 ], [ 1.000000e+00, %5144 ]
  %5147 = fdiv double %5139, %5146
  br label %5148

5148:                                             ; preds = %5145, %5134
  %5149 = phi double [ %5135, %5134 ], [ %5147, %5145 ]
  %5150 = load ptr, ptr %9, align 8, !tbaa !5
  %5151 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %5150, i32 0, i32 3
  store double %5149, ptr %5151, align 8, !tbaa !40
  %5152 = load double, ptr %340, align 8, !tbaa !17
  %5153 = fcmp oge double 0.000000e+00, %5152
  br i1 %5153, label %5154, label %5172

5154:                                             ; preds = %5148
  %5155 = load double, ptr %341, align 8, !tbaa !17
  %5156 = load double, ptr %341, align 8, !tbaa !17
  %5157 = fmul double %5155, %5156
  %5158 = load ptr, ptr %9, align 8, !tbaa !5
  %5159 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %5158, i32 0, i32 7
  %5160 = load double, ptr %5159, align 8, !tbaa !41
  %5161 = fcmp olt double %5157, %5160
  br i1 %5161, label %5162, label %5166

5162:                                             ; preds = %5154
  %5163 = load double, ptr %341, align 8, !tbaa !17
  %5164 = load double, ptr %341, align 8, !tbaa !17
  %5165 = fmul double %5163, %5164
  br label %5170

5166:                                             ; preds = %5154
  %5167 = load ptr, ptr %9, align 8, !tbaa !5
  %5168 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %5167, i32 0, i32 7
  %5169 = load double, ptr %5168, align 8, !tbaa !41
  br label %5170

5170:                                             ; preds = %5166, %5162
  %5171 = phi double [ %5165, %5162 ], [ %5169, %5166 ]
  br label %5184

5172:                                             ; preds = %5148
  %5173 = load ptr, ptr %9, align 8, !tbaa !5
  %5174 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %5173, i32 0, i32 7
  %5175 = load double, ptr %5174, align 8, !tbaa !41
  %5176 = load double, ptr %340, align 8, !tbaa !17
  %5177 = fcmp olt double 0.000000e+00, %5176
  br i1 %5177, label %5178, label %5180

5178:                                             ; preds = %5172
  %5179 = load double, ptr %340, align 8, !tbaa !17
  br label %5181

5180:                                             ; preds = %5172
  br label %5181

5181:                                             ; preds = %5180, %5178
  %5182 = phi double [ %5179, %5178 ], [ 1.000000e+00, %5180 ]
  %5183 = fdiv double %5175, %5182
  br label %5184

5184:                                             ; preds = %5181, %5170
  %5185 = phi double [ %5171, %5170 ], [ %5183, %5181 ]
  %5186 = load ptr, ptr %9, align 8, !tbaa !5
  %5187 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %5186, i32 0, i32 4
  store double %5185, ptr %5187, align 8, !tbaa !42
  store i32 0, ptr %350, align 4, !tbaa !9
  br label %5188

5188:                                             ; preds = %5317, %5184
  %5189 = load i32, ptr %350, align 4, !tbaa !9
  %5190 = load i32, ptr %25, align 4, !tbaa !9
  %5191 = icmp slt i32 %5189, %5190
  br i1 %5191, label %5192, label %5320

5192:                                             ; preds = %5188
  call void @llvm.lifetime.start.p0(i64 8, ptr %369) #7
  store double 0.000000e+00, ptr %369, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %370) #7
  store double 0.000000e+00, ptr %370, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %371) #7
  store double 0.000000e+00, ptr %371, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %372) #7
  store double 0.000000e+00, ptr %372, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %373) #7
  store double 0.000000e+00, ptr %373, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %374) #7
  store double 0.000000e+00, ptr %374, align 8, !tbaa !17
  store i32 0, ptr %349, align 4, !tbaa !9
  br label %5193

5193:                                             ; preds = %5291, %5192
  %5194 = load i32, ptr %349, align 4, !tbaa !9
  %5195 = load i32, ptr %26, align 4, !tbaa !9
  %5196 = icmp slt i32 %5194, %5195
  br i1 %5196, label %5197, label %5294

5197:                                             ; preds = %5193
  call void @llvm.lifetime.start.p0(i64 4, ptr %375) #7
  %5198 = load i32, ptr %349, align 4, !tbaa !9
  store i32 %5198, ptr %375, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %376) #7
  %5199 = load i32, ptr %350, align 4, !tbaa !9
  store i32 %5199, ptr %376, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %377) #7
  %5200 = load ptr, ptr %335, align 8, !tbaa !5
  %5201 = load i32, ptr %375, align 4, !tbaa !9
  %5202 = load i32, ptr %20, align 4, !tbaa !9
  %5203 = mul nsw i32 %5201, %5202
  %5204 = load i32, ptr %376, align 4, !tbaa !9
  %5205 = add nsw i32 %5203, %5204
  %5206 = sext i32 %5205 to i64
  %5207 = getelementptr inbounds i16, ptr %5200, i64 %5206
  %5208 = load i16, ptr %5207, align 2, !tbaa !67
  %5209 = sitofp i16 %5208 to double
  store double %5209, ptr %377, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %378) #7
  %5210 = load ptr, ptr %336, align 8, !tbaa !5
  %5211 = icmp ne ptr null, %5210
  br i1 %5211, label %5212, label %5223

5212:                                             ; preds = %5197
  %5213 = load ptr, ptr %336, align 8, !tbaa !5
  %5214 = load i32, ptr %375, align 4, !tbaa !9
  %5215 = load i32, ptr %21, align 4, !tbaa !9
  %5216 = mul nsw i32 %5214, %5215
  %5217 = load i32, ptr %376, align 4, !tbaa !9
  %5218 = add nsw i32 %5216, %5217
  %5219 = sext i32 %5218 to i64
  %5220 = getelementptr inbounds i16, ptr %5213, i64 %5219
  %5221 = load i16, ptr %5220, align 2, !tbaa !67
  %5222 = sitofp i16 %5221 to double
  br label %5224

5223:                                             ; preds = %5197
  br label %5224

5224:                                             ; preds = %5223, %5212
  %5225 = phi double [ %5222, %5212 ], [ 0.000000e+00, %5223 ]
  store double %5225, ptr %378, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %379) #7
  %5226 = load ptr, ptr %336, align 8, !tbaa !5
  %5227 = icmp ne ptr null, %5226
  br i1 %5227, label %5228, label %5242

5228:                                             ; preds = %5224
  %5229 = load double, ptr %377, align 8, !tbaa !17
  %5230 = load double, ptr %378, align 8, !tbaa !17
  %5231 = fcmp olt double %5229, %5230
  br i1 %5231, label %5232, label %5236

5232:                                             ; preds = %5228
  %5233 = load double, ptr %378, align 8, !tbaa !17
  %5234 = load double, ptr %377, align 8, !tbaa !17
  %5235 = fsub double %5233, %5234
  br label %5240

5236:                                             ; preds = %5228
  %5237 = load double, ptr %377, align 8, !tbaa !17
  %5238 = load double, ptr %378, align 8, !tbaa !17
  %5239 = fsub double %5237, %5238
  br label %5240

5240:                                             ; preds = %5236, %5232
  %5241 = phi double [ %5235, %5232 ], [ %5239, %5236 ]
  br label %5243

5242:                                             ; preds = %5224
  br label %5243

5243:                                             ; preds = %5242, %5240
  %5244 = phi double [ %5241, %5240 ], [ 0.000000e+00, %5242 ]
  store double %5244, ptr %379, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %380) #7
  %5245 = load double, ptr %377, align 8, !tbaa !17
  %5246 = load ptr, ptr %9, align 8, !tbaa !5
  %5247 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %5246, i32 0, i32 13
  %5248 = load double, ptr %5247, align 8, !tbaa !37
  %5249 = fsub double %5245, %5248
  store double %5249, ptr %380, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %381) #7
  %5250 = load double, ptr %378, align 8, !tbaa !17
  %5251 = load ptr, ptr %9, align 8, !tbaa !5
  %5252 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %5251, i32 0, i32 18
  %5253 = load double, ptr %5252, align 8, !tbaa !39
  %5254 = fsub double %5250, %5253
  store double %5254, ptr %381, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %382) #7
  %5255 = load double, ptr %377, align 8, !tbaa !17
  %5256 = fcmp ole double 0.000000e+00, %5255
  br i1 %5256, label %5257, label %5259

5257:                                             ; preds = %5243
  %5258 = load double, ptr %377, align 8, !tbaa !17
  br label %5262

5259:                                             ; preds = %5243
  %5260 = load double, ptr %377, align 8, !tbaa !17
  %5261 = fneg double %5260
  br label %5262

5262:                                             ; preds = %5259, %5257
  %5263 = phi double [ %5258, %5257 ], [ %5261, %5259 ]
  store double %5263, ptr %382, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %383) #7
  %5264 = load double, ptr %378, align 8, !tbaa !17
  %5265 = fcmp ole double 0.000000e+00, %5264
  br i1 %5265, label %5266, label %5268

5266:                                             ; preds = %5262
  %5267 = load double, ptr %378, align 8, !tbaa !17
  br label %5271

5268:                                             ; preds = %5262
  %5269 = load double, ptr %378, align 8, !tbaa !17
  %5270 = fneg double %5269
  br label %5271

5271:                                             ; preds = %5268, %5266
  %5272 = phi double [ %5267, %5266 ], [ %5270, %5268 ]
  store double %5272, ptr %383, align 8, !tbaa !17
  %5273 = load double, ptr %380, align 8, !tbaa !17
  %5274 = load double, ptr %380, align 8, !tbaa !17
  %5275 = fmul double %5273, %5274
  %5276 = load ptr, ptr %9, align 8, !tbaa !5
  %5277 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %5276, i32 0, i32 14
  %5278 = call double @libxsmm_kahan_sum(double noundef %5275, ptr noundef %5277, ptr noundef %367)
  %5279 = load double, ptr %381, align 8, !tbaa !17
  %5280 = load double, ptr %381, align 8, !tbaa !17
  %5281 = fmul double %5279, %5280
  %5282 = load ptr, ptr %9, align 8, !tbaa !5
  %5283 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %5282, i32 0, i32 19
  %5284 = call double @libxsmm_kahan_sum(double noundef %5281, ptr noundef %5283, ptr noundef %368)
  %5285 = load double, ptr %382, align 8, !tbaa !17
  %5286 = call double @libxsmm_kahan_sum(double noundef %5285, ptr noundef %372, ptr noundef %369)
  %5287 = load double, ptr %383, align 8, !tbaa !17
  %5288 = call double @libxsmm_kahan_sum(double noundef %5287, ptr noundef %373, ptr noundef %370)
  %5289 = load double, ptr %379, align 8, !tbaa !17
  %5290 = call double @libxsmm_kahan_sum(double noundef %5289, ptr noundef %374, ptr noundef %371)
  call void @llvm.lifetime.end.p0(i64 8, ptr %383) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %382) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %381) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %380) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %379) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %378) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %377) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %376) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %375) #7
  br label %5291

5291:                                             ; preds = %5271
  %5292 = load i32, ptr %349, align 4, !tbaa !9
  %5293 = add nsw i32 %5292, 1
  store i32 %5293, ptr %349, align 4, !tbaa !9
  br label %5193, !llvm.loop !71

5294:                                             ; preds = %5193
  %5295 = load ptr, ptr %9, align 8, !tbaa !5
  %5296 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %5295, i32 0, i32 0
  %5297 = load double, ptr %5296, align 8, !tbaa !44
  %5298 = load double, ptr %374, align 8, !tbaa !17
  %5299 = fcmp olt double %5297, %5298
  br i1 %5299, label %5300, label %5304

5300:                                             ; preds = %5294
  %5301 = load double, ptr %374, align 8, !tbaa !17
  %5302 = load ptr, ptr %9, align 8, !tbaa !5
  %5303 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %5302, i32 0, i32 0
  store double %5301, ptr %5303, align 8, !tbaa !44
  br label %5304

5304:                                             ; preds = %5300, %5294
  %5305 = load double, ptr %344, align 8, !tbaa !17
  %5306 = load double, ptr %372, align 8, !tbaa !17
  %5307 = fcmp olt double %5305, %5306
  br i1 %5307, label %5308, label %5310

5308:                                             ; preds = %5304
  %5309 = load double, ptr %372, align 8, !tbaa !17
  store double %5309, ptr %344, align 8, !tbaa !17
  br label %5310

5310:                                             ; preds = %5308, %5304
  %5311 = load double, ptr %345, align 8, !tbaa !17
  %5312 = load double, ptr %373, align 8, !tbaa !17
  %5313 = fcmp olt double %5311, %5312
  br i1 %5313, label %5314, label %5316

5314:                                             ; preds = %5310
  %5315 = load double, ptr %373, align 8, !tbaa !17
  store double %5315, ptr %345, align 8, !tbaa !17
  br label %5316

5316:                                             ; preds = %5314, %5310
  call void @llvm.lifetime.end.p0(i64 8, ptr %374) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %373) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %372) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %371) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %370) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %369) #7
  br label %5317

5317:                                             ; preds = %5316
  %5318 = load i32, ptr %350, align 4, !tbaa !9
  %5319 = add nsw i32 %5318, 1
  store i32 %5319, ptr %350, align 4, !tbaa !9
  br label %5188, !llvm.loop !72

5320:                                             ; preds = %5188
  %5321 = load double, ptr %344, align 8, !tbaa !17
  %5322 = fcmp oge double 0.000000e+00, %5321
  br i1 %5322, label %5323, label %5327

5323:                                             ; preds = %5320
  %5324 = load ptr, ptr %9, align 8, !tbaa !5
  %5325 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %5324, i32 0, i32 0
  %5326 = load double, ptr %5325, align 8, !tbaa !44
  br label %5339

5327:                                             ; preds = %5320
  %5328 = load ptr, ptr %9, align 8, !tbaa !5
  %5329 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %5328, i32 0, i32 0
  %5330 = load double, ptr %5329, align 8, !tbaa !44
  %5331 = load double, ptr %344, align 8, !tbaa !17
  %5332 = fcmp olt double 0.000000e+00, %5331
  br i1 %5332, label %5333, label %5335

5333:                                             ; preds = %5327
  %5334 = load double, ptr %344, align 8, !tbaa !17
  br label %5336

5335:                                             ; preds = %5327
  br label %5336

5336:                                             ; preds = %5335, %5333
  %5337 = phi double [ %5334, %5333 ], [ 1.000000e+00, %5335 ]
  %5338 = fdiv double %5330, %5337
  br label %5339

5339:                                             ; preds = %5336, %5323
  %5340 = phi double [ %5326, %5323 ], [ %5338, %5336 ]
  %5341 = load ptr, ptr %9, align 8, !tbaa !5
  %5342 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %5341, i32 0, i32 1
  store double %5340, ptr %5342, align 8, !tbaa !46
  call void @llvm.lifetime.end.p0(i64 8, ptr %368) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %367) #7
  br label %5343

5343:                                             ; preds = %5339, %5094
  call void @llvm.lifetime.end.p0(i64 4, ptr %350) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %349) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %348) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %347) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %346) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %345) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %344) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %343) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %342) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %341) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %340) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %339) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %338) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %337) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %336) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %335) #7
  br label %5940

5344:                                             ; preds = %4788
  call void @llvm.lifetime.start.p0(i64 8, ptr %384) #7
  %5345 = load ptr, ptr %13, align 8, !tbaa !5
  store ptr %5345, ptr %384, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %385) #7
  %5346 = load ptr, ptr %14, align 8, !tbaa !5
  store ptr %5346, ptr %385, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %386) #7
  store double 0.000000e+00, ptr %386, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %387) #7
  store double 0.000000e+00, ptr %387, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %388) #7
  store double 0.000000e+00, ptr %388, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %389) #7
  store double 0.000000e+00, ptr %389, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %390) #7
  store double 0.000000e+00, ptr %390, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %391) #7
  store double 0.000000e+00, ptr %391, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %392) #7
  store double 0.000000e+00, ptr %392, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %393) #7
  store double 0.000000e+00, ptr %393, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %394) #7
  store double 0.000000e+00, ptr %394, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %395) #7
  store double 0.000000e+00, ptr %395, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %396) #7
  store double 0.000000e+00, ptr %396, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %397) #7
  store double 0.000000e+00, ptr %397, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %398) #7
  %5347 = load i32, ptr %25, align 4, !tbaa !9
  %5348 = sext i32 %5347 to i64
  %5349 = load i32, ptr %26, align 4, !tbaa !9
  %5350 = sext i32 %5349 to i64
  %5351 = mul i64 %5348, %5350
  store i64 %5351, ptr %398, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 8, ptr %399) #7
  %5352 = load i64, ptr %398, align 8, !tbaa !12
  %5353 = call i64 @libxsmm_coprime2(i64 noundef %5352)
  store i64 %5353, ptr %399, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 4, ptr %400) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %401) #7
  store i32 0, ptr %400, align 4, !tbaa !9
  br label %5354

5354:                                             ; preds = %5669, %5344
  %5355 = load i32, ptr %400, align 4, !tbaa !9
  %5356 = load i32, ptr %26, align 4, !tbaa !9
  %5357 = icmp slt i32 %5355, %5356
  br i1 %5357, label %5358, label %5672

5358:                                             ; preds = %5354
  call void @llvm.lifetime.start.p0(i64 8, ptr %402) #7
  store double 0.000000e+00, ptr %402, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %403) #7
  store double 0.000000e+00, ptr %403, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %404) #7
  store double 0.000000e+00, ptr %404, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %405) #7
  store double 0.000000e+00, ptr %405, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %406) #7
  store double 0.000000e+00, ptr %406, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %407) #7
  store double 0.000000e+00, ptr %407, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %408) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %409) #7
  store i32 0, ptr %401, align 4, !tbaa !9
  br label %5359

5359:                                             ; preds = %5627, %5358
  %5360 = load i32, ptr %401, align 4, !tbaa !9
  %5361 = load i32, ptr %25, align 4, !tbaa !9
  %5362 = icmp slt i32 %5360, %5361
  br i1 %5362, label %5363, label %5630

5363:                                             ; preds = %5359
  call void @llvm.lifetime.start.p0(i64 8, ptr %410) #7
  %5364 = load i64, ptr %399, align 8, !tbaa !12
  %5365 = load i32, ptr %400, align 4, !tbaa !9
  %5366 = load i32, ptr %25, align 4, !tbaa !9
  %5367 = mul nsw i32 %5365, %5366
  %5368 = load i32, ptr %401, align 4, !tbaa !9
  %5369 = add nsw i32 %5367, %5368
  %5370 = sext i32 %5369 to i64
  %5371 = mul i64 %5364, %5370
  %5372 = load i64, ptr %398, align 8, !tbaa !12
  %5373 = urem i64 %5371, %5372
  store i64 %5373, ptr %410, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 4, ptr %411) #7
  %5374 = load i64, ptr %410, align 8, !tbaa !12
  %5375 = load i32, ptr %25, align 4, !tbaa !9
  %5376 = sext i32 %5375 to i64
  %5377 = udiv i64 %5374, %5376
  %5378 = trunc i64 %5377 to i32
  store i32 %5378, ptr %411, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %412) #7
  %5379 = load i64, ptr %410, align 8, !tbaa !12
  %5380 = load i32, ptr %25, align 4, !tbaa !9
  %5381 = sext i32 %5380 to i64
  %5382 = urem i64 %5379, %5381
  %5383 = trunc i64 %5382 to i32
  store i32 %5383, ptr %412, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %413) #7
  %5384 = load ptr, ptr %385, align 8, !tbaa !5
  %5385 = icmp ne ptr null, %5384
  br i1 %5385, label %5386, label %5397

5386:                                             ; preds = %5363
  %5387 = load ptr, ptr %385, align 8, !tbaa !5
  %5388 = load i32, ptr %411, align 4, !tbaa !9
  %5389 = load i32, ptr %21, align 4, !tbaa !9
  %5390 = mul nsw i32 %5388, %5389
  %5391 = load i32, ptr %412, align 4, !tbaa !9
  %5392 = add nsw i32 %5390, %5391
  %5393 = sext i32 %5392 to i64
  %5394 = getelementptr inbounds i16, ptr %5387, i64 %5393
  %5395 = load i16, ptr %5394, align 2, !tbaa !67
  %5396 = sitofp i16 %5395 to double
  br label %5398

5397:                                             ; preds = %5363
  br label %5398

5398:                                             ; preds = %5397, %5386
  %5399 = phi double [ %5396, %5386 ], [ 0.000000e+00, %5397 ]
  store double %5399, ptr %413, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %414) #7
  %5400 = load ptr, ptr %384, align 8, !tbaa !5
  %5401 = load i32, ptr %411, align 4, !tbaa !9
  %5402 = load i32, ptr %20, align 4, !tbaa !9
  %5403 = mul nsw i32 %5401, %5402
  %5404 = load i32, ptr %412, align 4, !tbaa !9
  %5405 = add nsw i32 %5403, %5404
  %5406 = sext i32 %5405 to i64
  %5407 = getelementptr inbounds i16, ptr %5400, i64 %5406
  %5408 = load i16, ptr %5407, align 2, !tbaa !67
  %5409 = sitofp i16 %5408 to double
  store double %5409, ptr %414, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %415) #7
  %5410 = load double, ptr %413, align 8, !tbaa !17
  %5411 = fcmp ole double 0.000000e+00, %5410
  br i1 %5411, label %5412, label %5414

5412:                                             ; preds = %5398
  %5413 = load double, ptr %413, align 8, !tbaa !17
  br label %5417

5414:                                             ; preds = %5398
  %5415 = load double, ptr %413, align 8, !tbaa !17
  %5416 = fneg double %5415
  br label %5417

5417:                                             ; preds = %5414, %5412
  %5418 = phi double [ %5413, %5412 ], [ %5416, %5414 ]
  store double %5418, ptr %415, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %416) #7
  %5419 = load double, ptr %414, align 8, !tbaa !17
  %5420 = fcmp ole double 0.000000e+00, %5419
  br i1 %5420, label %5421, label %5423

5421:                                             ; preds = %5417
  %5422 = load double, ptr %414, align 8, !tbaa !17
  br label %5426

5423:                                             ; preds = %5417
  %5424 = load double, ptr %414, align 8, !tbaa !17
  %5425 = fneg double %5424
  br label %5426

5426:                                             ; preds = %5423, %5421
  %5427 = phi double [ %5422, %5421 ], [ %5425, %5423 ]
  store double %5427, ptr %416, align 8, !tbaa !17
  %5428 = load double, ptr %414, align 8, !tbaa !17
  %5429 = load ptr, ptr %9, align 8, !tbaa !5
  %5430 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %5429, i32 0, i32 11
  %5431 = load double, ptr %5430, align 8, !tbaa !14
  %5432 = fcmp olt double %5428, %5431
  br i1 %5432, label %5433, label %5437

5433:                                             ; preds = %5426
  %5434 = load double, ptr %414, align 8, !tbaa !17
  %5435 = load ptr, ptr %9, align 8, !tbaa !5
  %5436 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %5435, i32 0, i32 11
  store double %5434, ptr %5436, align 8, !tbaa !14
  br label %5437

5437:                                             ; preds = %5433, %5426
  %5438 = load double, ptr %414, align 8, !tbaa !17
  %5439 = load ptr, ptr %9, align 8, !tbaa !5
  %5440 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %5439, i32 0, i32 12
  %5441 = load double, ptr %5440, align 8, !tbaa !20
  %5442 = fcmp ogt double %5438, %5441
  br i1 %5442, label %5443, label %5447

5443:                                             ; preds = %5437
  %5444 = load double, ptr %414, align 8, !tbaa !17
  %5445 = load ptr, ptr %9, align 8, !tbaa !5
  %5446 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %5445, i32 0, i32 12
  store double %5444, ptr %5446, align 8, !tbaa !20
  br label %5447

5447:                                             ; preds = %5443, %5437
  %5448 = load double, ptr %413, align 8, !tbaa !17
  %5449 = load double, ptr %413, align 8, !tbaa !17
  %5450 = fcmp oeq double %5448, %5449
  br i1 %5450, label %5451, label %5599

5451:                                             ; preds = %5447
  %5452 = load double, ptr %27, align 8, !tbaa !17
  %5453 = load double, ptr %415, align 8, !tbaa !17
  %5454 = fcmp ogt double %5452, %5453
  br i1 %5454, label %5459, label %5455

5455:                                             ; preds = %5451
  %5456 = load double, ptr %413, align 8, !tbaa !17
  %5457 = load double, ptr %414, align 8, !tbaa !17
  %5458 = fcmp oeq double %5456, %5457
  br i1 %5458, label %5459, label %5599

5459:                                             ; preds = %5455, %5451
  call void @llvm.lifetime.start.p0(i64 8, ptr %417) #7
  %5460 = load ptr, ptr %385, align 8, !tbaa !5
  %5461 = icmp ne ptr null, %5460
  br i1 %5461, label %5462, label %5476

5462:                                             ; preds = %5459
  %5463 = load double, ptr %414, align 8, !tbaa !17
  %5464 = load double, ptr %413, align 8, !tbaa !17
  %5465 = fcmp olt double %5463, %5464
  br i1 %5465, label %5466, label %5470

5466:                                             ; preds = %5462
  %5467 = load double, ptr %413, align 8, !tbaa !17
  %5468 = load double, ptr %414, align 8, !tbaa !17
  %5469 = fsub double %5467, %5468
  br label %5474

5470:                                             ; preds = %5462
  %5471 = load double, ptr %414, align 8, !tbaa !17
  %5472 = load double, ptr %413, align 8, !tbaa !17
  %5473 = fsub double %5471, %5472
  br label %5474

5474:                                             ; preds = %5470, %5466
  %5475 = phi double [ %5469, %5466 ], [ %5473, %5470 ]
  br label %5477

5476:                                             ; preds = %5459
  br label %5477

5477:                                             ; preds = %5476, %5474
  %5478 = phi double [ %5475, %5474 ], [ 0.000000e+00, %5476 ]
  store double %5478, ptr %417, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %418) #7
  %5479 = load double, ptr %416, align 8, !tbaa !17
  %5480 = fcmp oge double 0.000000e+00, %5479
  br i1 %5480, label %5481, label %5483

5481:                                             ; preds = %5477
  %5482 = load double, ptr %415, align 8, !tbaa !17
  br label %5493

5483:                                             ; preds = %5477
  %5484 = load double, ptr %417, align 8, !tbaa !17
  %5485 = load double, ptr %416, align 8, !tbaa !17
  %5486 = fcmp olt double 0.000000e+00, %5485
  br i1 %5486, label %5487, label %5489

5487:                                             ; preds = %5483
  %5488 = load double, ptr %416, align 8, !tbaa !17
  br label %5490

5489:                                             ; preds = %5483
  br label %5490

5490:                                             ; preds = %5489, %5487
  %5491 = phi double [ %5488, %5487 ], [ 1.000000e+00, %5489 ]
  %5492 = fdiv double %5484, %5491
  br label %5493

5493:                                             ; preds = %5490, %5481
  %5494 = phi double [ %5482, %5481 ], [ %5492, %5490 ]
  store double %5494, ptr %418, align 8, !tbaa !17
  %5495 = load double, ptr %413, align 8, !tbaa !17
  %5496 = load ptr, ptr %9, align 8, !tbaa !5
  %5497 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %5496, i32 0, i32 16
  %5498 = load double, ptr %5497, align 8, !tbaa !21
  %5499 = fcmp olt double %5495, %5498
  br i1 %5499, label %5500, label %5504

5500:                                             ; preds = %5493
  %5501 = load double, ptr %413, align 8, !tbaa !17
  %5502 = load ptr, ptr %9, align 8, !tbaa !5
  %5503 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %5502, i32 0, i32 16
  store double %5501, ptr %5503, align 8, !tbaa !21
  br label %5504

5504:                                             ; preds = %5500, %5493
  %5505 = load double, ptr %413, align 8, !tbaa !17
  %5506 = load ptr, ptr %9, align 8, !tbaa !5
  %5507 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %5506, i32 0, i32 17
  %5508 = load double, ptr %5507, align 8, !tbaa !22
  %5509 = fcmp ogt double %5505, %5508
  br i1 %5509, label %5510, label %5514

5510:                                             ; preds = %5504
  %5511 = load double, ptr %413, align 8, !tbaa !17
  %5512 = load ptr, ptr %9, align 8, !tbaa !5
  %5513 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %5512, i32 0, i32 17
  store double %5511, ptr %5513, align 8, !tbaa !22
  br label %5514

5514:                                             ; preds = %5510, %5504
  %5515 = load ptr, ptr %9, align 8, !tbaa !5
  %5516 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %5515, i32 0, i32 5
  %5517 = load double, ptr %5516, align 8, !tbaa !23
  %5518 = load double, ptr %417, align 8, !tbaa !17
  %5519 = fcmp olt double %5517, %5518
  br i1 %5519, label %5520, label %5536

5520:                                             ; preds = %5514
  %5521 = load double, ptr %417, align 8, !tbaa !17
  %5522 = load ptr, ptr %9, align 8, !tbaa !5
  %5523 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %5522, i32 0, i32 5
  store double %5521, ptr %5523, align 8, !tbaa !23
  %5524 = load double, ptr %414, align 8, !tbaa !17
  %5525 = load ptr, ptr %9, align 8, !tbaa !5
  %5526 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %5525, i32 0, i32 20
  store double %5524, ptr %5526, align 8, !tbaa !24
  %5527 = load double, ptr %413, align 8, !tbaa !17
  %5528 = load ptr, ptr %9, align 8, !tbaa !5
  %5529 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %5528, i32 0, i32 21
  store double %5527, ptr %5529, align 8, !tbaa !25
  %5530 = load i32, ptr %412, align 4, !tbaa !9
  %5531 = load ptr, ptr %9, align 8, !tbaa !5
  %5532 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %5531, i32 0, i32 22
  store i32 %5530, ptr %5532, align 8, !tbaa !26
  %5533 = load i32, ptr %411, align 4, !tbaa !9
  %5534 = load ptr, ptr %9, align 8, !tbaa !5
  %5535 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %5534, i32 0, i32 23
  store i32 %5533, ptr %5535, align 4, !tbaa !27
  br label %5536

5536:                                             ; preds = %5520, %5514
  %5537 = load ptr, ptr %9, align 8, !tbaa !5
  %5538 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %5537, i32 0, i32 6
  %5539 = load double, ptr %5538, align 8, !tbaa !28
  %5540 = load double, ptr %418, align 8, !tbaa !17
  %5541 = fcmp olt double %5539, %5540
  br i1 %5541, label %5542, label %5546

5542:                                             ; preds = %5536
  %5543 = load double, ptr %418, align 8, !tbaa !17
  %5544 = load ptr, ptr %9, align 8, !tbaa !5
  %5545 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %5544, i32 0, i32 6
  store double %5543, ptr %5545, align 8, !tbaa !28
  br label %5546

5546:                                             ; preds = %5542, %5536
  %5547 = load double, ptr %418, align 8, !tbaa !17
  %5548 = load double, ptr %418, align 8, !tbaa !17
  %5549 = fmul double %5547, %5548
  store double %5549, ptr %408, align 8, !tbaa !17
  %5550 = load double, ptr %27, align 8, !tbaa !17
  %5551 = load double, ptr %408, align 8, !tbaa !17
  %5552 = fcmp ogt double %5550, %5551
  br i1 %5552, label %5553, label %5572

5553:                                             ; preds = %5546
  %5554 = load double, ptr %397, align 8, !tbaa !17
  %5555 = load double, ptr %408, align 8, !tbaa !17
  %5556 = fsub double %5555, %5554
  store double %5556, ptr %408, align 8, !tbaa !17
  %5557 = load ptr, ptr %9, align 8, !tbaa !5
  %5558 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %5557, i32 0, i32 8
  %5559 = load double, ptr %5558, align 8, !tbaa !29
  %5560 = load double, ptr %408, align 8, !tbaa !17
  %5561 = fadd double %5559, %5560
  store double %5561, ptr %409, align 8, !tbaa !17
  %5562 = load double, ptr %409, align 8, !tbaa !17
  %5563 = load ptr, ptr %9, align 8, !tbaa !5
  %5564 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %5563, i32 0, i32 8
  %5565 = load double, ptr %5564, align 8, !tbaa !29
  %5566 = fsub double %5562, %5565
  %5567 = load double, ptr %408, align 8, !tbaa !17
  %5568 = fsub double %5566, %5567
  store double %5568, ptr %397, align 8, !tbaa !17
  %5569 = load double, ptr %409, align 8, !tbaa !17
  %5570 = load ptr, ptr %9, align 8, !tbaa !5
  %5571 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %5570, i32 0, i32 8
  store double %5569, ptr %5571, align 8, !tbaa !29
  br label %5572

5572:                                             ; preds = %5553, %5546
  %5573 = load double, ptr %416, align 8, !tbaa !17
  %5574 = call double @libxsmm_kahan_sum(double noundef %5573, ptr noundef %405, ptr noundef %402)
  %5575 = load double, ptr %415, align 8, !tbaa !17
  %5576 = call double @libxsmm_kahan_sum(double noundef %5575, ptr noundef %406, ptr noundef %403)
  %5577 = load double, ptr %417, align 8, !tbaa !17
  %5578 = call double @libxsmm_kahan_sum(double noundef %5577, ptr noundef %407, ptr noundef %404)
  %5579 = load double, ptr %414, align 8, !tbaa !17
  %5580 = load double, ptr %414, align 8, !tbaa !17
  %5581 = fmul double %5579, %5580
  %5582 = call double @libxsmm_kahan_sum(double noundef %5581, ptr noundef %389, ptr noundef %387)
  %5583 = load double, ptr %413, align 8, !tbaa !17
  %5584 = load double, ptr %413, align 8, !tbaa !17
  %5585 = fmul double %5583, %5584
  %5586 = call double @libxsmm_kahan_sum(double noundef %5585, ptr noundef %390, ptr noundef %388)
  %5587 = load double, ptr %417, align 8, !tbaa !17
  %5588 = load double, ptr %417, align 8, !tbaa !17
  %5589 = fmul double %5587, %5588
  store double %5589, ptr %408, align 8, !tbaa !17
  %5590 = load double, ptr %27, align 8, !tbaa !17
  %5591 = load double, ptr %408, align 8, !tbaa !17
  %5592 = fcmp ogt double %5590, %5591
  br i1 %5592, label %5593, label %5598

5593:                                             ; preds = %5572
  %5594 = load double, ptr %408, align 8, !tbaa !17
  %5595 = load ptr, ptr %9, align 8, !tbaa !5
  %5596 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %5595, i32 0, i32 7
  %5597 = call double @libxsmm_kahan_sum(double noundef %5594, ptr noundef %5596, ptr noundef %386)
  br label %5598

5598:                                             ; preds = %5593, %5572
  call void @llvm.lifetime.end.p0(i64 8, ptr %418) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %417) #7
  br label %5623

5599:                                             ; preds = %5455, %5447
  %5600 = load double, ptr %414, align 8, !tbaa !17
  %5601 = load double, ptr %414, align 8, !tbaa !17
  %5602 = fcmp oeq double %5600, %5601
  br i1 %5602, label %5603, label %5607

5603:                                             ; preds = %5599
  %5604 = load double, ptr %27, align 8, !tbaa !17
  %5605 = load double, ptr %416, align 8, !tbaa !17
  %5606 = fcmp ogt double %5604, %5605
  br label %5607

5607:                                             ; preds = %5603, %5599
  %5608 = phi i1 [ false, %5599 ], [ %5606, %5603 ]
  %5609 = zext i1 %5608 to i64
  %5610 = select i1 %5608, i32 1, i32 2
  store i32 %5610, ptr %19, align 4, !tbaa !9
  %5611 = load i32, ptr %412, align 4, !tbaa !9
  %5612 = load ptr, ptr %9, align 8, !tbaa !5
  %5613 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %5612, i32 0, i32 22
  store i32 %5611, ptr %5613, align 8, !tbaa !26
  %5614 = load i32, ptr %411, align 4, !tbaa !9
  %5615 = load ptr, ptr %9, align 8, !tbaa !5
  %5616 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %5615, i32 0, i32 23
  store i32 %5614, ptr %5616, align 4, !tbaa !27
  %5617 = load double, ptr %414, align 8, !tbaa !17
  %5618 = load ptr, ptr %9, align 8, !tbaa !5
  %5619 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %5618, i32 0, i32 20
  store double %5617, ptr %5619, align 8, !tbaa !24
  %5620 = load double, ptr %413, align 8, !tbaa !17
  %5621 = load ptr, ptr %9, align 8, !tbaa !5
  %5622 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %5621, i32 0, i32 21
  store double %5620, ptr %5622, align 8, !tbaa !25
  store i32 90, ptr %60, align 4
  br label %5624

5623:                                             ; preds = %5598
  store i32 0, ptr %60, align 4
  br label %5624

5624:                                             ; preds = %5623, %5607
  call void @llvm.lifetime.end.p0(i64 8, ptr %416) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %415) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %414) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %413) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %412) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %411) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %410) #7
  %5625 = load i32, ptr %60, align 4
  switch i32 %5625, label %15542 [
    i32 0, label %5626
    i32 90, label %5630
  ]

5626:                                             ; preds = %5624
  br label %5627

5627:                                             ; preds = %5626
  %5628 = load i32, ptr %401, align 4, !tbaa !9
  %5629 = add nsw i32 %5628, 1
  store i32 %5629, ptr %401, align 4, !tbaa !9
  br label %5359, !llvm.loop !73

5630:                                             ; preds = %5624, %5359
  %5631 = load i32, ptr %19, align 4, !tbaa !9
  %5632 = icmp eq i32 0, %5631
  br i1 %5632, label %5633, label %5664

5633:                                             ; preds = %5630
  %5634 = load double, ptr %405, align 8, !tbaa !17
  %5635 = load ptr, ptr %9, align 8, !tbaa !5
  %5636 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %5635, i32 0, i32 10
  %5637 = call double @libxsmm_kahan_sum(double noundef %5634, ptr noundef %5636, ptr noundef %395)
  %5638 = load double, ptr %406, align 8, !tbaa !17
  %5639 = load ptr, ptr %9, align 8, !tbaa !5
  %5640 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %5639, i32 0, i32 15
  %5641 = call double @libxsmm_kahan_sum(double noundef %5638, ptr noundef %5640, ptr noundef %396)
  %5642 = load ptr, ptr %9, align 8, !tbaa !5
  %5643 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %5642, i32 0, i32 2
  %5644 = load double, ptr %5643, align 8, !tbaa !32
  %5645 = load double, ptr %407, align 8, !tbaa !17
  %5646 = fcmp olt double %5644, %5645
  br i1 %5646, label %5647, label %5651

5647:                                             ; preds = %5633
  %5648 = load double, ptr %407, align 8, !tbaa !17
  %5649 = load ptr, ptr %9, align 8, !tbaa !5
  %5650 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %5649, i32 0, i32 2
  store double %5648, ptr %5650, align 8, !tbaa !32
  br label %5651

5651:                                             ; preds = %5647, %5633
  %5652 = load double, ptr %391, align 8, !tbaa !17
  %5653 = load double, ptr %405, align 8, !tbaa !17
  %5654 = fcmp olt double %5652, %5653
  br i1 %5654, label %5655, label %5657

5655:                                             ; preds = %5651
  %5656 = load double, ptr %405, align 8, !tbaa !17
  store double %5656, ptr %391, align 8, !tbaa !17
  br label %5657

5657:                                             ; preds = %5655, %5651
  %5658 = load double, ptr %392, align 8, !tbaa !17
  %5659 = load double, ptr %406, align 8, !tbaa !17
  %5660 = fcmp olt double %5658, %5659
  br i1 %5660, label %5661, label %5663

5661:                                             ; preds = %5657
  %5662 = load double, ptr %406, align 8, !tbaa !17
  store double %5662, ptr %392, align 8, !tbaa !17
  br label %5663

5663:                                             ; preds = %5661, %5657
  br label %5665

5664:                                             ; preds = %5630
  store i32 87, ptr %60, align 4
  br label %5666

5665:                                             ; preds = %5663
  store i32 0, ptr %60, align 4
  br label %5666

5666:                                             ; preds = %5665, %5664
  call void @llvm.lifetime.end.p0(i64 8, ptr %409) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %408) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %407) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %406) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %405) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %404) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %403) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %402) #7
  %5667 = load i32, ptr %60, align 4
  switch i32 %5667, label %15542 [
    i32 0, label %5668
    i32 87, label %5672
  ]

5668:                                             ; preds = %5666
  br label %5669

5669:                                             ; preds = %5668
  %5670 = load i32, ptr %400, align 4, !tbaa !9
  %5671 = add nsw i32 %5670, 1
  store i32 %5671, ptr %400, align 4, !tbaa !9
  br label %5354, !llvm.loop !74

5672:                                             ; preds = %5666, %5354
  %5673 = load i32, ptr %19, align 4, !tbaa !9
  %5674 = icmp eq i32 0, %5673
  br i1 %5674, label %5675, label %5939

5675:                                             ; preds = %5672
  call void @llvm.lifetime.start.p0(i64 8, ptr %419) #7
  store double 0.000000e+00, ptr %419, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %420) #7
  store double 0.000000e+00, ptr %420, align 8, !tbaa !17
  %5676 = load ptr, ptr %9, align 8, !tbaa !5
  %5677 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %5676, i32 0, i32 14
  %5678 = load double, ptr %5677, align 8, !tbaa !34
  %5679 = fcmp oeq double 0.000000e+00, %5678
  br i1 %5679, label %5680, label %5681

5680:                                             ; preds = %5675
  br label %5682

5681:                                             ; preds = %5675
  call void @__assert_fail(ptr noundef @.str.1, ptr noundef @.str.2, i32 noundef 130, ptr noundef @__PRETTY_FUNCTION__.libxsmm_matdiff) #9
  unreachable

5682:                                             ; preds = %5680
  %5683 = load ptr, ptr %9, align 8, !tbaa !5
  %5684 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %5683, i32 0, i32 19
  %5685 = load double, ptr %5684, align 8, !tbaa !35
  %5686 = fcmp oeq double 0.000000e+00, %5685
  br i1 %5686, label %5687, label %5688

5687:                                             ; preds = %5682
  br label %5689

5688:                                             ; preds = %5682
  call void @__assert_fail(ptr noundef @.str.3, ptr noundef @.str.2, i32 noundef 131, ptr noundef @__PRETTY_FUNCTION__.libxsmm_matdiff) #9
  unreachable

5689:                                             ; preds = %5687
  %5690 = load i64, ptr %24, align 8, !tbaa !12
  %5691 = icmp ne i64 0, %5690
  br i1 %5691, label %5692, label %5709

5692:                                             ; preds = %5689
  %5693 = load ptr, ptr %9, align 8, !tbaa !5
  %5694 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %5693, i32 0, i32 10
  %5695 = load double, ptr %5694, align 8, !tbaa !36
  %5696 = load i64, ptr %24, align 8, !tbaa !12
  %5697 = uitofp i64 %5696 to double
  %5698 = fdiv double %5695, %5697
  %5699 = load ptr, ptr %9, align 8, !tbaa !5
  %5700 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %5699, i32 0, i32 13
  store double %5698, ptr %5700, align 8, !tbaa !37
  %5701 = load ptr, ptr %9, align 8, !tbaa !5
  %5702 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %5701, i32 0, i32 15
  %5703 = load double, ptr %5702, align 8, !tbaa !38
  %5704 = load i64, ptr %24, align 8, !tbaa !12
  %5705 = uitofp i64 %5704 to double
  %5706 = fdiv double %5703, %5705
  %5707 = load ptr, ptr %9, align 8, !tbaa !5
  %5708 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %5707, i32 0, i32 18
  store double %5706, ptr %5708, align 8, !tbaa !39
  br label %5709

5709:                                             ; preds = %5692, %5689
  %5710 = load double, ptr %391, align 8, !tbaa !17
  %5711 = fcmp oge double 0.000000e+00, %5710
  br i1 %5711, label %5712, label %5714

5712:                                             ; preds = %5709
  %5713 = load double, ptr %392, align 8, !tbaa !17
  br label %5726

5714:                                             ; preds = %5709
  %5715 = load ptr, ptr %9, align 8, !tbaa !5
  %5716 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %5715, i32 0, i32 2
  %5717 = load double, ptr %5716, align 8, !tbaa !32
  %5718 = load double, ptr %391, align 8, !tbaa !17
  %5719 = fcmp olt double 0.000000e+00, %5718
  br i1 %5719, label %5720, label %5722

5720:                                             ; preds = %5714
  %5721 = load double, ptr %391, align 8, !tbaa !17
  br label %5723

5722:                                             ; preds = %5714
  br label %5723

5723:                                             ; preds = %5722, %5720
  %5724 = phi double [ %5721, %5720 ], [ 1.000000e+00, %5722 ]
  %5725 = fdiv double %5717, %5724
  br label %5726

5726:                                             ; preds = %5723, %5712
  %5727 = phi double [ %5713, %5712 ], [ %5725, %5723 ]
  %5728 = load ptr, ptr %9, align 8, !tbaa !5
  %5729 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %5728, i32 0, i32 3
  store double %5727, ptr %5729, align 8, !tbaa !40
  %5730 = load double, ptr %389, align 8, !tbaa !17
  %5731 = fcmp oge double 0.000000e+00, %5730
  br i1 %5731, label %5732, label %5750

5732:                                             ; preds = %5726
  %5733 = load double, ptr %390, align 8, !tbaa !17
  %5734 = load double, ptr %390, align 8, !tbaa !17
  %5735 = fmul double %5733, %5734
  %5736 = load ptr, ptr %9, align 8, !tbaa !5
  %5737 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %5736, i32 0, i32 7
  %5738 = load double, ptr %5737, align 8, !tbaa !41
  %5739 = fcmp olt double %5735, %5738
  br i1 %5739, label %5740, label %5744

5740:                                             ; preds = %5732
  %5741 = load double, ptr %390, align 8, !tbaa !17
  %5742 = load double, ptr %390, align 8, !tbaa !17
  %5743 = fmul double %5741, %5742
  br label %5748

5744:                                             ; preds = %5732
  %5745 = load ptr, ptr %9, align 8, !tbaa !5
  %5746 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %5745, i32 0, i32 7
  %5747 = load double, ptr %5746, align 8, !tbaa !41
  br label %5748

5748:                                             ; preds = %5744, %5740
  %5749 = phi double [ %5743, %5740 ], [ %5747, %5744 ]
  br label %5762

5750:                                             ; preds = %5726
  %5751 = load ptr, ptr %9, align 8, !tbaa !5
  %5752 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %5751, i32 0, i32 7
  %5753 = load double, ptr %5752, align 8, !tbaa !41
  %5754 = load double, ptr %389, align 8, !tbaa !17
  %5755 = fcmp olt double 0.000000e+00, %5754
  br i1 %5755, label %5756, label %5758

5756:                                             ; preds = %5750
  %5757 = load double, ptr %389, align 8, !tbaa !17
  br label %5759

5758:                                             ; preds = %5750
  br label %5759

5759:                                             ; preds = %5758, %5756
  %5760 = phi double [ %5757, %5756 ], [ 1.000000e+00, %5758 ]
  %5761 = fdiv double %5753, %5760
  br label %5762

5762:                                             ; preds = %5759, %5748
  %5763 = phi double [ %5749, %5748 ], [ %5761, %5759 ]
  %5764 = load ptr, ptr %9, align 8, !tbaa !5
  %5765 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %5764, i32 0, i32 4
  store double %5763, ptr %5765, align 8, !tbaa !42
  store i32 0, ptr %401, align 4, !tbaa !9
  br label %5766

5766:                                             ; preds = %5913, %5762
  %5767 = load i32, ptr %401, align 4, !tbaa !9
  %5768 = load i32, ptr %25, align 4, !tbaa !9
  %5769 = icmp slt i32 %5767, %5768
  br i1 %5769, label %5770, label %5916

5770:                                             ; preds = %5766
  call void @llvm.lifetime.start.p0(i64 8, ptr %421) #7
  store double 0.000000e+00, ptr %421, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %422) #7
  store double 0.000000e+00, ptr %422, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %423) #7
  store double 0.000000e+00, ptr %423, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %424) #7
  store double 0.000000e+00, ptr %424, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %425) #7
  store double 0.000000e+00, ptr %425, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %426) #7
  store double 0.000000e+00, ptr %426, align 8, !tbaa !17
  store i32 0, ptr %400, align 4, !tbaa !9
  br label %5771

5771:                                             ; preds = %5887, %5770
  %5772 = load i32, ptr %400, align 4, !tbaa !9
  %5773 = load i32, ptr %26, align 4, !tbaa !9
  %5774 = icmp slt i32 %5772, %5773
  br i1 %5774, label %5775, label %5890

5775:                                             ; preds = %5771
  call void @llvm.lifetime.start.p0(i64 8, ptr %427) #7
  %5776 = load i64, ptr %399, align 8, !tbaa !12
  %5777 = load i32, ptr %400, align 4, !tbaa !9
  %5778 = load i32, ptr %25, align 4, !tbaa !9
  %5779 = mul nsw i32 %5777, %5778
  %5780 = load i32, ptr %401, align 4, !tbaa !9
  %5781 = add nsw i32 %5779, %5780
  %5782 = sext i32 %5781 to i64
  %5783 = mul i64 %5776, %5782
  %5784 = load i64, ptr %398, align 8, !tbaa !12
  %5785 = urem i64 %5783, %5784
  store i64 %5785, ptr %427, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 4, ptr %428) #7
  %5786 = load i64, ptr %427, align 8, !tbaa !12
  %5787 = load i32, ptr %25, align 4, !tbaa !9
  %5788 = sext i32 %5787 to i64
  %5789 = udiv i64 %5786, %5788
  %5790 = trunc i64 %5789 to i32
  store i32 %5790, ptr %428, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %429) #7
  %5791 = load i64, ptr %427, align 8, !tbaa !12
  %5792 = load i32, ptr %25, align 4, !tbaa !9
  %5793 = sext i32 %5792 to i64
  %5794 = urem i64 %5791, %5793
  %5795 = trunc i64 %5794 to i32
  store i32 %5795, ptr %429, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %430) #7
  %5796 = load ptr, ptr %384, align 8, !tbaa !5
  %5797 = load i32, ptr %428, align 4, !tbaa !9
  %5798 = load i32, ptr %20, align 4, !tbaa !9
  %5799 = mul nsw i32 %5797, %5798
  %5800 = load i32, ptr %429, align 4, !tbaa !9
  %5801 = add nsw i32 %5799, %5800
  %5802 = sext i32 %5801 to i64
  %5803 = getelementptr inbounds i16, ptr %5796, i64 %5802
  %5804 = load i16, ptr %5803, align 2, !tbaa !67
  %5805 = sitofp i16 %5804 to double
  store double %5805, ptr %430, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %431) #7
  %5806 = load ptr, ptr %385, align 8, !tbaa !5
  %5807 = icmp ne ptr null, %5806
  br i1 %5807, label %5808, label %5819

5808:                                             ; preds = %5775
  %5809 = load ptr, ptr %385, align 8, !tbaa !5
  %5810 = load i32, ptr %428, align 4, !tbaa !9
  %5811 = load i32, ptr %21, align 4, !tbaa !9
  %5812 = mul nsw i32 %5810, %5811
  %5813 = load i32, ptr %429, align 4, !tbaa !9
  %5814 = add nsw i32 %5812, %5813
  %5815 = sext i32 %5814 to i64
  %5816 = getelementptr inbounds i16, ptr %5809, i64 %5815
  %5817 = load i16, ptr %5816, align 2, !tbaa !67
  %5818 = sitofp i16 %5817 to double
  br label %5820

5819:                                             ; preds = %5775
  br label %5820

5820:                                             ; preds = %5819, %5808
  %5821 = phi double [ %5818, %5808 ], [ 0.000000e+00, %5819 ]
  store double %5821, ptr %431, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %432) #7
  %5822 = load ptr, ptr %385, align 8, !tbaa !5
  %5823 = icmp ne ptr null, %5822
  br i1 %5823, label %5824, label %5838

5824:                                             ; preds = %5820
  %5825 = load double, ptr %430, align 8, !tbaa !17
  %5826 = load double, ptr %431, align 8, !tbaa !17
  %5827 = fcmp olt double %5825, %5826
  br i1 %5827, label %5828, label %5832

5828:                                             ; preds = %5824
  %5829 = load double, ptr %431, align 8, !tbaa !17
  %5830 = load double, ptr %430, align 8, !tbaa !17
  %5831 = fsub double %5829, %5830
  br label %5836

5832:                                             ; preds = %5824
  %5833 = load double, ptr %430, align 8, !tbaa !17
  %5834 = load double, ptr %431, align 8, !tbaa !17
  %5835 = fsub double %5833, %5834
  br label %5836

5836:                                             ; preds = %5832, %5828
  %5837 = phi double [ %5831, %5828 ], [ %5835, %5832 ]
  br label %5839

5838:                                             ; preds = %5820
  br label %5839

5839:                                             ; preds = %5838, %5836
  %5840 = phi double [ %5837, %5836 ], [ 0.000000e+00, %5838 ]
  store double %5840, ptr %432, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %433) #7
  %5841 = load double, ptr %430, align 8, !tbaa !17
  %5842 = load ptr, ptr %9, align 8, !tbaa !5
  %5843 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %5842, i32 0, i32 13
  %5844 = load double, ptr %5843, align 8, !tbaa !37
  %5845 = fsub double %5841, %5844
  store double %5845, ptr %433, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %434) #7
  %5846 = load double, ptr %431, align 8, !tbaa !17
  %5847 = load ptr, ptr %9, align 8, !tbaa !5
  %5848 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %5847, i32 0, i32 18
  %5849 = load double, ptr %5848, align 8, !tbaa !39
  %5850 = fsub double %5846, %5849
  store double %5850, ptr %434, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %435) #7
  %5851 = load double, ptr %430, align 8, !tbaa !17
  %5852 = fcmp ole double 0.000000e+00, %5851
  br i1 %5852, label %5853, label %5855

5853:                                             ; preds = %5839
  %5854 = load double, ptr %430, align 8, !tbaa !17
  br label %5858

5855:                                             ; preds = %5839
  %5856 = load double, ptr %430, align 8, !tbaa !17
  %5857 = fneg double %5856
  br label %5858

5858:                                             ; preds = %5855, %5853
  %5859 = phi double [ %5854, %5853 ], [ %5857, %5855 ]
  store double %5859, ptr %435, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %436) #7
  %5860 = load double, ptr %431, align 8, !tbaa !17
  %5861 = fcmp ole double 0.000000e+00, %5860
  br i1 %5861, label %5862, label %5864

5862:                                             ; preds = %5858
  %5863 = load double, ptr %431, align 8, !tbaa !17
  br label %5867

5864:                                             ; preds = %5858
  %5865 = load double, ptr %431, align 8, !tbaa !17
  %5866 = fneg double %5865
  br label %5867

5867:                                             ; preds = %5864, %5862
  %5868 = phi double [ %5863, %5862 ], [ %5866, %5864 ]
  store double %5868, ptr %436, align 8, !tbaa !17
  %5869 = load double, ptr %433, align 8, !tbaa !17
  %5870 = load double, ptr %433, align 8, !tbaa !17
  %5871 = fmul double %5869, %5870
  %5872 = load ptr, ptr %9, align 8, !tbaa !5
  %5873 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %5872, i32 0, i32 14
  %5874 = call double @libxsmm_kahan_sum(double noundef %5871, ptr noundef %5873, ptr noundef %419)
  %5875 = load double, ptr %434, align 8, !tbaa !17
  %5876 = load double, ptr %434, align 8, !tbaa !17
  %5877 = fmul double %5875, %5876
  %5878 = load ptr, ptr %9, align 8, !tbaa !5
  %5879 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %5878, i32 0, i32 19
  %5880 = call double @libxsmm_kahan_sum(double noundef %5877, ptr noundef %5879, ptr noundef %420)
  %5881 = load double, ptr %435, align 8, !tbaa !17
  %5882 = call double @libxsmm_kahan_sum(double noundef %5881, ptr noundef %424, ptr noundef %421)
  %5883 = load double, ptr %436, align 8, !tbaa !17
  %5884 = call double @libxsmm_kahan_sum(double noundef %5883, ptr noundef %425, ptr noundef %422)
  %5885 = load double, ptr %432, align 8, !tbaa !17
  %5886 = call double @libxsmm_kahan_sum(double noundef %5885, ptr noundef %426, ptr noundef %423)
  call void @llvm.lifetime.end.p0(i64 8, ptr %436) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %435) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %434) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %433) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %432) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %431) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %430) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %429) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %428) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %427) #7
  br label %5887

5887:                                             ; preds = %5867
  %5888 = load i32, ptr %400, align 4, !tbaa !9
  %5889 = add nsw i32 %5888, 1
  store i32 %5889, ptr %400, align 4, !tbaa !9
  br label %5771, !llvm.loop !75

5890:                                             ; preds = %5771
  %5891 = load ptr, ptr %9, align 8, !tbaa !5
  %5892 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %5891, i32 0, i32 0
  %5893 = load double, ptr %5892, align 8, !tbaa !44
  %5894 = load double, ptr %426, align 8, !tbaa !17
  %5895 = fcmp olt double %5893, %5894
  br i1 %5895, label %5896, label %5900

5896:                                             ; preds = %5890
  %5897 = load double, ptr %426, align 8, !tbaa !17
  %5898 = load ptr, ptr %9, align 8, !tbaa !5
  %5899 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %5898, i32 0, i32 0
  store double %5897, ptr %5899, align 8, !tbaa !44
  br label %5900

5900:                                             ; preds = %5896, %5890
  %5901 = load double, ptr %393, align 8, !tbaa !17
  %5902 = load double, ptr %424, align 8, !tbaa !17
  %5903 = fcmp olt double %5901, %5902
  br i1 %5903, label %5904, label %5906

5904:                                             ; preds = %5900
  %5905 = load double, ptr %424, align 8, !tbaa !17
  store double %5905, ptr %393, align 8, !tbaa !17
  br label %5906

5906:                                             ; preds = %5904, %5900
  %5907 = load double, ptr %394, align 8, !tbaa !17
  %5908 = load double, ptr %425, align 8, !tbaa !17
  %5909 = fcmp olt double %5907, %5908
  br i1 %5909, label %5910, label %5912

5910:                                             ; preds = %5906
  %5911 = load double, ptr %425, align 8, !tbaa !17
  store double %5911, ptr %394, align 8, !tbaa !17
  br label %5912

5912:                                             ; preds = %5910, %5906
  call void @llvm.lifetime.end.p0(i64 8, ptr %426) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %425) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %424) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %423) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %422) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %421) #7
  br label %5913

5913:                                             ; preds = %5912
  %5914 = load i32, ptr %401, align 4, !tbaa !9
  %5915 = add nsw i32 %5914, 1
  store i32 %5915, ptr %401, align 4, !tbaa !9
  br label %5766, !llvm.loop !76

5916:                                             ; preds = %5766
  %5917 = load double, ptr %393, align 8, !tbaa !17
  %5918 = fcmp oge double 0.000000e+00, %5917
  br i1 %5918, label %5919, label %5923

5919:                                             ; preds = %5916
  %5920 = load ptr, ptr %9, align 8, !tbaa !5
  %5921 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %5920, i32 0, i32 0
  %5922 = load double, ptr %5921, align 8, !tbaa !44
  br label %5935

5923:                                             ; preds = %5916
  %5924 = load ptr, ptr %9, align 8, !tbaa !5
  %5925 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %5924, i32 0, i32 0
  %5926 = load double, ptr %5925, align 8, !tbaa !44
  %5927 = load double, ptr %393, align 8, !tbaa !17
  %5928 = fcmp olt double 0.000000e+00, %5927
  br i1 %5928, label %5929, label %5931

5929:                                             ; preds = %5923
  %5930 = load double, ptr %393, align 8, !tbaa !17
  br label %5932

5931:                                             ; preds = %5923
  br label %5932

5932:                                             ; preds = %5931, %5929
  %5933 = phi double [ %5930, %5929 ], [ 1.000000e+00, %5931 ]
  %5934 = fdiv double %5926, %5933
  br label %5935

5935:                                             ; preds = %5932, %5919
  %5936 = phi double [ %5922, %5919 ], [ %5934, %5932 ]
  %5937 = load ptr, ptr %9, align 8, !tbaa !5
  %5938 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %5937, i32 0, i32 1
  store double %5936, ptr %5938, align 8, !tbaa !46
  call void @llvm.lifetime.end.p0(i64 8, ptr %420) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %419) #7
  br label %5939

5939:                                             ; preds = %5935, %5672
  call void @llvm.lifetime.end.p0(i64 4, ptr %401) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %400) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %399) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %398) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %397) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %396) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %395) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %394) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %393) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %392) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %391) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %390) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %389) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %388) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %387) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %386) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %385) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %384) #7
  br label %5940

5940:                                             ; preds = %5939, %5343
  br label %15200

5941:                                             ; preds = %1323
  %5942 = load i32, ptr %23, align 4, !tbaa !9
  %5943 = icmp eq i32 0, %5942
  br i1 %5943, label %5944, label %6497

5944:                                             ; preds = %5941
  call void @llvm.lifetime.start.p0(i64 8, ptr %437) #7
  %5945 = load ptr, ptr %13, align 8, !tbaa !5
  store ptr %5945, ptr %437, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %438) #7
  %5946 = load ptr, ptr %14, align 8, !tbaa !5
  store ptr %5946, ptr %438, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %439) #7
  store double 0.000000e+00, ptr %439, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %440) #7
  store double 0.000000e+00, ptr %440, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %441) #7
  store double 0.000000e+00, ptr %441, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %442) #7
  store double 0.000000e+00, ptr %442, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %443) #7
  store double 0.000000e+00, ptr %443, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %444) #7
  store double 0.000000e+00, ptr %444, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %445) #7
  store double 0.000000e+00, ptr %445, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %446) #7
  store double 0.000000e+00, ptr %446, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %447) #7
  store double 0.000000e+00, ptr %447, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %448) #7
  store double 0.000000e+00, ptr %448, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %449) #7
  store double 0.000000e+00, ptr %449, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %450) #7
  store double 0.000000e+00, ptr %450, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 4, ptr %451) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %452) #7
  store i32 0, ptr %451, align 4, !tbaa !9
  br label %5947

5947:                                             ; preds = %6244, %5944
  %5948 = load i32, ptr %451, align 4, !tbaa !9
  %5949 = load i32, ptr %26, align 4, !tbaa !9
  %5950 = icmp slt i32 %5948, %5949
  br i1 %5950, label %5951, label %6247

5951:                                             ; preds = %5947
  call void @llvm.lifetime.start.p0(i64 8, ptr %453) #7
  store double 0.000000e+00, ptr %453, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %454) #7
  store double 0.000000e+00, ptr %454, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %455) #7
  store double 0.000000e+00, ptr %455, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %456) #7
  store double 0.000000e+00, ptr %456, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %457) #7
  store double 0.000000e+00, ptr %457, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %458) #7
  store double 0.000000e+00, ptr %458, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %459) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %460) #7
  store i32 0, ptr %452, align 4, !tbaa !9
  br label %5952

5952:                                             ; preds = %6202, %5951
  %5953 = load i32, ptr %452, align 4, !tbaa !9
  %5954 = load i32, ptr %25, align 4, !tbaa !9
  %5955 = icmp slt i32 %5953, %5954
  br i1 %5955, label %5956, label %6205

5956:                                             ; preds = %5952
  call void @llvm.lifetime.start.p0(i64 4, ptr %461) #7
  %5957 = load i32, ptr %451, align 4, !tbaa !9
  store i32 %5957, ptr %461, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %462) #7
  %5958 = load i32, ptr %452, align 4, !tbaa !9
  store i32 %5958, ptr %462, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %463) #7
  %5959 = load ptr, ptr %438, align 8, !tbaa !5
  %5960 = icmp ne ptr null, %5959
  br i1 %5960, label %5961, label %5972

5961:                                             ; preds = %5956
  %5962 = load ptr, ptr %438, align 8, !tbaa !5
  %5963 = load i32, ptr %461, align 4, !tbaa !9
  %5964 = load i32, ptr %21, align 4, !tbaa !9
  %5965 = mul nsw i32 %5963, %5964
  %5966 = load i32, ptr %462, align 4, !tbaa !9
  %5967 = add nsw i32 %5965, %5966
  %5968 = sext i32 %5967 to i64
  %5969 = getelementptr inbounds i16, ptr %5962, i64 %5968
  %5970 = load i16, ptr %5969, align 2, !tbaa !67
  %5971 = uitofp i16 %5970 to double
  br label %5973

5972:                                             ; preds = %5956
  br label %5973

5973:                                             ; preds = %5972, %5961
  %5974 = phi double [ %5971, %5961 ], [ 0.000000e+00, %5972 ]
  store double %5974, ptr %463, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %464) #7
  %5975 = load ptr, ptr %437, align 8, !tbaa !5
  %5976 = load i32, ptr %461, align 4, !tbaa !9
  %5977 = load i32, ptr %20, align 4, !tbaa !9
  %5978 = mul nsw i32 %5976, %5977
  %5979 = load i32, ptr %462, align 4, !tbaa !9
  %5980 = add nsw i32 %5978, %5979
  %5981 = sext i32 %5980 to i64
  %5982 = getelementptr inbounds i16, ptr %5975, i64 %5981
  %5983 = load i16, ptr %5982, align 2, !tbaa !67
  %5984 = uitofp i16 %5983 to double
  store double %5984, ptr %464, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %465) #7
  %5985 = load double, ptr %463, align 8, !tbaa !17
  %5986 = fcmp ole double 0.000000e+00, %5985
  br i1 %5986, label %5987, label %5989

5987:                                             ; preds = %5973
  %5988 = load double, ptr %463, align 8, !tbaa !17
  br label %5992

5989:                                             ; preds = %5973
  %5990 = load double, ptr %463, align 8, !tbaa !17
  %5991 = fneg double %5990
  br label %5992

5992:                                             ; preds = %5989, %5987
  %5993 = phi double [ %5988, %5987 ], [ %5991, %5989 ]
  store double %5993, ptr %465, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %466) #7
  %5994 = load double, ptr %464, align 8, !tbaa !17
  %5995 = fcmp ole double 0.000000e+00, %5994
  br i1 %5995, label %5996, label %5998

5996:                                             ; preds = %5992
  %5997 = load double, ptr %464, align 8, !tbaa !17
  br label %6001

5998:                                             ; preds = %5992
  %5999 = load double, ptr %464, align 8, !tbaa !17
  %6000 = fneg double %5999
  br label %6001

6001:                                             ; preds = %5998, %5996
  %6002 = phi double [ %5997, %5996 ], [ %6000, %5998 ]
  store double %6002, ptr %466, align 8, !tbaa !17
  %6003 = load double, ptr %464, align 8, !tbaa !17
  %6004 = load ptr, ptr %9, align 8, !tbaa !5
  %6005 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %6004, i32 0, i32 11
  %6006 = load double, ptr %6005, align 8, !tbaa !14
  %6007 = fcmp olt double %6003, %6006
  br i1 %6007, label %6008, label %6012

6008:                                             ; preds = %6001
  %6009 = load double, ptr %464, align 8, !tbaa !17
  %6010 = load ptr, ptr %9, align 8, !tbaa !5
  %6011 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %6010, i32 0, i32 11
  store double %6009, ptr %6011, align 8, !tbaa !14
  br label %6012

6012:                                             ; preds = %6008, %6001
  %6013 = load double, ptr %464, align 8, !tbaa !17
  %6014 = load ptr, ptr %9, align 8, !tbaa !5
  %6015 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %6014, i32 0, i32 12
  %6016 = load double, ptr %6015, align 8, !tbaa !20
  %6017 = fcmp ogt double %6013, %6016
  br i1 %6017, label %6018, label %6022

6018:                                             ; preds = %6012
  %6019 = load double, ptr %464, align 8, !tbaa !17
  %6020 = load ptr, ptr %9, align 8, !tbaa !5
  %6021 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %6020, i32 0, i32 12
  store double %6019, ptr %6021, align 8, !tbaa !20
  br label %6022

6022:                                             ; preds = %6018, %6012
  %6023 = load double, ptr %463, align 8, !tbaa !17
  %6024 = load double, ptr %463, align 8, !tbaa !17
  %6025 = fcmp oeq double %6023, %6024
  br i1 %6025, label %6026, label %6174

6026:                                             ; preds = %6022
  %6027 = load double, ptr %27, align 8, !tbaa !17
  %6028 = load double, ptr %465, align 8, !tbaa !17
  %6029 = fcmp ogt double %6027, %6028
  br i1 %6029, label %6034, label %6030

6030:                                             ; preds = %6026
  %6031 = load double, ptr %463, align 8, !tbaa !17
  %6032 = load double, ptr %464, align 8, !tbaa !17
  %6033 = fcmp oeq double %6031, %6032
  br i1 %6033, label %6034, label %6174

6034:                                             ; preds = %6030, %6026
  call void @llvm.lifetime.start.p0(i64 8, ptr %467) #7
  %6035 = load ptr, ptr %438, align 8, !tbaa !5
  %6036 = icmp ne ptr null, %6035
  br i1 %6036, label %6037, label %6051

6037:                                             ; preds = %6034
  %6038 = load double, ptr %464, align 8, !tbaa !17
  %6039 = load double, ptr %463, align 8, !tbaa !17
  %6040 = fcmp olt double %6038, %6039
  br i1 %6040, label %6041, label %6045

6041:                                             ; preds = %6037
  %6042 = load double, ptr %463, align 8, !tbaa !17
  %6043 = load double, ptr %464, align 8, !tbaa !17
  %6044 = fsub double %6042, %6043
  br label %6049

6045:                                             ; preds = %6037
  %6046 = load double, ptr %464, align 8, !tbaa !17
  %6047 = load double, ptr %463, align 8, !tbaa !17
  %6048 = fsub double %6046, %6047
  br label %6049

6049:                                             ; preds = %6045, %6041
  %6050 = phi double [ %6044, %6041 ], [ %6048, %6045 ]
  br label %6052

6051:                                             ; preds = %6034
  br label %6052

6052:                                             ; preds = %6051, %6049
  %6053 = phi double [ %6050, %6049 ], [ 0.000000e+00, %6051 ]
  store double %6053, ptr %467, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %468) #7
  %6054 = load double, ptr %466, align 8, !tbaa !17
  %6055 = fcmp oge double 0.000000e+00, %6054
  br i1 %6055, label %6056, label %6058

6056:                                             ; preds = %6052
  %6057 = load double, ptr %465, align 8, !tbaa !17
  br label %6068

6058:                                             ; preds = %6052
  %6059 = load double, ptr %467, align 8, !tbaa !17
  %6060 = load double, ptr %466, align 8, !tbaa !17
  %6061 = fcmp olt double 0.000000e+00, %6060
  br i1 %6061, label %6062, label %6064

6062:                                             ; preds = %6058
  %6063 = load double, ptr %466, align 8, !tbaa !17
  br label %6065

6064:                                             ; preds = %6058
  br label %6065

6065:                                             ; preds = %6064, %6062
  %6066 = phi double [ %6063, %6062 ], [ 1.000000e+00, %6064 ]
  %6067 = fdiv double %6059, %6066
  br label %6068

6068:                                             ; preds = %6065, %6056
  %6069 = phi double [ %6057, %6056 ], [ %6067, %6065 ]
  store double %6069, ptr %468, align 8, !tbaa !17
  %6070 = load double, ptr %463, align 8, !tbaa !17
  %6071 = load ptr, ptr %9, align 8, !tbaa !5
  %6072 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %6071, i32 0, i32 16
  %6073 = load double, ptr %6072, align 8, !tbaa !21
  %6074 = fcmp olt double %6070, %6073
  br i1 %6074, label %6075, label %6079

6075:                                             ; preds = %6068
  %6076 = load double, ptr %463, align 8, !tbaa !17
  %6077 = load ptr, ptr %9, align 8, !tbaa !5
  %6078 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %6077, i32 0, i32 16
  store double %6076, ptr %6078, align 8, !tbaa !21
  br label %6079

6079:                                             ; preds = %6075, %6068
  %6080 = load double, ptr %463, align 8, !tbaa !17
  %6081 = load ptr, ptr %9, align 8, !tbaa !5
  %6082 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %6081, i32 0, i32 17
  %6083 = load double, ptr %6082, align 8, !tbaa !22
  %6084 = fcmp ogt double %6080, %6083
  br i1 %6084, label %6085, label %6089

6085:                                             ; preds = %6079
  %6086 = load double, ptr %463, align 8, !tbaa !17
  %6087 = load ptr, ptr %9, align 8, !tbaa !5
  %6088 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %6087, i32 0, i32 17
  store double %6086, ptr %6088, align 8, !tbaa !22
  br label %6089

6089:                                             ; preds = %6085, %6079
  %6090 = load ptr, ptr %9, align 8, !tbaa !5
  %6091 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %6090, i32 0, i32 5
  %6092 = load double, ptr %6091, align 8, !tbaa !23
  %6093 = load double, ptr %467, align 8, !tbaa !17
  %6094 = fcmp olt double %6092, %6093
  br i1 %6094, label %6095, label %6111

6095:                                             ; preds = %6089
  %6096 = load double, ptr %467, align 8, !tbaa !17
  %6097 = load ptr, ptr %9, align 8, !tbaa !5
  %6098 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %6097, i32 0, i32 5
  store double %6096, ptr %6098, align 8, !tbaa !23
  %6099 = load double, ptr %464, align 8, !tbaa !17
  %6100 = load ptr, ptr %9, align 8, !tbaa !5
  %6101 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %6100, i32 0, i32 20
  store double %6099, ptr %6101, align 8, !tbaa !24
  %6102 = load double, ptr %463, align 8, !tbaa !17
  %6103 = load ptr, ptr %9, align 8, !tbaa !5
  %6104 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %6103, i32 0, i32 21
  store double %6102, ptr %6104, align 8, !tbaa !25
  %6105 = load i32, ptr %462, align 4, !tbaa !9
  %6106 = load ptr, ptr %9, align 8, !tbaa !5
  %6107 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %6106, i32 0, i32 22
  store i32 %6105, ptr %6107, align 8, !tbaa !26
  %6108 = load i32, ptr %461, align 4, !tbaa !9
  %6109 = load ptr, ptr %9, align 8, !tbaa !5
  %6110 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %6109, i32 0, i32 23
  store i32 %6108, ptr %6110, align 4, !tbaa !27
  br label %6111

6111:                                             ; preds = %6095, %6089
  %6112 = load ptr, ptr %9, align 8, !tbaa !5
  %6113 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %6112, i32 0, i32 6
  %6114 = load double, ptr %6113, align 8, !tbaa !28
  %6115 = load double, ptr %468, align 8, !tbaa !17
  %6116 = fcmp olt double %6114, %6115
  br i1 %6116, label %6117, label %6121

6117:                                             ; preds = %6111
  %6118 = load double, ptr %468, align 8, !tbaa !17
  %6119 = load ptr, ptr %9, align 8, !tbaa !5
  %6120 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %6119, i32 0, i32 6
  store double %6118, ptr %6120, align 8, !tbaa !28
  br label %6121

6121:                                             ; preds = %6117, %6111
  %6122 = load double, ptr %468, align 8, !tbaa !17
  %6123 = load double, ptr %468, align 8, !tbaa !17
  %6124 = fmul double %6122, %6123
  store double %6124, ptr %459, align 8, !tbaa !17
  %6125 = load double, ptr %27, align 8, !tbaa !17
  %6126 = load double, ptr %459, align 8, !tbaa !17
  %6127 = fcmp ogt double %6125, %6126
  br i1 %6127, label %6128, label %6147

6128:                                             ; preds = %6121
  %6129 = load double, ptr %450, align 8, !tbaa !17
  %6130 = load double, ptr %459, align 8, !tbaa !17
  %6131 = fsub double %6130, %6129
  store double %6131, ptr %459, align 8, !tbaa !17
  %6132 = load ptr, ptr %9, align 8, !tbaa !5
  %6133 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %6132, i32 0, i32 8
  %6134 = load double, ptr %6133, align 8, !tbaa !29
  %6135 = load double, ptr %459, align 8, !tbaa !17
  %6136 = fadd double %6134, %6135
  store double %6136, ptr %460, align 8, !tbaa !17
  %6137 = load double, ptr %460, align 8, !tbaa !17
  %6138 = load ptr, ptr %9, align 8, !tbaa !5
  %6139 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %6138, i32 0, i32 8
  %6140 = load double, ptr %6139, align 8, !tbaa !29
  %6141 = fsub double %6137, %6140
  %6142 = load double, ptr %459, align 8, !tbaa !17
  %6143 = fsub double %6141, %6142
  store double %6143, ptr %450, align 8, !tbaa !17
  %6144 = load double, ptr %460, align 8, !tbaa !17
  %6145 = load ptr, ptr %9, align 8, !tbaa !5
  %6146 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %6145, i32 0, i32 8
  store double %6144, ptr %6146, align 8, !tbaa !29
  br label %6147

6147:                                             ; preds = %6128, %6121
  %6148 = load double, ptr %466, align 8, !tbaa !17
  %6149 = call double @libxsmm_kahan_sum(double noundef %6148, ptr noundef %456, ptr noundef %453)
  %6150 = load double, ptr %465, align 8, !tbaa !17
  %6151 = call double @libxsmm_kahan_sum(double noundef %6150, ptr noundef %457, ptr noundef %454)
  %6152 = load double, ptr %467, align 8, !tbaa !17
  %6153 = call double @libxsmm_kahan_sum(double noundef %6152, ptr noundef %458, ptr noundef %455)
  %6154 = load double, ptr %464, align 8, !tbaa !17
  %6155 = load double, ptr %464, align 8, !tbaa !17
  %6156 = fmul double %6154, %6155
  %6157 = call double @libxsmm_kahan_sum(double noundef %6156, ptr noundef %442, ptr noundef %440)
  %6158 = load double, ptr %463, align 8, !tbaa !17
  %6159 = load double, ptr %463, align 8, !tbaa !17
  %6160 = fmul double %6158, %6159
  %6161 = call double @libxsmm_kahan_sum(double noundef %6160, ptr noundef %443, ptr noundef %441)
  %6162 = load double, ptr %467, align 8, !tbaa !17
  %6163 = load double, ptr %467, align 8, !tbaa !17
  %6164 = fmul double %6162, %6163
  store double %6164, ptr %459, align 8, !tbaa !17
  %6165 = load double, ptr %27, align 8, !tbaa !17
  %6166 = load double, ptr %459, align 8, !tbaa !17
  %6167 = fcmp ogt double %6165, %6166
  br i1 %6167, label %6168, label %6173

6168:                                             ; preds = %6147
  %6169 = load double, ptr %459, align 8, !tbaa !17
  %6170 = load ptr, ptr %9, align 8, !tbaa !5
  %6171 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %6170, i32 0, i32 7
  %6172 = call double @libxsmm_kahan_sum(double noundef %6169, ptr noundef %6171, ptr noundef %439)
  br label %6173

6173:                                             ; preds = %6168, %6147
  call void @llvm.lifetime.end.p0(i64 8, ptr %468) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %467) #7
  br label %6198

6174:                                             ; preds = %6030, %6022
  %6175 = load double, ptr %464, align 8, !tbaa !17
  %6176 = load double, ptr %464, align 8, !tbaa !17
  %6177 = fcmp oeq double %6175, %6176
  br i1 %6177, label %6178, label %6182

6178:                                             ; preds = %6174
  %6179 = load double, ptr %27, align 8, !tbaa !17
  %6180 = load double, ptr %466, align 8, !tbaa !17
  %6181 = fcmp ogt double %6179, %6180
  br label %6182

6182:                                             ; preds = %6178, %6174
  %6183 = phi i1 [ false, %6174 ], [ %6181, %6178 ]
  %6184 = zext i1 %6183 to i64
  %6185 = select i1 %6183, i32 1, i32 2
  store i32 %6185, ptr %19, align 4, !tbaa !9
  %6186 = load i32, ptr %462, align 4, !tbaa !9
  %6187 = load ptr, ptr %9, align 8, !tbaa !5
  %6188 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %6187, i32 0, i32 22
  store i32 %6186, ptr %6188, align 8, !tbaa !26
  %6189 = load i32, ptr %461, align 4, !tbaa !9
  %6190 = load ptr, ptr %9, align 8, !tbaa !5
  %6191 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %6190, i32 0, i32 23
  store i32 %6189, ptr %6191, align 4, !tbaa !27
  %6192 = load double, ptr %464, align 8, !tbaa !17
  %6193 = load ptr, ptr %9, align 8, !tbaa !5
  %6194 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %6193, i32 0, i32 20
  store double %6192, ptr %6194, align 8, !tbaa !24
  %6195 = load double, ptr %463, align 8, !tbaa !17
  %6196 = load ptr, ptr %9, align 8, !tbaa !5
  %6197 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %6196, i32 0, i32 21
  store double %6195, ptr %6197, align 8, !tbaa !25
  store i32 102, ptr %60, align 4
  br label %6199

6198:                                             ; preds = %6173
  store i32 0, ptr %60, align 4
  br label %6199

6199:                                             ; preds = %6198, %6182
  call void @llvm.lifetime.end.p0(i64 8, ptr %466) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %465) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %464) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %463) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %462) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %461) #7
  %6200 = load i32, ptr %60, align 4
  switch i32 %6200, label %15542 [
    i32 0, label %6201
    i32 102, label %6205
  ]

6201:                                             ; preds = %6199
  br label %6202

6202:                                             ; preds = %6201
  %6203 = load i32, ptr %452, align 4, !tbaa !9
  %6204 = add nsw i32 %6203, 1
  store i32 %6204, ptr %452, align 4, !tbaa !9
  br label %5952, !llvm.loop !77

6205:                                             ; preds = %6199, %5952
  %6206 = load i32, ptr %19, align 4, !tbaa !9
  %6207 = icmp eq i32 0, %6206
  br i1 %6207, label %6208, label %6239

6208:                                             ; preds = %6205
  %6209 = load double, ptr %456, align 8, !tbaa !17
  %6210 = load ptr, ptr %9, align 8, !tbaa !5
  %6211 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %6210, i32 0, i32 10
  %6212 = call double @libxsmm_kahan_sum(double noundef %6209, ptr noundef %6211, ptr noundef %448)
  %6213 = load double, ptr %457, align 8, !tbaa !17
  %6214 = load ptr, ptr %9, align 8, !tbaa !5
  %6215 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %6214, i32 0, i32 15
  %6216 = call double @libxsmm_kahan_sum(double noundef %6213, ptr noundef %6215, ptr noundef %449)
  %6217 = load ptr, ptr %9, align 8, !tbaa !5
  %6218 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %6217, i32 0, i32 2
  %6219 = load double, ptr %6218, align 8, !tbaa !32
  %6220 = load double, ptr %458, align 8, !tbaa !17
  %6221 = fcmp olt double %6219, %6220
  br i1 %6221, label %6222, label %6226

6222:                                             ; preds = %6208
  %6223 = load double, ptr %458, align 8, !tbaa !17
  %6224 = load ptr, ptr %9, align 8, !tbaa !5
  %6225 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %6224, i32 0, i32 2
  store double %6223, ptr %6225, align 8, !tbaa !32
  br label %6226

6226:                                             ; preds = %6222, %6208
  %6227 = load double, ptr %444, align 8, !tbaa !17
  %6228 = load double, ptr %456, align 8, !tbaa !17
  %6229 = fcmp olt double %6227, %6228
  br i1 %6229, label %6230, label %6232

6230:                                             ; preds = %6226
  %6231 = load double, ptr %456, align 8, !tbaa !17
  store double %6231, ptr %444, align 8, !tbaa !17
  br label %6232

6232:                                             ; preds = %6230, %6226
  %6233 = load double, ptr %445, align 8, !tbaa !17
  %6234 = load double, ptr %457, align 8, !tbaa !17
  %6235 = fcmp olt double %6233, %6234
  br i1 %6235, label %6236, label %6238

6236:                                             ; preds = %6232
  %6237 = load double, ptr %457, align 8, !tbaa !17
  store double %6237, ptr %445, align 8, !tbaa !17
  br label %6238

6238:                                             ; preds = %6236, %6232
  br label %6240

6239:                                             ; preds = %6205
  store i32 99, ptr %60, align 4
  br label %6241

6240:                                             ; preds = %6238
  store i32 0, ptr %60, align 4
  br label %6241

6241:                                             ; preds = %6240, %6239
  call void @llvm.lifetime.end.p0(i64 8, ptr %460) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %459) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %458) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %457) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %456) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %455) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %454) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %453) #7
  %6242 = load i32, ptr %60, align 4
  switch i32 %6242, label %15542 [
    i32 0, label %6243
    i32 99, label %6247
  ]

6243:                                             ; preds = %6241
  br label %6244

6244:                                             ; preds = %6243
  %6245 = load i32, ptr %451, align 4, !tbaa !9
  %6246 = add nsw i32 %6245, 1
  store i32 %6246, ptr %451, align 4, !tbaa !9
  br label %5947, !llvm.loop !78

6247:                                             ; preds = %6241, %5947
  %6248 = load i32, ptr %19, align 4, !tbaa !9
  %6249 = icmp eq i32 0, %6248
  br i1 %6249, label %6250, label %6496

6250:                                             ; preds = %6247
  call void @llvm.lifetime.start.p0(i64 8, ptr %469) #7
  store double 0.000000e+00, ptr %469, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %470) #7
  store double 0.000000e+00, ptr %470, align 8, !tbaa !17
  %6251 = load ptr, ptr %9, align 8, !tbaa !5
  %6252 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %6251, i32 0, i32 14
  %6253 = load double, ptr %6252, align 8, !tbaa !34
  %6254 = fcmp oeq double 0.000000e+00, %6253
  br i1 %6254, label %6255, label %6256

6255:                                             ; preds = %6250
  br label %6257

6256:                                             ; preds = %6250
  call void @__assert_fail(ptr noundef @.str.1, ptr noundef @.str.2, i32 noundef 130, ptr noundef @__PRETTY_FUNCTION__.libxsmm_matdiff) #9
  unreachable

6257:                                             ; preds = %6255
  %6258 = load ptr, ptr %9, align 8, !tbaa !5
  %6259 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %6258, i32 0, i32 19
  %6260 = load double, ptr %6259, align 8, !tbaa !35
  %6261 = fcmp oeq double 0.000000e+00, %6260
  br i1 %6261, label %6262, label %6263

6262:                                             ; preds = %6257
  br label %6264

6263:                                             ; preds = %6257
  call void @__assert_fail(ptr noundef @.str.3, ptr noundef @.str.2, i32 noundef 131, ptr noundef @__PRETTY_FUNCTION__.libxsmm_matdiff) #9
  unreachable

6264:                                             ; preds = %6262
  %6265 = load i64, ptr %24, align 8, !tbaa !12
  %6266 = icmp ne i64 0, %6265
  br i1 %6266, label %6267, label %6284

6267:                                             ; preds = %6264
  %6268 = load ptr, ptr %9, align 8, !tbaa !5
  %6269 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %6268, i32 0, i32 10
  %6270 = load double, ptr %6269, align 8, !tbaa !36
  %6271 = load i64, ptr %24, align 8, !tbaa !12
  %6272 = uitofp i64 %6271 to double
  %6273 = fdiv double %6270, %6272
  %6274 = load ptr, ptr %9, align 8, !tbaa !5
  %6275 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %6274, i32 0, i32 13
  store double %6273, ptr %6275, align 8, !tbaa !37
  %6276 = load ptr, ptr %9, align 8, !tbaa !5
  %6277 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %6276, i32 0, i32 15
  %6278 = load double, ptr %6277, align 8, !tbaa !38
  %6279 = load i64, ptr %24, align 8, !tbaa !12
  %6280 = uitofp i64 %6279 to double
  %6281 = fdiv double %6278, %6280
  %6282 = load ptr, ptr %9, align 8, !tbaa !5
  %6283 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %6282, i32 0, i32 18
  store double %6281, ptr %6283, align 8, !tbaa !39
  br label %6284

6284:                                             ; preds = %6267, %6264
  %6285 = load double, ptr %444, align 8, !tbaa !17
  %6286 = fcmp oge double 0.000000e+00, %6285
  br i1 %6286, label %6287, label %6289

6287:                                             ; preds = %6284
  %6288 = load double, ptr %445, align 8, !tbaa !17
  br label %6301

6289:                                             ; preds = %6284
  %6290 = load ptr, ptr %9, align 8, !tbaa !5
  %6291 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %6290, i32 0, i32 2
  %6292 = load double, ptr %6291, align 8, !tbaa !32
  %6293 = load double, ptr %444, align 8, !tbaa !17
  %6294 = fcmp olt double 0.000000e+00, %6293
  br i1 %6294, label %6295, label %6297

6295:                                             ; preds = %6289
  %6296 = load double, ptr %444, align 8, !tbaa !17
  br label %6298

6297:                                             ; preds = %6289
  br label %6298

6298:                                             ; preds = %6297, %6295
  %6299 = phi double [ %6296, %6295 ], [ 1.000000e+00, %6297 ]
  %6300 = fdiv double %6292, %6299
  br label %6301

6301:                                             ; preds = %6298, %6287
  %6302 = phi double [ %6288, %6287 ], [ %6300, %6298 ]
  %6303 = load ptr, ptr %9, align 8, !tbaa !5
  %6304 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %6303, i32 0, i32 3
  store double %6302, ptr %6304, align 8, !tbaa !40
  %6305 = load double, ptr %442, align 8, !tbaa !17
  %6306 = fcmp oge double 0.000000e+00, %6305
  br i1 %6306, label %6307, label %6325

6307:                                             ; preds = %6301
  %6308 = load double, ptr %443, align 8, !tbaa !17
  %6309 = load double, ptr %443, align 8, !tbaa !17
  %6310 = fmul double %6308, %6309
  %6311 = load ptr, ptr %9, align 8, !tbaa !5
  %6312 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %6311, i32 0, i32 7
  %6313 = load double, ptr %6312, align 8, !tbaa !41
  %6314 = fcmp olt double %6310, %6313
  br i1 %6314, label %6315, label %6319

6315:                                             ; preds = %6307
  %6316 = load double, ptr %443, align 8, !tbaa !17
  %6317 = load double, ptr %443, align 8, !tbaa !17
  %6318 = fmul double %6316, %6317
  br label %6323

6319:                                             ; preds = %6307
  %6320 = load ptr, ptr %9, align 8, !tbaa !5
  %6321 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %6320, i32 0, i32 7
  %6322 = load double, ptr %6321, align 8, !tbaa !41
  br label %6323

6323:                                             ; preds = %6319, %6315
  %6324 = phi double [ %6318, %6315 ], [ %6322, %6319 ]
  br label %6337

6325:                                             ; preds = %6301
  %6326 = load ptr, ptr %9, align 8, !tbaa !5
  %6327 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %6326, i32 0, i32 7
  %6328 = load double, ptr %6327, align 8, !tbaa !41
  %6329 = load double, ptr %442, align 8, !tbaa !17
  %6330 = fcmp olt double 0.000000e+00, %6329
  br i1 %6330, label %6331, label %6333

6331:                                             ; preds = %6325
  %6332 = load double, ptr %442, align 8, !tbaa !17
  br label %6334

6333:                                             ; preds = %6325
  br label %6334

6334:                                             ; preds = %6333, %6331
  %6335 = phi double [ %6332, %6331 ], [ 1.000000e+00, %6333 ]
  %6336 = fdiv double %6328, %6335
  br label %6337

6337:                                             ; preds = %6334, %6323
  %6338 = phi double [ %6324, %6323 ], [ %6336, %6334 ]
  %6339 = load ptr, ptr %9, align 8, !tbaa !5
  %6340 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %6339, i32 0, i32 4
  store double %6338, ptr %6340, align 8, !tbaa !42
  store i32 0, ptr %452, align 4, !tbaa !9
  br label %6341

6341:                                             ; preds = %6470, %6337
  %6342 = load i32, ptr %452, align 4, !tbaa !9
  %6343 = load i32, ptr %25, align 4, !tbaa !9
  %6344 = icmp slt i32 %6342, %6343
  br i1 %6344, label %6345, label %6473

6345:                                             ; preds = %6341
  call void @llvm.lifetime.start.p0(i64 8, ptr %471) #7
  store double 0.000000e+00, ptr %471, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %472) #7
  store double 0.000000e+00, ptr %472, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %473) #7
  store double 0.000000e+00, ptr %473, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %474) #7
  store double 0.000000e+00, ptr %474, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %475) #7
  store double 0.000000e+00, ptr %475, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %476) #7
  store double 0.000000e+00, ptr %476, align 8, !tbaa !17
  store i32 0, ptr %451, align 4, !tbaa !9
  br label %6346

6346:                                             ; preds = %6444, %6345
  %6347 = load i32, ptr %451, align 4, !tbaa !9
  %6348 = load i32, ptr %26, align 4, !tbaa !9
  %6349 = icmp slt i32 %6347, %6348
  br i1 %6349, label %6350, label %6447

6350:                                             ; preds = %6346
  call void @llvm.lifetime.start.p0(i64 4, ptr %477) #7
  %6351 = load i32, ptr %451, align 4, !tbaa !9
  store i32 %6351, ptr %477, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %478) #7
  %6352 = load i32, ptr %452, align 4, !tbaa !9
  store i32 %6352, ptr %478, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %479) #7
  %6353 = load ptr, ptr %437, align 8, !tbaa !5
  %6354 = load i32, ptr %477, align 4, !tbaa !9
  %6355 = load i32, ptr %20, align 4, !tbaa !9
  %6356 = mul nsw i32 %6354, %6355
  %6357 = load i32, ptr %478, align 4, !tbaa !9
  %6358 = add nsw i32 %6356, %6357
  %6359 = sext i32 %6358 to i64
  %6360 = getelementptr inbounds i16, ptr %6353, i64 %6359
  %6361 = load i16, ptr %6360, align 2, !tbaa !67
  %6362 = uitofp i16 %6361 to double
  store double %6362, ptr %479, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %480) #7
  %6363 = load ptr, ptr %438, align 8, !tbaa !5
  %6364 = icmp ne ptr null, %6363
  br i1 %6364, label %6365, label %6376

6365:                                             ; preds = %6350
  %6366 = load ptr, ptr %438, align 8, !tbaa !5
  %6367 = load i32, ptr %477, align 4, !tbaa !9
  %6368 = load i32, ptr %21, align 4, !tbaa !9
  %6369 = mul nsw i32 %6367, %6368
  %6370 = load i32, ptr %478, align 4, !tbaa !9
  %6371 = add nsw i32 %6369, %6370
  %6372 = sext i32 %6371 to i64
  %6373 = getelementptr inbounds i16, ptr %6366, i64 %6372
  %6374 = load i16, ptr %6373, align 2, !tbaa !67
  %6375 = uitofp i16 %6374 to double
  br label %6377

6376:                                             ; preds = %6350
  br label %6377

6377:                                             ; preds = %6376, %6365
  %6378 = phi double [ %6375, %6365 ], [ 0.000000e+00, %6376 ]
  store double %6378, ptr %480, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %481) #7
  %6379 = load ptr, ptr %438, align 8, !tbaa !5
  %6380 = icmp ne ptr null, %6379
  br i1 %6380, label %6381, label %6395

6381:                                             ; preds = %6377
  %6382 = load double, ptr %479, align 8, !tbaa !17
  %6383 = load double, ptr %480, align 8, !tbaa !17
  %6384 = fcmp olt double %6382, %6383
  br i1 %6384, label %6385, label %6389

6385:                                             ; preds = %6381
  %6386 = load double, ptr %480, align 8, !tbaa !17
  %6387 = load double, ptr %479, align 8, !tbaa !17
  %6388 = fsub double %6386, %6387
  br label %6393

6389:                                             ; preds = %6381
  %6390 = load double, ptr %479, align 8, !tbaa !17
  %6391 = load double, ptr %480, align 8, !tbaa !17
  %6392 = fsub double %6390, %6391
  br label %6393

6393:                                             ; preds = %6389, %6385
  %6394 = phi double [ %6388, %6385 ], [ %6392, %6389 ]
  br label %6396

6395:                                             ; preds = %6377
  br label %6396

6396:                                             ; preds = %6395, %6393
  %6397 = phi double [ %6394, %6393 ], [ 0.000000e+00, %6395 ]
  store double %6397, ptr %481, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %482) #7
  %6398 = load double, ptr %479, align 8, !tbaa !17
  %6399 = load ptr, ptr %9, align 8, !tbaa !5
  %6400 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %6399, i32 0, i32 13
  %6401 = load double, ptr %6400, align 8, !tbaa !37
  %6402 = fsub double %6398, %6401
  store double %6402, ptr %482, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %483) #7
  %6403 = load double, ptr %480, align 8, !tbaa !17
  %6404 = load ptr, ptr %9, align 8, !tbaa !5
  %6405 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %6404, i32 0, i32 18
  %6406 = load double, ptr %6405, align 8, !tbaa !39
  %6407 = fsub double %6403, %6406
  store double %6407, ptr %483, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %484) #7
  %6408 = load double, ptr %479, align 8, !tbaa !17
  %6409 = fcmp ole double 0.000000e+00, %6408
  br i1 %6409, label %6410, label %6412

6410:                                             ; preds = %6396
  %6411 = load double, ptr %479, align 8, !tbaa !17
  br label %6415

6412:                                             ; preds = %6396
  %6413 = load double, ptr %479, align 8, !tbaa !17
  %6414 = fneg double %6413
  br label %6415

6415:                                             ; preds = %6412, %6410
  %6416 = phi double [ %6411, %6410 ], [ %6414, %6412 ]
  store double %6416, ptr %484, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %485) #7
  %6417 = load double, ptr %480, align 8, !tbaa !17
  %6418 = fcmp ole double 0.000000e+00, %6417
  br i1 %6418, label %6419, label %6421

6419:                                             ; preds = %6415
  %6420 = load double, ptr %480, align 8, !tbaa !17
  br label %6424

6421:                                             ; preds = %6415
  %6422 = load double, ptr %480, align 8, !tbaa !17
  %6423 = fneg double %6422
  br label %6424

6424:                                             ; preds = %6421, %6419
  %6425 = phi double [ %6420, %6419 ], [ %6423, %6421 ]
  store double %6425, ptr %485, align 8, !tbaa !17
  %6426 = load double, ptr %482, align 8, !tbaa !17
  %6427 = load double, ptr %482, align 8, !tbaa !17
  %6428 = fmul double %6426, %6427
  %6429 = load ptr, ptr %9, align 8, !tbaa !5
  %6430 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %6429, i32 0, i32 14
  %6431 = call double @libxsmm_kahan_sum(double noundef %6428, ptr noundef %6430, ptr noundef %469)
  %6432 = load double, ptr %483, align 8, !tbaa !17
  %6433 = load double, ptr %483, align 8, !tbaa !17
  %6434 = fmul double %6432, %6433
  %6435 = load ptr, ptr %9, align 8, !tbaa !5
  %6436 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %6435, i32 0, i32 19
  %6437 = call double @libxsmm_kahan_sum(double noundef %6434, ptr noundef %6436, ptr noundef %470)
  %6438 = load double, ptr %484, align 8, !tbaa !17
  %6439 = call double @libxsmm_kahan_sum(double noundef %6438, ptr noundef %474, ptr noundef %471)
  %6440 = load double, ptr %485, align 8, !tbaa !17
  %6441 = call double @libxsmm_kahan_sum(double noundef %6440, ptr noundef %475, ptr noundef %472)
  %6442 = load double, ptr %481, align 8, !tbaa !17
  %6443 = call double @libxsmm_kahan_sum(double noundef %6442, ptr noundef %476, ptr noundef %473)
  call void @llvm.lifetime.end.p0(i64 8, ptr %485) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %484) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %483) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %482) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %481) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %480) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %479) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %478) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %477) #7
  br label %6444

6444:                                             ; preds = %6424
  %6445 = load i32, ptr %451, align 4, !tbaa !9
  %6446 = add nsw i32 %6445, 1
  store i32 %6446, ptr %451, align 4, !tbaa !9
  br label %6346, !llvm.loop !79

6447:                                             ; preds = %6346
  %6448 = load ptr, ptr %9, align 8, !tbaa !5
  %6449 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %6448, i32 0, i32 0
  %6450 = load double, ptr %6449, align 8, !tbaa !44
  %6451 = load double, ptr %476, align 8, !tbaa !17
  %6452 = fcmp olt double %6450, %6451
  br i1 %6452, label %6453, label %6457

6453:                                             ; preds = %6447
  %6454 = load double, ptr %476, align 8, !tbaa !17
  %6455 = load ptr, ptr %9, align 8, !tbaa !5
  %6456 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %6455, i32 0, i32 0
  store double %6454, ptr %6456, align 8, !tbaa !44
  br label %6457

6457:                                             ; preds = %6453, %6447
  %6458 = load double, ptr %446, align 8, !tbaa !17
  %6459 = load double, ptr %474, align 8, !tbaa !17
  %6460 = fcmp olt double %6458, %6459
  br i1 %6460, label %6461, label %6463

6461:                                             ; preds = %6457
  %6462 = load double, ptr %474, align 8, !tbaa !17
  store double %6462, ptr %446, align 8, !tbaa !17
  br label %6463

6463:                                             ; preds = %6461, %6457
  %6464 = load double, ptr %447, align 8, !tbaa !17
  %6465 = load double, ptr %475, align 8, !tbaa !17
  %6466 = fcmp olt double %6464, %6465
  br i1 %6466, label %6467, label %6469

6467:                                             ; preds = %6463
  %6468 = load double, ptr %475, align 8, !tbaa !17
  store double %6468, ptr %447, align 8, !tbaa !17
  br label %6469

6469:                                             ; preds = %6467, %6463
  call void @llvm.lifetime.end.p0(i64 8, ptr %476) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %475) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %474) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %473) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %472) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %471) #7
  br label %6470

6470:                                             ; preds = %6469
  %6471 = load i32, ptr %452, align 4, !tbaa !9
  %6472 = add nsw i32 %6471, 1
  store i32 %6472, ptr %452, align 4, !tbaa !9
  br label %6341, !llvm.loop !80

6473:                                             ; preds = %6341
  %6474 = load double, ptr %446, align 8, !tbaa !17
  %6475 = fcmp oge double 0.000000e+00, %6474
  br i1 %6475, label %6476, label %6480

6476:                                             ; preds = %6473
  %6477 = load ptr, ptr %9, align 8, !tbaa !5
  %6478 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %6477, i32 0, i32 0
  %6479 = load double, ptr %6478, align 8, !tbaa !44
  br label %6492

6480:                                             ; preds = %6473
  %6481 = load ptr, ptr %9, align 8, !tbaa !5
  %6482 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %6481, i32 0, i32 0
  %6483 = load double, ptr %6482, align 8, !tbaa !44
  %6484 = load double, ptr %446, align 8, !tbaa !17
  %6485 = fcmp olt double 0.000000e+00, %6484
  br i1 %6485, label %6486, label %6488

6486:                                             ; preds = %6480
  %6487 = load double, ptr %446, align 8, !tbaa !17
  br label %6489

6488:                                             ; preds = %6480
  br label %6489

6489:                                             ; preds = %6488, %6486
  %6490 = phi double [ %6487, %6486 ], [ 1.000000e+00, %6488 ]
  %6491 = fdiv double %6483, %6490
  br label %6492

6492:                                             ; preds = %6489, %6476
  %6493 = phi double [ %6479, %6476 ], [ %6491, %6489 ]
  %6494 = load ptr, ptr %9, align 8, !tbaa !5
  %6495 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %6494, i32 0, i32 1
  store double %6493, ptr %6495, align 8, !tbaa !46
  call void @llvm.lifetime.end.p0(i64 8, ptr %470) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %469) #7
  br label %6496

6496:                                             ; preds = %6492, %6247
  call void @llvm.lifetime.end.p0(i64 4, ptr %452) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %451) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %450) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %449) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %448) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %447) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %446) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %445) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %444) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %443) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %442) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %441) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %440) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %439) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %438) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %437) #7
  br label %7093

6497:                                             ; preds = %5941
  call void @llvm.lifetime.start.p0(i64 8, ptr %486) #7
  %6498 = load ptr, ptr %13, align 8, !tbaa !5
  store ptr %6498, ptr %486, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %487) #7
  %6499 = load ptr, ptr %14, align 8, !tbaa !5
  store ptr %6499, ptr %487, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %488) #7
  store double 0.000000e+00, ptr %488, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %489) #7
  store double 0.000000e+00, ptr %489, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %490) #7
  store double 0.000000e+00, ptr %490, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %491) #7
  store double 0.000000e+00, ptr %491, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %492) #7
  store double 0.000000e+00, ptr %492, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %493) #7
  store double 0.000000e+00, ptr %493, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %494) #7
  store double 0.000000e+00, ptr %494, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %495) #7
  store double 0.000000e+00, ptr %495, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %496) #7
  store double 0.000000e+00, ptr %496, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %497) #7
  store double 0.000000e+00, ptr %497, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %498) #7
  store double 0.000000e+00, ptr %498, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %499) #7
  store double 0.000000e+00, ptr %499, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %500) #7
  %6500 = load i32, ptr %25, align 4, !tbaa !9
  %6501 = sext i32 %6500 to i64
  %6502 = load i32, ptr %26, align 4, !tbaa !9
  %6503 = sext i32 %6502 to i64
  %6504 = mul i64 %6501, %6503
  store i64 %6504, ptr %500, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 8, ptr %501) #7
  %6505 = load i64, ptr %500, align 8, !tbaa !12
  %6506 = call i64 @libxsmm_coprime2(i64 noundef %6505)
  store i64 %6506, ptr %501, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 4, ptr %502) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %503) #7
  store i32 0, ptr %502, align 4, !tbaa !9
  br label %6507

6507:                                             ; preds = %6822, %6497
  %6508 = load i32, ptr %502, align 4, !tbaa !9
  %6509 = load i32, ptr %26, align 4, !tbaa !9
  %6510 = icmp slt i32 %6508, %6509
  br i1 %6510, label %6511, label %6825

6511:                                             ; preds = %6507
  call void @llvm.lifetime.start.p0(i64 8, ptr %504) #7
  store double 0.000000e+00, ptr %504, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %505) #7
  store double 0.000000e+00, ptr %505, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %506) #7
  store double 0.000000e+00, ptr %506, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %507) #7
  store double 0.000000e+00, ptr %507, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %508) #7
  store double 0.000000e+00, ptr %508, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %509) #7
  store double 0.000000e+00, ptr %509, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %510) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %511) #7
  store i32 0, ptr %503, align 4, !tbaa !9
  br label %6512

6512:                                             ; preds = %6780, %6511
  %6513 = load i32, ptr %503, align 4, !tbaa !9
  %6514 = load i32, ptr %25, align 4, !tbaa !9
  %6515 = icmp slt i32 %6513, %6514
  br i1 %6515, label %6516, label %6783

6516:                                             ; preds = %6512
  call void @llvm.lifetime.start.p0(i64 8, ptr %512) #7
  %6517 = load i64, ptr %501, align 8, !tbaa !12
  %6518 = load i32, ptr %502, align 4, !tbaa !9
  %6519 = load i32, ptr %25, align 4, !tbaa !9
  %6520 = mul nsw i32 %6518, %6519
  %6521 = load i32, ptr %503, align 4, !tbaa !9
  %6522 = add nsw i32 %6520, %6521
  %6523 = sext i32 %6522 to i64
  %6524 = mul i64 %6517, %6523
  %6525 = load i64, ptr %500, align 8, !tbaa !12
  %6526 = urem i64 %6524, %6525
  store i64 %6526, ptr %512, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 4, ptr %513) #7
  %6527 = load i64, ptr %512, align 8, !tbaa !12
  %6528 = load i32, ptr %25, align 4, !tbaa !9
  %6529 = sext i32 %6528 to i64
  %6530 = udiv i64 %6527, %6529
  %6531 = trunc i64 %6530 to i32
  store i32 %6531, ptr %513, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %514) #7
  %6532 = load i64, ptr %512, align 8, !tbaa !12
  %6533 = load i32, ptr %25, align 4, !tbaa !9
  %6534 = sext i32 %6533 to i64
  %6535 = urem i64 %6532, %6534
  %6536 = trunc i64 %6535 to i32
  store i32 %6536, ptr %514, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %515) #7
  %6537 = load ptr, ptr %487, align 8, !tbaa !5
  %6538 = icmp ne ptr null, %6537
  br i1 %6538, label %6539, label %6550

6539:                                             ; preds = %6516
  %6540 = load ptr, ptr %487, align 8, !tbaa !5
  %6541 = load i32, ptr %513, align 4, !tbaa !9
  %6542 = load i32, ptr %21, align 4, !tbaa !9
  %6543 = mul nsw i32 %6541, %6542
  %6544 = load i32, ptr %514, align 4, !tbaa !9
  %6545 = add nsw i32 %6543, %6544
  %6546 = sext i32 %6545 to i64
  %6547 = getelementptr inbounds i16, ptr %6540, i64 %6546
  %6548 = load i16, ptr %6547, align 2, !tbaa !67
  %6549 = uitofp i16 %6548 to double
  br label %6551

6550:                                             ; preds = %6516
  br label %6551

6551:                                             ; preds = %6550, %6539
  %6552 = phi double [ %6549, %6539 ], [ 0.000000e+00, %6550 ]
  store double %6552, ptr %515, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %516) #7
  %6553 = load ptr, ptr %486, align 8, !tbaa !5
  %6554 = load i32, ptr %513, align 4, !tbaa !9
  %6555 = load i32, ptr %20, align 4, !tbaa !9
  %6556 = mul nsw i32 %6554, %6555
  %6557 = load i32, ptr %514, align 4, !tbaa !9
  %6558 = add nsw i32 %6556, %6557
  %6559 = sext i32 %6558 to i64
  %6560 = getelementptr inbounds i16, ptr %6553, i64 %6559
  %6561 = load i16, ptr %6560, align 2, !tbaa !67
  %6562 = uitofp i16 %6561 to double
  store double %6562, ptr %516, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %517) #7
  %6563 = load double, ptr %515, align 8, !tbaa !17
  %6564 = fcmp ole double 0.000000e+00, %6563
  br i1 %6564, label %6565, label %6567

6565:                                             ; preds = %6551
  %6566 = load double, ptr %515, align 8, !tbaa !17
  br label %6570

6567:                                             ; preds = %6551
  %6568 = load double, ptr %515, align 8, !tbaa !17
  %6569 = fneg double %6568
  br label %6570

6570:                                             ; preds = %6567, %6565
  %6571 = phi double [ %6566, %6565 ], [ %6569, %6567 ]
  store double %6571, ptr %517, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %518) #7
  %6572 = load double, ptr %516, align 8, !tbaa !17
  %6573 = fcmp ole double 0.000000e+00, %6572
  br i1 %6573, label %6574, label %6576

6574:                                             ; preds = %6570
  %6575 = load double, ptr %516, align 8, !tbaa !17
  br label %6579

6576:                                             ; preds = %6570
  %6577 = load double, ptr %516, align 8, !tbaa !17
  %6578 = fneg double %6577
  br label %6579

6579:                                             ; preds = %6576, %6574
  %6580 = phi double [ %6575, %6574 ], [ %6578, %6576 ]
  store double %6580, ptr %518, align 8, !tbaa !17
  %6581 = load double, ptr %516, align 8, !tbaa !17
  %6582 = load ptr, ptr %9, align 8, !tbaa !5
  %6583 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %6582, i32 0, i32 11
  %6584 = load double, ptr %6583, align 8, !tbaa !14
  %6585 = fcmp olt double %6581, %6584
  br i1 %6585, label %6586, label %6590

6586:                                             ; preds = %6579
  %6587 = load double, ptr %516, align 8, !tbaa !17
  %6588 = load ptr, ptr %9, align 8, !tbaa !5
  %6589 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %6588, i32 0, i32 11
  store double %6587, ptr %6589, align 8, !tbaa !14
  br label %6590

6590:                                             ; preds = %6586, %6579
  %6591 = load double, ptr %516, align 8, !tbaa !17
  %6592 = load ptr, ptr %9, align 8, !tbaa !5
  %6593 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %6592, i32 0, i32 12
  %6594 = load double, ptr %6593, align 8, !tbaa !20
  %6595 = fcmp ogt double %6591, %6594
  br i1 %6595, label %6596, label %6600

6596:                                             ; preds = %6590
  %6597 = load double, ptr %516, align 8, !tbaa !17
  %6598 = load ptr, ptr %9, align 8, !tbaa !5
  %6599 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %6598, i32 0, i32 12
  store double %6597, ptr %6599, align 8, !tbaa !20
  br label %6600

6600:                                             ; preds = %6596, %6590
  %6601 = load double, ptr %515, align 8, !tbaa !17
  %6602 = load double, ptr %515, align 8, !tbaa !17
  %6603 = fcmp oeq double %6601, %6602
  br i1 %6603, label %6604, label %6752

6604:                                             ; preds = %6600
  %6605 = load double, ptr %27, align 8, !tbaa !17
  %6606 = load double, ptr %517, align 8, !tbaa !17
  %6607 = fcmp ogt double %6605, %6606
  br i1 %6607, label %6612, label %6608

6608:                                             ; preds = %6604
  %6609 = load double, ptr %515, align 8, !tbaa !17
  %6610 = load double, ptr %516, align 8, !tbaa !17
  %6611 = fcmp oeq double %6609, %6610
  br i1 %6611, label %6612, label %6752

6612:                                             ; preds = %6608, %6604
  call void @llvm.lifetime.start.p0(i64 8, ptr %519) #7
  %6613 = load ptr, ptr %487, align 8, !tbaa !5
  %6614 = icmp ne ptr null, %6613
  br i1 %6614, label %6615, label %6629

6615:                                             ; preds = %6612
  %6616 = load double, ptr %516, align 8, !tbaa !17
  %6617 = load double, ptr %515, align 8, !tbaa !17
  %6618 = fcmp olt double %6616, %6617
  br i1 %6618, label %6619, label %6623

6619:                                             ; preds = %6615
  %6620 = load double, ptr %515, align 8, !tbaa !17
  %6621 = load double, ptr %516, align 8, !tbaa !17
  %6622 = fsub double %6620, %6621
  br label %6627

6623:                                             ; preds = %6615
  %6624 = load double, ptr %516, align 8, !tbaa !17
  %6625 = load double, ptr %515, align 8, !tbaa !17
  %6626 = fsub double %6624, %6625
  br label %6627

6627:                                             ; preds = %6623, %6619
  %6628 = phi double [ %6622, %6619 ], [ %6626, %6623 ]
  br label %6630

6629:                                             ; preds = %6612
  br label %6630

6630:                                             ; preds = %6629, %6627
  %6631 = phi double [ %6628, %6627 ], [ 0.000000e+00, %6629 ]
  store double %6631, ptr %519, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %520) #7
  %6632 = load double, ptr %518, align 8, !tbaa !17
  %6633 = fcmp oge double 0.000000e+00, %6632
  br i1 %6633, label %6634, label %6636

6634:                                             ; preds = %6630
  %6635 = load double, ptr %517, align 8, !tbaa !17
  br label %6646

6636:                                             ; preds = %6630
  %6637 = load double, ptr %519, align 8, !tbaa !17
  %6638 = load double, ptr %518, align 8, !tbaa !17
  %6639 = fcmp olt double 0.000000e+00, %6638
  br i1 %6639, label %6640, label %6642

6640:                                             ; preds = %6636
  %6641 = load double, ptr %518, align 8, !tbaa !17
  br label %6643

6642:                                             ; preds = %6636
  br label %6643

6643:                                             ; preds = %6642, %6640
  %6644 = phi double [ %6641, %6640 ], [ 1.000000e+00, %6642 ]
  %6645 = fdiv double %6637, %6644
  br label %6646

6646:                                             ; preds = %6643, %6634
  %6647 = phi double [ %6635, %6634 ], [ %6645, %6643 ]
  store double %6647, ptr %520, align 8, !tbaa !17
  %6648 = load double, ptr %515, align 8, !tbaa !17
  %6649 = load ptr, ptr %9, align 8, !tbaa !5
  %6650 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %6649, i32 0, i32 16
  %6651 = load double, ptr %6650, align 8, !tbaa !21
  %6652 = fcmp olt double %6648, %6651
  br i1 %6652, label %6653, label %6657

6653:                                             ; preds = %6646
  %6654 = load double, ptr %515, align 8, !tbaa !17
  %6655 = load ptr, ptr %9, align 8, !tbaa !5
  %6656 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %6655, i32 0, i32 16
  store double %6654, ptr %6656, align 8, !tbaa !21
  br label %6657

6657:                                             ; preds = %6653, %6646
  %6658 = load double, ptr %515, align 8, !tbaa !17
  %6659 = load ptr, ptr %9, align 8, !tbaa !5
  %6660 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %6659, i32 0, i32 17
  %6661 = load double, ptr %6660, align 8, !tbaa !22
  %6662 = fcmp ogt double %6658, %6661
  br i1 %6662, label %6663, label %6667

6663:                                             ; preds = %6657
  %6664 = load double, ptr %515, align 8, !tbaa !17
  %6665 = load ptr, ptr %9, align 8, !tbaa !5
  %6666 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %6665, i32 0, i32 17
  store double %6664, ptr %6666, align 8, !tbaa !22
  br label %6667

6667:                                             ; preds = %6663, %6657
  %6668 = load ptr, ptr %9, align 8, !tbaa !5
  %6669 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %6668, i32 0, i32 5
  %6670 = load double, ptr %6669, align 8, !tbaa !23
  %6671 = load double, ptr %519, align 8, !tbaa !17
  %6672 = fcmp olt double %6670, %6671
  br i1 %6672, label %6673, label %6689

6673:                                             ; preds = %6667
  %6674 = load double, ptr %519, align 8, !tbaa !17
  %6675 = load ptr, ptr %9, align 8, !tbaa !5
  %6676 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %6675, i32 0, i32 5
  store double %6674, ptr %6676, align 8, !tbaa !23
  %6677 = load double, ptr %516, align 8, !tbaa !17
  %6678 = load ptr, ptr %9, align 8, !tbaa !5
  %6679 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %6678, i32 0, i32 20
  store double %6677, ptr %6679, align 8, !tbaa !24
  %6680 = load double, ptr %515, align 8, !tbaa !17
  %6681 = load ptr, ptr %9, align 8, !tbaa !5
  %6682 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %6681, i32 0, i32 21
  store double %6680, ptr %6682, align 8, !tbaa !25
  %6683 = load i32, ptr %514, align 4, !tbaa !9
  %6684 = load ptr, ptr %9, align 8, !tbaa !5
  %6685 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %6684, i32 0, i32 22
  store i32 %6683, ptr %6685, align 8, !tbaa !26
  %6686 = load i32, ptr %513, align 4, !tbaa !9
  %6687 = load ptr, ptr %9, align 8, !tbaa !5
  %6688 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %6687, i32 0, i32 23
  store i32 %6686, ptr %6688, align 4, !tbaa !27
  br label %6689

6689:                                             ; preds = %6673, %6667
  %6690 = load ptr, ptr %9, align 8, !tbaa !5
  %6691 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %6690, i32 0, i32 6
  %6692 = load double, ptr %6691, align 8, !tbaa !28
  %6693 = load double, ptr %520, align 8, !tbaa !17
  %6694 = fcmp olt double %6692, %6693
  br i1 %6694, label %6695, label %6699

6695:                                             ; preds = %6689
  %6696 = load double, ptr %520, align 8, !tbaa !17
  %6697 = load ptr, ptr %9, align 8, !tbaa !5
  %6698 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %6697, i32 0, i32 6
  store double %6696, ptr %6698, align 8, !tbaa !28
  br label %6699

6699:                                             ; preds = %6695, %6689
  %6700 = load double, ptr %520, align 8, !tbaa !17
  %6701 = load double, ptr %520, align 8, !tbaa !17
  %6702 = fmul double %6700, %6701
  store double %6702, ptr %510, align 8, !tbaa !17
  %6703 = load double, ptr %27, align 8, !tbaa !17
  %6704 = load double, ptr %510, align 8, !tbaa !17
  %6705 = fcmp ogt double %6703, %6704
  br i1 %6705, label %6706, label %6725

6706:                                             ; preds = %6699
  %6707 = load double, ptr %499, align 8, !tbaa !17
  %6708 = load double, ptr %510, align 8, !tbaa !17
  %6709 = fsub double %6708, %6707
  store double %6709, ptr %510, align 8, !tbaa !17
  %6710 = load ptr, ptr %9, align 8, !tbaa !5
  %6711 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %6710, i32 0, i32 8
  %6712 = load double, ptr %6711, align 8, !tbaa !29
  %6713 = load double, ptr %510, align 8, !tbaa !17
  %6714 = fadd double %6712, %6713
  store double %6714, ptr %511, align 8, !tbaa !17
  %6715 = load double, ptr %511, align 8, !tbaa !17
  %6716 = load ptr, ptr %9, align 8, !tbaa !5
  %6717 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %6716, i32 0, i32 8
  %6718 = load double, ptr %6717, align 8, !tbaa !29
  %6719 = fsub double %6715, %6718
  %6720 = load double, ptr %510, align 8, !tbaa !17
  %6721 = fsub double %6719, %6720
  store double %6721, ptr %499, align 8, !tbaa !17
  %6722 = load double, ptr %511, align 8, !tbaa !17
  %6723 = load ptr, ptr %9, align 8, !tbaa !5
  %6724 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %6723, i32 0, i32 8
  store double %6722, ptr %6724, align 8, !tbaa !29
  br label %6725

6725:                                             ; preds = %6706, %6699
  %6726 = load double, ptr %518, align 8, !tbaa !17
  %6727 = call double @libxsmm_kahan_sum(double noundef %6726, ptr noundef %507, ptr noundef %504)
  %6728 = load double, ptr %517, align 8, !tbaa !17
  %6729 = call double @libxsmm_kahan_sum(double noundef %6728, ptr noundef %508, ptr noundef %505)
  %6730 = load double, ptr %519, align 8, !tbaa !17
  %6731 = call double @libxsmm_kahan_sum(double noundef %6730, ptr noundef %509, ptr noundef %506)
  %6732 = load double, ptr %516, align 8, !tbaa !17
  %6733 = load double, ptr %516, align 8, !tbaa !17
  %6734 = fmul double %6732, %6733
  %6735 = call double @libxsmm_kahan_sum(double noundef %6734, ptr noundef %491, ptr noundef %489)
  %6736 = load double, ptr %515, align 8, !tbaa !17
  %6737 = load double, ptr %515, align 8, !tbaa !17
  %6738 = fmul double %6736, %6737
  %6739 = call double @libxsmm_kahan_sum(double noundef %6738, ptr noundef %492, ptr noundef %490)
  %6740 = load double, ptr %519, align 8, !tbaa !17
  %6741 = load double, ptr %519, align 8, !tbaa !17
  %6742 = fmul double %6740, %6741
  store double %6742, ptr %510, align 8, !tbaa !17
  %6743 = load double, ptr %27, align 8, !tbaa !17
  %6744 = load double, ptr %510, align 8, !tbaa !17
  %6745 = fcmp ogt double %6743, %6744
  br i1 %6745, label %6746, label %6751

6746:                                             ; preds = %6725
  %6747 = load double, ptr %510, align 8, !tbaa !17
  %6748 = load ptr, ptr %9, align 8, !tbaa !5
  %6749 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %6748, i32 0, i32 7
  %6750 = call double @libxsmm_kahan_sum(double noundef %6747, ptr noundef %6749, ptr noundef %488)
  br label %6751

6751:                                             ; preds = %6746, %6725
  call void @llvm.lifetime.end.p0(i64 8, ptr %520) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %519) #7
  br label %6776

6752:                                             ; preds = %6608, %6600
  %6753 = load double, ptr %516, align 8, !tbaa !17
  %6754 = load double, ptr %516, align 8, !tbaa !17
  %6755 = fcmp oeq double %6753, %6754
  br i1 %6755, label %6756, label %6760

6756:                                             ; preds = %6752
  %6757 = load double, ptr %27, align 8, !tbaa !17
  %6758 = load double, ptr %518, align 8, !tbaa !17
  %6759 = fcmp ogt double %6757, %6758
  br label %6760

6760:                                             ; preds = %6756, %6752
  %6761 = phi i1 [ false, %6752 ], [ %6759, %6756 ]
  %6762 = zext i1 %6761 to i64
  %6763 = select i1 %6761, i32 1, i32 2
  store i32 %6763, ptr %19, align 4, !tbaa !9
  %6764 = load i32, ptr %514, align 4, !tbaa !9
  %6765 = load ptr, ptr %9, align 8, !tbaa !5
  %6766 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %6765, i32 0, i32 22
  store i32 %6764, ptr %6766, align 8, !tbaa !26
  %6767 = load i32, ptr %513, align 4, !tbaa !9
  %6768 = load ptr, ptr %9, align 8, !tbaa !5
  %6769 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %6768, i32 0, i32 23
  store i32 %6767, ptr %6769, align 4, !tbaa !27
  %6770 = load double, ptr %516, align 8, !tbaa !17
  %6771 = load ptr, ptr %9, align 8, !tbaa !5
  %6772 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %6771, i32 0, i32 20
  store double %6770, ptr %6772, align 8, !tbaa !24
  %6773 = load double, ptr %515, align 8, !tbaa !17
  %6774 = load ptr, ptr %9, align 8, !tbaa !5
  %6775 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %6774, i32 0, i32 21
  store double %6773, ptr %6775, align 8, !tbaa !25
  store i32 114, ptr %60, align 4
  br label %6777

6776:                                             ; preds = %6751
  store i32 0, ptr %60, align 4
  br label %6777

6777:                                             ; preds = %6776, %6760
  call void @llvm.lifetime.end.p0(i64 8, ptr %518) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %517) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %516) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %515) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %514) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %513) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %512) #7
  %6778 = load i32, ptr %60, align 4
  switch i32 %6778, label %15542 [
    i32 0, label %6779
    i32 114, label %6783
  ]

6779:                                             ; preds = %6777
  br label %6780

6780:                                             ; preds = %6779
  %6781 = load i32, ptr %503, align 4, !tbaa !9
  %6782 = add nsw i32 %6781, 1
  store i32 %6782, ptr %503, align 4, !tbaa !9
  br label %6512, !llvm.loop !81

6783:                                             ; preds = %6777, %6512
  %6784 = load i32, ptr %19, align 4, !tbaa !9
  %6785 = icmp eq i32 0, %6784
  br i1 %6785, label %6786, label %6817

6786:                                             ; preds = %6783
  %6787 = load double, ptr %507, align 8, !tbaa !17
  %6788 = load ptr, ptr %9, align 8, !tbaa !5
  %6789 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %6788, i32 0, i32 10
  %6790 = call double @libxsmm_kahan_sum(double noundef %6787, ptr noundef %6789, ptr noundef %497)
  %6791 = load double, ptr %508, align 8, !tbaa !17
  %6792 = load ptr, ptr %9, align 8, !tbaa !5
  %6793 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %6792, i32 0, i32 15
  %6794 = call double @libxsmm_kahan_sum(double noundef %6791, ptr noundef %6793, ptr noundef %498)
  %6795 = load ptr, ptr %9, align 8, !tbaa !5
  %6796 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %6795, i32 0, i32 2
  %6797 = load double, ptr %6796, align 8, !tbaa !32
  %6798 = load double, ptr %509, align 8, !tbaa !17
  %6799 = fcmp olt double %6797, %6798
  br i1 %6799, label %6800, label %6804

6800:                                             ; preds = %6786
  %6801 = load double, ptr %509, align 8, !tbaa !17
  %6802 = load ptr, ptr %9, align 8, !tbaa !5
  %6803 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %6802, i32 0, i32 2
  store double %6801, ptr %6803, align 8, !tbaa !32
  br label %6804

6804:                                             ; preds = %6800, %6786
  %6805 = load double, ptr %493, align 8, !tbaa !17
  %6806 = load double, ptr %507, align 8, !tbaa !17
  %6807 = fcmp olt double %6805, %6806
  br i1 %6807, label %6808, label %6810

6808:                                             ; preds = %6804
  %6809 = load double, ptr %507, align 8, !tbaa !17
  store double %6809, ptr %493, align 8, !tbaa !17
  br label %6810

6810:                                             ; preds = %6808, %6804
  %6811 = load double, ptr %494, align 8, !tbaa !17
  %6812 = load double, ptr %508, align 8, !tbaa !17
  %6813 = fcmp olt double %6811, %6812
  br i1 %6813, label %6814, label %6816

6814:                                             ; preds = %6810
  %6815 = load double, ptr %508, align 8, !tbaa !17
  store double %6815, ptr %494, align 8, !tbaa !17
  br label %6816

6816:                                             ; preds = %6814, %6810
  br label %6818

6817:                                             ; preds = %6783
  store i32 111, ptr %60, align 4
  br label %6819

6818:                                             ; preds = %6816
  store i32 0, ptr %60, align 4
  br label %6819

6819:                                             ; preds = %6818, %6817
  call void @llvm.lifetime.end.p0(i64 8, ptr %511) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %510) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %509) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %508) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %507) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %506) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %505) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %504) #7
  %6820 = load i32, ptr %60, align 4
  switch i32 %6820, label %15542 [
    i32 0, label %6821
    i32 111, label %6825
  ]

6821:                                             ; preds = %6819
  br label %6822

6822:                                             ; preds = %6821
  %6823 = load i32, ptr %502, align 4, !tbaa !9
  %6824 = add nsw i32 %6823, 1
  store i32 %6824, ptr %502, align 4, !tbaa !9
  br label %6507, !llvm.loop !82

6825:                                             ; preds = %6819, %6507
  %6826 = load i32, ptr %19, align 4, !tbaa !9
  %6827 = icmp eq i32 0, %6826
  br i1 %6827, label %6828, label %7092

6828:                                             ; preds = %6825
  call void @llvm.lifetime.start.p0(i64 8, ptr %521) #7
  store double 0.000000e+00, ptr %521, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %522) #7
  store double 0.000000e+00, ptr %522, align 8, !tbaa !17
  %6829 = load ptr, ptr %9, align 8, !tbaa !5
  %6830 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %6829, i32 0, i32 14
  %6831 = load double, ptr %6830, align 8, !tbaa !34
  %6832 = fcmp oeq double 0.000000e+00, %6831
  br i1 %6832, label %6833, label %6834

6833:                                             ; preds = %6828
  br label %6835

6834:                                             ; preds = %6828
  call void @__assert_fail(ptr noundef @.str.1, ptr noundef @.str.2, i32 noundef 130, ptr noundef @__PRETTY_FUNCTION__.libxsmm_matdiff) #9
  unreachable

6835:                                             ; preds = %6833
  %6836 = load ptr, ptr %9, align 8, !tbaa !5
  %6837 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %6836, i32 0, i32 19
  %6838 = load double, ptr %6837, align 8, !tbaa !35
  %6839 = fcmp oeq double 0.000000e+00, %6838
  br i1 %6839, label %6840, label %6841

6840:                                             ; preds = %6835
  br label %6842

6841:                                             ; preds = %6835
  call void @__assert_fail(ptr noundef @.str.3, ptr noundef @.str.2, i32 noundef 131, ptr noundef @__PRETTY_FUNCTION__.libxsmm_matdiff) #9
  unreachable

6842:                                             ; preds = %6840
  %6843 = load i64, ptr %24, align 8, !tbaa !12
  %6844 = icmp ne i64 0, %6843
  br i1 %6844, label %6845, label %6862

6845:                                             ; preds = %6842
  %6846 = load ptr, ptr %9, align 8, !tbaa !5
  %6847 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %6846, i32 0, i32 10
  %6848 = load double, ptr %6847, align 8, !tbaa !36
  %6849 = load i64, ptr %24, align 8, !tbaa !12
  %6850 = uitofp i64 %6849 to double
  %6851 = fdiv double %6848, %6850
  %6852 = load ptr, ptr %9, align 8, !tbaa !5
  %6853 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %6852, i32 0, i32 13
  store double %6851, ptr %6853, align 8, !tbaa !37
  %6854 = load ptr, ptr %9, align 8, !tbaa !5
  %6855 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %6854, i32 0, i32 15
  %6856 = load double, ptr %6855, align 8, !tbaa !38
  %6857 = load i64, ptr %24, align 8, !tbaa !12
  %6858 = uitofp i64 %6857 to double
  %6859 = fdiv double %6856, %6858
  %6860 = load ptr, ptr %9, align 8, !tbaa !5
  %6861 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %6860, i32 0, i32 18
  store double %6859, ptr %6861, align 8, !tbaa !39
  br label %6862

6862:                                             ; preds = %6845, %6842
  %6863 = load double, ptr %493, align 8, !tbaa !17
  %6864 = fcmp oge double 0.000000e+00, %6863
  br i1 %6864, label %6865, label %6867

6865:                                             ; preds = %6862
  %6866 = load double, ptr %494, align 8, !tbaa !17
  br label %6879

6867:                                             ; preds = %6862
  %6868 = load ptr, ptr %9, align 8, !tbaa !5
  %6869 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %6868, i32 0, i32 2
  %6870 = load double, ptr %6869, align 8, !tbaa !32
  %6871 = load double, ptr %493, align 8, !tbaa !17
  %6872 = fcmp olt double 0.000000e+00, %6871
  br i1 %6872, label %6873, label %6875

6873:                                             ; preds = %6867
  %6874 = load double, ptr %493, align 8, !tbaa !17
  br label %6876

6875:                                             ; preds = %6867
  br label %6876

6876:                                             ; preds = %6875, %6873
  %6877 = phi double [ %6874, %6873 ], [ 1.000000e+00, %6875 ]
  %6878 = fdiv double %6870, %6877
  br label %6879

6879:                                             ; preds = %6876, %6865
  %6880 = phi double [ %6866, %6865 ], [ %6878, %6876 ]
  %6881 = load ptr, ptr %9, align 8, !tbaa !5
  %6882 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %6881, i32 0, i32 3
  store double %6880, ptr %6882, align 8, !tbaa !40
  %6883 = load double, ptr %491, align 8, !tbaa !17
  %6884 = fcmp oge double 0.000000e+00, %6883
  br i1 %6884, label %6885, label %6903

6885:                                             ; preds = %6879
  %6886 = load double, ptr %492, align 8, !tbaa !17
  %6887 = load double, ptr %492, align 8, !tbaa !17
  %6888 = fmul double %6886, %6887
  %6889 = load ptr, ptr %9, align 8, !tbaa !5
  %6890 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %6889, i32 0, i32 7
  %6891 = load double, ptr %6890, align 8, !tbaa !41
  %6892 = fcmp olt double %6888, %6891
  br i1 %6892, label %6893, label %6897

6893:                                             ; preds = %6885
  %6894 = load double, ptr %492, align 8, !tbaa !17
  %6895 = load double, ptr %492, align 8, !tbaa !17
  %6896 = fmul double %6894, %6895
  br label %6901

6897:                                             ; preds = %6885
  %6898 = load ptr, ptr %9, align 8, !tbaa !5
  %6899 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %6898, i32 0, i32 7
  %6900 = load double, ptr %6899, align 8, !tbaa !41
  br label %6901

6901:                                             ; preds = %6897, %6893
  %6902 = phi double [ %6896, %6893 ], [ %6900, %6897 ]
  br label %6915

6903:                                             ; preds = %6879
  %6904 = load ptr, ptr %9, align 8, !tbaa !5
  %6905 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %6904, i32 0, i32 7
  %6906 = load double, ptr %6905, align 8, !tbaa !41
  %6907 = load double, ptr %491, align 8, !tbaa !17
  %6908 = fcmp olt double 0.000000e+00, %6907
  br i1 %6908, label %6909, label %6911

6909:                                             ; preds = %6903
  %6910 = load double, ptr %491, align 8, !tbaa !17
  br label %6912

6911:                                             ; preds = %6903
  br label %6912

6912:                                             ; preds = %6911, %6909
  %6913 = phi double [ %6910, %6909 ], [ 1.000000e+00, %6911 ]
  %6914 = fdiv double %6906, %6913
  br label %6915

6915:                                             ; preds = %6912, %6901
  %6916 = phi double [ %6902, %6901 ], [ %6914, %6912 ]
  %6917 = load ptr, ptr %9, align 8, !tbaa !5
  %6918 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %6917, i32 0, i32 4
  store double %6916, ptr %6918, align 8, !tbaa !42
  store i32 0, ptr %503, align 4, !tbaa !9
  br label %6919

6919:                                             ; preds = %7066, %6915
  %6920 = load i32, ptr %503, align 4, !tbaa !9
  %6921 = load i32, ptr %25, align 4, !tbaa !9
  %6922 = icmp slt i32 %6920, %6921
  br i1 %6922, label %6923, label %7069

6923:                                             ; preds = %6919
  call void @llvm.lifetime.start.p0(i64 8, ptr %523) #7
  store double 0.000000e+00, ptr %523, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %524) #7
  store double 0.000000e+00, ptr %524, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %525) #7
  store double 0.000000e+00, ptr %525, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %526) #7
  store double 0.000000e+00, ptr %526, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %527) #7
  store double 0.000000e+00, ptr %527, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %528) #7
  store double 0.000000e+00, ptr %528, align 8, !tbaa !17
  store i32 0, ptr %502, align 4, !tbaa !9
  br label %6924

6924:                                             ; preds = %7040, %6923
  %6925 = load i32, ptr %502, align 4, !tbaa !9
  %6926 = load i32, ptr %26, align 4, !tbaa !9
  %6927 = icmp slt i32 %6925, %6926
  br i1 %6927, label %6928, label %7043

6928:                                             ; preds = %6924
  call void @llvm.lifetime.start.p0(i64 8, ptr %529) #7
  %6929 = load i64, ptr %501, align 8, !tbaa !12
  %6930 = load i32, ptr %502, align 4, !tbaa !9
  %6931 = load i32, ptr %25, align 4, !tbaa !9
  %6932 = mul nsw i32 %6930, %6931
  %6933 = load i32, ptr %503, align 4, !tbaa !9
  %6934 = add nsw i32 %6932, %6933
  %6935 = sext i32 %6934 to i64
  %6936 = mul i64 %6929, %6935
  %6937 = load i64, ptr %500, align 8, !tbaa !12
  %6938 = urem i64 %6936, %6937
  store i64 %6938, ptr %529, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 4, ptr %530) #7
  %6939 = load i64, ptr %529, align 8, !tbaa !12
  %6940 = load i32, ptr %25, align 4, !tbaa !9
  %6941 = sext i32 %6940 to i64
  %6942 = udiv i64 %6939, %6941
  %6943 = trunc i64 %6942 to i32
  store i32 %6943, ptr %530, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %531) #7
  %6944 = load i64, ptr %529, align 8, !tbaa !12
  %6945 = load i32, ptr %25, align 4, !tbaa !9
  %6946 = sext i32 %6945 to i64
  %6947 = urem i64 %6944, %6946
  %6948 = trunc i64 %6947 to i32
  store i32 %6948, ptr %531, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %532) #7
  %6949 = load ptr, ptr %486, align 8, !tbaa !5
  %6950 = load i32, ptr %530, align 4, !tbaa !9
  %6951 = load i32, ptr %20, align 4, !tbaa !9
  %6952 = mul nsw i32 %6950, %6951
  %6953 = load i32, ptr %531, align 4, !tbaa !9
  %6954 = add nsw i32 %6952, %6953
  %6955 = sext i32 %6954 to i64
  %6956 = getelementptr inbounds i16, ptr %6949, i64 %6955
  %6957 = load i16, ptr %6956, align 2, !tbaa !67
  %6958 = uitofp i16 %6957 to double
  store double %6958, ptr %532, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %533) #7
  %6959 = load ptr, ptr %487, align 8, !tbaa !5
  %6960 = icmp ne ptr null, %6959
  br i1 %6960, label %6961, label %6972

6961:                                             ; preds = %6928
  %6962 = load ptr, ptr %487, align 8, !tbaa !5
  %6963 = load i32, ptr %530, align 4, !tbaa !9
  %6964 = load i32, ptr %21, align 4, !tbaa !9
  %6965 = mul nsw i32 %6963, %6964
  %6966 = load i32, ptr %531, align 4, !tbaa !9
  %6967 = add nsw i32 %6965, %6966
  %6968 = sext i32 %6967 to i64
  %6969 = getelementptr inbounds i16, ptr %6962, i64 %6968
  %6970 = load i16, ptr %6969, align 2, !tbaa !67
  %6971 = uitofp i16 %6970 to double
  br label %6973

6972:                                             ; preds = %6928
  br label %6973

6973:                                             ; preds = %6972, %6961
  %6974 = phi double [ %6971, %6961 ], [ 0.000000e+00, %6972 ]
  store double %6974, ptr %533, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %534) #7
  %6975 = load ptr, ptr %487, align 8, !tbaa !5
  %6976 = icmp ne ptr null, %6975
  br i1 %6976, label %6977, label %6991

6977:                                             ; preds = %6973
  %6978 = load double, ptr %532, align 8, !tbaa !17
  %6979 = load double, ptr %533, align 8, !tbaa !17
  %6980 = fcmp olt double %6978, %6979
  br i1 %6980, label %6981, label %6985

6981:                                             ; preds = %6977
  %6982 = load double, ptr %533, align 8, !tbaa !17
  %6983 = load double, ptr %532, align 8, !tbaa !17
  %6984 = fsub double %6982, %6983
  br label %6989

6985:                                             ; preds = %6977
  %6986 = load double, ptr %532, align 8, !tbaa !17
  %6987 = load double, ptr %533, align 8, !tbaa !17
  %6988 = fsub double %6986, %6987
  br label %6989

6989:                                             ; preds = %6985, %6981
  %6990 = phi double [ %6984, %6981 ], [ %6988, %6985 ]
  br label %6992

6991:                                             ; preds = %6973
  br label %6992

6992:                                             ; preds = %6991, %6989
  %6993 = phi double [ %6990, %6989 ], [ 0.000000e+00, %6991 ]
  store double %6993, ptr %534, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %535) #7
  %6994 = load double, ptr %532, align 8, !tbaa !17
  %6995 = load ptr, ptr %9, align 8, !tbaa !5
  %6996 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %6995, i32 0, i32 13
  %6997 = load double, ptr %6996, align 8, !tbaa !37
  %6998 = fsub double %6994, %6997
  store double %6998, ptr %535, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %536) #7
  %6999 = load double, ptr %533, align 8, !tbaa !17
  %7000 = load ptr, ptr %9, align 8, !tbaa !5
  %7001 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %7000, i32 0, i32 18
  %7002 = load double, ptr %7001, align 8, !tbaa !39
  %7003 = fsub double %6999, %7002
  store double %7003, ptr %536, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %537) #7
  %7004 = load double, ptr %532, align 8, !tbaa !17
  %7005 = fcmp ole double 0.000000e+00, %7004
  br i1 %7005, label %7006, label %7008

7006:                                             ; preds = %6992
  %7007 = load double, ptr %532, align 8, !tbaa !17
  br label %7011

7008:                                             ; preds = %6992
  %7009 = load double, ptr %532, align 8, !tbaa !17
  %7010 = fneg double %7009
  br label %7011

7011:                                             ; preds = %7008, %7006
  %7012 = phi double [ %7007, %7006 ], [ %7010, %7008 ]
  store double %7012, ptr %537, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %538) #7
  %7013 = load double, ptr %533, align 8, !tbaa !17
  %7014 = fcmp ole double 0.000000e+00, %7013
  br i1 %7014, label %7015, label %7017

7015:                                             ; preds = %7011
  %7016 = load double, ptr %533, align 8, !tbaa !17
  br label %7020

7017:                                             ; preds = %7011
  %7018 = load double, ptr %533, align 8, !tbaa !17
  %7019 = fneg double %7018
  br label %7020

7020:                                             ; preds = %7017, %7015
  %7021 = phi double [ %7016, %7015 ], [ %7019, %7017 ]
  store double %7021, ptr %538, align 8, !tbaa !17
  %7022 = load double, ptr %535, align 8, !tbaa !17
  %7023 = load double, ptr %535, align 8, !tbaa !17
  %7024 = fmul double %7022, %7023
  %7025 = load ptr, ptr %9, align 8, !tbaa !5
  %7026 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %7025, i32 0, i32 14
  %7027 = call double @libxsmm_kahan_sum(double noundef %7024, ptr noundef %7026, ptr noundef %521)
  %7028 = load double, ptr %536, align 8, !tbaa !17
  %7029 = load double, ptr %536, align 8, !tbaa !17
  %7030 = fmul double %7028, %7029
  %7031 = load ptr, ptr %9, align 8, !tbaa !5
  %7032 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %7031, i32 0, i32 19
  %7033 = call double @libxsmm_kahan_sum(double noundef %7030, ptr noundef %7032, ptr noundef %522)
  %7034 = load double, ptr %537, align 8, !tbaa !17
  %7035 = call double @libxsmm_kahan_sum(double noundef %7034, ptr noundef %526, ptr noundef %523)
  %7036 = load double, ptr %538, align 8, !tbaa !17
  %7037 = call double @libxsmm_kahan_sum(double noundef %7036, ptr noundef %527, ptr noundef %524)
  %7038 = load double, ptr %534, align 8, !tbaa !17
  %7039 = call double @libxsmm_kahan_sum(double noundef %7038, ptr noundef %528, ptr noundef %525)
  call void @llvm.lifetime.end.p0(i64 8, ptr %538) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %537) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %536) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %535) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %534) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %533) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %532) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %531) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %530) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %529) #7
  br label %7040

7040:                                             ; preds = %7020
  %7041 = load i32, ptr %502, align 4, !tbaa !9
  %7042 = add nsw i32 %7041, 1
  store i32 %7042, ptr %502, align 4, !tbaa !9
  br label %6924, !llvm.loop !83

7043:                                             ; preds = %6924
  %7044 = load ptr, ptr %9, align 8, !tbaa !5
  %7045 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %7044, i32 0, i32 0
  %7046 = load double, ptr %7045, align 8, !tbaa !44
  %7047 = load double, ptr %528, align 8, !tbaa !17
  %7048 = fcmp olt double %7046, %7047
  br i1 %7048, label %7049, label %7053

7049:                                             ; preds = %7043
  %7050 = load double, ptr %528, align 8, !tbaa !17
  %7051 = load ptr, ptr %9, align 8, !tbaa !5
  %7052 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %7051, i32 0, i32 0
  store double %7050, ptr %7052, align 8, !tbaa !44
  br label %7053

7053:                                             ; preds = %7049, %7043
  %7054 = load double, ptr %495, align 8, !tbaa !17
  %7055 = load double, ptr %526, align 8, !tbaa !17
  %7056 = fcmp olt double %7054, %7055
  br i1 %7056, label %7057, label %7059

7057:                                             ; preds = %7053
  %7058 = load double, ptr %526, align 8, !tbaa !17
  store double %7058, ptr %495, align 8, !tbaa !17
  br label %7059

7059:                                             ; preds = %7057, %7053
  %7060 = load double, ptr %496, align 8, !tbaa !17
  %7061 = load double, ptr %527, align 8, !tbaa !17
  %7062 = fcmp olt double %7060, %7061
  br i1 %7062, label %7063, label %7065

7063:                                             ; preds = %7059
  %7064 = load double, ptr %527, align 8, !tbaa !17
  store double %7064, ptr %496, align 8, !tbaa !17
  br label %7065

7065:                                             ; preds = %7063, %7059
  call void @llvm.lifetime.end.p0(i64 8, ptr %528) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %527) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %526) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %525) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %524) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %523) #7
  br label %7066

7066:                                             ; preds = %7065
  %7067 = load i32, ptr %503, align 4, !tbaa !9
  %7068 = add nsw i32 %7067, 1
  store i32 %7068, ptr %503, align 4, !tbaa !9
  br label %6919, !llvm.loop !84

7069:                                             ; preds = %6919
  %7070 = load double, ptr %495, align 8, !tbaa !17
  %7071 = fcmp oge double 0.000000e+00, %7070
  br i1 %7071, label %7072, label %7076

7072:                                             ; preds = %7069
  %7073 = load ptr, ptr %9, align 8, !tbaa !5
  %7074 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %7073, i32 0, i32 0
  %7075 = load double, ptr %7074, align 8, !tbaa !44
  br label %7088

7076:                                             ; preds = %7069
  %7077 = load ptr, ptr %9, align 8, !tbaa !5
  %7078 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %7077, i32 0, i32 0
  %7079 = load double, ptr %7078, align 8, !tbaa !44
  %7080 = load double, ptr %495, align 8, !tbaa !17
  %7081 = fcmp olt double 0.000000e+00, %7080
  br i1 %7081, label %7082, label %7084

7082:                                             ; preds = %7076
  %7083 = load double, ptr %495, align 8, !tbaa !17
  br label %7085

7084:                                             ; preds = %7076
  br label %7085

7085:                                             ; preds = %7084, %7082
  %7086 = phi double [ %7083, %7082 ], [ 1.000000e+00, %7084 ]
  %7087 = fdiv double %7079, %7086
  br label %7088

7088:                                             ; preds = %7085, %7072
  %7089 = phi double [ %7075, %7072 ], [ %7087, %7085 ]
  %7090 = load ptr, ptr %9, align 8, !tbaa !5
  %7091 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %7090, i32 0, i32 1
  store double %7089, ptr %7091, align 8, !tbaa !46
  call void @llvm.lifetime.end.p0(i64 8, ptr %522) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %521) #7
  br label %7092

7092:                                             ; preds = %7088, %6825
  call void @llvm.lifetime.end.p0(i64 4, ptr %503) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %502) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %501) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %500) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %499) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %498) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %497) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %496) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %495) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %494) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %493) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %492) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %491) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %490) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %489) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %488) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %487) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %486) #7
  br label %7093

7093:                                             ; preds = %7092, %6496
  br label %15200

7094:                                             ; preds = %1323
  %7095 = load i32, ptr %23, align 4, !tbaa !9
  %7096 = icmp eq i32 0, %7095
  br i1 %7096, label %7097, label %7650

7097:                                             ; preds = %7094
  call void @llvm.lifetime.start.p0(i64 8, ptr %539) #7
  %7098 = load ptr, ptr %13, align 8, !tbaa !5
  store ptr %7098, ptr %539, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %540) #7
  %7099 = load ptr, ptr %14, align 8, !tbaa !5
  store ptr %7099, ptr %540, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %541) #7
  store double 0.000000e+00, ptr %541, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %542) #7
  store double 0.000000e+00, ptr %542, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %543) #7
  store double 0.000000e+00, ptr %543, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %544) #7
  store double 0.000000e+00, ptr %544, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %545) #7
  store double 0.000000e+00, ptr %545, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %546) #7
  store double 0.000000e+00, ptr %546, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %547) #7
  store double 0.000000e+00, ptr %547, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %548) #7
  store double 0.000000e+00, ptr %548, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %549) #7
  store double 0.000000e+00, ptr %549, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %550) #7
  store double 0.000000e+00, ptr %550, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %551) #7
  store double 0.000000e+00, ptr %551, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %552) #7
  store double 0.000000e+00, ptr %552, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 4, ptr %553) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %554) #7
  store i32 0, ptr %553, align 4, !tbaa !9
  br label %7100

7100:                                             ; preds = %7397, %7097
  %7101 = load i32, ptr %553, align 4, !tbaa !9
  %7102 = load i32, ptr %26, align 4, !tbaa !9
  %7103 = icmp slt i32 %7101, %7102
  br i1 %7103, label %7104, label %7400

7104:                                             ; preds = %7100
  call void @llvm.lifetime.start.p0(i64 8, ptr %555) #7
  store double 0.000000e+00, ptr %555, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %556) #7
  store double 0.000000e+00, ptr %556, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %557) #7
  store double 0.000000e+00, ptr %557, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %558) #7
  store double 0.000000e+00, ptr %558, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %559) #7
  store double 0.000000e+00, ptr %559, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %560) #7
  store double 0.000000e+00, ptr %560, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %561) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %562) #7
  store i32 0, ptr %554, align 4, !tbaa !9
  br label %7105

7105:                                             ; preds = %7355, %7104
  %7106 = load i32, ptr %554, align 4, !tbaa !9
  %7107 = load i32, ptr %25, align 4, !tbaa !9
  %7108 = icmp slt i32 %7106, %7107
  br i1 %7108, label %7109, label %7358

7109:                                             ; preds = %7105
  call void @llvm.lifetime.start.p0(i64 4, ptr %563) #7
  %7110 = load i32, ptr %553, align 4, !tbaa !9
  store i32 %7110, ptr %563, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %564) #7
  %7111 = load i32, ptr %554, align 4, !tbaa !9
  store i32 %7111, ptr %564, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %565) #7
  %7112 = load ptr, ptr %540, align 8, !tbaa !5
  %7113 = icmp ne ptr null, %7112
  br i1 %7113, label %7114, label %7125

7114:                                             ; preds = %7109
  %7115 = load ptr, ptr %540, align 8, !tbaa !5
  %7116 = load i32, ptr %563, align 4, !tbaa !9
  %7117 = load i32, ptr %21, align 4, !tbaa !9
  %7118 = mul nsw i32 %7116, %7117
  %7119 = load i32, ptr %564, align 4, !tbaa !9
  %7120 = add nsw i32 %7118, %7119
  %7121 = sext i32 %7120 to i64
  %7122 = getelementptr inbounds i8, ptr %7115, i64 %7121
  %7123 = load i8, ptr %7122, align 1, !tbaa !11
  %7124 = sitofp i8 %7123 to double
  br label %7126

7125:                                             ; preds = %7109
  br label %7126

7126:                                             ; preds = %7125, %7114
  %7127 = phi double [ %7124, %7114 ], [ 0.000000e+00, %7125 ]
  store double %7127, ptr %565, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %566) #7
  %7128 = load ptr, ptr %539, align 8, !tbaa !5
  %7129 = load i32, ptr %563, align 4, !tbaa !9
  %7130 = load i32, ptr %20, align 4, !tbaa !9
  %7131 = mul nsw i32 %7129, %7130
  %7132 = load i32, ptr %564, align 4, !tbaa !9
  %7133 = add nsw i32 %7131, %7132
  %7134 = sext i32 %7133 to i64
  %7135 = getelementptr inbounds i8, ptr %7128, i64 %7134
  %7136 = load i8, ptr %7135, align 1, !tbaa !11
  %7137 = sitofp i8 %7136 to double
  store double %7137, ptr %566, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %567) #7
  %7138 = load double, ptr %565, align 8, !tbaa !17
  %7139 = fcmp ole double 0.000000e+00, %7138
  br i1 %7139, label %7140, label %7142

7140:                                             ; preds = %7126
  %7141 = load double, ptr %565, align 8, !tbaa !17
  br label %7145

7142:                                             ; preds = %7126
  %7143 = load double, ptr %565, align 8, !tbaa !17
  %7144 = fneg double %7143
  br label %7145

7145:                                             ; preds = %7142, %7140
  %7146 = phi double [ %7141, %7140 ], [ %7144, %7142 ]
  store double %7146, ptr %567, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %568) #7
  %7147 = load double, ptr %566, align 8, !tbaa !17
  %7148 = fcmp ole double 0.000000e+00, %7147
  br i1 %7148, label %7149, label %7151

7149:                                             ; preds = %7145
  %7150 = load double, ptr %566, align 8, !tbaa !17
  br label %7154

7151:                                             ; preds = %7145
  %7152 = load double, ptr %566, align 8, !tbaa !17
  %7153 = fneg double %7152
  br label %7154

7154:                                             ; preds = %7151, %7149
  %7155 = phi double [ %7150, %7149 ], [ %7153, %7151 ]
  store double %7155, ptr %568, align 8, !tbaa !17
  %7156 = load double, ptr %566, align 8, !tbaa !17
  %7157 = load ptr, ptr %9, align 8, !tbaa !5
  %7158 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %7157, i32 0, i32 11
  %7159 = load double, ptr %7158, align 8, !tbaa !14
  %7160 = fcmp olt double %7156, %7159
  br i1 %7160, label %7161, label %7165

7161:                                             ; preds = %7154
  %7162 = load double, ptr %566, align 8, !tbaa !17
  %7163 = load ptr, ptr %9, align 8, !tbaa !5
  %7164 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %7163, i32 0, i32 11
  store double %7162, ptr %7164, align 8, !tbaa !14
  br label %7165

7165:                                             ; preds = %7161, %7154
  %7166 = load double, ptr %566, align 8, !tbaa !17
  %7167 = load ptr, ptr %9, align 8, !tbaa !5
  %7168 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %7167, i32 0, i32 12
  %7169 = load double, ptr %7168, align 8, !tbaa !20
  %7170 = fcmp ogt double %7166, %7169
  br i1 %7170, label %7171, label %7175

7171:                                             ; preds = %7165
  %7172 = load double, ptr %566, align 8, !tbaa !17
  %7173 = load ptr, ptr %9, align 8, !tbaa !5
  %7174 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %7173, i32 0, i32 12
  store double %7172, ptr %7174, align 8, !tbaa !20
  br label %7175

7175:                                             ; preds = %7171, %7165
  %7176 = load double, ptr %565, align 8, !tbaa !17
  %7177 = load double, ptr %565, align 8, !tbaa !17
  %7178 = fcmp oeq double %7176, %7177
  br i1 %7178, label %7179, label %7327

7179:                                             ; preds = %7175
  %7180 = load double, ptr %27, align 8, !tbaa !17
  %7181 = load double, ptr %567, align 8, !tbaa !17
  %7182 = fcmp ogt double %7180, %7181
  br i1 %7182, label %7187, label %7183

7183:                                             ; preds = %7179
  %7184 = load double, ptr %565, align 8, !tbaa !17
  %7185 = load double, ptr %566, align 8, !tbaa !17
  %7186 = fcmp oeq double %7184, %7185
  br i1 %7186, label %7187, label %7327

7187:                                             ; preds = %7183, %7179
  call void @llvm.lifetime.start.p0(i64 8, ptr %569) #7
  %7188 = load ptr, ptr %540, align 8, !tbaa !5
  %7189 = icmp ne ptr null, %7188
  br i1 %7189, label %7190, label %7204

7190:                                             ; preds = %7187
  %7191 = load double, ptr %566, align 8, !tbaa !17
  %7192 = load double, ptr %565, align 8, !tbaa !17
  %7193 = fcmp olt double %7191, %7192
  br i1 %7193, label %7194, label %7198

7194:                                             ; preds = %7190
  %7195 = load double, ptr %565, align 8, !tbaa !17
  %7196 = load double, ptr %566, align 8, !tbaa !17
  %7197 = fsub double %7195, %7196
  br label %7202

7198:                                             ; preds = %7190
  %7199 = load double, ptr %566, align 8, !tbaa !17
  %7200 = load double, ptr %565, align 8, !tbaa !17
  %7201 = fsub double %7199, %7200
  br label %7202

7202:                                             ; preds = %7198, %7194
  %7203 = phi double [ %7197, %7194 ], [ %7201, %7198 ]
  br label %7205

7204:                                             ; preds = %7187
  br label %7205

7205:                                             ; preds = %7204, %7202
  %7206 = phi double [ %7203, %7202 ], [ 0.000000e+00, %7204 ]
  store double %7206, ptr %569, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %570) #7
  %7207 = load double, ptr %568, align 8, !tbaa !17
  %7208 = fcmp oge double 0.000000e+00, %7207
  br i1 %7208, label %7209, label %7211

7209:                                             ; preds = %7205
  %7210 = load double, ptr %567, align 8, !tbaa !17
  br label %7221

7211:                                             ; preds = %7205
  %7212 = load double, ptr %569, align 8, !tbaa !17
  %7213 = load double, ptr %568, align 8, !tbaa !17
  %7214 = fcmp olt double 0.000000e+00, %7213
  br i1 %7214, label %7215, label %7217

7215:                                             ; preds = %7211
  %7216 = load double, ptr %568, align 8, !tbaa !17
  br label %7218

7217:                                             ; preds = %7211
  br label %7218

7218:                                             ; preds = %7217, %7215
  %7219 = phi double [ %7216, %7215 ], [ 1.000000e+00, %7217 ]
  %7220 = fdiv double %7212, %7219
  br label %7221

7221:                                             ; preds = %7218, %7209
  %7222 = phi double [ %7210, %7209 ], [ %7220, %7218 ]
  store double %7222, ptr %570, align 8, !tbaa !17
  %7223 = load double, ptr %565, align 8, !tbaa !17
  %7224 = load ptr, ptr %9, align 8, !tbaa !5
  %7225 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %7224, i32 0, i32 16
  %7226 = load double, ptr %7225, align 8, !tbaa !21
  %7227 = fcmp olt double %7223, %7226
  br i1 %7227, label %7228, label %7232

7228:                                             ; preds = %7221
  %7229 = load double, ptr %565, align 8, !tbaa !17
  %7230 = load ptr, ptr %9, align 8, !tbaa !5
  %7231 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %7230, i32 0, i32 16
  store double %7229, ptr %7231, align 8, !tbaa !21
  br label %7232

7232:                                             ; preds = %7228, %7221
  %7233 = load double, ptr %565, align 8, !tbaa !17
  %7234 = load ptr, ptr %9, align 8, !tbaa !5
  %7235 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %7234, i32 0, i32 17
  %7236 = load double, ptr %7235, align 8, !tbaa !22
  %7237 = fcmp ogt double %7233, %7236
  br i1 %7237, label %7238, label %7242

7238:                                             ; preds = %7232
  %7239 = load double, ptr %565, align 8, !tbaa !17
  %7240 = load ptr, ptr %9, align 8, !tbaa !5
  %7241 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %7240, i32 0, i32 17
  store double %7239, ptr %7241, align 8, !tbaa !22
  br label %7242

7242:                                             ; preds = %7238, %7232
  %7243 = load ptr, ptr %9, align 8, !tbaa !5
  %7244 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %7243, i32 0, i32 5
  %7245 = load double, ptr %7244, align 8, !tbaa !23
  %7246 = load double, ptr %569, align 8, !tbaa !17
  %7247 = fcmp olt double %7245, %7246
  br i1 %7247, label %7248, label %7264

7248:                                             ; preds = %7242
  %7249 = load double, ptr %569, align 8, !tbaa !17
  %7250 = load ptr, ptr %9, align 8, !tbaa !5
  %7251 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %7250, i32 0, i32 5
  store double %7249, ptr %7251, align 8, !tbaa !23
  %7252 = load double, ptr %566, align 8, !tbaa !17
  %7253 = load ptr, ptr %9, align 8, !tbaa !5
  %7254 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %7253, i32 0, i32 20
  store double %7252, ptr %7254, align 8, !tbaa !24
  %7255 = load double, ptr %565, align 8, !tbaa !17
  %7256 = load ptr, ptr %9, align 8, !tbaa !5
  %7257 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %7256, i32 0, i32 21
  store double %7255, ptr %7257, align 8, !tbaa !25
  %7258 = load i32, ptr %564, align 4, !tbaa !9
  %7259 = load ptr, ptr %9, align 8, !tbaa !5
  %7260 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %7259, i32 0, i32 22
  store i32 %7258, ptr %7260, align 8, !tbaa !26
  %7261 = load i32, ptr %563, align 4, !tbaa !9
  %7262 = load ptr, ptr %9, align 8, !tbaa !5
  %7263 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %7262, i32 0, i32 23
  store i32 %7261, ptr %7263, align 4, !tbaa !27
  br label %7264

7264:                                             ; preds = %7248, %7242
  %7265 = load ptr, ptr %9, align 8, !tbaa !5
  %7266 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %7265, i32 0, i32 6
  %7267 = load double, ptr %7266, align 8, !tbaa !28
  %7268 = load double, ptr %570, align 8, !tbaa !17
  %7269 = fcmp olt double %7267, %7268
  br i1 %7269, label %7270, label %7274

7270:                                             ; preds = %7264
  %7271 = load double, ptr %570, align 8, !tbaa !17
  %7272 = load ptr, ptr %9, align 8, !tbaa !5
  %7273 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %7272, i32 0, i32 6
  store double %7271, ptr %7273, align 8, !tbaa !28
  br label %7274

7274:                                             ; preds = %7270, %7264
  %7275 = load double, ptr %570, align 8, !tbaa !17
  %7276 = load double, ptr %570, align 8, !tbaa !17
  %7277 = fmul double %7275, %7276
  store double %7277, ptr %561, align 8, !tbaa !17
  %7278 = load double, ptr %27, align 8, !tbaa !17
  %7279 = load double, ptr %561, align 8, !tbaa !17
  %7280 = fcmp ogt double %7278, %7279
  br i1 %7280, label %7281, label %7300

7281:                                             ; preds = %7274
  %7282 = load double, ptr %552, align 8, !tbaa !17
  %7283 = load double, ptr %561, align 8, !tbaa !17
  %7284 = fsub double %7283, %7282
  store double %7284, ptr %561, align 8, !tbaa !17
  %7285 = load ptr, ptr %9, align 8, !tbaa !5
  %7286 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %7285, i32 0, i32 8
  %7287 = load double, ptr %7286, align 8, !tbaa !29
  %7288 = load double, ptr %561, align 8, !tbaa !17
  %7289 = fadd double %7287, %7288
  store double %7289, ptr %562, align 8, !tbaa !17
  %7290 = load double, ptr %562, align 8, !tbaa !17
  %7291 = load ptr, ptr %9, align 8, !tbaa !5
  %7292 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %7291, i32 0, i32 8
  %7293 = load double, ptr %7292, align 8, !tbaa !29
  %7294 = fsub double %7290, %7293
  %7295 = load double, ptr %561, align 8, !tbaa !17
  %7296 = fsub double %7294, %7295
  store double %7296, ptr %552, align 8, !tbaa !17
  %7297 = load double, ptr %562, align 8, !tbaa !17
  %7298 = load ptr, ptr %9, align 8, !tbaa !5
  %7299 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %7298, i32 0, i32 8
  store double %7297, ptr %7299, align 8, !tbaa !29
  br label %7300

7300:                                             ; preds = %7281, %7274
  %7301 = load double, ptr %568, align 8, !tbaa !17
  %7302 = call double @libxsmm_kahan_sum(double noundef %7301, ptr noundef %558, ptr noundef %555)
  %7303 = load double, ptr %567, align 8, !tbaa !17
  %7304 = call double @libxsmm_kahan_sum(double noundef %7303, ptr noundef %559, ptr noundef %556)
  %7305 = load double, ptr %569, align 8, !tbaa !17
  %7306 = call double @libxsmm_kahan_sum(double noundef %7305, ptr noundef %560, ptr noundef %557)
  %7307 = load double, ptr %566, align 8, !tbaa !17
  %7308 = load double, ptr %566, align 8, !tbaa !17
  %7309 = fmul double %7307, %7308
  %7310 = call double @libxsmm_kahan_sum(double noundef %7309, ptr noundef %544, ptr noundef %542)
  %7311 = load double, ptr %565, align 8, !tbaa !17
  %7312 = load double, ptr %565, align 8, !tbaa !17
  %7313 = fmul double %7311, %7312
  %7314 = call double @libxsmm_kahan_sum(double noundef %7313, ptr noundef %545, ptr noundef %543)
  %7315 = load double, ptr %569, align 8, !tbaa !17
  %7316 = load double, ptr %569, align 8, !tbaa !17
  %7317 = fmul double %7315, %7316
  store double %7317, ptr %561, align 8, !tbaa !17
  %7318 = load double, ptr %27, align 8, !tbaa !17
  %7319 = load double, ptr %561, align 8, !tbaa !17
  %7320 = fcmp ogt double %7318, %7319
  br i1 %7320, label %7321, label %7326

7321:                                             ; preds = %7300
  %7322 = load double, ptr %561, align 8, !tbaa !17
  %7323 = load ptr, ptr %9, align 8, !tbaa !5
  %7324 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %7323, i32 0, i32 7
  %7325 = call double @libxsmm_kahan_sum(double noundef %7322, ptr noundef %7324, ptr noundef %541)
  br label %7326

7326:                                             ; preds = %7321, %7300
  call void @llvm.lifetime.end.p0(i64 8, ptr %570) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %569) #7
  br label %7351

7327:                                             ; preds = %7183, %7175
  %7328 = load double, ptr %566, align 8, !tbaa !17
  %7329 = load double, ptr %566, align 8, !tbaa !17
  %7330 = fcmp oeq double %7328, %7329
  br i1 %7330, label %7331, label %7335

7331:                                             ; preds = %7327
  %7332 = load double, ptr %27, align 8, !tbaa !17
  %7333 = load double, ptr %568, align 8, !tbaa !17
  %7334 = fcmp ogt double %7332, %7333
  br label %7335

7335:                                             ; preds = %7331, %7327
  %7336 = phi i1 [ false, %7327 ], [ %7334, %7331 ]
  %7337 = zext i1 %7336 to i64
  %7338 = select i1 %7336, i32 1, i32 2
  store i32 %7338, ptr %19, align 4, !tbaa !9
  %7339 = load i32, ptr %564, align 4, !tbaa !9
  %7340 = load ptr, ptr %9, align 8, !tbaa !5
  %7341 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %7340, i32 0, i32 22
  store i32 %7339, ptr %7341, align 8, !tbaa !26
  %7342 = load i32, ptr %563, align 4, !tbaa !9
  %7343 = load ptr, ptr %9, align 8, !tbaa !5
  %7344 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %7343, i32 0, i32 23
  store i32 %7342, ptr %7344, align 4, !tbaa !27
  %7345 = load double, ptr %566, align 8, !tbaa !17
  %7346 = load ptr, ptr %9, align 8, !tbaa !5
  %7347 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %7346, i32 0, i32 20
  store double %7345, ptr %7347, align 8, !tbaa !24
  %7348 = load double, ptr %565, align 8, !tbaa !17
  %7349 = load ptr, ptr %9, align 8, !tbaa !5
  %7350 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %7349, i32 0, i32 21
  store double %7348, ptr %7350, align 8, !tbaa !25
  store i32 126, ptr %60, align 4
  br label %7352

7351:                                             ; preds = %7326
  store i32 0, ptr %60, align 4
  br label %7352

7352:                                             ; preds = %7351, %7335
  call void @llvm.lifetime.end.p0(i64 8, ptr %568) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %567) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %566) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %565) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %564) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %563) #7
  %7353 = load i32, ptr %60, align 4
  switch i32 %7353, label %15542 [
    i32 0, label %7354
    i32 126, label %7358
  ]

7354:                                             ; preds = %7352
  br label %7355

7355:                                             ; preds = %7354
  %7356 = load i32, ptr %554, align 4, !tbaa !9
  %7357 = add nsw i32 %7356, 1
  store i32 %7357, ptr %554, align 4, !tbaa !9
  br label %7105, !llvm.loop !85

7358:                                             ; preds = %7352, %7105
  %7359 = load i32, ptr %19, align 4, !tbaa !9
  %7360 = icmp eq i32 0, %7359
  br i1 %7360, label %7361, label %7392

7361:                                             ; preds = %7358
  %7362 = load double, ptr %558, align 8, !tbaa !17
  %7363 = load ptr, ptr %9, align 8, !tbaa !5
  %7364 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %7363, i32 0, i32 10
  %7365 = call double @libxsmm_kahan_sum(double noundef %7362, ptr noundef %7364, ptr noundef %550)
  %7366 = load double, ptr %559, align 8, !tbaa !17
  %7367 = load ptr, ptr %9, align 8, !tbaa !5
  %7368 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %7367, i32 0, i32 15
  %7369 = call double @libxsmm_kahan_sum(double noundef %7366, ptr noundef %7368, ptr noundef %551)
  %7370 = load ptr, ptr %9, align 8, !tbaa !5
  %7371 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %7370, i32 0, i32 2
  %7372 = load double, ptr %7371, align 8, !tbaa !32
  %7373 = load double, ptr %560, align 8, !tbaa !17
  %7374 = fcmp olt double %7372, %7373
  br i1 %7374, label %7375, label %7379

7375:                                             ; preds = %7361
  %7376 = load double, ptr %560, align 8, !tbaa !17
  %7377 = load ptr, ptr %9, align 8, !tbaa !5
  %7378 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %7377, i32 0, i32 2
  store double %7376, ptr %7378, align 8, !tbaa !32
  br label %7379

7379:                                             ; preds = %7375, %7361
  %7380 = load double, ptr %546, align 8, !tbaa !17
  %7381 = load double, ptr %558, align 8, !tbaa !17
  %7382 = fcmp olt double %7380, %7381
  br i1 %7382, label %7383, label %7385

7383:                                             ; preds = %7379
  %7384 = load double, ptr %558, align 8, !tbaa !17
  store double %7384, ptr %546, align 8, !tbaa !17
  br label %7385

7385:                                             ; preds = %7383, %7379
  %7386 = load double, ptr %547, align 8, !tbaa !17
  %7387 = load double, ptr %559, align 8, !tbaa !17
  %7388 = fcmp olt double %7386, %7387
  br i1 %7388, label %7389, label %7391

7389:                                             ; preds = %7385
  %7390 = load double, ptr %559, align 8, !tbaa !17
  store double %7390, ptr %547, align 8, !tbaa !17
  br label %7391

7391:                                             ; preds = %7389, %7385
  br label %7393

7392:                                             ; preds = %7358
  store i32 123, ptr %60, align 4
  br label %7394

7393:                                             ; preds = %7391
  store i32 0, ptr %60, align 4
  br label %7394

7394:                                             ; preds = %7393, %7392
  call void @llvm.lifetime.end.p0(i64 8, ptr %562) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %561) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %560) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %559) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %558) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %557) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %556) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %555) #7
  %7395 = load i32, ptr %60, align 4
  switch i32 %7395, label %15542 [
    i32 0, label %7396
    i32 123, label %7400
  ]

7396:                                             ; preds = %7394
  br label %7397

7397:                                             ; preds = %7396
  %7398 = load i32, ptr %553, align 4, !tbaa !9
  %7399 = add nsw i32 %7398, 1
  store i32 %7399, ptr %553, align 4, !tbaa !9
  br label %7100, !llvm.loop !86

7400:                                             ; preds = %7394, %7100
  %7401 = load i32, ptr %19, align 4, !tbaa !9
  %7402 = icmp eq i32 0, %7401
  br i1 %7402, label %7403, label %7649

7403:                                             ; preds = %7400
  call void @llvm.lifetime.start.p0(i64 8, ptr %571) #7
  store double 0.000000e+00, ptr %571, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %572) #7
  store double 0.000000e+00, ptr %572, align 8, !tbaa !17
  %7404 = load ptr, ptr %9, align 8, !tbaa !5
  %7405 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %7404, i32 0, i32 14
  %7406 = load double, ptr %7405, align 8, !tbaa !34
  %7407 = fcmp oeq double 0.000000e+00, %7406
  br i1 %7407, label %7408, label %7409

7408:                                             ; preds = %7403
  br label %7410

7409:                                             ; preds = %7403
  call void @__assert_fail(ptr noundef @.str.1, ptr noundef @.str.2, i32 noundef 130, ptr noundef @__PRETTY_FUNCTION__.libxsmm_matdiff) #9
  unreachable

7410:                                             ; preds = %7408
  %7411 = load ptr, ptr %9, align 8, !tbaa !5
  %7412 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %7411, i32 0, i32 19
  %7413 = load double, ptr %7412, align 8, !tbaa !35
  %7414 = fcmp oeq double 0.000000e+00, %7413
  br i1 %7414, label %7415, label %7416

7415:                                             ; preds = %7410
  br label %7417

7416:                                             ; preds = %7410
  call void @__assert_fail(ptr noundef @.str.3, ptr noundef @.str.2, i32 noundef 131, ptr noundef @__PRETTY_FUNCTION__.libxsmm_matdiff) #9
  unreachable

7417:                                             ; preds = %7415
  %7418 = load i64, ptr %24, align 8, !tbaa !12
  %7419 = icmp ne i64 0, %7418
  br i1 %7419, label %7420, label %7437

7420:                                             ; preds = %7417
  %7421 = load ptr, ptr %9, align 8, !tbaa !5
  %7422 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %7421, i32 0, i32 10
  %7423 = load double, ptr %7422, align 8, !tbaa !36
  %7424 = load i64, ptr %24, align 8, !tbaa !12
  %7425 = uitofp i64 %7424 to double
  %7426 = fdiv double %7423, %7425
  %7427 = load ptr, ptr %9, align 8, !tbaa !5
  %7428 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %7427, i32 0, i32 13
  store double %7426, ptr %7428, align 8, !tbaa !37
  %7429 = load ptr, ptr %9, align 8, !tbaa !5
  %7430 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %7429, i32 0, i32 15
  %7431 = load double, ptr %7430, align 8, !tbaa !38
  %7432 = load i64, ptr %24, align 8, !tbaa !12
  %7433 = uitofp i64 %7432 to double
  %7434 = fdiv double %7431, %7433
  %7435 = load ptr, ptr %9, align 8, !tbaa !5
  %7436 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %7435, i32 0, i32 18
  store double %7434, ptr %7436, align 8, !tbaa !39
  br label %7437

7437:                                             ; preds = %7420, %7417
  %7438 = load double, ptr %546, align 8, !tbaa !17
  %7439 = fcmp oge double 0.000000e+00, %7438
  br i1 %7439, label %7440, label %7442

7440:                                             ; preds = %7437
  %7441 = load double, ptr %547, align 8, !tbaa !17
  br label %7454

7442:                                             ; preds = %7437
  %7443 = load ptr, ptr %9, align 8, !tbaa !5
  %7444 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %7443, i32 0, i32 2
  %7445 = load double, ptr %7444, align 8, !tbaa !32
  %7446 = load double, ptr %546, align 8, !tbaa !17
  %7447 = fcmp olt double 0.000000e+00, %7446
  br i1 %7447, label %7448, label %7450

7448:                                             ; preds = %7442
  %7449 = load double, ptr %546, align 8, !tbaa !17
  br label %7451

7450:                                             ; preds = %7442
  br label %7451

7451:                                             ; preds = %7450, %7448
  %7452 = phi double [ %7449, %7448 ], [ 1.000000e+00, %7450 ]
  %7453 = fdiv double %7445, %7452
  br label %7454

7454:                                             ; preds = %7451, %7440
  %7455 = phi double [ %7441, %7440 ], [ %7453, %7451 ]
  %7456 = load ptr, ptr %9, align 8, !tbaa !5
  %7457 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %7456, i32 0, i32 3
  store double %7455, ptr %7457, align 8, !tbaa !40
  %7458 = load double, ptr %544, align 8, !tbaa !17
  %7459 = fcmp oge double 0.000000e+00, %7458
  br i1 %7459, label %7460, label %7478

7460:                                             ; preds = %7454
  %7461 = load double, ptr %545, align 8, !tbaa !17
  %7462 = load double, ptr %545, align 8, !tbaa !17
  %7463 = fmul double %7461, %7462
  %7464 = load ptr, ptr %9, align 8, !tbaa !5
  %7465 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %7464, i32 0, i32 7
  %7466 = load double, ptr %7465, align 8, !tbaa !41
  %7467 = fcmp olt double %7463, %7466
  br i1 %7467, label %7468, label %7472

7468:                                             ; preds = %7460
  %7469 = load double, ptr %545, align 8, !tbaa !17
  %7470 = load double, ptr %545, align 8, !tbaa !17
  %7471 = fmul double %7469, %7470
  br label %7476

7472:                                             ; preds = %7460
  %7473 = load ptr, ptr %9, align 8, !tbaa !5
  %7474 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %7473, i32 0, i32 7
  %7475 = load double, ptr %7474, align 8, !tbaa !41
  br label %7476

7476:                                             ; preds = %7472, %7468
  %7477 = phi double [ %7471, %7468 ], [ %7475, %7472 ]
  br label %7490

7478:                                             ; preds = %7454
  %7479 = load ptr, ptr %9, align 8, !tbaa !5
  %7480 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %7479, i32 0, i32 7
  %7481 = load double, ptr %7480, align 8, !tbaa !41
  %7482 = load double, ptr %544, align 8, !tbaa !17
  %7483 = fcmp olt double 0.000000e+00, %7482
  br i1 %7483, label %7484, label %7486

7484:                                             ; preds = %7478
  %7485 = load double, ptr %544, align 8, !tbaa !17
  br label %7487

7486:                                             ; preds = %7478
  br label %7487

7487:                                             ; preds = %7486, %7484
  %7488 = phi double [ %7485, %7484 ], [ 1.000000e+00, %7486 ]
  %7489 = fdiv double %7481, %7488
  br label %7490

7490:                                             ; preds = %7487, %7476
  %7491 = phi double [ %7477, %7476 ], [ %7489, %7487 ]
  %7492 = load ptr, ptr %9, align 8, !tbaa !5
  %7493 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %7492, i32 0, i32 4
  store double %7491, ptr %7493, align 8, !tbaa !42
  store i32 0, ptr %554, align 4, !tbaa !9
  br label %7494

7494:                                             ; preds = %7623, %7490
  %7495 = load i32, ptr %554, align 4, !tbaa !9
  %7496 = load i32, ptr %25, align 4, !tbaa !9
  %7497 = icmp slt i32 %7495, %7496
  br i1 %7497, label %7498, label %7626

7498:                                             ; preds = %7494
  call void @llvm.lifetime.start.p0(i64 8, ptr %573) #7
  store double 0.000000e+00, ptr %573, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %574) #7
  store double 0.000000e+00, ptr %574, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %575) #7
  store double 0.000000e+00, ptr %575, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %576) #7
  store double 0.000000e+00, ptr %576, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %577) #7
  store double 0.000000e+00, ptr %577, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %578) #7
  store double 0.000000e+00, ptr %578, align 8, !tbaa !17
  store i32 0, ptr %553, align 4, !tbaa !9
  br label %7499

7499:                                             ; preds = %7597, %7498
  %7500 = load i32, ptr %553, align 4, !tbaa !9
  %7501 = load i32, ptr %26, align 4, !tbaa !9
  %7502 = icmp slt i32 %7500, %7501
  br i1 %7502, label %7503, label %7600

7503:                                             ; preds = %7499
  call void @llvm.lifetime.start.p0(i64 4, ptr %579) #7
  %7504 = load i32, ptr %553, align 4, !tbaa !9
  store i32 %7504, ptr %579, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %580) #7
  %7505 = load i32, ptr %554, align 4, !tbaa !9
  store i32 %7505, ptr %580, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %581) #7
  %7506 = load ptr, ptr %539, align 8, !tbaa !5
  %7507 = load i32, ptr %579, align 4, !tbaa !9
  %7508 = load i32, ptr %20, align 4, !tbaa !9
  %7509 = mul nsw i32 %7507, %7508
  %7510 = load i32, ptr %580, align 4, !tbaa !9
  %7511 = add nsw i32 %7509, %7510
  %7512 = sext i32 %7511 to i64
  %7513 = getelementptr inbounds i8, ptr %7506, i64 %7512
  %7514 = load i8, ptr %7513, align 1, !tbaa !11
  %7515 = sitofp i8 %7514 to double
  store double %7515, ptr %581, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %582) #7
  %7516 = load ptr, ptr %540, align 8, !tbaa !5
  %7517 = icmp ne ptr null, %7516
  br i1 %7517, label %7518, label %7529

7518:                                             ; preds = %7503
  %7519 = load ptr, ptr %540, align 8, !tbaa !5
  %7520 = load i32, ptr %579, align 4, !tbaa !9
  %7521 = load i32, ptr %21, align 4, !tbaa !9
  %7522 = mul nsw i32 %7520, %7521
  %7523 = load i32, ptr %580, align 4, !tbaa !9
  %7524 = add nsw i32 %7522, %7523
  %7525 = sext i32 %7524 to i64
  %7526 = getelementptr inbounds i8, ptr %7519, i64 %7525
  %7527 = load i8, ptr %7526, align 1, !tbaa !11
  %7528 = sitofp i8 %7527 to double
  br label %7530

7529:                                             ; preds = %7503
  br label %7530

7530:                                             ; preds = %7529, %7518
  %7531 = phi double [ %7528, %7518 ], [ 0.000000e+00, %7529 ]
  store double %7531, ptr %582, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %583) #7
  %7532 = load ptr, ptr %540, align 8, !tbaa !5
  %7533 = icmp ne ptr null, %7532
  br i1 %7533, label %7534, label %7548

7534:                                             ; preds = %7530
  %7535 = load double, ptr %581, align 8, !tbaa !17
  %7536 = load double, ptr %582, align 8, !tbaa !17
  %7537 = fcmp olt double %7535, %7536
  br i1 %7537, label %7538, label %7542

7538:                                             ; preds = %7534
  %7539 = load double, ptr %582, align 8, !tbaa !17
  %7540 = load double, ptr %581, align 8, !tbaa !17
  %7541 = fsub double %7539, %7540
  br label %7546

7542:                                             ; preds = %7534
  %7543 = load double, ptr %581, align 8, !tbaa !17
  %7544 = load double, ptr %582, align 8, !tbaa !17
  %7545 = fsub double %7543, %7544
  br label %7546

7546:                                             ; preds = %7542, %7538
  %7547 = phi double [ %7541, %7538 ], [ %7545, %7542 ]
  br label %7549

7548:                                             ; preds = %7530
  br label %7549

7549:                                             ; preds = %7548, %7546
  %7550 = phi double [ %7547, %7546 ], [ 0.000000e+00, %7548 ]
  store double %7550, ptr %583, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %584) #7
  %7551 = load double, ptr %581, align 8, !tbaa !17
  %7552 = load ptr, ptr %9, align 8, !tbaa !5
  %7553 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %7552, i32 0, i32 13
  %7554 = load double, ptr %7553, align 8, !tbaa !37
  %7555 = fsub double %7551, %7554
  store double %7555, ptr %584, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %585) #7
  %7556 = load double, ptr %582, align 8, !tbaa !17
  %7557 = load ptr, ptr %9, align 8, !tbaa !5
  %7558 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %7557, i32 0, i32 18
  %7559 = load double, ptr %7558, align 8, !tbaa !39
  %7560 = fsub double %7556, %7559
  store double %7560, ptr %585, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %586) #7
  %7561 = load double, ptr %581, align 8, !tbaa !17
  %7562 = fcmp ole double 0.000000e+00, %7561
  br i1 %7562, label %7563, label %7565

7563:                                             ; preds = %7549
  %7564 = load double, ptr %581, align 8, !tbaa !17
  br label %7568

7565:                                             ; preds = %7549
  %7566 = load double, ptr %581, align 8, !tbaa !17
  %7567 = fneg double %7566
  br label %7568

7568:                                             ; preds = %7565, %7563
  %7569 = phi double [ %7564, %7563 ], [ %7567, %7565 ]
  store double %7569, ptr %586, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %587) #7
  %7570 = load double, ptr %582, align 8, !tbaa !17
  %7571 = fcmp ole double 0.000000e+00, %7570
  br i1 %7571, label %7572, label %7574

7572:                                             ; preds = %7568
  %7573 = load double, ptr %582, align 8, !tbaa !17
  br label %7577

7574:                                             ; preds = %7568
  %7575 = load double, ptr %582, align 8, !tbaa !17
  %7576 = fneg double %7575
  br label %7577

7577:                                             ; preds = %7574, %7572
  %7578 = phi double [ %7573, %7572 ], [ %7576, %7574 ]
  store double %7578, ptr %587, align 8, !tbaa !17
  %7579 = load double, ptr %584, align 8, !tbaa !17
  %7580 = load double, ptr %584, align 8, !tbaa !17
  %7581 = fmul double %7579, %7580
  %7582 = load ptr, ptr %9, align 8, !tbaa !5
  %7583 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %7582, i32 0, i32 14
  %7584 = call double @libxsmm_kahan_sum(double noundef %7581, ptr noundef %7583, ptr noundef %571)
  %7585 = load double, ptr %585, align 8, !tbaa !17
  %7586 = load double, ptr %585, align 8, !tbaa !17
  %7587 = fmul double %7585, %7586
  %7588 = load ptr, ptr %9, align 8, !tbaa !5
  %7589 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %7588, i32 0, i32 19
  %7590 = call double @libxsmm_kahan_sum(double noundef %7587, ptr noundef %7589, ptr noundef %572)
  %7591 = load double, ptr %586, align 8, !tbaa !17
  %7592 = call double @libxsmm_kahan_sum(double noundef %7591, ptr noundef %576, ptr noundef %573)
  %7593 = load double, ptr %587, align 8, !tbaa !17
  %7594 = call double @libxsmm_kahan_sum(double noundef %7593, ptr noundef %577, ptr noundef %574)
  %7595 = load double, ptr %583, align 8, !tbaa !17
  %7596 = call double @libxsmm_kahan_sum(double noundef %7595, ptr noundef %578, ptr noundef %575)
  call void @llvm.lifetime.end.p0(i64 8, ptr %587) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %586) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %585) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %584) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %583) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %582) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %581) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %580) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %579) #7
  br label %7597

7597:                                             ; preds = %7577
  %7598 = load i32, ptr %553, align 4, !tbaa !9
  %7599 = add nsw i32 %7598, 1
  store i32 %7599, ptr %553, align 4, !tbaa !9
  br label %7499, !llvm.loop !87

7600:                                             ; preds = %7499
  %7601 = load ptr, ptr %9, align 8, !tbaa !5
  %7602 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %7601, i32 0, i32 0
  %7603 = load double, ptr %7602, align 8, !tbaa !44
  %7604 = load double, ptr %578, align 8, !tbaa !17
  %7605 = fcmp olt double %7603, %7604
  br i1 %7605, label %7606, label %7610

7606:                                             ; preds = %7600
  %7607 = load double, ptr %578, align 8, !tbaa !17
  %7608 = load ptr, ptr %9, align 8, !tbaa !5
  %7609 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %7608, i32 0, i32 0
  store double %7607, ptr %7609, align 8, !tbaa !44
  br label %7610

7610:                                             ; preds = %7606, %7600
  %7611 = load double, ptr %548, align 8, !tbaa !17
  %7612 = load double, ptr %576, align 8, !tbaa !17
  %7613 = fcmp olt double %7611, %7612
  br i1 %7613, label %7614, label %7616

7614:                                             ; preds = %7610
  %7615 = load double, ptr %576, align 8, !tbaa !17
  store double %7615, ptr %548, align 8, !tbaa !17
  br label %7616

7616:                                             ; preds = %7614, %7610
  %7617 = load double, ptr %549, align 8, !tbaa !17
  %7618 = load double, ptr %577, align 8, !tbaa !17
  %7619 = fcmp olt double %7617, %7618
  br i1 %7619, label %7620, label %7622

7620:                                             ; preds = %7616
  %7621 = load double, ptr %577, align 8, !tbaa !17
  store double %7621, ptr %549, align 8, !tbaa !17
  br label %7622

7622:                                             ; preds = %7620, %7616
  call void @llvm.lifetime.end.p0(i64 8, ptr %578) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %577) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %576) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %575) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %574) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %573) #7
  br label %7623

7623:                                             ; preds = %7622
  %7624 = load i32, ptr %554, align 4, !tbaa !9
  %7625 = add nsw i32 %7624, 1
  store i32 %7625, ptr %554, align 4, !tbaa !9
  br label %7494, !llvm.loop !88

7626:                                             ; preds = %7494
  %7627 = load double, ptr %548, align 8, !tbaa !17
  %7628 = fcmp oge double 0.000000e+00, %7627
  br i1 %7628, label %7629, label %7633

7629:                                             ; preds = %7626
  %7630 = load ptr, ptr %9, align 8, !tbaa !5
  %7631 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %7630, i32 0, i32 0
  %7632 = load double, ptr %7631, align 8, !tbaa !44
  br label %7645

7633:                                             ; preds = %7626
  %7634 = load ptr, ptr %9, align 8, !tbaa !5
  %7635 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %7634, i32 0, i32 0
  %7636 = load double, ptr %7635, align 8, !tbaa !44
  %7637 = load double, ptr %548, align 8, !tbaa !17
  %7638 = fcmp olt double 0.000000e+00, %7637
  br i1 %7638, label %7639, label %7641

7639:                                             ; preds = %7633
  %7640 = load double, ptr %548, align 8, !tbaa !17
  br label %7642

7641:                                             ; preds = %7633
  br label %7642

7642:                                             ; preds = %7641, %7639
  %7643 = phi double [ %7640, %7639 ], [ 1.000000e+00, %7641 ]
  %7644 = fdiv double %7636, %7643
  br label %7645

7645:                                             ; preds = %7642, %7629
  %7646 = phi double [ %7632, %7629 ], [ %7644, %7642 ]
  %7647 = load ptr, ptr %9, align 8, !tbaa !5
  %7648 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %7647, i32 0, i32 1
  store double %7646, ptr %7648, align 8, !tbaa !46
  call void @llvm.lifetime.end.p0(i64 8, ptr %572) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %571) #7
  br label %7649

7649:                                             ; preds = %7645, %7400
  call void @llvm.lifetime.end.p0(i64 4, ptr %554) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %553) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %552) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %551) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %550) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %549) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %548) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %547) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %546) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %545) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %544) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %543) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %542) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %541) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %540) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %539) #7
  br label %8246

7650:                                             ; preds = %7094
  call void @llvm.lifetime.start.p0(i64 8, ptr %588) #7
  %7651 = load ptr, ptr %13, align 8, !tbaa !5
  store ptr %7651, ptr %588, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %589) #7
  %7652 = load ptr, ptr %14, align 8, !tbaa !5
  store ptr %7652, ptr %589, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %590) #7
  store double 0.000000e+00, ptr %590, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %591) #7
  store double 0.000000e+00, ptr %591, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %592) #7
  store double 0.000000e+00, ptr %592, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %593) #7
  store double 0.000000e+00, ptr %593, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %594) #7
  store double 0.000000e+00, ptr %594, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %595) #7
  store double 0.000000e+00, ptr %595, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %596) #7
  store double 0.000000e+00, ptr %596, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %597) #7
  store double 0.000000e+00, ptr %597, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %598) #7
  store double 0.000000e+00, ptr %598, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %599) #7
  store double 0.000000e+00, ptr %599, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %600) #7
  store double 0.000000e+00, ptr %600, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %601) #7
  store double 0.000000e+00, ptr %601, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %602) #7
  %7653 = load i32, ptr %25, align 4, !tbaa !9
  %7654 = sext i32 %7653 to i64
  %7655 = load i32, ptr %26, align 4, !tbaa !9
  %7656 = sext i32 %7655 to i64
  %7657 = mul i64 %7654, %7656
  store i64 %7657, ptr %602, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 8, ptr %603) #7
  %7658 = load i64, ptr %602, align 8, !tbaa !12
  %7659 = call i64 @libxsmm_coprime2(i64 noundef %7658)
  store i64 %7659, ptr %603, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 4, ptr %604) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %605) #7
  store i32 0, ptr %604, align 4, !tbaa !9
  br label %7660

7660:                                             ; preds = %7975, %7650
  %7661 = load i32, ptr %604, align 4, !tbaa !9
  %7662 = load i32, ptr %26, align 4, !tbaa !9
  %7663 = icmp slt i32 %7661, %7662
  br i1 %7663, label %7664, label %7978

7664:                                             ; preds = %7660
  call void @llvm.lifetime.start.p0(i64 8, ptr %606) #7
  store double 0.000000e+00, ptr %606, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %607) #7
  store double 0.000000e+00, ptr %607, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %608) #7
  store double 0.000000e+00, ptr %608, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %609) #7
  store double 0.000000e+00, ptr %609, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %610) #7
  store double 0.000000e+00, ptr %610, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %611) #7
  store double 0.000000e+00, ptr %611, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %612) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %613) #7
  store i32 0, ptr %605, align 4, !tbaa !9
  br label %7665

7665:                                             ; preds = %7933, %7664
  %7666 = load i32, ptr %605, align 4, !tbaa !9
  %7667 = load i32, ptr %25, align 4, !tbaa !9
  %7668 = icmp slt i32 %7666, %7667
  br i1 %7668, label %7669, label %7936

7669:                                             ; preds = %7665
  call void @llvm.lifetime.start.p0(i64 8, ptr %614) #7
  %7670 = load i64, ptr %603, align 8, !tbaa !12
  %7671 = load i32, ptr %604, align 4, !tbaa !9
  %7672 = load i32, ptr %25, align 4, !tbaa !9
  %7673 = mul nsw i32 %7671, %7672
  %7674 = load i32, ptr %605, align 4, !tbaa !9
  %7675 = add nsw i32 %7673, %7674
  %7676 = sext i32 %7675 to i64
  %7677 = mul i64 %7670, %7676
  %7678 = load i64, ptr %602, align 8, !tbaa !12
  %7679 = urem i64 %7677, %7678
  store i64 %7679, ptr %614, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 4, ptr %615) #7
  %7680 = load i64, ptr %614, align 8, !tbaa !12
  %7681 = load i32, ptr %25, align 4, !tbaa !9
  %7682 = sext i32 %7681 to i64
  %7683 = udiv i64 %7680, %7682
  %7684 = trunc i64 %7683 to i32
  store i32 %7684, ptr %615, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %616) #7
  %7685 = load i64, ptr %614, align 8, !tbaa !12
  %7686 = load i32, ptr %25, align 4, !tbaa !9
  %7687 = sext i32 %7686 to i64
  %7688 = urem i64 %7685, %7687
  %7689 = trunc i64 %7688 to i32
  store i32 %7689, ptr %616, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %617) #7
  %7690 = load ptr, ptr %589, align 8, !tbaa !5
  %7691 = icmp ne ptr null, %7690
  br i1 %7691, label %7692, label %7703

7692:                                             ; preds = %7669
  %7693 = load ptr, ptr %589, align 8, !tbaa !5
  %7694 = load i32, ptr %615, align 4, !tbaa !9
  %7695 = load i32, ptr %21, align 4, !tbaa !9
  %7696 = mul nsw i32 %7694, %7695
  %7697 = load i32, ptr %616, align 4, !tbaa !9
  %7698 = add nsw i32 %7696, %7697
  %7699 = sext i32 %7698 to i64
  %7700 = getelementptr inbounds i8, ptr %7693, i64 %7699
  %7701 = load i8, ptr %7700, align 1, !tbaa !11
  %7702 = sitofp i8 %7701 to double
  br label %7704

7703:                                             ; preds = %7669
  br label %7704

7704:                                             ; preds = %7703, %7692
  %7705 = phi double [ %7702, %7692 ], [ 0.000000e+00, %7703 ]
  store double %7705, ptr %617, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %618) #7
  %7706 = load ptr, ptr %588, align 8, !tbaa !5
  %7707 = load i32, ptr %615, align 4, !tbaa !9
  %7708 = load i32, ptr %20, align 4, !tbaa !9
  %7709 = mul nsw i32 %7707, %7708
  %7710 = load i32, ptr %616, align 4, !tbaa !9
  %7711 = add nsw i32 %7709, %7710
  %7712 = sext i32 %7711 to i64
  %7713 = getelementptr inbounds i8, ptr %7706, i64 %7712
  %7714 = load i8, ptr %7713, align 1, !tbaa !11
  %7715 = sitofp i8 %7714 to double
  store double %7715, ptr %618, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %619) #7
  %7716 = load double, ptr %617, align 8, !tbaa !17
  %7717 = fcmp ole double 0.000000e+00, %7716
  br i1 %7717, label %7718, label %7720

7718:                                             ; preds = %7704
  %7719 = load double, ptr %617, align 8, !tbaa !17
  br label %7723

7720:                                             ; preds = %7704
  %7721 = load double, ptr %617, align 8, !tbaa !17
  %7722 = fneg double %7721
  br label %7723

7723:                                             ; preds = %7720, %7718
  %7724 = phi double [ %7719, %7718 ], [ %7722, %7720 ]
  store double %7724, ptr %619, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %620) #7
  %7725 = load double, ptr %618, align 8, !tbaa !17
  %7726 = fcmp ole double 0.000000e+00, %7725
  br i1 %7726, label %7727, label %7729

7727:                                             ; preds = %7723
  %7728 = load double, ptr %618, align 8, !tbaa !17
  br label %7732

7729:                                             ; preds = %7723
  %7730 = load double, ptr %618, align 8, !tbaa !17
  %7731 = fneg double %7730
  br label %7732

7732:                                             ; preds = %7729, %7727
  %7733 = phi double [ %7728, %7727 ], [ %7731, %7729 ]
  store double %7733, ptr %620, align 8, !tbaa !17
  %7734 = load double, ptr %618, align 8, !tbaa !17
  %7735 = load ptr, ptr %9, align 8, !tbaa !5
  %7736 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %7735, i32 0, i32 11
  %7737 = load double, ptr %7736, align 8, !tbaa !14
  %7738 = fcmp olt double %7734, %7737
  br i1 %7738, label %7739, label %7743

7739:                                             ; preds = %7732
  %7740 = load double, ptr %618, align 8, !tbaa !17
  %7741 = load ptr, ptr %9, align 8, !tbaa !5
  %7742 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %7741, i32 0, i32 11
  store double %7740, ptr %7742, align 8, !tbaa !14
  br label %7743

7743:                                             ; preds = %7739, %7732
  %7744 = load double, ptr %618, align 8, !tbaa !17
  %7745 = load ptr, ptr %9, align 8, !tbaa !5
  %7746 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %7745, i32 0, i32 12
  %7747 = load double, ptr %7746, align 8, !tbaa !20
  %7748 = fcmp ogt double %7744, %7747
  br i1 %7748, label %7749, label %7753

7749:                                             ; preds = %7743
  %7750 = load double, ptr %618, align 8, !tbaa !17
  %7751 = load ptr, ptr %9, align 8, !tbaa !5
  %7752 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %7751, i32 0, i32 12
  store double %7750, ptr %7752, align 8, !tbaa !20
  br label %7753

7753:                                             ; preds = %7749, %7743
  %7754 = load double, ptr %617, align 8, !tbaa !17
  %7755 = load double, ptr %617, align 8, !tbaa !17
  %7756 = fcmp oeq double %7754, %7755
  br i1 %7756, label %7757, label %7905

7757:                                             ; preds = %7753
  %7758 = load double, ptr %27, align 8, !tbaa !17
  %7759 = load double, ptr %619, align 8, !tbaa !17
  %7760 = fcmp ogt double %7758, %7759
  br i1 %7760, label %7765, label %7761

7761:                                             ; preds = %7757
  %7762 = load double, ptr %617, align 8, !tbaa !17
  %7763 = load double, ptr %618, align 8, !tbaa !17
  %7764 = fcmp oeq double %7762, %7763
  br i1 %7764, label %7765, label %7905

7765:                                             ; preds = %7761, %7757
  call void @llvm.lifetime.start.p0(i64 8, ptr %621) #7
  %7766 = load ptr, ptr %589, align 8, !tbaa !5
  %7767 = icmp ne ptr null, %7766
  br i1 %7767, label %7768, label %7782

7768:                                             ; preds = %7765
  %7769 = load double, ptr %618, align 8, !tbaa !17
  %7770 = load double, ptr %617, align 8, !tbaa !17
  %7771 = fcmp olt double %7769, %7770
  br i1 %7771, label %7772, label %7776

7772:                                             ; preds = %7768
  %7773 = load double, ptr %617, align 8, !tbaa !17
  %7774 = load double, ptr %618, align 8, !tbaa !17
  %7775 = fsub double %7773, %7774
  br label %7780

7776:                                             ; preds = %7768
  %7777 = load double, ptr %618, align 8, !tbaa !17
  %7778 = load double, ptr %617, align 8, !tbaa !17
  %7779 = fsub double %7777, %7778
  br label %7780

7780:                                             ; preds = %7776, %7772
  %7781 = phi double [ %7775, %7772 ], [ %7779, %7776 ]
  br label %7783

7782:                                             ; preds = %7765
  br label %7783

7783:                                             ; preds = %7782, %7780
  %7784 = phi double [ %7781, %7780 ], [ 0.000000e+00, %7782 ]
  store double %7784, ptr %621, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %622) #7
  %7785 = load double, ptr %620, align 8, !tbaa !17
  %7786 = fcmp oge double 0.000000e+00, %7785
  br i1 %7786, label %7787, label %7789

7787:                                             ; preds = %7783
  %7788 = load double, ptr %619, align 8, !tbaa !17
  br label %7799

7789:                                             ; preds = %7783
  %7790 = load double, ptr %621, align 8, !tbaa !17
  %7791 = load double, ptr %620, align 8, !tbaa !17
  %7792 = fcmp olt double 0.000000e+00, %7791
  br i1 %7792, label %7793, label %7795

7793:                                             ; preds = %7789
  %7794 = load double, ptr %620, align 8, !tbaa !17
  br label %7796

7795:                                             ; preds = %7789
  br label %7796

7796:                                             ; preds = %7795, %7793
  %7797 = phi double [ %7794, %7793 ], [ 1.000000e+00, %7795 ]
  %7798 = fdiv double %7790, %7797
  br label %7799

7799:                                             ; preds = %7796, %7787
  %7800 = phi double [ %7788, %7787 ], [ %7798, %7796 ]
  store double %7800, ptr %622, align 8, !tbaa !17
  %7801 = load double, ptr %617, align 8, !tbaa !17
  %7802 = load ptr, ptr %9, align 8, !tbaa !5
  %7803 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %7802, i32 0, i32 16
  %7804 = load double, ptr %7803, align 8, !tbaa !21
  %7805 = fcmp olt double %7801, %7804
  br i1 %7805, label %7806, label %7810

7806:                                             ; preds = %7799
  %7807 = load double, ptr %617, align 8, !tbaa !17
  %7808 = load ptr, ptr %9, align 8, !tbaa !5
  %7809 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %7808, i32 0, i32 16
  store double %7807, ptr %7809, align 8, !tbaa !21
  br label %7810

7810:                                             ; preds = %7806, %7799
  %7811 = load double, ptr %617, align 8, !tbaa !17
  %7812 = load ptr, ptr %9, align 8, !tbaa !5
  %7813 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %7812, i32 0, i32 17
  %7814 = load double, ptr %7813, align 8, !tbaa !22
  %7815 = fcmp ogt double %7811, %7814
  br i1 %7815, label %7816, label %7820

7816:                                             ; preds = %7810
  %7817 = load double, ptr %617, align 8, !tbaa !17
  %7818 = load ptr, ptr %9, align 8, !tbaa !5
  %7819 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %7818, i32 0, i32 17
  store double %7817, ptr %7819, align 8, !tbaa !22
  br label %7820

7820:                                             ; preds = %7816, %7810
  %7821 = load ptr, ptr %9, align 8, !tbaa !5
  %7822 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %7821, i32 0, i32 5
  %7823 = load double, ptr %7822, align 8, !tbaa !23
  %7824 = load double, ptr %621, align 8, !tbaa !17
  %7825 = fcmp olt double %7823, %7824
  br i1 %7825, label %7826, label %7842

7826:                                             ; preds = %7820
  %7827 = load double, ptr %621, align 8, !tbaa !17
  %7828 = load ptr, ptr %9, align 8, !tbaa !5
  %7829 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %7828, i32 0, i32 5
  store double %7827, ptr %7829, align 8, !tbaa !23
  %7830 = load double, ptr %618, align 8, !tbaa !17
  %7831 = load ptr, ptr %9, align 8, !tbaa !5
  %7832 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %7831, i32 0, i32 20
  store double %7830, ptr %7832, align 8, !tbaa !24
  %7833 = load double, ptr %617, align 8, !tbaa !17
  %7834 = load ptr, ptr %9, align 8, !tbaa !5
  %7835 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %7834, i32 0, i32 21
  store double %7833, ptr %7835, align 8, !tbaa !25
  %7836 = load i32, ptr %616, align 4, !tbaa !9
  %7837 = load ptr, ptr %9, align 8, !tbaa !5
  %7838 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %7837, i32 0, i32 22
  store i32 %7836, ptr %7838, align 8, !tbaa !26
  %7839 = load i32, ptr %615, align 4, !tbaa !9
  %7840 = load ptr, ptr %9, align 8, !tbaa !5
  %7841 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %7840, i32 0, i32 23
  store i32 %7839, ptr %7841, align 4, !tbaa !27
  br label %7842

7842:                                             ; preds = %7826, %7820
  %7843 = load ptr, ptr %9, align 8, !tbaa !5
  %7844 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %7843, i32 0, i32 6
  %7845 = load double, ptr %7844, align 8, !tbaa !28
  %7846 = load double, ptr %622, align 8, !tbaa !17
  %7847 = fcmp olt double %7845, %7846
  br i1 %7847, label %7848, label %7852

7848:                                             ; preds = %7842
  %7849 = load double, ptr %622, align 8, !tbaa !17
  %7850 = load ptr, ptr %9, align 8, !tbaa !5
  %7851 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %7850, i32 0, i32 6
  store double %7849, ptr %7851, align 8, !tbaa !28
  br label %7852

7852:                                             ; preds = %7848, %7842
  %7853 = load double, ptr %622, align 8, !tbaa !17
  %7854 = load double, ptr %622, align 8, !tbaa !17
  %7855 = fmul double %7853, %7854
  store double %7855, ptr %612, align 8, !tbaa !17
  %7856 = load double, ptr %27, align 8, !tbaa !17
  %7857 = load double, ptr %612, align 8, !tbaa !17
  %7858 = fcmp ogt double %7856, %7857
  br i1 %7858, label %7859, label %7878

7859:                                             ; preds = %7852
  %7860 = load double, ptr %601, align 8, !tbaa !17
  %7861 = load double, ptr %612, align 8, !tbaa !17
  %7862 = fsub double %7861, %7860
  store double %7862, ptr %612, align 8, !tbaa !17
  %7863 = load ptr, ptr %9, align 8, !tbaa !5
  %7864 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %7863, i32 0, i32 8
  %7865 = load double, ptr %7864, align 8, !tbaa !29
  %7866 = load double, ptr %612, align 8, !tbaa !17
  %7867 = fadd double %7865, %7866
  store double %7867, ptr %613, align 8, !tbaa !17
  %7868 = load double, ptr %613, align 8, !tbaa !17
  %7869 = load ptr, ptr %9, align 8, !tbaa !5
  %7870 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %7869, i32 0, i32 8
  %7871 = load double, ptr %7870, align 8, !tbaa !29
  %7872 = fsub double %7868, %7871
  %7873 = load double, ptr %612, align 8, !tbaa !17
  %7874 = fsub double %7872, %7873
  store double %7874, ptr %601, align 8, !tbaa !17
  %7875 = load double, ptr %613, align 8, !tbaa !17
  %7876 = load ptr, ptr %9, align 8, !tbaa !5
  %7877 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %7876, i32 0, i32 8
  store double %7875, ptr %7877, align 8, !tbaa !29
  br label %7878

7878:                                             ; preds = %7859, %7852
  %7879 = load double, ptr %620, align 8, !tbaa !17
  %7880 = call double @libxsmm_kahan_sum(double noundef %7879, ptr noundef %609, ptr noundef %606)
  %7881 = load double, ptr %619, align 8, !tbaa !17
  %7882 = call double @libxsmm_kahan_sum(double noundef %7881, ptr noundef %610, ptr noundef %607)
  %7883 = load double, ptr %621, align 8, !tbaa !17
  %7884 = call double @libxsmm_kahan_sum(double noundef %7883, ptr noundef %611, ptr noundef %608)
  %7885 = load double, ptr %618, align 8, !tbaa !17
  %7886 = load double, ptr %618, align 8, !tbaa !17
  %7887 = fmul double %7885, %7886
  %7888 = call double @libxsmm_kahan_sum(double noundef %7887, ptr noundef %593, ptr noundef %591)
  %7889 = load double, ptr %617, align 8, !tbaa !17
  %7890 = load double, ptr %617, align 8, !tbaa !17
  %7891 = fmul double %7889, %7890
  %7892 = call double @libxsmm_kahan_sum(double noundef %7891, ptr noundef %594, ptr noundef %592)
  %7893 = load double, ptr %621, align 8, !tbaa !17
  %7894 = load double, ptr %621, align 8, !tbaa !17
  %7895 = fmul double %7893, %7894
  store double %7895, ptr %612, align 8, !tbaa !17
  %7896 = load double, ptr %27, align 8, !tbaa !17
  %7897 = load double, ptr %612, align 8, !tbaa !17
  %7898 = fcmp ogt double %7896, %7897
  br i1 %7898, label %7899, label %7904

7899:                                             ; preds = %7878
  %7900 = load double, ptr %612, align 8, !tbaa !17
  %7901 = load ptr, ptr %9, align 8, !tbaa !5
  %7902 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %7901, i32 0, i32 7
  %7903 = call double @libxsmm_kahan_sum(double noundef %7900, ptr noundef %7902, ptr noundef %590)
  br label %7904

7904:                                             ; preds = %7899, %7878
  call void @llvm.lifetime.end.p0(i64 8, ptr %622) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %621) #7
  br label %7929

7905:                                             ; preds = %7761, %7753
  %7906 = load double, ptr %618, align 8, !tbaa !17
  %7907 = load double, ptr %618, align 8, !tbaa !17
  %7908 = fcmp oeq double %7906, %7907
  br i1 %7908, label %7909, label %7913

7909:                                             ; preds = %7905
  %7910 = load double, ptr %27, align 8, !tbaa !17
  %7911 = load double, ptr %620, align 8, !tbaa !17
  %7912 = fcmp ogt double %7910, %7911
  br label %7913

7913:                                             ; preds = %7909, %7905
  %7914 = phi i1 [ false, %7905 ], [ %7912, %7909 ]
  %7915 = zext i1 %7914 to i64
  %7916 = select i1 %7914, i32 1, i32 2
  store i32 %7916, ptr %19, align 4, !tbaa !9
  %7917 = load i32, ptr %616, align 4, !tbaa !9
  %7918 = load ptr, ptr %9, align 8, !tbaa !5
  %7919 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %7918, i32 0, i32 22
  store i32 %7917, ptr %7919, align 8, !tbaa !26
  %7920 = load i32, ptr %615, align 4, !tbaa !9
  %7921 = load ptr, ptr %9, align 8, !tbaa !5
  %7922 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %7921, i32 0, i32 23
  store i32 %7920, ptr %7922, align 4, !tbaa !27
  %7923 = load double, ptr %618, align 8, !tbaa !17
  %7924 = load ptr, ptr %9, align 8, !tbaa !5
  %7925 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %7924, i32 0, i32 20
  store double %7923, ptr %7925, align 8, !tbaa !24
  %7926 = load double, ptr %617, align 8, !tbaa !17
  %7927 = load ptr, ptr %9, align 8, !tbaa !5
  %7928 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %7927, i32 0, i32 21
  store double %7926, ptr %7928, align 8, !tbaa !25
  store i32 138, ptr %60, align 4
  br label %7930

7929:                                             ; preds = %7904
  store i32 0, ptr %60, align 4
  br label %7930

7930:                                             ; preds = %7929, %7913
  call void @llvm.lifetime.end.p0(i64 8, ptr %620) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %619) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %618) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %617) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %616) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %615) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %614) #7
  %7931 = load i32, ptr %60, align 4
  switch i32 %7931, label %15542 [
    i32 0, label %7932
    i32 138, label %7936
  ]

7932:                                             ; preds = %7930
  br label %7933

7933:                                             ; preds = %7932
  %7934 = load i32, ptr %605, align 4, !tbaa !9
  %7935 = add nsw i32 %7934, 1
  store i32 %7935, ptr %605, align 4, !tbaa !9
  br label %7665, !llvm.loop !89

7936:                                             ; preds = %7930, %7665
  %7937 = load i32, ptr %19, align 4, !tbaa !9
  %7938 = icmp eq i32 0, %7937
  br i1 %7938, label %7939, label %7970

7939:                                             ; preds = %7936
  %7940 = load double, ptr %609, align 8, !tbaa !17
  %7941 = load ptr, ptr %9, align 8, !tbaa !5
  %7942 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %7941, i32 0, i32 10
  %7943 = call double @libxsmm_kahan_sum(double noundef %7940, ptr noundef %7942, ptr noundef %599)
  %7944 = load double, ptr %610, align 8, !tbaa !17
  %7945 = load ptr, ptr %9, align 8, !tbaa !5
  %7946 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %7945, i32 0, i32 15
  %7947 = call double @libxsmm_kahan_sum(double noundef %7944, ptr noundef %7946, ptr noundef %600)
  %7948 = load ptr, ptr %9, align 8, !tbaa !5
  %7949 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %7948, i32 0, i32 2
  %7950 = load double, ptr %7949, align 8, !tbaa !32
  %7951 = load double, ptr %611, align 8, !tbaa !17
  %7952 = fcmp olt double %7950, %7951
  br i1 %7952, label %7953, label %7957

7953:                                             ; preds = %7939
  %7954 = load double, ptr %611, align 8, !tbaa !17
  %7955 = load ptr, ptr %9, align 8, !tbaa !5
  %7956 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %7955, i32 0, i32 2
  store double %7954, ptr %7956, align 8, !tbaa !32
  br label %7957

7957:                                             ; preds = %7953, %7939
  %7958 = load double, ptr %595, align 8, !tbaa !17
  %7959 = load double, ptr %609, align 8, !tbaa !17
  %7960 = fcmp olt double %7958, %7959
  br i1 %7960, label %7961, label %7963

7961:                                             ; preds = %7957
  %7962 = load double, ptr %609, align 8, !tbaa !17
  store double %7962, ptr %595, align 8, !tbaa !17
  br label %7963

7963:                                             ; preds = %7961, %7957
  %7964 = load double, ptr %596, align 8, !tbaa !17
  %7965 = load double, ptr %610, align 8, !tbaa !17
  %7966 = fcmp olt double %7964, %7965
  br i1 %7966, label %7967, label %7969

7967:                                             ; preds = %7963
  %7968 = load double, ptr %610, align 8, !tbaa !17
  store double %7968, ptr %596, align 8, !tbaa !17
  br label %7969

7969:                                             ; preds = %7967, %7963
  br label %7971

7970:                                             ; preds = %7936
  store i32 135, ptr %60, align 4
  br label %7972

7971:                                             ; preds = %7969
  store i32 0, ptr %60, align 4
  br label %7972

7972:                                             ; preds = %7971, %7970
  call void @llvm.lifetime.end.p0(i64 8, ptr %613) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %612) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %611) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %610) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %609) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %608) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %607) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %606) #7
  %7973 = load i32, ptr %60, align 4
  switch i32 %7973, label %15542 [
    i32 0, label %7974
    i32 135, label %7978
  ]

7974:                                             ; preds = %7972
  br label %7975

7975:                                             ; preds = %7974
  %7976 = load i32, ptr %604, align 4, !tbaa !9
  %7977 = add nsw i32 %7976, 1
  store i32 %7977, ptr %604, align 4, !tbaa !9
  br label %7660, !llvm.loop !90

7978:                                             ; preds = %7972, %7660
  %7979 = load i32, ptr %19, align 4, !tbaa !9
  %7980 = icmp eq i32 0, %7979
  br i1 %7980, label %7981, label %8245

7981:                                             ; preds = %7978
  call void @llvm.lifetime.start.p0(i64 8, ptr %623) #7
  store double 0.000000e+00, ptr %623, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %624) #7
  store double 0.000000e+00, ptr %624, align 8, !tbaa !17
  %7982 = load ptr, ptr %9, align 8, !tbaa !5
  %7983 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %7982, i32 0, i32 14
  %7984 = load double, ptr %7983, align 8, !tbaa !34
  %7985 = fcmp oeq double 0.000000e+00, %7984
  br i1 %7985, label %7986, label %7987

7986:                                             ; preds = %7981
  br label %7988

7987:                                             ; preds = %7981
  call void @__assert_fail(ptr noundef @.str.1, ptr noundef @.str.2, i32 noundef 130, ptr noundef @__PRETTY_FUNCTION__.libxsmm_matdiff) #9
  unreachable

7988:                                             ; preds = %7986
  %7989 = load ptr, ptr %9, align 8, !tbaa !5
  %7990 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %7989, i32 0, i32 19
  %7991 = load double, ptr %7990, align 8, !tbaa !35
  %7992 = fcmp oeq double 0.000000e+00, %7991
  br i1 %7992, label %7993, label %7994

7993:                                             ; preds = %7988
  br label %7995

7994:                                             ; preds = %7988
  call void @__assert_fail(ptr noundef @.str.3, ptr noundef @.str.2, i32 noundef 131, ptr noundef @__PRETTY_FUNCTION__.libxsmm_matdiff) #9
  unreachable

7995:                                             ; preds = %7993
  %7996 = load i64, ptr %24, align 8, !tbaa !12
  %7997 = icmp ne i64 0, %7996
  br i1 %7997, label %7998, label %8015

7998:                                             ; preds = %7995
  %7999 = load ptr, ptr %9, align 8, !tbaa !5
  %8000 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %7999, i32 0, i32 10
  %8001 = load double, ptr %8000, align 8, !tbaa !36
  %8002 = load i64, ptr %24, align 8, !tbaa !12
  %8003 = uitofp i64 %8002 to double
  %8004 = fdiv double %8001, %8003
  %8005 = load ptr, ptr %9, align 8, !tbaa !5
  %8006 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %8005, i32 0, i32 13
  store double %8004, ptr %8006, align 8, !tbaa !37
  %8007 = load ptr, ptr %9, align 8, !tbaa !5
  %8008 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %8007, i32 0, i32 15
  %8009 = load double, ptr %8008, align 8, !tbaa !38
  %8010 = load i64, ptr %24, align 8, !tbaa !12
  %8011 = uitofp i64 %8010 to double
  %8012 = fdiv double %8009, %8011
  %8013 = load ptr, ptr %9, align 8, !tbaa !5
  %8014 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %8013, i32 0, i32 18
  store double %8012, ptr %8014, align 8, !tbaa !39
  br label %8015

8015:                                             ; preds = %7998, %7995
  %8016 = load double, ptr %595, align 8, !tbaa !17
  %8017 = fcmp oge double 0.000000e+00, %8016
  br i1 %8017, label %8018, label %8020

8018:                                             ; preds = %8015
  %8019 = load double, ptr %596, align 8, !tbaa !17
  br label %8032

8020:                                             ; preds = %8015
  %8021 = load ptr, ptr %9, align 8, !tbaa !5
  %8022 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %8021, i32 0, i32 2
  %8023 = load double, ptr %8022, align 8, !tbaa !32
  %8024 = load double, ptr %595, align 8, !tbaa !17
  %8025 = fcmp olt double 0.000000e+00, %8024
  br i1 %8025, label %8026, label %8028

8026:                                             ; preds = %8020
  %8027 = load double, ptr %595, align 8, !tbaa !17
  br label %8029

8028:                                             ; preds = %8020
  br label %8029

8029:                                             ; preds = %8028, %8026
  %8030 = phi double [ %8027, %8026 ], [ 1.000000e+00, %8028 ]
  %8031 = fdiv double %8023, %8030
  br label %8032

8032:                                             ; preds = %8029, %8018
  %8033 = phi double [ %8019, %8018 ], [ %8031, %8029 ]
  %8034 = load ptr, ptr %9, align 8, !tbaa !5
  %8035 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %8034, i32 0, i32 3
  store double %8033, ptr %8035, align 8, !tbaa !40
  %8036 = load double, ptr %593, align 8, !tbaa !17
  %8037 = fcmp oge double 0.000000e+00, %8036
  br i1 %8037, label %8038, label %8056

8038:                                             ; preds = %8032
  %8039 = load double, ptr %594, align 8, !tbaa !17
  %8040 = load double, ptr %594, align 8, !tbaa !17
  %8041 = fmul double %8039, %8040
  %8042 = load ptr, ptr %9, align 8, !tbaa !5
  %8043 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %8042, i32 0, i32 7
  %8044 = load double, ptr %8043, align 8, !tbaa !41
  %8045 = fcmp olt double %8041, %8044
  br i1 %8045, label %8046, label %8050

8046:                                             ; preds = %8038
  %8047 = load double, ptr %594, align 8, !tbaa !17
  %8048 = load double, ptr %594, align 8, !tbaa !17
  %8049 = fmul double %8047, %8048
  br label %8054

8050:                                             ; preds = %8038
  %8051 = load ptr, ptr %9, align 8, !tbaa !5
  %8052 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %8051, i32 0, i32 7
  %8053 = load double, ptr %8052, align 8, !tbaa !41
  br label %8054

8054:                                             ; preds = %8050, %8046
  %8055 = phi double [ %8049, %8046 ], [ %8053, %8050 ]
  br label %8068

8056:                                             ; preds = %8032
  %8057 = load ptr, ptr %9, align 8, !tbaa !5
  %8058 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %8057, i32 0, i32 7
  %8059 = load double, ptr %8058, align 8, !tbaa !41
  %8060 = load double, ptr %593, align 8, !tbaa !17
  %8061 = fcmp olt double 0.000000e+00, %8060
  br i1 %8061, label %8062, label %8064

8062:                                             ; preds = %8056
  %8063 = load double, ptr %593, align 8, !tbaa !17
  br label %8065

8064:                                             ; preds = %8056
  br label %8065

8065:                                             ; preds = %8064, %8062
  %8066 = phi double [ %8063, %8062 ], [ 1.000000e+00, %8064 ]
  %8067 = fdiv double %8059, %8066
  br label %8068

8068:                                             ; preds = %8065, %8054
  %8069 = phi double [ %8055, %8054 ], [ %8067, %8065 ]
  %8070 = load ptr, ptr %9, align 8, !tbaa !5
  %8071 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %8070, i32 0, i32 4
  store double %8069, ptr %8071, align 8, !tbaa !42
  store i32 0, ptr %605, align 4, !tbaa !9
  br label %8072

8072:                                             ; preds = %8219, %8068
  %8073 = load i32, ptr %605, align 4, !tbaa !9
  %8074 = load i32, ptr %25, align 4, !tbaa !9
  %8075 = icmp slt i32 %8073, %8074
  br i1 %8075, label %8076, label %8222

8076:                                             ; preds = %8072
  call void @llvm.lifetime.start.p0(i64 8, ptr %625) #7
  store double 0.000000e+00, ptr %625, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %626) #7
  store double 0.000000e+00, ptr %626, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %627) #7
  store double 0.000000e+00, ptr %627, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %628) #7
  store double 0.000000e+00, ptr %628, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %629) #7
  store double 0.000000e+00, ptr %629, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %630) #7
  store double 0.000000e+00, ptr %630, align 8, !tbaa !17
  store i32 0, ptr %604, align 4, !tbaa !9
  br label %8077

8077:                                             ; preds = %8193, %8076
  %8078 = load i32, ptr %604, align 4, !tbaa !9
  %8079 = load i32, ptr %26, align 4, !tbaa !9
  %8080 = icmp slt i32 %8078, %8079
  br i1 %8080, label %8081, label %8196

8081:                                             ; preds = %8077
  call void @llvm.lifetime.start.p0(i64 8, ptr %631) #7
  %8082 = load i64, ptr %603, align 8, !tbaa !12
  %8083 = load i32, ptr %604, align 4, !tbaa !9
  %8084 = load i32, ptr %25, align 4, !tbaa !9
  %8085 = mul nsw i32 %8083, %8084
  %8086 = load i32, ptr %605, align 4, !tbaa !9
  %8087 = add nsw i32 %8085, %8086
  %8088 = sext i32 %8087 to i64
  %8089 = mul i64 %8082, %8088
  %8090 = load i64, ptr %602, align 8, !tbaa !12
  %8091 = urem i64 %8089, %8090
  store i64 %8091, ptr %631, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 4, ptr %632) #7
  %8092 = load i64, ptr %631, align 8, !tbaa !12
  %8093 = load i32, ptr %25, align 4, !tbaa !9
  %8094 = sext i32 %8093 to i64
  %8095 = udiv i64 %8092, %8094
  %8096 = trunc i64 %8095 to i32
  store i32 %8096, ptr %632, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %633) #7
  %8097 = load i64, ptr %631, align 8, !tbaa !12
  %8098 = load i32, ptr %25, align 4, !tbaa !9
  %8099 = sext i32 %8098 to i64
  %8100 = urem i64 %8097, %8099
  %8101 = trunc i64 %8100 to i32
  store i32 %8101, ptr %633, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %634) #7
  %8102 = load ptr, ptr %588, align 8, !tbaa !5
  %8103 = load i32, ptr %632, align 4, !tbaa !9
  %8104 = load i32, ptr %20, align 4, !tbaa !9
  %8105 = mul nsw i32 %8103, %8104
  %8106 = load i32, ptr %633, align 4, !tbaa !9
  %8107 = add nsw i32 %8105, %8106
  %8108 = sext i32 %8107 to i64
  %8109 = getelementptr inbounds i8, ptr %8102, i64 %8108
  %8110 = load i8, ptr %8109, align 1, !tbaa !11
  %8111 = sitofp i8 %8110 to double
  store double %8111, ptr %634, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %635) #7
  %8112 = load ptr, ptr %589, align 8, !tbaa !5
  %8113 = icmp ne ptr null, %8112
  br i1 %8113, label %8114, label %8125

8114:                                             ; preds = %8081
  %8115 = load ptr, ptr %589, align 8, !tbaa !5
  %8116 = load i32, ptr %632, align 4, !tbaa !9
  %8117 = load i32, ptr %21, align 4, !tbaa !9
  %8118 = mul nsw i32 %8116, %8117
  %8119 = load i32, ptr %633, align 4, !tbaa !9
  %8120 = add nsw i32 %8118, %8119
  %8121 = sext i32 %8120 to i64
  %8122 = getelementptr inbounds i8, ptr %8115, i64 %8121
  %8123 = load i8, ptr %8122, align 1, !tbaa !11
  %8124 = sitofp i8 %8123 to double
  br label %8126

8125:                                             ; preds = %8081
  br label %8126

8126:                                             ; preds = %8125, %8114
  %8127 = phi double [ %8124, %8114 ], [ 0.000000e+00, %8125 ]
  store double %8127, ptr %635, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %636) #7
  %8128 = load ptr, ptr %589, align 8, !tbaa !5
  %8129 = icmp ne ptr null, %8128
  br i1 %8129, label %8130, label %8144

8130:                                             ; preds = %8126
  %8131 = load double, ptr %634, align 8, !tbaa !17
  %8132 = load double, ptr %635, align 8, !tbaa !17
  %8133 = fcmp olt double %8131, %8132
  br i1 %8133, label %8134, label %8138

8134:                                             ; preds = %8130
  %8135 = load double, ptr %635, align 8, !tbaa !17
  %8136 = load double, ptr %634, align 8, !tbaa !17
  %8137 = fsub double %8135, %8136
  br label %8142

8138:                                             ; preds = %8130
  %8139 = load double, ptr %634, align 8, !tbaa !17
  %8140 = load double, ptr %635, align 8, !tbaa !17
  %8141 = fsub double %8139, %8140
  br label %8142

8142:                                             ; preds = %8138, %8134
  %8143 = phi double [ %8137, %8134 ], [ %8141, %8138 ]
  br label %8145

8144:                                             ; preds = %8126
  br label %8145

8145:                                             ; preds = %8144, %8142
  %8146 = phi double [ %8143, %8142 ], [ 0.000000e+00, %8144 ]
  store double %8146, ptr %636, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %637) #7
  %8147 = load double, ptr %634, align 8, !tbaa !17
  %8148 = load ptr, ptr %9, align 8, !tbaa !5
  %8149 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %8148, i32 0, i32 13
  %8150 = load double, ptr %8149, align 8, !tbaa !37
  %8151 = fsub double %8147, %8150
  store double %8151, ptr %637, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %638) #7
  %8152 = load double, ptr %635, align 8, !tbaa !17
  %8153 = load ptr, ptr %9, align 8, !tbaa !5
  %8154 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %8153, i32 0, i32 18
  %8155 = load double, ptr %8154, align 8, !tbaa !39
  %8156 = fsub double %8152, %8155
  store double %8156, ptr %638, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %639) #7
  %8157 = load double, ptr %634, align 8, !tbaa !17
  %8158 = fcmp ole double 0.000000e+00, %8157
  br i1 %8158, label %8159, label %8161

8159:                                             ; preds = %8145
  %8160 = load double, ptr %634, align 8, !tbaa !17
  br label %8164

8161:                                             ; preds = %8145
  %8162 = load double, ptr %634, align 8, !tbaa !17
  %8163 = fneg double %8162
  br label %8164

8164:                                             ; preds = %8161, %8159
  %8165 = phi double [ %8160, %8159 ], [ %8163, %8161 ]
  store double %8165, ptr %639, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %640) #7
  %8166 = load double, ptr %635, align 8, !tbaa !17
  %8167 = fcmp ole double 0.000000e+00, %8166
  br i1 %8167, label %8168, label %8170

8168:                                             ; preds = %8164
  %8169 = load double, ptr %635, align 8, !tbaa !17
  br label %8173

8170:                                             ; preds = %8164
  %8171 = load double, ptr %635, align 8, !tbaa !17
  %8172 = fneg double %8171
  br label %8173

8173:                                             ; preds = %8170, %8168
  %8174 = phi double [ %8169, %8168 ], [ %8172, %8170 ]
  store double %8174, ptr %640, align 8, !tbaa !17
  %8175 = load double, ptr %637, align 8, !tbaa !17
  %8176 = load double, ptr %637, align 8, !tbaa !17
  %8177 = fmul double %8175, %8176
  %8178 = load ptr, ptr %9, align 8, !tbaa !5
  %8179 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %8178, i32 0, i32 14
  %8180 = call double @libxsmm_kahan_sum(double noundef %8177, ptr noundef %8179, ptr noundef %623)
  %8181 = load double, ptr %638, align 8, !tbaa !17
  %8182 = load double, ptr %638, align 8, !tbaa !17
  %8183 = fmul double %8181, %8182
  %8184 = load ptr, ptr %9, align 8, !tbaa !5
  %8185 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %8184, i32 0, i32 19
  %8186 = call double @libxsmm_kahan_sum(double noundef %8183, ptr noundef %8185, ptr noundef %624)
  %8187 = load double, ptr %639, align 8, !tbaa !17
  %8188 = call double @libxsmm_kahan_sum(double noundef %8187, ptr noundef %628, ptr noundef %625)
  %8189 = load double, ptr %640, align 8, !tbaa !17
  %8190 = call double @libxsmm_kahan_sum(double noundef %8189, ptr noundef %629, ptr noundef %626)
  %8191 = load double, ptr %636, align 8, !tbaa !17
  %8192 = call double @libxsmm_kahan_sum(double noundef %8191, ptr noundef %630, ptr noundef %627)
  call void @llvm.lifetime.end.p0(i64 8, ptr %640) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %639) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %638) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %637) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %636) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %635) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %634) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %633) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %632) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %631) #7
  br label %8193

8193:                                             ; preds = %8173
  %8194 = load i32, ptr %604, align 4, !tbaa !9
  %8195 = add nsw i32 %8194, 1
  store i32 %8195, ptr %604, align 4, !tbaa !9
  br label %8077, !llvm.loop !91

8196:                                             ; preds = %8077
  %8197 = load ptr, ptr %9, align 8, !tbaa !5
  %8198 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %8197, i32 0, i32 0
  %8199 = load double, ptr %8198, align 8, !tbaa !44
  %8200 = load double, ptr %630, align 8, !tbaa !17
  %8201 = fcmp olt double %8199, %8200
  br i1 %8201, label %8202, label %8206

8202:                                             ; preds = %8196
  %8203 = load double, ptr %630, align 8, !tbaa !17
  %8204 = load ptr, ptr %9, align 8, !tbaa !5
  %8205 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %8204, i32 0, i32 0
  store double %8203, ptr %8205, align 8, !tbaa !44
  br label %8206

8206:                                             ; preds = %8202, %8196
  %8207 = load double, ptr %597, align 8, !tbaa !17
  %8208 = load double, ptr %628, align 8, !tbaa !17
  %8209 = fcmp olt double %8207, %8208
  br i1 %8209, label %8210, label %8212

8210:                                             ; preds = %8206
  %8211 = load double, ptr %628, align 8, !tbaa !17
  store double %8211, ptr %597, align 8, !tbaa !17
  br label %8212

8212:                                             ; preds = %8210, %8206
  %8213 = load double, ptr %598, align 8, !tbaa !17
  %8214 = load double, ptr %629, align 8, !tbaa !17
  %8215 = fcmp olt double %8213, %8214
  br i1 %8215, label %8216, label %8218

8216:                                             ; preds = %8212
  %8217 = load double, ptr %629, align 8, !tbaa !17
  store double %8217, ptr %598, align 8, !tbaa !17
  br label %8218

8218:                                             ; preds = %8216, %8212
  call void @llvm.lifetime.end.p0(i64 8, ptr %630) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %629) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %628) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %627) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %626) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %625) #7
  br label %8219

8219:                                             ; preds = %8218
  %8220 = load i32, ptr %605, align 4, !tbaa !9
  %8221 = add nsw i32 %8220, 1
  store i32 %8221, ptr %605, align 4, !tbaa !9
  br label %8072, !llvm.loop !92

8222:                                             ; preds = %8072
  %8223 = load double, ptr %597, align 8, !tbaa !17
  %8224 = fcmp oge double 0.000000e+00, %8223
  br i1 %8224, label %8225, label %8229

8225:                                             ; preds = %8222
  %8226 = load ptr, ptr %9, align 8, !tbaa !5
  %8227 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %8226, i32 0, i32 0
  %8228 = load double, ptr %8227, align 8, !tbaa !44
  br label %8241

8229:                                             ; preds = %8222
  %8230 = load ptr, ptr %9, align 8, !tbaa !5
  %8231 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %8230, i32 0, i32 0
  %8232 = load double, ptr %8231, align 8, !tbaa !44
  %8233 = load double, ptr %597, align 8, !tbaa !17
  %8234 = fcmp olt double 0.000000e+00, %8233
  br i1 %8234, label %8235, label %8237

8235:                                             ; preds = %8229
  %8236 = load double, ptr %597, align 8, !tbaa !17
  br label %8238

8237:                                             ; preds = %8229
  br label %8238

8238:                                             ; preds = %8237, %8235
  %8239 = phi double [ %8236, %8235 ], [ 1.000000e+00, %8237 ]
  %8240 = fdiv double %8232, %8239
  br label %8241

8241:                                             ; preds = %8238, %8225
  %8242 = phi double [ %8228, %8225 ], [ %8240, %8238 ]
  %8243 = load ptr, ptr %9, align 8, !tbaa !5
  %8244 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %8243, i32 0, i32 1
  store double %8242, ptr %8244, align 8, !tbaa !46
  call void @llvm.lifetime.end.p0(i64 8, ptr %624) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %623) #7
  br label %8245

8245:                                             ; preds = %8241, %7978
  call void @llvm.lifetime.end.p0(i64 4, ptr %605) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %604) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %603) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %602) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %601) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %600) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %599) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %598) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %597) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %596) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %595) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %594) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %593) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %592) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %591) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %590) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %589) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %588) #7
  br label %8246

8246:                                             ; preds = %8245, %7649
  br label %15200

8247:                                             ; preds = %1323
  %8248 = load i32, ptr %23, align 4, !tbaa !9
  %8249 = icmp eq i32 0, %8248
  br i1 %8249, label %8250, label %8799

8250:                                             ; preds = %8247
  call void @llvm.lifetime.start.p0(i64 8, ptr %641) #7
  %8251 = load ptr, ptr %13, align 8, !tbaa !5
  store ptr %8251, ptr %641, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %642) #7
  %8252 = load ptr, ptr %14, align 8, !tbaa !5
  store ptr %8252, ptr %642, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %643) #7
  store double 0.000000e+00, ptr %643, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %644) #7
  store double 0.000000e+00, ptr %644, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %645) #7
  store double 0.000000e+00, ptr %645, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %646) #7
  store double 0.000000e+00, ptr %646, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %647) #7
  store double 0.000000e+00, ptr %647, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %648) #7
  store double 0.000000e+00, ptr %648, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %649) #7
  store double 0.000000e+00, ptr %649, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %650) #7
  store double 0.000000e+00, ptr %650, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %651) #7
  store double 0.000000e+00, ptr %651, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %652) #7
  store double 0.000000e+00, ptr %652, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %653) #7
  store double 0.000000e+00, ptr %653, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %654) #7
  store double 0.000000e+00, ptr %654, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 4, ptr %655) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %656) #7
  store i32 0, ptr %655, align 4, !tbaa !9
  br label %8253

8253:                                             ; preds = %8548, %8250
  %8254 = load i32, ptr %655, align 4, !tbaa !9
  %8255 = load i32, ptr %26, align 4, !tbaa !9
  %8256 = icmp slt i32 %8254, %8255
  br i1 %8256, label %8257, label %8551

8257:                                             ; preds = %8253
  call void @llvm.lifetime.start.p0(i64 8, ptr %657) #7
  store double 0.000000e+00, ptr %657, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %658) #7
  store double 0.000000e+00, ptr %658, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %659) #7
  store double 0.000000e+00, ptr %659, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %660) #7
  store double 0.000000e+00, ptr %660, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %661) #7
  store double 0.000000e+00, ptr %661, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %662) #7
  store double 0.000000e+00, ptr %662, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %663) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %664) #7
  store i32 0, ptr %656, align 4, !tbaa !9
  br label %8258

8258:                                             ; preds = %8506, %8257
  %8259 = load i32, ptr %656, align 4, !tbaa !9
  %8260 = load i32, ptr %25, align 4, !tbaa !9
  %8261 = icmp slt i32 %8259, %8260
  br i1 %8261, label %8262, label %8509

8262:                                             ; preds = %8258
  call void @llvm.lifetime.start.p0(i64 4, ptr %665) #7
  %8263 = load i32, ptr %655, align 4, !tbaa !9
  store i32 %8263, ptr %665, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %666) #7
  %8264 = load i32, ptr %656, align 4, !tbaa !9
  store i32 %8264, ptr %666, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %667) #7
  %8265 = load ptr, ptr %642, align 8, !tbaa !5
  %8266 = icmp ne ptr null, %8265
  br i1 %8266, label %8267, label %8277

8267:                                             ; preds = %8262
  %8268 = load ptr, ptr %642, align 8, !tbaa !5
  %8269 = load i32, ptr %665, align 4, !tbaa !9
  %8270 = load i32, ptr %21, align 4, !tbaa !9
  %8271 = mul nsw i32 %8269, %8270
  %8272 = load i32, ptr %666, align 4, !tbaa !9
  %8273 = add nsw i32 %8271, %8272
  %8274 = sext i32 %8273 to i64
  %8275 = getelementptr inbounds double, ptr %8268, i64 %8274
  %8276 = load double, ptr %8275, align 8, !tbaa !17
  br label %8278

8277:                                             ; preds = %8262
  br label %8278

8278:                                             ; preds = %8277, %8267
  %8279 = phi double [ %8276, %8267 ], [ 0.000000e+00, %8277 ]
  store double %8279, ptr %667, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %668) #7
  %8280 = load ptr, ptr %641, align 8, !tbaa !5
  %8281 = load i32, ptr %665, align 4, !tbaa !9
  %8282 = load i32, ptr %20, align 4, !tbaa !9
  %8283 = mul nsw i32 %8281, %8282
  %8284 = load i32, ptr %666, align 4, !tbaa !9
  %8285 = add nsw i32 %8283, %8284
  %8286 = sext i32 %8285 to i64
  %8287 = getelementptr inbounds double, ptr %8280, i64 %8286
  %8288 = load double, ptr %8287, align 8, !tbaa !17
  store double %8288, ptr %668, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %669) #7
  %8289 = load double, ptr %667, align 8, !tbaa !17
  %8290 = fcmp ole double 0.000000e+00, %8289
  br i1 %8290, label %8291, label %8293

8291:                                             ; preds = %8278
  %8292 = load double, ptr %667, align 8, !tbaa !17
  br label %8296

8293:                                             ; preds = %8278
  %8294 = load double, ptr %667, align 8, !tbaa !17
  %8295 = fneg double %8294
  br label %8296

8296:                                             ; preds = %8293, %8291
  %8297 = phi double [ %8292, %8291 ], [ %8295, %8293 ]
  store double %8297, ptr %669, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %670) #7
  %8298 = load double, ptr %668, align 8, !tbaa !17
  %8299 = fcmp ole double 0.000000e+00, %8298
  br i1 %8299, label %8300, label %8302

8300:                                             ; preds = %8296
  %8301 = load double, ptr %668, align 8, !tbaa !17
  br label %8305

8302:                                             ; preds = %8296
  %8303 = load double, ptr %668, align 8, !tbaa !17
  %8304 = fneg double %8303
  br label %8305

8305:                                             ; preds = %8302, %8300
  %8306 = phi double [ %8301, %8300 ], [ %8304, %8302 ]
  store double %8306, ptr %670, align 8, !tbaa !17
  %8307 = load double, ptr %668, align 8, !tbaa !17
  %8308 = load ptr, ptr %9, align 8, !tbaa !5
  %8309 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %8308, i32 0, i32 11
  %8310 = load double, ptr %8309, align 8, !tbaa !14
  %8311 = fcmp olt double %8307, %8310
  br i1 %8311, label %8312, label %8316

8312:                                             ; preds = %8305
  %8313 = load double, ptr %668, align 8, !tbaa !17
  %8314 = load ptr, ptr %9, align 8, !tbaa !5
  %8315 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %8314, i32 0, i32 11
  store double %8313, ptr %8315, align 8, !tbaa !14
  br label %8316

8316:                                             ; preds = %8312, %8305
  %8317 = load double, ptr %668, align 8, !tbaa !17
  %8318 = load ptr, ptr %9, align 8, !tbaa !5
  %8319 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %8318, i32 0, i32 12
  %8320 = load double, ptr %8319, align 8, !tbaa !20
  %8321 = fcmp ogt double %8317, %8320
  br i1 %8321, label %8322, label %8326

8322:                                             ; preds = %8316
  %8323 = load double, ptr %668, align 8, !tbaa !17
  %8324 = load ptr, ptr %9, align 8, !tbaa !5
  %8325 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %8324, i32 0, i32 12
  store double %8323, ptr %8325, align 8, !tbaa !20
  br label %8326

8326:                                             ; preds = %8322, %8316
  %8327 = load double, ptr %667, align 8, !tbaa !17
  %8328 = load double, ptr %667, align 8, !tbaa !17
  %8329 = fcmp oeq double %8327, %8328
  br i1 %8329, label %8330, label %8478

8330:                                             ; preds = %8326
  %8331 = load double, ptr %27, align 8, !tbaa !17
  %8332 = load double, ptr %669, align 8, !tbaa !17
  %8333 = fcmp ogt double %8331, %8332
  br i1 %8333, label %8338, label %8334

8334:                                             ; preds = %8330
  %8335 = load double, ptr %667, align 8, !tbaa !17
  %8336 = load double, ptr %668, align 8, !tbaa !17
  %8337 = fcmp oeq double %8335, %8336
  br i1 %8337, label %8338, label %8478

8338:                                             ; preds = %8334, %8330
  call void @llvm.lifetime.start.p0(i64 8, ptr %671) #7
  %8339 = load ptr, ptr %642, align 8, !tbaa !5
  %8340 = icmp ne ptr null, %8339
  br i1 %8340, label %8341, label %8355

8341:                                             ; preds = %8338
  %8342 = load double, ptr %668, align 8, !tbaa !17
  %8343 = load double, ptr %667, align 8, !tbaa !17
  %8344 = fcmp olt double %8342, %8343
  br i1 %8344, label %8345, label %8349

8345:                                             ; preds = %8341
  %8346 = load double, ptr %667, align 8, !tbaa !17
  %8347 = load double, ptr %668, align 8, !tbaa !17
  %8348 = fsub double %8346, %8347
  br label %8353

8349:                                             ; preds = %8341
  %8350 = load double, ptr %668, align 8, !tbaa !17
  %8351 = load double, ptr %667, align 8, !tbaa !17
  %8352 = fsub double %8350, %8351
  br label %8353

8353:                                             ; preds = %8349, %8345
  %8354 = phi double [ %8348, %8345 ], [ %8352, %8349 ]
  br label %8356

8355:                                             ; preds = %8338
  br label %8356

8356:                                             ; preds = %8355, %8353
  %8357 = phi double [ %8354, %8353 ], [ 0.000000e+00, %8355 ]
  store double %8357, ptr %671, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %672) #7
  %8358 = load double, ptr %670, align 8, !tbaa !17
  %8359 = fcmp oge double 0.000000e+00, %8358
  br i1 %8359, label %8360, label %8362

8360:                                             ; preds = %8356
  %8361 = load double, ptr %669, align 8, !tbaa !17
  br label %8372

8362:                                             ; preds = %8356
  %8363 = load double, ptr %671, align 8, !tbaa !17
  %8364 = load double, ptr %670, align 8, !tbaa !17
  %8365 = fcmp olt double 0.000000e+00, %8364
  br i1 %8365, label %8366, label %8368

8366:                                             ; preds = %8362
  %8367 = load double, ptr %670, align 8, !tbaa !17
  br label %8369

8368:                                             ; preds = %8362
  br label %8369

8369:                                             ; preds = %8368, %8366
  %8370 = phi double [ %8367, %8366 ], [ 1.000000e+00, %8368 ]
  %8371 = fdiv double %8363, %8370
  br label %8372

8372:                                             ; preds = %8369, %8360
  %8373 = phi double [ %8361, %8360 ], [ %8371, %8369 ]
  store double %8373, ptr %672, align 8, !tbaa !17
  %8374 = load double, ptr %667, align 8, !tbaa !17
  %8375 = load ptr, ptr %9, align 8, !tbaa !5
  %8376 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %8375, i32 0, i32 16
  %8377 = load double, ptr %8376, align 8, !tbaa !21
  %8378 = fcmp olt double %8374, %8377
  br i1 %8378, label %8379, label %8383

8379:                                             ; preds = %8372
  %8380 = load double, ptr %667, align 8, !tbaa !17
  %8381 = load ptr, ptr %9, align 8, !tbaa !5
  %8382 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %8381, i32 0, i32 16
  store double %8380, ptr %8382, align 8, !tbaa !21
  br label %8383

8383:                                             ; preds = %8379, %8372
  %8384 = load double, ptr %667, align 8, !tbaa !17
  %8385 = load ptr, ptr %9, align 8, !tbaa !5
  %8386 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %8385, i32 0, i32 17
  %8387 = load double, ptr %8386, align 8, !tbaa !22
  %8388 = fcmp ogt double %8384, %8387
  br i1 %8388, label %8389, label %8393

8389:                                             ; preds = %8383
  %8390 = load double, ptr %667, align 8, !tbaa !17
  %8391 = load ptr, ptr %9, align 8, !tbaa !5
  %8392 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %8391, i32 0, i32 17
  store double %8390, ptr %8392, align 8, !tbaa !22
  br label %8393

8393:                                             ; preds = %8389, %8383
  %8394 = load ptr, ptr %9, align 8, !tbaa !5
  %8395 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %8394, i32 0, i32 5
  %8396 = load double, ptr %8395, align 8, !tbaa !23
  %8397 = load double, ptr %671, align 8, !tbaa !17
  %8398 = fcmp olt double %8396, %8397
  br i1 %8398, label %8399, label %8415

8399:                                             ; preds = %8393
  %8400 = load double, ptr %671, align 8, !tbaa !17
  %8401 = load ptr, ptr %9, align 8, !tbaa !5
  %8402 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %8401, i32 0, i32 5
  store double %8400, ptr %8402, align 8, !tbaa !23
  %8403 = load double, ptr %668, align 8, !tbaa !17
  %8404 = load ptr, ptr %9, align 8, !tbaa !5
  %8405 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %8404, i32 0, i32 20
  store double %8403, ptr %8405, align 8, !tbaa !24
  %8406 = load double, ptr %667, align 8, !tbaa !17
  %8407 = load ptr, ptr %9, align 8, !tbaa !5
  %8408 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %8407, i32 0, i32 21
  store double %8406, ptr %8408, align 8, !tbaa !25
  %8409 = load i32, ptr %666, align 4, !tbaa !9
  %8410 = load ptr, ptr %9, align 8, !tbaa !5
  %8411 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %8410, i32 0, i32 22
  store i32 %8409, ptr %8411, align 8, !tbaa !26
  %8412 = load i32, ptr %665, align 4, !tbaa !9
  %8413 = load ptr, ptr %9, align 8, !tbaa !5
  %8414 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %8413, i32 0, i32 23
  store i32 %8412, ptr %8414, align 4, !tbaa !27
  br label %8415

8415:                                             ; preds = %8399, %8393
  %8416 = load ptr, ptr %9, align 8, !tbaa !5
  %8417 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %8416, i32 0, i32 6
  %8418 = load double, ptr %8417, align 8, !tbaa !28
  %8419 = load double, ptr %672, align 8, !tbaa !17
  %8420 = fcmp olt double %8418, %8419
  br i1 %8420, label %8421, label %8425

8421:                                             ; preds = %8415
  %8422 = load double, ptr %672, align 8, !tbaa !17
  %8423 = load ptr, ptr %9, align 8, !tbaa !5
  %8424 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %8423, i32 0, i32 6
  store double %8422, ptr %8424, align 8, !tbaa !28
  br label %8425

8425:                                             ; preds = %8421, %8415
  %8426 = load double, ptr %672, align 8, !tbaa !17
  %8427 = load double, ptr %672, align 8, !tbaa !17
  %8428 = fmul double %8426, %8427
  store double %8428, ptr %663, align 8, !tbaa !17
  %8429 = load double, ptr %27, align 8, !tbaa !17
  %8430 = load double, ptr %663, align 8, !tbaa !17
  %8431 = fcmp ogt double %8429, %8430
  br i1 %8431, label %8432, label %8451

8432:                                             ; preds = %8425
  %8433 = load double, ptr %654, align 8, !tbaa !17
  %8434 = load double, ptr %663, align 8, !tbaa !17
  %8435 = fsub double %8434, %8433
  store double %8435, ptr %663, align 8, !tbaa !17
  %8436 = load ptr, ptr %9, align 8, !tbaa !5
  %8437 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %8436, i32 0, i32 8
  %8438 = load double, ptr %8437, align 8, !tbaa !29
  %8439 = load double, ptr %663, align 8, !tbaa !17
  %8440 = fadd double %8438, %8439
  store double %8440, ptr %664, align 8, !tbaa !17
  %8441 = load double, ptr %664, align 8, !tbaa !17
  %8442 = load ptr, ptr %9, align 8, !tbaa !5
  %8443 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %8442, i32 0, i32 8
  %8444 = load double, ptr %8443, align 8, !tbaa !29
  %8445 = fsub double %8441, %8444
  %8446 = load double, ptr %663, align 8, !tbaa !17
  %8447 = fsub double %8445, %8446
  store double %8447, ptr %654, align 8, !tbaa !17
  %8448 = load double, ptr %664, align 8, !tbaa !17
  %8449 = load ptr, ptr %9, align 8, !tbaa !5
  %8450 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %8449, i32 0, i32 8
  store double %8448, ptr %8450, align 8, !tbaa !29
  br label %8451

8451:                                             ; preds = %8432, %8425
  %8452 = load double, ptr %670, align 8, !tbaa !17
  %8453 = call double @libxsmm_kahan_sum(double noundef %8452, ptr noundef %660, ptr noundef %657)
  %8454 = load double, ptr %669, align 8, !tbaa !17
  %8455 = call double @libxsmm_kahan_sum(double noundef %8454, ptr noundef %661, ptr noundef %658)
  %8456 = load double, ptr %671, align 8, !tbaa !17
  %8457 = call double @libxsmm_kahan_sum(double noundef %8456, ptr noundef %662, ptr noundef %659)
  %8458 = load double, ptr %668, align 8, !tbaa !17
  %8459 = load double, ptr %668, align 8, !tbaa !17
  %8460 = fmul double %8458, %8459
  %8461 = call double @libxsmm_kahan_sum(double noundef %8460, ptr noundef %646, ptr noundef %644)
  %8462 = load double, ptr %667, align 8, !tbaa !17
  %8463 = load double, ptr %667, align 8, !tbaa !17
  %8464 = fmul double %8462, %8463
  %8465 = call double @libxsmm_kahan_sum(double noundef %8464, ptr noundef %647, ptr noundef %645)
  %8466 = load double, ptr %671, align 8, !tbaa !17
  %8467 = load double, ptr %671, align 8, !tbaa !17
  %8468 = fmul double %8466, %8467
  store double %8468, ptr %663, align 8, !tbaa !17
  %8469 = load double, ptr %27, align 8, !tbaa !17
  %8470 = load double, ptr %663, align 8, !tbaa !17
  %8471 = fcmp ogt double %8469, %8470
  br i1 %8471, label %8472, label %8477

8472:                                             ; preds = %8451
  %8473 = load double, ptr %663, align 8, !tbaa !17
  %8474 = load ptr, ptr %9, align 8, !tbaa !5
  %8475 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %8474, i32 0, i32 7
  %8476 = call double @libxsmm_kahan_sum(double noundef %8473, ptr noundef %8475, ptr noundef %643)
  br label %8477

8477:                                             ; preds = %8472, %8451
  call void @llvm.lifetime.end.p0(i64 8, ptr %672) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %671) #7
  br label %8502

8478:                                             ; preds = %8334, %8326
  %8479 = load double, ptr %668, align 8, !tbaa !17
  %8480 = load double, ptr %668, align 8, !tbaa !17
  %8481 = fcmp oeq double %8479, %8480
  br i1 %8481, label %8482, label %8486

8482:                                             ; preds = %8478
  %8483 = load double, ptr %27, align 8, !tbaa !17
  %8484 = load double, ptr %670, align 8, !tbaa !17
  %8485 = fcmp ogt double %8483, %8484
  br label %8486

8486:                                             ; preds = %8482, %8478
  %8487 = phi i1 [ false, %8478 ], [ %8485, %8482 ]
  %8488 = zext i1 %8487 to i64
  %8489 = select i1 %8487, i32 1, i32 2
  store i32 %8489, ptr %19, align 4, !tbaa !9
  %8490 = load i32, ptr %666, align 4, !tbaa !9
  %8491 = load ptr, ptr %9, align 8, !tbaa !5
  %8492 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %8491, i32 0, i32 22
  store i32 %8490, ptr %8492, align 8, !tbaa !26
  %8493 = load i32, ptr %665, align 4, !tbaa !9
  %8494 = load ptr, ptr %9, align 8, !tbaa !5
  %8495 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %8494, i32 0, i32 23
  store i32 %8493, ptr %8495, align 4, !tbaa !27
  %8496 = load double, ptr %668, align 8, !tbaa !17
  %8497 = load ptr, ptr %9, align 8, !tbaa !5
  %8498 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %8497, i32 0, i32 20
  store double %8496, ptr %8498, align 8, !tbaa !24
  %8499 = load double, ptr %667, align 8, !tbaa !17
  %8500 = load ptr, ptr %9, align 8, !tbaa !5
  %8501 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %8500, i32 0, i32 21
  store double %8499, ptr %8501, align 8, !tbaa !25
  store i32 150, ptr %60, align 4
  br label %8503

8502:                                             ; preds = %8477
  store i32 0, ptr %60, align 4
  br label %8503

8503:                                             ; preds = %8502, %8486
  call void @llvm.lifetime.end.p0(i64 8, ptr %670) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %669) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %668) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %667) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %666) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %665) #7
  %8504 = load i32, ptr %60, align 4
  switch i32 %8504, label %15542 [
    i32 0, label %8505
    i32 150, label %8509
  ]

8505:                                             ; preds = %8503
  br label %8506

8506:                                             ; preds = %8505
  %8507 = load i32, ptr %656, align 4, !tbaa !9
  %8508 = add nsw i32 %8507, 1
  store i32 %8508, ptr %656, align 4, !tbaa !9
  br label %8258, !llvm.loop !93

8509:                                             ; preds = %8503, %8258
  %8510 = load i32, ptr %19, align 4, !tbaa !9
  %8511 = icmp eq i32 0, %8510
  br i1 %8511, label %8512, label %8543

8512:                                             ; preds = %8509
  %8513 = load double, ptr %660, align 8, !tbaa !17
  %8514 = load ptr, ptr %9, align 8, !tbaa !5
  %8515 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %8514, i32 0, i32 10
  %8516 = call double @libxsmm_kahan_sum(double noundef %8513, ptr noundef %8515, ptr noundef %652)
  %8517 = load double, ptr %661, align 8, !tbaa !17
  %8518 = load ptr, ptr %9, align 8, !tbaa !5
  %8519 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %8518, i32 0, i32 15
  %8520 = call double @libxsmm_kahan_sum(double noundef %8517, ptr noundef %8519, ptr noundef %653)
  %8521 = load ptr, ptr %9, align 8, !tbaa !5
  %8522 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %8521, i32 0, i32 2
  %8523 = load double, ptr %8522, align 8, !tbaa !32
  %8524 = load double, ptr %662, align 8, !tbaa !17
  %8525 = fcmp olt double %8523, %8524
  br i1 %8525, label %8526, label %8530

8526:                                             ; preds = %8512
  %8527 = load double, ptr %662, align 8, !tbaa !17
  %8528 = load ptr, ptr %9, align 8, !tbaa !5
  %8529 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %8528, i32 0, i32 2
  store double %8527, ptr %8529, align 8, !tbaa !32
  br label %8530

8530:                                             ; preds = %8526, %8512
  %8531 = load double, ptr %648, align 8, !tbaa !17
  %8532 = load double, ptr %660, align 8, !tbaa !17
  %8533 = fcmp olt double %8531, %8532
  br i1 %8533, label %8534, label %8536

8534:                                             ; preds = %8530
  %8535 = load double, ptr %660, align 8, !tbaa !17
  store double %8535, ptr %648, align 8, !tbaa !17
  br label %8536

8536:                                             ; preds = %8534, %8530
  %8537 = load double, ptr %649, align 8, !tbaa !17
  %8538 = load double, ptr %661, align 8, !tbaa !17
  %8539 = fcmp olt double %8537, %8538
  br i1 %8539, label %8540, label %8542

8540:                                             ; preds = %8536
  %8541 = load double, ptr %661, align 8, !tbaa !17
  store double %8541, ptr %649, align 8, !tbaa !17
  br label %8542

8542:                                             ; preds = %8540, %8536
  br label %8544

8543:                                             ; preds = %8509
  store i32 147, ptr %60, align 4
  br label %8545

8544:                                             ; preds = %8542
  store i32 0, ptr %60, align 4
  br label %8545

8545:                                             ; preds = %8544, %8543
  call void @llvm.lifetime.end.p0(i64 8, ptr %664) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %663) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %662) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %661) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %660) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %659) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %658) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %657) #7
  %8546 = load i32, ptr %60, align 4
  switch i32 %8546, label %15542 [
    i32 0, label %8547
    i32 147, label %8551
  ]

8547:                                             ; preds = %8545
  br label %8548

8548:                                             ; preds = %8547
  %8549 = load i32, ptr %655, align 4, !tbaa !9
  %8550 = add nsw i32 %8549, 1
  store i32 %8550, ptr %655, align 4, !tbaa !9
  br label %8253, !llvm.loop !94

8551:                                             ; preds = %8545, %8253
  %8552 = load i32, ptr %19, align 4, !tbaa !9
  %8553 = icmp eq i32 0, %8552
  br i1 %8553, label %8554, label %8798

8554:                                             ; preds = %8551
  call void @llvm.lifetime.start.p0(i64 8, ptr %673) #7
  store double 0.000000e+00, ptr %673, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %674) #7
  store double 0.000000e+00, ptr %674, align 8, !tbaa !17
  %8555 = load ptr, ptr %9, align 8, !tbaa !5
  %8556 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %8555, i32 0, i32 14
  %8557 = load double, ptr %8556, align 8, !tbaa !34
  %8558 = fcmp oeq double 0.000000e+00, %8557
  br i1 %8558, label %8559, label %8560

8559:                                             ; preds = %8554
  br label %8561

8560:                                             ; preds = %8554
  call void @__assert_fail(ptr noundef @.str.1, ptr noundef @.str.2, i32 noundef 130, ptr noundef @__PRETTY_FUNCTION__.libxsmm_matdiff) #9
  unreachable

8561:                                             ; preds = %8559
  %8562 = load ptr, ptr %9, align 8, !tbaa !5
  %8563 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %8562, i32 0, i32 19
  %8564 = load double, ptr %8563, align 8, !tbaa !35
  %8565 = fcmp oeq double 0.000000e+00, %8564
  br i1 %8565, label %8566, label %8567

8566:                                             ; preds = %8561
  br label %8568

8567:                                             ; preds = %8561
  call void @__assert_fail(ptr noundef @.str.3, ptr noundef @.str.2, i32 noundef 131, ptr noundef @__PRETTY_FUNCTION__.libxsmm_matdiff) #9
  unreachable

8568:                                             ; preds = %8566
  %8569 = load i64, ptr %24, align 8, !tbaa !12
  %8570 = icmp ne i64 0, %8569
  br i1 %8570, label %8571, label %8588

8571:                                             ; preds = %8568
  %8572 = load ptr, ptr %9, align 8, !tbaa !5
  %8573 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %8572, i32 0, i32 10
  %8574 = load double, ptr %8573, align 8, !tbaa !36
  %8575 = load i64, ptr %24, align 8, !tbaa !12
  %8576 = uitofp i64 %8575 to double
  %8577 = fdiv double %8574, %8576
  %8578 = load ptr, ptr %9, align 8, !tbaa !5
  %8579 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %8578, i32 0, i32 13
  store double %8577, ptr %8579, align 8, !tbaa !37
  %8580 = load ptr, ptr %9, align 8, !tbaa !5
  %8581 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %8580, i32 0, i32 15
  %8582 = load double, ptr %8581, align 8, !tbaa !38
  %8583 = load i64, ptr %24, align 8, !tbaa !12
  %8584 = uitofp i64 %8583 to double
  %8585 = fdiv double %8582, %8584
  %8586 = load ptr, ptr %9, align 8, !tbaa !5
  %8587 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %8586, i32 0, i32 18
  store double %8585, ptr %8587, align 8, !tbaa !39
  br label %8588

8588:                                             ; preds = %8571, %8568
  %8589 = load double, ptr %648, align 8, !tbaa !17
  %8590 = fcmp oge double 0.000000e+00, %8589
  br i1 %8590, label %8591, label %8593

8591:                                             ; preds = %8588
  %8592 = load double, ptr %649, align 8, !tbaa !17
  br label %8605

8593:                                             ; preds = %8588
  %8594 = load ptr, ptr %9, align 8, !tbaa !5
  %8595 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %8594, i32 0, i32 2
  %8596 = load double, ptr %8595, align 8, !tbaa !32
  %8597 = load double, ptr %648, align 8, !tbaa !17
  %8598 = fcmp olt double 0.000000e+00, %8597
  br i1 %8598, label %8599, label %8601

8599:                                             ; preds = %8593
  %8600 = load double, ptr %648, align 8, !tbaa !17
  br label %8602

8601:                                             ; preds = %8593
  br label %8602

8602:                                             ; preds = %8601, %8599
  %8603 = phi double [ %8600, %8599 ], [ 1.000000e+00, %8601 ]
  %8604 = fdiv double %8596, %8603
  br label %8605

8605:                                             ; preds = %8602, %8591
  %8606 = phi double [ %8592, %8591 ], [ %8604, %8602 ]
  %8607 = load ptr, ptr %9, align 8, !tbaa !5
  %8608 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %8607, i32 0, i32 3
  store double %8606, ptr %8608, align 8, !tbaa !40
  %8609 = load double, ptr %646, align 8, !tbaa !17
  %8610 = fcmp oge double 0.000000e+00, %8609
  br i1 %8610, label %8611, label %8629

8611:                                             ; preds = %8605
  %8612 = load double, ptr %647, align 8, !tbaa !17
  %8613 = load double, ptr %647, align 8, !tbaa !17
  %8614 = fmul double %8612, %8613
  %8615 = load ptr, ptr %9, align 8, !tbaa !5
  %8616 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %8615, i32 0, i32 7
  %8617 = load double, ptr %8616, align 8, !tbaa !41
  %8618 = fcmp olt double %8614, %8617
  br i1 %8618, label %8619, label %8623

8619:                                             ; preds = %8611
  %8620 = load double, ptr %647, align 8, !tbaa !17
  %8621 = load double, ptr %647, align 8, !tbaa !17
  %8622 = fmul double %8620, %8621
  br label %8627

8623:                                             ; preds = %8611
  %8624 = load ptr, ptr %9, align 8, !tbaa !5
  %8625 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %8624, i32 0, i32 7
  %8626 = load double, ptr %8625, align 8, !tbaa !41
  br label %8627

8627:                                             ; preds = %8623, %8619
  %8628 = phi double [ %8622, %8619 ], [ %8626, %8623 ]
  br label %8641

8629:                                             ; preds = %8605
  %8630 = load ptr, ptr %9, align 8, !tbaa !5
  %8631 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %8630, i32 0, i32 7
  %8632 = load double, ptr %8631, align 8, !tbaa !41
  %8633 = load double, ptr %646, align 8, !tbaa !17
  %8634 = fcmp olt double 0.000000e+00, %8633
  br i1 %8634, label %8635, label %8637

8635:                                             ; preds = %8629
  %8636 = load double, ptr %646, align 8, !tbaa !17
  br label %8638

8637:                                             ; preds = %8629
  br label %8638

8638:                                             ; preds = %8637, %8635
  %8639 = phi double [ %8636, %8635 ], [ 1.000000e+00, %8637 ]
  %8640 = fdiv double %8632, %8639
  br label %8641

8641:                                             ; preds = %8638, %8627
  %8642 = phi double [ %8628, %8627 ], [ %8640, %8638 ]
  %8643 = load ptr, ptr %9, align 8, !tbaa !5
  %8644 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %8643, i32 0, i32 4
  store double %8642, ptr %8644, align 8, !tbaa !42
  store i32 0, ptr %656, align 4, !tbaa !9
  br label %8645

8645:                                             ; preds = %8772, %8641
  %8646 = load i32, ptr %656, align 4, !tbaa !9
  %8647 = load i32, ptr %25, align 4, !tbaa !9
  %8648 = icmp slt i32 %8646, %8647
  br i1 %8648, label %8649, label %8775

8649:                                             ; preds = %8645
  call void @llvm.lifetime.start.p0(i64 8, ptr %675) #7
  store double 0.000000e+00, ptr %675, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %676) #7
  store double 0.000000e+00, ptr %676, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %677) #7
  store double 0.000000e+00, ptr %677, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %678) #7
  store double 0.000000e+00, ptr %678, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %679) #7
  store double 0.000000e+00, ptr %679, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %680) #7
  store double 0.000000e+00, ptr %680, align 8, !tbaa !17
  store i32 0, ptr %655, align 4, !tbaa !9
  br label %8650

8650:                                             ; preds = %8746, %8649
  %8651 = load i32, ptr %655, align 4, !tbaa !9
  %8652 = load i32, ptr %26, align 4, !tbaa !9
  %8653 = icmp slt i32 %8651, %8652
  br i1 %8653, label %8654, label %8749

8654:                                             ; preds = %8650
  call void @llvm.lifetime.start.p0(i64 4, ptr %681) #7
  %8655 = load i32, ptr %655, align 4, !tbaa !9
  store i32 %8655, ptr %681, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %682) #7
  %8656 = load i32, ptr %656, align 4, !tbaa !9
  store i32 %8656, ptr %682, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %683) #7
  %8657 = load ptr, ptr %641, align 8, !tbaa !5
  %8658 = load i32, ptr %681, align 4, !tbaa !9
  %8659 = load i32, ptr %20, align 4, !tbaa !9
  %8660 = mul nsw i32 %8658, %8659
  %8661 = load i32, ptr %682, align 4, !tbaa !9
  %8662 = add nsw i32 %8660, %8661
  %8663 = sext i32 %8662 to i64
  %8664 = getelementptr inbounds double, ptr %8657, i64 %8663
  %8665 = load double, ptr %8664, align 8, !tbaa !17
  store double %8665, ptr %683, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %684) #7
  %8666 = load ptr, ptr %642, align 8, !tbaa !5
  %8667 = icmp ne ptr null, %8666
  br i1 %8667, label %8668, label %8678

8668:                                             ; preds = %8654
  %8669 = load ptr, ptr %642, align 8, !tbaa !5
  %8670 = load i32, ptr %681, align 4, !tbaa !9
  %8671 = load i32, ptr %21, align 4, !tbaa !9
  %8672 = mul nsw i32 %8670, %8671
  %8673 = load i32, ptr %682, align 4, !tbaa !9
  %8674 = add nsw i32 %8672, %8673
  %8675 = sext i32 %8674 to i64
  %8676 = getelementptr inbounds double, ptr %8669, i64 %8675
  %8677 = load double, ptr %8676, align 8, !tbaa !17
  br label %8679

8678:                                             ; preds = %8654
  br label %8679

8679:                                             ; preds = %8678, %8668
  %8680 = phi double [ %8677, %8668 ], [ 0.000000e+00, %8678 ]
  store double %8680, ptr %684, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %685) #7
  %8681 = load ptr, ptr %642, align 8, !tbaa !5
  %8682 = icmp ne ptr null, %8681
  br i1 %8682, label %8683, label %8697

8683:                                             ; preds = %8679
  %8684 = load double, ptr %683, align 8, !tbaa !17
  %8685 = load double, ptr %684, align 8, !tbaa !17
  %8686 = fcmp olt double %8684, %8685
  br i1 %8686, label %8687, label %8691

8687:                                             ; preds = %8683
  %8688 = load double, ptr %684, align 8, !tbaa !17
  %8689 = load double, ptr %683, align 8, !tbaa !17
  %8690 = fsub double %8688, %8689
  br label %8695

8691:                                             ; preds = %8683
  %8692 = load double, ptr %683, align 8, !tbaa !17
  %8693 = load double, ptr %684, align 8, !tbaa !17
  %8694 = fsub double %8692, %8693
  br label %8695

8695:                                             ; preds = %8691, %8687
  %8696 = phi double [ %8690, %8687 ], [ %8694, %8691 ]
  br label %8698

8697:                                             ; preds = %8679
  br label %8698

8698:                                             ; preds = %8697, %8695
  %8699 = phi double [ %8696, %8695 ], [ 0.000000e+00, %8697 ]
  store double %8699, ptr %685, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %686) #7
  %8700 = load double, ptr %683, align 8, !tbaa !17
  %8701 = load ptr, ptr %9, align 8, !tbaa !5
  %8702 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %8701, i32 0, i32 13
  %8703 = load double, ptr %8702, align 8, !tbaa !37
  %8704 = fsub double %8700, %8703
  store double %8704, ptr %686, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %687) #7
  %8705 = load double, ptr %684, align 8, !tbaa !17
  %8706 = load ptr, ptr %9, align 8, !tbaa !5
  %8707 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %8706, i32 0, i32 18
  %8708 = load double, ptr %8707, align 8, !tbaa !39
  %8709 = fsub double %8705, %8708
  store double %8709, ptr %687, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %688) #7
  %8710 = load double, ptr %683, align 8, !tbaa !17
  %8711 = fcmp ole double 0.000000e+00, %8710
  br i1 %8711, label %8712, label %8714

8712:                                             ; preds = %8698
  %8713 = load double, ptr %683, align 8, !tbaa !17
  br label %8717

8714:                                             ; preds = %8698
  %8715 = load double, ptr %683, align 8, !tbaa !17
  %8716 = fneg double %8715
  br label %8717

8717:                                             ; preds = %8714, %8712
  %8718 = phi double [ %8713, %8712 ], [ %8716, %8714 ]
  store double %8718, ptr %688, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %689) #7
  %8719 = load double, ptr %684, align 8, !tbaa !17
  %8720 = fcmp ole double 0.000000e+00, %8719
  br i1 %8720, label %8721, label %8723

8721:                                             ; preds = %8717
  %8722 = load double, ptr %684, align 8, !tbaa !17
  br label %8726

8723:                                             ; preds = %8717
  %8724 = load double, ptr %684, align 8, !tbaa !17
  %8725 = fneg double %8724
  br label %8726

8726:                                             ; preds = %8723, %8721
  %8727 = phi double [ %8722, %8721 ], [ %8725, %8723 ]
  store double %8727, ptr %689, align 8, !tbaa !17
  %8728 = load double, ptr %686, align 8, !tbaa !17
  %8729 = load double, ptr %686, align 8, !tbaa !17
  %8730 = fmul double %8728, %8729
  %8731 = load ptr, ptr %9, align 8, !tbaa !5
  %8732 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %8731, i32 0, i32 14
  %8733 = call double @libxsmm_kahan_sum(double noundef %8730, ptr noundef %8732, ptr noundef %673)
  %8734 = load double, ptr %687, align 8, !tbaa !17
  %8735 = load double, ptr %687, align 8, !tbaa !17
  %8736 = fmul double %8734, %8735
  %8737 = load ptr, ptr %9, align 8, !tbaa !5
  %8738 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %8737, i32 0, i32 19
  %8739 = call double @libxsmm_kahan_sum(double noundef %8736, ptr noundef %8738, ptr noundef %674)
  %8740 = load double, ptr %688, align 8, !tbaa !17
  %8741 = call double @libxsmm_kahan_sum(double noundef %8740, ptr noundef %678, ptr noundef %675)
  %8742 = load double, ptr %689, align 8, !tbaa !17
  %8743 = call double @libxsmm_kahan_sum(double noundef %8742, ptr noundef %679, ptr noundef %676)
  %8744 = load double, ptr %685, align 8, !tbaa !17
  %8745 = call double @libxsmm_kahan_sum(double noundef %8744, ptr noundef %680, ptr noundef %677)
  call void @llvm.lifetime.end.p0(i64 8, ptr %689) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %688) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %687) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %686) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %685) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %684) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %683) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %682) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %681) #7
  br label %8746

8746:                                             ; preds = %8726
  %8747 = load i32, ptr %655, align 4, !tbaa !9
  %8748 = add nsw i32 %8747, 1
  store i32 %8748, ptr %655, align 4, !tbaa !9
  br label %8650, !llvm.loop !95

8749:                                             ; preds = %8650
  %8750 = load ptr, ptr %9, align 8, !tbaa !5
  %8751 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %8750, i32 0, i32 0
  %8752 = load double, ptr %8751, align 8, !tbaa !44
  %8753 = load double, ptr %680, align 8, !tbaa !17
  %8754 = fcmp olt double %8752, %8753
  br i1 %8754, label %8755, label %8759

8755:                                             ; preds = %8749
  %8756 = load double, ptr %680, align 8, !tbaa !17
  %8757 = load ptr, ptr %9, align 8, !tbaa !5
  %8758 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %8757, i32 0, i32 0
  store double %8756, ptr %8758, align 8, !tbaa !44
  br label %8759

8759:                                             ; preds = %8755, %8749
  %8760 = load double, ptr %650, align 8, !tbaa !17
  %8761 = load double, ptr %678, align 8, !tbaa !17
  %8762 = fcmp olt double %8760, %8761
  br i1 %8762, label %8763, label %8765

8763:                                             ; preds = %8759
  %8764 = load double, ptr %678, align 8, !tbaa !17
  store double %8764, ptr %650, align 8, !tbaa !17
  br label %8765

8765:                                             ; preds = %8763, %8759
  %8766 = load double, ptr %651, align 8, !tbaa !17
  %8767 = load double, ptr %679, align 8, !tbaa !17
  %8768 = fcmp olt double %8766, %8767
  br i1 %8768, label %8769, label %8771

8769:                                             ; preds = %8765
  %8770 = load double, ptr %679, align 8, !tbaa !17
  store double %8770, ptr %651, align 8, !tbaa !17
  br label %8771

8771:                                             ; preds = %8769, %8765
  call void @llvm.lifetime.end.p0(i64 8, ptr %680) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %679) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %678) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %677) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %676) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %675) #7
  br label %8772

8772:                                             ; preds = %8771
  %8773 = load i32, ptr %656, align 4, !tbaa !9
  %8774 = add nsw i32 %8773, 1
  store i32 %8774, ptr %656, align 4, !tbaa !9
  br label %8645, !llvm.loop !96

8775:                                             ; preds = %8645
  %8776 = load double, ptr %650, align 8, !tbaa !17
  %8777 = fcmp oge double 0.000000e+00, %8776
  br i1 %8777, label %8778, label %8782

8778:                                             ; preds = %8775
  %8779 = load ptr, ptr %9, align 8, !tbaa !5
  %8780 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %8779, i32 0, i32 0
  %8781 = load double, ptr %8780, align 8, !tbaa !44
  br label %8794

8782:                                             ; preds = %8775
  %8783 = load ptr, ptr %9, align 8, !tbaa !5
  %8784 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %8783, i32 0, i32 0
  %8785 = load double, ptr %8784, align 8, !tbaa !44
  %8786 = load double, ptr %650, align 8, !tbaa !17
  %8787 = fcmp olt double 0.000000e+00, %8786
  br i1 %8787, label %8788, label %8790

8788:                                             ; preds = %8782
  %8789 = load double, ptr %650, align 8, !tbaa !17
  br label %8791

8790:                                             ; preds = %8782
  br label %8791

8791:                                             ; preds = %8790, %8788
  %8792 = phi double [ %8789, %8788 ], [ 1.000000e+00, %8790 ]
  %8793 = fdiv double %8785, %8792
  br label %8794

8794:                                             ; preds = %8791, %8778
  %8795 = phi double [ %8781, %8778 ], [ %8793, %8791 ]
  %8796 = load ptr, ptr %9, align 8, !tbaa !5
  %8797 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %8796, i32 0, i32 1
  store double %8795, ptr %8797, align 8, !tbaa !46
  call void @llvm.lifetime.end.p0(i64 8, ptr %674) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %673) #7
  br label %8798

8798:                                             ; preds = %8794, %8551
  call void @llvm.lifetime.end.p0(i64 4, ptr %656) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %655) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %654) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %653) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %652) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %651) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %650) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %649) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %648) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %647) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %646) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %645) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %644) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %643) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %642) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %641) #7
  br label %9391

8799:                                             ; preds = %8247
  call void @llvm.lifetime.start.p0(i64 8, ptr %690) #7
  %8800 = load ptr, ptr %13, align 8, !tbaa !5
  store ptr %8800, ptr %690, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %691) #7
  %8801 = load ptr, ptr %14, align 8, !tbaa !5
  store ptr %8801, ptr %691, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %692) #7
  store double 0.000000e+00, ptr %692, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %693) #7
  store double 0.000000e+00, ptr %693, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %694) #7
  store double 0.000000e+00, ptr %694, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %695) #7
  store double 0.000000e+00, ptr %695, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %696) #7
  store double 0.000000e+00, ptr %696, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %697) #7
  store double 0.000000e+00, ptr %697, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %698) #7
  store double 0.000000e+00, ptr %698, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %699) #7
  store double 0.000000e+00, ptr %699, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %700) #7
  store double 0.000000e+00, ptr %700, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %701) #7
  store double 0.000000e+00, ptr %701, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %702) #7
  store double 0.000000e+00, ptr %702, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %703) #7
  store double 0.000000e+00, ptr %703, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %704) #7
  %8802 = load i32, ptr %25, align 4, !tbaa !9
  %8803 = sext i32 %8802 to i64
  %8804 = load i32, ptr %26, align 4, !tbaa !9
  %8805 = sext i32 %8804 to i64
  %8806 = mul i64 %8803, %8805
  store i64 %8806, ptr %704, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 8, ptr %705) #7
  %8807 = load i64, ptr %704, align 8, !tbaa !12
  %8808 = call i64 @libxsmm_coprime2(i64 noundef %8807)
  store i64 %8808, ptr %705, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 4, ptr %706) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %707) #7
  store i32 0, ptr %706, align 4, !tbaa !9
  br label %8809

8809:                                             ; preds = %9122, %8799
  %8810 = load i32, ptr %706, align 4, !tbaa !9
  %8811 = load i32, ptr %26, align 4, !tbaa !9
  %8812 = icmp slt i32 %8810, %8811
  br i1 %8812, label %8813, label %9125

8813:                                             ; preds = %8809
  call void @llvm.lifetime.start.p0(i64 8, ptr %708) #7
  store double 0.000000e+00, ptr %708, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %709) #7
  store double 0.000000e+00, ptr %709, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %710) #7
  store double 0.000000e+00, ptr %710, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %711) #7
  store double 0.000000e+00, ptr %711, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %712) #7
  store double 0.000000e+00, ptr %712, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %713) #7
  store double 0.000000e+00, ptr %713, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %714) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %715) #7
  store i32 0, ptr %707, align 4, !tbaa !9
  br label %8814

8814:                                             ; preds = %9080, %8813
  %8815 = load i32, ptr %707, align 4, !tbaa !9
  %8816 = load i32, ptr %25, align 4, !tbaa !9
  %8817 = icmp slt i32 %8815, %8816
  br i1 %8817, label %8818, label %9083

8818:                                             ; preds = %8814
  call void @llvm.lifetime.start.p0(i64 8, ptr %716) #7
  %8819 = load i64, ptr %705, align 8, !tbaa !12
  %8820 = load i32, ptr %706, align 4, !tbaa !9
  %8821 = load i32, ptr %25, align 4, !tbaa !9
  %8822 = mul nsw i32 %8820, %8821
  %8823 = load i32, ptr %707, align 4, !tbaa !9
  %8824 = add nsw i32 %8822, %8823
  %8825 = sext i32 %8824 to i64
  %8826 = mul i64 %8819, %8825
  %8827 = load i64, ptr %704, align 8, !tbaa !12
  %8828 = urem i64 %8826, %8827
  store i64 %8828, ptr %716, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 4, ptr %717) #7
  %8829 = load i64, ptr %716, align 8, !tbaa !12
  %8830 = load i32, ptr %25, align 4, !tbaa !9
  %8831 = sext i32 %8830 to i64
  %8832 = udiv i64 %8829, %8831
  %8833 = trunc i64 %8832 to i32
  store i32 %8833, ptr %717, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %718) #7
  %8834 = load i64, ptr %716, align 8, !tbaa !12
  %8835 = load i32, ptr %25, align 4, !tbaa !9
  %8836 = sext i32 %8835 to i64
  %8837 = urem i64 %8834, %8836
  %8838 = trunc i64 %8837 to i32
  store i32 %8838, ptr %718, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %719) #7
  %8839 = load ptr, ptr %691, align 8, !tbaa !5
  %8840 = icmp ne ptr null, %8839
  br i1 %8840, label %8841, label %8851

8841:                                             ; preds = %8818
  %8842 = load ptr, ptr %691, align 8, !tbaa !5
  %8843 = load i32, ptr %717, align 4, !tbaa !9
  %8844 = load i32, ptr %21, align 4, !tbaa !9
  %8845 = mul nsw i32 %8843, %8844
  %8846 = load i32, ptr %718, align 4, !tbaa !9
  %8847 = add nsw i32 %8845, %8846
  %8848 = sext i32 %8847 to i64
  %8849 = getelementptr inbounds double, ptr %8842, i64 %8848
  %8850 = load double, ptr %8849, align 8, !tbaa !17
  br label %8852

8851:                                             ; preds = %8818
  br label %8852

8852:                                             ; preds = %8851, %8841
  %8853 = phi double [ %8850, %8841 ], [ 0.000000e+00, %8851 ]
  store double %8853, ptr %719, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %720) #7
  %8854 = load ptr, ptr %690, align 8, !tbaa !5
  %8855 = load i32, ptr %717, align 4, !tbaa !9
  %8856 = load i32, ptr %20, align 4, !tbaa !9
  %8857 = mul nsw i32 %8855, %8856
  %8858 = load i32, ptr %718, align 4, !tbaa !9
  %8859 = add nsw i32 %8857, %8858
  %8860 = sext i32 %8859 to i64
  %8861 = getelementptr inbounds double, ptr %8854, i64 %8860
  %8862 = load double, ptr %8861, align 8, !tbaa !17
  store double %8862, ptr %720, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %721) #7
  %8863 = load double, ptr %719, align 8, !tbaa !17
  %8864 = fcmp ole double 0.000000e+00, %8863
  br i1 %8864, label %8865, label %8867

8865:                                             ; preds = %8852
  %8866 = load double, ptr %719, align 8, !tbaa !17
  br label %8870

8867:                                             ; preds = %8852
  %8868 = load double, ptr %719, align 8, !tbaa !17
  %8869 = fneg double %8868
  br label %8870

8870:                                             ; preds = %8867, %8865
  %8871 = phi double [ %8866, %8865 ], [ %8869, %8867 ]
  store double %8871, ptr %721, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %722) #7
  %8872 = load double, ptr %720, align 8, !tbaa !17
  %8873 = fcmp ole double 0.000000e+00, %8872
  br i1 %8873, label %8874, label %8876

8874:                                             ; preds = %8870
  %8875 = load double, ptr %720, align 8, !tbaa !17
  br label %8879

8876:                                             ; preds = %8870
  %8877 = load double, ptr %720, align 8, !tbaa !17
  %8878 = fneg double %8877
  br label %8879

8879:                                             ; preds = %8876, %8874
  %8880 = phi double [ %8875, %8874 ], [ %8878, %8876 ]
  store double %8880, ptr %722, align 8, !tbaa !17
  %8881 = load double, ptr %720, align 8, !tbaa !17
  %8882 = load ptr, ptr %9, align 8, !tbaa !5
  %8883 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %8882, i32 0, i32 11
  %8884 = load double, ptr %8883, align 8, !tbaa !14
  %8885 = fcmp olt double %8881, %8884
  br i1 %8885, label %8886, label %8890

8886:                                             ; preds = %8879
  %8887 = load double, ptr %720, align 8, !tbaa !17
  %8888 = load ptr, ptr %9, align 8, !tbaa !5
  %8889 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %8888, i32 0, i32 11
  store double %8887, ptr %8889, align 8, !tbaa !14
  br label %8890

8890:                                             ; preds = %8886, %8879
  %8891 = load double, ptr %720, align 8, !tbaa !17
  %8892 = load ptr, ptr %9, align 8, !tbaa !5
  %8893 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %8892, i32 0, i32 12
  %8894 = load double, ptr %8893, align 8, !tbaa !20
  %8895 = fcmp ogt double %8891, %8894
  br i1 %8895, label %8896, label %8900

8896:                                             ; preds = %8890
  %8897 = load double, ptr %720, align 8, !tbaa !17
  %8898 = load ptr, ptr %9, align 8, !tbaa !5
  %8899 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %8898, i32 0, i32 12
  store double %8897, ptr %8899, align 8, !tbaa !20
  br label %8900

8900:                                             ; preds = %8896, %8890
  %8901 = load double, ptr %719, align 8, !tbaa !17
  %8902 = load double, ptr %719, align 8, !tbaa !17
  %8903 = fcmp oeq double %8901, %8902
  br i1 %8903, label %8904, label %9052

8904:                                             ; preds = %8900
  %8905 = load double, ptr %27, align 8, !tbaa !17
  %8906 = load double, ptr %721, align 8, !tbaa !17
  %8907 = fcmp ogt double %8905, %8906
  br i1 %8907, label %8912, label %8908

8908:                                             ; preds = %8904
  %8909 = load double, ptr %719, align 8, !tbaa !17
  %8910 = load double, ptr %720, align 8, !tbaa !17
  %8911 = fcmp oeq double %8909, %8910
  br i1 %8911, label %8912, label %9052

8912:                                             ; preds = %8908, %8904
  call void @llvm.lifetime.start.p0(i64 8, ptr %723) #7
  %8913 = load ptr, ptr %691, align 8, !tbaa !5
  %8914 = icmp ne ptr null, %8913
  br i1 %8914, label %8915, label %8929

8915:                                             ; preds = %8912
  %8916 = load double, ptr %720, align 8, !tbaa !17
  %8917 = load double, ptr %719, align 8, !tbaa !17
  %8918 = fcmp olt double %8916, %8917
  br i1 %8918, label %8919, label %8923

8919:                                             ; preds = %8915
  %8920 = load double, ptr %719, align 8, !tbaa !17
  %8921 = load double, ptr %720, align 8, !tbaa !17
  %8922 = fsub double %8920, %8921
  br label %8927

8923:                                             ; preds = %8915
  %8924 = load double, ptr %720, align 8, !tbaa !17
  %8925 = load double, ptr %719, align 8, !tbaa !17
  %8926 = fsub double %8924, %8925
  br label %8927

8927:                                             ; preds = %8923, %8919
  %8928 = phi double [ %8922, %8919 ], [ %8926, %8923 ]
  br label %8930

8929:                                             ; preds = %8912
  br label %8930

8930:                                             ; preds = %8929, %8927
  %8931 = phi double [ %8928, %8927 ], [ 0.000000e+00, %8929 ]
  store double %8931, ptr %723, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %724) #7
  %8932 = load double, ptr %722, align 8, !tbaa !17
  %8933 = fcmp oge double 0.000000e+00, %8932
  br i1 %8933, label %8934, label %8936

8934:                                             ; preds = %8930
  %8935 = load double, ptr %721, align 8, !tbaa !17
  br label %8946

8936:                                             ; preds = %8930
  %8937 = load double, ptr %723, align 8, !tbaa !17
  %8938 = load double, ptr %722, align 8, !tbaa !17
  %8939 = fcmp olt double 0.000000e+00, %8938
  br i1 %8939, label %8940, label %8942

8940:                                             ; preds = %8936
  %8941 = load double, ptr %722, align 8, !tbaa !17
  br label %8943

8942:                                             ; preds = %8936
  br label %8943

8943:                                             ; preds = %8942, %8940
  %8944 = phi double [ %8941, %8940 ], [ 1.000000e+00, %8942 ]
  %8945 = fdiv double %8937, %8944
  br label %8946

8946:                                             ; preds = %8943, %8934
  %8947 = phi double [ %8935, %8934 ], [ %8945, %8943 ]
  store double %8947, ptr %724, align 8, !tbaa !17
  %8948 = load double, ptr %719, align 8, !tbaa !17
  %8949 = load ptr, ptr %9, align 8, !tbaa !5
  %8950 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %8949, i32 0, i32 16
  %8951 = load double, ptr %8950, align 8, !tbaa !21
  %8952 = fcmp olt double %8948, %8951
  br i1 %8952, label %8953, label %8957

8953:                                             ; preds = %8946
  %8954 = load double, ptr %719, align 8, !tbaa !17
  %8955 = load ptr, ptr %9, align 8, !tbaa !5
  %8956 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %8955, i32 0, i32 16
  store double %8954, ptr %8956, align 8, !tbaa !21
  br label %8957

8957:                                             ; preds = %8953, %8946
  %8958 = load double, ptr %719, align 8, !tbaa !17
  %8959 = load ptr, ptr %9, align 8, !tbaa !5
  %8960 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %8959, i32 0, i32 17
  %8961 = load double, ptr %8960, align 8, !tbaa !22
  %8962 = fcmp ogt double %8958, %8961
  br i1 %8962, label %8963, label %8967

8963:                                             ; preds = %8957
  %8964 = load double, ptr %719, align 8, !tbaa !17
  %8965 = load ptr, ptr %9, align 8, !tbaa !5
  %8966 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %8965, i32 0, i32 17
  store double %8964, ptr %8966, align 8, !tbaa !22
  br label %8967

8967:                                             ; preds = %8963, %8957
  %8968 = load ptr, ptr %9, align 8, !tbaa !5
  %8969 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %8968, i32 0, i32 5
  %8970 = load double, ptr %8969, align 8, !tbaa !23
  %8971 = load double, ptr %723, align 8, !tbaa !17
  %8972 = fcmp olt double %8970, %8971
  br i1 %8972, label %8973, label %8989

8973:                                             ; preds = %8967
  %8974 = load double, ptr %723, align 8, !tbaa !17
  %8975 = load ptr, ptr %9, align 8, !tbaa !5
  %8976 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %8975, i32 0, i32 5
  store double %8974, ptr %8976, align 8, !tbaa !23
  %8977 = load double, ptr %720, align 8, !tbaa !17
  %8978 = load ptr, ptr %9, align 8, !tbaa !5
  %8979 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %8978, i32 0, i32 20
  store double %8977, ptr %8979, align 8, !tbaa !24
  %8980 = load double, ptr %719, align 8, !tbaa !17
  %8981 = load ptr, ptr %9, align 8, !tbaa !5
  %8982 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %8981, i32 0, i32 21
  store double %8980, ptr %8982, align 8, !tbaa !25
  %8983 = load i32, ptr %718, align 4, !tbaa !9
  %8984 = load ptr, ptr %9, align 8, !tbaa !5
  %8985 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %8984, i32 0, i32 22
  store i32 %8983, ptr %8985, align 8, !tbaa !26
  %8986 = load i32, ptr %717, align 4, !tbaa !9
  %8987 = load ptr, ptr %9, align 8, !tbaa !5
  %8988 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %8987, i32 0, i32 23
  store i32 %8986, ptr %8988, align 4, !tbaa !27
  br label %8989

8989:                                             ; preds = %8973, %8967
  %8990 = load ptr, ptr %9, align 8, !tbaa !5
  %8991 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %8990, i32 0, i32 6
  %8992 = load double, ptr %8991, align 8, !tbaa !28
  %8993 = load double, ptr %724, align 8, !tbaa !17
  %8994 = fcmp olt double %8992, %8993
  br i1 %8994, label %8995, label %8999

8995:                                             ; preds = %8989
  %8996 = load double, ptr %724, align 8, !tbaa !17
  %8997 = load ptr, ptr %9, align 8, !tbaa !5
  %8998 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %8997, i32 0, i32 6
  store double %8996, ptr %8998, align 8, !tbaa !28
  br label %8999

8999:                                             ; preds = %8995, %8989
  %9000 = load double, ptr %724, align 8, !tbaa !17
  %9001 = load double, ptr %724, align 8, !tbaa !17
  %9002 = fmul double %9000, %9001
  store double %9002, ptr %714, align 8, !tbaa !17
  %9003 = load double, ptr %27, align 8, !tbaa !17
  %9004 = load double, ptr %714, align 8, !tbaa !17
  %9005 = fcmp ogt double %9003, %9004
  br i1 %9005, label %9006, label %9025

9006:                                             ; preds = %8999
  %9007 = load double, ptr %703, align 8, !tbaa !17
  %9008 = load double, ptr %714, align 8, !tbaa !17
  %9009 = fsub double %9008, %9007
  store double %9009, ptr %714, align 8, !tbaa !17
  %9010 = load ptr, ptr %9, align 8, !tbaa !5
  %9011 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %9010, i32 0, i32 8
  %9012 = load double, ptr %9011, align 8, !tbaa !29
  %9013 = load double, ptr %714, align 8, !tbaa !17
  %9014 = fadd double %9012, %9013
  store double %9014, ptr %715, align 8, !tbaa !17
  %9015 = load double, ptr %715, align 8, !tbaa !17
  %9016 = load ptr, ptr %9, align 8, !tbaa !5
  %9017 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %9016, i32 0, i32 8
  %9018 = load double, ptr %9017, align 8, !tbaa !29
  %9019 = fsub double %9015, %9018
  %9020 = load double, ptr %714, align 8, !tbaa !17
  %9021 = fsub double %9019, %9020
  store double %9021, ptr %703, align 8, !tbaa !17
  %9022 = load double, ptr %715, align 8, !tbaa !17
  %9023 = load ptr, ptr %9, align 8, !tbaa !5
  %9024 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %9023, i32 0, i32 8
  store double %9022, ptr %9024, align 8, !tbaa !29
  br label %9025

9025:                                             ; preds = %9006, %8999
  %9026 = load double, ptr %722, align 8, !tbaa !17
  %9027 = call double @libxsmm_kahan_sum(double noundef %9026, ptr noundef %711, ptr noundef %708)
  %9028 = load double, ptr %721, align 8, !tbaa !17
  %9029 = call double @libxsmm_kahan_sum(double noundef %9028, ptr noundef %712, ptr noundef %709)
  %9030 = load double, ptr %723, align 8, !tbaa !17
  %9031 = call double @libxsmm_kahan_sum(double noundef %9030, ptr noundef %713, ptr noundef %710)
  %9032 = load double, ptr %720, align 8, !tbaa !17
  %9033 = load double, ptr %720, align 8, !tbaa !17
  %9034 = fmul double %9032, %9033
  %9035 = call double @libxsmm_kahan_sum(double noundef %9034, ptr noundef %695, ptr noundef %693)
  %9036 = load double, ptr %719, align 8, !tbaa !17
  %9037 = load double, ptr %719, align 8, !tbaa !17
  %9038 = fmul double %9036, %9037
  %9039 = call double @libxsmm_kahan_sum(double noundef %9038, ptr noundef %696, ptr noundef %694)
  %9040 = load double, ptr %723, align 8, !tbaa !17
  %9041 = load double, ptr %723, align 8, !tbaa !17
  %9042 = fmul double %9040, %9041
  store double %9042, ptr %714, align 8, !tbaa !17
  %9043 = load double, ptr %27, align 8, !tbaa !17
  %9044 = load double, ptr %714, align 8, !tbaa !17
  %9045 = fcmp ogt double %9043, %9044
  br i1 %9045, label %9046, label %9051

9046:                                             ; preds = %9025
  %9047 = load double, ptr %714, align 8, !tbaa !17
  %9048 = load ptr, ptr %9, align 8, !tbaa !5
  %9049 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %9048, i32 0, i32 7
  %9050 = call double @libxsmm_kahan_sum(double noundef %9047, ptr noundef %9049, ptr noundef %692)
  br label %9051

9051:                                             ; preds = %9046, %9025
  call void @llvm.lifetime.end.p0(i64 8, ptr %724) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %723) #7
  br label %9076

9052:                                             ; preds = %8908, %8900
  %9053 = load double, ptr %720, align 8, !tbaa !17
  %9054 = load double, ptr %720, align 8, !tbaa !17
  %9055 = fcmp oeq double %9053, %9054
  br i1 %9055, label %9056, label %9060

9056:                                             ; preds = %9052
  %9057 = load double, ptr %27, align 8, !tbaa !17
  %9058 = load double, ptr %722, align 8, !tbaa !17
  %9059 = fcmp ogt double %9057, %9058
  br label %9060

9060:                                             ; preds = %9056, %9052
  %9061 = phi i1 [ false, %9052 ], [ %9059, %9056 ]
  %9062 = zext i1 %9061 to i64
  %9063 = select i1 %9061, i32 1, i32 2
  store i32 %9063, ptr %19, align 4, !tbaa !9
  %9064 = load i32, ptr %718, align 4, !tbaa !9
  %9065 = load ptr, ptr %9, align 8, !tbaa !5
  %9066 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %9065, i32 0, i32 22
  store i32 %9064, ptr %9066, align 8, !tbaa !26
  %9067 = load i32, ptr %717, align 4, !tbaa !9
  %9068 = load ptr, ptr %9, align 8, !tbaa !5
  %9069 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %9068, i32 0, i32 23
  store i32 %9067, ptr %9069, align 4, !tbaa !27
  %9070 = load double, ptr %720, align 8, !tbaa !17
  %9071 = load ptr, ptr %9, align 8, !tbaa !5
  %9072 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %9071, i32 0, i32 20
  store double %9070, ptr %9072, align 8, !tbaa !24
  %9073 = load double, ptr %719, align 8, !tbaa !17
  %9074 = load ptr, ptr %9, align 8, !tbaa !5
  %9075 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %9074, i32 0, i32 21
  store double %9073, ptr %9075, align 8, !tbaa !25
  store i32 162, ptr %60, align 4
  br label %9077

9076:                                             ; preds = %9051
  store i32 0, ptr %60, align 4
  br label %9077

9077:                                             ; preds = %9076, %9060
  call void @llvm.lifetime.end.p0(i64 8, ptr %722) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %721) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %720) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %719) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %718) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %717) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %716) #7
  %9078 = load i32, ptr %60, align 4
  switch i32 %9078, label %15542 [
    i32 0, label %9079
    i32 162, label %9083
  ]

9079:                                             ; preds = %9077
  br label %9080

9080:                                             ; preds = %9079
  %9081 = load i32, ptr %707, align 4, !tbaa !9
  %9082 = add nsw i32 %9081, 1
  store i32 %9082, ptr %707, align 4, !tbaa !9
  br label %8814, !llvm.loop !97

9083:                                             ; preds = %9077, %8814
  %9084 = load i32, ptr %19, align 4, !tbaa !9
  %9085 = icmp eq i32 0, %9084
  br i1 %9085, label %9086, label %9117

9086:                                             ; preds = %9083
  %9087 = load double, ptr %711, align 8, !tbaa !17
  %9088 = load ptr, ptr %9, align 8, !tbaa !5
  %9089 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %9088, i32 0, i32 10
  %9090 = call double @libxsmm_kahan_sum(double noundef %9087, ptr noundef %9089, ptr noundef %701)
  %9091 = load double, ptr %712, align 8, !tbaa !17
  %9092 = load ptr, ptr %9, align 8, !tbaa !5
  %9093 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %9092, i32 0, i32 15
  %9094 = call double @libxsmm_kahan_sum(double noundef %9091, ptr noundef %9093, ptr noundef %702)
  %9095 = load ptr, ptr %9, align 8, !tbaa !5
  %9096 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %9095, i32 0, i32 2
  %9097 = load double, ptr %9096, align 8, !tbaa !32
  %9098 = load double, ptr %713, align 8, !tbaa !17
  %9099 = fcmp olt double %9097, %9098
  br i1 %9099, label %9100, label %9104

9100:                                             ; preds = %9086
  %9101 = load double, ptr %713, align 8, !tbaa !17
  %9102 = load ptr, ptr %9, align 8, !tbaa !5
  %9103 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %9102, i32 0, i32 2
  store double %9101, ptr %9103, align 8, !tbaa !32
  br label %9104

9104:                                             ; preds = %9100, %9086
  %9105 = load double, ptr %697, align 8, !tbaa !17
  %9106 = load double, ptr %711, align 8, !tbaa !17
  %9107 = fcmp olt double %9105, %9106
  br i1 %9107, label %9108, label %9110

9108:                                             ; preds = %9104
  %9109 = load double, ptr %711, align 8, !tbaa !17
  store double %9109, ptr %697, align 8, !tbaa !17
  br label %9110

9110:                                             ; preds = %9108, %9104
  %9111 = load double, ptr %698, align 8, !tbaa !17
  %9112 = load double, ptr %712, align 8, !tbaa !17
  %9113 = fcmp olt double %9111, %9112
  br i1 %9113, label %9114, label %9116

9114:                                             ; preds = %9110
  %9115 = load double, ptr %712, align 8, !tbaa !17
  store double %9115, ptr %698, align 8, !tbaa !17
  br label %9116

9116:                                             ; preds = %9114, %9110
  br label %9118

9117:                                             ; preds = %9083
  store i32 159, ptr %60, align 4
  br label %9119

9118:                                             ; preds = %9116
  store i32 0, ptr %60, align 4
  br label %9119

9119:                                             ; preds = %9118, %9117
  call void @llvm.lifetime.end.p0(i64 8, ptr %715) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %714) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %713) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %712) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %711) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %710) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %709) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %708) #7
  %9120 = load i32, ptr %60, align 4
  switch i32 %9120, label %15542 [
    i32 0, label %9121
    i32 159, label %9125
  ]

9121:                                             ; preds = %9119
  br label %9122

9122:                                             ; preds = %9121
  %9123 = load i32, ptr %706, align 4, !tbaa !9
  %9124 = add nsw i32 %9123, 1
  store i32 %9124, ptr %706, align 4, !tbaa !9
  br label %8809, !llvm.loop !98

9125:                                             ; preds = %9119, %8809
  %9126 = load i32, ptr %19, align 4, !tbaa !9
  %9127 = icmp eq i32 0, %9126
  br i1 %9127, label %9128, label %9390

9128:                                             ; preds = %9125
  call void @llvm.lifetime.start.p0(i64 8, ptr %725) #7
  store double 0.000000e+00, ptr %725, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %726) #7
  store double 0.000000e+00, ptr %726, align 8, !tbaa !17
  %9129 = load ptr, ptr %9, align 8, !tbaa !5
  %9130 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %9129, i32 0, i32 14
  %9131 = load double, ptr %9130, align 8, !tbaa !34
  %9132 = fcmp oeq double 0.000000e+00, %9131
  br i1 %9132, label %9133, label %9134

9133:                                             ; preds = %9128
  br label %9135

9134:                                             ; preds = %9128
  call void @__assert_fail(ptr noundef @.str.1, ptr noundef @.str.2, i32 noundef 130, ptr noundef @__PRETTY_FUNCTION__.libxsmm_matdiff) #9
  unreachable

9135:                                             ; preds = %9133
  %9136 = load ptr, ptr %9, align 8, !tbaa !5
  %9137 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %9136, i32 0, i32 19
  %9138 = load double, ptr %9137, align 8, !tbaa !35
  %9139 = fcmp oeq double 0.000000e+00, %9138
  br i1 %9139, label %9140, label %9141

9140:                                             ; preds = %9135
  br label %9142

9141:                                             ; preds = %9135
  call void @__assert_fail(ptr noundef @.str.3, ptr noundef @.str.2, i32 noundef 131, ptr noundef @__PRETTY_FUNCTION__.libxsmm_matdiff) #9
  unreachable

9142:                                             ; preds = %9140
  %9143 = load i64, ptr %24, align 8, !tbaa !12
  %9144 = icmp ne i64 0, %9143
  br i1 %9144, label %9145, label %9162

9145:                                             ; preds = %9142
  %9146 = load ptr, ptr %9, align 8, !tbaa !5
  %9147 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %9146, i32 0, i32 10
  %9148 = load double, ptr %9147, align 8, !tbaa !36
  %9149 = load i64, ptr %24, align 8, !tbaa !12
  %9150 = uitofp i64 %9149 to double
  %9151 = fdiv double %9148, %9150
  %9152 = load ptr, ptr %9, align 8, !tbaa !5
  %9153 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %9152, i32 0, i32 13
  store double %9151, ptr %9153, align 8, !tbaa !37
  %9154 = load ptr, ptr %9, align 8, !tbaa !5
  %9155 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %9154, i32 0, i32 15
  %9156 = load double, ptr %9155, align 8, !tbaa !38
  %9157 = load i64, ptr %24, align 8, !tbaa !12
  %9158 = uitofp i64 %9157 to double
  %9159 = fdiv double %9156, %9158
  %9160 = load ptr, ptr %9, align 8, !tbaa !5
  %9161 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %9160, i32 0, i32 18
  store double %9159, ptr %9161, align 8, !tbaa !39
  br label %9162

9162:                                             ; preds = %9145, %9142
  %9163 = load double, ptr %697, align 8, !tbaa !17
  %9164 = fcmp oge double 0.000000e+00, %9163
  br i1 %9164, label %9165, label %9167

9165:                                             ; preds = %9162
  %9166 = load double, ptr %698, align 8, !tbaa !17
  br label %9179

9167:                                             ; preds = %9162
  %9168 = load ptr, ptr %9, align 8, !tbaa !5
  %9169 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %9168, i32 0, i32 2
  %9170 = load double, ptr %9169, align 8, !tbaa !32
  %9171 = load double, ptr %697, align 8, !tbaa !17
  %9172 = fcmp olt double 0.000000e+00, %9171
  br i1 %9172, label %9173, label %9175

9173:                                             ; preds = %9167
  %9174 = load double, ptr %697, align 8, !tbaa !17
  br label %9176

9175:                                             ; preds = %9167
  br label %9176

9176:                                             ; preds = %9175, %9173
  %9177 = phi double [ %9174, %9173 ], [ 1.000000e+00, %9175 ]
  %9178 = fdiv double %9170, %9177
  br label %9179

9179:                                             ; preds = %9176, %9165
  %9180 = phi double [ %9166, %9165 ], [ %9178, %9176 ]
  %9181 = load ptr, ptr %9, align 8, !tbaa !5
  %9182 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %9181, i32 0, i32 3
  store double %9180, ptr %9182, align 8, !tbaa !40
  %9183 = load double, ptr %695, align 8, !tbaa !17
  %9184 = fcmp oge double 0.000000e+00, %9183
  br i1 %9184, label %9185, label %9203

9185:                                             ; preds = %9179
  %9186 = load double, ptr %696, align 8, !tbaa !17
  %9187 = load double, ptr %696, align 8, !tbaa !17
  %9188 = fmul double %9186, %9187
  %9189 = load ptr, ptr %9, align 8, !tbaa !5
  %9190 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %9189, i32 0, i32 7
  %9191 = load double, ptr %9190, align 8, !tbaa !41
  %9192 = fcmp olt double %9188, %9191
  br i1 %9192, label %9193, label %9197

9193:                                             ; preds = %9185
  %9194 = load double, ptr %696, align 8, !tbaa !17
  %9195 = load double, ptr %696, align 8, !tbaa !17
  %9196 = fmul double %9194, %9195
  br label %9201

9197:                                             ; preds = %9185
  %9198 = load ptr, ptr %9, align 8, !tbaa !5
  %9199 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %9198, i32 0, i32 7
  %9200 = load double, ptr %9199, align 8, !tbaa !41
  br label %9201

9201:                                             ; preds = %9197, %9193
  %9202 = phi double [ %9196, %9193 ], [ %9200, %9197 ]
  br label %9215

9203:                                             ; preds = %9179
  %9204 = load ptr, ptr %9, align 8, !tbaa !5
  %9205 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %9204, i32 0, i32 7
  %9206 = load double, ptr %9205, align 8, !tbaa !41
  %9207 = load double, ptr %695, align 8, !tbaa !17
  %9208 = fcmp olt double 0.000000e+00, %9207
  br i1 %9208, label %9209, label %9211

9209:                                             ; preds = %9203
  %9210 = load double, ptr %695, align 8, !tbaa !17
  br label %9212

9211:                                             ; preds = %9203
  br label %9212

9212:                                             ; preds = %9211, %9209
  %9213 = phi double [ %9210, %9209 ], [ 1.000000e+00, %9211 ]
  %9214 = fdiv double %9206, %9213
  br label %9215

9215:                                             ; preds = %9212, %9201
  %9216 = phi double [ %9202, %9201 ], [ %9214, %9212 ]
  %9217 = load ptr, ptr %9, align 8, !tbaa !5
  %9218 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %9217, i32 0, i32 4
  store double %9216, ptr %9218, align 8, !tbaa !42
  store i32 0, ptr %707, align 4, !tbaa !9
  br label %9219

9219:                                             ; preds = %9364, %9215
  %9220 = load i32, ptr %707, align 4, !tbaa !9
  %9221 = load i32, ptr %25, align 4, !tbaa !9
  %9222 = icmp slt i32 %9220, %9221
  br i1 %9222, label %9223, label %9367

9223:                                             ; preds = %9219
  call void @llvm.lifetime.start.p0(i64 8, ptr %727) #7
  store double 0.000000e+00, ptr %727, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %728) #7
  store double 0.000000e+00, ptr %728, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %729) #7
  store double 0.000000e+00, ptr %729, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %730) #7
  store double 0.000000e+00, ptr %730, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %731) #7
  store double 0.000000e+00, ptr %731, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %732) #7
  store double 0.000000e+00, ptr %732, align 8, !tbaa !17
  store i32 0, ptr %706, align 4, !tbaa !9
  br label %9224

9224:                                             ; preds = %9338, %9223
  %9225 = load i32, ptr %706, align 4, !tbaa !9
  %9226 = load i32, ptr %26, align 4, !tbaa !9
  %9227 = icmp slt i32 %9225, %9226
  br i1 %9227, label %9228, label %9341

9228:                                             ; preds = %9224
  call void @llvm.lifetime.start.p0(i64 8, ptr %733) #7
  %9229 = load i64, ptr %705, align 8, !tbaa !12
  %9230 = load i32, ptr %706, align 4, !tbaa !9
  %9231 = load i32, ptr %25, align 4, !tbaa !9
  %9232 = mul nsw i32 %9230, %9231
  %9233 = load i32, ptr %707, align 4, !tbaa !9
  %9234 = add nsw i32 %9232, %9233
  %9235 = sext i32 %9234 to i64
  %9236 = mul i64 %9229, %9235
  %9237 = load i64, ptr %704, align 8, !tbaa !12
  %9238 = urem i64 %9236, %9237
  store i64 %9238, ptr %733, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 4, ptr %734) #7
  %9239 = load i64, ptr %733, align 8, !tbaa !12
  %9240 = load i32, ptr %25, align 4, !tbaa !9
  %9241 = sext i32 %9240 to i64
  %9242 = udiv i64 %9239, %9241
  %9243 = trunc i64 %9242 to i32
  store i32 %9243, ptr %734, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %735) #7
  %9244 = load i64, ptr %733, align 8, !tbaa !12
  %9245 = load i32, ptr %25, align 4, !tbaa !9
  %9246 = sext i32 %9245 to i64
  %9247 = urem i64 %9244, %9246
  %9248 = trunc i64 %9247 to i32
  store i32 %9248, ptr %735, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %736) #7
  %9249 = load ptr, ptr %690, align 8, !tbaa !5
  %9250 = load i32, ptr %734, align 4, !tbaa !9
  %9251 = load i32, ptr %20, align 4, !tbaa !9
  %9252 = mul nsw i32 %9250, %9251
  %9253 = load i32, ptr %735, align 4, !tbaa !9
  %9254 = add nsw i32 %9252, %9253
  %9255 = sext i32 %9254 to i64
  %9256 = getelementptr inbounds double, ptr %9249, i64 %9255
  %9257 = load double, ptr %9256, align 8, !tbaa !17
  store double %9257, ptr %736, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %737) #7
  %9258 = load ptr, ptr %691, align 8, !tbaa !5
  %9259 = icmp ne ptr null, %9258
  br i1 %9259, label %9260, label %9270

9260:                                             ; preds = %9228
  %9261 = load ptr, ptr %691, align 8, !tbaa !5
  %9262 = load i32, ptr %734, align 4, !tbaa !9
  %9263 = load i32, ptr %21, align 4, !tbaa !9
  %9264 = mul nsw i32 %9262, %9263
  %9265 = load i32, ptr %735, align 4, !tbaa !9
  %9266 = add nsw i32 %9264, %9265
  %9267 = sext i32 %9266 to i64
  %9268 = getelementptr inbounds double, ptr %9261, i64 %9267
  %9269 = load double, ptr %9268, align 8, !tbaa !17
  br label %9271

9270:                                             ; preds = %9228
  br label %9271

9271:                                             ; preds = %9270, %9260
  %9272 = phi double [ %9269, %9260 ], [ 0.000000e+00, %9270 ]
  store double %9272, ptr %737, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %738) #7
  %9273 = load ptr, ptr %691, align 8, !tbaa !5
  %9274 = icmp ne ptr null, %9273
  br i1 %9274, label %9275, label %9289

9275:                                             ; preds = %9271
  %9276 = load double, ptr %736, align 8, !tbaa !17
  %9277 = load double, ptr %737, align 8, !tbaa !17
  %9278 = fcmp olt double %9276, %9277
  br i1 %9278, label %9279, label %9283

9279:                                             ; preds = %9275
  %9280 = load double, ptr %737, align 8, !tbaa !17
  %9281 = load double, ptr %736, align 8, !tbaa !17
  %9282 = fsub double %9280, %9281
  br label %9287

9283:                                             ; preds = %9275
  %9284 = load double, ptr %736, align 8, !tbaa !17
  %9285 = load double, ptr %737, align 8, !tbaa !17
  %9286 = fsub double %9284, %9285
  br label %9287

9287:                                             ; preds = %9283, %9279
  %9288 = phi double [ %9282, %9279 ], [ %9286, %9283 ]
  br label %9290

9289:                                             ; preds = %9271
  br label %9290

9290:                                             ; preds = %9289, %9287
  %9291 = phi double [ %9288, %9287 ], [ 0.000000e+00, %9289 ]
  store double %9291, ptr %738, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %739) #7
  %9292 = load double, ptr %736, align 8, !tbaa !17
  %9293 = load ptr, ptr %9, align 8, !tbaa !5
  %9294 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %9293, i32 0, i32 13
  %9295 = load double, ptr %9294, align 8, !tbaa !37
  %9296 = fsub double %9292, %9295
  store double %9296, ptr %739, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %740) #7
  %9297 = load double, ptr %737, align 8, !tbaa !17
  %9298 = load ptr, ptr %9, align 8, !tbaa !5
  %9299 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %9298, i32 0, i32 18
  %9300 = load double, ptr %9299, align 8, !tbaa !39
  %9301 = fsub double %9297, %9300
  store double %9301, ptr %740, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %741) #7
  %9302 = load double, ptr %736, align 8, !tbaa !17
  %9303 = fcmp ole double 0.000000e+00, %9302
  br i1 %9303, label %9304, label %9306

9304:                                             ; preds = %9290
  %9305 = load double, ptr %736, align 8, !tbaa !17
  br label %9309

9306:                                             ; preds = %9290
  %9307 = load double, ptr %736, align 8, !tbaa !17
  %9308 = fneg double %9307
  br label %9309

9309:                                             ; preds = %9306, %9304
  %9310 = phi double [ %9305, %9304 ], [ %9308, %9306 ]
  store double %9310, ptr %741, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %742) #7
  %9311 = load double, ptr %737, align 8, !tbaa !17
  %9312 = fcmp ole double 0.000000e+00, %9311
  br i1 %9312, label %9313, label %9315

9313:                                             ; preds = %9309
  %9314 = load double, ptr %737, align 8, !tbaa !17
  br label %9318

9315:                                             ; preds = %9309
  %9316 = load double, ptr %737, align 8, !tbaa !17
  %9317 = fneg double %9316
  br label %9318

9318:                                             ; preds = %9315, %9313
  %9319 = phi double [ %9314, %9313 ], [ %9317, %9315 ]
  store double %9319, ptr %742, align 8, !tbaa !17
  %9320 = load double, ptr %739, align 8, !tbaa !17
  %9321 = load double, ptr %739, align 8, !tbaa !17
  %9322 = fmul double %9320, %9321
  %9323 = load ptr, ptr %9, align 8, !tbaa !5
  %9324 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %9323, i32 0, i32 14
  %9325 = call double @libxsmm_kahan_sum(double noundef %9322, ptr noundef %9324, ptr noundef %725)
  %9326 = load double, ptr %740, align 8, !tbaa !17
  %9327 = load double, ptr %740, align 8, !tbaa !17
  %9328 = fmul double %9326, %9327
  %9329 = load ptr, ptr %9, align 8, !tbaa !5
  %9330 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %9329, i32 0, i32 19
  %9331 = call double @libxsmm_kahan_sum(double noundef %9328, ptr noundef %9330, ptr noundef %726)
  %9332 = load double, ptr %741, align 8, !tbaa !17
  %9333 = call double @libxsmm_kahan_sum(double noundef %9332, ptr noundef %730, ptr noundef %727)
  %9334 = load double, ptr %742, align 8, !tbaa !17
  %9335 = call double @libxsmm_kahan_sum(double noundef %9334, ptr noundef %731, ptr noundef %728)
  %9336 = load double, ptr %738, align 8, !tbaa !17
  %9337 = call double @libxsmm_kahan_sum(double noundef %9336, ptr noundef %732, ptr noundef %729)
  call void @llvm.lifetime.end.p0(i64 8, ptr %742) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %741) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %740) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %739) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %738) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %737) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %736) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %735) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %734) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %733) #7
  br label %9338

9338:                                             ; preds = %9318
  %9339 = load i32, ptr %706, align 4, !tbaa !9
  %9340 = add nsw i32 %9339, 1
  store i32 %9340, ptr %706, align 4, !tbaa !9
  br label %9224, !llvm.loop !99

9341:                                             ; preds = %9224
  %9342 = load ptr, ptr %9, align 8, !tbaa !5
  %9343 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %9342, i32 0, i32 0
  %9344 = load double, ptr %9343, align 8, !tbaa !44
  %9345 = load double, ptr %732, align 8, !tbaa !17
  %9346 = fcmp olt double %9344, %9345
  br i1 %9346, label %9347, label %9351

9347:                                             ; preds = %9341
  %9348 = load double, ptr %732, align 8, !tbaa !17
  %9349 = load ptr, ptr %9, align 8, !tbaa !5
  %9350 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %9349, i32 0, i32 0
  store double %9348, ptr %9350, align 8, !tbaa !44
  br label %9351

9351:                                             ; preds = %9347, %9341
  %9352 = load double, ptr %699, align 8, !tbaa !17
  %9353 = load double, ptr %730, align 8, !tbaa !17
  %9354 = fcmp olt double %9352, %9353
  br i1 %9354, label %9355, label %9357

9355:                                             ; preds = %9351
  %9356 = load double, ptr %730, align 8, !tbaa !17
  store double %9356, ptr %699, align 8, !tbaa !17
  br label %9357

9357:                                             ; preds = %9355, %9351
  %9358 = load double, ptr %700, align 8, !tbaa !17
  %9359 = load double, ptr %731, align 8, !tbaa !17
  %9360 = fcmp olt double %9358, %9359
  br i1 %9360, label %9361, label %9363

9361:                                             ; preds = %9357
  %9362 = load double, ptr %731, align 8, !tbaa !17
  store double %9362, ptr %700, align 8, !tbaa !17
  br label %9363

9363:                                             ; preds = %9361, %9357
  call void @llvm.lifetime.end.p0(i64 8, ptr %732) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %731) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %730) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %729) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %728) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %727) #7
  br label %9364

9364:                                             ; preds = %9363
  %9365 = load i32, ptr %707, align 4, !tbaa !9
  %9366 = add nsw i32 %9365, 1
  store i32 %9366, ptr %707, align 4, !tbaa !9
  br label %9219, !llvm.loop !100

9367:                                             ; preds = %9219
  %9368 = load double, ptr %699, align 8, !tbaa !17
  %9369 = fcmp oge double 0.000000e+00, %9368
  br i1 %9369, label %9370, label %9374

9370:                                             ; preds = %9367
  %9371 = load ptr, ptr %9, align 8, !tbaa !5
  %9372 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %9371, i32 0, i32 0
  %9373 = load double, ptr %9372, align 8, !tbaa !44
  br label %9386

9374:                                             ; preds = %9367
  %9375 = load ptr, ptr %9, align 8, !tbaa !5
  %9376 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %9375, i32 0, i32 0
  %9377 = load double, ptr %9376, align 8, !tbaa !44
  %9378 = load double, ptr %699, align 8, !tbaa !17
  %9379 = fcmp olt double 0.000000e+00, %9378
  br i1 %9379, label %9380, label %9382

9380:                                             ; preds = %9374
  %9381 = load double, ptr %699, align 8, !tbaa !17
  br label %9383

9382:                                             ; preds = %9374
  br label %9383

9383:                                             ; preds = %9382, %9380
  %9384 = phi double [ %9381, %9380 ], [ 1.000000e+00, %9382 ]
  %9385 = fdiv double %9377, %9384
  br label %9386

9386:                                             ; preds = %9383, %9370
  %9387 = phi double [ %9373, %9370 ], [ %9385, %9383 ]
  %9388 = load ptr, ptr %9, align 8, !tbaa !5
  %9389 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %9388, i32 0, i32 1
  store double %9387, ptr %9389, align 8, !tbaa !46
  call void @llvm.lifetime.end.p0(i64 8, ptr %726) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %725) #7
  br label %9390

9390:                                             ; preds = %9386, %9125
  call void @llvm.lifetime.end.p0(i64 4, ptr %707) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %706) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %705) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %704) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %703) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %702) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %701) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %700) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %699) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %698) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %697) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %696) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %695) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %694) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %693) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %692) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %691) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %690) #7
  br label %9391

9391:                                             ; preds = %9390, %8798
  br label %15200

9392:                                             ; preds = %1323
  %9393 = load i32, ptr %23, align 4, !tbaa !9
  %9394 = icmp eq i32 0, %9393
  br i1 %9394, label %9395, label %9948

9395:                                             ; preds = %9392
  call void @llvm.lifetime.start.p0(i64 8, ptr %743) #7
  %9396 = load ptr, ptr %13, align 8, !tbaa !5
  store ptr %9396, ptr %743, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %744) #7
  %9397 = load ptr, ptr %14, align 8, !tbaa !5
  store ptr %9397, ptr %744, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %745) #7
  store double 0.000000e+00, ptr %745, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %746) #7
  store double 0.000000e+00, ptr %746, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %747) #7
  store double 0.000000e+00, ptr %747, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %748) #7
  store double 0.000000e+00, ptr %748, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %749) #7
  store double 0.000000e+00, ptr %749, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %750) #7
  store double 0.000000e+00, ptr %750, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %751) #7
  store double 0.000000e+00, ptr %751, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %752) #7
  store double 0.000000e+00, ptr %752, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %753) #7
  store double 0.000000e+00, ptr %753, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %754) #7
  store double 0.000000e+00, ptr %754, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %755) #7
  store double 0.000000e+00, ptr %755, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %756) #7
  store double 0.000000e+00, ptr %756, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 4, ptr %757) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %758) #7
  store i32 0, ptr %757, align 4, !tbaa !9
  br label %9398

9398:                                             ; preds = %9695, %9395
  %9399 = load i32, ptr %757, align 4, !tbaa !9
  %9400 = load i32, ptr %26, align 4, !tbaa !9
  %9401 = icmp slt i32 %9399, %9400
  br i1 %9401, label %9402, label %9698

9402:                                             ; preds = %9398
  call void @llvm.lifetime.start.p0(i64 8, ptr %759) #7
  store double 0.000000e+00, ptr %759, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %760) #7
  store double 0.000000e+00, ptr %760, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %761) #7
  store double 0.000000e+00, ptr %761, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %762) #7
  store double 0.000000e+00, ptr %762, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %763) #7
  store double 0.000000e+00, ptr %763, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %764) #7
  store double 0.000000e+00, ptr %764, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %765) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %766) #7
  store i32 0, ptr %758, align 4, !tbaa !9
  br label %9403

9403:                                             ; preds = %9653, %9402
  %9404 = load i32, ptr %758, align 4, !tbaa !9
  %9405 = load i32, ptr %25, align 4, !tbaa !9
  %9406 = icmp slt i32 %9404, %9405
  br i1 %9406, label %9407, label %9656

9407:                                             ; preds = %9403
  call void @llvm.lifetime.start.p0(i64 4, ptr %767) #7
  %9408 = load i32, ptr %757, align 4, !tbaa !9
  store i32 %9408, ptr %767, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %768) #7
  %9409 = load i32, ptr %758, align 4, !tbaa !9
  store i32 %9409, ptr %768, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %769) #7
  %9410 = load ptr, ptr %744, align 8, !tbaa !5
  %9411 = icmp ne ptr null, %9410
  br i1 %9411, label %9412, label %9422

9412:                                             ; preds = %9407
  %9413 = load ptr, ptr %744, align 8, !tbaa !5
  %9414 = load i32, ptr %767, align 4, !tbaa !9
  %9415 = load i32, ptr %21, align 4, !tbaa !9
  %9416 = mul nsw i32 %9414, %9415
  %9417 = load i32, ptr %768, align 4, !tbaa !9
  %9418 = add nsw i32 %9416, %9417
  %9419 = sext i32 %9418 to i64
  %9420 = getelementptr inbounds float, ptr %9413, i64 %9419
  %9421 = load float, ptr %9420, align 4, !tbaa !101
  br label %9423

9422:                                             ; preds = %9407
  br label %9423

9423:                                             ; preds = %9422, %9412
  %9424 = phi float [ %9421, %9412 ], [ 0.000000e+00, %9422 ]
  %9425 = fpext float %9424 to double
  store double %9425, ptr %769, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %770) #7
  %9426 = load ptr, ptr %743, align 8, !tbaa !5
  %9427 = load i32, ptr %767, align 4, !tbaa !9
  %9428 = load i32, ptr %20, align 4, !tbaa !9
  %9429 = mul nsw i32 %9427, %9428
  %9430 = load i32, ptr %768, align 4, !tbaa !9
  %9431 = add nsw i32 %9429, %9430
  %9432 = sext i32 %9431 to i64
  %9433 = getelementptr inbounds float, ptr %9426, i64 %9432
  %9434 = load float, ptr %9433, align 4, !tbaa !101
  %9435 = fpext float %9434 to double
  store double %9435, ptr %770, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %771) #7
  %9436 = load double, ptr %769, align 8, !tbaa !17
  %9437 = fcmp ole double 0.000000e+00, %9436
  br i1 %9437, label %9438, label %9440

9438:                                             ; preds = %9423
  %9439 = load double, ptr %769, align 8, !tbaa !17
  br label %9443

9440:                                             ; preds = %9423
  %9441 = load double, ptr %769, align 8, !tbaa !17
  %9442 = fneg double %9441
  br label %9443

9443:                                             ; preds = %9440, %9438
  %9444 = phi double [ %9439, %9438 ], [ %9442, %9440 ]
  store double %9444, ptr %771, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %772) #7
  %9445 = load double, ptr %770, align 8, !tbaa !17
  %9446 = fcmp ole double 0.000000e+00, %9445
  br i1 %9446, label %9447, label %9449

9447:                                             ; preds = %9443
  %9448 = load double, ptr %770, align 8, !tbaa !17
  br label %9452

9449:                                             ; preds = %9443
  %9450 = load double, ptr %770, align 8, !tbaa !17
  %9451 = fneg double %9450
  br label %9452

9452:                                             ; preds = %9449, %9447
  %9453 = phi double [ %9448, %9447 ], [ %9451, %9449 ]
  store double %9453, ptr %772, align 8, !tbaa !17
  %9454 = load double, ptr %770, align 8, !tbaa !17
  %9455 = load ptr, ptr %9, align 8, !tbaa !5
  %9456 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %9455, i32 0, i32 11
  %9457 = load double, ptr %9456, align 8, !tbaa !14
  %9458 = fcmp olt double %9454, %9457
  br i1 %9458, label %9459, label %9463

9459:                                             ; preds = %9452
  %9460 = load double, ptr %770, align 8, !tbaa !17
  %9461 = load ptr, ptr %9, align 8, !tbaa !5
  %9462 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %9461, i32 0, i32 11
  store double %9460, ptr %9462, align 8, !tbaa !14
  br label %9463

9463:                                             ; preds = %9459, %9452
  %9464 = load double, ptr %770, align 8, !tbaa !17
  %9465 = load ptr, ptr %9, align 8, !tbaa !5
  %9466 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %9465, i32 0, i32 12
  %9467 = load double, ptr %9466, align 8, !tbaa !20
  %9468 = fcmp ogt double %9464, %9467
  br i1 %9468, label %9469, label %9473

9469:                                             ; preds = %9463
  %9470 = load double, ptr %770, align 8, !tbaa !17
  %9471 = load ptr, ptr %9, align 8, !tbaa !5
  %9472 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %9471, i32 0, i32 12
  store double %9470, ptr %9472, align 8, !tbaa !20
  br label %9473

9473:                                             ; preds = %9469, %9463
  %9474 = load double, ptr %769, align 8, !tbaa !17
  %9475 = load double, ptr %769, align 8, !tbaa !17
  %9476 = fcmp oeq double %9474, %9475
  br i1 %9476, label %9477, label %9625

9477:                                             ; preds = %9473
  %9478 = load double, ptr %27, align 8, !tbaa !17
  %9479 = load double, ptr %771, align 8, !tbaa !17
  %9480 = fcmp ogt double %9478, %9479
  br i1 %9480, label %9485, label %9481

9481:                                             ; preds = %9477
  %9482 = load double, ptr %769, align 8, !tbaa !17
  %9483 = load double, ptr %770, align 8, !tbaa !17
  %9484 = fcmp oeq double %9482, %9483
  br i1 %9484, label %9485, label %9625

9485:                                             ; preds = %9481, %9477
  call void @llvm.lifetime.start.p0(i64 8, ptr %773) #7
  %9486 = load ptr, ptr %744, align 8, !tbaa !5
  %9487 = icmp ne ptr null, %9486
  br i1 %9487, label %9488, label %9502

9488:                                             ; preds = %9485
  %9489 = load double, ptr %770, align 8, !tbaa !17
  %9490 = load double, ptr %769, align 8, !tbaa !17
  %9491 = fcmp olt double %9489, %9490
  br i1 %9491, label %9492, label %9496

9492:                                             ; preds = %9488
  %9493 = load double, ptr %769, align 8, !tbaa !17
  %9494 = load double, ptr %770, align 8, !tbaa !17
  %9495 = fsub double %9493, %9494
  br label %9500

9496:                                             ; preds = %9488
  %9497 = load double, ptr %770, align 8, !tbaa !17
  %9498 = load double, ptr %769, align 8, !tbaa !17
  %9499 = fsub double %9497, %9498
  br label %9500

9500:                                             ; preds = %9496, %9492
  %9501 = phi double [ %9495, %9492 ], [ %9499, %9496 ]
  br label %9503

9502:                                             ; preds = %9485
  br label %9503

9503:                                             ; preds = %9502, %9500
  %9504 = phi double [ %9501, %9500 ], [ 0.000000e+00, %9502 ]
  store double %9504, ptr %773, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %774) #7
  %9505 = load double, ptr %772, align 8, !tbaa !17
  %9506 = fcmp oge double 0.000000e+00, %9505
  br i1 %9506, label %9507, label %9509

9507:                                             ; preds = %9503
  %9508 = load double, ptr %771, align 8, !tbaa !17
  br label %9519

9509:                                             ; preds = %9503
  %9510 = load double, ptr %773, align 8, !tbaa !17
  %9511 = load double, ptr %772, align 8, !tbaa !17
  %9512 = fcmp olt double 0.000000e+00, %9511
  br i1 %9512, label %9513, label %9515

9513:                                             ; preds = %9509
  %9514 = load double, ptr %772, align 8, !tbaa !17
  br label %9516

9515:                                             ; preds = %9509
  br label %9516

9516:                                             ; preds = %9515, %9513
  %9517 = phi double [ %9514, %9513 ], [ 1.000000e+00, %9515 ]
  %9518 = fdiv double %9510, %9517
  br label %9519

9519:                                             ; preds = %9516, %9507
  %9520 = phi double [ %9508, %9507 ], [ %9518, %9516 ]
  store double %9520, ptr %774, align 8, !tbaa !17
  %9521 = load double, ptr %769, align 8, !tbaa !17
  %9522 = load ptr, ptr %9, align 8, !tbaa !5
  %9523 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %9522, i32 0, i32 16
  %9524 = load double, ptr %9523, align 8, !tbaa !21
  %9525 = fcmp olt double %9521, %9524
  br i1 %9525, label %9526, label %9530

9526:                                             ; preds = %9519
  %9527 = load double, ptr %769, align 8, !tbaa !17
  %9528 = load ptr, ptr %9, align 8, !tbaa !5
  %9529 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %9528, i32 0, i32 16
  store double %9527, ptr %9529, align 8, !tbaa !21
  br label %9530

9530:                                             ; preds = %9526, %9519
  %9531 = load double, ptr %769, align 8, !tbaa !17
  %9532 = load ptr, ptr %9, align 8, !tbaa !5
  %9533 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %9532, i32 0, i32 17
  %9534 = load double, ptr %9533, align 8, !tbaa !22
  %9535 = fcmp ogt double %9531, %9534
  br i1 %9535, label %9536, label %9540

9536:                                             ; preds = %9530
  %9537 = load double, ptr %769, align 8, !tbaa !17
  %9538 = load ptr, ptr %9, align 8, !tbaa !5
  %9539 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %9538, i32 0, i32 17
  store double %9537, ptr %9539, align 8, !tbaa !22
  br label %9540

9540:                                             ; preds = %9536, %9530
  %9541 = load ptr, ptr %9, align 8, !tbaa !5
  %9542 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %9541, i32 0, i32 5
  %9543 = load double, ptr %9542, align 8, !tbaa !23
  %9544 = load double, ptr %773, align 8, !tbaa !17
  %9545 = fcmp olt double %9543, %9544
  br i1 %9545, label %9546, label %9562

9546:                                             ; preds = %9540
  %9547 = load double, ptr %773, align 8, !tbaa !17
  %9548 = load ptr, ptr %9, align 8, !tbaa !5
  %9549 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %9548, i32 0, i32 5
  store double %9547, ptr %9549, align 8, !tbaa !23
  %9550 = load double, ptr %770, align 8, !tbaa !17
  %9551 = load ptr, ptr %9, align 8, !tbaa !5
  %9552 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %9551, i32 0, i32 20
  store double %9550, ptr %9552, align 8, !tbaa !24
  %9553 = load double, ptr %769, align 8, !tbaa !17
  %9554 = load ptr, ptr %9, align 8, !tbaa !5
  %9555 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %9554, i32 0, i32 21
  store double %9553, ptr %9555, align 8, !tbaa !25
  %9556 = load i32, ptr %768, align 4, !tbaa !9
  %9557 = load ptr, ptr %9, align 8, !tbaa !5
  %9558 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %9557, i32 0, i32 22
  store i32 %9556, ptr %9558, align 8, !tbaa !26
  %9559 = load i32, ptr %767, align 4, !tbaa !9
  %9560 = load ptr, ptr %9, align 8, !tbaa !5
  %9561 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %9560, i32 0, i32 23
  store i32 %9559, ptr %9561, align 4, !tbaa !27
  br label %9562

9562:                                             ; preds = %9546, %9540
  %9563 = load ptr, ptr %9, align 8, !tbaa !5
  %9564 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %9563, i32 0, i32 6
  %9565 = load double, ptr %9564, align 8, !tbaa !28
  %9566 = load double, ptr %774, align 8, !tbaa !17
  %9567 = fcmp olt double %9565, %9566
  br i1 %9567, label %9568, label %9572

9568:                                             ; preds = %9562
  %9569 = load double, ptr %774, align 8, !tbaa !17
  %9570 = load ptr, ptr %9, align 8, !tbaa !5
  %9571 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %9570, i32 0, i32 6
  store double %9569, ptr %9571, align 8, !tbaa !28
  br label %9572

9572:                                             ; preds = %9568, %9562
  %9573 = load double, ptr %774, align 8, !tbaa !17
  %9574 = load double, ptr %774, align 8, !tbaa !17
  %9575 = fmul double %9573, %9574
  store double %9575, ptr %765, align 8, !tbaa !17
  %9576 = load double, ptr %27, align 8, !tbaa !17
  %9577 = load double, ptr %765, align 8, !tbaa !17
  %9578 = fcmp ogt double %9576, %9577
  br i1 %9578, label %9579, label %9598

9579:                                             ; preds = %9572
  %9580 = load double, ptr %756, align 8, !tbaa !17
  %9581 = load double, ptr %765, align 8, !tbaa !17
  %9582 = fsub double %9581, %9580
  store double %9582, ptr %765, align 8, !tbaa !17
  %9583 = load ptr, ptr %9, align 8, !tbaa !5
  %9584 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %9583, i32 0, i32 8
  %9585 = load double, ptr %9584, align 8, !tbaa !29
  %9586 = load double, ptr %765, align 8, !tbaa !17
  %9587 = fadd double %9585, %9586
  store double %9587, ptr %766, align 8, !tbaa !17
  %9588 = load double, ptr %766, align 8, !tbaa !17
  %9589 = load ptr, ptr %9, align 8, !tbaa !5
  %9590 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %9589, i32 0, i32 8
  %9591 = load double, ptr %9590, align 8, !tbaa !29
  %9592 = fsub double %9588, %9591
  %9593 = load double, ptr %765, align 8, !tbaa !17
  %9594 = fsub double %9592, %9593
  store double %9594, ptr %756, align 8, !tbaa !17
  %9595 = load double, ptr %766, align 8, !tbaa !17
  %9596 = load ptr, ptr %9, align 8, !tbaa !5
  %9597 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %9596, i32 0, i32 8
  store double %9595, ptr %9597, align 8, !tbaa !29
  br label %9598

9598:                                             ; preds = %9579, %9572
  %9599 = load double, ptr %772, align 8, !tbaa !17
  %9600 = call double @libxsmm_kahan_sum(double noundef %9599, ptr noundef %762, ptr noundef %759)
  %9601 = load double, ptr %771, align 8, !tbaa !17
  %9602 = call double @libxsmm_kahan_sum(double noundef %9601, ptr noundef %763, ptr noundef %760)
  %9603 = load double, ptr %773, align 8, !tbaa !17
  %9604 = call double @libxsmm_kahan_sum(double noundef %9603, ptr noundef %764, ptr noundef %761)
  %9605 = load double, ptr %770, align 8, !tbaa !17
  %9606 = load double, ptr %770, align 8, !tbaa !17
  %9607 = fmul double %9605, %9606
  %9608 = call double @libxsmm_kahan_sum(double noundef %9607, ptr noundef %748, ptr noundef %746)
  %9609 = load double, ptr %769, align 8, !tbaa !17
  %9610 = load double, ptr %769, align 8, !tbaa !17
  %9611 = fmul double %9609, %9610
  %9612 = call double @libxsmm_kahan_sum(double noundef %9611, ptr noundef %749, ptr noundef %747)
  %9613 = load double, ptr %773, align 8, !tbaa !17
  %9614 = load double, ptr %773, align 8, !tbaa !17
  %9615 = fmul double %9613, %9614
  store double %9615, ptr %765, align 8, !tbaa !17
  %9616 = load double, ptr %27, align 8, !tbaa !17
  %9617 = load double, ptr %765, align 8, !tbaa !17
  %9618 = fcmp ogt double %9616, %9617
  br i1 %9618, label %9619, label %9624

9619:                                             ; preds = %9598
  %9620 = load double, ptr %765, align 8, !tbaa !17
  %9621 = load ptr, ptr %9, align 8, !tbaa !5
  %9622 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %9621, i32 0, i32 7
  %9623 = call double @libxsmm_kahan_sum(double noundef %9620, ptr noundef %9622, ptr noundef %745)
  br label %9624

9624:                                             ; preds = %9619, %9598
  call void @llvm.lifetime.end.p0(i64 8, ptr %774) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %773) #7
  br label %9649

9625:                                             ; preds = %9481, %9473
  %9626 = load double, ptr %770, align 8, !tbaa !17
  %9627 = load double, ptr %770, align 8, !tbaa !17
  %9628 = fcmp oeq double %9626, %9627
  br i1 %9628, label %9629, label %9633

9629:                                             ; preds = %9625
  %9630 = load double, ptr %27, align 8, !tbaa !17
  %9631 = load double, ptr %772, align 8, !tbaa !17
  %9632 = fcmp ogt double %9630, %9631
  br label %9633

9633:                                             ; preds = %9629, %9625
  %9634 = phi i1 [ false, %9625 ], [ %9632, %9629 ]
  %9635 = zext i1 %9634 to i64
  %9636 = select i1 %9634, i32 1, i32 2
  store i32 %9636, ptr %19, align 4, !tbaa !9
  %9637 = load i32, ptr %768, align 4, !tbaa !9
  %9638 = load ptr, ptr %9, align 8, !tbaa !5
  %9639 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %9638, i32 0, i32 22
  store i32 %9637, ptr %9639, align 8, !tbaa !26
  %9640 = load i32, ptr %767, align 4, !tbaa !9
  %9641 = load ptr, ptr %9, align 8, !tbaa !5
  %9642 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %9641, i32 0, i32 23
  store i32 %9640, ptr %9642, align 4, !tbaa !27
  %9643 = load double, ptr %770, align 8, !tbaa !17
  %9644 = load ptr, ptr %9, align 8, !tbaa !5
  %9645 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %9644, i32 0, i32 20
  store double %9643, ptr %9645, align 8, !tbaa !24
  %9646 = load double, ptr %769, align 8, !tbaa !17
  %9647 = load ptr, ptr %9, align 8, !tbaa !5
  %9648 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %9647, i32 0, i32 21
  store double %9646, ptr %9648, align 8, !tbaa !25
  store i32 174, ptr %60, align 4
  br label %9650

9649:                                             ; preds = %9624
  store i32 0, ptr %60, align 4
  br label %9650

9650:                                             ; preds = %9649, %9633
  call void @llvm.lifetime.end.p0(i64 8, ptr %772) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %771) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %770) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %769) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %768) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %767) #7
  %9651 = load i32, ptr %60, align 4
  switch i32 %9651, label %15542 [
    i32 0, label %9652
    i32 174, label %9656
  ]

9652:                                             ; preds = %9650
  br label %9653

9653:                                             ; preds = %9652
  %9654 = load i32, ptr %758, align 4, !tbaa !9
  %9655 = add nsw i32 %9654, 1
  store i32 %9655, ptr %758, align 4, !tbaa !9
  br label %9403, !llvm.loop !103

9656:                                             ; preds = %9650, %9403
  %9657 = load i32, ptr %19, align 4, !tbaa !9
  %9658 = icmp eq i32 0, %9657
  br i1 %9658, label %9659, label %9690

9659:                                             ; preds = %9656
  %9660 = load double, ptr %762, align 8, !tbaa !17
  %9661 = load ptr, ptr %9, align 8, !tbaa !5
  %9662 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %9661, i32 0, i32 10
  %9663 = call double @libxsmm_kahan_sum(double noundef %9660, ptr noundef %9662, ptr noundef %754)
  %9664 = load double, ptr %763, align 8, !tbaa !17
  %9665 = load ptr, ptr %9, align 8, !tbaa !5
  %9666 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %9665, i32 0, i32 15
  %9667 = call double @libxsmm_kahan_sum(double noundef %9664, ptr noundef %9666, ptr noundef %755)
  %9668 = load ptr, ptr %9, align 8, !tbaa !5
  %9669 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %9668, i32 0, i32 2
  %9670 = load double, ptr %9669, align 8, !tbaa !32
  %9671 = load double, ptr %764, align 8, !tbaa !17
  %9672 = fcmp olt double %9670, %9671
  br i1 %9672, label %9673, label %9677

9673:                                             ; preds = %9659
  %9674 = load double, ptr %764, align 8, !tbaa !17
  %9675 = load ptr, ptr %9, align 8, !tbaa !5
  %9676 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %9675, i32 0, i32 2
  store double %9674, ptr %9676, align 8, !tbaa !32
  br label %9677

9677:                                             ; preds = %9673, %9659
  %9678 = load double, ptr %750, align 8, !tbaa !17
  %9679 = load double, ptr %762, align 8, !tbaa !17
  %9680 = fcmp olt double %9678, %9679
  br i1 %9680, label %9681, label %9683

9681:                                             ; preds = %9677
  %9682 = load double, ptr %762, align 8, !tbaa !17
  store double %9682, ptr %750, align 8, !tbaa !17
  br label %9683

9683:                                             ; preds = %9681, %9677
  %9684 = load double, ptr %751, align 8, !tbaa !17
  %9685 = load double, ptr %763, align 8, !tbaa !17
  %9686 = fcmp olt double %9684, %9685
  br i1 %9686, label %9687, label %9689

9687:                                             ; preds = %9683
  %9688 = load double, ptr %763, align 8, !tbaa !17
  store double %9688, ptr %751, align 8, !tbaa !17
  br label %9689

9689:                                             ; preds = %9687, %9683
  br label %9691

9690:                                             ; preds = %9656
  store i32 171, ptr %60, align 4
  br label %9692

9691:                                             ; preds = %9689
  store i32 0, ptr %60, align 4
  br label %9692

9692:                                             ; preds = %9691, %9690
  call void @llvm.lifetime.end.p0(i64 8, ptr %766) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %765) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %764) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %763) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %762) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %761) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %760) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %759) #7
  %9693 = load i32, ptr %60, align 4
  switch i32 %9693, label %15542 [
    i32 0, label %9694
    i32 171, label %9698
  ]

9694:                                             ; preds = %9692
  br label %9695

9695:                                             ; preds = %9694
  %9696 = load i32, ptr %757, align 4, !tbaa !9
  %9697 = add nsw i32 %9696, 1
  store i32 %9697, ptr %757, align 4, !tbaa !9
  br label %9398, !llvm.loop !104

9698:                                             ; preds = %9692, %9398
  %9699 = load i32, ptr %19, align 4, !tbaa !9
  %9700 = icmp eq i32 0, %9699
  br i1 %9700, label %9701, label %9947

9701:                                             ; preds = %9698
  call void @llvm.lifetime.start.p0(i64 8, ptr %775) #7
  store double 0.000000e+00, ptr %775, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %776) #7
  store double 0.000000e+00, ptr %776, align 8, !tbaa !17
  %9702 = load ptr, ptr %9, align 8, !tbaa !5
  %9703 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %9702, i32 0, i32 14
  %9704 = load double, ptr %9703, align 8, !tbaa !34
  %9705 = fcmp oeq double 0.000000e+00, %9704
  br i1 %9705, label %9706, label %9707

9706:                                             ; preds = %9701
  br label %9708

9707:                                             ; preds = %9701
  call void @__assert_fail(ptr noundef @.str.1, ptr noundef @.str.2, i32 noundef 130, ptr noundef @__PRETTY_FUNCTION__.libxsmm_matdiff) #9
  unreachable

9708:                                             ; preds = %9706
  %9709 = load ptr, ptr %9, align 8, !tbaa !5
  %9710 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %9709, i32 0, i32 19
  %9711 = load double, ptr %9710, align 8, !tbaa !35
  %9712 = fcmp oeq double 0.000000e+00, %9711
  br i1 %9712, label %9713, label %9714

9713:                                             ; preds = %9708
  br label %9715

9714:                                             ; preds = %9708
  call void @__assert_fail(ptr noundef @.str.3, ptr noundef @.str.2, i32 noundef 131, ptr noundef @__PRETTY_FUNCTION__.libxsmm_matdiff) #9
  unreachable

9715:                                             ; preds = %9713
  %9716 = load i64, ptr %24, align 8, !tbaa !12
  %9717 = icmp ne i64 0, %9716
  br i1 %9717, label %9718, label %9735

9718:                                             ; preds = %9715
  %9719 = load ptr, ptr %9, align 8, !tbaa !5
  %9720 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %9719, i32 0, i32 10
  %9721 = load double, ptr %9720, align 8, !tbaa !36
  %9722 = load i64, ptr %24, align 8, !tbaa !12
  %9723 = uitofp i64 %9722 to double
  %9724 = fdiv double %9721, %9723
  %9725 = load ptr, ptr %9, align 8, !tbaa !5
  %9726 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %9725, i32 0, i32 13
  store double %9724, ptr %9726, align 8, !tbaa !37
  %9727 = load ptr, ptr %9, align 8, !tbaa !5
  %9728 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %9727, i32 0, i32 15
  %9729 = load double, ptr %9728, align 8, !tbaa !38
  %9730 = load i64, ptr %24, align 8, !tbaa !12
  %9731 = uitofp i64 %9730 to double
  %9732 = fdiv double %9729, %9731
  %9733 = load ptr, ptr %9, align 8, !tbaa !5
  %9734 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %9733, i32 0, i32 18
  store double %9732, ptr %9734, align 8, !tbaa !39
  br label %9735

9735:                                             ; preds = %9718, %9715
  %9736 = load double, ptr %750, align 8, !tbaa !17
  %9737 = fcmp oge double 0.000000e+00, %9736
  br i1 %9737, label %9738, label %9740

9738:                                             ; preds = %9735
  %9739 = load double, ptr %751, align 8, !tbaa !17
  br label %9752

9740:                                             ; preds = %9735
  %9741 = load ptr, ptr %9, align 8, !tbaa !5
  %9742 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %9741, i32 0, i32 2
  %9743 = load double, ptr %9742, align 8, !tbaa !32
  %9744 = load double, ptr %750, align 8, !tbaa !17
  %9745 = fcmp olt double 0.000000e+00, %9744
  br i1 %9745, label %9746, label %9748

9746:                                             ; preds = %9740
  %9747 = load double, ptr %750, align 8, !tbaa !17
  br label %9749

9748:                                             ; preds = %9740
  br label %9749

9749:                                             ; preds = %9748, %9746
  %9750 = phi double [ %9747, %9746 ], [ 1.000000e+00, %9748 ]
  %9751 = fdiv double %9743, %9750
  br label %9752

9752:                                             ; preds = %9749, %9738
  %9753 = phi double [ %9739, %9738 ], [ %9751, %9749 ]
  %9754 = load ptr, ptr %9, align 8, !tbaa !5
  %9755 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %9754, i32 0, i32 3
  store double %9753, ptr %9755, align 8, !tbaa !40
  %9756 = load double, ptr %748, align 8, !tbaa !17
  %9757 = fcmp oge double 0.000000e+00, %9756
  br i1 %9757, label %9758, label %9776

9758:                                             ; preds = %9752
  %9759 = load double, ptr %749, align 8, !tbaa !17
  %9760 = load double, ptr %749, align 8, !tbaa !17
  %9761 = fmul double %9759, %9760
  %9762 = load ptr, ptr %9, align 8, !tbaa !5
  %9763 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %9762, i32 0, i32 7
  %9764 = load double, ptr %9763, align 8, !tbaa !41
  %9765 = fcmp olt double %9761, %9764
  br i1 %9765, label %9766, label %9770

9766:                                             ; preds = %9758
  %9767 = load double, ptr %749, align 8, !tbaa !17
  %9768 = load double, ptr %749, align 8, !tbaa !17
  %9769 = fmul double %9767, %9768
  br label %9774

9770:                                             ; preds = %9758
  %9771 = load ptr, ptr %9, align 8, !tbaa !5
  %9772 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %9771, i32 0, i32 7
  %9773 = load double, ptr %9772, align 8, !tbaa !41
  br label %9774

9774:                                             ; preds = %9770, %9766
  %9775 = phi double [ %9769, %9766 ], [ %9773, %9770 ]
  br label %9788

9776:                                             ; preds = %9752
  %9777 = load ptr, ptr %9, align 8, !tbaa !5
  %9778 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %9777, i32 0, i32 7
  %9779 = load double, ptr %9778, align 8, !tbaa !41
  %9780 = load double, ptr %748, align 8, !tbaa !17
  %9781 = fcmp olt double 0.000000e+00, %9780
  br i1 %9781, label %9782, label %9784

9782:                                             ; preds = %9776
  %9783 = load double, ptr %748, align 8, !tbaa !17
  br label %9785

9784:                                             ; preds = %9776
  br label %9785

9785:                                             ; preds = %9784, %9782
  %9786 = phi double [ %9783, %9782 ], [ 1.000000e+00, %9784 ]
  %9787 = fdiv double %9779, %9786
  br label %9788

9788:                                             ; preds = %9785, %9774
  %9789 = phi double [ %9775, %9774 ], [ %9787, %9785 ]
  %9790 = load ptr, ptr %9, align 8, !tbaa !5
  %9791 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %9790, i32 0, i32 4
  store double %9789, ptr %9791, align 8, !tbaa !42
  store i32 0, ptr %758, align 4, !tbaa !9
  br label %9792

9792:                                             ; preds = %9921, %9788
  %9793 = load i32, ptr %758, align 4, !tbaa !9
  %9794 = load i32, ptr %25, align 4, !tbaa !9
  %9795 = icmp slt i32 %9793, %9794
  br i1 %9795, label %9796, label %9924

9796:                                             ; preds = %9792
  call void @llvm.lifetime.start.p0(i64 8, ptr %777) #7
  store double 0.000000e+00, ptr %777, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %778) #7
  store double 0.000000e+00, ptr %778, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %779) #7
  store double 0.000000e+00, ptr %779, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %780) #7
  store double 0.000000e+00, ptr %780, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %781) #7
  store double 0.000000e+00, ptr %781, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %782) #7
  store double 0.000000e+00, ptr %782, align 8, !tbaa !17
  store i32 0, ptr %757, align 4, !tbaa !9
  br label %9797

9797:                                             ; preds = %9895, %9796
  %9798 = load i32, ptr %757, align 4, !tbaa !9
  %9799 = load i32, ptr %26, align 4, !tbaa !9
  %9800 = icmp slt i32 %9798, %9799
  br i1 %9800, label %9801, label %9898

9801:                                             ; preds = %9797
  call void @llvm.lifetime.start.p0(i64 4, ptr %783) #7
  %9802 = load i32, ptr %757, align 4, !tbaa !9
  store i32 %9802, ptr %783, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %784) #7
  %9803 = load i32, ptr %758, align 4, !tbaa !9
  store i32 %9803, ptr %784, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %785) #7
  %9804 = load ptr, ptr %743, align 8, !tbaa !5
  %9805 = load i32, ptr %783, align 4, !tbaa !9
  %9806 = load i32, ptr %20, align 4, !tbaa !9
  %9807 = mul nsw i32 %9805, %9806
  %9808 = load i32, ptr %784, align 4, !tbaa !9
  %9809 = add nsw i32 %9807, %9808
  %9810 = sext i32 %9809 to i64
  %9811 = getelementptr inbounds float, ptr %9804, i64 %9810
  %9812 = load float, ptr %9811, align 4, !tbaa !101
  %9813 = fpext float %9812 to double
  store double %9813, ptr %785, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %786) #7
  %9814 = load ptr, ptr %744, align 8, !tbaa !5
  %9815 = icmp ne ptr null, %9814
  br i1 %9815, label %9816, label %9826

9816:                                             ; preds = %9801
  %9817 = load ptr, ptr %744, align 8, !tbaa !5
  %9818 = load i32, ptr %783, align 4, !tbaa !9
  %9819 = load i32, ptr %21, align 4, !tbaa !9
  %9820 = mul nsw i32 %9818, %9819
  %9821 = load i32, ptr %784, align 4, !tbaa !9
  %9822 = add nsw i32 %9820, %9821
  %9823 = sext i32 %9822 to i64
  %9824 = getelementptr inbounds float, ptr %9817, i64 %9823
  %9825 = load float, ptr %9824, align 4, !tbaa !101
  br label %9827

9826:                                             ; preds = %9801
  br label %9827

9827:                                             ; preds = %9826, %9816
  %9828 = phi float [ %9825, %9816 ], [ 0.000000e+00, %9826 ]
  %9829 = fpext float %9828 to double
  store double %9829, ptr %786, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %787) #7
  %9830 = load ptr, ptr %744, align 8, !tbaa !5
  %9831 = icmp ne ptr null, %9830
  br i1 %9831, label %9832, label %9846

9832:                                             ; preds = %9827
  %9833 = load double, ptr %785, align 8, !tbaa !17
  %9834 = load double, ptr %786, align 8, !tbaa !17
  %9835 = fcmp olt double %9833, %9834
  br i1 %9835, label %9836, label %9840

9836:                                             ; preds = %9832
  %9837 = load double, ptr %786, align 8, !tbaa !17
  %9838 = load double, ptr %785, align 8, !tbaa !17
  %9839 = fsub double %9837, %9838
  br label %9844

9840:                                             ; preds = %9832
  %9841 = load double, ptr %785, align 8, !tbaa !17
  %9842 = load double, ptr %786, align 8, !tbaa !17
  %9843 = fsub double %9841, %9842
  br label %9844

9844:                                             ; preds = %9840, %9836
  %9845 = phi double [ %9839, %9836 ], [ %9843, %9840 ]
  br label %9847

9846:                                             ; preds = %9827
  br label %9847

9847:                                             ; preds = %9846, %9844
  %9848 = phi double [ %9845, %9844 ], [ 0.000000e+00, %9846 ]
  store double %9848, ptr %787, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %788) #7
  %9849 = load double, ptr %785, align 8, !tbaa !17
  %9850 = load ptr, ptr %9, align 8, !tbaa !5
  %9851 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %9850, i32 0, i32 13
  %9852 = load double, ptr %9851, align 8, !tbaa !37
  %9853 = fsub double %9849, %9852
  store double %9853, ptr %788, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %789) #7
  %9854 = load double, ptr %786, align 8, !tbaa !17
  %9855 = load ptr, ptr %9, align 8, !tbaa !5
  %9856 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %9855, i32 0, i32 18
  %9857 = load double, ptr %9856, align 8, !tbaa !39
  %9858 = fsub double %9854, %9857
  store double %9858, ptr %789, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %790) #7
  %9859 = load double, ptr %785, align 8, !tbaa !17
  %9860 = fcmp ole double 0.000000e+00, %9859
  br i1 %9860, label %9861, label %9863

9861:                                             ; preds = %9847
  %9862 = load double, ptr %785, align 8, !tbaa !17
  br label %9866

9863:                                             ; preds = %9847
  %9864 = load double, ptr %785, align 8, !tbaa !17
  %9865 = fneg double %9864
  br label %9866

9866:                                             ; preds = %9863, %9861
  %9867 = phi double [ %9862, %9861 ], [ %9865, %9863 ]
  store double %9867, ptr %790, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %791) #7
  %9868 = load double, ptr %786, align 8, !tbaa !17
  %9869 = fcmp ole double 0.000000e+00, %9868
  br i1 %9869, label %9870, label %9872

9870:                                             ; preds = %9866
  %9871 = load double, ptr %786, align 8, !tbaa !17
  br label %9875

9872:                                             ; preds = %9866
  %9873 = load double, ptr %786, align 8, !tbaa !17
  %9874 = fneg double %9873
  br label %9875

9875:                                             ; preds = %9872, %9870
  %9876 = phi double [ %9871, %9870 ], [ %9874, %9872 ]
  store double %9876, ptr %791, align 8, !tbaa !17
  %9877 = load double, ptr %788, align 8, !tbaa !17
  %9878 = load double, ptr %788, align 8, !tbaa !17
  %9879 = fmul double %9877, %9878
  %9880 = load ptr, ptr %9, align 8, !tbaa !5
  %9881 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %9880, i32 0, i32 14
  %9882 = call double @libxsmm_kahan_sum(double noundef %9879, ptr noundef %9881, ptr noundef %775)
  %9883 = load double, ptr %789, align 8, !tbaa !17
  %9884 = load double, ptr %789, align 8, !tbaa !17
  %9885 = fmul double %9883, %9884
  %9886 = load ptr, ptr %9, align 8, !tbaa !5
  %9887 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %9886, i32 0, i32 19
  %9888 = call double @libxsmm_kahan_sum(double noundef %9885, ptr noundef %9887, ptr noundef %776)
  %9889 = load double, ptr %790, align 8, !tbaa !17
  %9890 = call double @libxsmm_kahan_sum(double noundef %9889, ptr noundef %780, ptr noundef %777)
  %9891 = load double, ptr %791, align 8, !tbaa !17
  %9892 = call double @libxsmm_kahan_sum(double noundef %9891, ptr noundef %781, ptr noundef %778)
  %9893 = load double, ptr %787, align 8, !tbaa !17
  %9894 = call double @libxsmm_kahan_sum(double noundef %9893, ptr noundef %782, ptr noundef %779)
  call void @llvm.lifetime.end.p0(i64 8, ptr %791) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %790) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %789) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %788) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %787) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %786) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %785) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %784) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %783) #7
  br label %9895

9895:                                             ; preds = %9875
  %9896 = load i32, ptr %757, align 4, !tbaa !9
  %9897 = add nsw i32 %9896, 1
  store i32 %9897, ptr %757, align 4, !tbaa !9
  br label %9797, !llvm.loop !105

9898:                                             ; preds = %9797
  %9899 = load ptr, ptr %9, align 8, !tbaa !5
  %9900 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %9899, i32 0, i32 0
  %9901 = load double, ptr %9900, align 8, !tbaa !44
  %9902 = load double, ptr %782, align 8, !tbaa !17
  %9903 = fcmp olt double %9901, %9902
  br i1 %9903, label %9904, label %9908

9904:                                             ; preds = %9898
  %9905 = load double, ptr %782, align 8, !tbaa !17
  %9906 = load ptr, ptr %9, align 8, !tbaa !5
  %9907 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %9906, i32 0, i32 0
  store double %9905, ptr %9907, align 8, !tbaa !44
  br label %9908

9908:                                             ; preds = %9904, %9898
  %9909 = load double, ptr %752, align 8, !tbaa !17
  %9910 = load double, ptr %780, align 8, !tbaa !17
  %9911 = fcmp olt double %9909, %9910
  br i1 %9911, label %9912, label %9914

9912:                                             ; preds = %9908
  %9913 = load double, ptr %780, align 8, !tbaa !17
  store double %9913, ptr %752, align 8, !tbaa !17
  br label %9914

9914:                                             ; preds = %9912, %9908
  %9915 = load double, ptr %753, align 8, !tbaa !17
  %9916 = load double, ptr %781, align 8, !tbaa !17
  %9917 = fcmp olt double %9915, %9916
  br i1 %9917, label %9918, label %9920

9918:                                             ; preds = %9914
  %9919 = load double, ptr %781, align 8, !tbaa !17
  store double %9919, ptr %753, align 8, !tbaa !17
  br label %9920

9920:                                             ; preds = %9918, %9914
  call void @llvm.lifetime.end.p0(i64 8, ptr %782) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %781) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %780) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %779) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %778) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %777) #7
  br label %9921

9921:                                             ; preds = %9920
  %9922 = load i32, ptr %758, align 4, !tbaa !9
  %9923 = add nsw i32 %9922, 1
  store i32 %9923, ptr %758, align 4, !tbaa !9
  br label %9792, !llvm.loop !106

9924:                                             ; preds = %9792
  %9925 = load double, ptr %752, align 8, !tbaa !17
  %9926 = fcmp oge double 0.000000e+00, %9925
  br i1 %9926, label %9927, label %9931

9927:                                             ; preds = %9924
  %9928 = load ptr, ptr %9, align 8, !tbaa !5
  %9929 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %9928, i32 0, i32 0
  %9930 = load double, ptr %9929, align 8, !tbaa !44
  br label %9943

9931:                                             ; preds = %9924
  %9932 = load ptr, ptr %9, align 8, !tbaa !5
  %9933 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %9932, i32 0, i32 0
  %9934 = load double, ptr %9933, align 8, !tbaa !44
  %9935 = load double, ptr %752, align 8, !tbaa !17
  %9936 = fcmp olt double 0.000000e+00, %9935
  br i1 %9936, label %9937, label %9939

9937:                                             ; preds = %9931
  %9938 = load double, ptr %752, align 8, !tbaa !17
  br label %9940

9939:                                             ; preds = %9931
  br label %9940

9940:                                             ; preds = %9939, %9937
  %9941 = phi double [ %9938, %9937 ], [ 1.000000e+00, %9939 ]
  %9942 = fdiv double %9934, %9941
  br label %9943

9943:                                             ; preds = %9940, %9927
  %9944 = phi double [ %9930, %9927 ], [ %9942, %9940 ]
  %9945 = load ptr, ptr %9, align 8, !tbaa !5
  %9946 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %9945, i32 0, i32 1
  store double %9944, ptr %9946, align 8, !tbaa !46
  call void @llvm.lifetime.end.p0(i64 8, ptr %776) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %775) #7
  br label %9947

9947:                                             ; preds = %9943, %9698
  call void @llvm.lifetime.end.p0(i64 4, ptr %758) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %757) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %756) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %755) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %754) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %753) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %752) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %751) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %750) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %749) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %748) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %747) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %746) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %745) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %744) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %743) #7
  br label %10544

9948:                                             ; preds = %9392
  call void @llvm.lifetime.start.p0(i64 8, ptr %792) #7
  %9949 = load ptr, ptr %13, align 8, !tbaa !5
  store ptr %9949, ptr %792, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %793) #7
  %9950 = load ptr, ptr %14, align 8, !tbaa !5
  store ptr %9950, ptr %793, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %794) #7
  store double 0.000000e+00, ptr %794, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %795) #7
  store double 0.000000e+00, ptr %795, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %796) #7
  store double 0.000000e+00, ptr %796, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %797) #7
  store double 0.000000e+00, ptr %797, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %798) #7
  store double 0.000000e+00, ptr %798, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %799) #7
  store double 0.000000e+00, ptr %799, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %800) #7
  store double 0.000000e+00, ptr %800, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %801) #7
  store double 0.000000e+00, ptr %801, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %802) #7
  store double 0.000000e+00, ptr %802, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %803) #7
  store double 0.000000e+00, ptr %803, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %804) #7
  store double 0.000000e+00, ptr %804, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %805) #7
  store double 0.000000e+00, ptr %805, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %806) #7
  %9951 = load i32, ptr %25, align 4, !tbaa !9
  %9952 = sext i32 %9951 to i64
  %9953 = load i32, ptr %26, align 4, !tbaa !9
  %9954 = sext i32 %9953 to i64
  %9955 = mul i64 %9952, %9954
  store i64 %9955, ptr %806, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 8, ptr %807) #7
  %9956 = load i64, ptr %806, align 8, !tbaa !12
  %9957 = call i64 @libxsmm_coprime2(i64 noundef %9956)
  store i64 %9957, ptr %807, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 4, ptr %808) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %809) #7
  store i32 0, ptr %808, align 4, !tbaa !9
  br label %9958

9958:                                             ; preds = %10273, %9948
  %9959 = load i32, ptr %808, align 4, !tbaa !9
  %9960 = load i32, ptr %26, align 4, !tbaa !9
  %9961 = icmp slt i32 %9959, %9960
  br i1 %9961, label %9962, label %10276

9962:                                             ; preds = %9958
  call void @llvm.lifetime.start.p0(i64 8, ptr %810) #7
  store double 0.000000e+00, ptr %810, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %811) #7
  store double 0.000000e+00, ptr %811, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %812) #7
  store double 0.000000e+00, ptr %812, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %813) #7
  store double 0.000000e+00, ptr %813, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %814) #7
  store double 0.000000e+00, ptr %814, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %815) #7
  store double 0.000000e+00, ptr %815, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %816) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %817) #7
  store i32 0, ptr %809, align 4, !tbaa !9
  br label %9963

9963:                                             ; preds = %10231, %9962
  %9964 = load i32, ptr %809, align 4, !tbaa !9
  %9965 = load i32, ptr %25, align 4, !tbaa !9
  %9966 = icmp slt i32 %9964, %9965
  br i1 %9966, label %9967, label %10234

9967:                                             ; preds = %9963
  call void @llvm.lifetime.start.p0(i64 8, ptr %818) #7
  %9968 = load i64, ptr %807, align 8, !tbaa !12
  %9969 = load i32, ptr %808, align 4, !tbaa !9
  %9970 = load i32, ptr %25, align 4, !tbaa !9
  %9971 = mul nsw i32 %9969, %9970
  %9972 = load i32, ptr %809, align 4, !tbaa !9
  %9973 = add nsw i32 %9971, %9972
  %9974 = sext i32 %9973 to i64
  %9975 = mul i64 %9968, %9974
  %9976 = load i64, ptr %806, align 8, !tbaa !12
  %9977 = urem i64 %9975, %9976
  store i64 %9977, ptr %818, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 4, ptr %819) #7
  %9978 = load i64, ptr %818, align 8, !tbaa !12
  %9979 = load i32, ptr %25, align 4, !tbaa !9
  %9980 = sext i32 %9979 to i64
  %9981 = udiv i64 %9978, %9980
  %9982 = trunc i64 %9981 to i32
  store i32 %9982, ptr %819, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %820) #7
  %9983 = load i64, ptr %818, align 8, !tbaa !12
  %9984 = load i32, ptr %25, align 4, !tbaa !9
  %9985 = sext i32 %9984 to i64
  %9986 = urem i64 %9983, %9985
  %9987 = trunc i64 %9986 to i32
  store i32 %9987, ptr %820, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %821) #7
  %9988 = load ptr, ptr %793, align 8, !tbaa !5
  %9989 = icmp ne ptr null, %9988
  br i1 %9989, label %9990, label %10000

9990:                                             ; preds = %9967
  %9991 = load ptr, ptr %793, align 8, !tbaa !5
  %9992 = load i32, ptr %819, align 4, !tbaa !9
  %9993 = load i32, ptr %21, align 4, !tbaa !9
  %9994 = mul nsw i32 %9992, %9993
  %9995 = load i32, ptr %820, align 4, !tbaa !9
  %9996 = add nsw i32 %9994, %9995
  %9997 = sext i32 %9996 to i64
  %9998 = getelementptr inbounds float, ptr %9991, i64 %9997
  %9999 = load float, ptr %9998, align 4, !tbaa !101
  br label %10001

10000:                                            ; preds = %9967
  br label %10001

10001:                                            ; preds = %10000, %9990
  %10002 = phi float [ %9999, %9990 ], [ 0.000000e+00, %10000 ]
  %10003 = fpext float %10002 to double
  store double %10003, ptr %821, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %822) #7
  %10004 = load ptr, ptr %792, align 8, !tbaa !5
  %10005 = load i32, ptr %819, align 4, !tbaa !9
  %10006 = load i32, ptr %20, align 4, !tbaa !9
  %10007 = mul nsw i32 %10005, %10006
  %10008 = load i32, ptr %820, align 4, !tbaa !9
  %10009 = add nsw i32 %10007, %10008
  %10010 = sext i32 %10009 to i64
  %10011 = getelementptr inbounds float, ptr %10004, i64 %10010
  %10012 = load float, ptr %10011, align 4, !tbaa !101
  %10013 = fpext float %10012 to double
  store double %10013, ptr %822, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %823) #7
  %10014 = load double, ptr %821, align 8, !tbaa !17
  %10015 = fcmp ole double 0.000000e+00, %10014
  br i1 %10015, label %10016, label %10018

10016:                                            ; preds = %10001
  %10017 = load double, ptr %821, align 8, !tbaa !17
  br label %10021

10018:                                            ; preds = %10001
  %10019 = load double, ptr %821, align 8, !tbaa !17
  %10020 = fneg double %10019
  br label %10021

10021:                                            ; preds = %10018, %10016
  %10022 = phi double [ %10017, %10016 ], [ %10020, %10018 ]
  store double %10022, ptr %823, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %824) #7
  %10023 = load double, ptr %822, align 8, !tbaa !17
  %10024 = fcmp ole double 0.000000e+00, %10023
  br i1 %10024, label %10025, label %10027

10025:                                            ; preds = %10021
  %10026 = load double, ptr %822, align 8, !tbaa !17
  br label %10030

10027:                                            ; preds = %10021
  %10028 = load double, ptr %822, align 8, !tbaa !17
  %10029 = fneg double %10028
  br label %10030

10030:                                            ; preds = %10027, %10025
  %10031 = phi double [ %10026, %10025 ], [ %10029, %10027 ]
  store double %10031, ptr %824, align 8, !tbaa !17
  %10032 = load double, ptr %822, align 8, !tbaa !17
  %10033 = load ptr, ptr %9, align 8, !tbaa !5
  %10034 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %10033, i32 0, i32 11
  %10035 = load double, ptr %10034, align 8, !tbaa !14
  %10036 = fcmp olt double %10032, %10035
  br i1 %10036, label %10037, label %10041

10037:                                            ; preds = %10030
  %10038 = load double, ptr %822, align 8, !tbaa !17
  %10039 = load ptr, ptr %9, align 8, !tbaa !5
  %10040 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %10039, i32 0, i32 11
  store double %10038, ptr %10040, align 8, !tbaa !14
  br label %10041

10041:                                            ; preds = %10037, %10030
  %10042 = load double, ptr %822, align 8, !tbaa !17
  %10043 = load ptr, ptr %9, align 8, !tbaa !5
  %10044 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %10043, i32 0, i32 12
  %10045 = load double, ptr %10044, align 8, !tbaa !20
  %10046 = fcmp ogt double %10042, %10045
  br i1 %10046, label %10047, label %10051

10047:                                            ; preds = %10041
  %10048 = load double, ptr %822, align 8, !tbaa !17
  %10049 = load ptr, ptr %9, align 8, !tbaa !5
  %10050 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %10049, i32 0, i32 12
  store double %10048, ptr %10050, align 8, !tbaa !20
  br label %10051

10051:                                            ; preds = %10047, %10041
  %10052 = load double, ptr %821, align 8, !tbaa !17
  %10053 = load double, ptr %821, align 8, !tbaa !17
  %10054 = fcmp oeq double %10052, %10053
  br i1 %10054, label %10055, label %10203

10055:                                            ; preds = %10051
  %10056 = load double, ptr %27, align 8, !tbaa !17
  %10057 = load double, ptr %823, align 8, !tbaa !17
  %10058 = fcmp ogt double %10056, %10057
  br i1 %10058, label %10063, label %10059

10059:                                            ; preds = %10055
  %10060 = load double, ptr %821, align 8, !tbaa !17
  %10061 = load double, ptr %822, align 8, !tbaa !17
  %10062 = fcmp oeq double %10060, %10061
  br i1 %10062, label %10063, label %10203

10063:                                            ; preds = %10059, %10055
  call void @llvm.lifetime.start.p0(i64 8, ptr %825) #7
  %10064 = load ptr, ptr %793, align 8, !tbaa !5
  %10065 = icmp ne ptr null, %10064
  br i1 %10065, label %10066, label %10080

10066:                                            ; preds = %10063
  %10067 = load double, ptr %822, align 8, !tbaa !17
  %10068 = load double, ptr %821, align 8, !tbaa !17
  %10069 = fcmp olt double %10067, %10068
  br i1 %10069, label %10070, label %10074

10070:                                            ; preds = %10066
  %10071 = load double, ptr %821, align 8, !tbaa !17
  %10072 = load double, ptr %822, align 8, !tbaa !17
  %10073 = fsub double %10071, %10072
  br label %10078

10074:                                            ; preds = %10066
  %10075 = load double, ptr %822, align 8, !tbaa !17
  %10076 = load double, ptr %821, align 8, !tbaa !17
  %10077 = fsub double %10075, %10076
  br label %10078

10078:                                            ; preds = %10074, %10070
  %10079 = phi double [ %10073, %10070 ], [ %10077, %10074 ]
  br label %10081

10080:                                            ; preds = %10063
  br label %10081

10081:                                            ; preds = %10080, %10078
  %10082 = phi double [ %10079, %10078 ], [ 0.000000e+00, %10080 ]
  store double %10082, ptr %825, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %826) #7
  %10083 = load double, ptr %824, align 8, !tbaa !17
  %10084 = fcmp oge double 0.000000e+00, %10083
  br i1 %10084, label %10085, label %10087

10085:                                            ; preds = %10081
  %10086 = load double, ptr %823, align 8, !tbaa !17
  br label %10097

10087:                                            ; preds = %10081
  %10088 = load double, ptr %825, align 8, !tbaa !17
  %10089 = load double, ptr %824, align 8, !tbaa !17
  %10090 = fcmp olt double 0.000000e+00, %10089
  br i1 %10090, label %10091, label %10093

10091:                                            ; preds = %10087
  %10092 = load double, ptr %824, align 8, !tbaa !17
  br label %10094

10093:                                            ; preds = %10087
  br label %10094

10094:                                            ; preds = %10093, %10091
  %10095 = phi double [ %10092, %10091 ], [ 1.000000e+00, %10093 ]
  %10096 = fdiv double %10088, %10095
  br label %10097

10097:                                            ; preds = %10094, %10085
  %10098 = phi double [ %10086, %10085 ], [ %10096, %10094 ]
  store double %10098, ptr %826, align 8, !tbaa !17
  %10099 = load double, ptr %821, align 8, !tbaa !17
  %10100 = load ptr, ptr %9, align 8, !tbaa !5
  %10101 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %10100, i32 0, i32 16
  %10102 = load double, ptr %10101, align 8, !tbaa !21
  %10103 = fcmp olt double %10099, %10102
  br i1 %10103, label %10104, label %10108

10104:                                            ; preds = %10097
  %10105 = load double, ptr %821, align 8, !tbaa !17
  %10106 = load ptr, ptr %9, align 8, !tbaa !5
  %10107 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %10106, i32 0, i32 16
  store double %10105, ptr %10107, align 8, !tbaa !21
  br label %10108

10108:                                            ; preds = %10104, %10097
  %10109 = load double, ptr %821, align 8, !tbaa !17
  %10110 = load ptr, ptr %9, align 8, !tbaa !5
  %10111 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %10110, i32 0, i32 17
  %10112 = load double, ptr %10111, align 8, !tbaa !22
  %10113 = fcmp ogt double %10109, %10112
  br i1 %10113, label %10114, label %10118

10114:                                            ; preds = %10108
  %10115 = load double, ptr %821, align 8, !tbaa !17
  %10116 = load ptr, ptr %9, align 8, !tbaa !5
  %10117 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %10116, i32 0, i32 17
  store double %10115, ptr %10117, align 8, !tbaa !22
  br label %10118

10118:                                            ; preds = %10114, %10108
  %10119 = load ptr, ptr %9, align 8, !tbaa !5
  %10120 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %10119, i32 0, i32 5
  %10121 = load double, ptr %10120, align 8, !tbaa !23
  %10122 = load double, ptr %825, align 8, !tbaa !17
  %10123 = fcmp olt double %10121, %10122
  br i1 %10123, label %10124, label %10140

10124:                                            ; preds = %10118
  %10125 = load double, ptr %825, align 8, !tbaa !17
  %10126 = load ptr, ptr %9, align 8, !tbaa !5
  %10127 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %10126, i32 0, i32 5
  store double %10125, ptr %10127, align 8, !tbaa !23
  %10128 = load double, ptr %822, align 8, !tbaa !17
  %10129 = load ptr, ptr %9, align 8, !tbaa !5
  %10130 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %10129, i32 0, i32 20
  store double %10128, ptr %10130, align 8, !tbaa !24
  %10131 = load double, ptr %821, align 8, !tbaa !17
  %10132 = load ptr, ptr %9, align 8, !tbaa !5
  %10133 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %10132, i32 0, i32 21
  store double %10131, ptr %10133, align 8, !tbaa !25
  %10134 = load i32, ptr %820, align 4, !tbaa !9
  %10135 = load ptr, ptr %9, align 8, !tbaa !5
  %10136 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %10135, i32 0, i32 22
  store i32 %10134, ptr %10136, align 8, !tbaa !26
  %10137 = load i32, ptr %819, align 4, !tbaa !9
  %10138 = load ptr, ptr %9, align 8, !tbaa !5
  %10139 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %10138, i32 0, i32 23
  store i32 %10137, ptr %10139, align 4, !tbaa !27
  br label %10140

10140:                                            ; preds = %10124, %10118
  %10141 = load ptr, ptr %9, align 8, !tbaa !5
  %10142 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %10141, i32 0, i32 6
  %10143 = load double, ptr %10142, align 8, !tbaa !28
  %10144 = load double, ptr %826, align 8, !tbaa !17
  %10145 = fcmp olt double %10143, %10144
  br i1 %10145, label %10146, label %10150

10146:                                            ; preds = %10140
  %10147 = load double, ptr %826, align 8, !tbaa !17
  %10148 = load ptr, ptr %9, align 8, !tbaa !5
  %10149 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %10148, i32 0, i32 6
  store double %10147, ptr %10149, align 8, !tbaa !28
  br label %10150

10150:                                            ; preds = %10146, %10140
  %10151 = load double, ptr %826, align 8, !tbaa !17
  %10152 = load double, ptr %826, align 8, !tbaa !17
  %10153 = fmul double %10151, %10152
  store double %10153, ptr %816, align 8, !tbaa !17
  %10154 = load double, ptr %27, align 8, !tbaa !17
  %10155 = load double, ptr %816, align 8, !tbaa !17
  %10156 = fcmp ogt double %10154, %10155
  br i1 %10156, label %10157, label %10176

10157:                                            ; preds = %10150
  %10158 = load double, ptr %805, align 8, !tbaa !17
  %10159 = load double, ptr %816, align 8, !tbaa !17
  %10160 = fsub double %10159, %10158
  store double %10160, ptr %816, align 8, !tbaa !17
  %10161 = load ptr, ptr %9, align 8, !tbaa !5
  %10162 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %10161, i32 0, i32 8
  %10163 = load double, ptr %10162, align 8, !tbaa !29
  %10164 = load double, ptr %816, align 8, !tbaa !17
  %10165 = fadd double %10163, %10164
  store double %10165, ptr %817, align 8, !tbaa !17
  %10166 = load double, ptr %817, align 8, !tbaa !17
  %10167 = load ptr, ptr %9, align 8, !tbaa !5
  %10168 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %10167, i32 0, i32 8
  %10169 = load double, ptr %10168, align 8, !tbaa !29
  %10170 = fsub double %10166, %10169
  %10171 = load double, ptr %816, align 8, !tbaa !17
  %10172 = fsub double %10170, %10171
  store double %10172, ptr %805, align 8, !tbaa !17
  %10173 = load double, ptr %817, align 8, !tbaa !17
  %10174 = load ptr, ptr %9, align 8, !tbaa !5
  %10175 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %10174, i32 0, i32 8
  store double %10173, ptr %10175, align 8, !tbaa !29
  br label %10176

10176:                                            ; preds = %10157, %10150
  %10177 = load double, ptr %824, align 8, !tbaa !17
  %10178 = call double @libxsmm_kahan_sum(double noundef %10177, ptr noundef %813, ptr noundef %810)
  %10179 = load double, ptr %823, align 8, !tbaa !17
  %10180 = call double @libxsmm_kahan_sum(double noundef %10179, ptr noundef %814, ptr noundef %811)
  %10181 = load double, ptr %825, align 8, !tbaa !17
  %10182 = call double @libxsmm_kahan_sum(double noundef %10181, ptr noundef %815, ptr noundef %812)
  %10183 = load double, ptr %822, align 8, !tbaa !17
  %10184 = load double, ptr %822, align 8, !tbaa !17
  %10185 = fmul double %10183, %10184
  %10186 = call double @libxsmm_kahan_sum(double noundef %10185, ptr noundef %797, ptr noundef %795)
  %10187 = load double, ptr %821, align 8, !tbaa !17
  %10188 = load double, ptr %821, align 8, !tbaa !17
  %10189 = fmul double %10187, %10188
  %10190 = call double @libxsmm_kahan_sum(double noundef %10189, ptr noundef %798, ptr noundef %796)
  %10191 = load double, ptr %825, align 8, !tbaa !17
  %10192 = load double, ptr %825, align 8, !tbaa !17
  %10193 = fmul double %10191, %10192
  store double %10193, ptr %816, align 8, !tbaa !17
  %10194 = load double, ptr %27, align 8, !tbaa !17
  %10195 = load double, ptr %816, align 8, !tbaa !17
  %10196 = fcmp ogt double %10194, %10195
  br i1 %10196, label %10197, label %10202

10197:                                            ; preds = %10176
  %10198 = load double, ptr %816, align 8, !tbaa !17
  %10199 = load ptr, ptr %9, align 8, !tbaa !5
  %10200 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %10199, i32 0, i32 7
  %10201 = call double @libxsmm_kahan_sum(double noundef %10198, ptr noundef %10200, ptr noundef %794)
  br label %10202

10202:                                            ; preds = %10197, %10176
  call void @llvm.lifetime.end.p0(i64 8, ptr %826) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %825) #7
  br label %10227

10203:                                            ; preds = %10059, %10051
  %10204 = load double, ptr %822, align 8, !tbaa !17
  %10205 = load double, ptr %822, align 8, !tbaa !17
  %10206 = fcmp oeq double %10204, %10205
  br i1 %10206, label %10207, label %10211

10207:                                            ; preds = %10203
  %10208 = load double, ptr %27, align 8, !tbaa !17
  %10209 = load double, ptr %824, align 8, !tbaa !17
  %10210 = fcmp ogt double %10208, %10209
  br label %10211

10211:                                            ; preds = %10207, %10203
  %10212 = phi i1 [ false, %10203 ], [ %10210, %10207 ]
  %10213 = zext i1 %10212 to i64
  %10214 = select i1 %10212, i32 1, i32 2
  store i32 %10214, ptr %19, align 4, !tbaa !9
  %10215 = load i32, ptr %820, align 4, !tbaa !9
  %10216 = load ptr, ptr %9, align 8, !tbaa !5
  %10217 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %10216, i32 0, i32 22
  store i32 %10215, ptr %10217, align 8, !tbaa !26
  %10218 = load i32, ptr %819, align 4, !tbaa !9
  %10219 = load ptr, ptr %9, align 8, !tbaa !5
  %10220 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %10219, i32 0, i32 23
  store i32 %10218, ptr %10220, align 4, !tbaa !27
  %10221 = load double, ptr %822, align 8, !tbaa !17
  %10222 = load ptr, ptr %9, align 8, !tbaa !5
  %10223 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %10222, i32 0, i32 20
  store double %10221, ptr %10223, align 8, !tbaa !24
  %10224 = load double, ptr %821, align 8, !tbaa !17
  %10225 = load ptr, ptr %9, align 8, !tbaa !5
  %10226 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %10225, i32 0, i32 21
  store double %10224, ptr %10226, align 8, !tbaa !25
  store i32 186, ptr %60, align 4
  br label %10228

10227:                                            ; preds = %10202
  store i32 0, ptr %60, align 4
  br label %10228

10228:                                            ; preds = %10227, %10211
  call void @llvm.lifetime.end.p0(i64 8, ptr %824) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %823) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %822) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %821) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %820) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %819) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %818) #7
  %10229 = load i32, ptr %60, align 4
  switch i32 %10229, label %15542 [
    i32 0, label %10230
    i32 186, label %10234
  ]

10230:                                            ; preds = %10228
  br label %10231

10231:                                            ; preds = %10230
  %10232 = load i32, ptr %809, align 4, !tbaa !9
  %10233 = add nsw i32 %10232, 1
  store i32 %10233, ptr %809, align 4, !tbaa !9
  br label %9963, !llvm.loop !107

10234:                                            ; preds = %10228, %9963
  %10235 = load i32, ptr %19, align 4, !tbaa !9
  %10236 = icmp eq i32 0, %10235
  br i1 %10236, label %10237, label %10268

10237:                                            ; preds = %10234
  %10238 = load double, ptr %813, align 8, !tbaa !17
  %10239 = load ptr, ptr %9, align 8, !tbaa !5
  %10240 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %10239, i32 0, i32 10
  %10241 = call double @libxsmm_kahan_sum(double noundef %10238, ptr noundef %10240, ptr noundef %803)
  %10242 = load double, ptr %814, align 8, !tbaa !17
  %10243 = load ptr, ptr %9, align 8, !tbaa !5
  %10244 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %10243, i32 0, i32 15
  %10245 = call double @libxsmm_kahan_sum(double noundef %10242, ptr noundef %10244, ptr noundef %804)
  %10246 = load ptr, ptr %9, align 8, !tbaa !5
  %10247 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %10246, i32 0, i32 2
  %10248 = load double, ptr %10247, align 8, !tbaa !32
  %10249 = load double, ptr %815, align 8, !tbaa !17
  %10250 = fcmp olt double %10248, %10249
  br i1 %10250, label %10251, label %10255

10251:                                            ; preds = %10237
  %10252 = load double, ptr %815, align 8, !tbaa !17
  %10253 = load ptr, ptr %9, align 8, !tbaa !5
  %10254 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %10253, i32 0, i32 2
  store double %10252, ptr %10254, align 8, !tbaa !32
  br label %10255

10255:                                            ; preds = %10251, %10237
  %10256 = load double, ptr %799, align 8, !tbaa !17
  %10257 = load double, ptr %813, align 8, !tbaa !17
  %10258 = fcmp olt double %10256, %10257
  br i1 %10258, label %10259, label %10261

10259:                                            ; preds = %10255
  %10260 = load double, ptr %813, align 8, !tbaa !17
  store double %10260, ptr %799, align 8, !tbaa !17
  br label %10261

10261:                                            ; preds = %10259, %10255
  %10262 = load double, ptr %800, align 8, !tbaa !17
  %10263 = load double, ptr %814, align 8, !tbaa !17
  %10264 = fcmp olt double %10262, %10263
  br i1 %10264, label %10265, label %10267

10265:                                            ; preds = %10261
  %10266 = load double, ptr %814, align 8, !tbaa !17
  store double %10266, ptr %800, align 8, !tbaa !17
  br label %10267

10267:                                            ; preds = %10265, %10261
  br label %10269

10268:                                            ; preds = %10234
  store i32 183, ptr %60, align 4
  br label %10270

10269:                                            ; preds = %10267
  store i32 0, ptr %60, align 4
  br label %10270

10270:                                            ; preds = %10269, %10268
  call void @llvm.lifetime.end.p0(i64 8, ptr %817) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %816) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %815) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %814) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %813) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %812) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %811) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %810) #7
  %10271 = load i32, ptr %60, align 4
  switch i32 %10271, label %15542 [
    i32 0, label %10272
    i32 183, label %10276
  ]

10272:                                            ; preds = %10270
  br label %10273

10273:                                            ; preds = %10272
  %10274 = load i32, ptr %808, align 4, !tbaa !9
  %10275 = add nsw i32 %10274, 1
  store i32 %10275, ptr %808, align 4, !tbaa !9
  br label %9958, !llvm.loop !108

10276:                                            ; preds = %10270, %9958
  %10277 = load i32, ptr %19, align 4, !tbaa !9
  %10278 = icmp eq i32 0, %10277
  br i1 %10278, label %10279, label %10543

10279:                                            ; preds = %10276
  call void @llvm.lifetime.start.p0(i64 8, ptr %827) #7
  store double 0.000000e+00, ptr %827, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %828) #7
  store double 0.000000e+00, ptr %828, align 8, !tbaa !17
  %10280 = load ptr, ptr %9, align 8, !tbaa !5
  %10281 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %10280, i32 0, i32 14
  %10282 = load double, ptr %10281, align 8, !tbaa !34
  %10283 = fcmp oeq double 0.000000e+00, %10282
  br i1 %10283, label %10284, label %10285

10284:                                            ; preds = %10279
  br label %10286

10285:                                            ; preds = %10279
  call void @__assert_fail(ptr noundef @.str.1, ptr noundef @.str.2, i32 noundef 130, ptr noundef @__PRETTY_FUNCTION__.libxsmm_matdiff) #9
  unreachable

10286:                                            ; preds = %10284
  %10287 = load ptr, ptr %9, align 8, !tbaa !5
  %10288 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %10287, i32 0, i32 19
  %10289 = load double, ptr %10288, align 8, !tbaa !35
  %10290 = fcmp oeq double 0.000000e+00, %10289
  br i1 %10290, label %10291, label %10292

10291:                                            ; preds = %10286
  br label %10293

10292:                                            ; preds = %10286
  call void @__assert_fail(ptr noundef @.str.3, ptr noundef @.str.2, i32 noundef 131, ptr noundef @__PRETTY_FUNCTION__.libxsmm_matdiff) #9
  unreachable

10293:                                            ; preds = %10291
  %10294 = load i64, ptr %24, align 8, !tbaa !12
  %10295 = icmp ne i64 0, %10294
  br i1 %10295, label %10296, label %10313

10296:                                            ; preds = %10293
  %10297 = load ptr, ptr %9, align 8, !tbaa !5
  %10298 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %10297, i32 0, i32 10
  %10299 = load double, ptr %10298, align 8, !tbaa !36
  %10300 = load i64, ptr %24, align 8, !tbaa !12
  %10301 = uitofp i64 %10300 to double
  %10302 = fdiv double %10299, %10301
  %10303 = load ptr, ptr %9, align 8, !tbaa !5
  %10304 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %10303, i32 0, i32 13
  store double %10302, ptr %10304, align 8, !tbaa !37
  %10305 = load ptr, ptr %9, align 8, !tbaa !5
  %10306 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %10305, i32 0, i32 15
  %10307 = load double, ptr %10306, align 8, !tbaa !38
  %10308 = load i64, ptr %24, align 8, !tbaa !12
  %10309 = uitofp i64 %10308 to double
  %10310 = fdiv double %10307, %10309
  %10311 = load ptr, ptr %9, align 8, !tbaa !5
  %10312 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %10311, i32 0, i32 18
  store double %10310, ptr %10312, align 8, !tbaa !39
  br label %10313

10313:                                            ; preds = %10296, %10293
  %10314 = load double, ptr %799, align 8, !tbaa !17
  %10315 = fcmp oge double 0.000000e+00, %10314
  br i1 %10315, label %10316, label %10318

10316:                                            ; preds = %10313
  %10317 = load double, ptr %800, align 8, !tbaa !17
  br label %10330

10318:                                            ; preds = %10313
  %10319 = load ptr, ptr %9, align 8, !tbaa !5
  %10320 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %10319, i32 0, i32 2
  %10321 = load double, ptr %10320, align 8, !tbaa !32
  %10322 = load double, ptr %799, align 8, !tbaa !17
  %10323 = fcmp olt double 0.000000e+00, %10322
  br i1 %10323, label %10324, label %10326

10324:                                            ; preds = %10318
  %10325 = load double, ptr %799, align 8, !tbaa !17
  br label %10327

10326:                                            ; preds = %10318
  br label %10327

10327:                                            ; preds = %10326, %10324
  %10328 = phi double [ %10325, %10324 ], [ 1.000000e+00, %10326 ]
  %10329 = fdiv double %10321, %10328
  br label %10330

10330:                                            ; preds = %10327, %10316
  %10331 = phi double [ %10317, %10316 ], [ %10329, %10327 ]
  %10332 = load ptr, ptr %9, align 8, !tbaa !5
  %10333 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %10332, i32 0, i32 3
  store double %10331, ptr %10333, align 8, !tbaa !40
  %10334 = load double, ptr %797, align 8, !tbaa !17
  %10335 = fcmp oge double 0.000000e+00, %10334
  br i1 %10335, label %10336, label %10354

10336:                                            ; preds = %10330
  %10337 = load double, ptr %798, align 8, !tbaa !17
  %10338 = load double, ptr %798, align 8, !tbaa !17
  %10339 = fmul double %10337, %10338
  %10340 = load ptr, ptr %9, align 8, !tbaa !5
  %10341 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %10340, i32 0, i32 7
  %10342 = load double, ptr %10341, align 8, !tbaa !41
  %10343 = fcmp olt double %10339, %10342
  br i1 %10343, label %10344, label %10348

10344:                                            ; preds = %10336
  %10345 = load double, ptr %798, align 8, !tbaa !17
  %10346 = load double, ptr %798, align 8, !tbaa !17
  %10347 = fmul double %10345, %10346
  br label %10352

10348:                                            ; preds = %10336
  %10349 = load ptr, ptr %9, align 8, !tbaa !5
  %10350 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %10349, i32 0, i32 7
  %10351 = load double, ptr %10350, align 8, !tbaa !41
  br label %10352

10352:                                            ; preds = %10348, %10344
  %10353 = phi double [ %10347, %10344 ], [ %10351, %10348 ]
  br label %10366

10354:                                            ; preds = %10330
  %10355 = load ptr, ptr %9, align 8, !tbaa !5
  %10356 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %10355, i32 0, i32 7
  %10357 = load double, ptr %10356, align 8, !tbaa !41
  %10358 = load double, ptr %797, align 8, !tbaa !17
  %10359 = fcmp olt double 0.000000e+00, %10358
  br i1 %10359, label %10360, label %10362

10360:                                            ; preds = %10354
  %10361 = load double, ptr %797, align 8, !tbaa !17
  br label %10363

10362:                                            ; preds = %10354
  br label %10363

10363:                                            ; preds = %10362, %10360
  %10364 = phi double [ %10361, %10360 ], [ 1.000000e+00, %10362 ]
  %10365 = fdiv double %10357, %10364
  br label %10366

10366:                                            ; preds = %10363, %10352
  %10367 = phi double [ %10353, %10352 ], [ %10365, %10363 ]
  %10368 = load ptr, ptr %9, align 8, !tbaa !5
  %10369 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %10368, i32 0, i32 4
  store double %10367, ptr %10369, align 8, !tbaa !42
  store i32 0, ptr %809, align 4, !tbaa !9
  br label %10370

10370:                                            ; preds = %10517, %10366
  %10371 = load i32, ptr %809, align 4, !tbaa !9
  %10372 = load i32, ptr %25, align 4, !tbaa !9
  %10373 = icmp slt i32 %10371, %10372
  br i1 %10373, label %10374, label %10520

10374:                                            ; preds = %10370
  call void @llvm.lifetime.start.p0(i64 8, ptr %829) #7
  store double 0.000000e+00, ptr %829, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %830) #7
  store double 0.000000e+00, ptr %830, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %831) #7
  store double 0.000000e+00, ptr %831, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %832) #7
  store double 0.000000e+00, ptr %832, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %833) #7
  store double 0.000000e+00, ptr %833, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %834) #7
  store double 0.000000e+00, ptr %834, align 8, !tbaa !17
  store i32 0, ptr %808, align 4, !tbaa !9
  br label %10375

10375:                                            ; preds = %10491, %10374
  %10376 = load i32, ptr %808, align 4, !tbaa !9
  %10377 = load i32, ptr %26, align 4, !tbaa !9
  %10378 = icmp slt i32 %10376, %10377
  br i1 %10378, label %10379, label %10494

10379:                                            ; preds = %10375
  call void @llvm.lifetime.start.p0(i64 8, ptr %835) #7
  %10380 = load i64, ptr %807, align 8, !tbaa !12
  %10381 = load i32, ptr %808, align 4, !tbaa !9
  %10382 = load i32, ptr %25, align 4, !tbaa !9
  %10383 = mul nsw i32 %10381, %10382
  %10384 = load i32, ptr %809, align 4, !tbaa !9
  %10385 = add nsw i32 %10383, %10384
  %10386 = sext i32 %10385 to i64
  %10387 = mul i64 %10380, %10386
  %10388 = load i64, ptr %806, align 8, !tbaa !12
  %10389 = urem i64 %10387, %10388
  store i64 %10389, ptr %835, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 4, ptr %836) #7
  %10390 = load i64, ptr %835, align 8, !tbaa !12
  %10391 = load i32, ptr %25, align 4, !tbaa !9
  %10392 = sext i32 %10391 to i64
  %10393 = udiv i64 %10390, %10392
  %10394 = trunc i64 %10393 to i32
  store i32 %10394, ptr %836, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %837) #7
  %10395 = load i64, ptr %835, align 8, !tbaa !12
  %10396 = load i32, ptr %25, align 4, !tbaa !9
  %10397 = sext i32 %10396 to i64
  %10398 = urem i64 %10395, %10397
  %10399 = trunc i64 %10398 to i32
  store i32 %10399, ptr %837, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %838) #7
  %10400 = load ptr, ptr %792, align 8, !tbaa !5
  %10401 = load i32, ptr %836, align 4, !tbaa !9
  %10402 = load i32, ptr %20, align 4, !tbaa !9
  %10403 = mul nsw i32 %10401, %10402
  %10404 = load i32, ptr %837, align 4, !tbaa !9
  %10405 = add nsw i32 %10403, %10404
  %10406 = sext i32 %10405 to i64
  %10407 = getelementptr inbounds float, ptr %10400, i64 %10406
  %10408 = load float, ptr %10407, align 4, !tbaa !101
  %10409 = fpext float %10408 to double
  store double %10409, ptr %838, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %839) #7
  %10410 = load ptr, ptr %793, align 8, !tbaa !5
  %10411 = icmp ne ptr null, %10410
  br i1 %10411, label %10412, label %10422

10412:                                            ; preds = %10379
  %10413 = load ptr, ptr %793, align 8, !tbaa !5
  %10414 = load i32, ptr %836, align 4, !tbaa !9
  %10415 = load i32, ptr %21, align 4, !tbaa !9
  %10416 = mul nsw i32 %10414, %10415
  %10417 = load i32, ptr %837, align 4, !tbaa !9
  %10418 = add nsw i32 %10416, %10417
  %10419 = sext i32 %10418 to i64
  %10420 = getelementptr inbounds float, ptr %10413, i64 %10419
  %10421 = load float, ptr %10420, align 4, !tbaa !101
  br label %10423

10422:                                            ; preds = %10379
  br label %10423

10423:                                            ; preds = %10422, %10412
  %10424 = phi float [ %10421, %10412 ], [ 0.000000e+00, %10422 ]
  %10425 = fpext float %10424 to double
  store double %10425, ptr %839, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %840) #7
  %10426 = load ptr, ptr %793, align 8, !tbaa !5
  %10427 = icmp ne ptr null, %10426
  br i1 %10427, label %10428, label %10442

10428:                                            ; preds = %10423
  %10429 = load double, ptr %838, align 8, !tbaa !17
  %10430 = load double, ptr %839, align 8, !tbaa !17
  %10431 = fcmp olt double %10429, %10430
  br i1 %10431, label %10432, label %10436

10432:                                            ; preds = %10428
  %10433 = load double, ptr %839, align 8, !tbaa !17
  %10434 = load double, ptr %838, align 8, !tbaa !17
  %10435 = fsub double %10433, %10434
  br label %10440

10436:                                            ; preds = %10428
  %10437 = load double, ptr %838, align 8, !tbaa !17
  %10438 = load double, ptr %839, align 8, !tbaa !17
  %10439 = fsub double %10437, %10438
  br label %10440

10440:                                            ; preds = %10436, %10432
  %10441 = phi double [ %10435, %10432 ], [ %10439, %10436 ]
  br label %10443

10442:                                            ; preds = %10423
  br label %10443

10443:                                            ; preds = %10442, %10440
  %10444 = phi double [ %10441, %10440 ], [ 0.000000e+00, %10442 ]
  store double %10444, ptr %840, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %841) #7
  %10445 = load double, ptr %838, align 8, !tbaa !17
  %10446 = load ptr, ptr %9, align 8, !tbaa !5
  %10447 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %10446, i32 0, i32 13
  %10448 = load double, ptr %10447, align 8, !tbaa !37
  %10449 = fsub double %10445, %10448
  store double %10449, ptr %841, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %842) #7
  %10450 = load double, ptr %839, align 8, !tbaa !17
  %10451 = load ptr, ptr %9, align 8, !tbaa !5
  %10452 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %10451, i32 0, i32 18
  %10453 = load double, ptr %10452, align 8, !tbaa !39
  %10454 = fsub double %10450, %10453
  store double %10454, ptr %842, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %843) #7
  %10455 = load double, ptr %838, align 8, !tbaa !17
  %10456 = fcmp ole double 0.000000e+00, %10455
  br i1 %10456, label %10457, label %10459

10457:                                            ; preds = %10443
  %10458 = load double, ptr %838, align 8, !tbaa !17
  br label %10462

10459:                                            ; preds = %10443
  %10460 = load double, ptr %838, align 8, !tbaa !17
  %10461 = fneg double %10460
  br label %10462

10462:                                            ; preds = %10459, %10457
  %10463 = phi double [ %10458, %10457 ], [ %10461, %10459 ]
  store double %10463, ptr %843, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %844) #7
  %10464 = load double, ptr %839, align 8, !tbaa !17
  %10465 = fcmp ole double 0.000000e+00, %10464
  br i1 %10465, label %10466, label %10468

10466:                                            ; preds = %10462
  %10467 = load double, ptr %839, align 8, !tbaa !17
  br label %10471

10468:                                            ; preds = %10462
  %10469 = load double, ptr %839, align 8, !tbaa !17
  %10470 = fneg double %10469
  br label %10471

10471:                                            ; preds = %10468, %10466
  %10472 = phi double [ %10467, %10466 ], [ %10470, %10468 ]
  store double %10472, ptr %844, align 8, !tbaa !17
  %10473 = load double, ptr %841, align 8, !tbaa !17
  %10474 = load double, ptr %841, align 8, !tbaa !17
  %10475 = fmul double %10473, %10474
  %10476 = load ptr, ptr %9, align 8, !tbaa !5
  %10477 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %10476, i32 0, i32 14
  %10478 = call double @libxsmm_kahan_sum(double noundef %10475, ptr noundef %10477, ptr noundef %827)
  %10479 = load double, ptr %842, align 8, !tbaa !17
  %10480 = load double, ptr %842, align 8, !tbaa !17
  %10481 = fmul double %10479, %10480
  %10482 = load ptr, ptr %9, align 8, !tbaa !5
  %10483 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %10482, i32 0, i32 19
  %10484 = call double @libxsmm_kahan_sum(double noundef %10481, ptr noundef %10483, ptr noundef %828)
  %10485 = load double, ptr %843, align 8, !tbaa !17
  %10486 = call double @libxsmm_kahan_sum(double noundef %10485, ptr noundef %832, ptr noundef %829)
  %10487 = load double, ptr %844, align 8, !tbaa !17
  %10488 = call double @libxsmm_kahan_sum(double noundef %10487, ptr noundef %833, ptr noundef %830)
  %10489 = load double, ptr %840, align 8, !tbaa !17
  %10490 = call double @libxsmm_kahan_sum(double noundef %10489, ptr noundef %834, ptr noundef %831)
  call void @llvm.lifetime.end.p0(i64 8, ptr %844) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %843) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %842) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %841) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %840) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %839) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %838) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %837) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %836) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %835) #7
  br label %10491

10491:                                            ; preds = %10471
  %10492 = load i32, ptr %808, align 4, !tbaa !9
  %10493 = add nsw i32 %10492, 1
  store i32 %10493, ptr %808, align 4, !tbaa !9
  br label %10375, !llvm.loop !109

10494:                                            ; preds = %10375
  %10495 = load ptr, ptr %9, align 8, !tbaa !5
  %10496 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %10495, i32 0, i32 0
  %10497 = load double, ptr %10496, align 8, !tbaa !44
  %10498 = load double, ptr %834, align 8, !tbaa !17
  %10499 = fcmp olt double %10497, %10498
  br i1 %10499, label %10500, label %10504

10500:                                            ; preds = %10494
  %10501 = load double, ptr %834, align 8, !tbaa !17
  %10502 = load ptr, ptr %9, align 8, !tbaa !5
  %10503 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %10502, i32 0, i32 0
  store double %10501, ptr %10503, align 8, !tbaa !44
  br label %10504

10504:                                            ; preds = %10500, %10494
  %10505 = load double, ptr %801, align 8, !tbaa !17
  %10506 = load double, ptr %832, align 8, !tbaa !17
  %10507 = fcmp olt double %10505, %10506
  br i1 %10507, label %10508, label %10510

10508:                                            ; preds = %10504
  %10509 = load double, ptr %832, align 8, !tbaa !17
  store double %10509, ptr %801, align 8, !tbaa !17
  br label %10510

10510:                                            ; preds = %10508, %10504
  %10511 = load double, ptr %802, align 8, !tbaa !17
  %10512 = load double, ptr %833, align 8, !tbaa !17
  %10513 = fcmp olt double %10511, %10512
  br i1 %10513, label %10514, label %10516

10514:                                            ; preds = %10510
  %10515 = load double, ptr %833, align 8, !tbaa !17
  store double %10515, ptr %802, align 8, !tbaa !17
  br label %10516

10516:                                            ; preds = %10514, %10510
  call void @llvm.lifetime.end.p0(i64 8, ptr %834) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %833) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %832) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %831) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %830) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %829) #7
  br label %10517

10517:                                            ; preds = %10516
  %10518 = load i32, ptr %809, align 4, !tbaa !9
  %10519 = add nsw i32 %10518, 1
  store i32 %10519, ptr %809, align 4, !tbaa !9
  br label %10370, !llvm.loop !110

10520:                                            ; preds = %10370
  %10521 = load double, ptr %801, align 8, !tbaa !17
  %10522 = fcmp oge double 0.000000e+00, %10521
  br i1 %10522, label %10523, label %10527

10523:                                            ; preds = %10520
  %10524 = load ptr, ptr %9, align 8, !tbaa !5
  %10525 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %10524, i32 0, i32 0
  %10526 = load double, ptr %10525, align 8, !tbaa !44
  br label %10539

10527:                                            ; preds = %10520
  %10528 = load ptr, ptr %9, align 8, !tbaa !5
  %10529 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %10528, i32 0, i32 0
  %10530 = load double, ptr %10529, align 8, !tbaa !44
  %10531 = load double, ptr %801, align 8, !tbaa !17
  %10532 = fcmp olt double 0.000000e+00, %10531
  br i1 %10532, label %10533, label %10535

10533:                                            ; preds = %10527
  %10534 = load double, ptr %801, align 8, !tbaa !17
  br label %10536

10535:                                            ; preds = %10527
  br label %10536

10536:                                            ; preds = %10535, %10533
  %10537 = phi double [ %10534, %10533 ], [ 1.000000e+00, %10535 ]
  %10538 = fdiv double %10530, %10537
  br label %10539

10539:                                            ; preds = %10536, %10523
  %10540 = phi double [ %10526, %10523 ], [ %10538, %10536 ]
  %10541 = load ptr, ptr %9, align 8, !tbaa !5
  %10542 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %10541, i32 0, i32 1
  store double %10540, ptr %10542, align 8, !tbaa !46
  call void @llvm.lifetime.end.p0(i64 8, ptr %828) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %827) #7
  br label %10543

10543:                                            ; preds = %10539, %10276
  call void @llvm.lifetime.end.p0(i64 4, ptr %809) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %808) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %807) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %806) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %805) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %804) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %803) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %802) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %801) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %800) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %799) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %798) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %797) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %796) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %795) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %794) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %793) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %792) #7
  br label %10544

10544:                                            ; preds = %10543, %9947
  br label %15200

10545:                                            ; preds = %1323
  %10546 = load i32, ptr %23, align 4, !tbaa !9
  %10547 = icmp eq i32 0, %10546
  br i1 %10547, label %10548, label %11105

10548:                                            ; preds = %10545
  call void @llvm.lifetime.start.p0(i64 8, ptr %845) #7
  %10549 = load ptr, ptr %13, align 8, !tbaa !5
  store ptr %10549, ptr %845, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %846) #7
  %10550 = load ptr, ptr %14, align 8, !tbaa !5
  store ptr %10550, ptr %846, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %847) #7
  store double 0.000000e+00, ptr %847, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %848) #7
  store double 0.000000e+00, ptr %848, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %849) #7
  store double 0.000000e+00, ptr %849, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %850) #7
  store double 0.000000e+00, ptr %850, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %851) #7
  store double 0.000000e+00, ptr %851, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %852) #7
  store double 0.000000e+00, ptr %852, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %853) #7
  store double 0.000000e+00, ptr %853, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %854) #7
  store double 0.000000e+00, ptr %854, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %855) #7
  store double 0.000000e+00, ptr %855, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %856) #7
  store double 0.000000e+00, ptr %856, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %857) #7
  store double 0.000000e+00, ptr %857, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %858) #7
  store double 0.000000e+00, ptr %858, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 4, ptr %859) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %860) #7
  store i32 0, ptr %859, align 4, !tbaa !9
  br label %10551

10551:                                            ; preds = %10850, %10548
  %10552 = load i32, ptr %859, align 4, !tbaa !9
  %10553 = load i32, ptr %26, align 4, !tbaa !9
  %10554 = icmp slt i32 %10552, %10553
  br i1 %10554, label %10555, label %10853

10555:                                            ; preds = %10551
  call void @llvm.lifetime.start.p0(i64 8, ptr %861) #7
  store double 0.000000e+00, ptr %861, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %862) #7
  store double 0.000000e+00, ptr %862, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %863) #7
  store double 0.000000e+00, ptr %863, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %864) #7
  store double 0.000000e+00, ptr %864, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %865) #7
  store double 0.000000e+00, ptr %865, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %866) #7
  store double 0.000000e+00, ptr %866, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %867) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %868) #7
  store i32 0, ptr %860, align 4, !tbaa !9
  br label %10556

10556:                                            ; preds = %10808, %10555
  %10557 = load i32, ptr %860, align 4, !tbaa !9
  %10558 = load i32, ptr %25, align 4, !tbaa !9
  %10559 = icmp slt i32 %10557, %10558
  br i1 %10559, label %10560, label %10811

10560:                                            ; preds = %10556
  call void @llvm.lifetime.start.p0(i64 4, ptr %869) #7
  %10561 = load i32, ptr %859, align 4, !tbaa !9
  store i32 %10561, ptr %869, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %870) #7
  %10562 = load i32, ptr %860, align 4, !tbaa !9
  store i32 %10562, ptr %870, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %871) #7
  %10563 = load ptr, ptr %846, align 8, !tbaa !5
  %10564 = icmp ne ptr null, %10563
  br i1 %10564, label %10565, label %10576

10565:                                            ; preds = %10560
  %10566 = load ptr, ptr %846, align 8, !tbaa !5
  %10567 = load i32, ptr %869, align 4, !tbaa !9
  %10568 = load i32, ptr %21, align 4, !tbaa !9
  %10569 = mul nsw i32 %10567, %10568
  %10570 = load i32, ptr %870, align 4, !tbaa !9
  %10571 = add nsw i32 %10569, %10570
  %10572 = sext i32 %10571 to i64
  %10573 = getelementptr inbounds i16, ptr %10566, i64 %10572
  %10574 = load i16, ptr %10573, align 2, !tbaa !67
  %10575 = call float @libxsmm_convert_f16_to_f32(i16 noundef zeroext %10574)
  br label %10577

10576:                                            ; preds = %10560
  br label %10577

10577:                                            ; preds = %10576, %10565
  %10578 = phi float [ %10575, %10565 ], [ 0.000000e+00, %10576 ]
  %10579 = fpext float %10578 to double
  store double %10579, ptr %871, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %872) #7
  %10580 = load ptr, ptr %845, align 8, !tbaa !5
  %10581 = load i32, ptr %869, align 4, !tbaa !9
  %10582 = load i32, ptr %20, align 4, !tbaa !9
  %10583 = mul nsw i32 %10581, %10582
  %10584 = load i32, ptr %870, align 4, !tbaa !9
  %10585 = add nsw i32 %10583, %10584
  %10586 = sext i32 %10585 to i64
  %10587 = getelementptr inbounds i16, ptr %10580, i64 %10586
  %10588 = load i16, ptr %10587, align 2, !tbaa !67
  %10589 = call float @libxsmm_convert_f16_to_f32(i16 noundef zeroext %10588)
  %10590 = fpext float %10589 to double
  store double %10590, ptr %872, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %873) #7
  %10591 = load double, ptr %871, align 8, !tbaa !17
  %10592 = fcmp ole double 0.000000e+00, %10591
  br i1 %10592, label %10593, label %10595

10593:                                            ; preds = %10577
  %10594 = load double, ptr %871, align 8, !tbaa !17
  br label %10598

10595:                                            ; preds = %10577
  %10596 = load double, ptr %871, align 8, !tbaa !17
  %10597 = fneg double %10596
  br label %10598

10598:                                            ; preds = %10595, %10593
  %10599 = phi double [ %10594, %10593 ], [ %10597, %10595 ]
  store double %10599, ptr %873, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %874) #7
  %10600 = load double, ptr %872, align 8, !tbaa !17
  %10601 = fcmp ole double 0.000000e+00, %10600
  br i1 %10601, label %10602, label %10604

10602:                                            ; preds = %10598
  %10603 = load double, ptr %872, align 8, !tbaa !17
  br label %10607

10604:                                            ; preds = %10598
  %10605 = load double, ptr %872, align 8, !tbaa !17
  %10606 = fneg double %10605
  br label %10607

10607:                                            ; preds = %10604, %10602
  %10608 = phi double [ %10603, %10602 ], [ %10606, %10604 ]
  store double %10608, ptr %874, align 8, !tbaa !17
  %10609 = load double, ptr %872, align 8, !tbaa !17
  %10610 = load ptr, ptr %9, align 8, !tbaa !5
  %10611 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %10610, i32 0, i32 11
  %10612 = load double, ptr %10611, align 8, !tbaa !14
  %10613 = fcmp olt double %10609, %10612
  br i1 %10613, label %10614, label %10618

10614:                                            ; preds = %10607
  %10615 = load double, ptr %872, align 8, !tbaa !17
  %10616 = load ptr, ptr %9, align 8, !tbaa !5
  %10617 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %10616, i32 0, i32 11
  store double %10615, ptr %10617, align 8, !tbaa !14
  br label %10618

10618:                                            ; preds = %10614, %10607
  %10619 = load double, ptr %872, align 8, !tbaa !17
  %10620 = load ptr, ptr %9, align 8, !tbaa !5
  %10621 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %10620, i32 0, i32 12
  %10622 = load double, ptr %10621, align 8, !tbaa !20
  %10623 = fcmp ogt double %10619, %10622
  br i1 %10623, label %10624, label %10628

10624:                                            ; preds = %10618
  %10625 = load double, ptr %872, align 8, !tbaa !17
  %10626 = load ptr, ptr %9, align 8, !tbaa !5
  %10627 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %10626, i32 0, i32 12
  store double %10625, ptr %10627, align 8, !tbaa !20
  br label %10628

10628:                                            ; preds = %10624, %10618
  %10629 = load double, ptr %871, align 8, !tbaa !17
  %10630 = load double, ptr %871, align 8, !tbaa !17
  %10631 = fcmp oeq double %10629, %10630
  br i1 %10631, label %10632, label %10780

10632:                                            ; preds = %10628
  %10633 = load double, ptr %27, align 8, !tbaa !17
  %10634 = load double, ptr %873, align 8, !tbaa !17
  %10635 = fcmp ogt double %10633, %10634
  br i1 %10635, label %10640, label %10636

10636:                                            ; preds = %10632
  %10637 = load double, ptr %871, align 8, !tbaa !17
  %10638 = load double, ptr %872, align 8, !tbaa !17
  %10639 = fcmp oeq double %10637, %10638
  br i1 %10639, label %10640, label %10780

10640:                                            ; preds = %10636, %10632
  call void @llvm.lifetime.start.p0(i64 8, ptr %875) #7
  %10641 = load ptr, ptr %846, align 8, !tbaa !5
  %10642 = icmp ne ptr null, %10641
  br i1 %10642, label %10643, label %10657

10643:                                            ; preds = %10640
  %10644 = load double, ptr %872, align 8, !tbaa !17
  %10645 = load double, ptr %871, align 8, !tbaa !17
  %10646 = fcmp olt double %10644, %10645
  br i1 %10646, label %10647, label %10651

10647:                                            ; preds = %10643
  %10648 = load double, ptr %871, align 8, !tbaa !17
  %10649 = load double, ptr %872, align 8, !tbaa !17
  %10650 = fsub double %10648, %10649
  br label %10655

10651:                                            ; preds = %10643
  %10652 = load double, ptr %872, align 8, !tbaa !17
  %10653 = load double, ptr %871, align 8, !tbaa !17
  %10654 = fsub double %10652, %10653
  br label %10655

10655:                                            ; preds = %10651, %10647
  %10656 = phi double [ %10650, %10647 ], [ %10654, %10651 ]
  br label %10658

10657:                                            ; preds = %10640
  br label %10658

10658:                                            ; preds = %10657, %10655
  %10659 = phi double [ %10656, %10655 ], [ 0.000000e+00, %10657 ]
  store double %10659, ptr %875, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %876) #7
  %10660 = load double, ptr %874, align 8, !tbaa !17
  %10661 = fcmp oge double 0.000000e+00, %10660
  br i1 %10661, label %10662, label %10664

10662:                                            ; preds = %10658
  %10663 = load double, ptr %873, align 8, !tbaa !17
  br label %10674

10664:                                            ; preds = %10658
  %10665 = load double, ptr %875, align 8, !tbaa !17
  %10666 = load double, ptr %874, align 8, !tbaa !17
  %10667 = fcmp olt double 0.000000e+00, %10666
  br i1 %10667, label %10668, label %10670

10668:                                            ; preds = %10664
  %10669 = load double, ptr %874, align 8, !tbaa !17
  br label %10671

10670:                                            ; preds = %10664
  br label %10671

10671:                                            ; preds = %10670, %10668
  %10672 = phi double [ %10669, %10668 ], [ 1.000000e+00, %10670 ]
  %10673 = fdiv double %10665, %10672
  br label %10674

10674:                                            ; preds = %10671, %10662
  %10675 = phi double [ %10663, %10662 ], [ %10673, %10671 ]
  store double %10675, ptr %876, align 8, !tbaa !17
  %10676 = load double, ptr %871, align 8, !tbaa !17
  %10677 = load ptr, ptr %9, align 8, !tbaa !5
  %10678 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %10677, i32 0, i32 16
  %10679 = load double, ptr %10678, align 8, !tbaa !21
  %10680 = fcmp olt double %10676, %10679
  br i1 %10680, label %10681, label %10685

10681:                                            ; preds = %10674
  %10682 = load double, ptr %871, align 8, !tbaa !17
  %10683 = load ptr, ptr %9, align 8, !tbaa !5
  %10684 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %10683, i32 0, i32 16
  store double %10682, ptr %10684, align 8, !tbaa !21
  br label %10685

10685:                                            ; preds = %10681, %10674
  %10686 = load double, ptr %871, align 8, !tbaa !17
  %10687 = load ptr, ptr %9, align 8, !tbaa !5
  %10688 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %10687, i32 0, i32 17
  %10689 = load double, ptr %10688, align 8, !tbaa !22
  %10690 = fcmp ogt double %10686, %10689
  br i1 %10690, label %10691, label %10695

10691:                                            ; preds = %10685
  %10692 = load double, ptr %871, align 8, !tbaa !17
  %10693 = load ptr, ptr %9, align 8, !tbaa !5
  %10694 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %10693, i32 0, i32 17
  store double %10692, ptr %10694, align 8, !tbaa !22
  br label %10695

10695:                                            ; preds = %10691, %10685
  %10696 = load ptr, ptr %9, align 8, !tbaa !5
  %10697 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %10696, i32 0, i32 5
  %10698 = load double, ptr %10697, align 8, !tbaa !23
  %10699 = load double, ptr %875, align 8, !tbaa !17
  %10700 = fcmp olt double %10698, %10699
  br i1 %10700, label %10701, label %10717

10701:                                            ; preds = %10695
  %10702 = load double, ptr %875, align 8, !tbaa !17
  %10703 = load ptr, ptr %9, align 8, !tbaa !5
  %10704 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %10703, i32 0, i32 5
  store double %10702, ptr %10704, align 8, !tbaa !23
  %10705 = load double, ptr %872, align 8, !tbaa !17
  %10706 = load ptr, ptr %9, align 8, !tbaa !5
  %10707 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %10706, i32 0, i32 20
  store double %10705, ptr %10707, align 8, !tbaa !24
  %10708 = load double, ptr %871, align 8, !tbaa !17
  %10709 = load ptr, ptr %9, align 8, !tbaa !5
  %10710 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %10709, i32 0, i32 21
  store double %10708, ptr %10710, align 8, !tbaa !25
  %10711 = load i32, ptr %870, align 4, !tbaa !9
  %10712 = load ptr, ptr %9, align 8, !tbaa !5
  %10713 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %10712, i32 0, i32 22
  store i32 %10711, ptr %10713, align 8, !tbaa !26
  %10714 = load i32, ptr %869, align 4, !tbaa !9
  %10715 = load ptr, ptr %9, align 8, !tbaa !5
  %10716 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %10715, i32 0, i32 23
  store i32 %10714, ptr %10716, align 4, !tbaa !27
  br label %10717

10717:                                            ; preds = %10701, %10695
  %10718 = load ptr, ptr %9, align 8, !tbaa !5
  %10719 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %10718, i32 0, i32 6
  %10720 = load double, ptr %10719, align 8, !tbaa !28
  %10721 = load double, ptr %876, align 8, !tbaa !17
  %10722 = fcmp olt double %10720, %10721
  br i1 %10722, label %10723, label %10727

10723:                                            ; preds = %10717
  %10724 = load double, ptr %876, align 8, !tbaa !17
  %10725 = load ptr, ptr %9, align 8, !tbaa !5
  %10726 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %10725, i32 0, i32 6
  store double %10724, ptr %10726, align 8, !tbaa !28
  br label %10727

10727:                                            ; preds = %10723, %10717
  %10728 = load double, ptr %876, align 8, !tbaa !17
  %10729 = load double, ptr %876, align 8, !tbaa !17
  %10730 = fmul double %10728, %10729
  store double %10730, ptr %867, align 8, !tbaa !17
  %10731 = load double, ptr %27, align 8, !tbaa !17
  %10732 = load double, ptr %867, align 8, !tbaa !17
  %10733 = fcmp ogt double %10731, %10732
  br i1 %10733, label %10734, label %10753

10734:                                            ; preds = %10727
  %10735 = load double, ptr %858, align 8, !tbaa !17
  %10736 = load double, ptr %867, align 8, !tbaa !17
  %10737 = fsub double %10736, %10735
  store double %10737, ptr %867, align 8, !tbaa !17
  %10738 = load ptr, ptr %9, align 8, !tbaa !5
  %10739 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %10738, i32 0, i32 8
  %10740 = load double, ptr %10739, align 8, !tbaa !29
  %10741 = load double, ptr %867, align 8, !tbaa !17
  %10742 = fadd double %10740, %10741
  store double %10742, ptr %868, align 8, !tbaa !17
  %10743 = load double, ptr %868, align 8, !tbaa !17
  %10744 = load ptr, ptr %9, align 8, !tbaa !5
  %10745 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %10744, i32 0, i32 8
  %10746 = load double, ptr %10745, align 8, !tbaa !29
  %10747 = fsub double %10743, %10746
  %10748 = load double, ptr %867, align 8, !tbaa !17
  %10749 = fsub double %10747, %10748
  store double %10749, ptr %858, align 8, !tbaa !17
  %10750 = load double, ptr %868, align 8, !tbaa !17
  %10751 = load ptr, ptr %9, align 8, !tbaa !5
  %10752 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %10751, i32 0, i32 8
  store double %10750, ptr %10752, align 8, !tbaa !29
  br label %10753

10753:                                            ; preds = %10734, %10727
  %10754 = load double, ptr %874, align 8, !tbaa !17
  %10755 = call double @libxsmm_kahan_sum(double noundef %10754, ptr noundef %864, ptr noundef %861)
  %10756 = load double, ptr %873, align 8, !tbaa !17
  %10757 = call double @libxsmm_kahan_sum(double noundef %10756, ptr noundef %865, ptr noundef %862)
  %10758 = load double, ptr %875, align 8, !tbaa !17
  %10759 = call double @libxsmm_kahan_sum(double noundef %10758, ptr noundef %866, ptr noundef %863)
  %10760 = load double, ptr %872, align 8, !tbaa !17
  %10761 = load double, ptr %872, align 8, !tbaa !17
  %10762 = fmul double %10760, %10761
  %10763 = call double @libxsmm_kahan_sum(double noundef %10762, ptr noundef %850, ptr noundef %848)
  %10764 = load double, ptr %871, align 8, !tbaa !17
  %10765 = load double, ptr %871, align 8, !tbaa !17
  %10766 = fmul double %10764, %10765
  %10767 = call double @libxsmm_kahan_sum(double noundef %10766, ptr noundef %851, ptr noundef %849)
  %10768 = load double, ptr %875, align 8, !tbaa !17
  %10769 = load double, ptr %875, align 8, !tbaa !17
  %10770 = fmul double %10768, %10769
  store double %10770, ptr %867, align 8, !tbaa !17
  %10771 = load double, ptr %27, align 8, !tbaa !17
  %10772 = load double, ptr %867, align 8, !tbaa !17
  %10773 = fcmp ogt double %10771, %10772
  br i1 %10773, label %10774, label %10779

10774:                                            ; preds = %10753
  %10775 = load double, ptr %867, align 8, !tbaa !17
  %10776 = load ptr, ptr %9, align 8, !tbaa !5
  %10777 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %10776, i32 0, i32 7
  %10778 = call double @libxsmm_kahan_sum(double noundef %10775, ptr noundef %10777, ptr noundef %847)
  br label %10779

10779:                                            ; preds = %10774, %10753
  call void @llvm.lifetime.end.p0(i64 8, ptr %876) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %875) #7
  br label %10804

10780:                                            ; preds = %10636, %10628
  %10781 = load double, ptr %872, align 8, !tbaa !17
  %10782 = load double, ptr %872, align 8, !tbaa !17
  %10783 = fcmp oeq double %10781, %10782
  br i1 %10783, label %10784, label %10788

10784:                                            ; preds = %10780
  %10785 = load double, ptr %27, align 8, !tbaa !17
  %10786 = load double, ptr %874, align 8, !tbaa !17
  %10787 = fcmp ogt double %10785, %10786
  br label %10788

10788:                                            ; preds = %10784, %10780
  %10789 = phi i1 [ false, %10780 ], [ %10787, %10784 ]
  %10790 = zext i1 %10789 to i64
  %10791 = select i1 %10789, i32 1, i32 2
  store i32 %10791, ptr %19, align 4, !tbaa !9
  %10792 = load i32, ptr %870, align 4, !tbaa !9
  %10793 = load ptr, ptr %9, align 8, !tbaa !5
  %10794 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %10793, i32 0, i32 22
  store i32 %10792, ptr %10794, align 8, !tbaa !26
  %10795 = load i32, ptr %869, align 4, !tbaa !9
  %10796 = load ptr, ptr %9, align 8, !tbaa !5
  %10797 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %10796, i32 0, i32 23
  store i32 %10795, ptr %10797, align 4, !tbaa !27
  %10798 = load double, ptr %872, align 8, !tbaa !17
  %10799 = load ptr, ptr %9, align 8, !tbaa !5
  %10800 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %10799, i32 0, i32 20
  store double %10798, ptr %10800, align 8, !tbaa !24
  %10801 = load double, ptr %871, align 8, !tbaa !17
  %10802 = load ptr, ptr %9, align 8, !tbaa !5
  %10803 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %10802, i32 0, i32 21
  store double %10801, ptr %10803, align 8, !tbaa !25
  store i32 198, ptr %60, align 4
  br label %10805

10804:                                            ; preds = %10779
  store i32 0, ptr %60, align 4
  br label %10805

10805:                                            ; preds = %10804, %10788
  call void @llvm.lifetime.end.p0(i64 8, ptr %874) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %873) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %872) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %871) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %870) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %869) #7
  %10806 = load i32, ptr %60, align 4
  switch i32 %10806, label %15542 [
    i32 0, label %10807
    i32 198, label %10811
  ]

10807:                                            ; preds = %10805
  br label %10808

10808:                                            ; preds = %10807
  %10809 = load i32, ptr %860, align 4, !tbaa !9
  %10810 = add nsw i32 %10809, 1
  store i32 %10810, ptr %860, align 4, !tbaa !9
  br label %10556, !llvm.loop !111

10811:                                            ; preds = %10805, %10556
  %10812 = load i32, ptr %19, align 4, !tbaa !9
  %10813 = icmp eq i32 0, %10812
  br i1 %10813, label %10814, label %10845

10814:                                            ; preds = %10811
  %10815 = load double, ptr %864, align 8, !tbaa !17
  %10816 = load ptr, ptr %9, align 8, !tbaa !5
  %10817 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %10816, i32 0, i32 10
  %10818 = call double @libxsmm_kahan_sum(double noundef %10815, ptr noundef %10817, ptr noundef %856)
  %10819 = load double, ptr %865, align 8, !tbaa !17
  %10820 = load ptr, ptr %9, align 8, !tbaa !5
  %10821 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %10820, i32 0, i32 15
  %10822 = call double @libxsmm_kahan_sum(double noundef %10819, ptr noundef %10821, ptr noundef %857)
  %10823 = load ptr, ptr %9, align 8, !tbaa !5
  %10824 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %10823, i32 0, i32 2
  %10825 = load double, ptr %10824, align 8, !tbaa !32
  %10826 = load double, ptr %866, align 8, !tbaa !17
  %10827 = fcmp olt double %10825, %10826
  br i1 %10827, label %10828, label %10832

10828:                                            ; preds = %10814
  %10829 = load double, ptr %866, align 8, !tbaa !17
  %10830 = load ptr, ptr %9, align 8, !tbaa !5
  %10831 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %10830, i32 0, i32 2
  store double %10829, ptr %10831, align 8, !tbaa !32
  br label %10832

10832:                                            ; preds = %10828, %10814
  %10833 = load double, ptr %852, align 8, !tbaa !17
  %10834 = load double, ptr %864, align 8, !tbaa !17
  %10835 = fcmp olt double %10833, %10834
  br i1 %10835, label %10836, label %10838

10836:                                            ; preds = %10832
  %10837 = load double, ptr %864, align 8, !tbaa !17
  store double %10837, ptr %852, align 8, !tbaa !17
  br label %10838

10838:                                            ; preds = %10836, %10832
  %10839 = load double, ptr %853, align 8, !tbaa !17
  %10840 = load double, ptr %865, align 8, !tbaa !17
  %10841 = fcmp olt double %10839, %10840
  br i1 %10841, label %10842, label %10844

10842:                                            ; preds = %10838
  %10843 = load double, ptr %865, align 8, !tbaa !17
  store double %10843, ptr %853, align 8, !tbaa !17
  br label %10844

10844:                                            ; preds = %10842, %10838
  br label %10846

10845:                                            ; preds = %10811
  store i32 195, ptr %60, align 4
  br label %10847

10846:                                            ; preds = %10844
  store i32 0, ptr %60, align 4
  br label %10847

10847:                                            ; preds = %10846, %10845
  call void @llvm.lifetime.end.p0(i64 8, ptr %868) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %867) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %866) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %865) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %864) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %863) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %862) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %861) #7
  %10848 = load i32, ptr %60, align 4
  switch i32 %10848, label %15542 [
    i32 0, label %10849
    i32 195, label %10853
  ]

10849:                                            ; preds = %10847
  br label %10850

10850:                                            ; preds = %10849
  %10851 = load i32, ptr %859, align 4, !tbaa !9
  %10852 = add nsw i32 %10851, 1
  store i32 %10852, ptr %859, align 4, !tbaa !9
  br label %10551, !llvm.loop !112

10853:                                            ; preds = %10847, %10551
  %10854 = load i32, ptr %19, align 4, !tbaa !9
  %10855 = icmp eq i32 0, %10854
  br i1 %10855, label %10856, label %11104

10856:                                            ; preds = %10853
  call void @llvm.lifetime.start.p0(i64 8, ptr %877) #7
  store double 0.000000e+00, ptr %877, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %878) #7
  store double 0.000000e+00, ptr %878, align 8, !tbaa !17
  %10857 = load ptr, ptr %9, align 8, !tbaa !5
  %10858 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %10857, i32 0, i32 14
  %10859 = load double, ptr %10858, align 8, !tbaa !34
  %10860 = fcmp oeq double 0.000000e+00, %10859
  br i1 %10860, label %10861, label %10862

10861:                                            ; preds = %10856
  br label %10863

10862:                                            ; preds = %10856
  call void @__assert_fail(ptr noundef @.str.1, ptr noundef @.str.2, i32 noundef 130, ptr noundef @__PRETTY_FUNCTION__.libxsmm_matdiff) #9
  unreachable

10863:                                            ; preds = %10861
  %10864 = load ptr, ptr %9, align 8, !tbaa !5
  %10865 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %10864, i32 0, i32 19
  %10866 = load double, ptr %10865, align 8, !tbaa !35
  %10867 = fcmp oeq double 0.000000e+00, %10866
  br i1 %10867, label %10868, label %10869

10868:                                            ; preds = %10863
  br label %10870

10869:                                            ; preds = %10863
  call void @__assert_fail(ptr noundef @.str.3, ptr noundef @.str.2, i32 noundef 131, ptr noundef @__PRETTY_FUNCTION__.libxsmm_matdiff) #9
  unreachable

10870:                                            ; preds = %10868
  %10871 = load i64, ptr %24, align 8, !tbaa !12
  %10872 = icmp ne i64 0, %10871
  br i1 %10872, label %10873, label %10890

10873:                                            ; preds = %10870
  %10874 = load ptr, ptr %9, align 8, !tbaa !5
  %10875 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %10874, i32 0, i32 10
  %10876 = load double, ptr %10875, align 8, !tbaa !36
  %10877 = load i64, ptr %24, align 8, !tbaa !12
  %10878 = uitofp i64 %10877 to double
  %10879 = fdiv double %10876, %10878
  %10880 = load ptr, ptr %9, align 8, !tbaa !5
  %10881 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %10880, i32 0, i32 13
  store double %10879, ptr %10881, align 8, !tbaa !37
  %10882 = load ptr, ptr %9, align 8, !tbaa !5
  %10883 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %10882, i32 0, i32 15
  %10884 = load double, ptr %10883, align 8, !tbaa !38
  %10885 = load i64, ptr %24, align 8, !tbaa !12
  %10886 = uitofp i64 %10885 to double
  %10887 = fdiv double %10884, %10886
  %10888 = load ptr, ptr %9, align 8, !tbaa !5
  %10889 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %10888, i32 0, i32 18
  store double %10887, ptr %10889, align 8, !tbaa !39
  br label %10890

10890:                                            ; preds = %10873, %10870
  %10891 = load double, ptr %852, align 8, !tbaa !17
  %10892 = fcmp oge double 0.000000e+00, %10891
  br i1 %10892, label %10893, label %10895

10893:                                            ; preds = %10890
  %10894 = load double, ptr %853, align 8, !tbaa !17
  br label %10907

10895:                                            ; preds = %10890
  %10896 = load ptr, ptr %9, align 8, !tbaa !5
  %10897 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %10896, i32 0, i32 2
  %10898 = load double, ptr %10897, align 8, !tbaa !32
  %10899 = load double, ptr %852, align 8, !tbaa !17
  %10900 = fcmp olt double 0.000000e+00, %10899
  br i1 %10900, label %10901, label %10903

10901:                                            ; preds = %10895
  %10902 = load double, ptr %852, align 8, !tbaa !17
  br label %10904

10903:                                            ; preds = %10895
  br label %10904

10904:                                            ; preds = %10903, %10901
  %10905 = phi double [ %10902, %10901 ], [ 1.000000e+00, %10903 ]
  %10906 = fdiv double %10898, %10905
  br label %10907

10907:                                            ; preds = %10904, %10893
  %10908 = phi double [ %10894, %10893 ], [ %10906, %10904 ]
  %10909 = load ptr, ptr %9, align 8, !tbaa !5
  %10910 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %10909, i32 0, i32 3
  store double %10908, ptr %10910, align 8, !tbaa !40
  %10911 = load double, ptr %850, align 8, !tbaa !17
  %10912 = fcmp oge double 0.000000e+00, %10911
  br i1 %10912, label %10913, label %10931

10913:                                            ; preds = %10907
  %10914 = load double, ptr %851, align 8, !tbaa !17
  %10915 = load double, ptr %851, align 8, !tbaa !17
  %10916 = fmul double %10914, %10915
  %10917 = load ptr, ptr %9, align 8, !tbaa !5
  %10918 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %10917, i32 0, i32 7
  %10919 = load double, ptr %10918, align 8, !tbaa !41
  %10920 = fcmp olt double %10916, %10919
  br i1 %10920, label %10921, label %10925

10921:                                            ; preds = %10913
  %10922 = load double, ptr %851, align 8, !tbaa !17
  %10923 = load double, ptr %851, align 8, !tbaa !17
  %10924 = fmul double %10922, %10923
  br label %10929

10925:                                            ; preds = %10913
  %10926 = load ptr, ptr %9, align 8, !tbaa !5
  %10927 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %10926, i32 0, i32 7
  %10928 = load double, ptr %10927, align 8, !tbaa !41
  br label %10929

10929:                                            ; preds = %10925, %10921
  %10930 = phi double [ %10924, %10921 ], [ %10928, %10925 ]
  br label %10943

10931:                                            ; preds = %10907
  %10932 = load ptr, ptr %9, align 8, !tbaa !5
  %10933 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %10932, i32 0, i32 7
  %10934 = load double, ptr %10933, align 8, !tbaa !41
  %10935 = load double, ptr %850, align 8, !tbaa !17
  %10936 = fcmp olt double 0.000000e+00, %10935
  br i1 %10936, label %10937, label %10939

10937:                                            ; preds = %10931
  %10938 = load double, ptr %850, align 8, !tbaa !17
  br label %10940

10939:                                            ; preds = %10931
  br label %10940

10940:                                            ; preds = %10939, %10937
  %10941 = phi double [ %10938, %10937 ], [ 1.000000e+00, %10939 ]
  %10942 = fdiv double %10934, %10941
  br label %10943

10943:                                            ; preds = %10940, %10929
  %10944 = phi double [ %10930, %10929 ], [ %10942, %10940 ]
  %10945 = load ptr, ptr %9, align 8, !tbaa !5
  %10946 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %10945, i32 0, i32 4
  store double %10944, ptr %10946, align 8, !tbaa !42
  store i32 0, ptr %860, align 4, !tbaa !9
  br label %10947

10947:                                            ; preds = %11078, %10943
  %10948 = load i32, ptr %860, align 4, !tbaa !9
  %10949 = load i32, ptr %25, align 4, !tbaa !9
  %10950 = icmp slt i32 %10948, %10949
  br i1 %10950, label %10951, label %11081

10951:                                            ; preds = %10947
  call void @llvm.lifetime.start.p0(i64 8, ptr %879) #7
  store double 0.000000e+00, ptr %879, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %880) #7
  store double 0.000000e+00, ptr %880, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %881) #7
  store double 0.000000e+00, ptr %881, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %882) #7
  store double 0.000000e+00, ptr %882, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %883) #7
  store double 0.000000e+00, ptr %883, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %884) #7
  store double 0.000000e+00, ptr %884, align 8, !tbaa !17
  store i32 0, ptr %859, align 4, !tbaa !9
  br label %10952

10952:                                            ; preds = %11052, %10951
  %10953 = load i32, ptr %859, align 4, !tbaa !9
  %10954 = load i32, ptr %26, align 4, !tbaa !9
  %10955 = icmp slt i32 %10953, %10954
  br i1 %10955, label %10956, label %11055

10956:                                            ; preds = %10952
  call void @llvm.lifetime.start.p0(i64 4, ptr %885) #7
  %10957 = load i32, ptr %859, align 4, !tbaa !9
  store i32 %10957, ptr %885, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %886) #7
  %10958 = load i32, ptr %860, align 4, !tbaa !9
  store i32 %10958, ptr %886, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %887) #7
  %10959 = load ptr, ptr %845, align 8, !tbaa !5
  %10960 = load i32, ptr %885, align 4, !tbaa !9
  %10961 = load i32, ptr %20, align 4, !tbaa !9
  %10962 = mul nsw i32 %10960, %10961
  %10963 = load i32, ptr %886, align 4, !tbaa !9
  %10964 = add nsw i32 %10962, %10963
  %10965 = sext i32 %10964 to i64
  %10966 = getelementptr inbounds i16, ptr %10959, i64 %10965
  %10967 = load i16, ptr %10966, align 2, !tbaa !67
  %10968 = call float @libxsmm_convert_f16_to_f32(i16 noundef zeroext %10967)
  %10969 = fpext float %10968 to double
  store double %10969, ptr %887, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %888) #7
  %10970 = load ptr, ptr %846, align 8, !tbaa !5
  %10971 = icmp ne ptr null, %10970
  br i1 %10971, label %10972, label %10983

10972:                                            ; preds = %10956
  %10973 = load ptr, ptr %846, align 8, !tbaa !5
  %10974 = load i32, ptr %885, align 4, !tbaa !9
  %10975 = load i32, ptr %21, align 4, !tbaa !9
  %10976 = mul nsw i32 %10974, %10975
  %10977 = load i32, ptr %886, align 4, !tbaa !9
  %10978 = add nsw i32 %10976, %10977
  %10979 = sext i32 %10978 to i64
  %10980 = getelementptr inbounds i16, ptr %10973, i64 %10979
  %10981 = load i16, ptr %10980, align 2, !tbaa !67
  %10982 = call float @libxsmm_convert_f16_to_f32(i16 noundef zeroext %10981)
  br label %10984

10983:                                            ; preds = %10956
  br label %10984

10984:                                            ; preds = %10983, %10972
  %10985 = phi float [ %10982, %10972 ], [ 0.000000e+00, %10983 ]
  %10986 = fpext float %10985 to double
  store double %10986, ptr %888, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %889) #7
  %10987 = load ptr, ptr %846, align 8, !tbaa !5
  %10988 = icmp ne ptr null, %10987
  br i1 %10988, label %10989, label %11003

10989:                                            ; preds = %10984
  %10990 = load double, ptr %887, align 8, !tbaa !17
  %10991 = load double, ptr %888, align 8, !tbaa !17
  %10992 = fcmp olt double %10990, %10991
  br i1 %10992, label %10993, label %10997

10993:                                            ; preds = %10989
  %10994 = load double, ptr %888, align 8, !tbaa !17
  %10995 = load double, ptr %887, align 8, !tbaa !17
  %10996 = fsub double %10994, %10995
  br label %11001

10997:                                            ; preds = %10989
  %10998 = load double, ptr %887, align 8, !tbaa !17
  %10999 = load double, ptr %888, align 8, !tbaa !17
  %11000 = fsub double %10998, %10999
  br label %11001

11001:                                            ; preds = %10997, %10993
  %11002 = phi double [ %10996, %10993 ], [ %11000, %10997 ]
  br label %11004

11003:                                            ; preds = %10984
  br label %11004

11004:                                            ; preds = %11003, %11001
  %11005 = phi double [ %11002, %11001 ], [ 0.000000e+00, %11003 ]
  store double %11005, ptr %889, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %890) #7
  %11006 = load double, ptr %887, align 8, !tbaa !17
  %11007 = load ptr, ptr %9, align 8, !tbaa !5
  %11008 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %11007, i32 0, i32 13
  %11009 = load double, ptr %11008, align 8, !tbaa !37
  %11010 = fsub double %11006, %11009
  store double %11010, ptr %890, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %891) #7
  %11011 = load double, ptr %888, align 8, !tbaa !17
  %11012 = load ptr, ptr %9, align 8, !tbaa !5
  %11013 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %11012, i32 0, i32 18
  %11014 = load double, ptr %11013, align 8, !tbaa !39
  %11015 = fsub double %11011, %11014
  store double %11015, ptr %891, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %892) #7
  %11016 = load double, ptr %887, align 8, !tbaa !17
  %11017 = fcmp ole double 0.000000e+00, %11016
  br i1 %11017, label %11018, label %11020

11018:                                            ; preds = %11004
  %11019 = load double, ptr %887, align 8, !tbaa !17
  br label %11023

11020:                                            ; preds = %11004
  %11021 = load double, ptr %887, align 8, !tbaa !17
  %11022 = fneg double %11021
  br label %11023

11023:                                            ; preds = %11020, %11018
  %11024 = phi double [ %11019, %11018 ], [ %11022, %11020 ]
  store double %11024, ptr %892, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %893) #7
  %11025 = load double, ptr %888, align 8, !tbaa !17
  %11026 = fcmp ole double 0.000000e+00, %11025
  br i1 %11026, label %11027, label %11029

11027:                                            ; preds = %11023
  %11028 = load double, ptr %888, align 8, !tbaa !17
  br label %11032

11029:                                            ; preds = %11023
  %11030 = load double, ptr %888, align 8, !tbaa !17
  %11031 = fneg double %11030
  br label %11032

11032:                                            ; preds = %11029, %11027
  %11033 = phi double [ %11028, %11027 ], [ %11031, %11029 ]
  store double %11033, ptr %893, align 8, !tbaa !17
  %11034 = load double, ptr %890, align 8, !tbaa !17
  %11035 = load double, ptr %890, align 8, !tbaa !17
  %11036 = fmul double %11034, %11035
  %11037 = load ptr, ptr %9, align 8, !tbaa !5
  %11038 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %11037, i32 0, i32 14
  %11039 = call double @libxsmm_kahan_sum(double noundef %11036, ptr noundef %11038, ptr noundef %877)
  %11040 = load double, ptr %891, align 8, !tbaa !17
  %11041 = load double, ptr %891, align 8, !tbaa !17
  %11042 = fmul double %11040, %11041
  %11043 = load ptr, ptr %9, align 8, !tbaa !5
  %11044 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %11043, i32 0, i32 19
  %11045 = call double @libxsmm_kahan_sum(double noundef %11042, ptr noundef %11044, ptr noundef %878)
  %11046 = load double, ptr %892, align 8, !tbaa !17
  %11047 = call double @libxsmm_kahan_sum(double noundef %11046, ptr noundef %882, ptr noundef %879)
  %11048 = load double, ptr %893, align 8, !tbaa !17
  %11049 = call double @libxsmm_kahan_sum(double noundef %11048, ptr noundef %883, ptr noundef %880)
  %11050 = load double, ptr %889, align 8, !tbaa !17
  %11051 = call double @libxsmm_kahan_sum(double noundef %11050, ptr noundef %884, ptr noundef %881)
  call void @llvm.lifetime.end.p0(i64 8, ptr %893) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %892) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %891) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %890) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %889) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %888) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %887) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %886) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %885) #7
  br label %11052

11052:                                            ; preds = %11032
  %11053 = load i32, ptr %859, align 4, !tbaa !9
  %11054 = add nsw i32 %11053, 1
  store i32 %11054, ptr %859, align 4, !tbaa !9
  br label %10952, !llvm.loop !113

11055:                                            ; preds = %10952
  %11056 = load ptr, ptr %9, align 8, !tbaa !5
  %11057 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %11056, i32 0, i32 0
  %11058 = load double, ptr %11057, align 8, !tbaa !44
  %11059 = load double, ptr %884, align 8, !tbaa !17
  %11060 = fcmp olt double %11058, %11059
  br i1 %11060, label %11061, label %11065

11061:                                            ; preds = %11055
  %11062 = load double, ptr %884, align 8, !tbaa !17
  %11063 = load ptr, ptr %9, align 8, !tbaa !5
  %11064 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %11063, i32 0, i32 0
  store double %11062, ptr %11064, align 8, !tbaa !44
  br label %11065

11065:                                            ; preds = %11061, %11055
  %11066 = load double, ptr %854, align 8, !tbaa !17
  %11067 = load double, ptr %882, align 8, !tbaa !17
  %11068 = fcmp olt double %11066, %11067
  br i1 %11068, label %11069, label %11071

11069:                                            ; preds = %11065
  %11070 = load double, ptr %882, align 8, !tbaa !17
  store double %11070, ptr %854, align 8, !tbaa !17
  br label %11071

11071:                                            ; preds = %11069, %11065
  %11072 = load double, ptr %855, align 8, !tbaa !17
  %11073 = load double, ptr %883, align 8, !tbaa !17
  %11074 = fcmp olt double %11072, %11073
  br i1 %11074, label %11075, label %11077

11075:                                            ; preds = %11071
  %11076 = load double, ptr %883, align 8, !tbaa !17
  store double %11076, ptr %855, align 8, !tbaa !17
  br label %11077

11077:                                            ; preds = %11075, %11071
  call void @llvm.lifetime.end.p0(i64 8, ptr %884) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %883) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %882) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %881) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %880) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %879) #7
  br label %11078

11078:                                            ; preds = %11077
  %11079 = load i32, ptr %860, align 4, !tbaa !9
  %11080 = add nsw i32 %11079, 1
  store i32 %11080, ptr %860, align 4, !tbaa !9
  br label %10947, !llvm.loop !114

11081:                                            ; preds = %10947
  %11082 = load double, ptr %854, align 8, !tbaa !17
  %11083 = fcmp oge double 0.000000e+00, %11082
  br i1 %11083, label %11084, label %11088

11084:                                            ; preds = %11081
  %11085 = load ptr, ptr %9, align 8, !tbaa !5
  %11086 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %11085, i32 0, i32 0
  %11087 = load double, ptr %11086, align 8, !tbaa !44
  br label %11100

11088:                                            ; preds = %11081
  %11089 = load ptr, ptr %9, align 8, !tbaa !5
  %11090 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %11089, i32 0, i32 0
  %11091 = load double, ptr %11090, align 8, !tbaa !44
  %11092 = load double, ptr %854, align 8, !tbaa !17
  %11093 = fcmp olt double 0.000000e+00, %11092
  br i1 %11093, label %11094, label %11096

11094:                                            ; preds = %11088
  %11095 = load double, ptr %854, align 8, !tbaa !17
  br label %11097

11096:                                            ; preds = %11088
  br label %11097

11097:                                            ; preds = %11096, %11094
  %11098 = phi double [ %11095, %11094 ], [ 1.000000e+00, %11096 ]
  %11099 = fdiv double %11091, %11098
  br label %11100

11100:                                            ; preds = %11097, %11084
  %11101 = phi double [ %11087, %11084 ], [ %11099, %11097 ]
  %11102 = load ptr, ptr %9, align 8, !tbaa !5
  %11103 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %11102, i32 0, i32 1
  store double %11101, ptr %11103, align 8, !tbaa !46
  call void @llvm.lifetime.end.p0(i64 8, ptr %878) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %877) #7
  br label %11104

11104:                                            ; preds = %11100, %10853
  call void @llvm.lifetime.end.p0(i64 4, ptr %860) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %859) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %858) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %857) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %856) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %855) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %854) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %853) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %852) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %851) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %850) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %849) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %848) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %847) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %846) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %845) #7
  br label %11705

11105:                                            ; preds = %10545
  call void @llvm.lifetime.start.p0(i64 8, ptr %894) #7
  %11106 = load ptr, ptr %13, align 8, !tbaa !5
  store ptr %11106, ptr %894, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %895) #7
  %11107 = load ptr, ptr %14, align 8, !tbaa !5
  store ptr %11107, ptr %895, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %896) #7
  store double 0.000000e+00, ptr %896, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %897) #7
  store double 0.000000e+00, ptr %897, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %898) #7
  store double 0.000000e+00, ptr %898, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %899) #7
  store double 0.000000e+00, ptr %899, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %900) #7
  store double 0.000000e+00, ptr %900, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %901) #7
  store double 0.000000e+00, ptr %901, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %902) #7
  store double 0.000000e+00, ptr %902, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %903) #7
  store double 0.000000e+00, ptr %903, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %904) #7
  store double 0.000000e+00, ptr %904, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %905) #7
  store double 0.000000e+00, ptr %905, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %906) #7
  store double 0.000000e+00, ptr %906, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %907) #7
  store double 0.000000e+00, ptr %907, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %908) #7
  %11108 = load i32, ptr %25, align 4, !tbaa !9
  %11109 = sext i32 %11108 to i64
  %11110 = load i32, ptr %26, align 4, !tbaa !9
  %11111 = sext i32 %11110 to i64
  %11112 = mul i64 %11109, %11111
  store i64 %11112, ptr %908, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 8, ptr %909) #7
  %11113 = load i64, ptr %908, align 8, !tbaa !12
  %11114 = call i64 @libxsmm_coprime2(i64 noundef %11113)
  store i64 %11114, ptr %909, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 4, ptr %910) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %911) #7
  store i32 0, ptr %910, align 4, !tbaa !9
  br label %11115

11115:                                            ; preds = %11432, %11105
  %11116 = load i32, ptr %910, align 4, !tbaa !9
  %11117 = load i32, ptr %26, align 4, !tbaa !9
  %11118 = icmp slt i32 %11116, %11117
  br i1 %11118, label %11119, label %11435

11119:                                            ; preds = %11115
  call void @llvm.lifetime.start.p0(i64 8, ptr %912) #7
  store double 0.000000e+00, ptr %912, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %913) #7
  store double 0.000000e+00, ptr %913, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %914) #7
  store double 0.000000e+00, ptr %914, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %915) #7
  store double 0.000000e+00, ptr %915, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %916) #7
  store double 0.000000e+00, ptr %916, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %917) #7
  store double 0.000000e+00, ptr %917, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %918) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %919) #7
  store i32 0, ptr %911, align 4, !tbaa !9
  br label %11120

11120:                                            ; preds = %11390, %11119
  %11121 = load i32, ptr %911, align 4, !tbaa !9
  %11122 = load i32, ptr %25, align 4, !tbaa !9
  %11123 = icmp slt i32 %11121, %11122
  br i1 %11123, label %11124, label %11393

11124:                                            ; preds = %11120
  call void @llvm.lifetime.start.p0(i64 8, ptr %920) #7
  %11125 = load i64, ptr %909, align 8, !tbaa !12
  %11126 = load i32, ptr %910, align 4, !tbaa !9
  %11127 = load i32, ptr %25, align 4, !tbaa !9
  %11128 = mul nsw i32 %11126, %11127
  %11129 = load i32, ptr %911, align 4, !tbaa !9
  %11130 = add nsw i32 %11128, %11129
  %11131 = sext i32 %11130 to i64
  %11132 = mul i64 %11125, %11131
  %11133 = load i64, ptr %908, align 8, !tbaa !12
  %11134 = urem i64 %11132, %11133
  store i64 %11134, ptr %920, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 4, ptr %921) #7
  %11135 = load i64, ptr %920, align 8, !tbaa !12
  %11136 = load i32, ptr %25, align 4, !tbaa !9
  %11137 = sext i32 %11136 to i64
  %11138 = udiv i64 %11135, %11137
  %11139 = trunc i64 %11138 to i32
  store i32 %11139, ptr %921, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %922) #7
  %11140 = load i64, ptr %920, align 8, !tbaa !12
  %11141 = load i32, ptr %25, align 4, !tbaa !9
  %11142 = sext i32 %11141 to i64
  %11143 = urem i64 %11140, %11142
  %11144 = trunc i64 %11143 to i32
  store i32 %11144, ptr %922, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %923) #7
  %11145 = load ptr, ptr %895, align 8, !tbaa !5
  %11146 = icmp ne ptr null, %11145
  br i1 %11146, label %11147, label %11158

11147:                                            ; preds = %11124
  %11148 = load ptr, ptr %895, align 8, !tbaa !5
  %11149 = load i32, ptr %921, align 4, !tbaa !9
  %11150 = load i32, ptr %21, align 4, !tbaa !9
  %11151 = mul nsw i32 %11149, %11150
  %11152 = load i32, ptr %922, align 4, !tbaa !9
  %11153 = add nsw i32 %11151, %11152
  %11154 = sext i32 %11153 to i64
  %11155 = getelementptr inbounds i16, ptr %11148, i64 %11154
  %11156 = load i16, ptr %11155, align 2, !tbaa !67
  %11157 = call float @libxsmm_convert_f16_to_f32(i16 noundef zeroext %11156)
  br label %11159

11158:                                            ; preds = %11124
  br label %11159

11159:                                            ; preds = %11158, %11147
  %11160 = phi float [ %11157, %11147 ], [ 0.000000e+00, %11158 ]
  %11161 = fpext float %11160 to double
  store double %11161, ptr %923, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %924) #7
  %11162 = load ptr, ptr %894, align 8, !tbaa !5
  %11163 = load i32, ptr %921, align 4, !tbaa !9
  %11164 = load i32, ptr %20, align 4, !tbaa !9
  %11165 = mul nsw i32 %11163, %11164
  %11166 = load i32, ptr %922, align 4, !tbaa !9
  %11167 = add nsw i32 %11165, %11166
  %11168 = sext i32 %11167 to i64
  %11169 = getelementptr inbounds i16, ptr %11162, i64 %11168
  %11170 = load i16, ptr %11169, align 2, !tbaa !67
  %11171 = call float @libxsmm_convert_f16_to_f32(i16 noundef zeroext %11170)
  %11172 = fpext float %11171 to double
  store double %11172, ptr %924, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %925) #7
  %11173 = load double, ptr %923, align 8, !tbaa !17
  %11174 = fcmp ole double 0.000000e+00, %11173
  br i1 %11174, label %11175, label %11177

11175:                                            ; preds = %11159
  %11176 = load double, ptr %923, align 8, !tbaa !17
  br label %11180

11177:                                            ; preds = %11159
  %11178 = load double, ptr %923, align 8, !tbaa !17
  %11179 = fneg double %11178
  br label %11180

11180:                                            ; preds = %11177, %11175
  %11181 = phi double [ %11176, %11175 ], [ %11179, %11177 ]
  store double %11181, ptr %925, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %926) #7
  %11182 = load double, ptr %924, align 8, !tbaa !17
  %11183 = fcmp ole double 0.000000e+00, %11182
  br i1 %11183, label %11184, label %11186

11184:                                            ; preds = %11180
  %11185 = load double, ptr %924, align 8, !tbaa !17
  br label %11189

11186:                                            ; preds = %11180
  %11187 = load double, ptr %924, align 8, !tbaa !17
  %11188 = fneg double %11187
  br label %11189

11189:                                            ; preds = %11186, %11184
  %11190 = phi double [ %11185, %11184 ], [ %11188, %11186 ]
  store double %11190, ptr %926, align 8, !tbaa !17
  %11191 = load double, ptr %924, align 8, !tbaa !17
  %11192 = load ptr, ptr %9, align 8, !tbaa !5
  %11193 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %11192, i32 0, i32 11
  %11194 = load double, ptr %11193, align 8, !tbaa !14
  %11195 = fcmp olt double %11191, %11194
  br i1 %11195, label %11196, label %11200

11196:                                            ; preds = %11189
  %11197 = load double, ptr %924, align 8, !tbaa !17
  %11198 = load ptr, ptr %9, align 8, !tbaa !5
  %11199 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %11198, i32 0, i32 11
  store double %11197, ptr %11199, align 8, !tbaa !14
  br label %11200

11200:                                            ; preds = %11196, %11189
  %11201 = load double, ptr %924, align 8, !tbaa !17
  %11202 = load ptr, ptr %9, align 8, !tbaa !5
  %11203 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %11202, i32 0, i32 12
  %11204 = load double, ptr %11203, align 8, !tbaa !20
  %11205 = fcmp ogt double %11201, %11204
  br i1 %11205, label %11206, label %11210

11206:                                            ; preds = %11200
  %11207 = load double, ptr %924, align 8, !tbaa !17
  %11208 = load ptr, ptr %9, align 8, !tbaa !5
  %11209 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %11208, i32 0, i32 12
  store double %11207, ptr %11209, align 8, !tbaa !20
  br label %11210

11210:                                            ; preds = %11206, %11200
  %11211 = load double, ptr %923, align 8, !tbaa !17
  %11212 = load double, ptr %923, align 8, !tbaa !17
  %11213 = fcmp oeq double %11211, %11212
  br i1 %11213, label %11214, label %11362

11214:                                            ; preds = %11210
  %11215 = load double, ptr %27, align 8, !tbaa !17
  %11216 = load double, ptr %925, align 8, !tbaa !17
  %11217 = fcmp ogt double %11215, %11216
  br i1 %11217, label %11222, label %11218

11218:                                            ; preds = %11214
  %11219 = load double, ptr %923, align 8, !tbaa !17
  %11220 = load double, ptr %924, align 8, !tbaa !17
  %11221 = fcmp oeq double %11219, %11220
  br i1 %11221, label %11222, label %11362

11222:                                            ; preds = %11218, %11214
  call void @llvm.lifetime.start.p0(i64 8, ptr %927) #7
  %11223 = load ptr, ptr %895, align 8, !tbaa !5
  %11224 = icmp ne ptr null, %11223
  br i1 %11224, label %11225, label %11239

11225:                                            ; preds = %11222
  %11226 = load double, ptr %924, align 8, !tbaa !17
  %11227 = load double, ptr %923, align 8, !tbaa !17
  %11228 = fcmp olt double %11226, %11227
  br i1 %11228, label %11229, label %11233

11229:                                            ; preds = %11225
  %11230 = load double, ptr %923, align 8, !tbaa !17
  %11231 = load double, ptr %924, align 8, !tbaa !17
  %11232 = fsub double %11230, %11231
  br label %11237

11233:                                            ; preds = %11225
  %11234 = load double, ptr %924, align 8, !tbaa !17
  %11235 = load double, ptr %923, align 8, !tbaa !17
  %11236 = fsub double %11234, %11235
  br label %11237

11237:                                            ; preds = %11233, %11229
  %11238 = phi double [ %11232, %11229 ], [ %11236, %11233 ]
  br label %11240

11239:                                            ; preds = %11222
  br label %11240

11240:                                            ; preds = %11239, %11237
  %11241 = phi double [ %11238, %11237 ], [ 0.000000e+00, %11239 ]
  store double %11241, ptr %927, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %928) #7
  %11242 = load double, ptr %926, align 8, !tbaa !17
  %11243 = fcmp oge double 0.000000e+00, %11242
  br i1 %11243, label %11244, label %11246

11244:                                            ; preds = %11240
  %11245 = load double, ptr %925, align 8, !tbaa !17
  br label %11256

11246:                                            ; preds = %11240
  %11247 = load double, ptr %927, align 8, !tbaa !17
  %11248 = load double, ptr %926, align 8, !tbaa !17
  %11249 = fcmp olt double 0.000000e+00, %11248
  br i1 %11249, label %11250, label %11252

11250:                                            ; preds = %11246
  %11251 = load double, ptr %926, align 8, !tbaa !17
  br label %11253

11252:                                            ; preds = %11246
  br label %11253

11253:                                            ; preds = %11252, %11250
  %11254 = phi double [ %11251, %11250 ], [ 1.000000e+00, %11252 ]
  %11255 = fdiv double %11247, %11254
  br label %11256

11256:                                            ; preds = %11253, %11244
  %11257 = phi double [ %11245, %11244 ], [ %11255, %11253 ]
  store double %11257, ptr %928, align 8, !tbaa !17
  %11258 = load double, ptr %923, align 8, !tbaa !17
  %11259 = load ptr, ptr %9, align 8, !tbaa !5
  %11260 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %11259, i32 0, i32 16
  %11261 = load double, ptr %11260, align 8, !tbaa !21
  %11262 = fcmp olt double %11258, %11261
  br i1 %11262, label %11263, label %11267

11263:                                            ; preds = %11256
  %11264 = load double, ptr %923, align 8, !tbaa !17
  %11265 = load ptr, ptr %9, align 8, !tbaa !5
  %11266 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %11265, i32 0, i32 16
  store double %11264, ptr %11266, align 8, !tbaa !21
  br label %11267

11267:                                            ; preds = %11263, %11256
  %11268 = load double, ptr %923, align 8, !tbaa !17
  %11269 = load ptr, ptr %9, align 8, !tbaa !5
  %11270 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %11269, i32 0, i32 17
  %11271 = load double, ptr %11270, align 8, !tbaa !22
  %11272 = fcmp ogt double %11268, %11271
  br i1 %11272, label %11273, label %11277

11273:                                            ; preds = %11267
  %11274 = load double, ptr %923, align 8, !tbaa !17
  %11275 = load ptr, ptr %9, align 8, !tbaa !5
  %11276 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %11275, i32 0, i32 17
  store double %11274, ptr %11276, align 8, !tbaa !22
  br label %11277

11277:                                            ; preds = %11273, %11267
  %11278 = load ptr, ptr %9, align 8, !tbaa !5
  %11279 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %11278, i32 0, i32 5
  %11280 = load double, ptr %11279, align 8, !tbaa !23
  %11281 = load double, ptr %927, align 8, !tbaa !17
  %11282 = fcmp olt double %11280, %11281
  br i1 %11282, label %11283, label %11299

11283:                                            ; preds = %11277
  %11284 = load double, ptr %927, align 8, !tbaa !17
  %11285 = load ptr, ptr %9, align 8, !tbaa !5
  %11286 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %11285, i32 0, i32 5
  store double %11284, ptr %11286, align 8, !tbaa !23
  %11287 = load double, ptr %924, align 8, !tbaa !17
  %11288 = load ptr, ptr %9, align 8, !tbaa !5
  %11289 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %11288, i32 0, i32 20
  store double %11287, ptr %11289, align 8, !tbaa !24
  %11290 = load double, ptr %923, align 8, !tbaa !17
  %11291 = load ptr, ptr %9, align 8, !tbaa !5
  %11292 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %11291, i32 0, i32 21
  store double %11290, ptr %11292, align 8, !tbaa !25
  %11293 = load i32, ptr %922, align 4, !tbaa !9
  %11294 = load ptr, ptr %9, align 8, !tbaa !5
  %11295 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %11294, i32 0, i32 22
  store i32 %11293, ptr %11295, align 8, !tbaa !26
  %11296 = load i32, ptr %921, align 4, !tbaa !9
  %11297 = load ptr, ptr %9, align 8, !tbaa !5
  %11298 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %11297, i32 0, i32 23
  store i32 %11296, ptr %11298, align 4, !tbaa !27
  br label %11299

11299:                                            ; preds = %11283, %11277
  %11300 = load ptr, ptr %9, align 8, !tbaa !5
  %11301 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %11300, i32 0, i32 6
  %11302 = load double, ptr %11301, align 8, !tbaa !28
  %11303 = load double, ptr %928, align 8, !tbaa !17
  %11304 = fcmp olt double %11302, %11303
  br i1 %11304, label %11305, label %11309

11305:                                            ; preds = %11299
  %11306 = load double, ptr %928, align 8, !tbaa !17
  %11307 = load ptr, ptr %9, align 8, !tbaa !5
  %11308 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %11307, i32 0, i32 6
  store double %11306, ptr %11308, align 8, !tbaa !28
  br label %11309

11309:                                            ; preds = %11305, %11299
  %11310 = load double, ptr %928, align 8, !tbaa !17
  %11311 = load double, ptr %928, align 8, !tbaa !17
  %11312 = fmul double %11310, %11311
  store double %11312, ptr %918, align 8, !tbaa !17
  %11313 = load double, ptr %27, align 8, !tbaa !17
  %11314 = load double, ptr %918, align 8, !tbaa !17
  %11315 = fcmp ogt double %11313, %11314
  br i1 %11315, label %11316, label %11335

11316:                                            ; preds = %11309
  %11317 = load double, ptr %907, align 8, !tbaa !17
  %11318 = load double, ptr %918, align 8, !tbaa !17
  %11319 = fsub double %11318, %11317
  store double %11319, ptr %918, align 8, !tbaa !17
  %11320 = load ptr, ptr %9, align 8, !tbaa !5
  %11321 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %11320, i32 0, i32 8
  %11322 = load double, ptr %11321, align 8, !tbaa !29
  %11323 = load double, ptr %918, align 8, !tbaa !17
  %11324 = fadd double %11322, %11323
  store double %11324, ptr %919, align 8, !tbaa !17
  %11325 = load double, ptr %919, align 8, !tbaa !17
  %11326 = load ptr, ptr %9, align 8, !tbaa !5
  %11327 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %11326, i32 0, i32 8
  %11328 = load double, ptr %11327, align 8, !tbaa !29
  %11329 = fsub double %11325, %11328
  %11330 = load double, ptr %918, align 8, !tbaa !17
  %11331 = fsub double %11329, %11330
  store double %11331, ptr %907, align 8, !tbaa !17
  %11332 = load double, ptr %919, align 8, !tbaa !17
  %11333 = load ptr, ptr %9, align 8, !tbaa !5
  %11334 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %11333, i32 0, i32 8
  store double %11332, ptr %11334, align 8, !tbaa !29
  br label %11335

11335:                                            ; preds = %11316, %11309
  %11336 = load double, ptr %926, align 8, !tbaa !17
  %11337 = call double @libxsmm_kahan_sum(double noundef %11336, ptr noundef %915, ptr noundef %912)
  %11338 = load double, ptr %925, align 8, !tbaa !17
  %11339 = call double @libxsmm_kahan_sum(double noundef %11338, ptr noundef %916, ptr noundef %913)
  %11340 = load double, ptr %927, align 8, !tbaa !17
  %11341 = call double @libxsmm_kahan_sum(double noundef %11340, ptr noundef %917, ptr noundef %914)
  %11342 = load double, ptr %924, align 8, !tbaa !17
  %11343 = load double, ptr %924, align 8, !tbaa !17
  %11344 = fmul double %11342, %11343
  %11345 = call double @libxsmm_kahan_sum(double noundef %11344, ptr noundef %899, ptr noundef %897)
  %11346 = load double, ptr %923, align 8, !tbaa !17
  %11347 = load double, ptr %923, align 8, !tbaa !17
  %11348 = fmul double %11346, %11347
  %11349 = call double @libxsmm_kahan_sum(double noundef %11348, ptr noundef %900, ptr noundef %898)
  %11350 = load double, ptr %927, align 8, !tbaa !17
  %11351 = load double, ptr %927, align 8, !tbaa !17
  %11352 = fmul double %11350, %11351
  store double %11352, ptr %918, align 8, !tbaa !17
  %11353 = load double, ptr %27, align 8, !tbaa !17
  %11354 = load double, ptr %918, align 8, !tbaa !17
  %11355 = fcmp ogt double %11353, %11354
  br i1 %11355, label %11356, label %11361

11356:                                            ; preds = %11335
  %11357 = load double, ptr %918, align 8, !tbaa !17
  %11358 = load ptr, ptr %9, align 8, !tbaa !5
  %11359 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %11358, i32 0, i32 7
  %11360 = call double @libxsmm_kahan_sum(double noundef %11357, ptr noundef %11359, ptr noundef %896)
  br label %11361

11361:                                            ; preds = %11356, %11335
  call void @llvm.lifetime.end.p0(i64 8, ptr %928) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %927) #7
  br label %11386

11362:                                            ; preds = %11218, %11210
  %11363 = load double, ptr %924, align 8, !tbaa !17
  %11364 = load double, ptr %924, align 8, !tbaa !17
  %11365 = fcmp oeq double %11363, %11364
  br i1 %11365, label %11366, label %11370

11366:                                            ; preds = %11362
  %11367 = load double, ptr %27, align 8, !tbaa !17
  %11368 = load double, ptr %926, align 8, !tbaa !17
  %11369 = fcmp ogt double %11367, %11368
  br label %11370

11370:                                            ; preds = %11366, %11362
  %11371 = phi i1 [ false, %11362 ], [ %11369, %11366 ]
  %11372 = zext i1 %11371 to i64
  %11373 = select i1 %11371, i32 1, i32 2
  store i32 %11373, ptr %19, align 4, !tbaa !9
  %11374 = load i32, ptr %922, align 4, !tbaa !9
  %11375 = load ptr, ptr %9, align 8, !tbaa !5
  %11376 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %11375, i32 0, i32 22
  store i32 %11374, ptr %11376, align 8, !tbaa !26
  %11377 = load i32, ptr %921, align 4, !tbaa !9
  %11378 = load ptr, ptr %9, align 8, !tbaa !5
  %11379 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %11378, i32 0, i32 23
  store i32 %11377, ptr %11379, align 4, !tbaa !27
  %11380 = load double, ptr %924, align 8, !tbaa !17
  %11381 = load ptr, ptr %9, align 8, !tbaa !5
  %11382 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %11381, i32 0, i32 20
  store double %11380, ptr %11382, align 8, !tbaa !24
  %11383 = load double, ptr %923, align 8, !tbaa !17
  %11384 = load ptr, ptr %9, align 8, !tbaa !5
  %11385 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %11384, i32 0, i32 21
  store double %11383, ptr %11385, align 8, !tbaa !25
  store i32 210, ptr %60, align 4
  br label %11387

11386:                                            ; preds = %11361
  store i32 0, ptr %60, align 4
  br label %11387

11387:                                            ; preds = %11386, %11370
  call void @llvm.lifetime.end.p0(i64 8, ptr %926) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %925) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %924) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %923) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %922) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %921) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %920) #7
  %11388 = load i32, ptr %60, align 4
  switch i32 %11388, label %15542 [
    i32 0, label %11389
    i32 210, label %11393
  ]

11389:                                            ; preds = %11387
  br label %11390

11390:                                            ; preds = %11389
  %11391 = load i32, ptr %911, align 4, !tbaa !9
  %11392 = add nsw i32 %11391, 1
  store i32 %11392, ptr %911, align 4, !tbaa !9
  br label %11120, !llvm.loop !115

11393:                                            ; preds = %11387, %11120
  %11394 = load i32, ptr %19, align 4, !tbaa !9
  %11395 = icmp eq i32 0, %11394
  br i1 %11395, label %11396, label %11427

11396:                                            ; preds = %11393
  %11397 = load double, ptr %915, align 8, !tbaa !17
  %11398 = load ptr, ptr %9, align 8, !tbaa !5
  %11399 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %11398, i32 0, i32 10
  %11400 = call double @libxsmm_kahan_sum(double noundef %11397, ptr noundef %11399, ptr noundef %905)
  %11401 = load double, ptr %916, align 8, !tbaa !17
  %11402 = load ptr, ptr %9, align 8, !tbaa !5
  %11403 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %11402, i32 0, i32 15
  %11404 = call double @libxsmm_kahan_sum(double noundef %11401, ptr noundef %11403, ptr noundef %906)
  %11405 = load ptr, ptr %9, align 8, !tbaa !5
  %11406 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %11405, i32 0, i32 2
  %11407 = load double, ptr %11406, align 8, !tbaa !32
  %11408 = load double, ptr %917, align 8, !tbaa !17
  %11409 = fcmp olt double %11407, %11408
  br i1 %11409, label %11410, label %11414

11410:                                            ; preds = %11396
  %11411 = load double, ptr %917, align 8, !tbaa !17
  %11412 = load ptr, ptr %9, align 8, !tbaa !5
  %11413 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %11412, i32 0, i32 2
  store double %11411, ptr %11413, align 8, !tbaa !32
  br label %11414

11414:                                            ; preds = %11410, %11396
  %11415 = load double, ptr %901, align 8, !tbaa !17
  %11416 = load double, ptr %915, align 8, !tbaa !17
  %11417 = fcmp olt double %11415, %11416
  br i1 %11417, label %11418, label %11420

11418:                                            ; preds = %11414
  %11419 = load double, ptr %915, align 8, !tbaa !17
  store double %11419, ptr %901, align 8, !tbaa !17
  br label %11420

11420:                                            ; preds = %11418, %11414
  %11421 = load double, ptr %902, align 8, !tbaa !17
  %11422 = load double, ptr %916, align 8, !tbaa !17
  %11423 = fcmp olt double %11421, %11422
  br i1 %11423, label %11424, label %11426

11424:                                            ; preds = %11420
  %11425 = load double, ptr %916, align 8, !tbaa !17
  store double %11425, ptr %902, align 8, !tbaa !17
  br label %11426

11426:                                            ; preds = %11424, %11420
  br label %11428

11427:                                            ; preds = %11393
  store i32 207, ptr %60, align 4
  br label %11429

11428:                                            ; preds = %11426
  store i32 0, ptr %60, align 4
  br label %11429

11429:                                            ; preds = %11428, %11427
  call void @llvm.lifetime.end.p0(i64 8, ptr %919) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %918) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %917) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %916) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %915) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %914) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %913) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %912) #7
  %11430 = load i32, ptr %60, align 4
  switch i32 %11430, label %15542 [
    i32 0, label %11431
    i32 207, label %11435
  ]

11431:                                            ; preds = %11429
  br label %11432

11432:                                            ; preds = %11431
  %11433 = load i32, ptr %910, align 4, !tbaa !9
  %11434 = add nsw i32 %11433, 1
  store i32 %11434, ptr %910, align 4, !tbaa !9
  br label %11115, !llvm.loop !116

11435:                                            ; preds = %11429, %11115
  %11436 = load i32, ptr %19, align 4, !tbaa !9
  %11437 = icmp eq i32 0, %11436
  br i1 %11437, label %11438, label %11704

11438:                                            ; preds = %11435
  call void @llvm.lifetime.start.p0(i64 8, ptr %929) #7
  store double 0.000000e+00, ptr %929, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %930) #7
  store double 0.000000e+00, ptr %930, align 8, !tbaa !17
  %11439 = load ptr, ptr %9, align 8, !tbaa !5
  %11440 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %11439, i32 0, i32 14
  %11441 = load double, ptr %11440, align 8, !tbaa !34
  %11442 = fcmp oeq double 0.000000e+00, %11441
  br i1 %11442, label %11443, label %11444

11443:                                            ; preds = %11438
  br label %11445

11444:                                            ; preds = %11438
  call void @__assert_fail(ptr noundef @.str.1, ptr noundef @.str.2, i32 noundef 130, ptr noundef @__PRETTY_FUNCTION__.libxsmm_matdiff) #9
  unreachable

11445:                                            ; preds = %11443
  %11446 = load ptr, ptr %9, align 8, !tbaa !5
  %11447 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %11446, i32 0, i32 19
  %11448 = load double, ptr %11447, align 8, !tbaa !35
  %11449 = fcmp oeq double 0.000000e+00, %11448
  br i1 %11449, label %11450, label %11451

11450:                                            ; preds = %11445
  br label %11452

11451:                                            ; preds = %11445
  call void @__assert_fail(ptr noundef @.str.3, ptr noundef @.str.2, i32 noundef 131, ptr noundef @__PRETTY_FUNCTION__.libxsmm_matdiff) #9
  unreachable

11452:                                            ; preds = %11450
  %11453 = load i64, ptr %24, align 8, !tbaa !12
  %11454 = icmp ne i64 0, %11453
  br i1 %11454, label %11455, label %11472

11455:                                            ; preds = %11452
  %11456 = load ptr, ptr %9, align 8, !tbaa !5
  %11457 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %11456, i32 0, i32 10
  %11458 = load double, ptr %11457, align 8, !tbaa !36
  %11459 = load i64, ptr %24, align 8, !tbaa !12
  %11460 = uitofp i64 %11459 to double
  %11461 = fdiv double %11458, %11460
  %11462 = load ptr, ptr %9, align 8, !tbaa !5
  %11463 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %11462, i32 0, i32 13
  store double %11461, ptr %11463, align 8, !tbaa !37
  %11464 = load ptr, ptr %9, align 8, !tbaa !5
  %11465 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %11464, i32 0, i32 15
  %11466 = load double, ptr %11465, align 8, !tbaa !38
  %11467 = load i64, ptr %24, align 8, !tbaa !12
  %11468 = uitofp i64 %11467 to double
  %11469 = fdiv double %11466, %11468
  %11470 = load ptr, ptr %9, align 8, !tbaa !5
  %11471 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %11470, i32 0, i32 18
  store double %11469, ptr %11471, align 8, !tbaa !39
  br label %11472

11472:                                            ; preds = %11455, %11452
  %11473 = load double, ptr %901, align 8, !tbaa !17
  %11474 = fcmp oge double 0.000000e+00, %11473
  br i1 %11474, label %11475, label %11477

11475:                                            ; preds = %11472
  %11476 = load double, ptr %902, align 8, !tbaa !17
  br label %11489

11477:                                            ; preds = %11472
  %11478 = load ptr, ptr %9, align 8, !tbaa !5
  %11479 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %11478, i32 0, i32 2
  %11480 = load double, ptr %11479, align 8, !tbaa !32
  %11481 = load double, ptr %901, align 8, !tbaa !17
  %11482 = fcmp olt double 0.000000e+00, %11481
  br i1 %11482, label %11483, label %11485

11483:                                            ; preds = %11477
  %11484 = load double, ptr %901, align 8, !tbaa !17
  br label %11486

11485:                                            ; preds = %11477
  br label %11486

11486:                                            ; preds = %11485, %11483
  %11487 = phi double [ %11484, %11483 ], [ 1.000000e+00, %11485 ]
  %11488 = fdiv double %11480, %11487
  br label %11489

11489:                                            ; preds = %11486, %11475
  %11490 = phi double [ %11476, %11475 ], [ %11488, %11486 ]
  %11491 = load ptr, ptr %9, align 8, !tbaa !5
  %11492 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %11491, i32 0, i32 3
  store double %11490, ptr %11492, align 8, !tbaa !40
  %11493 = load double, ptr %899, align 8, !tbaa !17
  %11494 = fcmp oge double 0.000000e+00, %11493
  br i1 %11494, label %11495, label %11513

11495:                                            ; preds = %11489
  %11496 = load double, ptr %900, align 8, !tbaa !17
  %11497 = load double, ptr %900, align 8, !tbaa !17
  %11498 = fmul double %11496, %11497
  %11499 = load ptr, ptr %9, align 8, !tbaa !5
  %11500 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %11499, i32 0, i32 7
  %11501 = load double, ptr %11500, align 8, !tbaa !41
  %11502 = fcmp olt double %11498, %11501
  br i1 %11502, label %11503, label %11507

11503:                                            ; preds = %11495
  %11504 = load double, ptr %900, align 8, !tbaa !17
  %11505 = load double, ptr %900, align 8, !tbaa !17
  %11506 = fmul double %11504, %11505
  br label %11511

11507:                                            ; preds = %11495
  %11508 = load ptr, ptr %9, align 8, !tbaa !5
  %11509 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %11508, i32 0, i32 7
  %11510 = load double, ptr %11509, align 8, !tbaa !41
  br label %11511

11511:                                            ; preds = %11507, %11503
  %11512 = phi double [ %11506, %11503 ], [ %11510, %11507 ]
  br label %11525

11513:                                            ; preds = %11489
  %11514 = load ptr, ptr %9, align 8, !tbaa !5
  %11515 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %11514, i32 0, i32 7
  %11516 = load double, ptr %11515, align 8, !tbaa !41
  %11517 = load double, ptr %899, align 8, !tbaa !17
  %11518 = fcmp olt double 0.000000e+00, %11517
  br i1 %11518, label %11519, label %11521

11519:                                            ; preds = %11513
  %11520 = load double, ptr %899, align 8, !tbaa !17
  br label %11522

11521:                                            ; preds = %11513
  br label %11522

11522:                                            ; preds = %11521, %11519
  %11523 = phi double [ %11520, %11519 ], [ 1.000000e+00, %11521 ]
  %11524 = fdiv double %11516, %11523
  br label %11525

11525:                                            ; preds = %11522, %11511
  %11526 = phi double [ %11512, %11511 ], [ %11524, %11522 ]
  %11527 = load ptr, ptr %9, align 8, !tbaa !5
  %11528 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %11527, i32 0, i32 4
  store double %11526, ptr %11528, align 8, !tbaa !42
  store i32 0, ptr %911, align 4, !tbaa !9
  br label %11529

11529:                                            ; preds = %11678, %11525
  %11530 = load i32, ptr %911, align 4, !tbaa !9
  %11531 = load i32, ptr %25, align 4, !tbaa !9
  %11532 = icmp slt i32 %11530, %11531
  br i1 %11532, label %11533, label %11681

11533:                                            ; preds = %11529
  call void @llvm.lifetime.start.p0(i64 8, ptr %931) #7
  store double 0.000000e+00, ptr %931, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %932) #7
  store double 0.000000e+00, ptr %932, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %933) #7
  store double 0.000000e+00, ptr %933, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %934) #7
  store double 0.000000e+00, ptr %934, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %935) #7
  store double 0.000000e+00, ptr %935, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %936) #7
  store double 0.000000e+00, ptr %936, align 8, !tbaa !17
  store i32 0, ptr %910, align 4, !tbaa !9
  br label %11534

11534:                                            ; preds = %11652, %11533
  %11535 = load i32, ptr %910, align 4, !tbaa !9
  %11536 = load i32, ptr %26, align 4, !tbaa !9
  %11537 = icmp slt i32 %11535, %11536
  br i1 %11537, label %11538, label %11655

11538:                                            ; preds = %11534
  call void @llvm.lifetime.start.p0(i64 8, ptr %937) #7
  %11539 = load i64, ptr %909, align 8, !tbaa !12
  %11540 = load i32, ptr %910, align 4, !tbaa !9
  %11541 = load i32, ptr %25, align 4, !tbaa !9
  %11542 = mul nsw i32 %11540, %11541
  %11543 = load i32, ptr %911, align 4, !tbaa !9
  %11544 = add nsw i32 %11542, %11543
  %11545 = sext i32 %11544 to i64
  %11546 = mul i64 %11539, %11545
  %11547 = load i64, ptr %908, align 8, !tbaa !12
  %11548 = urem i64 %11546, %11547
  store i64 %11548, ptr %937, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 4, ptr %938) #7
  %11549 = load i64, ptr %937, align 8, !tbaa !12
  %11550 = load i32, ptr %25, align 4, !tbaa !9
  %11551 = sext i32 %11550 to i64
  %11552 = udiv i64 %11549, %11551
  %11553 = trunc i64 %11552 to i32
  store i32 %11553, ptr %938, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %939) #7
  %11554 = load i64, ptr %937, align 8, !tbaa !12
  %11555 = load i32, ptr %25, align 4, !tbaa !9
  %11556 = sext i32 %11555 to i64
  %11557 = urem i64 %11554, %11556
  %11558 = trunc i64 %11557 to i32
  store i32 %11558, ptr %939, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %940) #7
  %11559 = load ptr, ptr %894, align 8, !tbaa !5
  %11560 = load i32, ptr %938, align 4, !tbaa !9
  %11561 = load i32, ptr %20, align 4, !tbaa !9
  %11562 = mul nsw i32 %11560, %11561
  %11563 = load i32, ptr %939, align 4, !tbaa !9
  %11564 = add nsw i32 %11562, %11563
  %11565 = sext i32 %11564 to i64
  %11566 = getelementptr inbounds i16, ptr %11559, i64 %11565
  %11567 = load i16, ptr %11566, align 2, !tbaa !67
  %11568 = call float @libxsmm_convert_f16_to_f32(i16 noundef zeroext %11567)
  %11569 = fpext float %11568 to double
  store double %11569, ptr %940, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %941) #7
  %11570 = load ptr, ptr %895, align 8, !tbaa !5
  %11571 = icmp ne ptr null, %11570
  br i1 %11571, label %11572, label %11583

11572:                                            ; preds = %11538
  %11573 = load ptr, ptr %895, align 8, !tbaa !5
  %11574 = load i32, ptr %938, align 4, !tbaa !9
  %11575 = load i32, ptr %21, align 4, !tbaa !9
  %11576 = mul nsw i32 %11574, %11575
  %11577 = load i32, ptr %939, align 4, !tbaa !9
  %11578 = add nsw i32 %11576, %11577
  %11579 = sext i32 %11578 to i64
  %11580 = getelementptr inbounds i16, ptr %11573, i64 %11579
  %11581 = load i16, ptr %11580, align 2, !tbaa !67
  %11582 = call float @libxsmm_convert_f16_to_f32(i16 noundef zeroext %11581)
  br label %11584

11583:                                            ; preds = %11538
  br label %11584

11584:                                            ; preds = %11583, %11572
  %11585 = phi float [ %11582, %11572 ], [ 0.000000e+00, %11583 ]
  %11586 = fpext float %11585 to double
  store double %11586, ptr %941, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %942) #7
  %11587 = load ptr, ptr %895, align 8, !tbaa !5
  %11588 = icmp ne ptr null, %11587
  br i1 %11588, label %11589, label %11603

11589:                                            ; preds = %11584
  %11590 = load double, ptr %940, align 8, !tbaa !17
  %11591 = load double, ptr %941, align 8, !tbaa !17
  %11592 = fcmp olt double %11590, %11591
  br i1 %11592, label %11593, label %11597

11593:                                            ; preds = %11589
  %11594 = load double, ptr %941, align 8, !tbaa !17
  %11595 = load double, ptr %940, align 8, !tbaa !17
  %11596 = fsub double %11594, %11595
  br label %11601

11597:                                            ; preds = %11589
  %11598 = load double, ptr %940, align 8, !tbaa !17
  %11599 = load double, ptr %941, align 8, !tbaa !17
  %11600 = fsub double %11598, %11599
  br label %11601

11601:                                            ; preds = %11597, %11593
  %11602 = phi double [ %11596, %11593 ], [ %11600, %11597 ]
  br label %11604

11603:                                            ; preds = %11584
  br label %11604

11604:                                            ; preds = %11603, %11601
  %11605 = phi double [ %11602, %11601 ], [ 0.000000e+00, %11603 ]
  store double %11605, ptr %942, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %943) #7
  %11606 = load double, ptr %940, align 8, !tbaa !17
  %11607 = load ptr, ptr %9, align 8, !tbaa !5
  %11608 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %11607, i32 0, i32 13
  %11609 = load double, ptr %11608, align 8, !tbaa !37
  %11610 = fsub double %11606, %11609
  store double %11610, ptr %943, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %944) #7
  %11611 = load double, ptr %941, align 8, !tbaa !17
  %11612 = load ptr, ptr %9, align 8, !tbaa !5
  %11613 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %11612, i32 0, i32 18
  %11614 = load double, ptr %11613, align 8, !tbaa !39
  %11615 = fsub double %11611, %11614
  store double %11615, ptr %944, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %945) #7
  %11616 = load double, ptr %940, align 8, !tbaa !17
  %11617 = fcmp ole double 0.000000e+00, %11616
  br i1 %11617, label %11618, label %11620

11618:                                            ; preds = %11604
  %11619 = load double, ptr %940, align 8, !tbaa !17
  br label %11623

11620:                                            ; preds = %11604
  %11621 = load double, ptr %940, align 8, !tbaa !17
  %11622 = fneg double %11621
  br label %11623

11623:                                            ; preds = %11620, %11618
  %11624 = phi double [ %11619, %11618 ], [ %11622, %11620 ]
  store double %11624, ptr %945, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %946) #7
  %11625 = load double, ptr %941, align 8, !tbaa !17
  %11626 = fcmp ole double 0.000000e+00, %11625
  br i1 %11626, label %11627, label %11629

11627:                                            ; preds = %11623
  %11628 = load double, ptr %941, align 8, !tbaa !17
  br label %11632

11629:                                            ; preds = %11623
  %11630 = load double, ptr %941, align 8, !tbaa !17
  %11631 = fneg double %11630
  br label %11632

11632:                                            ; preds = %11629, %11627
  %11633 = phi double [ %11628, %11627 ], [ %11631, %11629 ]
  store double %11633, ptr %946, align 8, !tbaa !17
  %11634 = load double, ptr %943, align 8, !tbaa !17
  %11635 = load double, ptr %943, align 8, !tbaa !17
  %11636 = fmul double %11634, %11635
  %11637 = load ptr, ptr %9, align 8, !tbaa !5
  %11638 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %11637, i32 0, i32 14
  %11639 = call double @libxsmm_kahan_sum(double noundef %11636, ptr noundef %11638, ptr noundef %929)
  %11640 = load double, ptr %944, align 8, !tbaa !17
  %11641 = load double, ptr %944, align 8, !tbaa !17
  %11642 = fmul double %11640, %11641
  %11643 = load ptr, ptr %9, align 8, !tbaa !5
  %11644 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %11643, i32 0, i32 19
  %11645 = call double @libxsmm_kahan_sum(double noundef %11642, ptr noundef %11644, ptr noundef %930)
  %11646 = load double, ptr %945, align 8, !tbaa !17
  %11647 = call double @libxsmm_kahan_sum(double noundef %11646, ptr noundef %934, ptr noundef %931)
  %11648 = load double, ptr %946, align 8, !tbaa !17
  %11649 = call double @libxsmm_kahan_sum(double noundef %11648, ptr noundef %935, ptr noundef %932)
  %11650 = load double, ptr %942, align 8, !tbaa !17
  %11651 = call double @libxsmm_kahan_sum(double noundef %11650, ptr noundef %936, ptr noundef %933)
  call void @llvm.lifetime.end.p0(i64 8, ptr %946) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %945) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %944) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %943) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %942) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %941) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %940) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %939) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %938) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %937) #7
  br label %11652

11652:                                            ; preds = %11632
  %11653 = load i32, ptr %910, align 4, !tbaa !9
  %11654 = add nsw i32 %11653, 1
  store i32 %11654, ptr %910, align 4, !tbaa !9
  br label %11534, !llvm.loop !117

11655:                                            ; preds = %11534
  %11656 = load ptr, ptr %9, align 8, !tbaa !5
  %11657 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %11656, i32 0, i32 0
  %11658 = load double, ptr %11657, align 8, !tbaa !44
  %11659 = load double, ptr %936, align 8, !tbaa !17
  %11660 = fcmp olt double %11658, %11659
  br i1 %11660, label %11661, label %11665

11661:                                            ; preds = %11655
  %11662 = load double, ptr %936, align 8, !tbaa !17
  %11663 = load ptr, ptr %9, align 8, !tbaa !5
  %11664 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %11663, i32 0, i32 0
  store double %11662, ptr %11664, align 8, !tbaa !44
  br label %11665

11665:                                            ; preds = %11661, %11655
  %11666 = load double, ptr %903, align 8, !tbaa !17
  %11667 = load double, ptr %934, align 8, !tbaa !17
  %11668 = fcmp olt double %11666, %11667
  br i1 %11668, label %11669, label %11671

11669:                                            ; preds = %11665
  %11670 = load double, ptr %934, align 8, !tbaa !17
  store double %11670, ptr %903, align 8, !tbaa !17
  br label %11671

11671:                                            ; preds = %11669, %11665
  %11672 = load double, ptr %904, align 8, !tbaa !17
  %11673 = load double, ptr %935, align 8, !tbaa !17
  %11674 = fcmp olt double %11672, %11673
  br i1 %11674, label %11675, label %11677

11675:                                            ; preds = %11671
  %11676 = load double, ptr %935, align 8, !tbaa !17
  store double %11676, ptr %904, align 8, !tbaa !17
  br label %11677

11677:                                            ; preds = %11675, %11671
  call void @llvm.lifetime.end.p0(i64 8, ptr %936) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %935) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %934) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %933) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %932) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %931) #7
  br label %11678

11678:                                            ; preds = %11677
  %11679 = load i32, ptr %911, align 4, !tbaa !9
  %11680 = add nsw i32 %11679, 1
  store i32 %11680, ptr %911, align 4, !tbaa !9
  br label %11529, !llvm.loop !118

11681:                                            ; preds = %11529
  %11682 = load double, ptr %903, align 8, !tbaa !17
  %11683 = fcmp oge double 0.000000e+00, %11682
  br i1 %11683, label %11684, label %11688

11684:                                            ; preds = %11681
  %11685 = load ptr, ptr %9, align 8, !tbaa !5
  %11686 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %11685, i32 0, i32 0
  %11687 = load double, ptr %11686, align 8, !tbaa !44
  br label %11700

11688:                                            ; preds = %11681
  %11689 = load ptr, ptr %9, align 8, !tbaa !5
  %11690 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %11689, i32 0, i32 0
  %11691 = load double, ptr %11690, align 8, !tbaa !44
  %11692 = load double, ptr %903, align 8, !tbaa !17
  %11693 = fcmp olt double 0.000000e+00, %11692
  br i1 %11693, label %11694, label %11696

11694:                                            ; preds = %11688
  %11695 = load double, ptr %903, align 8, !tbaa !17
  br label %11697

11696:                                            ; preds = %11688
  br label %11697

11697:                                            ; preds = %11696, %11694
  %11698 = phi double [ %11695, %11694 ], [ 1.000000e+00, %11696 ]
  %11699 = fdiv double %11691, %11698
  br label %11700

11700:                                            ; preds = %11697, %11684
  %11701 = phi double [ %11687, %11684 ], [ %11699, %11697 ]
  %11702 = load ptr, ptr %9, align 8, !tbaa !5
  %11703 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %11702, i32 0, i32 1
  store double %11701, ptr %11703, align 8, !tbaa !46
  call void @llvm.lifetime.end.p0(i64 8, ptr %930) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %929) #7
  br label %11704

11704:                                            ; preds = %11700, %11435
  call void @llvm.lifetime.end.p0(i64 4, ptr %911) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %910) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %909) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %908) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %907) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %906) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %905) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %904) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %903) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %902) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %901) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %900) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %899) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %898) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %897) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %896) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %895) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %894) #7
  br label %11705

11705:                                            ; preds = %11704, %11104
  br label %15200

11706:                                            ; preds = %1323
  %11707 = load i32, ptr %23, align 4, !tbaa !9
  %11708 = icmp eq i32 0, %11707
  br i1 %11708, label %11709, label %12266

11709:                                            ; preds = %11706
  call void @llvm.lifetime.start.p0(i64 8, ptr %947) #7
  %11710 = load ptr, ptr %13, align 8, !tbaa !5
  store ptr %11710, ptr %947, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %948) #7
  %11711 = load ptr, ptr %14, align 8, !tbaa !5
  store ptr %11711, ptr %948, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %949) #7
  store double 0.000000e+00, ptr %949, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %950) #7
  store double 0.000000e+00, ptr %950, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %951) #7
  store double 0.000000e+00, ptr %951, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %952) #7
  store double 0.000000e+00, ptr %952, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %953) #7
  store double 0.000000e+00, ptr %953, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %954) #7
  store double 0.000000e+00, ptr %954, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %955) #7
  store double 0.000000e+00, ptr %955, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %956) #7
  store double 0.000000e+00, ptr %956, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %957) #7
  store double 0.000000e+00, ptr %957, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %958) #7
  store double 0.000000e+00, ptr %958, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %959) #7
  store double 0.000000e+00, ptr %959, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %960) #7
  store double 0.000000e+00, ptr %960, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 4, ptr %961) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %962) #7
  store i32 0, ptr %961, align 4, !tbaa !9
  br label %11712

11712:                                            ; preds = %12011, %11709
  %11713 = load i32, ptr %961, align 4, !tbaa !9
  %11714 = load i32, ptr %26, align 4, !tbaa !9
  %11715 = icmp slt i32 %11713, %11714
  br i1 %11715, label %11716, label %12014

11716:                                            ; preds = %11712
  call void @llvm.lifetime.start.p0(i64 8, ptr %963) #7
  store double 0.000000e+00, ptr %963, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %964) #7
  store double 0.000000e+00, ptr %964, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %965) #7
  store double 0.000000e+00, ptr %965, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %966) #7
  store double 0.000000e+00, ptr %966, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %967) #7
  store double 0.000000e+00, ptr %967, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %968) #7
  store double 0.000000e+00, ptr %968, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %969) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %970) #7
  store i32 0, ptr %962, align 4, !tbaa !9
  br label %11717

11717:                                            ; preds = %11969, %11716
  %11718 = load i32, ptr %962, align 4, !tbaa !9
  %11719 = load i32, ptr %25, align 4, !tbaa !9
  %11720 = icmp slt i32 %11718, %11719
  br i1 %11720, label %11721, label %11972

11721:                                            ; preds = %11717
  call void @llvm.lifetime.start.p0(i64 4, ptr %971) #7
  %11722 = load i32, ptr %961, align 4, !tbaa !9
  store i32 %11722, ptr %971, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %972) #7
  %11723 = load i32, ptr %962, align 4, !tbaa !9
  store i32 %11723, ptr %972, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %973) #7
  %11724 = load ptr, ptr %948, align 8, !tbaa !5
  %11725 = icmp ne ptr null, %11724
  br i1 %11725, label %11726, label %11737

11726:                                            ; preds = %11721
  %11727 = load ptr, ptr %948, align 8, !tbaa !5
  %11728 = load i32, ptr %971, align 4, !tbaa !9
  %11729 = load i32, ptr %21, align 4, !tbaa !9
  %11730 = mul nsw i32 %11728, %11729
  %11731 = load i32, ptr %972, align 4, !tbaa !9
  %11732 = add nsw i32 %11730, %11731
  %11733 = sext i32 %11732 to i64
  %11734 = getelementptr inbounds i16, ptr %11727, i64 %11733
  %11735 = load i16, ptr %11734, align 2, !tbaa !67
  %11736 = call float @libxsmm_convert_bf16_to_f32(i16 noundef zeroext %11735)
  br label %11738

11737:                                            ; preds = %11721
  br label %11738

11738:                                            ; preds = %11737, %11726
  %11739 = phi float [ %11736, %11726 ], [ 0.000000e+00, %11737 ]
  %11740 = fpext float %11739 to double
  store double %11740, ptr %973, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %974) #7
  %11741 = load ptr, ptr %947, align 8, !tbaa !5
  %11742 = load i32, ptr %971, align 4, !tbaa !9
  %11743 = load i32, ptr %20, align 4, !tbaa !9
  %11744 = mul nsw i32 %11742, %11743
  %11745 = load i32, ptr %972, align 4, !tbaa !9
  %11746 = add nsw i32 %11744, %11745
  %11747 = sext i32 %11746 to i64
  %11748 = getelementptr inbounds i16, ptr %11741, i64 %11747
  %11749 = load i16, ptr %11748, align 2, !tbaa !67
  %11750 = call float @libxsmm_convert_bf16_to_f32(i16 noundef zeroext %11749)
  %11751 = fpext float %11750 to double
  store double %11751, ptr %974, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %975) #7
  %11752 = load double, ptr %973, align 8, !tbaa !17
  %11753 = fcmp ole double 0.000000e+00, %11752
  br i1 %11753, label %11754, label %11756

11754:                                            ; preds = %11738
  %11755 = load double, ptr %973, align 8, !tbaa !17
  br label %11759

11756:                                            ; preds = %11738
  %11757 = load double, ptr %973, align 8, !tbaa !17
  %11758 = fneg double %11757
  br label %11759

11759:                                            ; preds = %11756, %11754
  %11760 = phi double [ %11755, %11754 ], [ %11758, %11756 ]
  store double %11760, ptr %975, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %976) #7
  %11761 = load double, ptr %974, align 8, !tbaa !17
  %11762 = fcmp ole double 0.000000e+00, %11761
  br i1 %11762, label %11763, label %11765

11763:                                            ; preds = %11759
  %11764 = load double, ptr %974, align 8, !tbaa !17
  br label %11768

11765:                                            ; preds = %11759
  %11766 = load double, ptr %974, align 8, !tbaa !17
  %11767 = fneg double %11766
  br label %11768

11768:                                            ; preds = %11765, %11763
  %11769 = phi double [ %11764, %11763 ], [ %11767, %11765 ]
  store double %11769, ptr %976, align 8, !tbaa !17
  %11770 = load double, ptr %974, align 8, !tbaa !17
  %11771 = load ptr, ptr %9, align 8, !tbaa !5
  %11772 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %11771, i32 0, i32 11
  %11773 = load double, ptr %11772, align 8, !tbaa !14
  %11774 = fcmp olt double %11770, %11773
  br i1 %11774, label %11775, label %11779

11775:                                            ; preds = %11768
  %11776 = load double, ptr %974, align 8, !tbaa !17
  %11777 = load ptr, ptr %9, align 8, !tbaa !5
  %11778 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %11777, i32 0, i32 11
  store double %11776, ptr %11778, align 8, !tbaa !14
  br label %11779

11779:                                            ; preds = %11775, %11768
  %11780 = load double, ptr %974, align 8, !tbaa !17
  %11781 = load ptr, ptr %9, align 8, !tbaa !5
  %11782 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %11781, i32 0, i32 12
  %11783 = load double, ptr %11782, align 8, !tbaa !20
  %11784 = fcmp ogt double %11780, %11783
  br i1 %11784, label %11785, label %11789

11785:                                            ; preds = %11779
  %11786 = load double, ptr %974, align 8, !tbaa !17
  %11787 = load ptr, ptr %9, align 8, !tbaa !5
  %11788 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %11787, i32 0, i32 12
  store double %11786, ptr %11788, align 8, !tbaa !20
  br label %11789

11789:                                            ; preds = %11785, %11779
  %11790 = load double, ptr %973, align 8, !tbaa !17
  %11791 = load double, ptr %973, align 8, !tbaa !17
  %11792 = fcmp oeq double %11790, %11791
  br i1 %11792, label %11793, label %11941

11793:                                            ; preds = %11789
  %11794 = load double, ptr %27, align 8, !tbaa !17
  %11795 = load double, ptr %975, align 8, !tbaa !17
  %11796 = fcmp ogt double %11794, %11795
  br i1 %11796, label %11801, label %11797

11797:                                            ; preds = %11793
  %11798 = load double, ptr %973, align 8, !tbaa !17
  %11799 = load double, ptr %974, align 8, !tbaa !17
  %11800 = fcmp oeq double %11798, %11799
  br i1 %11800, label %11801, label %11941

11801:                                            ; preds = %11797, %11793
  call void @llvm.lifetime.start.p0(i64 8, ptr %977) #7
  %11802 = load ptr, ptr %948, align 8, !tbaa !5
  %11803 = icmp ne ptr null, %11802
  br i1 %11803, label %11804, label %11818

11804:                                            ; preds = %11801
  %11805 = load double, ptr %974, align 8, !tbaa !17
  %11806 = load double, ptr %973, align 8, !tbaa !17
  %11807 = fcmp olt double %11805, %11806
  br i1 %11807, label %11808, label %11812

11808:                                            ; preds = %11804
  %11809 = load double, ptr %973, align 8, !tbaa !17
  %11810 = load double, ptr %974, align 8, !tbaa !17
  %11811 = fsub double %11809, %11810
  br label %11816

11812:                                            ; preds = %11804
  %11813 = load double, ptr %974, align 8, !tbaa !17
  %11814 = load double, ptr %973, align 8, !tbaa !17
  %11815 = fsub double %11813, %11814
  br label %11816

11816:                                            ; preds = %11812, %11808
  %11817 = phi double [ %11811, %11808 ], [ %11815, %11812 ]
  br label %11819

11818:                                            ; preds = %11801
  br label %11819

11819:                                            ; preds = %11818, %11816
  %11820 = phi double [ %11817, %11816 ], [ 0.000000e+00, %11818 ]
  store double %11820, ptr %977, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %978) #7
  %11821 = load double, ptr %976, align 8, !tbaa !17
  %11822 = fcmp oge double 0.000000e+00, %11821
  br i1 %11822, label %11823, label %11825

11823:                                            ; preds = %11819
  %11824 = load double, ptr %975, align 8, !tbaa !17
  br label %11835

11825:                                            ; preds = %11819
  %11826 = load double, ptr %977, align 8, !tbaa !17
  %11827 = load double, ptr %976, align 8, !tbaa !17
  %11828 = fcmp olt double 0.000000e+00, %11827
  br i1 %11828, label %11829, label %11831

11829:                                            ; preds = %11825
  %11830 = load double, ptr %976, align 8, !tbaa !17
  br label %11832

11831:                                            ; preds = %11825
  br label %11832

11832:                                            ; preds = %11831, %11829
  %11833 = phi double [ %11830, %11829 ], [ 1.000000e+00, %11831 ]
  %11834 = fdiv double %11826, %11833
  br label %11835

11835:                                            ; preds = %11832, %11823
  %11836 = phi double [ %11824, %11823 ], [ %11834, %11832 ]
  store double %11836, ptr %978, align 8, !tbaa !17
  %11837 = load double, ptr %973, align 8, !tbaa !17
  %11838 = load ptr, ptr %9, align 8, !tbaa !5
  %11839 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %11838, i32 0, i32 16
  %11840 = load double, ptr %11839, align 8, !tbaa !21
  %11841 = fcmp olt double %11837, %11840
  br i1 %11841, label %11842, label %11846

11842:                                            ; preds = %11835
  %11843 = load double, ptr %973, align 8, !tbaa !17
  %11844 = load ptr, ptr %9, align 8, !tbaa !5
  %11845 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %11844, i32 0, i32 16
  store double %11843, ptr %11845, align 8, !tbaa !21
  br label %11846

11846:                                            ; preds = %11842, %11835
  %11847 = load double, ptr %973, align 8, !tbaa !17
  %11848 = load ptr, ptr %9, align 8, !tbaa !5
  %11849 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %11848, i32 0, i32 17
  %11850 = load double, ptr %11849, align 8, !tbaa !22
  %11851 = fcmp ogt double %11847, %11850
  br i1 %11851, label %11852, label %11856

11852:                                            ; preds = %11846
  %11853 = load double, ptr %973, align 8, !tbaa !17
  %11854 = load ptr, ptr %9, align 8, !tbaa !5
  %11855 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %11854, i32 0, i32 17
  store double %11853, ptr %11855, align 8, !tbaa !22
  br label %11856

11856:                                            ; preds = %11852, %11846
  %11857 = load ptr, ptr %9, align 8, !tbaa !5
  %11858 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %11857, i32 0, i32 5
  %11859 = load double, ptr %11858, align 8, !tbaa !23
  %11860 = load double, ptr %977, align 8, !tbaa !17
  %11861 = fcmp olt double %11859, %11860
  br i1 %11861, label %11862, label %11878

11862:                                            ; preds = %11856
  %11863 = load double, ptr %977, align 8, !tbaa !17
  %11864 = load ptr, ptr %9, align 8, !tbaa !5
  %11865 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %11864, i32 0, i32 5
  store double %11863, ptr %11865, align 8, !tbaa !23
  %11866 = load double, ptr %974, align 8, !tbaa !17
  %11867 = load ptr, ptr %9, align 8, !tbaa !5
  %11868 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %11867, i32 0, i32 20
  store double %11866, ptr %11868, align 8, !tbaa !24
  %11869 = load double, ptr %973, align 8, !tbaa !17
  %11870 = load ptr, ptr %9, align 8, !tbaa !5
  %11871 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %11870, i32 0, i32 21
  store double %11869, ptr %11871, align 8, !tbaa !25
  %11872 = load i32, ptr %972, align 4, !tbaa !9
  %11873 = load ptr, ptr %9, align 8, !tbaa !5
  %11874 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %11873, i32 0, i32 22
  store i32 %11872, ptr %11874, align 8, !tbaa !26
  %11875 = load i32, ptr %971, align 4, !tbaa !9
  %11876 = load ptr, ptr %9, align 8, !tbaa !5
  %11877 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %11876, i32 0, i32 23
  store i32 %11875, ptr %11877, align 4, !tbaa !27
  br label %11878

11878:                                            ; preds = %11862, %11856
  %11879 = load ptr, ptr %9, align 8, !tbaa !5
  %11880 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %11879, i32 0, i32 6
  %11881 = load double, ptr %11880, align 8, !tbaa !28
  %11882 = load double, ptr %978, align 8, !tbaa !17
  %11883 = fcmp olt double %11881, %11882
  br i1 %11883, label %11884, label %11888

11884:                                            ; preds = %11878
  %11885 = load double, ptr %978, align 8, !tbaa !17
  %11886 = load ptr, ptr %9, align 8, !tbaa !5
  %11887 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %11886, i32 0, i32 6
  store double %11885, ptr %11887, align 8, !tbaa !28
  br label %11888

11888:                                            ; preds = %11884, %11878
  %11889 = load double, ptr %978, align 8, !tbaa !17
  %11890 = load double, ptr %978, align 8, !tbaa !17
  %11891 = fmul double %11889, %11890
  store double %11891, ptr %969, align 8, !tbaa !17
  %11892 = load double, ptr %27, align 8, !tbaa !17
  %11893 = load double, ptr %969, align 8, !tbaa !17
  %11894 = fcmp ogt double %11892, %11893
  br i1 %11894, label %11895, label %11914

11895:                                            ; preds = %11888
  %11896 = load double, ptr %960, align 8, !tbaa !17
  %11897 = load double, ptr %969, align 8, !tbaa !17
  %11898 = fsub double %11897, %11896
  store double %11898, ptr %969, align 8, !tbaa !17
  %11899 = load ptr, ptr %9, align 8, !tbaa !5
  %11900 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %11899, i32 0, i32 8
  %11901 = load double, ptr %11900, align 8, !tbaa !29
  %11902 = load double, ptr %969, align 8, !tbaa !17
  %11903 = fadd double %11901, %11902
  store double %11903, ptr %970, align 8, !tbaa !17
  %11904 = load double, ptr %970, align 8, !tbaa !17
  %11905 = load ptr, ptr %9, align 8, !tbaa !5
  %11906 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %11905, i32 0, i32 8
  %11907 = load double, ptr %11906, align 8, !tbaa !29
  %11908 = fsub double %11904, %11907
  %11909 = load double, ptr %969, align 8, !tbaa !17
  %11910 = fsub double %11908, %11909
  store double %11910, ptr %960, align 8, !tbaa !17
  %11911 = load double, ptr %970, align 8, !tbaa !17
  %11912 = load ptr, ptr %9, align 8, !tbaa !5
  %11913 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %11912, i32 0, i32 8
  store double %11911, ptr %11913, align 8, !tbaa !29
  br label %11914

11914:                                            ; preds = %11895, %11888
  %11915 = load double, ptr %976, align 8, !tbaa !17
  %11916 = call double @libxsmm_kahan_sum(double noundef %11915, ptr noundef %966, ptr noundef %963)
  %11917 = load double, ptr %975, align 8, !tbaa !17
  %11918 = call double @libxsmm_kahan_sum(double noundef %11917, ptr noundef %967, ptr noundef %964)
  %11919 = load double, ptr %977, align 8, !tbaa !17
  %11920 = call double @libxsmm_kahan_sum(double noundef %11919, ptr noundef %968, ptr noundef %965)
  %11921 = load double, ptr %974, align 8, !tbaa !17
  %11922 = load double, ptr %974, align 8, !tbaa !17
  %11923 = fmul double %11921, %11922
  %11924 = call double @libxsmm_kahan_sum(double noundef %11923, ptr noundef %952, ptr noundef %950)
  %11925 = load double, ptr %973, align 8, !tbaa !17
  %11926 = load double, ptr %973, align 8, !tbaa !17
  %11927 = fmul double %11925, %11926
  %11928 = call double @libxsmm_kahan_sum(double noundef %11927, ptr noundef %953, ptr noundef %951)
  %11929 = load double, ptr %977, align 8, !tbaa !17
  %11930 = load double, ptr %977, align 8, !tbaa !17
  %11931 = fmul double %11929, %11930
  store double %11931, ptr %969, align 8, !tbaa !17
  %11932 = load double, ptr %27, align 8, !tbaa !17
  %11933 = load double, ptr %969, align 8, !tbaa !17
  %11934 = fcmp ogt double %11932, %11933
  br i1 %11934, label %11935, label %11940

11935:                                            ; preds = %11914
  %11936 = load double, ptr %969, align 8, !tbaa !17
  %11937 = load ptr, ptr %9, align 8, !tbaa !5
  %11938 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %11937, i32 0, i32 7
  %11939 = call double @libxsmm_kahan_sum(double noundef %11936, ptr noundef %11938, ptr noundef %949)
  br label %11940

11940:                                            ; preds = %11935, %11914
  call void @llvm.lifetime.end.p0(i64 8, ptr %978) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %977) #7
  br label %11965

11941:                                            ; preds = %11797, %11789
  %11942 = load double, ptr %974, align 8, !tbaa !17
  %11943 = load double, ptr %974, align 8, !tbaa !17
  %11944 = fcmp oeq double %11942, %11943
  br i1 %11944, label %11945, label %11949

11945:                                            ; preds = %11941
  %11946 = load double, ptr %27, align 8, !tbaa !17
  %11947 = load double, ptr %976, align 8, !tbaa !17
  %11948 = fcmp ogt double %11946, %11947
  br label %11949

11949:                                            ; preds = %11945, %11941
  %11950 = phi i1 [ false, %11941 ], [ %11948, %11945 ]
  %11951 = zext i1 %11950 to i64
  %11952 = select i1 %11950, i32 1, i32 2
  store i32 %11952, ptr %19, align 4, !tbaa !9
  %11953 = load i32, ptr %972, align 4, !tbaa !9
  %11954 = load ptr, ptr %9, align 8, !tbaa !5
  %11955 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %11954, i32 0, i32 22
  store i32 %11953, ptr %11955, align 8, !tbaa !26
  %11956 = load i32, ptr %971, align 4, !tbaa !9
  %11957 = load ptr, ptr %9, align 8, !tbaa !5
  %11958 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %11957, i32 0, i32 23
  store i32 %11956, ptr %11958, align 4, !tbaa !27
  %11959 = load double, ptr %974, align 8, !tbaa !17
  %11960 = load ptr, ptr %9, align 8, !tbaa !5
  %11961 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %11960, i32 0, i32 20
  store double %11959, ptr %11961, align 8, !tbaa !24
  %11962 = load double, ptr %973, align 8, !tbaa !17
  %11963 = load ptr, ptr %9, align 8, !tbaa !5
  %11964 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %11963, i32 0, i32 21
  store double %11962, ptr %11964, align 8, !tbaa !25
  store i32 222, ptr %60, align 4
  br label %11966

11965:                                            ; preds = %11940
  store i32 0, ptr %60, align 4
  br label %11966

11966:                                            ; preds = %11965, %11949
  call void @llvm.lifetime.end.p0(i64 8, ptr %976) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %975) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %974) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %973) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %972) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %971) #7
  %11967 = load i32, ptr %60, align 4
  switch i32 %11967, label %15542 [
    i32 0, label %11968
    i32 222, label %11972
  ]

11968:                                            ; preds = %11966
  br label %11969

11969:                                            ; preds = %11968
  %11970 = load i32, ptr %962, align 4, !tbaa !9
  %11971 = add nsw i32 %11970, 1
  store i32 %11971, ptr %962, align 4, !tbaa !9
  br label %11717, !llvm.loop !119

11972:                                            ; preds = %11966, %11717
  %11973 = load i32, ptr %19, align 4, !tbaa !9
  %11974 = icmp eq i32 0, %11973
  br i1 %11974, label %11975, label %12006

11975:                                            ; preds = %11972
  %11976 = load double, ptr %966, align 8, !tbaa !17
  %11977 = load ptr, ptr %9, align 8, !tbaa !5
  %11978 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %11977, i32 0, i32 10
  %11979 = call double @libxsmm_kahan_sum(double noundef %11976, ptr noundef %11978, ptr noundef %958)
  %11980 = load double, ptr %967, align 8, !tbaa !17
  %11981 = load ptr, ptr %9, align 8, !tbaa !5
  %11982 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %11981, i32 0, i32 15
  %11983 = call double @libxsmm_kahan_sum(double noundef %11980, ptr noundef %11982, ptr noundef %959)
  %11984 = load ptr, ptr %9, align 8, !tbaa !5
  %11985 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %11984, i32 0, i32 2
  %11986 = load double, ptr %11985, align 8, !tbaa !32
  %11987 = load double, ptr %968, align 8, !tbaa !17
  %11988 = fcmp olt double %11986, %11987
  br i1 %11988, label %11989, label %11993

11989:                                            ; preds = %11975
  %11990 = load double, ptr %968, align 8, !tbaa !17
  %11991 = load ptr, ptr %9, align 8, !tbaa !5
  %11992 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %11991, i32 0, i32 2
  store double %11990, ptr %11992, align 8, !tbaa !32
  br label %11993

11993:                                            ; preds = %11989, %11975
  %11994 = load double, ptr %954, align 8, !tbaa !17
  %11995 = load double, ptr %966, align 8, !tbaa !17
  %11996 = fcmp olt double %11994, %11995
  br i1 %11996, label %11997, label %11999

11997:                                            ; preds = %11993
  %11998 = load double, ptr %966, align 8, !tbaa !17
  store double %11998, ptr %954, align 8, !tbaa !17
  br label %11999

11999:                                            ; preds = %11997, %11993
  %12000 = load double, ptr %955, align 8, !tbaa !17
  %12001 = load double, ptr %967, align 8, !tbaa !17
  %12002 = fcmp olt double %12000, %12001
  br i1 %12002, label %12003, label %12005

12003:                                            ; preds = %11999
  %12004 = load double, ptr %967, align 8, !tbaa !17
  store double %12004, ptr %955, align 8, !tbaa !17
  br label %12005

12005:                                            ; preds = %12003, %11999
  br label %12007

12006:                                            ; preds = %11972
  store i32 219, ptr %60, align 4
  br label %12008

12007:                                            ; preds = %12005
  store i32 0, ptr %60, align 4
  br label %12008

12008:                                            ; preds = %12007, %12006
  call void @llvm.lifetime.end.p0(i64 8, ptr %970) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %969) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %968) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %967) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %966) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %965) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %964) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %963) #7
  %12009 = load i32, ptr %60, align 4
  switch i32 %12009, label %15542 [
    i32 0, label %12010
    i32 219, label %12014
  ]

12010:                                            ; preds = %12008
  br label %12011

12011:                                            ; preds = %12010
  %12012 = load i32, ptr %961, align 4, !tbaa !9
  %12013 = add nsw i32 %12012, 1
  store i32 %12013, ptr %961, align 4, !tbaa !9
  br label %11712, !llvm.loop !120

12014:                                            ; preds = %12008, %11712
  %12015 = load i32, ptr %19, align 4, !tbaa !9
  %12016 = icmp eq i32 0, %12015
  br i1 %12016, label %12017, label %12265

12017:                                            ; preds = %12014
  call void @llvm.lifetime.start.p0(i64 8, ptr %979) #7
  store double 0.000000e+00, ptr %979, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %980) #7
  store double 0.000000e+00, ptr %980, align 8, !tbaa !17
  %12018 = load ptr, ptr %9, align 8, !tbaa !5
  %12019 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %12018, i32 0, i32 14
  %12020 = load double, ptr %12019, align 8, !tbaa !34
  %12021 = fcmp oeq double 0.000000e+00, %12020
  br i1 %12021, label %12022, label %12023

12022:                                            ; preds = %12017
  br label %12024

12023:                                            ; preds = %12017
  call void @__assert_fail(ptr noundef @.str.1, ptr noundef @.str.2, i32 noundef 130, ptr noundef @__PRETTY_FUNCTION__.libxsmm_matdiff) #9
  unreachable

12024:                                            ; preds = %12022
  %12025 = load ptr, ptr %9, align 8, !tbaa !5
  %12026 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %12025, i32 0, i32 19
  %12027 = load double, ptr %12026, align 8, !tbaa !35
  %12028 = fcmp oeq double 0.000000e+00, %12027
  br i1 %12028, label %12029, label %12030

12029:                                            ; preds = %12024
  br label %12031

12030:                                            ; preds = %12024
  call void @__assert_fail(ptr noundef @.str.3, ptr noundef @.str.2, i32 noundef 131, ptr noundef @__PRETTY_FUNCTION__.libxsmm_matdiff) #9
  unreachable

12031:                                            ; preds = %12029
  %12032 = load i64, ptr %24, align 8, !tbaa !12
  %12033 = icmp ne i64 0, %12032
  br i1 %12033, label %12034, label %12051

12034:                                            ; preds = %12031
  %12035 = load ptr, ptr %9, align 8, !tbaa !5
  %12036 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %12035, i32 0, i32 10
  %12037 = load double, ptr %12036, align 8, !tbaa !36
  %12038 = load i64, ptr %24, align 8, !tbaa !12
  %12039 = uitofp i64 %12038 to double
  %12040 = fdiv double %12037, %12039
  %12041 = load ptr, ptr %9, align 8, !tbaa !5
  %12042 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %12041, i32 0, i32 13
  store double %12040, ptr %12042, align 8, !tbaa !37
  %12043 = load ptr, ptr %9, align 8, !tbaa !5
  %12044 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %12043, i32 0, i32 15
  %12045 = load double, ptr %12044, align 8, !tbaa !38
  %12046 = load i64, ptr %24, align 8, !tbaa !12
  %12047 = uitofp i64 %12046 to double
  %12048 = fdiv double %12045, %12047
  %12049 = load ptr, ptr %9, align 8, !tbaa !5
  %12050 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %12049, i32 0, i32 18
  store double %12048, ptr %12050, align 8, !tbaa !39
  br label %12051

12051:                                            ; preds = %12034, %12031
  %12052 = load double, ptr %954, align 8, !tbaa !17
  %12053 = fcmp oge double 0.000000e+00, %12052
  br i1 %12053, label %12054, label %12056

12054:                                            ; preds = %12051
  %12055 = load double, ptr %955, align 8, !tbaa !17
  br label %12068

12056:                                            ; preds = %12051
  %12057 = load ptr, ptr %9, align 8, !tbaa !5
  %12058 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %12057, i32 0, i32 2
  %12059 = load double, ptr %12058, align 8, !tbaa !32
  %12060 = load double, ptr %954, align 8, !tbaa !17
  %12061 = fcmp olt double 0.000000e+00, %12060
  br i1 %12061, label %12062, label %12064

12062:                                            ; preds = %12056
  %12063 = load double, ptr %954, align 8, !tbaa !17
  br label %12065

12064:                                            ; preds = %12056
  br label %12065

12065:                                            ; preds = %12064, %12062
  %12066 = phi double [ %12063, %12062 ], [ 1.000000e+00, %12064 ]
  %12067 = fdiv double %12059, %12066
  br label %12068

12068:                                            ; preds = %12065, %12054
  %12069 = phi double [ %12055, %12054 ], [ %12067, %12065 ]
  %12070 = load ptr, ptr %9, align 8, !tbaa !5
  %12071 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %12070, i32 0, i32 3
  store double %12069, ptr %12071, align 8, !tbaa !40
  %12072 = load double, ptr %952, align 8, !tbaa !17
  %12073 = fcmp oge double 0.000000e+00, %12072
  br i1 %12073, label %12074, label %12092

12074:                                            ; preds = %12068
  %12075 = load double, ptr %953, align 8, !tbaa !17
  %12076 = load double, ptr %953, align 8, !tbaa !17
  %12077 = fmul double %12075, %12076
  %12078 = load ptr, ptr %9, align 8, !tbaa !5
  %12079 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %12078, i32 0, i32 7
  %12080 = load double, ptr %12079, align 8, !tbaa !41
  %12081 = fcmp olt double %12077, %12080
  br i1 %12081, label %12082, label %12086

12082:                                            ; preds = %12074
  %12083 = load double, ptr %953, align 8, !tbaa !17
  %12084 = load double, ptr %953, align 8, !tbaa !17
  %12085 = fmul double %12083, %12084
  br label %12090

12086:                                            ; preds = %12074
  %12087 = load ptr, ptr %9, align 8, !tbaa !5
  %12088 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %12087, i32 0, i32 7
  %12089 = load double, ptr %12088, align 8, !tbaa !41
  br label %12090

12090:                                            ; preds = %12086, %12082
  %12091 = phi double [ %12085, %12082 ], [ %12089, %12086 ]
  br label %12104

12092:                                            ; preds = %12068
  %12093 = load ptr, ptr %9, align 8, !tbaa !5
  %12094 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %12093, i32 0, i32 7
  %12095 = load double, ptr %12094, align 8, !tbaa !41
  %12096 = load double, ptr %952, align 8, !tbaa !17
  %12097 = fcmp olt double 0.000000e+00, %12096
  br i1 %12097, label %12098, label %12100

12098:                                            ; preds = %12092
  %12099 = load double, ptr %952, align 8, !tbaa !17
  br label %12101

12100:                                            ; preds = %12092
  br label %12101

12101:                                            ; preds = %12100, %12098
  %12102 = phi double [ %12099, %12098 ], [ 1.000000e+00, %12100 ]
  %12103 = fdiv double %12095, %12102
  br label %12104

12104:                                            ; preds = %12101, %12090
  %12105 = phi double [ %12091, %12090 ], [ %12103, %12101 ]
  %12106 = load ptr, ptr %9, align 8, !tbaa !5
  %12107 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %12106, i32 0, i32 4
  store double %12105, ptr %12107, align 8, !tbaa !42
  store i32 0, ptr %962, align 4, !tbaa !9
  br label %12108

12108:                                            ; preds = %12239, %12104
  %12109 = load i32, ptr %962, align 4, !tbaa !9
  %12110 = load i32, ptr %25, align 4, !tbaa !9
  %12111 = icmp slt i32 %12109, %12110
  br i1 %12111, label %12112, label %12242

12112:                                            ; preds = %12108
  call void @llvm.lifetime.start.p0(i64 8, ptr %981) #7
  store double 0.000000e+00, ptr %981, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %982) #7
  store double 0.000000e+00, ptr %982, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %983) #7
  store double 0.000000e+00, ptr %983, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %984) #7
  store double 0.000000e+00, ptr %984, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %985) #7
  store double 0.000000e+00, ptr %985, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %986) #7
  store double 0.000000e+00, ptr %986, align 8, !tbaa !17
  store i32 0, ptr %961, align 4, !tbaa !9
  br label %12113

12113:                                            ; preds = %12213, %12112
  %12114 = load i32, ptr %961, align 4, !tbaa !9
  %12115 = load i32, ptr %26, align 4, !tbaa !9
  %12116 = icmp slt i32 %12114, %12115
  br i1 %12116, label %12117, label %12216

12117:                                            ; preds = %12113
  call void @llvm.lifetime.start.p0(i64 4, ptr %987) #7
  %12118 = load i32, ptr %961, align 4, !tbaa !9
  store i32 %12118, ptr %987, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %988) #7
  %12119 = load i32, ptr %962, align 4, !tbaa !9
  store i32 %12119, ptr %988, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %989) #7
  %12120 = load ptr, ptr %947, align 8, !tbaa !5
  %12121 = load i32, ptr %987, align 4, !tbaa !9
  %12122 = load i32, ptr %20, align 4, !tbaa !9
  %12123 = mul nsw i32 %12121, %12122
  %12124 = load i32, ptr %988, align 4, !tbaa !9
  %12125 = add nsw i32 %12123, %12124
  %12126 = sext i32 %12125 to i64
  %12127 = getelementptr inbounds i16, ptr %12120, i64 %12126
  %12128 = load i16, ptr %12127, align 2, !tbaa !67
  %12129 = call float @libxsmm_convert_bf16_to_f32(i16 noundef zeroext %12128)
  %12130 = fpext float %12129 to double
  store double %12130, ptr %989, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %990) #7
  %12131 = load ptr, ptr %948, align 8, !tbaa !5
  %12132 = icmp ne ptr null, %12131
  br i1 %12132, label %12133, label %12144

12133:                                            ; preds = %12117
  %12134 = load ptr, ptr %948, align 8, !tbaa !5
  %12135 = load i32, ptr %987, align 4, !tbaa !9
  %12136 = load i32, ptr %21, align 4, !tbaa !9
  %12137 = mul nsw i32 %12135, %12136
  %12138 = load i32, ptr %988, align 4, !tbaa !9
  %12139 = add nsw i32 %12137, %12138
  %12140 = sext i32 %12139 to i64
  %12141 = getelementptr inbounds i16, ptr %12134, i64 %12140
  %12142 = load i16, ptr %12141, align 2, !tbaa !67
  %12143 = call float @libxsmm_convert_bf16_to_f32(i16 noundef zeroext %12142)
  br label %12145

12144:                                            ; preds = %12117
  br label %12145

12145:                                            ; preds = %12144, %12133
  %12146 = phi float [ %12143, %12133 ], [ 0.000000e+00, %12144 ]
  %12147 = fpext float %12146 to double
  store double %12147, ptr %990, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %991) #7
  %12148 = load ptr, ptr %948, align 8, !tbaa !5
  %12149 = icmp ne ptr null, %12148
  br i1 %12149, label %12150, label %12164

12150:                                            ; preds = %12145
  %12151 = load double, ptr %989, align 8, !tbaa !17
  %12152 = load double, ptr %990, align 8, !tbaa !17
  %12153 = fcmp olt double %12151, %12152
  br i1 %12153, label %12154, label %12158

12154:                                            ; preds = %12150
  %12155 = load double, ptr %990, align 8, !tbaa !17
  %12156 = load double, ptr %989, align 8, !tbaa !17
  %12157 = fsub double %12155, %12156
  br label %12162

12158:                                            ; preds = %12150
  %12159 = load double, ptr %989, align 8, !tbaa !17
  %12160 = load double, ptr %990, align 8, !tbaa !17
  %12161 = fsub double %12159, %12160
  br label %12162

12162:                                            ; preds = %12158, %12154
  %12163 = phi double [ %12157, %12154 ], [ %12161, %12158 ]
  br label %12165

12164:                                            ; preds = %12145
  br label %12165

12165:                                            ; preds = %12164, %12162
  %12166 = phi double [ %12163, %12162 ], [ 0.000000e+00, %12164 ]
  store double %12166, ptr %991, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %992) #7
  %12167 = load double, ptr %989, align 8, !tbaa !17
  %12168 = load ptr, ptr %9, align 8, !tbaa !5
  %12169 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %12168, i32 0, i32 13
  %12170 = load double, ptr %12169, align 8, !tbaa !37
  %12171 = fsub double %12167, %12170
  store double %12171, ptr %992, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %993) #7
  %12172 = load double, ptr %990, align 8, !tbaa !17
  %12173 = load ptr, ptr %9, align 8, !tbaa !5
  %12174 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %12173, i32 0, i32 18
  %12175 = load double, ptr %12174, align 8, !tbaa !39
  %12176 = fsub double %12172, %12175
  store double %12176, ptr %993, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %994) #7
  %12177 = load double, ptr %989, align 8, !tbaa !17
  %12178 = fcmp ole double 0.000000e+00, %12177
  br i1 %12178, label %12179, label %12181

12179:                                            ; preds = %12165
  %12180 = load double, ptr %989, align 8, !tbaa !17
  br label %12184

12181:                                            ; preds = %12165
  %12182 = load double, ptr %989, align 8, !tbaa !17
  %12183 = fneg double %12182
  br label %12184

12184:                                            ; preds = %12181, %12179
  %12185 = phi double [ %12180, %12179 ], [ %12183, %12181 ]
  store double %12185, ptr %994, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %995) #7
  %12186 = load double, ptr %990, align 8, !tbaa !17
  %12187 = fcmp ole double 0.000000e+00, %12186
  br i1 %12187, label %12188, label %12190

12188:                                            ; preds = %12184
  %12189 = load double, ptr %990, align 8, !tbaa !17
  br label %12193

12190:                                            ; preds = %12184
  %12191 = load double, ptr %990, align 8, !tbaa !17
  %12192 = fneg double %12191
  br label %12193

12193:                                            ; preds = %12190, %12188
  %12194 = phi double [ %12189, %12188 ], [ %12192, %12190 ]
  store double %12194, ptr %995, align 8, !tbaa !17
  %12195 = load double, ptr %992, align 8, !tbaa !17
  %12196 = load double, ptr %992, align 8, !tbaa !17
  %12197 = fmul double %12195, %12196
  %12198 = load ptr, ptr %9, align 8, !tbaa !5
  %12199 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %12198, i32 0, i32 14
  %12200 = call double @libxsmm_kahan_sum(double noundef %12197, ptr noundef %12199, ptr noundef %979)
  %12201 = load double, ptr %993, align 8, !tbaa !17
  %12202 = load double, ptr %993, align 8, !tbaa !17
  %12203 = fmul double %12201, %12202
  %12204 = load ptr, ptr %9, align 8, !tbaa !5
  %12205 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %12204, i32 0, i32 19
  %12206 = call double @libxsmm_kahan_sum(double noundef %12203, ptr noundef %12205, ptr noundef %980)
  %12207 = load double, ptr %994, align 8, !tbaa !17
  %12208 = call double @libxsmm_kahan_sum(double noundef %12207, ptr noundef %984, ptr noundef %981)
  %12209 = load double, ptr %995, align 8, !tbaa !17
  %12210 = call double @libxsmm_kahan_sum(double noundef %12209, ptr noundef %985, ptr noundef %982)
  %12211 = load double, ptr %991, align 8, !tbaa !17
  %12212 = call double @libxsmm_kahan_sum(double noundef %12211, ptr noundef %986, ptr noundef %983)
  call void @llvm.lifetime.end.p0(i64 8, ptr %995) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %994) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %993) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %992) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %991) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %990) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %989) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %988) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %987) #7
  br label %12213

12213:                                            ; preds = %12193
  %12214 = load i32, ptr %961, align 4, !tbaa !9
  %12215 = add nsw i32 %12214, 1
  store i32 %12215, ptr %961, align 4, !tbaa !9
  br label %12113, !llvm.loop !121

12216:                                            ; preds = %12113
  %12217 = load ptr, ptr %9, align 8, !tbaa !5
  %12218 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %12217, i32 0, i32 0
  %12219 = load double, ptr %12218, align 8, !tbaa !44
  %12220 = load double, ptr %986, align 8, !tbaa !17
  %12221 = fcmp olt double %12219, %12220
  br i1 %12221, label %12222, label %12226

12222:                                            ; preds = %12216
  %12223 = load double, ptr %986, align 8, !tbaa !17
  %12224 = load ptr, ptr %9, align 8, !tbaa !5
  %12225 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %12224, i32 0, i32 0
  store double %12223, ptr %12225, align 8, !tbaa !44
  br label %12226

12226:                                            ; preds = %12222, %12216
  %12227 = load double, ptr %956, align 8, !tbaa !17
  %12228 = load double, ptr %984, align 8, !tbaa !17
  %12229 = fcmp olt double %12227, %12228
  br i1 %12229, label %12230, label %12232

12230:                                            ; preds = %12226
  %12231 = load double, ptr %984, align 8, !tbaa !17
  store double %12231, ptr %956, align 8, !tbaa !17
  br label %12232

12232:                                            ; preds = %12230, %12226
  %12233 = load double, ptr %957, align 8, !tbaa !17
  %12234 = load double, ptr %985, align 8, !tbaa !17
  %12235 = fcmp olt double %12233, %12234
  br i1 %12235, label %12236, label %12238

12236:                                            ; preds = %12232
  %12237 = load double, ptr %985, align 8, !tbaa !17
  store double %12237, ptr %957, align 8, !tbaa !17
  br label %12238

12238:                                            ; preds = %12236, %12232
  call void @llvm.lifetime.end.p0(i64 8, ptr %986) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %985) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %984) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %983) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %982) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %981) #7
  br label %12239

12239:                                            ; preds = %12238
  %12240 = load i32, ptr %962, align 4, !tbaa !9
  %12241 = add nsw i32 %12240, 1
  store i32 %12241, ptr %962, align 4, !tbaa !9
  br label %12108, !llvm.loop !122

12242:                                            ; preds = %12108
  %12243 = load double, ptr %956, align 8, !tbaa !17
  %12244 = fcmp oge double 0.000000e+00, %12243
  br i1 %12244, label %12245, label %12249

12245:                                            ; preds = %12242
  %12246 = load ptr, ptr %9, align 8, !tbaa !5
  %12247 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %12246, i32 0, i32 0
  %12248 = load double, ptr %12247, align 8, !tbaa !44
  br label %12261

12249:                                            ; preds = %12242
  %12250 = load ptr, ptr %9, align 8, !tbaa !5
  %12251 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %12250, i32 0, i32 0
  %12252 = load double, ptr %12251, align 8, !tbaa !44
  %12253 = load double, ptr %956, align 8, !tbaa !17
  %12254 = fcmp olt double 0.000000e+00, %12253
  br i1 %12254, label %12255, label %12257

12255:                                            ; preds = %12249
  %12256 = load double, ptr %956, align 8, !tbaa !17
  br label %12258

12257:                                            ; preds = %12249
  br label %12258

12258:                                            ; preds = %12257, %12255
  %12259 = phi double [ %12256, %12255 ], [ 1.000000e+00, %12257 ]
  %12260 = fdiv double %12252, %12259
  br label %12261

12261:                                            ; preds = %12258, %12245
  %12262 = phi double [ %12248, %12245 ], [ %12260, %12258 ]
  %12263 = load ptr, ptr %9, align 8, !tbaa !5
  %12264 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %12263, i32 0, i32 1
  store double %12262, ptr %12264, align 8, !tbaa !46
  call void @llvm.lifetime.end.p0(i64 8, ptr %980) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %979) #7
  br label %12265

12265:                                            ; preds = %12261, %12014
  call void @llvm.lifetime.end.p0(i64 4, ptr %962) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %961) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %960) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %959) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %958) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %957) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %956) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %955) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %954) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %953) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %952) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %951) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %950) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %949) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %948) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %947) #7
  br label %12866

12266:                                            ; preds = %11706
  call void @llvm.lifetime.start.p0(i64 8, ptr %996) #7
  %12267 = load ptr, ptr %13, align 8, !tbaa !5
  store ptr %12267, ptr %996, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %997) #7
  %12268 = load ptr, ptr %14, align 8, !tbaa !5
  store ptr %12268, ptr %997, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %998) #7
  store double 0.000000e+00, ptr %998, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %999) #7
  store double 0.000000e+00, ptr %999, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1000) #7
  store double 0.000000e+00, ptr %1000, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1001) #7
  store double 0.000000e+00, ptr %1001, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1002) #7
  store double 0.000000e+00, ptr %1002, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1003) #7
  store double 0.000000e+00, ptr %1003, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1004) #7
  store double 0.000000e+00, ptr %1004, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1005) #7
  store double 0.000000e+00, ptr %1005, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1006) #7
  store double 0.000000e+00, ptr %1006, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1007) #7
  store double 0.000000e+00, ptr %1007, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1008) #7
  store double 0.000000e+00, ptr %1008, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1009) #7
  store double 0.000000e+00, ptr %1009, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1010) #7
  %12269 = load i32, ptr %25, align 4, !tbaa !9
  %12270 = sext i32 %12269 to i64
  %12271 = load i32, ptr %26, align 4, !tbaa !9
  %12272 = sext i32 %12271 to i64
  %12273 = mul i64 %12270, %12272
  store i64 %12273, ptr %1010, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 8, ptr %1011) #7
  %12274 = load i64, ptr %1010, align 8, !tbaa !12
  %12275 = call i64 @libxsmm_coprime2(i64 noundef %12274)
  store i64 %12275, ptr %1011, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 4, ptr %1012) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %1013) #7
  store i32 0, ptr %1012, align 4, !tbaa !9
  br label %12276

12276:                                            ; preds = %12593, %12266
  %12277 = load i32, ptr %1012, align 4, !tbaa !9
  %12278 = load i32, ptr %26, align 4, !tbaa !9
  %12279 = icmp slt i32 %12277, %12278
  br i1 %12279, label %12280, label %12596

12280:                                            ; preds = %12276
  call void @llvm.lifetime.start.p0(i64 8, ptr %1014) #7
  store double 0.000000e+00, ptr %1014, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1015) #7
  store double 0.000000e+00, ptr %1015, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1016) #7
  store double 0.000000e+00, ptr %1016, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1017) #7
  store double 0.000000e+00, ptr %1017, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1018) #7
  store double 0.000000e+00, ptr %1018, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1019) #7
  store double 0.000000e+00, ptr %1019, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1020) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %1021) #7
  store i32 0, ptr %1013, align 4, !tbaa !9
  br label %12281

12281:                                            ; preds = %12551, %12280
  %12282 = load i32, ptr %1013, align 4, !tbaa !9
  %12283 = load i32, ptr %25, align 4, !tbaa !9
  %12284 = icmp slt i32 %12282, %12283
  br i1 %12284, label %12285, label %12554

12285:                                            ; preds = %12281
  call void @llvm.lifetime.start.p0(i64 8, ptr %1022) #7
  %12286 = load i64, ptr %1011, align 8, !tbaa !12
  %12287 = load i32, ptr %1012, align 4, !tbaa !9
  %12288 = load i32, ptr %25, align 4, !tbaa !9
  %12289 = mul nsw i32 %12287, %12288
  %12290 = load i32, ptr %1013, align 4, !tbaa !9
  %12291 = add nsw i32 %12289, %12290
  %12292 = sext i32 %12291 to i64
  %12293 = mul i64 %12286, %12292
  %12294 = load i64, ptr %1010, align 8, !tbaa !12
  %12295 = urem i64 %12293, %12294
  store i64 %12295, ptr %1022, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 4, ptr %1023) #7
  %12296 = load i64, ptr %1022, align 8, !tbaa !12
  %12297 = load i32, ptr %25, align 4, !tbaa !9
  %12298 = sext i32 %12297 to i64
  %12299 = udiv i64 %12296, %12298
  %12300 = trunc i64 %12299 to i32
  store i32 %12300, ptr %1023, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %1024) #7
  %12301 = load i64, ptr %1022, align 8, !tbaa !12
  %12302 = load i32, ptr %25, align 4, !tbaa !9
  %12303 = sext i32 %12302 to i64
  %12304 = urem i64 %12301, %12303
  %12305 = trunc i64 %12304 to i32
  store i32 %12305, ptr %1024, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %1025) #7
  %12306 = load ptr, ptr %997, align 8, !tbaa !5
  %12307 = icmp ne ptr null, %12306
  br i1 %12307, label %12308, label %12319

12308:                                            ; preds = %12285
  %12309 = load ptr, ptr %997, align 8, !tbaa !5
  %12310 = load i32, ptr %1023, align 4, !tbaa !9
  %12311 = load i32, ptr %21, align 4, !tbaa !9
  %12312 = mul nsw i32 %12310, %12311
  %12313 = load i32, ptr %1024, align 4, !tbaa !9
  %12314 = add nsw i32 %12312, %12313
  %12315 = sext i32 %12314 to i64
  %12316 = getelementptr inbounds i16, ptr %12309, i64 %12315
  %12317 = load i16, ptr %12316, align 2, !tbaa !67
  %12318 = call float @libxsmm_convert_bf16_to_f32(i16 noundef zeroext %12317)
  br label %12320

12319:                                            ; preds = %12285
  br label %12320

12320:                                            ; preds = %12319, %12308
  %12321 = phi float [ %12318, %12308 ], [ 0.000000e+00, %12319 ]
  %12322 = fpext float %12321 to double
  store double %12322, ptr %1025, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1026) #7
  %12323 = load ptr, ptr %996, align 8, !tbaa !5
  %12324 = load i32, ptr %1023, align 4, !tbaa !9
  %12325 = load i32, ptr %20, align 4, !tbaa !9
  %12326 = mul nsw i32 %12324, %12325
  %12327 = load i32, ptr %1024, align 4, !tbaa !9
  %12328 = add nsw i32 %12326, %12327
  %12329 = sext i32 %12328 to i64
  %12330 = getelementptr inbounds i16, ptr %12323, i64 %12329
  %12331 = load i16, ptr %12330, align 2, !tbaa !67
  %12332 = call float @libxsmm_convert_bf16_to_f32(i16 noundef zeroext %12331)
  %12333 = fpext float %12332 to double
  store double %12333, ptr %1026, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1027) #7
  %12334 = load double, ptr %1025, align 8, !tbaa !17
  %12335 = fcmp ole double 0.000000e+00, %12334
  br i1 %12335, label %12336, label %12338

12336:                                            ; preds = %12320
  %12337 = load double, ptr %1025, align 8, !tbaa !17
  br label %12341

12338:                                            ; preds = %12320
  %12339 = load double, ptr %1025, align 8, !tbaa !17
  %12340 = fneg double %12339
  br label %12341

12341:                                            ; preds = %12338, %12336
  %12342 = phi double [ %12337, %12336 ], [ %12340, %12338 ]
  store double %12342, ptr %1027, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1028) #7
  %12343 = load double, ptr %1026, align 8, !tbaa !17
  %12344 = fcmp ole double 0.000000e+00, %12343
  br i1 %12344, label %12345, label %12347

12345:                                            ; preds = %12341
  %12346 = load double, ptr %1026, align 8, !tbaa !17
  br label %12350

12347:                                            ; preds = %12341
  %12348 = load double, ptr %1026, align 8, !tbaa !17
  %12349 = fneg double %12348
  br label %12350

12350:                                            ; preds = %12347, %12345
  %12351 = phi double [ %12346, %12345 ], [ %12349, %12347 ]
  store double %12351, ptr %1028, align 8, !tbaa !17
  %12352 = load double, ptr %1026, align 8, !tbaa !17
  %12353 = load ptr, ptr %9, align 8, !tbaa !5
  %12354 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %12353, i32 0, i32 11
  %12355 = load double, ptr %12354, align 8, !tbaa !14
  %12356 = fcmp olt double %12352, %12355
  br i1 %12356, label %12357, label %12361

12357:                                            ; preds = %12350
  %12358 = load double, ptr %1026, align 8, !tbaa !17
  %12359 = load ptr, ptr %9, align 8, !tbaa !5
  %12360 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %12359, i32 0, i32 11
  store double %12358, ptr %12360, align 8, !tbaa !14
  br label %12361

12361:                                            ; preds = %12357, %12350
  %12362 = load double, ptr %1026, align 8, !tbaa !17
  %12363 = load ptr, ptr %9, align 8, !tbaa !5
  %12364 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %12363, i32 0, i32 12
  %12365 = load double, ptr %12364, align 8, !tbaa !20
  %12366 = fcmp ogt double %12362, %12365
  br i1 %12366, label %12367, label %12371

12367:                                            ; preds = %12361
  %12368 = load double, ptr %1026, align 8, !tbaa !17
  %12369 = load ptr, ptr %9, align 8, !tbaa !5
  %12370 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %12369, i32 0, i32 12
  store double %12368, ptr %12370, align 8, !tbaa !20
  br label %12371

12371:                                            ; preds = %12367, %12361
  %12372 = load double, ptr %1025, align 8, !tbaa !17
  %12373 = load double, ptr %1025, align 8, !tbaa !17
  %12374 = fcmp oeq double %12372, %12373
  br i1 %12374, label %12375, label %12523

12375:                                            ; preds = %12371
  %12376 = load double, ptr %27, align 8, !tbaa !17
  %12377 = load double, ptr %1027, align 8, !tbaa !17
  %12378 = fcmp ogt double %12376, %12377
  br i1 %12378, label %12383, label %12379

12379:                                            ; preds = %12375
  %12380 = load double, ptr %1025, align 8, !tbaa !17
  %12381 = load double, ptr %1026, align 8, !tbaa !17
  %12382 = fcmp oeq double %12380, %12381
  br i1 %12382, label %12383, label %12523

12383:                                            ; preds = %12379, %12375
  call void @llvm.lifetime.start.p0(i64 8, ptr %1029) #7
  %12384 = load ptr, ptr %997, align 8, !tbaa !5
  %12385 = icmp ne ptr null, %12384
  br i1 %12385, label %12386, label %12400

12386:                                            ; preds = %12383
  %12387 = load double, ptr %1026, align 8, !tbaa !17
  %12388 = load double, ptr %1025, align 8, !tbaa !17
  %12389 = fcmp olt double %12387, %12388
  br i1 %12389, label %12390, label %12394

12390:                                            ; preds = %12386
  %12391 = load double, ptr %1025, align 8, !tbaa !17
  %12392 = load double, ptr %1026, align 8, !tbaa !17
  %12393 = fsub double %12391, %12392
  br label %12398

12394:                                            ; preds = %12386
  %12395 = load double, ptr %1026, align 8, !tbaa !17
  %12396 = load double, ptr %1025, align 8, !tbaa !17
  %12397 = fsub double %12395, %12396
  br label %12398

12398:                                            ; preds = %12394, %12390
  %12399 = phi double [ %12393, %12390 ], [ %12397, %12394 ]
  br label %12401

12400:                                            ; preds = %12383
  br label %12401

12401:                                            ; preds = %12400, %12398
  %12402 = phi double [ %12399, %12398 ], [ 0.000000e+00, %12400 ]
  store double %12402, ptr %1029, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1030) #7
  %12403 = load double, ptr %1028, align 8, !tbaa !17
  %12404 = fcmp oge double 0.000000e+00, %12403
  br i1 %12404, label %12405, label %12407

12405:                                            ; preds = %12401
  %12406 = load double, ptr %1027, align 8, !tbaa !17
  br label %12417

12407:                                            ; preds = %12401
  %12408 = load double, ptr %1029, align 8, !tbaa !17
  %12409 = load double, ptr %1028, align 8, !tbaa !17
  %12410 = fcmp olt double 0.000000e+00, %12409
  br i1 %12410, label %12411, label %12413

12411:                                            ; preds = %12407
  %12412 = load double, ptr %1028, align 8, !tbaa !17
  br label %12414

12413:                                            ; preds = %12407
  br label %12414

12414:                                            ; preds = %12413, %12411
  %12415 = phi double [ %12412, %12411 ], [ 1.000000e+00, %12413 ]
  %12416 = fdiv double %12408, %12415
  br label %12417

12417:                                            ; preds = %12414, %12405
  %12418 = phi double [ %12406, %12405 ], [ %12416, %12414 ]
  store double %12418, ptr %1030, align 8, !tbaa !17
  %12419 = load double, ptr %1025, align 8, !tbaa !17
  %12420 = load ptr, ptr %9, align 8, !tbaa !5
  %12421 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %12420, i32 0, i32 16
  %12422 = load double, ptr %12421, align 8, !tbaa !21
  %12423 = fcmp olt double %12419, %12422
  br i1 %12423, label %12424, label %12428

12424:                                            ; preds = %12417
  %12425 = load double, ptr %1025, align 8, !tbaa !17
  %12426 = load ptr, ptr %9, align 8, !tbaa !5
  %12427 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %12426, i32 0, i32 16
  store double %12425, ptr %12427, align 8, !tbaa !21
  br label %12428

12428:                                            ; preds = %12424, %12417
  %12429 = load double, ptr %1025, align 8, !tbaa !17
  %12430 = load ptr, ptr %9, align 8, !tbaa !5
  %12431 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %12430, i32 0, i32 17
  %12432 = load double, ptr %12431, align 8, !tbaa !22
  %12433 = fcmp ogt double %12429, %12432
  br i1 %12433, label %12434, label %12438

12434:                                            ; preds = %12428
  %12435 = load double, ptr %1025, align 8, !tbaa !17
  %12436 = load ptr, ptr %9, align 8, !tbaa !5
  %12437 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %12436, i32 0, i32 17
  store double %12435, ptr %12437, align 8, !tbaa !22
  br label %12438

12438:                                            ; preds = %12434, %12428
  %12439 = load ptr, ptr %9, align 8, !tbaa !5
  %12440 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %12439, i32 0, i32 5
  %12441 = load double, ptr %12440, align 8, !tbaa !23
  %12442 = load double, ptr %1029, align 8, !tbaa !17
  %12443 = fcmp olt double %12441, %12442
  br i1 %12443, label %12444, label %12460

12444:                                            ; preds = %12438
  %12445 = load double, ptr %1029, align 8, !tbaa !17
  %12446 = load ptr, ptr %9, align 8, !tbaa !5
  %12447 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %12446, i32 0, i32 5
  store double %12445, ptr %12447, align 8, !tbaa !23
  %12448 = load double, ptr %1026, align 8, !tbaa !17
  %12449 = load ptr, ptr %9, align 8, !tbaa !5
  %12450 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %12449, i32 0, i32 20
  store double %12448, ptr %12450, align 8, !tbaa !24
  %12451 = load double, ptr %1025, align 8, !tbaa !17
  %12452 = load ptr, ptr %9, align 8, !tbaa !5
  %12453 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %12452, i32 0, i32 21
  store double %12451, ptr %12453, align 8, !tbaa !25
  %12454 = load i32, ptr %1024, align 4, !tbaa !9
  %12455 = load ptr, ptr %9, align 8, !tbaa !5
  %12456 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %12455, i32 0, i32 22
  store i32 %12454, ptr %12456, align 8, !tbaa !26
  %12457 = load i32, ptr %1023, align 4, !tbaa !9
  %12458 = load ptr, ptr %9, align 8, !tbaa !5
  %12459 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %12458, i32 0, i32 23
  store i32 %12457, ptr %12459, align 4, !tbaa !27
  br label %12460

12460:                                            ; preds = %12444, %12438
  %12461 = load ptr, ptr %9, align 8, !tbaa !5
  %12462 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %12461, i32 0, i32 6
  %12463 = load double, ptr %12462, align 8, !tbaa !28
  %12464 = load double, ptr %1030, align 8, !tbaa !17
  %12465 = fcmp olt double %12463, %12464
  br i1 %12465, label %12466, label %12470

12466:                                            ; preds = %12460
  %12467 = load double, ptr %1030, align 8, !tbaa !17
  %12468 = load ptr, ptr %9, align 8, !tbaa !5
  %12469 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %12468, i32 0, i32 6
  store double %12467, ptr %12469, align 8, !tbaa !28
  br label %12470

12470:                                            ; preds = %12466, %12460
  %12471 = load double, ptr %1030, align 8, !tbaa !17
  %12472 = load double, ptr %1030, align 8, !tbaa !17
  %12473 = fmul double %12471, %12472
  store double %12473, ptr %1020, align 8, !tbaa !17
  %12474 = load double, ptr %27, align 8, !tbaa !17
  %12475 = load double, ptr %1020, align 8, !tbaa !17
  %12476 = fcmp ogt double %12474, %12475
  br i1 %12476, label %12477, label %12496

12477:                                            ; preds = %12470
  %12478 = load double, ptr %1009, align 8, !tbaa !17
  %12479 = load double, ptr %1020, align 8, !tbaa !17
  %12480 = fsub double %12479, %12478
  store double %12480, ptr %1020, align 8, !tbaa !17
  %12481 = load ptr, ptr %9, align 8, !tbaa !5
  %12482 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %12481, i32 0, i32 8
  %12483 = load double, ptr %12482, align 8, !tbaa !29
  %12484 = load double, ptr %1020, align 8, !tbaa !17
  %12485 = fadd double %12483, %12484
  store double %12485, ptr %1021, align 8, !tbaa !17
  %12486 = load double, ptr %1021, align 8, !tbaa !17
  %12487 = load ptr, ptr %9, align 8, !tbaa !5
  %12488 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %12487, i32 0, i32 8
  %12489 = load double, ptr %12488, align 8, !tbaa !29
  %12490 = fsub double %12486, %12489
  %12491 = load double, ptr %1020, align 8, !tbaa !17
  %12492 = fsub double %12490, %12491
  store double %12492, ptr %1009, align 8, !tbaa !17
  %12493 = load double, ptr %1021, align 8, !tbaa !17
  %12494 = load ptr, ptr %9, align 8, !tbaa !5
  %12495 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %12494, i32 0, i32 8
  store double %12493, ptr %12495, align 8, !tbaa !29
  br label %12496

12496:                                            ; preds = %12477, %12470
  %12497 = load double, ptr %1028, align 8, !tbaa !17
  %12498 = call double @libxsmm_kahan_sum(double noundef %12497, ptr noundef %1017, ptr noundef %1014)
  %12499 = load double, ptr %1027, align 8, !tbaa !17
  %12500 = call double @libxsmm_kahan_sum(double noundef %12499, ptr noundef %1018, ptr noundef %1015)
  %12501 = load double, ptr %1029, align 8, !tbaa !17
  %12502 = call double @libxsmm_kahan_sum(double noundef %12501, ptr noundef %1019, ptr noundef %1016)
  %12503 = load double, ptr %1026, align 8, !tbaa !17
  %12504 = load double, ptr %1026, align 8, !tbaa !17
  %12505 = fmul double %12503, %12504
  %12506 = call double @libxsmm_kahan_sum(double noundef %12505, ptr noundef %1001, ptr noundef %999)
  %12507 = load double, ptr %1025, align 8, !tbaa !17
  %12508 = load double, ptr %1025, align 8, !tbaa !17
  %12509 = fmul double %12507, %12508
  %12510 = call double @libxsmm_kahan_sum(double noundef %12509, ptr noundef %1002, ptr noundef %1000)
  %12511 = load double, ptr %1029, align 8, !tbaa !17
  %12512 = load double, ptr %1029, align 8, !tbaa !17
  %12513 = fmul double %12511, %12512
  store double %12513, ptr %1020, align 8, !tbaa !17
  %12514 = load double, ptr %27, align 8, !tbaa !17
  %12515 = load double, ptr %1020, align 8, !tbaa !17
  %12516 = fcmp ogt double %12514, %12515
  br i1 %12516, label %12517, label %12522

12517:                                            ; preds = %12496
  %12518 = load double, ptr %1020, align 8, !tbaa !17
  %12519 = load ptr, ptr %9, align 8, !tbaa !5
  %12520 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %12519, i32 0, i32 7
  %12521 = call double @libxsmm_kahan_sum(double noundef %12518, ptr noundef %12520, ptr noundef %998)
  br label %12522

12522:                                            ; preds = %12517, %12496
  call void @llvm.lifetime.end.p0(i64 8, ptr %1030) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1029) #7
  br label %12547

12523:                                            ; preds = %12379, %12371
  %12524 = load double, ptr %1026, align 8, !tbaa !17
  %12525 = load double, ptr %1026, align 8, !tbaa !17
  %12526 = fcmp oeq double %12524, %12525
  br i1 %12526, label %12527, label %12531

12527:                                            ; preds = %12523
  %12528 = load double, ptr %27, align 8, !tbaa !17
  %12529 = load double, ptr %1028, align 8, !tbaa !17
  %12530 = fcmp ogt double %12528, %12529
  br label %12531

12531:                                            ; preds = %12527, %12523
  %12532 = phi i1 [ false, %12523 ], [ %12530, %12527 ]
  %12533 = zext i1 %12532 to i64
  %12534 = select i1 %12532, i32 1, i32 2
  store i32 %12534, ptr %19, align 4, !tbaa !9
  %12535 = load i32, ptr %1024, align 4, !tbaa !9
  %12536 = load ptr, ptr %9, align 8, !tbaa !5
  %12537 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %12536, i32 0, i32 22
  store i32 %12535, ptr %12537, align 8, !tbaa !26
  %12538 = load i32, ptr %1023, align 4, !tbaa !9
  %12539 = load ptr, ptr %9, align 8, !tbaa !5
  %12540 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %12539, i32 0, i32 23
  store i32 %12538, ptr %12540, align 4, !tbaa !27
  %12541 = load double, ptr %1026, align 8, !tbaa !17
  %12542 = load ptr, ptr %9, align 8, !tbaa !5
  %12543 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %12542, i32 0, i32 20
  store double %12541, ptr %12543, align 8, !tbaa !24
  %12544 = load double, ptr %1025, align 8, !tbaa !17
  %12545 = load ptr, ptr %9, align 8, !tbaa !5
  %12546 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %12545, i32 0, i32 21
  store double %12544, ptr %12546, align 8, !tbaa !25
  store i32 234, ptr %60, align 4
  br label %12548

12547:                                            ; preds = %12522
  store i32 0, ptr %60, align 4
  br label %12548

12548:                                            ; preds = %12547, %12531
  call void @llvm.lifetime.end.p0(i64 8, ptr %1028) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1027) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1026) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1025) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %1024) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %1023) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1022) #7
  %12549 = load i32, ptr %60, align 4
  switch i32 %12549, label %15542 [
    i32 0, label %12550
    i32 234, label %12554
  ]

12550:                                            ; preds = %12548
  br label %12551

12551:                                            ; preds = %12550
  %12552 = load i32, ptr %1013, align 4, !tbaa !9
  %12553 = add nsw i32 %12552, 1
  store i32 %12553, ptr %1013, align 4, !tbaa !9
  br label %12281, !llvm.loop !123

12554:                                            ; preds = %12548, %12281
  %12555 = load i32, ptr %19, align 4, !tbaa !9
  %12556 = icmp eq i32 0, %12555
  br i1 %12556, label %12557, label %12588

12557:                                            ; preds = %12554
  %12558 = load double, ptr %1017, align 8, !tbaa !17
  %12559 = load ptr, ptr %9, align 8, !tbaa !5
  %12560 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %12559, i32 0, i32 10
  %12561 = call double @libxsmm_kahan_sum(double noundef %12558, ptr noundef %12560, ptr noundef %1007)
  %12562 = load double, ptr %1018, align 8, !tbaa !17
  %12563 = load ptr, ptr %9, align 8, !tbaa !5
  %12564 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %12563, i32 0, i32 15
  %12565 = call double @libxsmm_kahan_sum(double noundef %12562, ptr noundef %12564, ptr noundef %1008)
  %12566 = load ptr, ptr %9, align 8, !tbaa !5
  %12567 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %12566, i32 0, i32 2
  %12568 = load double, ptr %12567, align 8, !tbaa !32
  %12569 = load double, ptr %1019, align 8, !tbaa !17
  %12570 = fcmp olt double %12568, %12569
  br i1 %12570, label %12571, label %12575

12571:                                            ; preds = %12557
  %12572 = load double, ptr %1019, align 8, !tbaa !17
  %12573 = load ptr, ptr %9, align 8, !tbaa !5
  %12574 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %12573, i32 0, i32 2
  store double %12572, ptr %12574, align 8, !tbaa !32
  br label %12575

12575:                                            ; preds = %12571, %12557
  %12576 = load double, ptr %1003, align 8, !tbaa !17
  %12577 = load double, ptr %1017, align 8, !tbaa !17
  %12578 = fcmp olt double %12576, %12577
  br i1 %12578, label %12579, label %12581

12579:                                            ; preds = %12575
  %12580 = load double, ptr %1017, align 8, !tbaa !17
  store double %12580, ptr %1003, align 8, !tbaa !17
  br label %12581

12581:                                            ; preds = %12579, %12575
  %12582 = load double, ptr %1004, align 8, !tbaa !17
  %12583 = load double, ptr %1018, align 8, !tbaa !17
  %12584 = fcmp olt double %12582, %12583
  br i1 %12584, label %12585, label %12587

12585:                                            ; preds = %12581
  %12586 = load double, ptr %1018, align 8, !tbaa !17
  store double %12586, ptr %1004, align 8, !tbaa !17
  br label %12587

12587:                                            ; preds = %12585, %12581
  br label %12589

12588:                                            ; preds = %12554
  store i32 231, ptr %60, align 4
  br label %12590

12589:                                            ; preds = %12587
  store i32 0, ptr %60, align 4
  br label %12590

12590:                                            ; preds = %12589, %12588
  call void @llvm.lifetime.end.p0(i64 8, ptr %1021) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1020) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1019) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1018) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1017) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1016) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1015) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1014) #7
  %12591 = load i32, ptr %60, align 4
  switch i32 %12591, label %15542 [
    i32 0, label %12592
    i32 231, label %12596
  ]

12592:                                            ; preds = %12590
  br label %12593

12593:                                            ; preds = %12592
  %12594 = load i32, ptr %1012, align 4, !tbaa !9
  %12595 = add nsw i32 %12594, 1
  store i32 %12595, ptr %1012, align 4, !tbaa !9
  br label %12276, !llvm.loop !124

12596:                                            ; preds = %12590, %12276
  %12597 = load i32, ptr %19, align 4, !tbaa !9
  %12598 = icmp eq i32 0, %12597
  br i1 %12598, label %12599, label %12865

12599:                                            ; preds = %12596
  call void @llvm.lifetime.start.p0(i64 8, ptr %1031) #7
  store double 0.000000e+00, ptr %1031, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1032) #7
  store double 0.000000e+00, ptr %1032, align 8, !tbaa !17
  %12600 = load ptr, ptr %9, align 8, !tbaa !5
  %12601 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %12600, i32 0, i32 14
  %12602 = load double, ptr %12601, align 8, !tbaa !34
  %12603 = fcmp oeq double 0.000000e+00, %12602
  br i1 %12603, label %12604, label %12605

12604:                                            ; preds = %12599
  br label %12606

12605:                                            ; preds = %12599
  call void @__assert_fail(ptr noundef @.str.1, ptr noundef @.str.2, i32 noundef 130, ptr noundef @__PRETTY_FUNCTION__.libxsmm_matdiff) #9
  unreachable

12606:                                            ; preds = %12604
  %12607 = load ptr, ptr %9, align 8, !tbaa !5
  %12608 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %12607, i32 0, i32 19
  %12609 = load double, ptr %12608, align 8, !tbaa !35
  %12610 = fcmp oeq double 0.000000e+00, %12609
  br i1 %12610, label %12611, label %12612

12611:                                            ; preds = %12606
  br label %12613

12612:                                            ; preds = %12606
  call void @__assert_fail(ptr noundef @.str.3, ptr noundef @.str.2, i32 noundef 131, ptr noundef @__PRETTY_FUNCTION__.libxsmm_matdiff) #9
  unreachable

12613:                                            ; preds = %12611
  %12614 = load i64, ptr %24, align 8, !tbaa !12
  %12615 = icmp ne i64 0, %12614
  br i1 %12615, label %12616, label %12633

12616:                                            ; preds = %12613
  %12617 = load ptr, ptr %9, align 8, !tbaa !5
  %12618 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %12617, i32 0, i32 10
  %12619 = load double, ptr %12618, align 8, !tbaa !36
  %12620 = load i64, ptr %24, align 8, !tbaa !12
  %12621 = uitofp i64 %12620 to double
  %12622 = fdiv double %12619, %12621
  %12623 = load ptr, ptr %9, align 8, !tbaa !5
  %12624 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %12623, i32 0, i32 13
  store double %12622, ptr %12624, align 8, !tbaa !37
  %12625 = load ptr, ptr %9, align 8, !tbaa !5
  %12626 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %12625, i32 0, i32 15
  %12627 = load double, ptr %12626, align 8, !tbaa !38
  %12628 = load i64, ptr %24, align 8, !tbaa !12
  %12629 = uitofp i64 %12628 to double
  %12630 = fdiv double %12627, %12629
  %12631 = load ptr, ptr %9, align 8, !tbaa !5
  %12632 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %12631, i32 0, i32 18
  store double %12630, ptr %12632, align 8, !tbaa !39
  br label %12633

12633:                                            ; preds = %12616, %12613
  %12634 = load double, ptr %1003, align 8, !tbaa !17
  %12635 = fcmp oge double 0.000000e+00, %12634
  br i1 %12635, label %12636, label %12638

12636:                                            ; preds = %12633
  %12637 = load double, ptr %1004, align 8, !tbaa !17
  br label %12650

12638:                                            ; preds = %12633
  %12639 = load ptr, ptr %9, align 8, !tbaa !5
  %12640 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %12639, i32 0, i32 2
  %12641 = load double, ptr %12640, align 8, !tbaa !32
  %12642 = load double, ptr %1003, align 8, !tbaa !17
  %12643 = fcmp olt double 0.000000e+00, %12642
  br i1 %12643, label %12644, label %12646

12644:                                            ; preds = %12638
  %12645 = load double, ptr %1003, align 8, !tbaa !17
  br label %12647

12646:                                            ; preds = %12638
  br label %12647

12647:                                            ; preds = %12646, %12644
  %12648 = phi double [ %12645, %12644 ], [ 1.000000e+00, %12646 ]
  %12649 = fdiv double %12641, %12648
  br label %12650

12650:                                            ; preds = %12647, %12636
  %12651 = phi double [ %12637, %12636 ], [ %12649, %12647 ]
  %12652 = load ptr, ptr %9, align 8, !tbaa !5
  %12653 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %12652, i32 0, i32 3
  store double %12651, ptr %12653, align 8, !tbaa !40
  %12654 = load double, ptr %1001, align 8, !tbaa !17
  %12655 = fcmp oge double 0.000000e+00, %12654
  br i1 %12655, label %12656, label %12674

12656:                                            ; preds = %12650
  %12657 = load double, ptr %1002, align 8, !tbaa !17
  %12658 = load double, ptr %1002, align 8, !tbaa !17
  %12659 = fmul double %12657, %12658
  %12660 = load ptr, ptr %9, align 8, !tbaa !5
  %12661 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %12660, i32 0, i32 7
  %12662 = load double, ptr %12661, align 8, !tbaa !41
  %12663 = fcmp olt double %12659, %12662
  br i1 %12663, label %12664, label %12668

12664:                                            ; preds = %12656
  %12665 = load double, ptr %1002, align 8, !tbaa !17
  %12666 = load double, ptr %1002, align 8, !tbaa !17
  %12667 = fmul double %12665, %12666
  br label %12672

12668:                                            ; preds = %12656
  %12669 = load ptr, ptr %9, align 8, !tbaa !5
  %12670 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %12669, i32 0, i32 7
  %12671 = load double, ptr %12670, align 8, !tbaa !41
  br label %12672

12672:                                            ; preds = %12668, %12664
  %12673 = phi double [ %12667, %12664 ], [ %12671, %12668 ]
  br label %12686

12674:                                            ; preds = %12650
  %12675 = load ptr, ptr %9, align 8, !tbaa !5
  %12676 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %12675, i32 0, i32 7
  %12677 = load double, ptr %12676, align 8, !tbaa !41
  %12678 = load double, ptr %1001, align 8, !tbaa !17
  %12679 = fcmp olt double 0.000000e+00, %12678
  br i1 %12679, label %12680, label %12682

12680:                                            ; preds = %12674
  %12681 = load double, ptr %1001, align 8, !tbaa !17
  br label %12683

12682:                                            ; preds = %12674
  br label %12683

12683:                                            ; preds = %12682, %12680
  %12684 = phi double [ %12681, %12680 ], [ 1.000000e+00, %12682 ]
  %12685 = fdiv double %12677, %12684
  br label %12686

12686:                                            ; preds = %12683, %12672
  %12687 = phi double [ %12673, %12672 ], [ %12685, %12683 ]
  %12688 = load ptr, ptr %9, align 8, !tbaa !5
  %12689 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %12688, i32 0, i32 4
  store double %12687, ptr %12689, align 8, !tbaa !42
  store i32 0, ptr %1013, align 4, !tbaa !9
  br label %12690

12690:                                            ; preds = %12839, %12686
  %12691 = load i32, ptr %1013, align 4, !tbaa !9
  %12692 = load i32, ptr %25, align 4, !tbaa !9
  %12693 = icmp slt i32 %12691, %12692
  br i1 %12693, label %12694, label %12842

12694:                                            ; preds = %12690
  call void @llvm.lifetime.start.p0(i64 8, ptr %1033) #7
  store double 0.000000e+00, ptr %1033, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1034) #7
  store double 0.000000e+00, ptr %1034, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1035) #7
  store double 0.000000e+00, ptr %1035, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1036) #7
  store double 0.000000e+00, ptr %1036, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1037) #7
  store double 0.000000e+00, ptr %1037, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1038) #7
  store double 0.000000e+00, ptr %1038, align 8, !tbaa !17
  store i32 0, ptr %1012, align 4, !tbaa !9
  br label %12695

12695:                                            ; preds = %12813, %12694
  %12696 = load i32, ptr %1012, align 4, !tbaa !9
  %12697 = load i32, ptr %26, align 4, !tbaa !9
  %12698 = icmp slt i32 %12696, %12697
  br i1 %12698, label %12699, label %12816

12699:                                            ; preds = %12695
  call void @llvm.lifetime.start.p0(i64 8, ptr %1039) #7
  %12700 = load i64, ptr %1011, align 8, !tbaa !12
  %12701 = load i32, ptr %1012, align 4, !tbaa !9
  %12702 = load i32, ptr %25, align 4, !tbaa !9
  %12703 = mul nsw i32 %12701, %12702
  %12704 = load i32, ptr %1013, align 4, !tbaa !9
  %12705 = add nsw i32 %12703, %12704
  %12706 = sext i32 %12705 to i64
  %12707 = mul i64 %12700, %12706
  %12708 = load i64, ptr %1010, align 8, !tbaa !12
  %12709 = urem i64 %12707, %12708
  store i64 %12709, ptr %1039, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 4, ptr %1040) #7
  %12710 = load i64, ptr %1039, align 8, !tbaa !12
  %12711 = load i32, ptr %25, align 4, !tbaa !9
  %12712 = sext i32 %12711 to i64
  %12713 = udiv i64 %12710, %12712
  %12714 = trunc i64 %12713 to i32
  store i32 %12714, ptr %1040, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %1041) #7
  %12715 = load i64, ptr %1039, align 8, !tbaa !12
  %12716 = load i32, ptr %25, align 4, !tbaa !9
  %12717 = sext i32 %12716 to i64
  %12718 = urem i64 %12715, %12717
  %12719 = trunc i64 %12718 to i32
  store i32 %12719, ptr %1041, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %1042) #7
  %12720 = load ptr, ptr %996, align 8, !tbaa !5
  %12721 = load i32, ptr %1040, align 4, !tbaa !9
  %12722 = load i32, ptr %20, align 4, !tbaa !9
  %12723 = mul nsw i32 %12721, %12722
  %12724 = load i32, ptr %1041, align 4, !tbaa !9
  %12725 = add nsw i32 %12723, %12724
  %12726 = sext i32 %12725 to i64
  %12727 = getelementptr inbounds i16, ptr %12720, i64 %12726
  %12728 = load i16, ptr %12727, align 2, !tbaa !67
  %12729 = call float @libxsmm_convert_bf16_to_f32(i16 noundef zeroext %12728)
  %12730 = fpext float %12729 to double
  store double %12730, ptr %1042, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1043) #7
  %12731 = load ptr, ptr %997, align 8, !tbaa !5
  %12732 = icmp ne ptr null, %12731
  br i1 %12732, label %12733, label %12744

12733:                                            ; preds = %12699
  %12734 = load ptr, ptr %997, align 8, !tbaa !5
  %12735 = load i32, ptr %1040, align 4, !tbaa !9
  %12736 = load i32, ptr %21, align 4, !tbaa !9
  %12737 = mul nsw i32 %12735, %12736
  %12738 = load i32, ptr %1041, align 4, !tbaa !9
  %12739 = add nsw i32 %12737, %12738
  %12740 = sext i32 %12739 to i64
  %12741 = getelementptr inbounds i16, ptr %12734, i64 %12740
  %12742 = load i16, ptr %12741, align 2, !tbaa !67
  %12743 = call float @libxsmm_convert_bf16_to_f32(i16 noundef zeroext %12742)
  br label %12745

12744:                                            ; preds = %12699
  br label %12745

12745:                                            ; preds = %12744, %12733
  %12746 = phi float [ %12743, %12733 ], [ 0.000000e+00, %12744 ]
  %12747 = fpext float %12746 to double
  store double %12747, ptr %1043, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1044) #7
  %12748 = load ptr, ptr %997, align 8, !tbaa !5
  %12749 = icmp ne ptr null, %12748
  br i1 %12749, label %12750, label %12764

12750:                                            ; preds = %12745
  %12751 = load double, ptr %1042, align 8, !tbaa !17
  %12752 = load double, ptr %1043, align 8, !tbaa !17
  %12753 = fcmp olt double %12751, %12752
  br i1 %12753, label %12754, label %12758

12754:                                            ; preds = %12750
  %12755 = load double, ptr %1043, align 8, !tbaa !17
  %12756 = load double, ptr %1042, align 8, !tbaa !17
  %12757 = fsub double %12755, %12756
  br label %12762

12758:                                            ; preds = %12750
  %12759 = load double, ptr %1042, align 8, !tbaa !17
  %12760 = load double, ptr %1043, align 8, !tbaa !17
  %12761 = fsub double %12759, %12760
  br label %12762

12762:                                            ; preds = %12758, %12754
  %12763 = phi double [ %12757, %12754 ], [ %12761, %12758 ]
  br label %12765

12764:                                            ; preds = %12745
  br label %12765

12765:                                            ; preds = %12764, %12762
  %12766 = phi double [ %12763, %12762 ], [ 0.000000e+00, %12764 ]
  store double %12766, ptr %1044, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1045) #7
  %12767 = load double, ptr %1042, align 8, !tbaa !17
  %12768 = load ptr, ptr %9, align 8, !tbaa !5
  %12769 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %12768, i32 0, i32 13
  %12770 = load double, ptr %12769, align 8, !tbaa !37
  %12771 = fsub double %12767, %12770
  store double %12771, ptr %1045, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1046) #7
  %12772 = load double, ptr %1043, align 8, !tbaa !17
  %12773 = load ptr, ptr %9, align 8, !tbaa !5
  %12774 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %12773, i32 0, i32 18
  %12775 = load double, ptr %12774, align 8, !tbaa !39
  %12776 = fsub double %12772, %12775
  store double %12776, ptr %1046, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1047) #7
  %12777 = load double, ptr %1042, align 8, !tbaa !17
  %12778 = fcmp ole double 0.000000e+00, %12777
  br i1 %12778, label %12779, label %12781

12779:                                            ; preds = %12765
  %12780 = load double, ptr %1042, align 8, !tbaa !17
  br label %12784

12781:                                            ; preds = %12765
  %12782 = load double, ptr %1042, align 8, !tbaa !17
  %12783 = fneg double %12782
  br label %12784

12784:                                            ; preds = %12781, %12779
  %12785 = phi double [ %12780, %12779 ], [ %12783, %12781 ]
  store double %12785, ptr %1047, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1048) #7
  %12786 = load double, ptr %1043, align 8, !tbaa !17
  %12787 = fcmp ole double 0.000000e+00, %12786
  br i1 %12787, label %12788, label %12790

12788:                                            ; preds = %12784
  %12789 = load double, ptr %1043, align 8, !tbaa !17
  br label %12793

12790:                                            ; preds = %12784
  %12791 = load double, ptr %1043, align 8, !tbaa !17
  %12792 = fneg double %12791
  br label %12793

12793:                                            ; preds = %12790, %12788
  %12794 = phi double [ %12789, %12788 ], [ %12792, %12790 ]
  store double %12794, ptr %1048, align 8, !tbaa !17
  %12795 = load double, ptr %1045, align 8, !tbaa !17
  %12796 = load double, ptr %1045, align 8, !tbaa !17
  %12797 = fmul double %12795, %12796
  %12798 = load ptr, ptr %9, align 8, !tbaa !5
  %12799 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %12798, i32 0, i32 14
  %12800 = call double @libxsmm_kahan_sum(double noundef %12797, ptr noundef %12799, ptr noundef %1031)
  %12801 = load double, ptr %1046, align 8, !tbaa !17
  %12802 = load double, ptr %1046, align 8, !tbaa !17
  %12803 = fmul double %12801, %12802
  %12804 = load ptr, ptr %9, align 8, !tbaa !5
  %12805 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %12804, i32 0, i32 19
  %12806 = call double @libxsmm_kahan_sum(double noundef %12803, ptr noundef %12805, ptr noundef %1032)
  %12807 = load double, ptr %1047, align 8, !tbaa !17
  %12808 = call double @libxsmm_kahan_sum(double noundef %12807, ptr noundef %1036, ptr noundef %1033)
  %12809 = load double, ptr %1048, align 8, !tbaa !17
  %12810 = call double @libxsmm_kahan_sum(double noundef %12809, ptr noundef %1037, ptr noundef %1034)
  %12811 = load double, ptr %1044, align 8, !tbaa !17
  %12812 = call double @libxsmm_kahan_sum(double noundef %12811, ptr noundef %1038, ptr noundef %1035)
  call void @llvm.lifetime.end.p0(i64 8, ptr %1048) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1047) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1046) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1045) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1044) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1043) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1042) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %1041) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %1040) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1039) #7
  br label %12813

12813:                                            ; preds = %12793
  %12814 = load i32, ptr %1012, align 4, !tbaa !9
  %12815 = add nsw i32 %12814, 1
  store i32 %12815, ptr %1012, align 4, !tbaa !9
  br label %12695, !llvm.loop !125

12816:                                            ; preds = %12695
  %12817 = load ptr, ptr %9, align 8, !tbaa !5
  %12818 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %12817, i32 0, i32 0
  %12819 = load double, ptr %12818, align 8, !tbaa !44
  %12820 = load double, ptr %1038, align 8, !tbaa !17
  %12821 = fcmp olt double %12819, %12820
  br i1 %12821, label %12822, label %12826

12822:                                            ; preds = %12816
  %12823 = load double, ptr %1038, align 8, !tbaa !17
  %12824 = load ptr, ptr %9, align 8, !tbaa !5
  %12825 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %12824, i32 0, i32 0
  store double %12823, ptr %12825, align 8, !tbaa !44
  br label %12826

12826:                                            ; preds = %12822, %12816
  %12827 = load double, ptr %1005, align 8, !tbaa !17
  %12828 = load double, ptr %1036, align 8, !tbaa !17
  %12829 = fcmp olt double %12827, %12828
  br i1 %12829, label %12830, label %12832

12830:                                            ; preds = %12826
  %12831 = load double, ptr %1036, align 8, !tbaa !17
  store double %12831, ptr %1005, align 8, !tbaa !17
  br label %12832

12832:                                            ; preds = %12830, %12826
  %12833 = load double, ptr %1006, align 8, !tbaa !17
  %12834 = load double, ptr %1037, align 8, !tbaa !17
  %12835 = fcmp olt double %12833, %12834
  br i1 %12835, label %12836, label %12838

12836:                                            ; preds = %12832
  %12837 = load double, ptr %1037, align 8, !tbaa !17
  store double %12837, ptr %1006, align 8, !tbaa !17
  br label %12838

12838:                                            ; preds = %12836, %12832
  call void @llvm.lifetime.end.p0(i64 8, ptr %1038) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1037) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1036) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1035) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1034) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1033) #7
  br label %12839

12839:                                            ; preds = %12838
  %12840 = load i32, ptr %1013, align 4, !tbaa !9
  %12841 = add nsw i32 %12840, 1
  store i32 %12841, ptr %1013, align 4, !tbaa !9
  br label %12690, !llvm.loop !126

12842:                                            ; preds = %12690
  %12843 = load double, ptr %1005, align 8, !tbaa !17
  %12844 = fcmp oge double 0.000000e+00, %12843
  br i1 %12844, label %12845, label %12849

12845:                                            ; preds = %12842
  %12846 = load ptr, ptr %9, align 8, !tbaa !5
  %12847 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %12846, i32 0, i32 0
  %12848 = load double, ptr %12847, align 8, !tbaa !44
  br label %12861

12849:                                            ; preds = %12842
  %12850 = load ptr, ptr %9, align 8, !tbaa !5
  %12851 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %12850, i32 0, i32 0
  %12852 = load double, ptr %12851, align 8, !tbaa !44
  %12853 = load double, ptr %1005, align 8, !tbaa !17
  %12854 = fcmp olt double 0.000000e+00, %12853
  br i1 %12854, label %12855, label %12857

12855:                                            ; preds = %12849
  %12856 = load double, ptr %1005, align 8, !tbaa !17
  br label %12858

12857:                                            ; preds = %12849
  br label %12858

12858:                                            ; preds = %12857, %12855
  %12859 = phi double [ %12856, %12855 ], [ 1.000000e+00, %12857 ]
  %12860 = fdiv double %12852, %12859
  br label %12861

12861:                                            ; preds = %12858, %12845
  %12862 = phi double [ %12848, %12845 ], [ %12860, %12858 ]
  %12863 = load ptr, ptr %9, align 8, !tbaa !5
  %12864 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %12863, i32 0, i32 1
  store double %12862, ptr %12864, align 8, !tbaa !46
  call void @llvm.lifetime.end.p0(i64 8, ptr %1032) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1031) #7
  br label %12865

12865:                                            ; preds = %12861, %12596
  call void @llvm.lifetime.end.p0(i64 4, ptr %1013) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %1012) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1011) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1010) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1009) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1008) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1007) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1006) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1005) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1004) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1003) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1002) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1001) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1000) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %999) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %998) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %997) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %996) #7
  br label %12866

12866:                                            ; preds = %12865, %12265
  br label %15200

12867:                                            ; preds = %1323
  %12868 = load i32, ptr %23, align 4, !tbaa !9
  %12869 = icmp eq i32 0, %12868
  br i1 %12869, label %12870, label %13427

12870:                                            ; preds = %12867
  call void @llvm.lifetime.start.p0(i64 8, ptr %1049) #7
  %12871 = load ptr, ptr %13, align 8, !tbaa !5
  store ptr %12871, ptr %1049, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %1050) #7
  %12872 = load ptr, ptr %14, align 8, !tbaa !5
  store ptr %12872, ptr %1050, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %1051) #7
  store double 0.000000e+00, ptr %1051, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1052) #7
  store double 0.000000e+00, ptr %1052, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1053) #7
  store double 0.000000e+00, ptr %1053, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1054) #7
  store double 0.000000e+00, ptr %1054, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1055) #7
  store double 0.000000e+00, ptr %1055, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1056) #7
  store double 0.000000e+00, ptr %1056, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1057) #7
  store double 0.000000e+00, ptr %1057, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1058) #7
  store double 0.000000e+00, ptr %1058, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1059) #7
  store double 0.000000e+00, ptr %1059, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1060) #7
  store double 0.000000e+00, ptr %1060, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1061) #7
  store double 0.000000e+00, ptr %1061, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1062) #7
  store double 0.000000e+00, ptr %1062, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 4, ptr %1063) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %1064) #7
  store i32 0, ptr %1063, align 4, !tbaa !9
  br label %12873

12873:                                            ; preds = %13172, %12870
  %12874 = load i32, ptr %1063, align 4, !tbaa !9
  %12875 = load i32, ptr %26, align 4, !tbaa !9
  %12876 = icmp slt i32 %12874, %12875
  br i1 %12876, label %12877, label %13175

12877:                                            ; preds = %12873
  call void @llvm.lifetime.start.p0(i64 8, ptr %1065) #7
  store double 0.000000e+00, ptr %1065, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1066) #7
  store double 0.000000e+00, ptr %1066, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1067) #7
  store double 0.000000e+00, ptr %1067, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1068) #7
  store double 0.000000e+00, ptr %1068, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1069) #7
  store double 0.000000e+00, ptr %1069, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1070) #7
  store double 0.000000e+00, ptr %1070, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1071) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %1072) #7
  store i32 0, ptr %1064, align 4, !tbaa !9
  br label %12878

12878:                                            ; preds = %13130, %12877
  %12879 = load i32, ptr %1064, align 4, !tbaa !9
  %12880 = load i32, ptr %25, align 4, !tbaa !9
  %12881 = icmp slt i32 %12879, %12880
  br i1 %12881, label %12882, label %13133

12882:                                            ; preds = %12878
  call void @llvm.lifetime.start.p0(i64 4, ptr %1073) #7
  %12883 = load i32, ptr %1063, align 4, !tbaa !9
  store i32 %12883, ptr %1073, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %1074) #7
  %12884 = load i32, ptr %1064, align 4, !tbaa !9
  store i32 %12884, ptr %1074, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %1075) #7
  %12885 = load ptr, ptr %1050, align 8, !tbaa !5
  %12886 = icmp ne ptr null, %12885
  br i1 %12886, label %12887, label %12898

12887:                                            ; preds = %12882
  %12888 = load ptr, ptr %1050, align 8, !tbaa !5
  %12889 = load i32, ptr %1073, align 4, !tbaa !9
  %12890 = load i32, ptr %21, align 4, !tbaa !9
  %12891 = mul nsw i32 %12889, %12890
  %12892 = load i32, ptr %1074, align 4, !tbaa !9
  %12893 = add nsw i32 %12891, %12892
  %12894 = sext i32 %12893 to i64
  %12895 = getelementptr inbounds i8, ptr %12888, i64 %12894
  %12896 = load i8, ptr %12895, align 1, !tbaa !11
  %12897 = call float @libxsmm_convert_bf8_to_f32(i8 noundef zeroext %12896)
  br label %12899

12898:                                            ; preds = %12882
  br label %12899

12899:                                            ; preds = %12898, %12887
  %12900 = phi float [ %12897, %12887 ], [ 0.000000e+00, %12898 ]
  %12901 = fpext float %12900 to double
  store double %12901, ptr %1075, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1076) #7
  %12902 = load ptr, ptr %1049, align 8, !tbaa !5
  %12903 = load i32, ptr %1073, align 4, !tbaa !9
  %12904 = load i32, ptr %20, align 4, !tbaa !9
  %12905 = mul nsw i32 %12903, %12904
  %12906 = load i32, ptr %1074, align 4, !tbaa !9
  %12907 = add nsw i32 %12905, %12906
  %12908 = sext i32 %12907 to i64
  %12909 = getelementptr inbounds i8, ptr %12902, i64 %12908
  %12910 = load i8, ptr %12909, align 1, !tbaa !11
  %12911 = call float @libxsmm_convert_bf8_to_f32(i8 noundef zeroext %12910)
  %12912 = fpext float %12911 to double
  store double %12912, ptr %1076, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1077) #7
  %12913 = load double, ptr %1075, align 8, !tbaa !17
  %12914 = fcmp ole double 0.000000e+00, %12913
  br i1 %12914, label %12915, label %12917

12915:                                            ; preds = %12899
  %12916 = load double, ptr %1075, align 8, !tbaa !17
  br label %12920

12917:                                            ; preds = %12899
  %12918 = load double, ptr %1075, align 8, !tbaa !17
  %12919 = fneg double %12918
  br label %12920

12920:                                            ; preds = %12917, %12915
  %12921 = phi double [ %12916, %12915 ], [ %12919, %12917 ]
  store double %12921, ptr %1077, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1078) #7
  %12922 = load double, ptr %1076, align 8, !tbaa !17
  %12923 = fcmp ole double 0.000000e+00, %12922
  br i1 %12923, label %12924, label %12926

12924:                                            ; preds = %12920
  %12925 = load double, ptr %1076, align 8, !tbaa !17
  br label %12929

12926:                                            ; preds = %12920
  %12927 = load double, ptr %1076, align 8, !tbaa !17
  %12928 = fneg double %12927
  br label %12929

12929:                                            ; preds = %12926, %12924
  %12930 = phi double [ %12925, %12924 ], [ %12928, %12926 ]
  store double %12930, ptr %1078, align 8, !tbaa !17
  %12931 = load double, ptr %1076, align 8, !tbaa !17
  %12932 = load ptr, ptr %9, align 8, !tbaa !5
  %12933 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %12932, i32 0, i32 11
  %12934 = load double, ptr %12933, align 8, !tbaa !14
  %12935 = fcmp olt double %12931, %12934
  br i1 %12935, label %12936, label %12940

12936:                                            ; preds = %12929
  %12937 = load double, ptr %1076, align 8, !tbaa !17
  %12938 = load ptr, ptr %9, align 8, !tbaa !5
  %12939 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %12938, i32 0, i32 11
  store double %12937, ptr %12939, align 8, !tbaa !14
  br label %12940

12940:                                            ; preds = %12936, %12929
  %12941 = load double, ptr %1076, align 8, !tbaa !17
  %12942 = load ptr, ptr %9, align 8, !tbaa !5
  %12943 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %12942, i32 0, i32 12
  %12944 = load double, ptr %12943, align 8, !tbaa !20
  %12945 = fcmp ogt double %12941, %12944
  br i1 %12945, label %12946, label %12950

12946:                                            ; preds = %12940
  %12947 = load double, ptr %1076, align 8, !tbaa !17
  %12948 = load ptr, ptr %9, align 8, !tbaa !5
  %12949 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %12948, i32 0, i32 12
  store double %12947, ptr %12949, align 8, !tbaa !20
  br label %12950

12950:                                            ; preds = %12946, %12940
  %12951 = load double, ptr %1075, align 8, !tbaa !17
  %12952 = load double, ptr %1075, align 8, !tbaa !17
  %12953 = fcmp oeq double %12951, %12952
  br i1 %12953, label %12954, label %13102

12954:                                            ; preds = %12950
  %12955 = load double, ptr %27, align 8, !tbaa !17
  %12956 = load double, ptr %1077, align 8, !tbaa !17
  %12957 = fcmp ogt double %12955, %12956
  br i1 %12957, label %12962, label %12958

12958:                                            ; preds = %12954
  %12959 = load double, ptr %1075, align 8, !tbaa !17
  %12960 = load double, ptr %1076, align 8, !tbaa !17
  %12961 = fcmp oeq double %12959, %12960
  br i1 %12961, label %12962, label %13102

12962:                                            ; preds = %12958, %12954
  call void @llvm.lifetime.start.p0(i64 8, ptr %1079) #7
  %12963 = load ptr, ptr %1050, align 8, !tbaa !5
  %12964 = icmp ne ptr null, %12963
  br i1 %12964, label %12965, label %12979

12965:                                            ; preds = %12962
  %12966 = load double, ptr %1076, align 8, !tbaa !17
  %12967 = load double, ptr %1075, align 8, !tbaa !17
  %12968 = fcmp olt double %12966, %12967
  br i1 %12968, label %12969, label %12973

12969:                                            ; preds = %12965
  %12970 = load double, ptr %1075, align 8, !tbaa !17
  %12971 = load double, ptr %1076, align 8, !tbaa !17
  %12972 = fsub double %12970, %12971
  br label %12977

12973:                                            ; preds = %12965
  %12974 = load double, ptr %1076, align 8, !tbaa !17
  %12975 = load double, ptr %1075, align 8, !tbaa !17
  %12976 = fsub double %12974, %12975
  br label %12977

12977:                                            ; preds = %12973, %12969
  %12978 = phi double [ %12972, %12969 ], [ %12976, %12973 ]
  br label %12980

12979:                                            ; preds = %12962
  br label %12980

12980:                                            ; preds = %12979, %12977
  %12981 = phi double [ %12978, %12977 ], [ 0.000000e+00, %12979 ]
  store double %12981, ptr %1079, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1080) #7
  %12982 = load double, ptr %1078, align 8, !tbaa !17
  %12983 = fcmp oge double 0.000000e+00, %12982
  br i1 %12983, label %12984, label %12986

12984:                                            ; preds = %12980
  %12985 = load double, ptr %1077, align 8, !tbaa !17
  br label %12996

12986:                                            ; preds = %12980
  %12987 = load double, ptr %1079, align 8, !tbaa !17
  %12988 = load double, ptr %1078, align 8, !tbaa !17
  %12989 = fcmp olt double 0.000000e+00, %12988
  br i1 %12989, label %12990, label %12992

12990:                                            ; preds = %12986
  %12991 = load double, ptr %1078, align 8, !tbaa !17
  br label %12993

12992:                                            ; preds = %12986
  br label %12993

12993:                                            ; preds = %12992, %12990
  %12994 = phi double [ %12991, %12990 ], [ 1.000000e+00, %12992 ]
  %12995 = fdiv double %12987, %12994
  br label %12996

12996:                                            ; preds = %12993, %12984
  %12997 = phi double [ %12985, %12984 ], [ %12995, %12993 ]
  store double %12997, ptr %1080, align 8, !tbaa !17
  %12998 = load double, ptr %1075, align 8, !tbaa !17
  %12999 = load ptr, ptr %9, align 8, !tbaa !5
  %13000 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %12999, i32 0, i32 16
  %13001 = load double, ptr %13000, align 8, !tbaa !21
  %13002 = fcmp olt double %12998, %13001
  br i1 %13002, label %13003, label %13007

13003:                                            ; preds = %12996
  %13004 = load double, ptr %1075, align 8, !tbaa !17
  %13005 = load ptr, ptr %9, align 8, !tbaa !5
  %13006 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %13005, i32 0, i32 16
  store double %13004, ptr %13006, align 8, !tbaa !21
  br label %13007

13007:                                            ; preds = %13003, %12996
  %13008 = load double, ptr %1075, align 8, !tbaa !17
  %13009 = load ptr, ptr %9, align 8, !tbaa !5
  %13010 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %13009, i32 0, i32 17
  %13011 = load double, ptr %13010, align 8, !tbaa !22
  %13012 = fcmp ogt double %13008, %13011
  br i1 %13012, label %13013, label %13017

13013:                                            ; preds = %13007
  %13014 = load double, ptr %1075, align 8, !tbaa !17
  %13015 = load ptr, ptr %9, align 8, !tbaa !5
  %13016 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %13015, i32 0, i32 17
  store double %13014, ptr %13016, align 8, !tbaa !22
  br label %13017

13017:                                            ; preds = %13013, %13007
  %13018 = load ptr, ptr %9, align 8, !tbaa !5
  %13019 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %13018, i32 0, i32 5
  %13020 = load double, ptr %13019, align 8, !tbaa !23
  %13021 = load double, ptr %1079, align 8, !tbaa !17
  %13022 = fcmp olt double %13020, %13021
  br i1 %13022, label %13023, label %13039

13023:                                            ; preds = %13017
  %13024 = load double, ptr %1079, align 8, !tbaa !17
  %13025 = load ptr, ptr %9, align 8, !tbaa !5
  %13026 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %13025, i32 0, i32 5
  store double %13024, ptr %13026, align 8, !tbaa !23
  %13027 = load double, ptr %1076, align 8, !tbaa !17
  %13028 = load ptr, ptr %9, align 8, !tbaa !5
  %13029 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %13028, i32 0, i32 20
  store double %13027, ptr %13029, align 8, !tbaa !24
  %13030 = load double, ptr %1075, align 8, !tbaa !17
  %13031 = load ptr, ptr %9, align 8, !tbaa !5
  %13032 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %13031, i32 0, i32 21
  store double %13030, ptr %13032, align 8, !tbaa !25
  %13033 = load i32, ptr %1074, align 4, !tbaa !9
  %13034 = load ptr, ptr %9, align 8, !tbaa !5
  %13035 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %13034, i32 0, i32 22
  store i32 %13033, ptr %13035, align 8, !tbaa !26
  %13036 = load i32, ptr %1073, align 4, !tbaa !9
  %13037 = load ptr, ptr %9, align 8, !tbaa !5
  %13038 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %13037, i32 0, i32 23
  store i32 %13036, ptr %13038, align 4, !tbaa !27
  br label %13039

13039:                                            ; preds = %13023, %13017
  %13040 = load ptr, ptr %9, align 8, !tbaa !5
  %13041 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %13040, i32 0, i32 6
  %13042 = load double, ptr %13041, align 8, !tbaa !28
  %13043 = load double, ptr %1080, align 8, !tbaa !17
  %13044 = fcmp olt double %13042, %13043
  br i1 %13044, label %13045, label %13049

13045:                                            ; preds = %13039
  %13046 = load double, ptr %1080, align 8, !tbaa !17
  %13047 = load ptr, ptr %9, align 8, !tbaa !5
  %13048 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %13047, i32 0, i32 6
  store double %13046, ptr %13048, align 8, !tbaa !28
  br label %13049

13049:                                            ; preds = %13045, %13039
  %13050 = load double, ptr %1080, align 8, !tbaa !17
  %13051 = load double, ptr %1080, align 8, !tbaa !17
  %13052 = fmul double %13050, %13051
  store double %13052, ptr %1071, align 8, !tbaa !17
  %13053 = load double, ptr %27, align 8, !tbaa !17
  %13054 = load double, ptr %1071, align 8, !tbaa !17
  %13055 = fcmp ogt double %13053, %13054
  br i1 %13055, label %13056, label %13075

13056:                                            ; preds = %13049
  %13057 = load double, ptr %1062, align 8, !tbaa !17
  %13058 = load double, ptr %1071, align 8, !tbaa !17
  %13059 = fsub double %13058, %13057
  store double %13059, ptr %1071, align 8, !tbaa !17
  %13060 = load ptr, ptr %9, align 8, !tbaa !5
  %13061 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %13060, i32 0, i32 8
  %13062 = load double, ptr %13061, align 8, !tbaa !29
  %13063 = load double, ptr %1071, align 8, !tbaa !17
  %13064 = fadd double %13062, %13063
  store double %13064, ptr %1072, align 8, !tbaa !17
  %13065 = load double, ptr %1072, align 8, !tbaa !17
  %13066 = load ptr, ptr %9, align 8, !tbaa !5
  %13067 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %13066, i32 0, i32 8
  %13068 = load double, ptr %13067, align 8, !tbaa !29
  %13069 = fsub double %13065, %13068
  %13070 = load double, ptr %1071, align 8, !tbaa !17
  %13071 = fsub double %13069, %13070
  store double %13071, ptr %1062, align 8, !tbaa !17
  %13072 = load double, ptr %1072, align 8, !tbaa !17
  %13073 = load ptr, ptr %9, align 8, !tbaa !5
  %13074 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %13073, i32 0, i32 8
  store double %13072, ptr %13074, align 8, !tbaa !29
  br label %13075

13075:                                            ; preds = %13056, %13049
  %13076 = load double, ptr %1078, align 8, !tbaa !17
  %13077 = call double @libxsmm_kahan_sum(double noundef %13076, ptr noundef %1068, ptr noundef %1065)
  %13078 = load double, ptr %1077, align 8, !tbaa !17
  %13079 = call double @libxsmm_kahan_sum(double noundef %13078, ptr noundef %1069, ptr noundef %1066)
  %13080 = load double, ptr %1079, align 8, !tbaa !17
  %13081 = call double @libxsmm_kahan_sum(double noundef %13080, ptr noundef %1070, ptr noundef %1067)
  %13082 = load double, ptr %1076, align 8, !tbaa !17
  %13083 = load double, ptr %1076, align 8, !tbaa !17
  %13084 = fmul double %13082, %13083
  %13085 = call double @libxsmm_kahan_sum(double noundef %13084, ptr noundef %1054, ptr noundef %1052)
  %13086 = load double, ptr %1075, align 8, !tbaa !17
  %13087 = load double, ptr %1075, align 8, !tbaa !17
  %13088 = fmul double %13086, %13087
  %13089 = call double @libxsmm_kahan_sum(double noundef %13088, ptr noundef %1055, ptr noundef %1053)
  %13090 = load double, ptr %1079, align 8, !tbaa !17
  %13091 = load double, ptr %1079, align 8, !tbaa !17
  %13092 = fmul double %13090, %13091
  store double %13092, ptr %1071, align 8, !tbaa !17
  %13093 = load double, ptr %27, align 8, !tbaa !17
  %13094 = load double, ptr %1071, align 8, !tbaa !17
  %13095 = fcmp ogt double %13093, %13094
  br i1 %13095, label %13096, label %13101

13096:                                            ; preds = %13075
  %13097 = load double, ptr %1071, align 8, !tbaa !17
  %13098 = load ptr, ptr %9, align 8, !tbaa !5
  %13099 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %13098, i32 0, i32 7
  %13100 = call double @libxsmm_kahan_sum(double noundef %13097, ptr noundef %13099, ptr noundef %1051)
  br label %13101

13101:                                            ; preds = %13096, %13075
  call void @llvm.lifetime.end.p0(i64 8, ptr %1080) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1079) #7
  br label %13126

13102:                                            ; preds = %12958, %12950
  %13103 = load double, ptr %1076, align 8, !tbaa !17
  %13104 = load double, ptr %1076, align 8, !tbaa !17
  %13105 = fcmp oeq double %13103, %13104
  br i1 %13105, label %13106, label %13110

13106:                                            ; preds = %13102
  %13107 = load double, ptr %27, align 8, !tbaa !17
  %13108 = load double, ptr %1078, align 8, !tbaa !17
  %13109 = fcmp ogt double %13107, %13108
  br label %13110

13110:                                            ; preds = %13106, %13102
  %13111 = phi i1 [ false, %13102 ], [ %13109, %13106 ]
  %13112 = zext i1 %13111 to i64
  %13113 = select i1 %13111, i32 1, i32 2
  store i32 %13113, ptr %19, align 4, !tbaa !9
  %13114 = load i32, ptr %1074, align 4, !tbaa !9
  %13115 = load ptr, ptr %9, align 8, !tbaa !5
  %13116 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %13115, i32 0, i32 22
  store i32 %13114, ptr %13116, align 8, !tbaa !26
  %13117 = load i32, ptr %1073, align 4, !tbaa !9
  %13118 = load ptr, ptr %9, align 8, !tbaa !5
  %13119 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %13118, i32 0, i32 23
  store i32 %13117, ptr %13119, align 4, !tbaa !27
  %13120 = load double, ptr %1076, align 8, !tbaa !17
  %13121 = load ptr, ptr %9, align 8, !tbaa !5
  %13122 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %13121, i32 0, i32 20
  store double %13120, ptr %13122, align 8, !tbaa !24
  %13123 = load double, ptr %1075, align 8, !tbaa !17
  %13124 = load ptr, ptr %9, align 8, !tbaa !5
  %13125 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %13124, i32 0, i32 21
  store double %13123, ptr %13125, align 8, !tbaa !25
  store i32 246, ptr %60, align 4
  br label %13127

13126:                                            ; preds = %13101
  store i32 0, ptr %60, align 4
  br label %13127

13127:                                            ; preds = %13126, %13110
  call void @llvm.lifetime.end.p0(i64 8, ptr %1078) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1077) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1076) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1075) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %1074) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %1073) #7
  %13128 = load i32, ptr %60, align 4
  switch i32 %13128, label %15542 [
    i32 0, label %13129
    i32 246, label %13133
  ]

13129:                                            ; preds = %13127
  br label %13130

13130:                                            ; preds = %13129
  %13131 = load i32, ptr %1064, align 4, !tbaa !9
  %13132 = add nsw i32 %13131, 1
  store i32 %13132, ptr %1064, align 4, !tbaa !9
  br label %12878, !llvm.loop !127

13133:                                            ; preds = %13127, %12878
  %13134 = load i32, ptr %19, align 4, !tbaa !9
  %13135 = icmp eq i32 0, %13134
  br i1 %13135, label %13136, label %13167

13136:                                            ; preds = %13133
  %13137 = load double, ptr %1068, align 8, !tbaa !17
  %13138 = load ptr, ptr %9, align 8, !tbaa !5
  %13139 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %13138, i32 0, i32 10
  %13140 = call double @libxsmm_kahan_sum(double noundef %13137, ptr noundef %13139, ptr noundef %1060)
  %13141 = load double, ptr %1069, align 8, !tbaa !17
  %13142 = load ptr, ptr %9, align 8, !tbaa !5
  %13143 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %13142, i32 0, i32 15
  %13144 = call double @libxsmm_kahan_sum(double noundef %13141, ptr noundef %13143, ptr noundef %1061)
  %13145 = load ptr, ptr %9, align 8, !tbaa !5
  %13146 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %13145, i32 0, i32 2
  %13147 = load double, ptr %13146, align 8, !tbaa !32
  %13148 = load double, ptr %1070, align 8, !tbaa !17
  %13149 = fcmp olt double %13147, %13148
  br i1 %13149, label %13150, label %13154

13150:                                            ; preds = %13136
  %13151 = load double, ptr %1070, align 8, !tbaa !17
  %13152 = load ptr, ptr %9, align 8, !tbaa !5
  %13153 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %13152, i32 0, i32 2
  store double %13151, ptr %13153, align 8, !tbaa !32
  br label %13154

13154:                                            ; preds = %13150, %13136
  %13155 = load double, ptr %1056, align 8, !tbaa !17
  %13156 = load double, ptr %1068, align 8, !tbaa !17
  %13157 = fcmp olt double %13155, %13156
  br i1 %13157, label %13158, label %13160

13158:                                            ; preds = %13154
  %13159 = load double, ptr %1068, align 8, !tbaa !17
  store double %13159, ptr %1056, align 8, !tbaa !17
  br label %13160

13160:                                            ; preds = %13158, %13154
  %13161 = load double, ptr %1057, align 8, !tbaa !17
  %13162 = load double, ptr %1069, align 8, !tbaa !17
  %13163 = fcmp olt double %13161, %13162
  br i1 %13163, label %13164, label %13166

13164:                                            ; preds = %13160
  %13165 = load double, ptr %1069, align 8, !tbaa !17
  store double %13165, ptr %1057, align 8, !tbaa !17
  br label %13166

13166:                                            ; preds = %13164, %13160
  br label %13168

13167:                                            ; preds = %13133
  store i32 243, ptr %60, align 4
  br label %13169

13168:                                            ; preds = %13166
  store i32 0, ptr %60, align 4
  br label %13169

13169:                                            ; preds = %13168, %13167
  call void @llvm.lifetime.end.p0(i64 8, ptr %1072) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1071) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1070) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1069) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1068) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1067) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1066) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1065) #7
  %13170 = load i32, ptr %60, align 4
  switch i32 %13170, label %15542 [
    i32 0, label %13171
    i32 243, label %13175
  ]

13171:                                            ; preds = %13169
  br label %13172

13172:                                            ; preds = %13171
  %13173 = load i32, ptr %1063, align 4, !tbaa !9
  %13174 = add nsw i32 %13173, 1
  store i32 %13174, ptr %1063, align 4, !tbaa !9
  br label %12873, !llvm.loop !128

13175:                                            ; preds = %13169, %12873
  %13176 = load i32, ptr %19, align 4, !tbaa !9
  %13177 = icmp eq i32 0, %13176
  br i1 %13177, label %13178, label %13426

13178:                                            ; preds = %13175
  call void @llvm.lifetime.start.p0(i64 8, ptr %1081) #7
  store double 0.000000e+00, ptr %1081, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1082) #7
  store double 0.000000e+00, ptr %1082, align 8, !tbaa !17
  %13179 = load ptr, ptr %9, align 8, !tbaa !5
  %13180 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %13179, i32 0, i32 14
  %13181 = load double, ptr %13180, align 8, !tbaa !34
  %13182 = fcmp oeq double 0.000000e+00, %13181
  br i1 %13182, label %13183, label %13184

13183:                                            ; preds = %13178
  br label %13185

13184:                                            ; preds = %13178
  call void @__assert_fail(ptr noundef @.str.1, ptr noundef @.str.2, i32 noundef 130, ptr noundef @__PRETTY_FUNCTION__.libxsmm_matdiff) #9
  unreachable

13185:                                            ; preds = %13183
  %13186 = load ptr, ptr %9, align 8, !tbaa !5
  %13187 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %13186, i32 0, i32 19
  %13188 = load double, ptr %13187, align 8, !tbaa !35
  %13189 = fcmp oeq double 0.000000e+00, %13188
  br i1 %13189, label %13190, label %13191

13190:                                            ; preds = %13185
  br label %13192

13191:                                            ; preds = %13185
  call void @__assert_fail(ptr noundef @.str.3, ptr noundef @.str.2, i32 noundef 131, ptr noundef @__PRETTY_FUNCTION__.libxsmm_matdiff) #9
  unreachable

13192:                                            ; preds = %13190
  %13193 = load i64, ptr %24, align 8, !tbaa !12
  %13194 = icmp ne i64 0, %13193
  br i1 %13194, label %13195, label %13212

13195:                                            ; preds = %13192
  %13196 = load ptr, ptr %9, align 8, !tbaa !5
  %13197 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %13196, i32 0, i32 10
  %13198 = load double, ptr %13197, align 8, !tbaa !36
  %13199 = load i64, ptr %24, align 8, !tbaa !12
  %13200 = uitofp i64 %13199 to double
  %13201 = fdiv double %13198, %13200
  %13202 = load ptr, ptr %9, align 8, !tbaa !5
  %13203 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %13202, i32 0, i32 13
  store double %13201, ptr %13203, align 8, !tbaa !37
  %13204 = load ptr, ptr %9, align 8, !tbaa !5
  %13205 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %13204, i32 0, i32 15
  %13206 = load double, ptr %13205, align 8, !tbaa !38
  %13207 = load i64, ptr %24, align 8, !tbaa !12
  %13208 = uitofp i64 %13207 to double
  %13209 = fdiv double %13206, %13208
  %13210 = load ptr, ptr %9, align 8, !tbaa !5
  %13211 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %13210, i32 0, i32 18
  store double %13209, ptr %13211, align 8, !tbaa !39
  br label %13212

13212:                                            ; preds = %13195, %13192
  %13213 = load double, ptr %1056, align 8, !tbaa !17
  %13214 = fcmp oge double 0.000000e+00, %13213
  br i1 %13214, label %13215, label %13217

13215:                                            ; preds = %13212
  %13216 = load double, ptr %1057, align 8, !tbaa !17
  br label %13229

13217:                                            ; preds = %13212
  %13218 = load ptr, ptr %9, align 8, !tbaa !5
  %13219 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %13218, i32 0, i32 2
  %13220 = load double, ptr %13219, align 8, !tbaa !32
  %13221 = load double, ptr %1056, align 8, !tbaa !17
  %13222 = fcmp olt double 0.000000e+00, %13221
  br i1 %13222, label %13223, label %13225

13223:                                            ; preds = %13217
  %13224 = load double, ptr %1056, align 8, !tbaa !17
  br label %13226

13225:                                            ; preds = %13217
  br label %13226

13226:                                            ; preds = %13225, %13223
  %13227 = phi double [ %13224, %13223 ], [ 1.000000e+00, %13225 ]
  %13228 = fdiv double %13220, %13227
  br label %13229

13229:                                            ; preds = %13226, %13215
  %13230 = phi double [ %13216, %13215 ], [ %13228, %13226 ]
  %13231 = load ptr, ptr %9, align 8, !tbaa !5
  %13232 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %13231, i32 0, i32 3
  store double %13230, ptr %13232, align 8, !tbaa !40
  %13233 = load double, ptr %1054, align 8, !tbaa !17
  %13234 = fcmp oge double 0.000000e+00, %13233
  br i1 %13234, label %13235, label %13253

13235:                                            ; preds = %13229
  %13236 = load double, ptr %1055, align 8, !tbaa !17
  %13237 = load double, ptr %1055, align 8, !tbaa !17
  %13238 = fmul double %13236, %13237
  %13239 = load ptr, ptr %9, align 8, !tbaa !5
  %13240 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %13239, i32 0, i32 7
  %13241 = load double, ptr %13240, align 8, !tbaa !41
  %13242 = fcmp olt double %13238, %13241
  br i1 %13242, label %13243, label %13247

13243:                                            ; preds = %13235
  %13244 = load double, ptr %1055, align 8, !tbaa !17
  %13245 = load double, ptr %1055, align 8, !tbaa !17
  %13246 = fmul double %13244, %13245
  br label %13251

13247:                                            ; preds = %13235
  %13248 = load ptr, ptr %9, align 8, !tbaa !5
  %13249 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %13248, i32 0, i32 7
  %13250 = load double, ptr %13249, align 8, !tbaa !41
  br label %13251

13251:                                            ; preds = %13247, %13243
  %13252 = phi double [ %13246, %13243 ], [ %13250, %13247 ]
  br label %13265

13253:                                            ; preds = %13229
  %13254 = load ptr, ptr %9, align 8, !tbaa !5
  %13255 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %13254, i32 0, i32 7
  %13256 = load double, ptr %13255, align 8, !tbaa !41
  %13257 = load double, ptr %1054, align 8, !tbaa !17
  %13258 = fcmp olt double 0.000000e+00, %13257
  br i1 %13258, label %13259, label %13261

13259:                                            ; preds = %13253
  %13260 = load double, ptr %1054, align 8, !tbaa !17
  br label %13262

13261:                                            ; preds = %13253
  br label %13262

13262:                                            ; preds = %13261, %13259
  %13263 = phi double [ %13260, %13259 ], [ 1.000000e+00, %13261 ]
  %13264 = fdiv double %13256, %13263
  br label %13265

13265:                                            ; preds = %13262, %13251
  %13266 = phi double [ %13252, %13251 ], [ %13264, %13262 ]
  %13267 = load ptr, ptr %9, align 8, !tbaa !5
  %13268 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %13267, i32 0, i32 4
  store double %13266, ptr %13268, align 8, !tbaa !42
  store i32 0, ptr %1064, align 4, !tbaa !9
  br label %13269

13269:                                            ; preds = %13400, %13265
  %13270 = load i32, ptr %1064, align 4, !tbaa !9
  %13271 = load i32, ptr %25, align 4, !tbaa !9
  %13272 = icmp slt i32 %13270, %13271
  br i1 %13272, label %13273, label %13403

13273:                                            ; preds = %13269
  call void @llvm.lifetime.start.p0(i64 8, ptr %1083) #7
  store double 0.000000e+00, ptr %1083, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1084) #7
  store double 0.000000e+00, ptr %1084, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1085) #7
  store double 0.000000e+00, ptr %1085, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1086) #7
  store double 0.000000e+00, ptr %1086, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1087) #7
  store double 0.000000e+00, ptr %1087, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1088) #7
  store double 0.000000e+00, ptr %1088, align 8, !tbaa !17
  store i32 0, ptr %1063, align 4, !tbaa !9
  br label %13274

13274:                                            ; preds = %13374, %13273
  %13275 = load i32, ptr %1063, align 4, !tbaa !9
  %13276 = load i32, ptr %26, align 4, !tbaa !9
  %13277 = icmp slt i32 %13275, %13276
  br i1 %13277, label %13278, label %13377

13278:                                            ; preds = %13274
  call void @llvm.lifetime.start.p0(i64 4, ptr %1089) #7
  %13279 = load i32, ptr %1063, align 4, !tbaa !9
  store i32 %13279, ptr %1089, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %1090) #7
  %13280 = load i32, ptr %1064, align 4, !tbaa !9
  store i32 %13280, ptr %1090, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %1091) #7
  %13281 = load ptr, ptr %1049, align 8, !tbaa !5
  %13282 = load i32, ptr %1089, align 4, !tbaa !9
  %13283 = load i32, ptr %20, align 4, !tbaa !9
  %13284 = mul nsw i32 %13282, %13283
  %13285 = load i32, ptr %1090, align 4, !tbaa !9
  %13286 = add nsw i32 %13284, %13285
  %13287 = sext i32 %13286 to i64
  %13288 = getelementptr inbounds i8, ptr %13281, i64 %13287
  %13289 = load i8, ptr %13288, align 1, !tbaa !11
  %13290 = call float @libxsmm_convert_bf8_to_f32(i8 noundef zeroext %13289)
  %13291 = fpext float %13290 to double
  store double %13291, ptr %1091, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1092) #7
  %13292 = load ptr, ptr %1050, align 8, !tbaa !5
  %13293 = icmp ne ptr null, %13292
  br i1 %13293, label %13294, label %13305

13294:                                            ; preds = %13278
  %13295 = load ptr, ptr %1050, align 8, !tbaa !5
  %13296 = load i32, ptr %1089, align 4, !tbaa !9
  %13297 = load i32, ptr %21, align 4, !tbaa !9
  %13298 = mul nsw i32 %13296, %13297
  %13299 = load i32, ptr %1090, align 4, !tbaa !9
  %13300 = add nsw i32 %13298, %13299
  %13301 = sext i32 %13300 to i64
  %13302 = getelementptr inbounds i8, ptr %13295, i64 %13301
  %13303 = load i8, ptr %13302, align 1, !tbaa !11
  %13304 = call float @libxsmm_convert_bf8_to_f32(i8 noundef zeroext %13303)
  br label %13306

13305:                                            ; preds = %13278
  br label %13306

13306:                                            ; preds = %13305, %13294
  %13307 = phi float [ %13304, %13294 ], [ 0.000000e+00, %13305 ]
  %13308 = fpext float %13307 to double
  store double %13308, ptr %1092, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1093) #7
  %13309 = load ptr, ptr %1050, align 8, !tbaa !5
  %13310 = icmp ne ptr null, %13309
  br i1 %13310, label %13311, label %13325

13311:                                            ; preds = %13306
  %13312 = load double, ptr %1091, align 8, !tbaa !17
  %13313 = load double, ptr %1092, align 8, !tbaa !17
  %13314 = fcmp olt double %13312, %13313
  br i1 %13314, label %13315, label %13319

13315:                                            ; preds = %13311
  %13316 = load double, ptr %1092, align 8, !tbaa !17
  %13317 = load double, ptr %1091, align 8, !tbaa !17
  %13318 = fsub double %13316, %13317
  br label %13323

13319:                                            ; preds = %13311
  %13320 = load double, ptr %1091, align 8, !tbaa !17
  %13321 = load double, ptr %1092, align 8, !tbaa !17
  %13322 = fsub double %13320, %13321
  br label %13323

13323:                                            ; preds = %13319, %13315
  %13324 = phi double [ %13318, %13315 ], [ %13322, %13319 ]
  br label %13326

13325:                                            ; preds = %13306
  br label %13326

13326:                                            ; preds = %13325, %13323
  %13327 = phi double [ %13324, %13323 ], [ 0.000000e+00, %13325 ]
  store double %13327, ptr %1093, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1094) #7
  %13328 = load double, ptr %1091, align 8, !tbaa !17
  %13329 = load ptr, ptr %9, align 8, !tbaa !5
  %13330 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %13329, i32 0, i32 13
  %13331 = load double, ptr %13330, align 8, !tbaa !37
  %13332 = fsub double %13328, %13331
  store double %13332, ptr %1094, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1095) #7
  %13333 = load double, ptr %1092, align 8, !tbaa !17
  %13334 = load ptr, ptr %9, align 8, !tbaa !5
  %13335 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %13334, i32 0, i32 18
  %13336 = load double, ptr %13335, align 8, !tbaa !39
  %13337 = fsub double %13333, %13336
  store double %13337, ptr %1095, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1096) #7
  %13338 = load double, ptr %1091, align 8, !tbaa !17
  %13339 = fcmp ole double 0.000000e+00, %13338
  br i1 %13339, label %13340, label %13342

13340:                                            ; preds = %13326
  %13341 = load double, ptr %1091, align 8, !tbaa !17
  br label %13345

13342:                                            ; preds = %13326
  %13343 = load double, ptr %1091, align 8, !tbaa !17
  %13344 = fneg double %13343
  br label %13345

13345:                                            ; preds = %13342, %13340
  %13346 = phi double [ %13341, %13340 ], [ %13344, %13342 ]
  store double %13346, ptr %1096, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1097) #7
  %13347 = load double, ptr %1092, align 8, !tbaa !17
  %13348 = fcmp ole double 0.000000e+00, %13347
  br i1 %13348, label %13349, label %13351

13349:                                            ; preds = %13345
  %13350 = load double, ptr %1092, align 8, !tbaa !17
  br label %13354

13351:                                            ; preds = %13345
  %13352 = load double, ptr %1092, align 8, !tbaa !17
  %13353 = fneg double %13352
  br label %13354

13354:                                            ; preds = %13351, %13349
  %13355 = phi double [ %13350, %13349 ], [ %13353, %13351 ]
  store double %13355, ptr %1097, align 8, !tbaa !17
  %13356 = load double, ptr %1094, align 8, !tbaa !17
  %13357 = load double, ptr %1094, align 8, !tbaa !17
  %13358 = fmul double %13356, %13357
  %13359 = load ptr, ptr %9, align 8, !tbaa !5
  %13360 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %13359, i32 0, i32 14
  %13361 = call double @libxsmm_kahan_sum(double noundef %13358, ptr noundef %13360, ptr noundef %1081)
  %13362 = load double, ptr %1095, align 8, !tbaa !17
  %13363 = load double, ptr %1095, align 8, !tbaa !17
  %13364 = fmul double %13362, %13363
  %13365 = load ptr, ptr %9, align 8, !tbaa !5
  %13366 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %13365, i32 0, i32 19
  %13367 = call double @libxsmm_kahan_sum(double noundef %13364, ptr noundef %13366, ptr noundef %1082)
  %13368 = load double, ptr %1096, align 8, !tbaa !17
  %13369 = call double @libxsmm_kahan_sum(double noundef %13368, ptr noundef %1086, ptr noundef %1083)
  %13370 = load double, ptr %1097, align 8, !tbaa !17
  %13371 = call double @libxsmm_kahan_sum(double noundef %13370, ptr noundef %1087, ptr noundef %1084)
  %13372 = load double, ptr %1093, align 8, !tbaa !17
  %13373 = call double @libxsmm_kahan_sum(double noundef %13372, ptr noundef %1088, ptr noundef %1085)
  call void @llvm.lifetime.end.p0(i64 8, ptr %1097) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1096) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1095) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1094) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1093) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1092) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1091) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %1090) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %1089) #7
  br label %13374

13374:                                            ; preds = %13354
  %13375 = load i32, ptr %1063, align 4, !tbaa !9
  %13376 = add nsw i32 %13375, 1
  store i32 %13376, ptr %1063, align 4, !tbaa !9
  br label %13274, !llvm.loop !129

13377:                                            ; preds = %13274
  %13378 = load ptr, ptr %9, align 8, !tbaa !5
  %13379 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %13378, i32 0, i32 0
  %13380 = load double, ptr %13379, align 8, !tbaa !44
  %13381 = load double, ptr %1088, align 8, !tbaa !17
  %13382 = fcmp olt double %13380, %13381
  br i1 %13382, label %13383, label %13387

13383:                                            ; preds = %13377
  %13384 = load double, ptr %1088, align 8, !tbaa !17
  %13385 = load ptr, ptr %9, align 8, !tbaa !5
  %13386 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %13385, i32 0, i32 0
  store double %13384, ptr %13386, align 8, !tbaa !44
  br label %13387

13387:                                            ; preds = %13383, %13377
  %13388 = load double, ptr %1058, align 8, !tbaa !17
  %13389 = load double, ptr %1086, align 8, !tbaa !17
  %13390 = fcmp olt double %13388, %13389
  br i1 %13390, label %13391, label %13393

13391:                                            ; preds = %13387
  %13392 = load double, ptr %1086, align 8, !tbaa !17
  store double %13392, ptr %1058, align 8, !tbaa !17
  br label %13393

13393:                                            ; preds = %13391, %13387
  %13394 = load double, ptr %1059, align 8, !tbaa !17
  %13395 = load double, ptr %1087, align 8, !tbaa !17
  %13396 = fcmp olt double %13394, %13395
  br i1 %13396, label %13397, label %13399

13397:                                            ; preds = %13393
  %13398 = load double, ptr %1087, align 8, !tbaa !17
  store double %13398, ptr %1059, align 8, !tbaa !17
  br label %13399

13399:                                            ; preds = %13397, %13393
  call void @llvm.lifetime.end.p0(i64 8, ptr %1088) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1087) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1086) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1085) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1084) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1083) #7
  br label %13400

13400:                                            ; preds = %13399
  %13401 = load i32, ptr %1064, align 4, !tbaa !9
  %13402 = add nsw i32 %13401, 1
  store i32 %13402, ptr %1064, align 4, !tbaa !9
  br label %13269, !llvm.loop !130

13403:                                            ; preds = %13269
  %13404 = load double, ptr %1058, align 8, !tbaa !17
  %13405 = fcmp oge double 0.000000e+00, %13404
  br i1 %13405, label %13406, label %13410

13406:                                            ; preds = %13403
  %13407 = load ptr, ptr %9, align 8, !tbaa !5
  %13408 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %13407, i32 0, i32 0
  %13409 = load double, ptr %13408, align 8, !tbaa !44
  br label %13422

13410:                                            ; preds = %13403
  %13411 = load ptr, ptr %9, align 8, !tbaa !5
  %13412 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %13411, i32 0, i32 0
  %13413 = load double, ptr %13412, align 8, !tbaa !44
  %13414 = load double, ptr %1058, align 8, !tbaa !17
  %13415 = fcmp olt double 0.000000e+00, %13414
  br i1 %13415, label %13416, label %13418

13416:                                            ; preds = %13410
  %13417 = load double, ptr %1058, align 8, !tbaa !17
  br label %13419

13418:                                            ; preds = %13410
  br label %13419

13419:                                            ; preds = %13418, %13416
  %13420 = phi double [ %13417, %13416 ], [ 1.000000e+00, %13418 ]
  %13421 = fdiv double %13413, %13420
  br label %13422

13422:                                            ; preds = %13419, %13406
  %13423 = phi double [ %13409, %13406 ], [ %13421, %13419 ]
  %13424 = load ptr, ptr %9, align 8, !tbaa !5
  %13425 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %13424, i32 0, i32 1
  store double %13423, ptr %13425, align 8, !tbaa !46
  call void @llvm.lifetime.end.p0(i64 8, ptr %1082) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1081) #7
  br label %13426

13426:                                            ; preds = %13422, %13175
  call void @llvm.lifetime.end.p0(i64 4, ptr %1064) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %1063) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1062) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1061) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1060) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1059) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1058) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1057) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1056) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1055) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1054) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1053) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1052) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1051) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1050) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1049) #7
  br label %14027

13427:                                            ; preds = %12867
  call void @llvm.lifetime.start.p0(i64 8, ptr %1098) #7
  %13428 = load ptr, ptr %13, align 8, !tbaa !5
  store ptr %13428, ptr %1098, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %1099) #7
  %13429 = load ptr, ptr %14, align 8, !tbaa !5
  store ptr %13429, ptr %1099, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %1100) #7
  store double 0.000000e+00, ptr %1100, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1101) #7
  store double 0.000000e+00, ptr %1101, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1102) #7
  store double 0.000000e+00, ptr %1102, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1103) #7
  store double 0.000000e+00, ptr %1103, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1104) #7
  store double 0.000000e+00, ptr %1104, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1105) #7
  store double 0.000000e+00, ptr %1105, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1106) #7
  store double 0.000000e+00, ptr %1106, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1107) #7
  store double 0.000000e+00, ptr %1107, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1108) #7
  store double 0.000000e+00, ptr %1108, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1109) #7
  store double 0.000000e+00, ptr %1109, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1110) #7
  store double 0.000000e+00, ptr %1110, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1111) #7
  store double 0.000000e+00, ptr %1111, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1112) #7
  %13430 = load i32, ptr %25, align 4, !tbaa !9
  %13431 = sext i32 %13430 to i64
  %13432 = load i32, ptr %26, align 4, !tbaa !9
  %13433 = sext i32 %13432 to i64
  %13434 = mul i64 %13431, %13433
  store i64 %13434, ptr %1112, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 8, ptr %1113) #7
  %13435 = load i64, ptr %1112, align 8, !tbaa !12
  %13436 = call i64 @libxsmm_coprime2(i64 noundef %13435)
  store i64 %13436, ptr %1113, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 4, ptr %1114) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %1115) #7
  store i32 0, ptr %1114, align 4, !tbaa !9
  br label %13437

13437:                                            ; preds = %13754, %13427
  %13438 = load i32, ptr %1114, align 4, !tbaa !9
  %13439 = load i32, ptr %26, align 4, !tbaa !9
  %13440 = icmp slt i32 %13438, %13439
  br i1 %13440, label %13441, label %13757

13441:                                            ; preds = %13437
  call void @llvm.lifetime.start.p0(i64 8, ptr %1116) #7
  store double 0.000000e+00, ptr %1116, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1117) #7
  store double 0.000000e+00, ptr %1117, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1118) #7
  store double 0.000000e+00, ptr %1118, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1119) #7
  store double 0.000000e+00, ptr %1119, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1120) #7
  store double 0.000000e+00, ptr %1120, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1121) #7
  store double 0.000000e+00, ptr %1121, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1122) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %1123) #7
  store i32 0, ptr %1115, align 4, !tbaa !9
  br label %13442

13442:                                            ; preds = %13712, %13441
  %13443 = load i32, ptr %1115, align 4, !tbaa !9
  %13444 = load i32, ptr %25, align 4, !tbaa !9
  %13445 = icmp slt i32 %13443, %13444
  br i1 %13445, label %13446, label %13715

13446:                                            ; preds = %13442
  call void @llvm.lifetime.start.p0(i64 8, ptr %1124) #7
  %13447 = load i64, ptr %1113, align 8, !tbaa !12
  %13448 = load i32, ptr %1114, align 4, !tbaa !9
  %13449 = load i32, ptr %25, align 4, !tbaa !9
  %13450 = mul nsw i32 %13448, %13449
  %13451 = load i32, ptr %1115, align 4, !tbaa !9
  %13452 = add nsw i32 %13450, %13451
  %13453 = sext i32 %13452 to i64
  %13454 = mul i64 %13447, %13453
  %13455 = load i64, ptr %1112, align 8, !tbaa !12
  %13456 = urem i64 %13454, %13455
  store i64 %13456, ptr %1124, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 4, ptr %1125) #7
  %13457 = load i64, ptr %1124, align 8, !tbaa !12
  %13458 = load i32, ptr %25, align 4, !tbaa !9
  %13459 = sext i32 %13458 to i64
  %13460 = udiv i64 %13457, %13459
  %13461 = trunc i64 %13460 to i32
  store i32 %13461, ptr %1125, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %1126) #7
  %13462 = load i64, ptr %1124, align 8, !tbaa !12
  %13463 = load i32, ptr %25, align 4, !tbaa !9
  %13464 = sext i32 %13463 to i64
  %13465 = urem i64 %13462, %13464
  %13466 = trunc i64 %13465 to i32
  store i32 %13466, ptr %1126, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %1127) #7
  %13467 = load ptr, ptr %1099, align 8, !tbaa !5
  %13468 = icmp ne ptr null, %13467
  br i1 %13468, label %13469, label %13480

13469:                                            ; preds = %13446
  %13470 = load ptr, ptr %1099, align 8, !tbaa !5
  %13471 = load i32, ptr %1125, align 4, !tbaa !9
  %13472 = load i32, ptr %21, align 4, !tbaa !9
  %13473 = mul nsw i32 %13471, %13472
  %13474 = load i32, ptr %1126, align 4, !tbaa !9
  %13475 = add nsw i32 %13473, %13474
  %13476 = sext i32 %13475 to i64
  %13477 = getelementptr inbounds i8, ptr %13470, i64 %13476
  %13478 = load i8, ptr %13477, align 1, !tbaa !11
  %13479 = call float @libxsmm_convert_bf8_to_f32(i8 noundef zeroext %13478)
  br label %13481

13480:                                            ; preds = %13446
  br label %13481

13481:                                            ; preds = %13480, %13469
  %13482 = phi float [ %13479, %13469 ], [ 0.000000e+00, %13480 ]
  %13483 = fpext float %13482 to double
  store double %13483, ptr %1127, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1128) #7
  %13484 = load ptr, ptr %1098, align 8, !tbaa !5
  %13485 = load i32, ptr %1125, align 4, !tbaa !9
  %13486 = load i32, ptr %20, align 4, !tbaa !9
  %13487 = mul nsw i32 %13485, %13486
  %13488 = load i32, ptr %1126, align 4, !tbaa !9
  %13489 = add nsw i32 %13487, %13488
  %13490 = sext i32 %13489 to i64
  %13491 = getelementptr inbounds i8, ptr %13484, i64 %13490
  %13492 = load i8, ptr %13491, align 1, !tbaa !11
  %13493 = call float @libxsmm_convert_bf8_to_f32(i8 noundef zeroext %13492)
  %13494 = fpext float %13493 to double
  store double %13494, ptr %1128, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1129) #7
  %13495 = load double, ptr %1127, align 8, !tbaa !17
  %13496 = fcmp ole double 0.000000e+00, %13495
  br i1 %13496, label %13497, label %13499

13497:                                            ; preds = %13481
  %13498 = load double, ptr %1127, align 8, !tbaa !17
  br label %13502

13499:                                            ; preds = %13481
  %13500 = load double, ptr %1127, align 8, !tbaa !17
  %13501 = fneg double %13500
  br label %13502

13502:                                            ; preds = %13499, %13497
  %13503 = phi double [ %13498, %13497 ], [ %13501, %13499 ]
  store double %13503, ptr %1129, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1130) #7
  %13504 = load double, ptr %1128, align 8, !tbaa !17
  %13505 = fcmp ole double 0.000000e+00, %13504
  br i1 %13505, label %13506, label %13508

13506:                                            ; preds = %13502
  %13507 = load double, ptr %1128, align 8, !tbaa !17
  br label %13511

13508:                                            ; preds = %13502
  %13509 = load double, ptr %1128, align 8, !tbaa !17
  %13510 = fneg double %13509
  br label %13511

13511:                                            ; preds = %13508, %13506
  %13512 = phi double [ %13507, %13506 ], [ %13510, %13508 ]
  store double %13512, ptr %1130, align 8, !tbaa !17
  %13513 = load double, ptr %1128, align 8, !tbaa !17
  %13514 = load ptr, ptr %9, align 8, !tbaa !5
  %13515 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %13514, i32 0, i32 11
  %13516 = load double, ptr %13515, align 8, !tbaa !14
  %13517 = fcmp olt double %13513, %13516
  br i1 %13517, label %13518, label %13522

13518:                                            ; preds = %13511
  %13519 = load double, ptr %1128, align 8, !tbaa !17
  %13520 = load ptr, ptr %9, align 8, !tbaa !5
  %13521 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %13520, i32 0, i32 11
  store double %13519, ptr %13521, align 8, !tbaa !14
  br label %13522

13522:                                            ; preds = %13518, %13511
  %13523 = load double, ptr %1128, align 8, !tbaa !17
  %13524 = load ptr, ptr %9, align 8, !tbaa !5
  %13525 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %13524, i32 0, i32 12
  %13526 = load double, ptr %13525, align 8, !tbaa !20
  %13527 = fcmp ogt double %13523, %13526
  br i1 %13527, label %13528, label %13532

13528:                                            ; preds = %13522
  %13529 = load double, ptr %1128, align 8, !tbaa !17
  %13530 = load ptr, ptr %9, align 8, !tbaa !5
  %13531 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %13530, i32 0, i32 12
  store double %13529, ptr %13531, align 8, !tbaa !20
  br label %13532

13532:                                            ; preds = %13528, %13522
  %13533 = load double, ptr %1127, align 8, !tbaa !17
  %13534 = load double, ptr %1127, align 8, !tbaa !17
  %13535 = fcmp oeq double %13533, %13534
  br i1 %13535, label %13536, label %13684

13536:                                            ; preds = %13532
  %13537 = load double, ptr %27, align 8, !tbaa !17
  %13538 = load double, ptr %1129, align 8, !tbaa !17
  %13539 = fcmp ogt double %13537, %13538
  br i1 %13539, label %13544, label %13540

13540:                                            ; preds = %13536
  %13541 = load double, ptr %1127, align 8, !tbaa !17
  %13542 = load double, ptr %1128, align 8, !tbaa !17
  %13543 = fcmp oeq double %13541, %13542
  br i1 %13543, label %13544, label %13684

13544:                                            ; preds = %13540, %13536
  call void @llvm.lifetime.start.p0(i64 8, ptr %1131) #7
  %13545 = load ptr, ptr %1099, align 8, !tbaa !5
  %13546 = icmp ne ptr null, %13545
  br i1 %13546, label %13547, label %13561

13547:                                            ; preds = %13544
  %13548 = load double, ptr %1128, align 8, !tbaa !17
  %13549 = load double, ptr %1127, align 8, !tbaa !17
  %13550 = fcmp olt double %13548, %13549
  br i1 %13550, label %13551, label %13555

13551:                                            ; preds = %13547
  %13552 = load double, ptr %1127, align 8, !tbaa !17
  %13553 = load double, ptr %1128, align 8, !tbaa !17
  %13554 = fsub double %13552, %13553
  br label %13559

13555:                                            ; preds = %13547
  %13556 = load double, ptr %1128, align 8, !tbaa !17
  %13557 = load double, ptr %1127, align 8, !tbaa !17
  %13558 = fsub double %13556, %13557
  br label %13559

13559:                                            ; preds = %13555, %13551
  %13560 = phi double [ %13554, %13551 ], [ %13558, %13555 ]
  br label %13562

13561:                                            ; preds = %13544
  br label %13562

13562:                                            ; preds = %13561, %13559
  %13563 = phi double [ %13560, %13559 ], [ 0.000000e+00, %13561 ]
  store double %13563, ptr %1131, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1132) #7
  %13564 = load double, ptr %1130, align 8, !tbaa !17
  %13565 = fcmp oge double 0.000000e+00, %13564
  br i1 %13565, label %13566, label %13568

13566:                                            ; preds = %13562
  %13567 = load double, ptr %1129, align 8, !tbaa !17
  br label %13578

13568:                                            ; preds = %13562
  %13569 = load double, ptr %1131, align 8, !tbaa !17
  %13570 = load double, ptr %1130, align 8, !tbaa !17
  %13571 = fcmp olt double 0.000000e+00, %13570
  br i1 %13571, label %13572, label %13574

13572:                                            ; preds = %13568
  %13573 = load double, ptr %1130, align 8, !tbaa !17
  br label %13575

13574:                                            ; preds = %13568
  br label %13575

13575:                                            ; preds = %13574, %13572
  %13576 = phi double [ %13573, %13572 ], [ 1.000000e+00, %13574 ]
  %13577 = fdiv double %13569, %13576
  br label %13578

13578:                                            ; preds = %13575, %13566
  %13579 = phi double [ %13567, %13566 ], [ %13577, %13575 ]
  store double %13579, ptr %1132, align 8, !tbaa !17
  %13580 = load double, ptr %1127, align 8, !tbaa !17
  %13581 = load ptr, ptr %9, align 8, !tbaa !5
  %13582 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %13581, i32 0, i32 16
  %13583 = load double, ptr %13582, align 8, !tbaa !21
  %13584 = fcmp olt double %13580, %13583
  br i1 %13584, label %13585, label %13589

13585:                                            ; preds = %13578
  %13586 = load double, ptr %1127, align 8, !tbaa !17
  %13587 = load ptr, ptr %9, align 8, !tbaa !5
  %13588 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %13587, i32 0, i32 16
  store double %13586, ptr %13588, align 8, !tbaa !21
  br label %13589

13589:                                            ; preds = %13585, %13578
  %13590 = load double, ptr %1127, align 8, !tbaa !17
  %13591 = load ptr, ptr %9, align 8, !tbaa !5
  %13592 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %13591, i32 0, i32 17
  %13593 = load double, ptr %13592, align 8, !tbaa !22
  %13594 = fcmp ogt double %13590, %13593
  br i1 %13594, label %13595, label %13599

13595:                                            ; preds = %13589
  %13596 = load double, ptr %1127, align 8, !tbaa !17
  %13597 = load ptr, ptr %9, align 8, !tbaa !5
  %13598 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %13597, i32 0, i32 17
  store double %13596, ptr %13598, align 8, !tbaa !22
  br label %13599

13599:                                            ; preds = %13595, %13589
  %13600 = load ptr, ptr %9, align 8, !tbaa !5
  %13601 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %13600, i32 0, i32 5
  %13602 = load double, ptr %13601, align 8, !tbaa !23
  %13603 = load double, ptr %1131, align 8, !tbaa !17
  %13604 = fcmp olt double %13602, %13603
  br i1 %13604, label %13605, label %13621

13605:                                            ; preds = %13599
  %13606 = load double, ptr %1131, align 8, !tbaa !17
  %13607 = load ptr, ptr %9, align 8, !tbaa !5
  %13608 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %13607, i32 0, i32 5
  store double %13606, ptr %13608, align 8, !tbaa !23
  %13609 = load double, ptr %1128, align 8, !tbaa !17
  %13610 = load ptr, ptr %9, align 8, !tbaa !5
  %13611 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %13610, i32 0, i32 20
  store double %13609, ptr %13611, align 8, !tbaa !24
  %13612 = load double, ptr %1127, align 8, !tbaa !17
  %13613 = load ptr, ptr %9, align 8, !tbaa !5
  %13614 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %13613, i32 0, i32 21
  store double %13612, ptr %13614, align 8, !tbaa !25
  %13615 = load i32, ptr %1126, align 4, !tbaa !9
  %13616 = load ptr, ptr %9, align 8, !tbaa !5
  %13617 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %13616, i32 0, i32 22
  store i32 %13615, ptr %13617, align 8, !tbaa !26
  %13618 = load i32, ptr %1125, align 4, !tbaa !9
  %13619 = load ptr, ptr %9, align 8, !tbaa !5
  %13620 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %13619, i32 0, i32 23
  store i32 %13618, ptr %13620, align 4, !tbaa !27
  br label %13621

13621:                                            ; preds = %13605, %13599
  %13622 = load ptr, ptr %9, align 8, !tbaa !5
  %13623 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %13622, i32 0, i32 6
  %13624 = load double, ptr %13623, align 8, !tbaa !28
  %13625 = load double, ptr %1132, align 8, !tbaa !17
  %13626 = fcmp olt double %13624, %13625
  br i1 %13626, label %13627, label %13631

13627:                                            ; preds = %13621
  %13628 = load double, ptr %1132, align 8, !tbaa !17
  %13629 = load ptr, ptr %9, align 8, !tbaa !5
  %13630 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %13629, i32 0, i32 6
  store double %13628, ptr %13630, align 8, !tbaa !28
  br label %13631

13631:                                            ; preds = %13627, %13621
  %13632 = load double, ptr %1132, align 8, !tbaa !17
  %13633 = load double, ptr %1132, align 8, !tbaa !17
  %13634 = fmul double %13632, %13633
  store double %13634, ptr %1122, align 8, !tbaa !17
  %13635 = load double, ptr %27, align 8, !tbaa !17
  %13636 = load double, ptr %1122, align 8, !tbaa !17
  %13637 = fcmp ogt double %13635, %13636
  br i1 %13637, label %13638, label %13657

13638:                                            ; preds = %13631
  %13639 = load double, ptr %1111, align 8, !tbaa !17
  %13640 = load double, ptr %1122, align 8, !tbaa !17
  %13641 = fsub double %13640, %13639
  store double %13641, ptr %1122, align 8, !tbaa !17
  %13642 = load ptr, ptr %9, align 8, !tbaa !5
  %13643 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %13642, i32 0, i32 8
  %13644 = load double, ptr %13643, align 8, !tbaa !29
  %13645 = load double, ptr %1122, align 8, !tbaa !17
  %13646 = fadd double %13644, %13645
  store double %13646, ptr %1123, align 8, !tbaa !17
  %13647 = load double, ptr %1123, align 8, !tbaa !17
  %13648 = load ptr, ptr %9, align 8, !tbaa !5
  %13649 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %13648, i32 0, i32 8
  %13650 = load double, ptr %13649, align 8, !tbaa !29
  %13651 = fsub double %13647, %13650
  %13652 = load double, ptr %1122, align 8, !tbaa !17
  %13653 = fsub double %13651, %13652
  store double %13653, ptr %1111, align 8, !tbaa !17
  %13654 = load double, ptr %1123, align 8, !tbaa !17
  %13655 = load ptr, ptr %9, align 8, !tbaa !5
  %13656 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %13655, i32 0, i32 8
  store double %13654, ptr %13656, align 8, !tbaa !29
  br label %13657

13657:                                            ; preds = %13638, %13631
  %13658 = load double, ptr %1130, align 8, !tbaa !17
  %13659 = call double @libxsmm_kahan_sum(double noundef %13658, ptr noundef %1119, ptr noundef %1116)
  %13660 = load double, ptr %1129, align 8, !tbaa !17
  %13661 = call double @libxsmm_kahan_sum(double noundef %13660, ptr noundef %1120, ptr noundef %1117)
  %13662 = load double, ptr %1131, align 8, !tbaa !17
  %13663 = call double @libxsmm_kahan_sum(double noundef %13662, ptr noundef %1121, ptr noundef %1118)
  %13664 = load double, ptr %1128, align 8, !tbaa !17
  %13665 = load double, ptr %1128, align 8, !tbaa !17
  %13666 = fmul double %13664, %13665
  %13667 = call double @libxsmm_kahan_sum(double noundef %13666, ptr noundef %1103, ptr noundef %1101)
  %13668 = load double, ptr %1127, align 8, !tbaa !17
  %13669 = load double, ptr %1127, align 8, !tbaa !17
  %13670 = fmul double %13668, %13669
  %13671 = call double @libxsmm_kahan_sum(double noundef %13670, ptr noundef %1104, ptr noundef %1102)
  %13672 = load double, ptr %1131, align 8, !tbaa !17
  %13673 = load double, ptr %1131, align 8, !tbaa !17
  %13674 = fmul double %13672, %13673
  store double %13674, ptr %1122, align 8, !tbaa !17
  %13675 = load double, ptr %27, align 8, !tbaa !17
  %13676 = load double, ptr %1122, align 8, !tbaa !17
  %13677 = fcmp ogt double %13675, %13676
  br i1 %13677, label %13678, label %13683

13678:                                            ; preds = %13657
  %13679 = load double, ptr %1122, align 8, !tbaa !17
  %13680 = load ptr, ptr %9, align 8, !tbaa !5
  %13681 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %13680, i32 0, i32 7
  %13682 = call double @libxsmm_kahan_sum(double noundef %13679, ptr noundef %13681, ptr noundef %1100)
  br label %13683

13683:                                            ; preds = %13678, %13657
  call void @llvm.lifetime.end.p0(i64 8, ptr %1132) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1131) #7
  br label %13708

13684:                                            ; preds = %13540, %13532
  %13685 = load double, ptr %1128, align 8, !tbaa !17
  %13686 = load double, ptr %1128, align 8, !tbaa !17
  %13687 = fcmp oeq double %13685, %13686
  br i1 %13687, label %13688, label %13692

13688:                                            ; preds = %13684
  %13689 = load double, ptr %27, align 8, !tbaa !17
  %13690 = load double, ptr %1130, align 8, !tbaa !17
  %13691 = fcmp ogt double %13689, %13690
  br label %13692

13692:                                            ; preds = %13688, %13684
  %13693 = phi i1 [ false, %13684 ], [ %13691, %13688 ]
  %13694 = zext i1 %13693 to i64
  %13695 = select i1 %13693, i32 1, i32 2
  store i32 %13695, ptr %19, align 4, !tbaa !9
  %13696 = load i32, ptr %1126, align 4, !tbaa !9
  %13697 = load ptr, ptr %9, align 8, !tbaa !5
  %13698 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %13697, i32 0, i32 22
  store i32 %13696, ptr %13698, align 8, !tbaa !26
  %13699 = load i32, ptr %1125, align 4, !tbaa !9
  %13700 = load ptr, ptr %9, align 8, !tbaa !5
  %13701 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %13700, i32 0, i32 23
  store i32 %13699, ptr %13701, align 4, !tbaa !27
  %13702 = load double, ptr %1128, align 8, !tbaa !17
  %13703 = load ptr, ptr %9, align 8, !tbaa !5
  %13704 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %13703, i32 0, i32 20
  store double %13702, ptr %13704, align 8, !tbaa !24
  %13705 = load double, ptr %1127, align 8, !tbaa !17
  %13706 = load ptr, ptr %9, align 8, !tbaa !5
  %13707 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %13706, i32 0, i32 21
  store double %13705, ptr %13707, align 8, !tbaa !25
  store i32 258, ptr %60, align 4
  br label %13709

13708:                                            ; preds = %13683
  store i32 0, ptr %60, align 4
  br label %13709

13709:                                            ; preds = %13708, %13692
  call void @llvm.lifetime.end.p0(i64 8, ptr %1130) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1129) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1128) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1127) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %1126) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %1125) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1124) #7
  %13710 = load i32, ptr %60, align 4
  switch i32 %13710, label %15542 [
    i32 0, label %13711
    i32 258, label %13715
  ]

13711:                                            ; preds = %13709
  br label %13712

13712:                                            ; preds = %13711
  %13713 = load i32, ptr %1115, align 4, !tbaa !9
  %13714 = add nsw i32 %13713, 1
  store i32 %13714, ptr %1115, align 4, !tbaa !9
  br label %13442, !llvm.loop !131

13715:                                            ; preds = %13709, %13442
  %13716 = load i32, ptr %19, align 4, !tbaa !9
  %13717 = icmp eq i32 0, %13716
  br i1 %13717, label %13718, label %13749

13718:                                            ; preds = %13715
  %13719 = load double, ptr %1119, align 8, !tbaa !17
  %13720 = load ptr, ptr %9, align 8, !tbaa !5
  %13721 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %13720, i32 0, i32 10
  %13722 = call double @libxsmm_kahan_sum(double noundef %13719, ptr noundef %13721, ptr noundef %1109)
  %13723 = load double, ptr %1120, align 8, !tbaa !17
  %13724 = load ptr, ptr %9, align 8, !tbaa !5
  %13725 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %13724, i32 0, i32 15
  %13726 = call double @libxsmm_kahan_sum(double noundef %13723, ptr noundef %13725, ptr noundef %1110)
  %13727 = load ptr, ptr %9, align 8, !tbaa !5
  %13728 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %13727, i32 0, i32 2
  %13729 = load double, ptr %13728, align 8, !tbaa !32
  %13730 = load double, ptr %1121, align 8, !tbaa !17
  %13731 = fcmp olt double %13729, %13730
  br i1 %13731, label %13732, label %13736

13732:                                            ; preds = %13718
  %13733 = load double, ptr %1121, align 8, !tbaa !17
  %13734 = load ptr, ptr %9, align 8, !tbaa !5
  %13735 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %13734, i32 0, i32 2
  store double %13733, ptr %13735, align 8, !tbaa !32
  br label %13736

13736:                                            ; preds = %13732, %13718
  %13737 = load double, ptr %1105, align 8, !tbaa !17
  %13738 = load double, ptr %1119, align 8, !tbaa !17
  %13739 = fcmp olt double %13737, %13738
  br i1 %13739, label %13740, label %13742

13740:                                            ; preds = %13736
  %13741 = load double, ptr %1119, align 8, !tbaa !17
  store double %13741, ptr %1105, align 8, !tbaa !17
  br label %13742

13742:                                            ; preds = %13740, %13736
  %13743 = load double, ptr %1106, align 8, !tbaa !17
  %13744 = load double, ptr %1120, align 8, !tbaa !17
  %13745 = fcmp olt double %13743, %13744
  br i1 %13745, label %13746, label %13748

13746:                                            ; preds = %13742
  %13747 = load double, ptr %1120, align 8, !tbaa !17
  store double %13747, ptr %1106, align 8, !tbaa !17
  br label %13748

13748:                                            ; preds = %13746, %13742
  br label %13750

13749:                                            ; preds = %13715
  store i32 255, ptr %60, align 4
  br label %13751

13750:                                            ; preds = %13748
  store i32 0, ptr %60, align 4
  br label %13751

13751:                                            ; preds = %13750, %13749
  call void @llvm.lifetime.end.p0(i64 8, ptr %1123) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1122) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1121) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1120) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1119) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1118) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1117) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1116) #7
  %13752 = load i32, ptr %60, align 4
  switch i32 %13752, label %15542 [
    i32 0, label %13753
    i32 255, label %13757
  ]

13753:                                            ; preds = %13751
  br label %13754

13754:                                            ; preds = %13753
  %13755 = load i32, ptr %1114, align 4, !tbaa !9
  %13756 = add nsw i32 %13755, 1
  store i32 %13756, ptr %1114, align 4, !tbaa !9
  br label %13437, !llvm.loop !132

13757:                                            ; preds = %13751, %13437
  %13758 = load i32, ptr %19, align 4, !tbaa !9
  %13759 = icmp eq i32 0, %13758
  br i1 %13759, label %13760, label %14026

13760:                                            ; preds = %13757
  call void @llvm.lifetime.start.p0(i64 8, ptr %1133) #7
  store double 0.000000e+00, ptr %1133, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1134) #7
  store double 0.000000e+00, ptr %1134, align 8, !tbaa !17
  %13761 = load ptr, ptr %9, align 8, !tbaa !5
  %13762 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %13761, i32 0, i32 14
  %13763 = load double, ptr %13762, align 8, !tbaa !34
  %13764 = fcmp oeq double 0.000000e+00, %13763
  br i1 %13764, label %13765, label %13766

13765:                                            ; preds = %13760
  br label %13767

13766:                                            ; preds = %13760
  call void @__assert_fail(ptr noundef @.str.1, ptr noundef @.str.2, i32 noundef 130, ptr noundef @__PRETTY_FUNCTION__.libxsmm_matdiff) #9
  unreachable

13767:                                            ; preds = %13765
  %13768 = load ptr, ptr %9, align 8, !tbaa !5
  %13769 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %13768, i32 0, i32 19
  %13770 = load double, ptr %13769, align 8, !tbaa !35
  %13771 = fcmp oeq double 0.000000e+00, %13770
  br i1 %13771, label %13772, label %13773

13772:                                            ; preds = %13767
  br label %13774

13773:                                            ; preds = %13767
  call void @__assert_fail(ptr noundef @.str.3, ptr noundef @.str.2, i32 noundef 131, ptr noundef @__PRETTY_FUNCTION__.libxsmm_matdiff) #9
  unreachable

13774:                                            ; preds = %13772
  %13775 = load i64, ptr %24, align 8, !tbaa !12
  %13776 = icmp ne i64 0, %13775
  br i1 %13776, label %13777, label %13794

13777:                                            ; preds = %13774
  %13778 = load ptr, ptr %9, align 8, !tbaa !5
  %13779 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %13778, i32 0, i32 10
  %13780 = load double, ptr %13779, align 8, !tbaa !36
  %13781 = load i64, ptr %24, align 8, !tbaa !12
  %13782 = uitofp i64 %13781 to double
  %13783 = fdiv double %13780, %13782
  %13784 = load ptr, ptr %9, align 8, !tbaa !5
  %13785 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %13784, i32 0, i32 13
  store double %13783, ptr %13785, align 8, !tbaa !37
  %13786 = load ptr, ptr %9, align 8, !tbaa !5
  %13787 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %13786, i32 0, i32 15
  %13788 = load double, ptr %13787, align 8, !tbaa !38
  %13789 = load i64, ptr %24, align 8, !tbaa !12
  %13790 = uitofp i64 %13789 to double
  %13791 = fdiv double %13788, %13790
  %13792 = load ptr, ptr %9, align 8, !tbaa !5
  %13793 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %13792, i32 0, i32 18
  store double %13791, ptr %13793, align 8, !tbaa !39
  br label %13794

13794:                                            ; preds = %13777, %13774
  %13795 = load double, ptr %1105, align 8, !tbaa !17
  %13796 = fcmp oge double 0.000000e+00, %13795
  br i1 %13796, label %13797, label %13799

13797:                                            ; preds = %13794
  %13798 = load double, ptr %1106, align 8, !tbaa !17
  br label %13811

13799:                                            ; preds = %13794
  %13800 = load ptr, ptr %9, align 8, !tbaa !5
  %13801 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %13800, i32 0, i32 2
  %13802 = load double, ptr %13801, align 8, !tbaa !32
  %13803 = load double, ptr %1105, align 8, !tbaa !17
  %13804 = fcmp olt double 0.000000e+00, %13803
  br i1 %13804, label %13805, label %13807

13805:                                            ; preds = %13799
  %13806 = load double, ptr %1105, align 8, !tbaa !17
  br label %13808

13807:                                            ; preds = %13799
  br label %13808

13808:                                            ; preds = %13807, %13805
  %13809 = phi double [ %13806, %13805 ], [ 1.000000e+00, %13807 ]
  %13810 = fdiv double %13802, %13809
  br label %13811

13811:                                            ; preds = %13808, %13797
  %13812 = phi double [ %13798, %13797 ], [ %13810, %13808 ]
  %13813 = load ptr, ptr %9, align 8, !tbaa !5
  %13814 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %13813, i32 0, i32 3
  store double %13812, ptr %13814, align 8, !tbaa !40
  %13815 = load double, ptr %1103, align 8, !tbaa !17
  %13816 = fcmp oge double 0.000000e+00, %13815
  br i1 %13816, label %13817, label %13835

13817:                                            ; preds = %13811
  %13818 = load double, ptr %1104, align 8, !tbaa !17
  %13819 = load double, ptr %1104, align 8, !tbaa !17
  %13820 = fmul double %13818, %13819
  %13821 = load ptr, ptr %9, align 8, !tbaa !5
  %13822 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %13821, i32 0, i32 7
  %13823 = load double, ptr %13822, align 8, !tbaa !41
  %13824 = fcmp olt double %13820, %13823
  br i1 %13824, label %13825, label %13829

13825:                                            ; preds = %13817
  %13826 = load double, ptr %1104, align 8, !tbaa !17
  %13827 = load double, ptr %1104, align 8, !tbaa !17
  %13828 = fmul double %13826, %13827
  br label %13833

13829:                                            ; preds = %13817
  %13830 = load ptr, ptr %9, align 8, !tbaa !5
  %13831 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %13830, i32 0, i32 7
  %13832 = load double, ptr %13831, align 8, !tbaa !41
  br label %13833

13833:                                            ; preds = %13829, %13825
  %13834 = phi double [ %13828, %13825 ], [ %13832, %13829 ]
  br label %13847

13835:                                            ; preds = %13811
  %13836 = load ptr, ptr %9, align 8, !tbaa !5
  %13837 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %13836, i32 0, i32 7
  %13838 = load double, ptr %13837, align 8, !tbaa !41
  %13839 = load double, ptr %1103, align 8, !tbaa !17
  %13840 = fcmp olt double 0.000000e+00, %13839
  br i1 %13840, label %13841, label %13843

13841:                                            ; preds = %13835
  %13842 = load double, ptr %1103, align 8, !tbaa !17
  br label %13844

13843:                                            ; preds = %13835
  br label %13844

13844:                                            ; preds = %13843, %13841
  %13845 = phi double [ %13842, %13841 ], [ 1.000000e+00, %13843 ]
  %13846 = fdiv double %13838, %13845
  br label %13847

13847:                                            ; preds = %13844, %13833
  %13848 = phi double [ %13834, %13833 ], [ %13846, %13844 ]
  %13849 = load ptr, ptr %9, align 8, !tbaa !5
  %13850 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %13849, i32 0, i32 4
  store double %13848, ptr %13850, align 8, !tbaa !42
  store i32 0, ptr %1115, align 4, !tbaa !9
  br label %13851

13851:                                            ; preds = %14000, %13847
  %13852 = load i32, ptr %1115, align 4, !tbaa !9
  %13853 = load i32, ptr %25, align 4, !tbaa !9
  %13854 = icmp slt i32 %13852, %13853
  br i1 %13854, label %13855, label %14003

13855:                                            ; preds = %13851
  call void @llvm.lifetime.start.p0(i64 8, ptr %1135) #7
  store double 0.000000e+00, ptr %1135, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1136) #7
  store double 0.000000e+00, ptr %1136, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1137) #7
  store double 0.000000e+00, ptr %1137, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1138) #7
  store double 0.000000e+00, ptr %1138, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1139) #7
  store double 0.000000e+00, ptr %1139, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1140) #7
  store double 0.000000e+00, ptr %1140, align 8, !tbaa !17
  store i32 0, ptr %1114, align 4, !tbaa !9
  br label %13856

13856:                                            ; preds = %13974, %13855
  %13857 = load i32, ptr %1114, align 4, !tbaa !9
  %13858 = load i32, ptr %26, align 4, !tbaa !9
  %13859 = icmp slt i32 %13857, %13858
  br i1 %13859, label %13860, label %13977

13860:                                            ; preds = %13856
  call void @llvm.lifetime.start.p0(i64 8, ptr %1141) #7
  %13861 = load i64, ptr %1113, align 8, !tbaa !12
  %13862 = load i32, ptr %1114, align 4, !tbaa !9
  %13863 = load i32, ptr %25, align 4, !tbaa !9
  %13864 = mul nsw i32 %13862, %13863
  %13865 = load i32, ptr %1115, align 4, !tbaa !9
  %13866 = add nsw i32 %13864, %13865
  %13867 = sext i32 %13866 to i64
  %13868 = mul i64 %13861, %13867
  %13869 = load i64, ptr %1112, align 8, !tbaa !12
  %13870 = urem i64 %13868, %13869
  store i64 %13870, ptr %1141, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 4, ptr %1142) #7
  %13871 = load i64, ptr %1141, align 8, !tbaa !12
  %13872 = load i32, ptr %25, align 4, !tbaa !9
  %13873 = sext i32 %13872 to i64
  %13874 = udiv i64 %13871, %13873
  %13875 = trunc i64 %13874 to i32
  store i32 %13875, ptr %1142, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %1143) #7
  %13876 = load i64, ptr %1141, align 8, !tbaa !12
  %13877 = load i32, ptr %25, align 4, !tbaa !9
  %13878 = sext i32 %13877 to i64
  %13879 = urem i64 %13876, %13878
  %13880 = trunc i64 %13879 to i32
  store i32 %13880, ptr %1143, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %1144) #7
  %13881 = load ptr, ptr %1098, align 8, !tbaa !5
  %13882 = load i32, ptr %1142, align 4, !tbaa !9
  %13883 = load i32, ptr %20, align 4, !tbaa !9
  %13884 = mul nsw i32 %13882, %13883
  %13885 = load i32, ptr %1143, align 4, !tbaa !9
  %13886 = add nsw i32 %13884, %13885
  %13887 = sext i32 %13886 to i64
  %13888 = getelementptr inbounds i8, ptr %13881, i64 %13887
  %13889 = load i8, ptr %13888, align 1, !tbaa !11
  %13890 = call float @libxsmm_convert_bf8_to_f32(i8 noundef zeroext %13889)
  %13891 = fpext float %13890 to double
  store double %13891, ptr %1144, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1145) #7
  %13892 = load ptr, ptr %1099, align 8, !tbaa !5
  %13893 = icmp ne ptr null, %13892
  br i1 %13893, label %13894, label %13905

13894:                                            ; preds = %13860
  %13895 = load ptr, ptr %1099, align 8, !tbaa !5
  %13896 = load i32, ptr %1142, align 4, !tbaa !9
  %13897 = load i32, ptr %21, align 4, !tbaa !9
  %13898 = mul nsw i32 %13896, %13897
  %13899 = load i32, ptr %1143, align 4, !tbaa !9
  %13900 = add nsw i32 %13898, %13899
  %13901 = sext i32 %13900 to i64
  %13902 = getelementptr inbounds i8, ptr %13895, i64 %13901
  %13903 = load i8, ptr %13902, align 1, !tbaa !11
  %13904 = call float @libxsmm_convert_bf8_to_f32(i8 noundef zeroext %13903)
  br label %13906

13905:                                            ; preds = %13860
  br label %13906

13906:                                            ; preds = %13905, %13894
  %13907 = phi float [ %13904, %13894 ], [ 0.000000e+00, %13905 ]
  %13908 = fpext float %13907 to double
  store double %13908, ptr %1145, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1146) #7
  %13909 = load ptr, ptr %1099, align 8, !tbaa !5
  %13910 = icmp ne ptr null, %13909
  br i1 %13910, label %13911, label %13925

13911:                                            ; preds = %13906
  %13912 = load double, ptr %1144, align 8, !tbaa !17
  %13913 = load double, ptr %1145, align 8, !tbaa !17
  %13914 = fcmp olt double %13912, %13913
  br i1 %13914, label %13915, label %13919

13915:                                            ; preds = %13911
  %13916 = load double, ptr %1145, align 8, !tbaa !17
  %13917 = load double, ptr %1144, align 8, !tbaa !17
  %13918 = fsub double %13916, %13917
  br label %13923

13919:                                            ; preds = %13911
  %13920 = load double, ptr %1144, align 8, !tbaa !17
  %13921 = load double, ptr %1145, align 8, !tbaa !17
  %13922 = fsub double %13920, %13921
  br label %13923

13923:                                            ; preds = %13919, %13915
  %13924 = phi double [ %13918, %13915 ], [ %13922, %13919 ]
  br label %13926

13925:                                            ; preds = %13906
  br label %13926

13926:                                            ; preds = %13925, %13923
  %13927 = phi double [ %13924, %13923 ], [ 0.000000e+00, %13925 ]
  store double %13927, ptr %1146, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1147) #7
  %13928 = load double, ptr %1144, align 8, !tbaa !17
  %13929 = load ptr, ptr %9, align 8, !tbaa !5
  %13930 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %13929, i32 0, i32 13
  %13931 = load double, ptr %13930, align 8, !tbaa !37
  %13932 = fsub double %13928, %13931
  store double %13932, ptr %1147, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1148) #7
  %13933 = load double, ptr %1145, align 8, !tbaa !17
  %13934 = load ptr, ptr %9, align 8, !tbaa !5
  %13935 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %13934, i32 0, i32 18
  %13936 = load double, ptr %13935, align 8, !tbaa !39
  %13937 = fsub double %13933, %13936
  store double %13937, ptr %1148, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1149) #7
  %13938 = load double, ptr %1144, align 8, !tbaa !17
  %13939 = fcmp ole double 0.000000e+00, %13938
  br i1 %13939, label %13940, label %13942

13940:                                            ; preds = %13926
  %13941 = load double, ptr %1144, align 8, !tbaa !17
  br label %13945

13942:                                            ; preds = %13926
  %13943 = load double, ptr %1144, align 8, !tbaa !17
  %13944 = fneg double %13943
  br label %13945

13945:                                            ; preds = %13942, %13940
  %13946 = phi double [ %13941, %13940 ], [ %13944, %13942 ]
  store double %13946, ptr %1149, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1150) #7
  %13947 = load double, ptr %1145, align 8, !tbaa !17
  %13948 = fcmp ole double 0.000000e+00, %13947
  br i1 %13948, label %13949, label %13951

13949:                                            ; preds = %13945
  %13950 = load double, ptr %1145, align 8, !tbaa !17
  br label %13954

13951:                                            ; preds = %13945
  %13952 = load double, ptr %1145, align 8, !tbaa !17
  %13953 = fneg double %13952
  br label %13954

13954:                                            ; preds = %13951, %13949
  %13955 = phi double [ %13950, %13949 ], [ %13953, %13951 ]
  store double %13955, ptr %1150, align 8, !tbaa !17
  %13956 = load double, ptr %1147, align 8, !tbaa !17
  %13957 = load double, ptr %1147, align 8, !tbaa !17
  %13958 = fmul double %13956, %13957
  %13959 = load ptr, ptr %9, align 8, !tbaa !5
  %13960 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %13959, i32 0, i32 14
  %13961 = call double @libxsmm_kahan_sum(double noundef %13958, ptr noundef %13960, ptr noundef %1133)
  %13962 = load double, ptr %1148, align 8, !tbaa !17
  %13963 = load double, ptr %1148, align 8, !tbaa !17
  %13964 = fmul double %13962, %13963
  %13965 = load ptr, ptr %9, align 8, !tbaa !5
  %13966 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %13965, i32 0, i32 19
  %13967 = call double @libxsmm_kahan_sum(double noundef %13964, ptr noundef %13966, ptr noundef %1134)
  %13968 = load double, ptr %1149, align 8, !tbaa !17
  %13969 = call double @libxsmm_kahan_sum(double noundef %13968, ptr noundef %1138, ptr noundef %1135)
  %13970 = load double, ptr %1150, align 8, !tbaa !17
  %13971 = call double @libxsmm_kahan_sum(double noundef %13970, ptr noundef %1139, ptr noundef %1136)
  %13972 = load double, ptr %1146, align 8, !tbaa !17
  %13973 = call double @libxsmm_kahan_sum(double noundef %13972, ptr noundef %1140, ptr noundef %1137)
  call void @llvm.lifetime.end.p0(i64 8, ptr %1150) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1149) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1148) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1147) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1146) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1145) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1144) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %1143) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %1142) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1141) #7
  br label %13974

13974:                                            ; preds = %13954
  %13975 = load i32, ptr %1114, align 4, !tbaa !9
  %13976 = add nsw i32 %13975, 1
  store i32 %13976, ptr %1114, align 4, !tbaa !9
  br label %13856, !llvm.loop !133

13977:                                            ; preds = %13856
  %13978 = load ptr, ptr %9, align 8, !tbaa !5
  %13979 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %13978, i32 0, i32 0
  %13980 = load double, ptr %13979, align 8, !tbaa !44
  %13981 = load double, ptr %1140, align 8, !tbaa !17
  %13982 = fcmp olt double %13980, %13981
  br i1 %13982, label %13983, label %13987

13983:                                            ; preds = %13977
  %13984 = load double, ptr %1140, align 8, !tbaa !17
  %13985 = load ptr, ptr %9, align 8, !tbaa !5
  %13986 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %13985, i32 0, i32 0
  store double %13984, ptr %13986, align 8, !tbaa !44
  br label %13987

13987:                                            ; preds = %13983, %13977
  %13988 = load double, ptr %1107, align 8, !tbaa !17
  %13989 = load double, ptr %1138, align 8, !tbaa !17
  %13990 = fcmp olt double %13988, %13989
  br i1 %13990, label %13991, label %13993

13991:                                            ; preds = %13987
  %13992 = load double, ptr %1138, align 8, !tbaa !17
  store double %13992, ptr %1107, align 8, !tbaa !17
  br label %13993

13993:                                            ; preds = %13991, %13987
  %13994 = load double, ptr %1108, align 8, !tbaa !17
  %13995 = load double, ptr %1139, align 8, !tbaa !17
  %13996 = fcmp olt double %13994, %13995
  br i1 %13996, label %13997, label %13999

13997:                                            ; preds = %13993
  %13998 = load double, ptr %1139, align 8, !tbaa !17
  store double %13998, ptr %1108, align 8, !tbaa !17
  br label %13999

13999:                                            ; preds = %13997, %13993
  call void @llvm.lifetime.end.p0(i64 8, ptr %1140) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1139) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1138) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1137) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1136) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1135) #7
  br label %14000

14000:                                            ; preds = %13999
  %14001 = load i32, ptr %1115, align 4, !tbaa !9
  %14002 = add nsw i32 %14001, 1
  store i32 %14002, ptr %1115, align 4, !tbaa !9
  br label %13851, !llvm.loop !134

14003:                                            ; preds = %13851
  %14004 = load double, ptr %1107, align 8, !tbaa !17
  %14005 = fcmp oge double 0.000000e+00, %14004
  br i1 %14005, label %14006, label %14010

14006:                                            ; preds = %14003
  %14007 = load ptr, ptr %9, align 8, !tbaa !5
  %14008 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %14007, i32 0, i32 0
  %14009 = load double, ptr %14008, align 8, !tbaa !44
  br label %14022

14010:                                            ; preds = %14003
  %14011 = load ptr, ptr %9, align 8, !tbaa !5
  %14012 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %14011, i32 0, i32 0
  %14013 = load double, ptr %14012, align 8, !tbaa !44
  %14014 = load double, ptr %1107, align 8, !tbaa !17
  %14015 = fcmp olt double 0.000000e+00, %14014
  br i1 %14015, label %14016, label %14018

14016:                                            ; preds = %14010
  %14017 = load double, ptr %1107, align 8, !tbaa !17
  br label %14019

14018:                                            ; preds = %14010
  br label %14019

14019:                                            ; preds = %14018, %14016
  %14020 = phi double [ %14017, %14016 ], [ 1.000000e+00, %14018 ]
  %14021 = fdiv double %14013, %14020
  br label %14022

14022:                                            ; preds = %14019, %14006
  %14023 = phi double [ %14009, %14006 ], [ %14021, %14019 ]
  %14024 = load ptr, ptr %9, align 8, !tbaa !5
  %14025 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %14024, i32 0, i32 1
  store double %14023, ptr %14025, align 8, !tbaa !46
  call void @llvm.lifetime.end.p0(i64 8, ptr %1134) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1133) #7
  br label %14026

14026:                                            ; preds = %14022, %13757
  call void @llvm.lifetime.end.p0(i64 4, ptr %1115) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %1114) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1113) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1112) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1111) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1110) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1109) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1108) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1107) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1106) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1105) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1104) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1103) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1102) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1101) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1100) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1099) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1098) #7
  br label %14027

14027:                                            ; preds = %14026, %13426
  br label %15200

14028:                                            ; preds = %1323
  %14029 = load i32, ptr %23, align 4, !tbaa !9
  %14030 = icmp eq i32 0, %14029
  br i1 %14030, label %14031, label %14588

14031:                                            ; preds = %14028
  call void @llvm.lifetime.start.p0(i64 8, ptr %1151) #7
  %14032 = load ptr, ptr %13, align 8, !tbaa !5
  store ptr %14032, ptr %1151, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %1152) #7
  %14033 = load ptr, ptr %14, align 8, !tbaa !5
  store ptr %14033, ptr %1152, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %1153) #7
  store double 0.000000e+00, ptr %1153, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1154) #7
  store double 0.000000e+00, ptr %1154, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1155) #7
  store double 0.000000e+00, ptr %1155, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1156) #7
  store double 0.000000e+00, ptr %1156, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1157) #7
  store double 0.000000e+00, ptr %1157, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1158) #7
  store double 0.000000e+00, ptr %1158, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1159) #7
  store double 0.000000e+00, ptr %1159, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1160) #7
  store double 0.000000e+00, ptr %1160, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1161) #7
  store double 0.000000e+00, ptr %1161, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1162) #7
  store double 0.000000e+00, ptr %1162, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1163) #7
  store double 0.000000e+00, ptr %1163, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1164) #7
  store double 0.000000e+00, ptr %1164, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 4, ptr %1165) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %1166) #7
  store i32 0, ptr %1165, align 4, !tbaa !9
  br label %14034

14034:                                            ; preds = %14333, %14031
  %14035 = load i32, ptr %1165, align 4, !tbaa !9
  %14036 = load i32, ptr %26, align 4, !tbaa !9
  %14037 = icmp slt i32 %14035, %14036
  br i1 %14037, label %14038, label %14336

14038:                                            ; preds = %14034
  call void @llvm.lifetime.start.p0(i64 8, ptr %1167) #7
  store double 0.000000e+00, ptr %1167, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1168) #7
  store double 0.000000e+00, ptr %1168, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1169) #7
  store double 0.000000e+00, ptr %1169, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1170) #7
  store double 0.000000e+00, ptr %1170, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1171) #7
  store double 0.000000e+00, ptr %1171, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1172) #7
  store double 0.000000e+00, ptr %1172, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1173) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %1174) #7
  store i32 0, ptr %1166, align 4, !tbaa !9
  br label %14039

14039:                                            ; preds = %14291, %14038
  %14040 = load i32, ptr %1166, align 4, !tbaa !9
  %14041 = load i32, ptr %25, align 4, !tbaa !9
  %14042 = icmp slt i32 %14040, %14041
  br i1 %14042, label %14043, label %14294

14043:                                            ; preds = %14039
  call void @llvm.lifetime.start.p0(i64 4, ptr %1175) #7
  %14044 = load i32, ptr %1165, align 4, !tbaa !9
  store i32 %14044, ptr %1175, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %1176) #7
  %14045 = load i32, ptr %1166, align 4, !tbaa !9
  store i32 %14045, ptr %1176, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %1177) #7
  %14046 = load ptr, ptr %1152, align 8, !tbaa !5
  %14047 = icmp ne ptr null, %14046
  br i1 %14047, label %14048, label %14059

14048:                                            ; preds = %14043
  %14049 = load ptr, ptr %1152, align 8, !tbaa !5
  %14050 = load i32, ptr %1175, align 4, !tbaa !9
  %14051 = load i32, ptr %21, align 4, !tbaa !9
  %14052 = mul nsw i32 %14050, %14051
  %14053 = load i32, ptr %1176, align 4, !tbaa !9
  %14054 = add nsw i32 %14052, %14053
  %14055 = sext i32 %14054 to i64
  %14056 = getelementptr inbounds i8, ptr %14049, i64 %14055
  %14057 = load i8, ptr %14056, align 1, !tbaa !11
  %14058 = call float @libxsmm_convert_hf8_to_f32(i8 noundef zeroext %14057)
  br label %14060

14059:                                            ; preds = %14043
  br label %14060

14060:                                            ; preds = %14059, %14048
  %14061 = phi float [ %14058, %14048 ], [ 0.000000e+00, %14059 ]
  %14062 = fpext float %14061 to double
  store double %14062, ptr %1177, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1178) #7
  %14063 = load ptr, ptr %1151, align 8, !tbaa !5
  %14064 = load i32, ptr %1175, align 4, !tbaa !9
  %14065 = load i32, ptr %20, align 4, !tbaa !9
  %14066 = mul nsw i32 %14064, %14065
  %14067 = load i32, ptr %1176, align 4, !tbaa !9
  %14068 = add nsw i32 %14066, %14067
  %14069 = sext i32 %14068 to i64
  %14070 = getelementptr inbounds i8, ptr %14063, i64 %14069
  %14071 = load i8, ptr %14070, align 1, !tbaa !11
  %14072 = call float @libxsmm_convert_hf8_to_f32(i8 noundef zeroext %14071)
  %14073 = fpext float %14072 to double
  store double %14073, ptr %1178, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1179) #7
  %14074 = load double, ptr %1177, align 8, !tbaa !17
  %14075 = fcmp ole double 0.000000e+00, %14074
  br i1 %14075, label %14076, label %14078

14076:                                            ; preds = %14060
  %14077 = load double, ptr %1177, align 8, !tbaa !17
  br label %14081

14078:                                            ; preds = %14060
  %14079 = load double, ptr %1177, align 8, !tbaa !17
  %14080 = fneg double %14079
  br label %14081

14081:                                            ; preds = %14078, %14076
  %14082 = phi double [ %14077, %14076 ], [ %14080, %14078 ]
  store double %14082, ptr %1179, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1180) #7
  %14083 = load double, ptr %1178, align 8, !tbaa !17
  %14084 = fcmp ole double 0.000000e+00, %14083
  br i1 %14084, label %14085, label %14087

14085:                                            ; preds = %14081
  %14086 = load double, ptr %1178, align 8, !tbaa !17
  br label %14090

14087:                                            ; preds = %14081
  %14088 = load double, ptr %1178, align 8, !tbaa !17
  %14089 = fneg double %14088
  br label %14090

14090:                                            ; preds = %14087, %14085
  %14091 = phi double [ %14086, %14085 ], [ %14089, %14087 ]
  store double %14091, ptr %1180, align 8, !tbaa !17
  %14092 = load double, ptr %1178, align 8, !tbaa !17
  %14093 = load ptr, ptr %9, align 8, !tbaa !5
  %14094 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %14093, i32 0, i32 11
  %14095 = load double, ptr %14094, align 8, !tbaa !14
  %14096 = fcmp olt double %14092, %14095
  br i1 %14096, label %14097, label %14101

14097:                                            ; preds = %14090
  %14098 = load double, ptr %1178, align 8, !tbaa !17
  %14099 = load ptr, ptr %9, align 8, !tbaa !5
  %14100 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %14099, i32 0, i32 11
  store double %14098, ptr %14100, align 8, !tbaa !14
  br label %14101

14101:                                            ; preds = %14097, %14090
  %14102 = load double, ptr %1178, align 8, !tbaa !17
  %14103 = load ptr, ptr %9, align 8, !tbaa !5
  %14104 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %14103, i32 0, i32 12
  %14105 = load double, ptr %14104, align 8, !tbaa !20
  %14106 = fcmp ogt double %14102, %14105
  br i1 %14106, label %14107, label %14111

14107:                                            ; preds = %14101
  %14108 = load double, ptr %1178, align 8, !tbaa !17
  %14109 = load ptr, ptr %9, align 8, !tbaa !5
  %14110 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %14109, i32 0, i32 12
  store double %14108, ptr %14110, align 8, !tbaa !20
  br label %14111

14111:                                            ; preds = %14107, %14101
  %14112 = load double, ptr %1177, align 8, !tbaa !17
  %14113 = load double, ptr %1177, align 8, !tbaa !17
  %14114 = fcmp oeq double %14112, %14113
  br i1 %14114, label %14115, label %14263

14115:                                            ; preds = %14111
  %14116 = load double, ptr %27, align 8, !tbaa !17
  %14117 = load double, ptr %1179, align 8, !tbaa !17
  %14118 = fcmp ogt double %14116, %14117
  br i1 %14118, label %14123, label %14119

14119:                                            ; preds = %14115
  %14120 = load double, ptr %1177, align 8, !tbaa !17
  %14121 = load double, ptr %1178, align 8, !tbaa !17
  %14122 = fcmp oeq double %14120, %14121
  br i1 %14122, label %14123, label %14263

14123:                                            ; preds = %14119, %14115
  call void @llvm.lifetime.start.p0(i64 8, ptr %1181) #7
  %14124 = load ptr, ptr %1152, align 8, !tbaa !5
  %14125 = icmp ne ptr null, %14124
  br i1 %14125, label %14126, label %14140

14126:                                            ; preds = %14123
  %14127 = load double, ptr %1178, align 8, !tbaa !17
  %14128 = load double, ptr %1177, align 8, !tbaa !17
  %14129 = fcmp olt double %14127, %14128
  br i1 %14129, label %14130, label %14134

14130:                                            ; preds = %14126
  %14131 = load double, ptr %1177, align 8, !tbaa !17
  %14132 = load double, ptr %1178, align 8, !tbaa !17
  %14133 = fsub double %14131, %14132
  br label %14138

14134:                                            ; preds = %14126
  %14135 = load double, ptr %1178, align 8, !tbaa !17
  %14136 = load double, ptr %1177, align 8, !tbaa !17
  %14137 = fsub double %14135, %14136
  br label %14138

14138:                                            ; preds = %14134, %14130
  %14139 = phi double [ %14133, %14130 ], [ %14137, %14134 ]
  br label %14141

14140:                                            ; preds = %14123
  br label %14141

14141:                                            ; preds = %14140, %14138
  %14142 = phi double [ %14139, %14138 ], [ 0.000000e+00, %14140 ]
  store double %14142, ptr %1181, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1182) #7
  %14143 = load double, ptr %1180, align 8, !tbaa !17
  %14144 = fcmp oge double 0.000000e+00, %14143
  br i1 %14144, label %14145, label %14147

14145:                                            ; preds = %14141
  %14146 = load double, ptr %1179, align 8, !tbaa !17
  br label %14157

14147:                                            ; preds = %14141
  %14148 = load double, ptr %1181, align 8, !tbaa !17
  %14149 = load double, ptr %1180, align 8, !tbaa !17
  %14150 = fcmp olt double 0.000000e+00, %14149
  br i1 %14150, label %14151, label %14153

14151:                                            ; preds = %14147
  %14152 = load double, ptr %1180, align 8, !tbaa !17
  br label %14154

14153:                                            ; preds = %14147
  br label %14154

14154:                                            ; preds = %14153, %14151
  %14155 = phi double [ %14152, %14151 ], [ 1.000000e+00, %14153 ]
  %14156 = fdiv double %14148, %14155
  br label %14157

14157:                                            ; preds = %14154, %14145
  %14158 = phi double [ %14146, %14145 ], [ %14156, %14154 ]
  store double %14158, ptr %1182, align 8, !tbaa !17
  %14159 = load double, ptr %1177, align 8, !tbaa !17
  %14160 = load ptr, ptr %9, align 8, !tbaa !5
  %14161 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %14160, i32 0, i32 16
  %14162 = load double, ptr %14161, align 8, !tbaa !21
  %14163 = fcmp olt double %14159, %14162
  br i1 %14163, label %14164, label %14168

14164:                                            ; preds = %14157
  %14165 = load double, ptr %1177, align 8, !tbaa !17
  %14166 = load ptr, ptr %9, align 8, !tbaa !5
  %14167 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %14166, i32 0, i32 16
  store double %14165, ptr %14167, align 8, !tbaa !21
  br label %14168

14168:                                            ; preds = %14164, %14157
  %14169 = load double, ptr %1177, align 8, !tbaa !17
  %14170 = load ptr, ptr %9, align 8, !tbaa !5
  %14171 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %14170, i32 0, i32 17
  %14172 = load double, ptr %14171, align 8, !tbaa !22
  %14173 = fcmp ogt double %14169, %14172
  br i1 %14173, label %14174, label %14178

14174:                                            ; preds = %14168
  %14175 = load double, ptr %1177, align 8, !tbaa !17
  %14176 = load ptr, ptr %9, align 8, !tbaa !5
  %14177 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %14176, i32 0, i32 17
  store double %14175, ptr %14177, align 8, !tbaa !22
  br label %14178

14178:                                            ; preds = %14174, %14168
  %14179 = load ptr, ptr %9, align 8, !tbaa !5
  %14180 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %14179, i32 0, i32 5
  %14181 = load double, ptr %14180, align 8, !tbaa !23
  %14182 = load double, ptr %1181, align 8, !tbaa !17
  %14183 = fcmp olt double %14181, %14182
  br i1 %14183, label %14184, label %14200

14184:                                            ; preds = %14178
  %14185 = load double, ptr %1181, align 8, !tbaa !17
  %14186 = load ptr, ptr %9, align 8, !tbaa !5
  %14187 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %14186, i32 0, i32 5
  store double %14185, ptr %14187, align 8, !tbaa !23
  %14188 = load double, ptr %1178, align 8, !tbaa !17
  %14189 = load ptr, ptr %9, align 8, !tbaa !5
  %14190 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %14189, i32 0, i32 20
  store double %14188, ptr %14190, align 8, !tbaa !24
  %14191 = load double, ptr %1177, align 8, !tbaa !17
  %14192 = load ptr, ptr %9, align 8, !tbaa !5
  %14193 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %14192, i32 0, i32 21
  store double %14191, ptr %14193, align 8, !tbaa !25
  %14194 = load i32, ptr %1176, align 4, !tbaa !9
  %14195 = load ptr, ptr %9, align 8, !tbaa !5
  %14196 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %14195, i32 0, i32 22
  store i32 %14194, ptr %14196, align 8, !tbaa !26
  %14197 = load i32, ptr %1175, align 4, !tbaa !9
  %14198 = load ptr, ptr %9, align 8, !tbaa !5
  %14199 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %14198, i32 0, i32 23
  store i32 %14197, ptr %14199, align 4, !tbaa !27
  br label %14200

14200:                                            ; preds = %14184, %14178
  %14201 = load ptr, ptr %9, align 8, !tbaa !5
  %14202 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %14201, i32 0, i32 6
  %14203 = load double, ptr %14202, align 8, !tbaa !28
  %14204 = load double, ptr %1182, align 8, !tbaa !17
  %14205 = fcmp olt double %14203, %14204
  br i1 %14205, label %14206, label %14210

14206:                                            ; preds = %14200
  %14207 = load double, ptr %1182, align 8, !tbaa !17
  %14208 = load ptr, ptr %9, align 8, !tbaa !5
  %14209 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %14208, i32 0, i32 6
  store double %14207, ptr %14209, align 8, !tbaa !28
  br label %14210

14210:                                            ; preds = %14206, %14200
  %14211 = load double, ptr %1182, align 8, !tbaa !17
  %14212 = load double, ptr %1182, align 8, !tbaa !17
  %14213 = fmul double %14211, %14212
  store double %14213, ptr %1173, align 8, !tbaa !17
  %14214 = load double, ptr %27, align 8, !tbaa !17
  %14215 = load double, ptr %1173, align 8, !tbaa !17
  %14216 = fcmp ogt double %14214, %14215
  br i1 %14216, label %14217, label %14236

14217:                                            ; preds = %14210
  %14218 = load double, ptr %1164, align 8, !tbaa !17
  %14219 = load double, ptr %1173, align 8, !tbaa !17
  %14220 = fsub double %14219, %14218
  store double %14220, ptr %1173, align 8, !tbaa !17
  %14221 = load ptr, ptr %9, align 8, !tbaa !5
  %14222 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %14221, i32 0, i32 8
  %14223 = load double, ptr %14222, align 8, !tbaa !29
  %14224 = load double, ptr %1173, align 8, !tbaa !17
  %14225 = fadd double %14223, %14224
  store double %14225, ptr %1174, align 8, !tbaa !17
  %14226 = load double, ptr %1174, align 8, !tbaa !17
  %14227 = load ptr, ptr %9, align 8, !tbaa !5
  %14228 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %14227, i32 0, i32 8
  %14229 = load double, ptr %14228, align 8, !tbaa !29
  %14230 = fsub double %14226, %14229
  %14231 = load double, ptr %1173, align 8, !tbaa !17
  %14232 = fsub double %14230, %14231
  store double %14232, ptr %1164, align 8, !tbaa !17
  %14233 = load double, ptr %1174, align 8, !tbaa !17
  %14234 = load ptr, ptr %9, align 8, !tbaa !5
  %14235 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %14234, i32 0, i32 8
  store double %14233, ptr %14235, align 8, !tbaa !29
  br label %14236

14236:                                            ; preds = %14217, %14210
  %14237 = load double, ptr %1180, align 8, !tbaa !17
  %14238 = call double @libxsmm_kahan_sum(double noundef %14237, ptr noundef %1170, ptr noundef %1167)
  %14239 = load double, ptr %1179, align 8, !tbaa !17
  %14240 = call double @libxsmm_kahan_sum(double noundef %14239, ptr noundef %1171, ptr noundef %1168)
  %14241 = load double, ptr %1181, align 8, !tbaa !17
  %14242 = call double @libxsmm_kahan_sum(double noundef %14241, ptr noundef %1172, ptr noundef %1169)
  %14243 = load double, ptr %1178, align 8, !tbaa !17
  %14244 = load double, ptr %1178, align 8, !tbaa !17
  %14245 = fmul double %14243, %14244
  %14246 = call double @libxsmm_kahan_sum(double noundef %14245, ptr noundef %1156, ptr noundef %1154)
  %14247 = load double, ptr %1177, align 8, !tbaa !17
  %14248 = load double, ptr %1177, align 8, !tbaa !17
  %14249 = fmul double %14247, %14248
  %14250 = call double @libxsmm_kahan_sum(double noundef %14249, ptr noundef %1157, ptr noundef %1155)
  %14251 = load double, ptr %1181, align 8, !tbaa !17
  %14252 = load double, ptr %1181, align 8, !tbaa !17
  %14253 = fmul double %14251, %14252
  store double %14253, ptr %1173, align 8, !tbaa !17
  %14254 = load double, ptr %27, align 8, !tbaa !17
  %14255 = load double, ptr %1173, align 8, !tbaa !17
  %14256 = fcmp ogt double %14254, %14255
  br i1 %14256, label %14257, label %14262

14257:                                            ; preds = %14236
  %14258 = load double, ptr %1173, align 8, !tbaa !17
  %14259 = load ptr, ptr %9, align 8, !tbaa !5
  %14260 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %14259, i32 0, i32 7
  %14261 = call double @libxsmm_kahan_sum(double noundef %14258, ptr noundef %14260, ptr noundef %1153)
  br label %14262

14262:                                            ; preds = %14257, %14236
  call void @llvm.lifetime.end.p0(i64 8, ptr %1182) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1181) #7
  br label %14287

14263:                                            ; preds = %14119, %14111
  %14264 = load double, ptr %1178, align 8, !tbaa !17
  %14265 = load double, ptr %1178, align 8, !tbaa !17
  %14266 = fcmp oeq double %14264, %14265
  br i1 %14266, label %14267, label %14271

14267:                                            ; preds = %14263
  %14268 = load double, ptr %27, align 8, !tbaa !17
  %14269 = load double, ptr %1180, align 8, !tbaa !17
  %14270 = fcmp ogt double %14268, %14269
  br label %14271

14271:                                            ; preds = %14267, %14263
  %14272 = phi i1 [ false, %14263 ], [ %14270, %14267 ]
  %14273 = zext i1 %14272 to i64
  %14274 = select i1 %14272, i32 1, i32 2
  store i32 %14274, ptr %19, align 4, !tbaa !9
  %14275 = load i32, ptr %1176, align 4, !tbaa !9
  %14276 = load ptr, ptr %9, align 8, !tbaa !5
  %14277 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %14276, i32 0, i32 22
  store i32 %14275, ptr %14277, align 8, !tbaa !26
  %14278 = load i32, ptr %1175, align 4, !tbaa !9
  %14279 = load ptr, ptr %9, align 8, !tbaa !5
  %14280 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %14279, i32 0, i32 23
  store i32 %14278, ptr %14280, align 4, !tbaa !27
  %14281 = load double, ptr %1178, align 8, !tbaa !17
  %14282 = load ptr, ptr %9, align 8, !tbaa !5
  %14283 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %14282, i32 0, i32 20
  store double %14281, ptr %14283, align 8, !tbaa !24
  %14284 = load double, ptr %1177, align 8, !tbaa !17
  %14285 = load ptr, ptr %9, align 8, !tbaa !5
  %14286 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %14285, i32 0, i32 21
  store double %14284, ptr %14286, align 8, !tbaa !25
  store i32 270, ptr %60, align 4
  br label %14288

14287:                                            ; preds = %14262
  store i32 0, ptr %60, align 4
  br label %14288

14288:                                            ; preds = %14287, %14271
  call void @llvm.lifetime.end.p0(i64 8, ptr %1180) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1179) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1178) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1177) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %1176) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %1175) #7
  %14289 = load i32, ptr %60, align 4
  switch i32 %14289, label %15542 [
    i32 0, label %14290
    i32 270, label %14294
  ]

14290:                                            ; preds = %14288
  br label %14291

14291:                                            ; preds = %14290
  %14292 = load i32, ptr %1166, align 4, !tbaa !9
  %14293 = add nsw i32 %14292, 1
  store i32 %14293, ptr %1166, align 4, !tbaa !9
  br label %14039, !llvm.loop !135

14294:                                            ; preds = %14288, %14039
  %14295 = load i32, ptr %19, align 4, !tbaa !9
  %14296 = icmp eq i32 0, %14295
  br i1 %14296, label %14297, label %14328

14297:                                            ; preds = %14294
  %14298 = load double, ptr %1170, align 8, !tbaa !17
  %14299 = load ptr, ptr %9, align 8, !tbaa !5
  %14300 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %14299, i32 0, i32 10
  %14301 = call double @libxsmm_kahan_sum(double noundef %14298, ptr noundef %14300, ptr noundef %1162)
  %14302 = load double, ptr %1171, align 8, !tbaa !17
  %14303 = load ptr, ptr %9, align 8, !tbaa !5
  %14304 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %14303, i32 0, i32 15
  %14305 = call double @libxsmm_kahan_sum(double noundef %14302, ptr noundef %14304, ptr noundef %1163)
  %14306 = load ptr, ptr %9, align 8, !tbaa !5
  %14307 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %14306, i32 0, i32 2
  %14308 = load double, ptr %14307, align 8, !tbaa !32
  %14309 = load double, ptr %1172, align 8, !tbaa !17
  %14310 = fcmp olt double %14308, %14309
  br i1 %14310, label %14311, label %14315

14311:                                            ; preds = %14297
  %14312 = load double, ptr %1172, align 8, !tbaa !17
  %14313 = load ptr, ptr %9, align 8, !tbaa !5
  %14314 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %14313, i32 0, i32 2
  store double %14312, ptr %14314, align 8, !tbaa !32
  br label %14315

14315:                                            ; preds = %14311, %14297
  %14316 = load double, ptr %1158, align 8, !tbaa !17
  %14317 = load double, ptr %1170, align 8, !tbaa !17
  %14318 = fcmp olt double %14316, %14317
  br i1 %14318, label %14319, label %14321

14319:                                            ; preds = %14315
  %14320 = load double, ptr %1170, align 8, !tbaa !17
  store double %14320, ptr %1158, align 8, !tbaa !17
  br label %14321

14321:                                            ; preds = %14319, %14315
  %14322 = load double, ptr %1159, align 8, !tbaa !17
  %14323 = load double, ptr %1171, align 8, !tbaa !17
  %14324 = fcmp olt double %14322, %14323
  br i1 %14324, label %14325, label %14327

14325:                                            ; preds = %14321
  %14326 = load double, ptr %1171, align 8, !tbaa !17
  store double %14326, ptr %1159, align 8, !tbaa !17
  br label %14327

14327:                                            ; preds = %14325, %14321
  br label %14329

14328:                                            ; preds = %14294
  store i32 267, ptr %60, align 4
  br label %14330

14329:                                            ; preds = %14327
  store i32 0, ptr %60, align 4
  br label %14330

14330:                                            ; preds = %14329, %14328
  call void @llvm.lifetime.end.p0(i64 8, ptr %1174) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1173) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1172) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1171) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1170) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1169) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1168) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1167) #7
  %14331 = load i32, ptr %60, align 4
  switch i32 %14331, label %15542 [
    i32 0, label %14332
    i32 267, label %14336
  ]

14332:                                            ; preds = %14330
  br label %14333

14333:                                            ; preds = %14332
  %14334 = load i32, ptr %1165, align 4, !tbaa !9
  %14335 = add nsw i32 %14334, 1
  store i32 %14335, ptr %1165, align 4, !tbaa !9
  br label %14034, !llvm.loop !136

14336:                                            ; preds = %14330, %14034
  %14337 = load i32, ptr %19, align 4, !tbaa !9
  %14338 = icmp eq i32 0, %14337
  br i1 %14338, label %14339, label %14587

14339:                                            ; preds = %14336
  call void @llvm.lifetime.start.p0(i64 8, ptr %1183) #7
  store double 0.000000e+00, ptr %1183, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1184) #7
  store double 0.000000e+00, ptr %1184, align 8, !tbaa !17
  %14340 = load ptr, ptr %9, align 8, !tbaa !5
  %14341 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %14340, i32 0, i32 14
  %14342 = load double, ptr %14341, align 8, !tbaa !34
  %14343 = fcmp oeq double 0.000000e+00, %14342
  br i1 %14343, label %14344, label %14345

14344:                                            ; preds = %14339
  br label %14346

14345:                                            ; preds = %14339
  call void @__assert_fail(ptr noundef @.str.1, ptr noundef @.str.2, i32 noundef 130, ptr noundef @__PRETTY_FUNCTION__.libxsmm_matdiff) #9
  unreachable

14346:                                            ; preds = %14344
  %14347 = load ptr, ptr %9, align 8, !tbaa !5
  %14348 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %14347, i32 0, i32 19
  %14349 = load double, ptr %14348, align 8, !tbaa !35
  %14350 = fcmp oeq double 0.000000e+00, %14349
  br i1 %14350, label %14351, label %14352

14351:                                            ; preds = %14346
  br label %14353

14352:                                            ; preds = %14346
  call void @__assert_fail(ptr noundef @.str.3, ptr noundef @.str.2, i32 noundef 131, ptr noundef @__PRETTY_FUNCTION__.libxsmm_matdiff) #9
  unreachable

14353:                                            ; preds = %14351
  %14354 = load i64, ptr %24, align 8, !tbaa !12
  %14355 = icmp ne i64 0, %14354
  br i1 %14355, label %14356, label %14373

14356:                                            ; preds = %14353
  %14357 = load ptr, ptr %9, align 8, !tbaa !5
  %14358 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %14357, i32 0, i32 10
  %14359 = load double, ptr %14358, align 8, !tbaa !36
  %14360 = load i64, ptr %24, align 8, !tbaa !12
  %14361 = uitofp i64 %14360 to double
  %14362 = fdiv double %14359, %14361
  %14363 = load ptr, ptr %9, align 8, !tbaa !5
  %14364 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %14363, i32 0, i32 13
  store double %14362, ptr %14364, align 8, !tbaa !37
  %14365 = load ptr, ptr %9, align 8, !tbaa !5
  %14366 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %14365, i32 0, i32 15
  %14367 = load double, ptr %14366, align 8, !tbaa !38
  %14368 = load i64, ptr %24, align 8, !tbaa !12
  %14369 = uitofp i64 %14368 to double
  %14370 = fdiv double %14367, %14369
  %14371 = load ptr, ptr %9, align 8, !tbaa !5
  %14372 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %14371, i32 0, i32 18
  store double %14370, ptr %14372, align 8, !tbaa !39
  br label %14373

14373:                                            ; preds = %14356, %14353
  %14374 = load double, ptr %1158, align 8, !tbaa !17
  %14375 = fcmp oge double 0.000000e+00, %14374
  br i1 %14375, label %14376, label %14378

14376:                                            ; preds = %14373
  %14377 = load double, ptr %1159, align 8, !tbaa !17
  br label %14390

14378:                                            ; preds = %14373
  %14379 = load ptr, ptr %9, align 8, !tbaa !5
  %14380 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %14379, i32 0, i32 2
  %14381 = load double, ptr %14380, align 8, !tbaa !32
  %14382 = load double, ptr %1158, align 8, !tbaa !17
  %14383 = fcmp olt double 0.000000e+00, %14382
  br i1 %14383, label %14384, label %14386

14384:                                            ; preds = %14378
  %14385 = load double, ptr %1158, align 8, !tbaa !17
  br label %14387

14386:                                            ; preds = %14378
  br label %14387

14387:                                            ; preds = %14386, %14384
  %14388 = phi double [ %14385, %14384 ], [ 1.000000e+00, %14386 ]
  %14389 = fdiv double %14381, %14388
  br label %14390

14390:                                            ; preds = %14387, %14376
  %14391 = phi double [ %14377, %14376 ], [ %14389, %14387 ]
  %14392 = load ptr, ptr %9, align 8, !tbaa !5
  %14393 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %14392, i32 0, i32 3
  store double %14391, ptr %14393, align 8, !tbaa !40
  %14394 = load double, ptr %1156, align 8, !tbaa !17
  %14395 = fcmp oge double 0.000000e+00, %14394
  br i1 %14395, label %14396, label %14414

14396:                                            ; preds = %14390
  %14397 = load double, ptr %1157, align 8, !tbaa !17
  %14398 = load double, ptr %1157, align 8, !tbaa !17
  %14399 = fmul double %14397, %14398
  %14400 = load ptr, ptr %9, align 8, !tbaa !5
  %14401 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %14400, i32 0, i32 7
  %14402 = load double, ptr %14401, align 8, !tbaa !41
  %14403 = fcmp olt double %14399, %14402
  br i1 %14403, label %14404, label %14408

14404:                                            ; preds = %14396
  %14405 = load double, ptr %1157, align 8, !tbaa !17
  %14406 = load double, ptr %1157, align 8, !tbaa !17
  %14407 = fmul double %14405, %14406
  br label %14412

14408:                                            ; preds = %14396
  %14409 = load ptr, ptr %9, align 8, !tbaa !5
  %14410 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %14409, i32 0, i32 7
  %14411 = load double, ptr %14410, align 8, !tbaa !41
  br label %14412

14412:                                            ; preds = %14408, %14404
  %14413 = phi double [ %14407, %14404 ], [ %14411, %14408 ]
  br label %14426

14414:                                            ; preds = %14390
  %14415 = load ptr, ptr %9, align 8, !tbaa !5
  %14416 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %14415, i32 0, i32 7
  %14417 = load double, ptr %14416, align 8, !tbaa !41
  %14418 = load double, ptr %1156, align 8, !tbaa !17
  %14419 = fcmp olt double 0.000000e+00, %14418
  br i1 %14419, label %14420, label %14422

14420:                                            ; preds = %14414
  %14421 = load double, ptr %1156, align 8, !tbaa !17
  br label %14423

14422:                                            ; preds = %14414
  br label %14423

14423:                                            ; preds = %14422, %14420
  %14424 = phi double [ %14421, %14420 ], [ 1.000000e+00, %14422 ]
  %14425 = fdiv double %14417, %14424
  br label %14426

14426:                                            ; preds = %14423, %14412
  %14427 = phi double [ %14413, %14412 ], [ %14425, %14423 ]
  %14428 = load ptr, ptr %9, align 8, !tbaa !5
  %14429 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %14428, i32 0, i32 4
  store double %14427, ptr %14429, align 8, !tbaa !42
  store i32 0, ptr %1166, align 4, !tbaa !9
  br label %14430

14430:                                            ; preds = %14561, %14426
  %14431 = load i32, ptr %1166, align 4, !tbaa !9
  %14432 = load i32, ptr %25, align 4, !tbaa !9
  %14433 = icmp slt i32 %14431, %14432
  br i1 %14433, label %14434, label %14564

14434:                                            ; preds = %14430
  call void @llvm.lifetime.start.p0(i64 8, ptr %1185) #7
  store double 0.000000e+00, ptr %1185, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1186) #7
  store double 0.000000e+00, ptr %1186, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1187) #7
  store double 0.000000e+00, ptr %1187, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1188) #7
  store double 0.000000e+00, ptr %1188, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1189) #7
  store double 0.000000e+00, ptr %1189, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1190) #7
  store double 0.000000e+00, ptr %1190, align 8, !tbaa !17
  store i32 0, ptr %1165, align 4, !tbaa !9
  br label %14435

14435:                                            ; preds = %14535, %14434
  %14436 = load i32, ptr %1165, align 4, !tbaa !9
  %14437 = load i32, ptr %26, align 4, !tbaa !9
  %14438 = icmp slt i32 %14436, %14437
  br i1 %14438, label %14439, label %14538

14439:                                            ; preds = %14435
  call void @llvm.lifetime.start.p0(i64 4, ptr %1191) #7
  %14440 = load i32, ptr %1165, align 4, !tbaa !9
  store i32 %14440, ptr %1191, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %1192) #7
  %14441 = load i32, ptr %1166, align 4, !tbaa !9
  store i32 %14441, ptr %1192, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %1193) #7
  %14442 = load ptr, ptr %1151, align 8, !tbaa !5
  %14443 = load i32, ptr %1191, align 4, !tbaa !9
  %14444 = load i32, ptr %20, align 4, !tbaa !9
  %14445 = mul nsw i32 %14443, %14444
  %14446 = load i32, ptr %1192, align 4, !tbaa !9
  %14447 = add nsw i32 %14445, %14446
  %14448 = sext i32 %14447 to i64
  %14449 = getelementptr inbounds i8, ptr %14442, i64 %14448
  %14450 = load i8, ptr %14449, align 1, !tbaa !11
  %14451 = call float @libxsmm_convert_hf8_to_f32(i8 noundef zeroext %14450)
  %14452 = fpext float %14451 to double
  store double %14452, ptr %1193, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1194) #7
  %14453 = load ptr, ptr %1152, align 8, !tbaa !5
  %14454 = icmp ne ptr null, %14453
  br i1 %14454, label %14455, label %14466

14455:                                            ; preds = %14439
  %14456 = load ptr, ptr %1152, align 8, !tbaa !5
  %14457 = load i32, ptr %1191, align 4, !tbaa !9
  %14458 = load i32, ptr %21, align 4, !tbaa !9
  %14459 = mul nsw i32 %14457, %14458
  %14460 = load i32, ptr %1192, align 4, !tbaa !9
  %14461 = add nsw i32 %14459, %14460
  %14462 = sext i32 %14461 to i64
  %14463 = getelementptr inbounds i8, ptr %14456, i64 %14462
  %14464 = load i8, ptr %14463, align 1, !tbaa !11
  %14465 = call float @libxsmm_convert_hf8_to_f32(i8 noundef zeroext %14464)
  br label %14467

14466:                                            ; preds = %14439
  br label %14467

14467:                                            ; preds = %14466, %14455
  %14468 = phi float [ %14465, %14455 ], [ 0.000000e+00, %14466 ]
  %14469 = fpext float %14468 to double
  store double %14469, ptr %1194, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1195) #7
  %14470 = load ptr, ptr %1152, align 8, !tbaa !5
  %14471 = icmp ne ptr null, %14470
  br i1 %14471, label %14472, label %14486

14472:                                            ; preds = %14467
  %14473 = load double, ptr %1193, align 8, !tbaa !17
  %14474 = load double, ptr %1194, align 8, !tbaa !17
  %14475 = fcmp olt double %14473, %14474
  br i1 %14475, label %14476, label %14480

14476:                                            ; preds = %14472
  %14477 = load double, ptr %1194, align 8, !tbaa !17
  %14478 = load double, ptr %1193, align 8, !tbaa !17
  %14479 = fsub double %14477, %14478
  br label %14484

14480:                                            ; preds = %14472
  %14481 = load double, ptr %1193, align 8, !tbaa !17
  %14482 = load double, ptr %1194, align 8, !tbaa !17
  %14483 = fsub double %14481, %14482
  br label %14484

14484:                                            ; preds = %14480, %14476
  %14485 = phi double [ %14479, %14476 ], [ %14483, %14480 ]
  br label %14487

14486:                                            ; preds = %14467
  br label %14487

14487:                                            ; preds = %14486, %14484
  %14488 = phi double [ %14485, %14484 ], [ 0.000000e+00, %14486 ]
  store double %14488, ptr %1195, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1196) #7
  %14489 = load double, ptr %1193, align 8, !tbaa !17
  %14490 = load ptr, ptr %9, align 8, !tbaa !5
  %14491 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %14490, i32 0, i32 13
  %14492 = load double, ptr %14491, align 8, !tbaa !37
  %14493 = fsub double %14489, %14492
  store double %14493, ptr %1196, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1197) #7
  %14494 = load double, ptr %1194, align 8, !tbaa !17
  %14495 = load ptr, ptr %9, align 8, !tbaa !5
  %14496 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %14495, i32 0, i32 18
  %14497 = load double, ptr %14496, align 8, !tbaa !39
  %14498 = fsub double %14494, %14497
  store double %14498, ptr %1197, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1198) #7
  %14499 = load double, ptr %1193, align 8, !tbaa !17
  %14500 = fcmp ole double 0.000000e+00, %14499
  br i1 %14500, label %14501, label %14503

14501:                                            ; preds = %14487
  %14502 = load double, ptr %1193, align 8, !tbaa !17
  br label %14506

14503:                                            ; preds = %14487
  %14504 = load double, ptr %1193, align 8, !tbaa !17
  %14505 = fneg double %14504
  br label %14506

14506:                                            ; preds = %14503, %14501
  %14507 = phi double [ %14502, %14501 ], [ %14505, %14503 ]
  store double %14507, ptr %1198, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1199) #7
  %14508 = load double, ptr %1194, align 8, !tbaa !17
  %14509 = fcmp ole double 0.000000e+00, %14508
  br i1 %14509, label %14510, label %14512

14510:                                            ; preds = %14506
  %14511 = load double, ptr %1194, align 8, !tbaa !17
  br label %14515

14512:                                            ; preds = %14506
  %14513 = load double, ptr %1194, align 8, !tbaa !17
  %14514 = fneg double %14513
  br label %14515

14515:                                            ; preds = %14512, %14510
  %14516 = phi double [ %14511, %14510 ], [ %14514, %14512 ]
  store double %14516, ptr %1199, align 8, !tbaa !17
  %14517 = load double, ptr %1196, align 8, !tbaa !17
  %14518 = load double, ptr %1196, align 8, !tbaa !17
  %14519 = fmul double %14517, %14518
  %14520 = load ptr, ptr %9, align 8, !tbaa !5
  %14521 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %14520, i32 0, i32 14
  %14522 = call double @libxsmm_kahan_sum(double noundef %14519, ptr noundef %14521, ptr noundef %1183)
  %14523 = load double, ptr %1197, align 8, !tbaa !17
  %14524 = load double, ptr %1197, align 8, !tbaa !17
  %14525 = fmul double %14523, %14524
  %14526 = load ptr, ptr %9, align 8, !tbaa !5
  %14527 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %14526, i32 0, i32 19
  %14528 = call double @libxsmm_kahan_sum(double noundef %14525, ptr noundef %14527, ptr noundef %1184)
  %14529 = load double, ptr %1198, align 8, !tbaa !17
  %14530 = call double @libxsmm_kahan_sum(double noundef %14529, ptr noundef %1188, ptr noundef %1185)
  %14531 = load double, ptr %1199, align 8, !tbaa !17
  %14532 = call double @libxsmm_kahan_sum(double noundef %14531, ptr noundef %1189, ptr noundef %1186)
  %14533 = load double, ptr %1195, align 8, !tbaa !17
  %14534 = call double @libxsmm_kahan_sum(double noundef %14533, ptr noundef %1190, ptr noundef %1187)
  call void @llvm.lifetime.end.p0(i64 8, ptr %1199) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1198) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1197) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1196) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1195) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1194) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1193) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %1192) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %1191) #7
  br label %14535

14535:                                            ; preds = %14515
  %14536 = load i32, ptr %1165, align 4, !tbaa !9
  %14537 = add nsw i32 %14536, 1
  store i32 %14537, ptr %1165, align 4, !tbaa !9
  br label %14435, !llvm.loop !137

14538:                                            ; preds = %14435
  %14539 = load ptr, ptr %9, align 8, !tbaa !5
  %14540 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %14539, i32 0, i32 0
  %14541 = load double, ptr %14540, align 8, !tbaa !44
  %14542 = load double, ptr %1190, align 8, !tbaa !17
  %14543 = fcmp olt double %14541, %14542
  br i1 %14543, label %14544, label %14548

14544:                                            ; preds = %14538
  %14545 = load double, ptr %1190, align 8, !tbaa !17
  %14546 = load ptr, ptr %9, align 8, !tbaa !5
  %14547 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %14546, i32 0, i32 0
  store double %14545, ptr %14547, align 8, !tbaa !44
  br label %14548

14548:                                            ; preds = %14544, %14538
  %14549 = load double, ptr %1160, align 8, !tbaa !17
  %14550 = load double, ptr %1188, align 8, !tbaa !17
  %14551 = fcmp olt double %14549, %14550
  br i1 %14551, label %14552, label %14554

14552:                                            ; preds = %14548
  %14553 = load double, ptr %1188, align 8, !tbaa !17
  store double %14553, ptr %1160, align 8, !tbaa !17
  br label %14554

14554:                                            ; preds = %14552, %14548
  %14555 = load double, ptr %1161, align 8, !tbaa !17
  %14556 = load double, ptr %1189, align 8, !tbaa !17
  %14557 = fcmp olt double %14555, %14556
  br i1 %14557, label %14558, label %14560

14558:                                            ; preds = %14554
  %14559 = load double, ptr %1189, align 8, !tbaa !17
  store double %14559, ptr %1161, align 8, !tbaa !17
  br label %14560

14560:                                            ; preds = %14558, %14554
  call void @llvm.lifetime.end.p0(i64 8, ptr %1190) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1189) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1188) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1187) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1186) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1185) #7
  br label %14561

14561:                                            ; preds = %14560
  %14562 = load i32, ptr %1166, align 4, !tbaa !9
  %14563 = add nsw i32 %14562, 1
  store i32 %14563, ptr %1166, align 4, !tbaa !9
  br label %14430, !llvm.loop !138

14564:                                            ; preds = %14430
  %14565 = load double, ptr %1160, align 8, !tbaa !17
  %14566 = fcmp oge double 0.000000e+00, %14565
  br i1 %14566, label %14567, label %14571

14567:                                            ; preds = %14564
  %14568 = load ptr, ptr %9, align 8, !tbaa !5
  %14569 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %14568, i32 0, i32 0
  %14570 = load double, ptr %14569, align 8, !tbaa !44
  br label %14583

14571:                                            ; preds = %14564
  %14572 = load ptr, ptr %9, align 8, !tbaa !5
  %14573 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %14572, i32 0, i32 0
  %14574 = load double, ptr %14573, align 8, !tbaa !44
  %14575 = load double, ptr %1160, align 8, !tbaa !17
  %14576 = fcmp olt double 0.000000e+00, %14575
  br i1 %14576, label %14577, label %14579

14577:                                            ; preds = %14571
  %14578 = load double, ptr %1160, align 8, !tbaa !17
  br label %14580

14579:                                            ; preds = %14571
  br label %14580

14580:                                            ; preds = %14579, %14577
  %14581 = phi double [ %14578, %14577 ], [ 1.000000e+00, %14579 ]
  %14582 = fdiv double %14574, %14581
  br label %14583

14583:                                            ; preds = %14580, %14567
  %14584 = phi double [ %14570, %14567 ], [ %14582, %14580 ]
  %14585 = load ptr, ptr %9, align 8, !tbaa !5
  %14586 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %14585, i32 0, i32 1
  store double %14584, ptr %14586, align 8, !tbaa !46
  call void @llvm.lifetime.end.p0(i64 8, ptr %1184) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1183) #7
  br label %14587

14587:                                            ; preds = %14583, %14336
  call void @llvm.lifetime.end.p0(i64 4, ptr %1166) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %1165) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1164) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1163) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1162) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1161) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1160) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1159) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1158) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1157) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1156) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1155) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1154) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1153) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1152) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1151) #7
  br label %15188

14588:                                            ; preds = %14028
  call void @llvm.lifetime.start.p0(i64 8, ptr %1200) #7
  %14589 = load ptr, ptr %13, align 8, !tbaa !5
  store ptr %14589, ptr %1200, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %1201) #7
  %14590 = load ptr, ptr %14, align 8, !tbaa !5
  store ptr %14590, ptr %1201, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %1202) #7
  store double 0.000000e+00, ptr %1202, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1203) #7
  store double 0.000000e+00, ptr %1203, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1204) #7
  store double 0.000000e+00, ptr %1204, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1205) #7
  store double 0.000000e+00, ptr %1205, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1206) #7
  store double 0.000000e+00, ptr %1206, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1207) #7
  store double 0.000000e+00, ptr %1207, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1208) #7
  store double 0.000000e+00, ptr %1208, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1209) #7
  store double 0.000000e+00, ptr %1209, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1210) #7
  store double 0.000000e+00, ptr %1210, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1211) #7
  store double 0.000000e+00, ptr %1211, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1212) #7
  store double 0.000000e+00, ptr %1212, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1213) #7
  store double 0.000000e+00, ptr %1213, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1214) #7
  %14591 = load i32, ptr %25, align 4, !tbaa !9
  %14592 = sext i32 %14591 to i64
  %14593 = load i32, ptr %26, align 4, !tbaa !9
  %14594 = sext i32 %14593 to i64
  %14595 = mul i64 %14592, %14594
  store i64 %14595, ptr %1214, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 8, ptr %1215) #7
  %14596 = load i64, ptr %1214, align 8, !tbaa !12
  %14597 = call i64 @libxsmm_coprime2(i64 noundef %14596)
  store i64 %14597, ptr %1215, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 4, ptr %1216) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %1217) #7
  store i32 0, ptr %1216, align 4, !tbaa !9
  br label %14598

14598:                                            ; preds = %14915, %14588
  %14599 = load i32, ptr %1216, align 4, !tbaa !9
  %14600 = load i32, ptr %26, align 4, !tbaa !9
  %14601 = icmp slt i32 %14599, %14600
  br i1 %14601, label %14602, label %14918

14602:                                            ; preds = %14598
  call void @llvm.lifetime.start.p0(i64 8, ptr %1218) #7
  store double 0.000000e+00, ptr %1218, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1219) #7
  store double 0.000000e+00, ptr %1219, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1220) #7
  store double 0.000000e+00, ptr %1220, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1221) #7
  store double 0.000000e+00, ptr %1221, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1222) #7
  store double 0.000000e+00, ptr %1222, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1223) #7
  store double 0.000000e+00, ptr %1223, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1224) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %1225) #7
  store i32 0, ptr %1217, align 4, !tbaa !9
  br label %14603

14603:                                            ; preds = %14873, %14602
  %14604 = load i32, ptr %1217, align 4, !tbaa !9
  %14605 = load i32, ptr %25, align 4, !tbaa !9
  %14606 = icmp slt i32 %14604, %14605
  br i1 %14606, label %14607, label %14876

14607:                                            ; preds = %14603
  call void @llvm.lifetime.start.p0(i64 8, ptr %1226) #7
  %14608 = load i64, ptr %1215, align 8, !tbaa !12
  %14609 = load i32, ptr %1216, align 4, !tbaa !9
  %14610 = load i32, ptr %25, align 4, !tbaa !9
  %14611 = mul nsw i32 %14609, %14610
  %14612 = load i32, ptr %1217, align 4, !tbaa !9
  %14613 = add nsw i32 %14611, %14612
  %14614 = sext i32 %14613 to i64
  %14615 = mul i64 %14608, %14614
  %14616 = load i64, ptr %1214, align 8, !tbaa !12
  %14617 = urem i64 %14615, %14616
  store i64 %14617, ptr %1226, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 4, ptr %1227) #7
  %14618 = load i64, ptr %1226, align 8, !tbaa !12
  %14619 = load i32, ptr %25, align 4, !tbaa !9
  %14620 = sext i32 %14619 to i64
  %14621 = udiv i64 %14618, %14620
  %14622 = trunc i64 %14621 to i32
  store i32 %14622, ptr %1227, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %1228) #7
  %14623 = load i64, ptr %1226, align 8, !tbaa !12
  %14624 = load i32, ptr %25, align 4, !tbaa !9
  %14625 = sext i32 %14624 to i64
  %14626 = urem i64 %14623, %14625
  %14627 = trunc i64 %14626 to i32
  store i32 %14627, ptr %1228, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %1229) #7
  %14628 = load ptr, ptr %1201, align 8, !tbaa !5
  %14629 = icmp ne ptr null, %14628
  br i1 %14629, label %14630, label %14641

14630:                                            ; preds = %14607
  %14631 = load ptr, ptr %1201, align 8, !tbaa !5
  %14632 = load i32, ptr %1227, align 4, !tbaa !9
  %14633 = load i32, ptr %21, align 4, !tbaa !9
  %14634 = mul nsw i32 %14632, %14633
  %14635 = load i32, ptr %1228, align 4, !tbaa !9
  %14636 = add nsw i32 %14634, %14635
  %14637 = sext i32 %14636 to i64
  %14638 = getelementptr inbounds i8, ptr %14631, i64 %14637
  %14639 = load i8, ptr %14638, align 1, !tbaa !11
  %14640 = call float @libxsmm_convert_hf8_to_f32(i8 noundef zeroext %14639)
  br label %14642

14641:                                            ; preds = %14607
  br label %14642

14642:                                            ; preds = %14641, %14630
  %14643 = phi float [ %14640, %14630 ], [ 0.000000e+00, %14641 ]
  %14644 = fpext float %14643 to double
  store double %14644, ptr %1229, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1230) #7
  %14645 = load ptr, ptr %1200, align 8, !tbaa !5
  %14646 = load i32, ptr %1227, align 4, !tbaa !9
  %14647 = load i32, ptr %20, align 4, !tbaa !9
  %14648 = mul nsw i32 %14646, %14647
  %14649 = load i32, ptr %1228, align 4, !tbaa !9
  %14650 = add nsw i32 %14648, %14649
  %14651 = sext i32 %14650 to i64
  %14652 = getelementptr inbounds i8, ptr %14645, i64 %14651
  %14653 = load i8, ptr %14652, align 1, !tbaa !11
  %14654 = call float @libxsmm_convert_hf8_to_f32(i8 noundef zeroext %14653)
  %14655 = fpext float %14654 to double
  store double %14655, ptr %1230, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1231) #7
  %14656 = load double, ptr %1229, align 8, !tbaa !17
  %14657 = fcmp ole double 0.000000e+00, %14656
  br i1 %14657, label %14658, label %14660

14658:                                            ; preds = %14642
  %14659 = load double, ptr %1229, align 8, !tbaa !17
  br label %14663

14660:                                            ; preds = %14642
  %14661 = load double, ptr %1229, align 8, !tbaa !17
  %14662 = fneg double %14661
  br label %14663

14663:                                            ; preds = %14660, %14658
  %14664 = phi double [ %14659, %14658 ], [ %14662, %14660 ]
  store double %14664, ptr %1231, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1232) #7
  %14665 = load double, ptr %1230, align 8, !tbaa !17
  %14666 = fcmp ole double 0.000000e+00, %14665
  br i1 %14666, label %14667, label %14669

14667:                                            ; preds = %14663
  %14668 = load double, ptr %1230, align 8, !tbaa !17
  br label %14672

14669:                                            ; preds = %14663
  %14670 = load double, ptr %1230, align 8, !tbaa !17
  %14671 = fneg double %14670
  br label %14672

14672:                                            ; preds = %14669, %14667
  %14673 = phi double [ %14668, %14667 ], [ %14671, %14669 ]
  store double %14673, ptr %1232, align 8, !tbaa !17
  %14674 = load double, ptr %1230, align 8, !tbaa !17
  %14675 = load ptr, ptr %9, align 8, !tbaa !5
  %14676 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %14675, i32 0, i32 11
  %14677 = load double, ptr %14676, align 8, !tbaa !14
  %14678 = fcmp olt double %14674, %14677
  br i1 %14678, label %14679, label %14683

14679:                                            ; preds = %14672
  %14680 = load double, ptr %1230, align 8, !tbaa !17
  %14681 = load ptr, ptr %9, align 8, !tbaa !5
  %14682 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %14681, i32 0, i32 11
  store double %14680, ptr %14682, align 8, !tbaa !14
  br label %14683

14683:                                            ; preds = %14679, %14672
  %14684 = load double, ptr %1230, align 8, !tbaa !17
  %14685 = load ptr, ptr %9, align 8, !tbaa !5
  %14686 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %14685, i32 0, i32 12
  %14687 = load double, ptr %14686, align 8, !tbaa !20
  %14688 = fcmp ogt double %14684, %14687
  br i1 %14688, label %14689, label %14693

14689:                                            ; preds = %14683
  %14690 = load double, ptr %1230, align 8, !tbaa !17
  %14691 = load ptr, ptr %9, align 8, !tbaa !5
  %14692 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %14691, i32 0, i32 12
  store double %14690, ptr %14692, align 8, !tbaa !20
  br label %14693

14693:                                            ; preds = %14689, %14683
  %14694 = load double, ptr %1229, align 8, !tbaa !17
  %14695 = load double, ptr %1229, align 8, !tbaa !17
  %14696 = fcmp oeq double %14694, %14695
  br i1 %14696, label %14697, label %14845

14697:                                            ; preds = %14693
  %14698 = load double, ptr %27, align 8, !tbaa !17
  %14699 = load double, ptr %1231, align 8, !tbaa !17
  %14700 = fcmp ogt double %14698, %14699
  br i1 %14700, label %14705, label %14701

14701:                                            ; preds = %14697
  %14702 = load double, ptr %1229, align 8, !tbaa !17
  %14703 = load double, ptr %1230, align 8, !tbaa !17
  %14704 = fcmp oeq double %14702, %14703
  br i1 %14704, label %14705, label %14845

14705:                                            ; preds = %14701, %14697
  call void @llvm.lifetime.start.p0(i64 8, ptr %1233) #7
  %14706 = load ptr, ptr %1201, align 8, !tbaa !5
  %14707 = icmp ne ptr null, %14706
  br i1 %14707, label %14708, label %14722

14708:                                            ; preds = %14705
  %14709 = load double, ptr %1230, align 8, !tbaa !17
  %14710 = load double, ptr %1229, align 8, !tbaa !17
  %14711 = fcmp olt double %14709, %14710
  br i1 %14711, label %14712, label %14716

14712:                                            ; preds = %14708
  %14713 = load double, ptr %1229, align 8, !tbaa !17
  %14714 = load double, ptr %1230, align 8, !tbaa !17
  %14715 = fsub double %14713, %14714
  br label %14720

14716:                                            ; preds = %14708
  %14717 = load double, ptr %1230, align 8, !tbaa !17
  %14718 = load double, ptr %1229, align 8, !tbaa !17
  %14719 = fsub double %14717, %14718
  br label %14720

14720:                                            ; preds = %14716, %14712
  %14721 = phi double [ %14715, %14712 ], [ %14719, %14716 ]
  br label %14723

14722:                                            ; preds = %14705
  br label %14723

14723:                                            ; preds = %14722, %14720
  %14724 = phi double [ %14721, %14720 ], [ 0.000000e+00, %14722 ]
  store double %14724, ptr %1233, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1234) #7
  %14725 = load double, ptr %1232, align 8, !tbaa !17
  %14726 = fcmp oge double 0.000000e+00, %14725
  br i1 %14726, label %14727, label %14729

14727:                                            ; preds = %14723
  %14728 = load double, ptr %1231, align 8, !tbaa !17
  br label %14739

14729:                                            ; preds = %14723
  %14730 = load double, ptr %1233, align 8, !tbaa !17
  %14731 = load double, ptr %1232, align 8, !tbaa !17
  %14732 = fcmp olt double 0.000000e+00, %14731
  br i1 %14732, label %14733, label %14735

14733:                                            ; preds = %14729
  %14734 = load double, ptr %1232, align 8, !tbaa !17
  br label %14736

14735:                                            ; preds = %14729
  br label %14736

14736:                                            ; preds = %14735, %14733
  %14737 = phi double [ %14734, %14733 ], [ 1.000000e+00, %14735 ]
  %14738 = fdiv double %14730, %14737
  br label %14739

14739:                                            ; preds = %14736, %14727
  %14740 = phi double [ %14728, %14727 ], [ %14738, %14736 ]
  store double %14740, ptr %1234, align 8, !tbaa !17
  %14741 = load double, ptr %1229, align 8, !tbaa !17
  %14742 = load ptr, ptr %9, align 8, !tbaa !5
  %14743 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %14742, i32 0, i32 16
  %14744 = load double, ptr %14743, align 8, !tbaa !21
  %14745 = fcmp olt double %14741, %14744
  br i1 %14745, label %14746, label %14750

14746:                                            ; preds = %14739
  %14747 = load double, ptr %1229, align 8, !tbaa !17
  %14748 = load ptr, ptr %9, align 8, !tbaa !5
  %14749 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %14748, i32 0, i32 16
  store double %14747, ptr %14749, align 8, !tbaa !21
  br label %14750

14750:                                            ; preds = %14746, %14739
  %14751 = load double, ptr %1229, align 8, !tbaa !17
  %14752 = load ptr, ptr %9, align 8, !tbaa !5
  %14753 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %14752, i32 0, i32 17
  %14754 = load double, ptr %14753, align 8, !tbaa !22
  %14755 = fcmp ogt double %14751, %14754
  br i1 %14755, label %14756, label %14760

14756:                                            ; preds = %14750
  %14757 = load double, ptr %1229, align 8, !tbaa !17
  %14758 = load ptr, ptr %9, align 8, !tbaa !5
  %14759 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %14758, i32 0, i32 17
  store double %14757, ptr %14759, align 8, !tbaa !22
  br label %14760

14760:                                            ; preds = %14756, %14750
  %14761 = load ptr, ptr %9, align 8, !tbaa !5
  %14762 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %14761, i32 0, i32 5
  %14763 = load double, ptr %14762, align 8, !tbaa !23
  %14764 = load double, ptr %1233, align 8, !tbaa !17
  %14765 = fcmp olt double %14763, %14764
  br i1 %14765, label %14766, label %14782

14766:                                            ; preds = %14760
  %14767 = load double, ptr %1233, align 8, !tbaa !17
  %14768 = load ptr, ptr %9, align 8, !tbaa !5
  %14769 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %14768, i32 0, i32 5
  store double %14767, ptr %14769, align 8, !tbaa !23
  %14770 = load double, ptr %1230, align 8, !tbaa !17
  %14771 = load ptr, ptr %9, align 8, !tbaa !5
  %14772 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %14771, i32 0, i32 20
  store double %14770, ptr %14772, align 8, !tbaa !24
  %14773 = load double, ptr %1229, align 8, !tbaa !17
  %14774 = load ptr, ptr %9, align 8, !tbaa !5
  %14775 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %14774, i32 0, i32 21
  store double %14773, ptr %14775, align 8, !tbaa !25
  %14776 = load i32, ptr %1228, align 4, !tbaa !9
  %14777 = load ptr, ptr %9, align 8, !tbaa !5
  %14778 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %14777, i32 0, i32 22
  store i32 %14776, ptr %14778, align 8, !tbaa !26
  %14779 = load i32, ptr %1227, align 4, !tbaa !9
  %14780 = load ptr, ptr %9, align 8, !tbaa !5
  %14781 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %14780, i32 0, i32 23
  store i32 %14779, ptr %14781, align 4, !tbaa !27
  br label %14782

14782:                                            ; preds = %14766, %14760
  %14783 = load ptr, ptr %9, align 8, !tbaa !5
  %14784 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %14783, i32 0, i32 6
  %14785 = load double, ptr %14784, align 8, !tbaa !28
  %14786 = load double, ptr %1234, align 8, !tbaa !17
  %14787 = fcmp olt double %14785, %14786
  br i1 %14787, label %14788, label %14792

14788:                                            ; preds = %14782
  %14789 = load double, ptr %1234, align 8, !tbaa !17
  %14790 = load ptr, ptr %9, align 8, !tbaa !5
  %14791 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %14790, i32 0, i32 6
  store double %14789, ptr %14791, align 8, !tbaa !28
  br label %14792

14792:                                            ; preds = %14788, %14782
  %14793 = load double, ptr %1234, align 8, !tbaa !17
  %14794 = load double, ptr %1234, align 8, !tbaa !17
  %14795 = fmul double %14793, %14794
  store double %14795, ptr %1224, align 8, !tbaa !17
  %14796 = load double, ptr %27, align 8, !tbaa !17
  %14797 = load double, ptr %1224, align 8, !tbaa !17
  %14798 = fcmp ogt double %14796, %14797
  br i1 %14798, label %14799, label %14818

14799:                                            ; preds = %14792
  %14800 = load double, ptr %1213, align 8, !tbaa !17
  %14801 = load double, ptr %1224, align 8, !tbaa !17
  %14802 = fsub double %14801, %14800
  store double %14802, ptr %1224, align 8, !tbaa !17
  %14803 = load ptr, ptr %9, align 8, !tbaa !5
  %14804 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %14803, i32 0, i32 8
  %14805 = load double, ptr %14804, align 8, !tbaa !29
  %14806 = load double, ptr %1224, align 8, !tbaa !17
  %14807 = fadd double %14805, %14806
  store double %14807, ptr %1225, align 8, !tbaa !17
  %14808 = load double, ptr %1225, align 8, !tbaa !17
  %14809 = load ptr, ptr %9, align 8, !tbaa !5
  %14810 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %14809, i32 0, i32 8
  %14811 = load double, ptr %14810, align 8, !tbaa !29
  %14812 = fsub double %14808, %14811
  %14813 = load double, ptr %1224, align 8, !tbaa !17
  %14814 = fsub double %14812, %14813
  store double %14814, ptr %1213, align 8, !tbaa !17
  %14815 = load double, ptr %1225, align 8, !tbaa !17
  %14816 = load ptr, ptr %9, align 8, !tbaa !5
  %14817 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %14816, i32 0, i32 8
  store double %14815, ptr %14817, align 8, !tbaa !29
  br label %14818

14818:                                            ; preds = %14799, %14792
  %14819 = load double, ptr %1232, align 8, !tbaa !17
  %14820 = call double @libxsmm_kahan_sum(double noundef %14819, ptr noundef %1221, ptr noundef %1218)
  %14821 = load double, ptr %1231, align 8, !tbaa !17
  %14822 = call double @libxsmm_kahan_sum(double noundef %14821, ptr noundef %1222, ptr noundef %1219)
  %14823 = load double, ptr %1233, align 8, !tbaa !17
  %14824 = call double @libxsmm_kahan_sum(double noundef %14823, ptr noundef %1223, ptr noundef %1220)
  %14825 = load double, ptr %1230, align 8, !tbaa !17
  %14826 = load double, ptr %1230, align 8, !tbaa !17
  %14827 = fmul double %14825, %14826
  %14828 = call double @libxsmm_kahan_sum(double noundef %14827, ptr noundef %1205, ptr noundef %1203)
  %14829 = load double, ptr %1229, align 8, !tbaa !17
  %14830 = load double, ptr %1229, align 8, !tbaa !17
  %14831 = fmul double %14829, %14830
  %14832 = call double @libxsmm_kahan_sum(double noundef %14831, ptr noundef %1206, ptr noundef %1204)
  %14833 = load double, ptr %1233, align 8, !tbaa !17
  %14834 = load double, ptr %1233, align 8, !tbaa !17
  %14835 = fmul double %14833, %14834
  store double %14835, ptr %1224, align 8, !tbaa !17
  %14836 = load double, ptr %27, align 8, !tbaa !17
  %14837 = load double, ptr %1224, align 8, !tbaa !17
  %14838 = fcmp ogt double %14836, %14837
  br i1 %14838, label %14839, label %14844

14839:                                            ; preds = %14818
  %14840 = load double, ptr %1224, align 8, !tbaa !17
  %14841 = load ptr, ptr %9, align 8, !tbaa !5
  %14842 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %14841, i32 0, i32 7
  %14843 = call double @libxsmm_kahan_sum(double noundef %14840, ptr noundef %14842, ptr noundef %1202)
  br label %14844

14844:                                            ; preds = %14839, %14818
  call void @llvm.lifetime.end.p0(i64 8, ptr %1234) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1233) #7
  br label %14869

14845:                                            ; preds = %14701, %14693
  %14846 = load double, ptr %1230, align 8, !tbaa !17
  %14847 = load double, ptr %1230, align 8, !tbaa !17
  %14848 = fcmp oeq double %14846, %14847
  br i1 %14848, label %14849, label %14853

14849:                                            ; preds = %14845
  %14850 = load double, ptr %27, align 8, !tbaa !17
  %14851 = load double, ptr %1232, align 8, !tbaa !17
  %14852 = fcmp ogt double %14850, %14851
  br label %14853

14853:                                            ; preds = %14849, %14845
  %14854 = phi i1 [ false, %14845 ], [ %14852, %14849 ]
  %14855 = zext i1 %14854 to i64
  %14856 = select i1 %14854, i32 1, i32 2
  store i32 %14856, ptr %19, align 4, !tbaa !9
  %14857 = load i32, ptr %1228, align 4, !tbaa !9
  %14858 = load ptr, ptr %9, align 8, !tbaa !5
  %14859 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %14858, i32 0, i32 22
  store i32 %14857, ptr %14859, align 8, !tbaa !26
  %14860 = load i32, ptr %1227, align 4, !tbaa !9
  %14861 = load ptr, ptr %9, align 8, !tbaa !5
  %14862 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %14861, i32 0, i32 23
  store i32 %14860, ptr %14862, align 4, !tbaa !27
  %14863 = load double, ptr %1230, align 8, !tbaa !17
  %14864 = load ptr, ptr %9, align 8, !tbaa !5
  %14865 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %14864, i32 0, i32 20
  store double %14863, ptr %14865, align 8, !tbaa !24
  %14866 = load double, ptr %1229, align 8, !tbaa !17
  %14867 = load ptr, ptr %9, align 8, !tbaa !5
  %14868 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %14867, i32 0, i32 21
  store double %14866, ptr %14868, align 8, !tbaa !25
  store i32 282, ptr %60, align 4
  br label %14870

14869:                                            ; preds = %14844
  store i32 0, ptr %60, align 4
  br label %14870

14870:                                            ; preds = %14869, %14853
  call void @llvm.lifetime.end.p0(i64 8, ptr %1232) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1231) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1230) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1229) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %1228) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %1227) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1226) #7
  %14871 = load i32, ptr %60, align 4
  switch i32 %14871, label %15542 [
    i32 0, label %14872
    i32 282, label %14876
  ]

14872:                                            ; preds = %14870
  br label %14873

14873:                                            ; preds = %14872
  %14874 = load i32, ptr %1217, align 4, !tbaa !9
  %14875 = add nsw i32 %14874, 1
  store i32 %14875, ptr %1217, align 4, !tbaa !9
  br label %14603, !llvm.loop !139

14876:                                            ; preds = %14870, %14603
  %14877 = load i32, ptr %19, align 4, !tbaa !9
  %14878 = icmp eq i32 0, %14877
  br i1 %14878, label %14879, label %14910

14879:                                            ; preds = %14876
  %14880 = load double, ptr %1221, align 8, !tbaa !17
  %14881 = load ptr, ptr %9, align 8, !tbaa !5
  %14882 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %14881, i32 0, i32 10
  %14883 = call double @libxsmm_kahan_sum(double noundef %14880, ptr noundef %14882, ptr noundef %1211)
  %14884 = load double, ptr %1222, align 8, !tbaa !17
  %14885 = load ptr, ptr %9, align 8, !tbaa !5
  %14886 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %14885, i32 0, i32 15
  %14887 = call double @libxsmm_kahan_sum(double noundef %14884, ptr noundef %14886, ptr noundef %1212)
  %14888 = load ptr, ptr %9, align 8, !tbaa !5
  %14889 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %14888, i32 0, i32 2
  %14890 = load double, ptr %14889, align 8, !tbaa !32
  %14891 = load double, ptr %1223, align 8, !tbaa !17
  %14892 = fcmp olt double %14890, %14891
  br i1 %14892, label %14893, label %14897

14893:                                            ; preds = %14879
  %14894 = load double, ptr %1223, align 8, !tbaa !17
  %14895 = load ptr, ptr %9, align 8, !tbaa !5
  %14896 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %14895, i32 0, i32 2
  store double %14894, ptr %14896, align 8, !tbaa !32
  br label %14897

14897:                                            ; preds = %14893, %14879
  %14898 = load double, ptr %1207, align 8, !tbaa !17
  %14899 = load double, ptr %1221, align 8, !tbaa !17
  %14900 = fcmp olt double %14898, %14899
  br i1 %14900, label %14901, label %14903

14901:                                            ; preds = %14897
  %14902 = load double, ptr %1221, align 8, !tbaa !17
  store double %14902, ptr %1207, align 8, !tbaa !17
  br label %14903

14903:                                            ; preds = %14901, %14897
  %14904 = load double, ptr %1208, align 8, !tbaa !17
  %14905 = load double, ptr %1222, align 8, !tbaa !17
  %14906 = fcmp olt double %14904, %14905
  br i1 %14906, label %14907, label %14909

14907:                                            ; preds = %14903
  %14908 = load double, ptr %1222, align 8, !tbaa !17
  store double %14908, ptr %1208, align 8, !tbaa !17
  br label %14909

14909:                                            ; preds = %14907, %14903
  br label %14911

14910:                                            ; preds = %14876
  store i32 279, ptr %60, align 4
  br label %14912

14911:                                            ; preds = %14909
  store i32 0, ptr %60, align 4
  br label %14912

14912:                                            ; preds = %14911, %14910
  call void @llvm.lifetime.end.p0(i64 8, ptr %1225) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1224) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1223) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1222) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1221) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1220) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1219) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1218) #7
  %14913 = load i32, ptr %60, align 4
  switch i32 %14913, label %15542 [
    i32 0, label %14914
    i32 279, label %14918
  ]

14914:                                            ; preds = %14912
  br label %14915

14915:                                            ; preds = %14914
  %14916 = load i32, ptr %1216, align 4, !tbaa !9
  %14917 = add nsw i32 %14916, 1
  store i32 %14917, ptr %1216, align 4, !tbaa !9
  br label %14598, !llvm.loop !140

14918:                                            ; preds = %14912, %14598
  %14919 = load i32, ptr %19, align 4, !tbaa !9
  %14920 = icmp eq i32 0, %14919
  br i1 %14920, label %14921, label %15187

14921:                                            ; preds = %14918
  call void @llvm.lifetime.start.p0(i64 8, ptr %1235) #7
  store double 0.000000e+00, ptr %1235, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1236) #7
  store double 0.000000e+00, ptr %1236, align 8, !tbaa !17
  %14922 = load ptr, ptr %9, align 8, !tbaa !5
  %14923 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %14922, i32 0, i32 14
  %14924 = load double, ptr %14923, align 8, !tbaa !34
  %14925 = fcmp oeq double 0.000000e+00, %14924
  br i1 %14925, label %14926, label %14927

14926:                                            ; preds = %14921
  br label %14928

14927:                                            ; preds = %14921
  call void @__assert_fail(ptr noundef @.str.1, ptr noundef @.str.2, i32 noundef 130, ptr noundef @__PRETTY_FUNCTION__.libxsmm_matdiff) #9
  unreachable

14928:                                            ; preds = %14926
  %14929 = load ptr, ptr %9, align 8, !tbaa !5
  %14930 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %14929, i32 0, i32 19
  %14931 = load double, ptr %14930, align 8, !tbaa !35
  %14932 = fcmp oeq double 0.000000e+00, %14931
  br i1 %14932, label %14933, label %14934

14933:                                            ; preds = %14928
  br label %14935

14934:                                            ; preds = %14928
  call void @__assert_fail(ptr noundef @.str.3, ptr noundef @.str.2, i32 noundef 131, ptr noundef @__PRETTY_FUNCTION__.libxsmm_matdiff) #9
  unreachable

14935:                                            ; preds = %14933
  %14936 = load i64, ptr %24, align 8, !tbaa !12
  %14937 = icmp ne i64 0, %14936
  br i1 %14937, label %14938, label %14955

14938:                                            ; preds = %14935
  %14939 = load ptr, ptr %9, align 8, !tbaa !5
  %14940 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %14939, i32 0, i32 10
  %14941 = load double, ptr %14940, align 8, !tbaa !36
  %14942 = load i64, ptr %24, align 8, !tbaa !12
  %14943 = uitofp i64 %14942 to double
  %14944 = fdiv double %14941, %14943
  %14945 = load ptr, ptr %9, align 8, !tbaa !5
  %14946 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %14945, i32 0, i32 13
  store double %14944, ptr %14946, align 8, !tbaa !37
  %14947 = load ptr, ptr %9, align 8, !tbaa !5
  %14948 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %14947, i32 0, i32 15
  %14949 = load double, ptr %14948, align 8, !tbaa !38
  %14950 = load i64, ptr %24, align 8, !tbaa !12
  %14951 = uitofp i64 %14950 to double
  %14952 = fdiv double %14949, %14951
  %14953 = load ptr, ptr %9, align 8, !tbaa !5
  %14954 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %14953, i32 0, i32 18
  store double %14952, ptr %14954, align 8, !tbaa !39
  br label %14955

14955:                                            ; preds = %14938, %14935
  %14956 = load double, ptr %1207, align 8, !tbaa !17
  %14957 = fcmp oge double 0.000000e+00, %14956
  br i1 %14957, label %14958, label %14960

14958:                                            ; preds = %14955
  %14959 = load double, ptr %1208, align 8, !tbaa !17
  br label %14972

14960:                                            ; preds = %14955
  %14961 = load ptr, ptr %9, align 8, !tbaa !5
  %14962 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %14961, i32 0, i32 2
  %14963 = load double, ptr %14962, align 8, !tbaa !32
  %14964 = load double, ptr %1207, align 8, !tbaa !17
  %14965 = fcmp olt double 0.000000e+00, %14964
  br i1 %14965, label %14966, label %14968

14966:                                            ; preds = %14960
  %14967 = load double, ptr %1207, align 8, !tbaa !17
  br label %14969

14968:                                            ; preds = %14960
  br label %14969

14969:                                            ; preds = %14968, %14966
  %14970 = phi double [ %14967, %14966 ], [ 1.000000e+00, %14968 ]
  %14971 = fdiv double %14963, %14970
  br label %14972

14972:                                            ; preds = %14969, %14958
  %14973 = phi double [ %14959, %14958 ], [ %14971, %14969 ]
  %14974 = load ptr, ptr %9, align 8, !tbaa !5
  %14975 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %14974, i32 0, i32 3
  store double %14973, ptr %14975, align 8, !tbaa !40
  %14976 = load double, ptr %1205, align 8, !tbaa !17
  %14977 = fcmp oge double 0.000000e+00, %14976
  br i1 %14977, label %14978, label %14996

14978:                                            ; preds = %14972
  %14979 = load double, ptr %1206, align 8, !tbaa !17
  %14980 = load double, ptr %1206, align 8, !tbaa !17
  %14981 = fmul double %14979, %14980
  %14982 = load ptr, ptr %9, align 8, !tbaa !5
  %14983 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %14982, i32 0, i32 7
  %14984 = load double, ptr %14983, align 8, !tbaa !41
  %14985 = fcmp olt double %14981, %14984
  br i1 %14985, label %14986, label %14990

14986:                                            ; preds = %14978
  %14987 = load double, ptr %1206, align 8, !tbaa !17
  %14988 = load double, ptr %1206, align 8, !tbaa !17
  %14989 = fmul double %14987, %14988
  br label %14994

14990:                                            ; preds = %14978
  %14991 = load ptr, ptr %9, align 8, !tbaa !5
  %14992 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %14991, i32 0, i32 7
  %14993 = load double, ptr %14992, align 8, !tbaa !41
  br label %14994

14994:                                            ; preds = %14990, %14986
  %14995 = phi double [ %14989, %14986 ], [ %14993, %14990 ]
  br label %15008

14996:                                            ; preds = %14972
  %14997 = load ptr, ptr %9, align 8, !tbaa !5
  %14998 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %14997, i32 0, i32 7
  %14999 = load double, ptr %14998, align 8, !tbaa !41
  %15000 = load double, ptr %1205, align 8, !tbaa !17
  %15001 = fcmp olt double 0.000000e+00, %15000
  br i1 %15001, label %15002, label %15004

15002:                                            ; preds = %14996
  %15003 = load double, ptr %1205, align 8, !tbaa !17
  br label %15005

15004:                                            ; preds = %14996
  br label %15005

15005:                                            ; preds = %15004, %15002
  %15006 = phi double [ %15003, %15002 ], [ 1.000000e+00, %15004 ]
  %15007 = fdiv double %14999, %15006
  br label %15008

15008:                                            ; preds = %15005, %14994
  %15009 = phi double [ %14995, %14994 ], [ %15007, %15005 ]
  %15010 = load ptr, ptr %9, align 8, !tbaa !5
  %15011 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %15010, i32 0, i32 4
  store double %15009, ptr %15011, align 8, !tbaa !42
  store i32 0, ptr %1217, align 4, !tbaa !9
  br label %15012

15012:                                            ; preds = %15161, %15008
  %15013 = load i32, ptr %1217, align 4, !tbaa !9
  %15014 = load i32, ptr %25, align 4, !tbaa !9
  %15015 = icmp slt i32 %15013, %15014
  br i1 %15015, label %15016, label %15164

15016:                                            ; preds = %15012
  call void @llvm.lifetime.start.p0(i64 8, ptr %1237) #7
  store double 0.000000e+00, ptr %1237, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1238) #7
  store double 0.000000e+00, ptr %1238, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1239) #7
  store double 0.000000e+00, ptr %1239, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1240) #7
  store double 0.000000e+00, ptr %1240, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1241) #7
  store double 0.000000e+00, ptr %1241, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1242) #7
  store double 0.000000e+00, ptr %1242, align 8, !tbaa !17
  store i32 0, ptr %1216, align 4, !tbaa !9
  br label %15017

15017:                                            ; preds = %15135, %15016
  %15018 = load i32, ptr %1216, align 4, !tbaa !9
  %15019 = load i32, ptr %26, align 4, !tbaa !9
  %15020 = icmp slt i32 %15018, %15019
  br i1 %15020, label %15021, label %15138

15021:                                            ; preds = %15017
  call void @llvm.lifetime.start.p0(i64 8, ptr %1243) #7
  %15022 = load i64, ptr %1215, align 8, !tbaa !12
  %15023 = load i32, ptr %1216, align 4, !tbaa !9
  %15024 = load i32, ptr %25, align 4, !tbaa !9
  %15025 = mul nsw i32 %15023, %15024
  %15026 = load i32, ptr %1217, align 4, !tbaa !9
  %15027 = add nsw i32 %15025, %15026
  %15028 = sext i32 %15027 to i64
  %15029 = mul i64 %15022, %15028
  %15030 = load i64, ptr %1214, align 8, !tbaa !12
  %15031 = urem i64 %15029, %15030
  store i64 %15031, ptr %1243, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 4, ptr %1244) #7
  %15032 = load i64, ptr %1243, align 8, !tbaa !12
  %15033 = load i32, ptr %25, align 4, !tbaa !9
  %15034 = sext i32 %15033 to i64
  %15035 = udiv i64 %15032, %15034
  %15036 = trunc i64 %15035 to i32
  store i32 %15036, ptr %1244, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %1245) #7
  %15037 = load i64, ptr %1243, align 8, !tbaa !12
  %15038 = load i32, ptr %25, align 4, !tbaa !9
  %15039 = sext i32 %15038 to i64
  %15040 = urem i64 %15037, %15039
  %15041 = trunc i64 %15040 to i32
  store i32 %15041, ptr %1245, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %1246) #7
  %15042 = load ptr, ptr %1200, align 8, !tbaa !5
  %15043 = load i32, ptr %1244, align 4, !tbaa !9
  %15044 = load i32, ptr %20, align 4, !tbaa !9
  %15045 = mul nsw i32 %15043, %15044
  %15046 = load i32, ptr %1245, align 4, !tbaa !9
  %15047 = add nsw i32 %15045, %15046
  %15048 = sext i32 %15047 to i64
  %15049 = getelementptr inbounds i8, ptr %15042, i64 %15048
  %15050 = load i8, ptr %15049, align 1, !tbaa !11
  %15051 = call float @libxsmm_convert_hf8_to_f32(i8 noundef zeroext %15050)
  %15052 = fpext float %15051 to double
  store double %15052, ptr %1246, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1247) #7
  %15053 = load ptr, ptr %1201, align 8, !tbaa !5
  %15054 = icmp ne ptr null, %15053
  br i1 %15054, label %15055, label %15066

15055:                                            ; preds = %15021
  %15056 = load ptr, ptr %1201, align 8, !tbaa !5
  %15057 = load i32, ptr %1244, align 4, !tbaa !9
  %15058 = load i32, ptr %21, align 4, !tbaa !9
  %15059 = mul nsw i32 %15057, %15058
  %15060 = load i32, ptr %1245, align 4, !tbaa !9
  %15061 = add nsw i32 %15059, %15060
  %15062 = sext i32 %15061 to i64
  %15063 = getelementptr inbounds i8, ptr %15056, i64 %15062
  %15064 = load i8, ptr %15063, align 1, !tbaa !11
  %15065 = call float @libxsmm_convert_hf8_to_f32(i8 noundef zeroext %15064)
  br label %15067

15066:                                            ; preds = %15021
  br label %15067

15067:                                            ; preds = %15066, %15055
  %15068 = phi float [ %15065, %15055 ], [ 0.000000e+00, %15066 ]
  %15069 = fpext float %15068 to double
  store double %15069, ptr %1247, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1248) #7
  %15070 = load ptr, ptr %1201, align 8, !tbaa !5
  %15071 = icmp ne ptr null, %15070
  br i1 %15071, label %15072, label %15086

15072:                                            ; preds = %15067
  %15073 = load double, ptr %1246, align 8, !tbaa !17
  %15074 = load double, ptr %1247, align 8, !tbaa !17
  %15075 = fcmp olt double %15073, %15074
  br i1 %15075, label %15076, label %15080

15076:                                            ; preds = %15072
  %15077 = load double, ptr %1247, align 8, !tbaa !17
  %15078 = load double, ptr %1246, align 8, !tbaa !17
  %15079 = fsub double %15077, %15078
  br label %15084

15080:                                            ; preds = %15072
  %15081 = load double, ptr %1246, align 8, !tbaa !17
  %15082 = load double, ptr %1247, align 8, !tbaa !17
  %15083 = fsub double %15081, %15082
  br label %15084

15084:                                            ; preds = %15080, %15076
  %15085 = phi double [ %15079, %15076 ], [ %15083, %15080 ]
  br label %15087

15086:                                            ; preds = %15067
  br label %15087

15087:                                            ; preds = %15086, %15084
  %15088 = phi double [ %15085, %15084 ], [ 0.000000e+00, %15086 ]
  store double %15088, ptr %1248, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1249) #7
  %15089 = load double, ptr %1246, align 8, !tbaa !17
  %15090 = load ptr, ptr %9, align 8, !tbaa !5
  %15091 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %15090, i32 0, i32 13
  %15092 = load double, ptr %15091, align 8, !tbaa !37
  %15093 = fsub double %15089, %15092
  store double %15093, ptr %1249, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1250) #7
  %15094 = load double, ptr %1247, align 8, !tbaa !17
  %15095 = load ptr, ptr %9, align 8, !tbaa !5
  %15096 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %15095, i32 0, i32 18
  %15097 = load double, ptr %15096, align 8, !tbaa !39
  %15098 = fsub double %15094, %15097
  store double %15098, ptr %1250, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1251) #7
  %15099 = load double, ptr %1246, align 8, !tbaa !17
  %15100 = fcmp ole double 0.000000e+00, %15099
  br i1 %15100, label %15101, label %15103

15101:                                            ; preds = %15087
  %15102 = load double, ptr %1246, align 8, !tbaa !17
  br label %15106

15103:                                            ; preds = %15087
  %15104 = load double, ptr %1246, align 8, !tbaa !17
  %15105 = fneg double %15104
  br label %15106

15106:                                            ; preds = %15103, %15101
  %15107 = phi double [ %15102, %15101 ], [ %15105, %15103 ]
  store double %15107, ptr %1251, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %1252) #7
  %15108 = load double, ptr %1247, align 8, !tbaa !17
  %15109 = fcmp ole double 0.000000e+00, %15108
  br i1 %15109, label %15110, label %15112

15110:                                            ; preds = %15106
  %15111 = load double, ptr %1247, align 8, !tbaa !17
  br label %15115

15112:                                            ; preds = %15106
  %15113 = load double, ptr %1247, align 8, !tbaa !17
  %15114 = fneg double %15113
  br label %15115

15115:                                            ; preds = %15112, %15110
  %15116 = phi double [ %15111, %15110 ], [ %15114, %15112 ]
  store double %15116, ptr %1252, align 8, !tbaa !17
  %15117 = load double, ptr %1249, align 8, !tbaa !17
  %15118 = load double, ptr %1249, align 8, !tbaa !17
  %15119 = fmul double %15117, %15118
  %15120 = load ptr, ptr %9, align 8, !tbaa !5
  %15121 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %15120, i32 0, i32 14
  %15122 = call double @libxsmm_kahan_sum(double noundef %15119, ptr noundef %15121, ptr noundef %1235)
  %15123 = load double, ptr %1250, align 8, !tbaa !17
  %15124 = load double, ptr %1250, align 8, !tbaa !17
  %15125 = fmul double %15123, %15124
  %15126 = load ptr, ptr %9, align 8, !tbaa !5
  %15127 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %15126, i32 0, i32 19
  %15128 = call double @libxsmm_kahan_sum(double noundef %15125, ptr noundef %15127, ptr noundef %1236)
  %15129 = load double, ptr %1251, align 8, !tbaa !17
  %15130 = call double @libxsmm_kahan_sum(double noundef %15129, ptr noundef %1240, ptr noundef %1237)
  %15131 = load double, ptr %1252, align 8, !tbaa !17
  %15132 = call double @libxsmm_kahan_sum(double noundef %15131, ptr noundef %1241, ptr noundef %1238)
  %15133 = load double, ptr %1248, align 8, !tbaa !17
  %15134 = call double @libxsmm_kahan_sum(double noundef %15133, ptr noundef %1242, ptr noundef %1239)
  call void @llvm.lifetime.end.p0(i64 8, ptr %1252) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1251) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1250) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1249) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1248) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1247) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1246) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %1245) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %1244) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1243) #7
  br label %15135

15135:                                            ; preds = %15115
  %15136 = load i32, ptr %1216, align 4, !tbaa !9
  %15137 = add nsw i32 %15136, 1
  store i32 %15137, ptr %1216, align 4, !tbaa !9
  br label %15017, !llvm.loop !141

15138:                                            ; preds = %15017
  %15139 = load ptr, ptr %9, align 8, !tbaa !5
  %15140 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %15139, i32 0, i32 0
  %15141 = load double, ptr %15140, align 8, !tbaa !44
  %15142 = load double, ptr %1242, align 8, !tbaa !17
  %15143 = fcmp olt double %15141, %15142
  br i1 %15143, label %15144, label %15148

15144:                                            ; preds = %15138
  %15145 = load double, ptr %1242, align 8, !tbaa !17
  %15146 = load ptr, ptr %9, align 8, !tbaa !5
  %15147 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %15146, i32 0, i32 0
  store double %15145, ptr %15147, align 8, !tbaa !44
  br label %15148

15148:                                            ; preds = %15144, %15138
  %15149 = load double, ptr %1209, align 8, !tbaa !17
  %15150 = load double, ptr %1240, align 8, !tbaa !17
  %15151 = fcmp olt double %15149, %15150
  br i1 %15151, label %15152, label %15154

15152:                                            ; preds = %15148
  %15153 = load double, ptr %1240, align 8, !tbaa !17
  store double %15153, ptr %1209, align 8, !tbaa !17
  br label %15154

15154:                                            ; preds = %15152, %15148
  %15155 = load double, ptr %1210, align 8, !tbaa !17
  %15156 = load double, ptr %1241, align 8, !tbaa !17
  %15157 = fcmp olt double %15155, %15156
  br i1 %15157, label %15158, label %15160

15158:                                            ; preds = %15154
  %15159 = load double, ptr %1241, align 8, !tbaa !17
  store double %15159, ptr %1210, align 8, !tbaa !17
  br label %15160

15160:                                            ; preds = %15158, %15154
  call void @llvm.lifetime.end.p0(i64 8, ptr %1242) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1241) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1240) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1239) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1238) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1237) #7
  br label %15161

15161:                                            ; preds = %15160
  %15162 = load i32, ptr %1217, align 4, !tbaa !9
  %15163 = add nsw i32 %15162, 1
  store i32 %15163, ptr %1217, align 4, !tbaa !9
  br label %15012, !llvm.loop !142

15164:                                            ; preds = %15012
  %15165 = load double, ptr %1209, align 8, !tbaa !17
  %15166 = fcmp oge double 0.000000e+00, %15165
  br i1 %15166, label %15167, label %15171

15167:                                            ; preds = %15164
  %15168 = load ptr, ptr %9, align 8, !tbaa !5
  %15169 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %15168, i32 0, i32 0
  %15170 = load double, ptr %15169, align 8, !tbaa !44
  br label %15183

15171:                                            ; preds = %15164
  %15172 = load ptr, ptr %9, align 8, !tbaa !5
  %15173 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %15172, i32 0, i32 0
  %15174 = load double, ptr %15173, align 8, !tbaa !44
  %15175 = load double, ptr %1209, align 8, !tbaa !17
  %15176 = fcmp olt double 0.000000e+00, %15175
  br i1 %15176, label %15177, label %15179

15177:                                            ; preds = %15171
  %15178 = load double, ptr %1209, align 8, !tbaa !17
  br label %15180

15179:                                            ; preds = %15171
  br label %15180

15180:                                            ; preds = %15179, %15177
  %15181 = phi double [ %15178, %15177 ], [ 1.000000e+00, %15179 ]
  %15182 = fdiv double %15174, %15181
  br label %15183

15183:                                            ; preds = %15180, %15167
  %15184 = phi double [ %15170, %15167 ], [ %15182, %15180 ]
  %15185 = load ptr, ptr %9, align 8, !tbaa !5
  %15186 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %15185, i32 0, i32 1
  store double %15184, ptr %15186, align 8, !tbaa !46
  call void @llvm.lifetime.end.p0(i64 8, ptr %1236) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1235) #7
  br label %15187

15187:                                            ; preds = %15183, %14918
  call void @llvm.lifetime.end.p0(i64 4, ptr %1217) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %1216) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1215) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1214) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1213) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1212) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1211) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1210) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1209) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1208) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1207) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1206) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1205) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1204) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1203) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1202) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1201) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %1200) #7
  br label %15188

15188:                                            ; preds = %15187, %14587
  br label %15200

15189:                                            ; preds = %1323
  %15190 = load i32, ptr @libxsmm_verbosity, align 4, !tbaa !9
  %15191 = icmp ne i32 0, %15190
  br i1 %15191, label %15192, label %15199

15192:                                            ; preds = %15189
  %15193 = atomicrmw add ptr @libxsmm_matdiff.error_once, i32 1 seq_cst, align 4
  %15194 = add i32 %15193, 1
  %15195 = icmp eq i32 1, %15194
  br i1 %15195, label %15196, label %15199

15196:                                            ; preds = %15192
  %15197 = load ptr, ptr @stderr, align 8, !tbaa !5
  %15198 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %15197, ptr noundef @.str.4) #7
  br label %15199

15199:                                            ; preds = %15196, %15192, %15189
  store i32 1, ptr %17, align 4, !tbaa !9
  br label %15200

15200:                                            ; preds = %15199, %15188, %14027, %12866, %11705, %10544, %9391, %8246, %7093, %5940, %4787, %3634, %2481
  %15201 = load ptr, ptr %9, align 8, !tbaa !5
  %15202 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %15201, i32 0, i32 22
  %15203 = load i32, ptr %15202, align 8, !tbaa !26
  %15204 = icmp sle i32 0, %15203
  br i1 %15204, label %15205, label %15210

15205:                                            ; preds = %15200
  %15206 = load ptr, ptr %9, align 8, !tbaa !5
  %15207 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %15206, i32 0, i32 23
  %15208 = load i32, ptr %15207, align 4, !tbaa !27
  %15209 = icmp sle i32 0, %15208
  br i1 %15209, label %15220, label %15210

15210:                                            ; preds = %15205, %15200
  %15211 = load ptr, ptr %9, align 8, !tbaa !5
  %15212 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %15211, i32 0, i32 22
  %15213 = load i32, ptr %15212, align 8, !tbaa !26
  %15214 = icmp sgt i32 0, %15213
  br i1 %15214, label %15215, label %15221

15215:                                            ; preds = %15210
  %15216 = load ptr, ptr %9, align 8, !tbaa !5
  %15217 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %15216, i32 0, i32 23
  %15218 = load i32, ptr %15217, align 4, !tbaa !27
  %15219 = icmp sgt i32 0, %15218
  br i1 %15219, label %15220, label %15221

15220:                                            ; preds = %15215, %15205
  br label %15222

15221:                                            ; preds = %15215, %15210
  call void @__assert_fail(ptr noundef @.str.5, ptr noundef @.str.6, i32 noundef 237, ptr noundef @__PRETTY_FUNCTION__.libxsmm_matdiff) #9
  unreachable

15222:                                            ; preds = %15220
  %15223 = load ptr, ptr %9, align 8, !tbaa !5
  %15224 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %15223, i32 0, i32 22
  %15225 = load i32, ptr %15224, align 8, !tbaa !26
  %15226 = load i32, ptr %25, align 4, !tbaa !9
  %15227 = icmp slt i32 %15225, %15226
  br i1 %15227, label %15228, label %15235

15228:                                            ; preds = %15222
  %15229 = load ptr, ptr %9, align 8, !tbaa !5
  %15230 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %15229, i32 0, i32 23
  %15231 = load i32, ptr %15230, align 4, !tbaa !27
  %15232 = load i32, ptr %26, align 4, !tbaa !9
  %15233 = icmp slt i32 %15231, %15232
  br i1 %15233, label %15234, label %15235

15234:                                            ; preds = %15228
  br label %15236

15235:                                            ; preds = %15228, %15222
  call void @__assert_fail(ptr noundef @.str.7, ptr noundef @.str.6, i32 noundef 238, ptr noundef @__PRETTY_FUNCTION__.libxsmm_matdiff) #9
  unreachable

15236:                                            ; preds = %15234
  %15237 = load i32, ptr %17, align 4, !tbaa !9
  %15238 = icmp eq i32 0, %15237
  br i1 %15238, label %15239, label %15538

15239:                                            ; preds = %15236
  call void @llvm.lifetime.start.p0(i64 8, ptr %1253) #7
  %15240 = call ptr @getenv(ptr noundef @.str.8) #7
  store ptr %15240, ptr %1253, align 8, !tbaa !5
  %15241 = load i32, ptr @libxsmm_ninit, align 4, !tbaa !9
  %15242 = icmp ugt i32 2, %15241
  br i1 %15242, label %15243, label %15244

15243:                                            ; preds = %15239
  call void @libxsmm_init()
  br label %15244

15244:                                            ; preds = %15243, %15239
  %15245 = load ptr, ptr %1253, align 8, !tbaa !5
  %15246 = icmp ne ptr null, %15245
  br i1 %15246, label %15247, label %15328

15247:                                            ; preds = %15244
  %15248 = load ptr, ptr %1253, align 8, !tbaa !5
  %15249 = load i8, ptr %15248, align 1, !tbaa !11
  %15250 = sext i8 %15249 to i32
  %15251 = icmp ne i32 0, %15250
  br i1 %15251, label %15252, label %15328

15252:                                            ; preds = %15247
  %15253 = load ptr, ptr %1253, align 8, !tbaa !5
  %15254 = load i8, ptr %15253, align 1, !tbaa !11
  %15255 = sext i8 %15254 to i32
  %15256 = icmp ne i32 48, %15255
  br i1 %15256, label %15257, label %15328

15257:                                            ; preds = %15252
  %15258 = load ptr, ptr %1253, align 8, !tbaa !5
  %15259 = load i8, ptr %15258, align 1, !tbaa !11
  %15260 = sext i8 %15259 to i32
  %15261 = icmp ne i32 45, %15260
  br i1 %15261, label %15272, label %15262

15262:                                            ; preds = %15257
  %15263 = load ptr, ptr %9, align 8, !tbaa !5
  %15264 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %15263, i32 0, i32 22
  %15265 = load i32, ptr %15264, align 8, !tbaa !26
  %15266 = icmp sle i32 0, %15265
  br i1 %15266, label %15267, label %15300

15267:                                            ; preds = %15262
  %15268 = load ptr, ptr %9, align 8, !tbaa !5
  %15269 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %15268, i32 0, i32 23
  %15270 = load i32, ptr %15269, align 4, !tbaa !27
  %15271 = icmp sle i32 0, %15270
  br i1 %15271, label %15272, label %15300

15272:                                            ; preds = %15267, %15257
  %15273 = load ptr, ptr %14, align 8, !tbaa !5
  %15274 = icmp ne ptr null, %15273
  br i1 %15274, label %15275, label %15299

15275:                                            ; preds = %15272
  %15276 = load ptr, ptr %1253, align 8, !tbaa !5
  %15277 = load i8, ptr %15276, align 1, !tbaa !11
  %15278 = sext i8 %15277 to i32
  %15279 = icmp eq i32 45, %15278
  br i1 %15279, label %15280, label %15298

15280:                                            ; preds = %15275
  %15281 = load ptr, ptr %1253, align 8, !tbaa !5
  %15282 = getelementptr inbounds i8, ptr %15281, i64 1
  %15283 = load i8, ptr %15282, align 1, !tbaa !11
  %15284 = sext i8 %15283 to i32
  %15285 = icmp slt i32 49, %15284
  br i1 %15285, label %15286, label %15298

15286:                                            ; preds = %15280
  %15287 = load i32, ptr %10, align 4, !tbaa !9
  %15288 = call ptr @libxsmm_get_typename(i32 noundef %15287)
  %15289 = load i32, ptr %11, align 4, !tbaa !9
  %15290 = sext i32 %15289 to i64
  %15291 = load i32, ptr %12, align 4, !tbaa !9
  %15292 = sext i32 %15291 to i64
  %15293 = load i32, ptr %20, align 4, !tbaa !9
  %15294 = sext i32 %15293 to i64
  %15295 = load i32, ptr %21, align 4, !tbaa !9
  %15296 = sext i32 %15295 to i64
  %15297 = call i32 (ptr, ...) @printf(ptr noundef @.str.9, ptr noundef %15288, i64 noundef %15290, i64 noundef %15292, i64 noundef %15294, i64 noundef %15296)
  br label %15298

15298:                                            ; preds = %15286, %15280, %15275
  br label %15299

15299:                                            ; preds = %15298, %15272
  br label %15327

15300:                                            ; preds = %15267, %15262
  %15301 = load ptr, ptr %1253, align 8, !tbaa !5
  %15302 = load i8, ptr %15301, align 1, !tbaa !11
  %15303 = sext i8 %15302 to i32
  %15304 = icmp eq i32 45, %15303
  br i1 %15304, label %15305, label %15326

15305:                                            ; preds = %15300
  %15306 = load ptr, ptr %1253, align 8, !tbaa !5
  %15307 = getelementptr inbounds i8, ptr %15306, i64 1
  %15308 = load i8, ptr %15307, align 1, !tbaa !11
  %15309 = sext i8 %15308 to i32
  %15310 = icmp slt i32 49, %15309
  br i1 %15310, label %15311, label %15326

15311:                                            ; preds = %15305
  %15312 = load ptr, ptr %14, align 8, !tbaa !5
  %15313 = icmp ne ptr null, %15312
  br i1 %15313, label %15314, label %15326

15314:                                            ; preds = %15311
  %15315 = load i32, ptr %10, align 4, !tbaa !9
  %15316 = call ptr @libxsmm_get_typename(i32 noundef %15315)
  %15317 = load i32, ptr %11, align 4, !tbaa !9
  %15318 = sext i32 %15317 to i64
  %15319 = load i32, ptr %12, align 4, !tbaa !9
  %15320 = sext i32 %15319 to i64
  %15321 = load i32, ptr %20, align 4, !tbaa !9
  %15322 = sext i32 %15321 to i64
  %15323 = load i32, ptr %21, align 4, !tbaa !9
  %15324 = sext i32 %15323 to i64
  %15325 = call i32 (ptr, ...) @printf(ptr noundef @.str.10, ptr noundef %15316, i64 noundef %15318, i64 noundef %15320, i64 noundef %15322, i64 noundef %15324)
  br label %15326

15326:                                            ; preds = %15314, %15311, %15305, %15300
  br label %15327

15327:                                            ; preds = %15326, %15299
  br label %15328

15328:                                            ; preds = %15327, %15252, %15247, %15244
  %15329 = load i32, ptr %19, align 4, !tbaa !9
  %15330 = icmp eq i32 0, %15329
  br i1 %15330, label %15331, label %15403

15331:                                            ; preds = %15328
  call void @llvm.lifetime.start.p0(i64 8, ptr %1254) #7
  %15332 = load ptr, ptr %9, align 8, !tbaa !5
  %15333 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %15332, i32 0, i32 14
  %15334 = load double, ptr %15333, align 8, !tbaa !34
  %15335 = fcmp oge double 0.000000e+00, %15334
  br i1 %15335, label %15336, label %15340

15336:                                            ; preds = %15331
  %15337 = load ptr, ptr %9, align 8, !tbaa !5
  %15338 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %15337, i32 0, i32 7
  %15339 = load double, ptr %15338, align 8, !tbaa !41
  br label %15356

15340:                                            ; preds = %15331
  %15341 = load ptr, ptr %9, align 8, !tbaa !5
  %15342 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %15341, i32 0, i32 7
  %15343 = load double, ptr %15342, align 8, !tbaa !41
  %15344 = load ptr, ptr %9, align 8, !tbaa !5
  %15345 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %15344, i32 0, i32 14
  %15346 = load double, ptr %15345, align 8, !tbaa !34
  %15347 = fcmp olt double 0.000000e+00, %15346
  br i1 %15347, label %15348, label %15352

15348:                                            ; preds = %15340
  %15349 = load ptr, ptr %9, align 8, !tbaa !5
  %15350 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %15349, i32 0, i32 14
  %15351 = load double, ptr %15350, align 8, !tbaa !34
  br label %15353

15352:                                            ; preds = %15340
  br label %15353

15353:                                            ; preds = %15352, %15348
  %15354 = phi double [ %15351, %15348 ], [ 1.000000e+00, %15352 ]
  %15355 = fdiv double %15343, %15354
  br label %15356

15356:                                            ; preds = %15353, %15336
  %15357 = phi double [ %15339, %15336 ], [ %15355, %15353 ]
  store double %15357, ptr %1254, align 8, !tbaa !17
  %15358 = load double, ptr %1254, align 8, !tbaa !17
  %15359 = fsub double 1.000000e+00, %15358
  %15360 = fcmp olt double 0.000000e+00, %15359
  br i1 %15360, label %15361, label %15364

15361:                                            ; preds = %15356
  %15362 = load double, ptr %1254, align 8, !tbaa !17
  %15363 = fsub double 1.000000e+00, %15362
  br label %15365

15364:                                            ; preds = %15356
  br label %15365

15365:                                            ; preds = %15364, %15361
  %15366 = phi double [ %15363, %15361 ], [ 0.000000e+00, %15364 ]
  %15367 = load ptr, ptr %9, align 8, !tbaa !5
  %15368 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %15367, i32 0, i32 9
  store double %15366, ptr %15368, align 8, !tbaa !143
  %15369 = load i64, ptr %24, align 8, !tbaa !12
  %15370 = icmp ne i64 0, %15369
  br i1 %15370, label %15371, label %15384

15371:                                            ; preds = %15365
  %15372 = load i64, ptr %24, align 8, !tbaa !12
  %15373 = uitofp i64 %15372 to double
  %15374 = load ptr, ptr %9, align 8, !tbaa !5
  %15375 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %15374, i32 0, i32 14
  %15376 = load double, ptr %15375, align 8, !tbaa !34
  %15377 = fdiv double %15376, %15373
  store double %15377, ptr %15375, align 8, !tbaa !34
  %15378 = load i64, ptr %24, align 8, !tbaa !12
  %15379 = uitofp i64 %15378 to double
  %15380 = load ptr, ptr %9, align 8, !tbaa !5
  %15381 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %15380, i32 0, i32 19
  %15382 = load double, ptr %15381, align 8, !tbaa !35
  %15383 = fdiv double %15382, %15379
  store double %15383, ptr %15381, align 8, !tbaa !35
  br label %15384

15384:                                            ; preds = %15371, %15365
  %15385 = load ptr, ptr %9, align 8, !tbaa !5
  %15386 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %15385, i32 0, i32 4
  %15387 = load double, ptr %15386, align 8, !tbaa !42
  %15388 = call double @libxsmm_dsqrt(double noundef %15387)
  %15389 = load ptr, ptr %9, align 8, !tbaa !5
  %15390 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %15389, i32 0, i32 4
  store double %15388, ptr %15390, align 8, !tbaa !42
  %15391 = load ptr, ptr %9, align 8, !tbaa !5
  %15392 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %15391, i32 0, i32 7
  %15393 = load double, ptr %15392, align 8, !tbaa !41
  %15394 = call double @libxsmm_dsqrt(double noundef %15393)
  %15395 = load ptr, ptr %9, align 8, !tbaa !5
  %15396 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %15395, i32 0, i32 7
  store double %15394, ptr %15396, align 8, !tbaa !41
  %15397 = load ptr, ptr %9, align 8, !tbaa !5
  %15398 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %15397, i32 0, i32 8
  %15399 = load double, ptr %15398, align 8, !tbaa !29
  %15400 = call double @libxsmm_dsqrt(double noundef %15399)
  %15401 = load ptr, ptr %9, align 8, !tbaa !5
  %15402 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %15401, i32 0, i32 8
  store double %15400, ptr %15402, align 8, !tbaa !29
  call void @llvm.lifetime.end.p0(i64 8, ptr %1254) #7
  br label %15466

15403:                                            ; preds = %15328
  %15404 = load i32, ptr %19, align 4, !tbaa !9
  %15405 = icmp ne i32 0, %15404
  br i1 %15405, label %15406, label %15465

15406:                                            ; preds = %15403
  %15407 = load double, ptr %27, align 8, !tbaa !17
  %15408 = load ptr, ptr %9, align 8, !tbaa !5
  %15409 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %15408, i32 0, i32 8
  store double %15407, ptr %15409, align 8, !tbaa !29
  %15410 = load ptr, ptr %9, align 8, !tbaa !5
  %15411 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %15410, i32 0, i32 7
  store double %15407, ptr %15411, align 8, !tbaa !41
  %15412 = load ptr, ptr %9, align 8, !tbaa !5
  %15413 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %15412, i32 0, i32 6
  store double %15407, ptr %15413, align 8, !tbaa !28
  %15414 = load ptr, ptr %9, align 8, !tbaa !5
  %15415 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %15414, i32 0, i32 5
  store double %15407, ptr %15415, align 8, !tbaa !23
  %15416 = load ptr, ptr %9, align 8, !tbaa !5
  %15417 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %15416, i32 0, i32 4
  store double %15407, ptr %15417, align 8, !tbaa !42
  %15418 = load ptr, ptr %9, align 8, !tbaa !5
  %15419 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %15418, i32 0, i32 3
  store double %15407, ptr %15419, align 8, !tbaa !40
  %15420 = load ptr, ptr %9, align 8, !tbaa !5
  %15421 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %15420, i32 0, i32 2
  store double %15407, ptr %15421, align 8, !tbaa !32
  %15422 = load ptr, ptr %9, align 8, !tbaa !5
  %15423 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %15422, i32 0, i32 1
  store double %15407, ptr %15423, align 8, !tbaa !46
  %15424 = load ptr, ptr %9, align 8, !tbaa !5
  %15425 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %15424, i32 0, i32 0
  store double %15407, ptr %15425, align 8, !tbaa !44
  %15426 = load i32, ptr %19, align 4, !tbaa !9
  %15427 = icmp eq i32 1, %15426
  br i1 %15427, label %15428, label %15446

15428:                                            ; preds = %15406
  %15429 = load double, ptr %27, align 8, !tbaa !17
  %15430 = load ptr, ptr %9, align 8, !tbaa !5
  %15431 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %15430, i32 0, i32 19
  store double %15429, ptr %15431, align 8, !tbaa !35
  %15432 = load ptr, ptr %9, align 8, !tbaa !5
  %15433 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %15432, i32 0, i32 15
  store double %15429, ptr %15433, align 8, !tbaa !38
  %15434 = load ptr, ptr %9, align 8, !tbaa !5
  %15435 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %15434, i32 0, i32 21
  %15436 = load double, ptr %15435, align 8, !tbaa !25
  %15437 = load ptr, ptr %9, align 8, !tbaa !5
  %15438 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %15437, i32 0, i32 18
  store double %15436, ptr %15438, align 8, !tbaa !39
  %15439 = load double, ptr %27, align 8, !tbaa !17
  %15440 = load ptr, ptr %9, align 8, !tbaa !5
  %15441 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %15440, i32 0, i32 16
  store double %15439, ptr %15441, align 8, !tbaa !21
  %15442 = load double, ptr %27, align 8, !tbaa !17
  %15443 = fneg double %15442
  %15444 = load ptr, ptr %9, align 8, !tbaa !5
  %15445 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %15444, i32 0, i32 17
  store double %15443, ptr %15445, align 8, !tbaa !22
  br label %15464

15446:                                            ; preds = %15406
  %15447 = load double, ptr %27, align 8, !tbaa !17
  %15448 = load ptr, ptr %9, align 8, !tbaa !5
  %15449 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %15448, i32 0, i32 14
  store double %15447, ptr %15449, align 8, !tbaa !34
  %15450 = load ptr, ptr %9, align 8, !tbaa !5
  %15451 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %15450, i32 0, i32 10
  store double %15447, ptr %15451, align 8, !tbaa !36
  %15452 = load ptr, ptr %9, align 8, !tbaa !5
  %15453 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %15452, i32 0, i32 20
  %15454 = load double, ptr %15453, align 8, !tbaa !24
  %15455 = load ptr, ptr %9, align 8, !tbaa !5
  %15456 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %15455, i32 0, i32 13
  store double %15454, ptr %15456, align 8, !tbaa !37
  %15457 = load double, ptr %27, align 8, !tbaa !17
  %15458 = load ptr, ptr %9, align 8, !tbaa !5
  %15459 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %15458, i32 0, i32 11
  store double %15457, ptr %15459, align 8, !tbaa !14
  %15460 = load double, ptr %27, align 8, !tbaa !17
  %15461 = fneg double %15460
  %15462 = load ptr, ptr %9, align 8, !tbaa !5
  %15463 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %15462, i32 0, i32 12
  store double %15461, ptr %15463, align 8, !tbaa !20
  br label %15464

15464:                                            ; preds = %15446, %15428
  br label %15465

15465:                                            ; preds = %15464, %15403
  br label %15466

15466:                                            ; preds = %15465, %15384
  %15467 = load i32, ptr %12, align 4, !tbaa !9
  %15468 = icmp eq i32 1, %15467
  br i1 %15468, label %15469, label %15491

15469:                                            ; preds = %15466
  %15470 = load ptr, ptr %9, align 8, !tbaa !5
  %15471 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %15470, i32 0, i32 23
  %15472 = load i32, ptr %15471, align 4, !tbaa !27
  %15473 = load ptr, ptr %9, align 8, !tbaa !5
  %15474 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %15473, i32 0, i32 22
  %15475 = load i32, ptr %15474, align 8, !tbaa !26
  %15476 = xor i32 %15475, %15472
  store i32 %15476, ptr %15474, align 8, !tbaa !26
  %15477 = load ptr, ptr %9, align 8, !tbaa !5
  %15478 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %15477, i32 0, i32 22
  %15479 = load i32, ptr %15478, align 8, !tbaa !26
  %15480 = load ptr, ptr %9, align 8, !tbaa !5
  %15481 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %15480, i32 0, i32 23
  %15482 = load i32, ptr %15481, align 4, !tbaa !27
  %15483 = xor i32 %15482, %15479
  store i32 %15483, ptr %15481, align 4, !tbaa !27
  %15484 = load ptr, ptr %9, align 8, !tbaa !5
  %15485 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %15484, i32 0, i32 23
  %15486 = load i32, ptr %15485, align 4, !tbaa !27
  %15487 = load ptr, ptr %9, align 8, !tbaa !5
  %15488 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %15487, i32 0, i32 22
  %15489 = load i32, ptr %15488, align 8, !tbaa !26
  %15490 = xor i32 %15489, %15486
  store i32 %15490, ptr %15488, align 8, !tbaa !26
  br label %15491

15491:                                            ; preds = %15469, %15466
  %15492 = load i32, ptr %18, align 4, !tbaa !9
  %15493 = icmp ne i32 0, %15492
  br i1 %15493, label %15494, label %15537

15494:                                            ; preds = %15491
  %15495 = load ptr, ptr %9, align 8, !tbaa !5
  %15496 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %15495, i32 0, i32 11
  %15497 = load double, ptr %15496, align 8, !tbaa !14
  %15498 = load ptr, ptr %9, align 8, !tbaa !5
  %15499 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %15498, i32 0, i32 16
  store double %15497, ptr %15499, align 8, !tbaa !21
  %15500 = load ptr, ptr %9, align 8, !tbaa !5
  %15501 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %15500, i32 0, i32 11
  store double 0.000000e+00, ptr %15501, align 8, !tbaa !14
  %15502 = load ptr, ptr %9, align 8, !tbaa !5
  %15503 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %15502, i32 0, i32 12
  %15504 = load double, ptr %15503, align 8, !tbaa !20
  %15505 = load ptr, ptr %9, align 8, !tbaa !5
  %15506 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %15505, i32 0, i32 17
  store double %15504, ptr %15506, align 8, !tbaa !22
  %15507 = load ptr, ptr %9, align 8, !tbaa !5
  %15508 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %15507, i32 0, i32 12
  store double 0.000000e+00, ptr %15508, align 8, !tbaa !20
  %15509 = load ptr, ptr %9, align 8, !tbaa !5
  %15510 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %15509, i32 0, i32 13
  %15511 = load double, ptr %15510, align 8, !tbaa !37
  %15512 = load ptr, ptr %9, align 8, !tbaa !5
  %15513 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %15512, i32 0, i32 18
  store double %15511, ptr %15513, align 8, !tbaa !39
  %15514 = load ptr, ptr %9, align 8, !tbaa !5
  %15515 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %15514, i32 0, i32 13
  store double 0.000000e+00, ptr %15515, align 8, !tbaa !37
  %15516 = load ptr, ptr %9, align 8, !tbaa !5
  %15517 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %15516, i32 0, i32 14
  %15518 = load double, ptr %15517, align 8, !tbaa !34
  %15519 = load ptr, ptr %9, align 8, !tbaa !5
  %15520 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %15519, i32 0, i32 19
  store double %15518, ptr %15520, align 8, !tbaa !35
  %15521 = load ptr, ptr %9, align 8, !tbaa !5
  %15522 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %15521, i32 0, i32 14
  store double 0.000000e+00, ptr %15522, align 8, !tbaa !34
  %15523 = load ptr, ptr %9, align 8, !tbaa !5
  %15524 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %15523, i32 0, i32 10
  %15525 = load double, ptr %15524, align 8, !tbaa !36
  %15526 = load ptr, ptr %9, align 8, !tbaa !5
  %15527 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %15526, i32 0, i32 15
  store double %15525, ptr %15527, align 8, !tbaa !38
  %15528 = load ptr, ptr %9, align 8, !tbaa !5
  %15529 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %15528, i32 0, i32 10
  store double 0.000000e+00, ptr %15529, align 8, !tbaa !36
  %15530 = load ptr, ptr %9, align 8, !tbaa !5
  %15531 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %15530, i32 0, i32 20
  %15532 = load double, ptr %15531, align 8, !tbaa !24
  %15533 = load ptr, ptr %9, align 8, !tbaa !5
  %15534 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %15533, i32 0, i32 21
  store double %15532, ptr %15534, align 8, !tbaa !25
  %15535 = load ptr, ptr %9, align 8, !tbaa !5
  %15536 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %15535, i32 0, i32 20
  store double 0.000000e+00, ptr %15536, align 8, !tbaa !24
  br label %15537

15537:                                            ; preds = %15494, %15491
  call void @llvm.lifetime.end.p0(i64 8, ptr %1253) #7
  br label %15538

15538:                                            ; preds = %15537, %15236
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #7
  br label %15540

15539:                                            ; preds = %1290, %1286, %1283, %1280
  store i32 1, ptr %17, align 4, !tbaa !9
  br label %15540

15540:                                            ; preds = %15539, %15538
  %15541 = load i32, ptr %17, align 4, !tbaa !9
  store i32 1, ptr %60, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #7
  ret i32 %15541

15542:                                            ; preds = %14912, %14870, %14330, %14288, %13751, %13709, %13169, %13127, %12590, %12548, %12008, %11966, %11429, %11387, %10847, %10805, %10270, %10228, %9692, %9650, %9119, %9077, %8545, %8503, %7972, %7930, %7394, %7352, %6819, %6777, %6241, %6199, %5666, %5624, %5088, %5046, %4513, %4471, %3935, %3893, %3360, %3318, %2782, %2740, %2207, %2165, %1629, %1587
  unreachable
}

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

; Function Attrs: nounwind
declare ptr @getenv(ptr noundef) #2

; Function Attrs: inlinehint nounwind willreturn memory(read) uwtable
declare i32 @atoi(ptr noundef nonnull) #3

; Function Attrs: nounwind uwtable
declare dso_local void @libxsmm_matdiff_clear(ptr noundef) #0

; Function Attrs: nounwind uwtable
declare dso_local double @libxsmm_kahan_sum(double noundef, ptr noundef, ptr noundef) #0

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

; Function Attrs: noreturn nounwind
declare void @__assert_fail(ptr noundef, ptr noundef, i32 noundef, ptr noundef) #4

; Function Attrs: nounwind uwtable
declare dso_local i64 @libxsmm_coprime2(i64 noundef) #0

; Function Attrs: nounwind uwtable
declare dso_local float @libxsmm_convert_f16_to_f32(i16 noundef zeroext) #0

; Function Attrs: nounwind uwtable
declare dso_local float @libxsmm_convert_bf16_to_f32(i16 noundef zeroext) #0

; Function Attrs: nounwind uwtable
declare dso_local float @libxsmm_convert_bf8_to_f32(i8 noundef zeroext) #0

; Function Attrs: nounwind uwtable
declare dso_local float @libxsmm_convert_hf8_to_f32(i8 noundef zeroext) #0

; Function Attrs: nounwind
declare i32 @fprintf(ptr noundef, ptr noundef, ...) #2

declare void @libxsmm_init() #5

declare i32 @printf(ptr noundef, ...) #5

declare ptr @libxsmm_get_typename(i32 noundef) #5

; Function Attrs: nounwind uwtable
declare dso_local double @libxsmm_dsqrt(double noundef) #6

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 = { 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 #3 = { inlinehint nounwind willreturn memory(read) 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 #4 = { 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 #5 = { "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 = { nounwind uwtable "min-legal-vector-width"="128" "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 = { nounwind }
attributes #8 = { nounwind willreturn memory(read) }
attributes #9 = { 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 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!7, !7, i64 0}
!12 = !{!13, !13, i64 0}
!13 = !{!"long", !7, i64 0}
!14 = !{!15, !16, i64 88}
!15 = !{!"libxsmm_matdiff_info", !16, i64 0, !16, i64 8, !16, i64 16, !16, i64 24, !16, i64 32, !16, i64 40, !16, i64 48, !16, i64 56, !16, i64 64, !16, i64 72, !16, i64 80, !16, i64 88, !16, i64 96, !16, i64 104, !16, i64 112, !16, i64 120, !16, i64 128, !16, i64 136, !16, i64 144, !16, i64 152, !16, i64 160, !16, i64 168, !10, i64 176, !10, i64 180, !10, i64 184, !10, i64 188}
!16 = !{!"double", !7, i64 0}
!17 = !{!16, !16, i64 0}
!18 = !{!19, !19, i64 0}
!19 = !{!"long long", !7, i64 0}
!20 = !{!15, !16, i64 96}
!21 = !{!15, !16, i64 128}
!22 = !{!15, !16, i64 136}
!23 = !{!15, !16, i64 40}
!24 = !{!15, !16, i64 160}
!25 = !{!15, !16, i64 168}
!26 = !{!15, !10, i64 176}
!27 = !{!15, !10, i64 180}
!28 = !{!15, !16, i64 48}
!29 = !{!15, !16, i64 64}
!30 = distinct !{!30, !31}
!31 = !{!"llvm.loop.mustprogress"}
!32 = !{!15, !16, i64 16}
!33 = distinct !{!33, !31}
!34 = !{!15, !16, i64 112}
!35 = !{!15, !16, i64 152}
!36 = !{!15, !16, i64 80}
!37 = !{!15, !16, i64 104}
!38 = !{!15, !16, i64 120}
!39 = !{!15, !16, i64 144}
!40 = !{!15, !16, i64 24}
!41 = !{!15, !16, i64 56}
!42 = !{!15, !16, i64 32}
!43 = distinct !{!43, !31}
!44 = !{!15, !16, i64 0}
!45 = distinct !{!45, !31}
!46 = !{!15, !16, i64 8}
!47 = distinct !{!47, !31}
!48 = distinct !{!48, !31}
!49 = distinct !{!49, !31}
!50 = distinct !{!50, !31}
!51 = distinct !{!51, !31}
!52 = distinct !{!52, !31}
!53 = distinct !{!53, !31}
!54 = distinct !{!54, !31}
!55 = distinct !{!55, !31}
!56 = distinct !{!56, !31}
!57 = distinct !{!57, !31}
!58 = distinct !{!58, !31}
!59 = distinct !{!59, !31}
!60 = distinct !{!60, !31}
!61 = distinct !{!61, !31}
!62 = distinct !{!62, !31}
!63 = distinct !{!63, !31}
!64 = distinct !{!64, !31}
!65 = distinct !{!65, !31}
!66 = distinct !{!66, !31}
!67 = !{!68, !68, i64 0}
!68 = !{!"short", !7, i64 0}
!69 = distinct !{!69, !31}
!70 = distinct !{!70, !31}
!71 = distinct !{!71, !31}
!72 = distinct !{!72, !31}
!73 = distinct !{!73, !31}
!74 = distinct !{!74, !31}
!75 = distinct !{!75, !31}
!76 = distinct !{!76, !31}
!77 = distinct !{!77, !31}
!78 = distinct !{!78, !31}
!79 = distinct !{!79, !31}
!80 = distinct !{!80, !31}
!81 = distinct !{!81, !31}
!82 = distinct !{!82, !31}
!83 = distinct !{!83, !31}
!84 = distinct !{!84, !31}
!85 = distinct !{!85, !31}
!86 = distinct !{!86, !31}
!87 = distinct !{!87, !31}
!88 = distinct !{!88, !31}
!89 = distinct !{!89, !31}
!90 = distinct !{!90, !31}
!91 = distinct !{!91, !31}
!92 = distinct !{!92, !31}
!93 = distinct !{!93, !31}
!94 = distinct !{!94, !31}
!95 = distinct !{!95, !31}
!96 = distinct !{!96, !31}
!97 = distinct !{!97, !31}
!98 = distinct !{!98, !31}
!99 = distinct !{!99, !31}
!100 = distinct !{!100, !31}
!101 = !{!102, !102, i64 0}
!102 = !{!"float", !7, i64 0}
!103 = distinct !{!103, !31}
!104 = distinct !{!104, !31}
!105 = distinct !{!105, !31}
!106 = distinct !{!106, !31}
!107 = distinct !{!107, !31}
!108 = distinct !{!108, !31}
!109 = distinct !{!109, !31}
!110 = distinct !{!110, !31}
!111 = distinct !{!111, !31}
!112 = distinct !{!112, !31}
!113 = distinct !{!113, !31}
!114 = distinct !{!114, !31}
!115 = distinct !{!115, !31}
!116 = distinct !{!116, !31}
!117 = distinct !{!117, !31}
!118 = distinct !{!118, !31}
!119 = distinct !{!119, !31}
!120 = distinct !{!120, !31}
!121 = distinct !{!121, !31}
!122 = distinct !{!122, !31}
!123 = distinct !{!123, !31}
!124 = distinct !{!124, !31}
!125 = distinct !{!125, !31}
!126 = distinct !{!126, !31}
!127 = distinct !{!127, !31}
!128 = distinct !{!128, !31}
!129 = distinct !{!129, !31}
!130 = distinct !{!130, !31}
!131 = distinct !{!131, !31}
!132 = distinct !{!132, !31}
!133 = distinct !{!133, !31}
!134 = distinct !{!134, !31}
!135 = distinct !{!135, !31}
!136 = distinct !{!136, !31}
!137 = distinct !{!137, !31}
!138 = distinct !{!138, !31}
!139 = distinct !{!139, !31}
!140 = distinct !{!140, !31}
!141 = distinct !{!141, !31}
!142 = distinct !{!142, !31}
!143 = !{!15, !16, i64 72}


; 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"

@.str = external hidden unnamed_addr constant [24 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [71 x i8], align 1
@__PRETTY_FUNCTION__.libxsmm_matdiff = external hidden unnamed_addr constant [174 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [19 x i8], align 1
@libxsmm_matdiff.error_once = external hidden global i32, align 4
@libxsmm_verbosity = external local_unnamed_addr global i32, align 4
@stderr = external local_unnamed_addr global ptr, align 8
@.str.4 = external hidden unnamed_addr constant [49 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [63 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [68 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [13 x i8], align 1
@libxsmm_ninit = external local_unnamed_addr global i32, align 4
@.str.9 = external hidden unnamed_addr constant [59 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [59 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local range(i32 0, 2) i32 @libxsmm_matdiff(ptr noundef %0, i32 noundef %1, i32 noundef %2, i32 noundef %3, ptr noundef readonly %4, ptr noundef readonly %5, ptr noundef readonly %6, ptr noundef readonly %7) local_unnamed_addr #0 {
  %9 = alloca double, align 8
  %10 = alloca double, align 8
  %11 = alloca double, align 8
  %12 = alloca double, align 8
  %13 = alloca double, align 8
  %14 = alloca double, align 8
  %15 = alloca double, align 8
  %16 = alloca double, align 8
  %17 = alloca double, align 8
  %18 = alloca double, align 8
  %19 = alloca double, align 8
  %20 = alloca double, align 8
  %21 = alloca double, align 8
  %22 = alloca double, align 8
  %23 = alloca double, align 8
  %24 = alloca double, align 8
  %25 = alloca double, align 8
  %26 = alloca double, align 8
  %27 = alloca double, align 8
  %28 = alloca double, align 8
  %29 = alloca double, align 8
  %30 = alloca double, align 8
  %31 = alloca double, align 8
  %32 = alloca double, align 8
  %33 = alloca double, align 8
  %34 = alloca double, align 8
  %35 = alloca double, align 8
  %36 = alloca double, align 8
  %37 = alloca double, align 8
  %38 = alloca double, align 8
  %39 = alloca double, align 8
  %40 = alloca double, align 8
  %41 = alloca double, align 8
  %42 = alloca double, align 8
  %43 = alloca double, align 8
  %44 = alloca double, align 8
  %45 = alloca double, align 8
  %46 = alloca double, align 8
  %47 = alloca double, align 8
  %48 = alloca double, align 8
  %49 = alloca double, align 8
  %50 = alloca double, align 8
  %51 = alloca double, align 8
  %52 = alloca double, align 8
  %53 = alloca double, align 8
  %54 = alloca double, align 8
  %55 = alloca double, align 8
  %56 = alloca double, align 8
  %57 = alloca double, align 8
  %58 = alloca double, align 8
  %59 = alloca double, align 8
  %60 = alloca double, align 8
  %61 = alloca double, align 8
  %62 = alloca double, align 8
  %63 = alloca double, align 8
  %64 = alloca double, align 8
  %65 = alloca double, align 8
  %66 = alloca double, align 8
  %67 = alloca double, align 8
  %68 = alloca double, align 8
  %69 = alloca double, align 8
  %70 = alloca double, align 8
  %71 = alloca double, align 8
  %72 = alloca double, align 8
  %73 = alloca double, align 8
  %74 = alloca double, align 8
  %75 = alloca double, align 8
  %76 = alloca double, align 8
  %77 = alloca double, align 8
  %78 = alloca double, align 8
  %79 = alloca double, align 8
  %80 = alloca double, align 8
  %81 = alloca double, align 8
  %82 = alloca double, align 8
  %83 = alloca double, align 8
  %84 = alloca double, align 8
  %85 = alloca double, align 8
  %86 = alloca double, align 8
  %87 = alloca double, align 8
  %88 = alloca double, align 8
  %89 = alloca double, align 8
  %90 = alloca double, align 8
  %91 = alloca double, align 8
  %92 = alloca double, align 8
  %93 = alloca double, align 8
  %94 = alloca double, align 8
  %95 = alloca double, align 8
  %96 = alloca double, align 8
  %97 = alloca double, align 8
  %98 = alloca double, align 8
  %99 = alloca double, align 8
  %100 = alloca double, align 8
  %101 = alloca double, align 8
  %102 = alloca double, align 8
  %103 = alloca double, align 8
  %104 = alloca double, align 8
  %105 = alloca double, align 8
  %106 = alloca double, align 8
  %107 = alloca double, align 8
  %108 = alloca double, align 8
  %109 = alloca double, align 8
  %110 = alloca double, align 8
  %111 = alloca double, align 8
  %112 = alloca double, align 8
  %113 = alloca double, align 8
  %114 = alloca double, align 8
  %115 = alloca double, align 8
  %116 = alloca double, align 8
  %117 = alloca double, align 8
  %118 = alloca double, align 8
  %119 = alloca double, align 8
  %120 = alloca double, align 8
  %121 = alloca double, align 8
  %122 = alloca double, align 8
  %123 = alloca double, align 8
  %124 = alloca double, align 8
  %125 = alloca double, align 8
  %126 = alloca double, align 8
  %127 = alloca double, align 8
  %128 = alloca double, align 8
  %129 = alloca double, align 8
  %130 = alloca double, align 8
  %131 = alloca double, align 8
  %132 = alloca double, align 8
  %133 = alloca double, align 8
  %134 = alloca double, align 8
  %135 = alloca double, align 8
  %136 = alloca double, align 8
  %137 = alloca double, align 8
  %138 = alloca double, align 8
  %139 = alloca double, align 8
  %140 = alloca double, align 8
  %141 = alloca double, align 8
  %142 = alloca double, align 8
  %143 = alloca double, align 8
  %144 = alloca double, align 8
  %145 = alloca double, align 8
  %146 = alloca double, align 8
  %147 = alloca double, align 8
  %148 = alloca double, align 8
  %149 = alloca double, align 8
  %150 = alloca double, align 8
  %151 = alloca double, align 8
  %152 = alloca double, align 8
  %153 = alloca double, align 8
  %154 = alloca double, align 8
  %155 = alloca double, align 8
  %156 = alloca double, align 8
  %157 = alloca double, align 8
  %158 = alloca double, align 8
  %159 = alloca double, align 8
  %160 = alloca double, align 8
  %161 = alloca double, align 8
  %162 = alloca double, align 8
  %163 = alloca double, align 8
  %164 = alloca double, align 8
  %165 = alloca double, align 8
  %166 = alloca double, align 8
  %167 = alloca double, align 8
  %168 = alloca double, align 8
  %169 = alloca double, align 8
  %170 = alloca double, align 8
  %171 = alloca double, align 8
  %172 = alloca double, align 8
  %173 = alloca double, align 8
  %174 = alloca double, align 8
  %175 = alloca double, align 8
  %176 = alloca double, align 8
  %177 = alloca double, align 8
  %178 = alloca double, align 8
  %179 = alloca double, align 8
  %180 = alloca double, align 8
  %181 = alloca double, align 8
  %182 = alloca double, align 8
  %183 = alloca double, align 8
  %184 = alloca double, align 8
  %185 = alloca double, align 8
  %186 = alloca double, align 8
  %187 = alloca double, align 8
  %188 = alloca double, align 8
  %189 = alloca double, align 8
  %190 = alloca double, align 8
  %191 = alloca double, align 8
  %192 = alloca double, align 8
  %193 = alloca double, align 8
  %194 = alloca double, align 8
  %195 = alloca double, align 8
  %196 = alloca double, align 8
  %197 = alloca double, align 8
  %198 = alloca double, align 8
  %199 = alloca double, align 8
  %200 = alloca double, align 8
  %201 = alloca double, align 8
  %202 = alloca double, align 8
  %203 = alloca double, align 8
  %204 = alloca double, align 8
  %205 = alloca double, align 8
  %206 = alloca double, align 8
  %207 = alloca double, align 8
  %208 = alloca double, align 8
  %209 = alloca double, align 8
  %210 = alloca double, align 8
  %211 = alloca double, align 8
  %212 = alloca double, align 8
  %213 = alloca double, align 8
  %214 = alloca double, align 8
  %215 = alloca double, align 8
  %216 = alloca double, align 8
  %217 = alloca double, align 8
  %218 = alloca double, align 8
  %219 = alloca double, align 8
  %220 = alloca double, align 8
  %221 = alloca double, align 8
  %222 = alloca double, align 8
  %223 = alloca double, align 8
  %224 = alloca double, align 8
  %225 = alloca double, align 8
  %226 = alloca double, align 8
  %227 = alloca double, align 8
  %228 = alloca double, align 8
  %229 = alloca double, align 8
  %230 = alloca double, align 8
  %231 = alloca double, align 8
  %232 = alloca double, align 8
  %233 = alloca double, align 8
  %234 = alloca double, align 8
  %235 = alloca double, align 8
  %236 = alloca double, align 8
  %237 = alloca double, align 8
  %238 = alloca double, align 8
  %239 = alloca double, align 8
  %240 = alloca double, align 8
  %241 = alloca double, align 8
  %242 = alloca double, align 8
  %243 = alloca double, align 8
  %244 = alloca double, align 8
  %245 = alloca double, align 8
  %246 = alloca double, align 8
  %247 = alloca double, align 8
  %248 = alloca double, align 8
  %249 = alloca double, align 8
  %250 = alloca double, align 8
  %251 = alloca double, align 8
  %252 = alloca double, align 8
  %253 = alloca double, align 8
  %254 = alloca double, align 8
  %255 = alloca double, align 8
  %256 = alloca double, align 8
  %257 = alloca double, align 8
  %258 = alloca double, align 8
  %259 = alloca double, align 8
  %260 = alloca double, align 8
  %261 = alloca double, align 8
  %262 = alloca double, align 8
  %263 = alloca double, align 8
  %264 = alloca double, align 8
  %265 = alloca double, align 8
  %266 = alloca double, align 8
  %267 = alloca double, align 8
  %268 = alloca double, align 8
  %269 = alloca double, align 8
  %270 = alloca double, align 8
  %271 = alloca double, align 8
  %272 = alloca double, align 8
  %273 = alloca double, align 8
  %274 = alloca double, align 8
  %275 = alloca double, align 8
  %276 = alloca double, align 8
  %277 = alloca double, align 8
  %278 = alloca double, align 8
  %279 = alloca double, align 8
  %280 = alloca double, align 8
  %281 = alloca double, align 8
  %282 = alloca double, align 8
  %283 = alloca double, align 8
  %284 = alloca double, align 8
  %285 = alloca double, align 8
  %286 = alloca double, align 8
  %287 = alloca double, align 8
  %288 = alloca double, align 8
  %289 = alloca double, align 8
  %290 = alloca double, align 8
  %291 = alloca double, align 8
  %292 = alloca double, align 8
  %293 = alloca double, align 8
  %294 = alloca double, align 8
  %295 = alloca double, align 8
  %296 = alloca double, align 8
  %297 = alloca double, align 8
  %298 = alloca double, align 8
  %299 = alloca double, align 8
  %300 = alloca double, align 8
  %301 = alloca double, align 8
  %302 = alloca double, align 8
  %303 = alloca double, align 8
  %304 = alloca double, align 8
  %305 = alloca double, align 8
  %306 = alloca double, align 8
  %307 = alloca double, align 8
  %308 = alloca double, align 8
  %309 = alloca double, align 8
  %310 = alloca double, align 8
  %311 = alloca double, align 8
  %312 = alloca double, align 8
  %313 = alloca double, align 8
  %314 = alloca double, align 8
  %315 = alloca double, align 8
  %316 = alloca double, align 8
  %317 = alloca double, align 8
  %318 = alloca double, align 8
  %319 = alloca double, align 8
  %320 = alloca double, align 8
  %321 = alloca double, align 8
  %322 = alloca double, align 8
  %323 = alloca double, align 8
  %324 = alloca double, align 8
  %325 = alloca double, align 8
  %326 = alloca double, align 8
  %327 = alloca double, align 8
  %328 = alloca double, align 8
  %329 = alloca double, align 8
  %330 = alloca double, align 8
  %331 = alloca double, align 8
  %332 = alloca double, align 8
  %333 = alloca double, align 8
  %334 = alloca double, align 8
  %335 = alloca double, align 8
  %336 = alloca double, align 8
  %337 = alloca double, align 8
  %338 = alloca double, align 8
  %339 = alloca double, align 8
  %340 = alloca double, align 8
  %341 = alloca double, align 8
  %342 = alloca double, align 8
  %343 = alloca double, align 8
  %344 = alloca double, align 8
  %345 = alloca double, align 8
  %346 = alloca double, align 8
  %347 = alloca double, align 8
  %348 = alloca double, align 8
  %349 = alloca double, align 8
  %350 = alloca double, align 8
  %351 = alloca double, align 8
  %352 = alloca double, align 8
  %353 = alloca double, align 8
  %354 = alloca double, align 8
  %355 = alloca double, align 8
  %356 = alloca double, align 8
  %357 = alloca double, align 8
  %358 = alloca double, align 8
  %359 = alloca double, align 8
  %360 = alloca double, align 8
  %361 = alloca double, align 8
  %362 = alloca double, align 8
  %363 = alloca double, align 8
  %364 = alloca double, align 8
  %365 = alloca double, align 8
  %366 = alloca double, align 8
  %367 = alloca double, align 8
  %368 = alloca double, align 8
  %369 = alloca double, align 8
  %370 = alloca double, align 8
  %371 = alloca double, align 8
  %372 = alloca double, align 8
  %373 = alloca double, align 8
  %374 = alloca double, align 8
  %375 = alloca double, align 8
  %376 = alloca double, align 8
  %377 = alloca double, align 8
  %378 = alloca double, align 8
  %379 = alloca double, align 8
  %380 = alloca double, align 8
  %381 = alloca double, align 8
  %382 = alloca double, align 8
  %383 = alloca double, align 8
  %384 = alloca double, align 8
  %385 = alloca double, align 8
  %386 = alloca double, align 8
  %387 = alloca double, align 8
  %388 = alloca double, align 8
  %389 = alloca double, align 8
  %390 = alloca double, align 8
  %391 = alloca double, align 8
  %392 = alloca double, align 8
  %393 = alloca double, align 8
  %394 = alloca double, align 8
  %395 = alloca double, align 8
  %396 = alloca double, align 8
  %397 = alloca double, align 8
  %398 = alloca double, align 8
  %399 = alloca double, align 8
  %400 = alloca double, align 8
  %401 = alloca double, align 8
  %402 = alloca double, align 8
  %403 = alloca double, align 8
  %404 = alloca double, align 8
  %405 = alloca double, align 8
  %406 = alloca double, align 8
  %407 = alloca double, align 8
  %408 = alloca double, align 8
  %409 = alloca double, align 8
  %410 = alloca double, align 8
  %411 = alloca double, align 8
  %412 = alloca double, align 8
  %413 = alloca double, align 8
  %414 = alloca double, align 8
  %415 = alloca double, align 8
  %416 = alloca double, align 8
  %417 = alloca double, align 8
  %418 = alloca double, align 8
  %419 = alloca double, align 8
  %420 = alloca double, align 8
  %421 = alloca double, align 8
  %422 = alloca double, align 8
  %423 = alloca double, align 8
  %424 = alloca double, align 8
  %425 = alloca double, align 8
  %426 = alloca double, align 8
  %427 = alloca double, align 8
  %428 = alloca double, align 8
  %429 = alloca double, align 8
  %430 = alloca double, align 8
  %431 = alloca double, align 8
  %432 = alloca double, align 8
  %433 = alloca double, align 8
  %434 = alloca double, align 8
  %435 = alloca double, align 8
  %436 = alloca double, align 8
  %437 = alloca double, align 8
  %438 = alloca double, align 8
  %439 = alloca double, align 8
  %440 = alloca double, align 8
  %441 = alloca double, align 8
  %442 = alloca double, align 8
  %443 = alloca double, align 8
  %444 = alloca double, align 8
  %445 = alloca double, align 8
  %446 = alloca double, align 8
  %447 = alloca double, align 8
  %448 = alloca double, align 8
  %449 = alloca double, align 8
  %450 = alloca double, align 8
  %451 = alloca double, align 8
  %452 = alloca double, align 8
  %453 = alloca double, align 8
  %454 = alloca double, align 8
  %455 = alloca double, align 8
  %456 = alloca double, align 8
  %457 = alloca double, align 8
  %458 = alloca double, align 8
  %459 = alloca double, align 8
  %460 = alloca double, align 8
  %461 = alloca double, align 8
  %462 = alloca double, align 8
  %463 = alloca double, align 8
  %464 = alloca double, align 8
  %465 = alloca double, align 8
  %466 = alloca double, align 8
  %467 = alloca double, align 8
  %468 = alloca double, align 8
  %469 = alloca double, align 8
  %470 = alloca double, align 8
  %471 = alloca double, align 8
  %472 = alloca double, align 8
  %473 = alloca double, align 8
  %474 = alloca double, align 8
  %475 = alloca double, align 8
  %476 = alloca double, align 8
  %477 = alloca double, align 8
  %478 = alloca double, align 8
  %479 = alloca double, align 8
  %480 = alloca double, align 8
  %481 = alloca double, align 8
  %482 = alloca double, align 8
  %483 = alloca double, align 8
  %484 = alloca double, align 8
  %485 = alloca double, align 8
  %486 = alloca double, align 8
  %487 = alloca double, align 8
  %488 = alloca double, align 8
  %489 = alloca double, align 8
  %490 = alloca double, align 8
  %491 = alloca double, align 8
  %492 = alloca double, align 8
  %493 = alloca double, align 8
  %494 = alloca double, align 8
  %495 = alloca double, align 8
  %496 = alloca double, align 8
  %497 = alloca double, align 8
  %498 = alloca double, align 8
  %499 = alloca double, align 8
  %500 = alloca double, align 8
  %501 = alloca double, align 8
  %502 = alloca double, align 8
  %503 = alloca double, align 8
  %504 = alloca double, align 8
  %505 = alloca double, align 8
  %506 = alloca double, align 8
  %507 = alloca double, align 8
  %508 = alloca double, align 8
  %509 = alloca double, align 8
  %510 = alloca double, align 8
  %511 = alloca double, align 8
  %512 = alloca double, align 8
  %513 = icmp eq ptr %6, null
  br i1 %513, label %516, label %514

514:                                              ; preds = %8
  %515 = load i32, ptr %6, align 4, !tbaa !5
  br label %516

516:                                              ; preds = %8, %514
  %517 = phi i32 [ %515, %514 ], [ %2, %8 ]
  %518 = icmp eq ptr %7, null
  br i1 %518, label %521, label %519

519:                                              ; preds = %516
  %520 = load i32, ptr %7, align 4, !tbaa !5
  br label %521

521:                                              ; preds = %516, %519
  %522 = phi i32 [ %520, %519 ], [ %2, %516 ]
  %523 = icmp ne ptr %4, null
  %524 = icmp eq ptr %5, null
  %or.cond.not = or i1 %523, %524
  %spec.select = select i1 %523, ptr %5, ptr null
  %spec.select6345 = select i1 %or.cond.not, ptr %4, ptr %5
  %525 = icmp eq ptr %spec.select6345, null
  %526 = icmp eq ptr %0, null
  %or.cond3.not7093 = or i1 %526, %525
  %.not = icmp slt i32 %517, %2
  %or.cond = select i1 %or.cond3.not7093, i1 true, i1 %.not
  %.not6261 = icmp slt i32 %522, %2
  %or.cond6346 = select i1 %or.cond, i1 true, i1 %.not6261
  br i1 %or.cond6346, label %6434, label %527

527:                                              ; preds = %521
  %528 = tail call ptr @getenv(ptr noundef nonnull @.str) #8
  %529 = icmp eq ptr %528, null
  br i1 %529, label %534, label %530

530:                                              ; preds = %527
  %531 = load i8, ptr %528, align 1, !tbaa !9
  %.not6262 = icmp eq i8 %531, 0
  br i1 %.not6262, label %534, label %532

532:                                              ; preds = %530
  %533 = tail call i32 @atoi(ptr nocapture noundef %528) #9
  br label %534

534:                                              ; preds = %532, %530, %527
  %535 = phi i32 [ 0, %527 ], [ %533, %532 ], [ 1, %530 ]
  %536 = sext i32 %2 to i64
  %537 = sext i32 %3 to i64
  %538 = mul nsw i64 %537, %536
  %539 = icmp eq i32 %3, 1
  br i1 %539, label %540, label %541

540:                                              ; preds = %534
  br label %541

541:                                              ; preds = %540, %534
  %.05043 = phi i32 [ %2, %540 ], [ %3, %534 ]
  %.05042 = phi i32 [ 1, %540 ], [ %2, %534 ]
  %.05041 = phi i32 [ 1, %540 ], [ %522, %534 ]
  %.05040 = phi i32 [ 1, %540 ], [ %517, %534 ]
  tail call void @libxsmm_matdiff_clear(ptr noundef nonnull %0)
  %542 = getelementptr inbounds i8, ptr %0, i64 88
  %543 = load double, ptr %542, align 8, !tbaa !10
  switch i32 %1, label %6306 [
    i32 6, label %544
    i32 8, label %1019
    i32 9, label %1494
    i32 10, label %1942
    i32 11, label %2417
    i32 12, label %2865
    i32 0, label %3340
    i32 1, label %3820
    i32 3, label %4310
    i32 2, label %4809
    i32 4, label %5308
    i32 5, label %5807
  ]

544:                                              ; preds = %541
  %545 = icmp eq i32 %535, 0
  br i1 %545, label %546, label %776

546:                                              ; preds = %544
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %9) #8
  store double 0.000000e+00, ptr %9, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %10) #8
  store double 0.000000e+00, ptr %10, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %11) #8
  store double 0.000000e+00, ptr %11, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %12) #8
  store double 0.000000e+00, ptr %12, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %13) #8
  store double 0.000000e+00, ptr %13, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %14) #8
  store double 0.000000e+00, ptr %14, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %15) #8
  store double 0.000000e+00, ptr %15, align 8, !tbaa !13
  %547 = icmp sgt i32 %.05043, 0
  br i1 %547, label %.lr.ph7907, label %._crit_edge7908

.lr.ph7907:                                       ; preds = %546
  %548 = icmp sgt i32 %.05042, 0
  %.not6332 = icmp eq ptr %spec.select, null
  %549 = getelementptr inbounds i8, ptr %0, i64 96
  %550 = getelementptr inbounds i8, ptr %0, i64 128
  %551 = getelementptr inbounds i8, ptr %0, i64 136
  %552 = getelementptr inbounds i8, ptr %0, i64 40
  %553 = getelementptr inbounds i8, ptr %0, i64 160
  %554 = getelementptr inbounds i8, ptr %0, i64 168
  %555 = getelementptr inbounds i8, ptr %0, i64 176
  %556 = getelementptr inbounds i8, ptr %0, i64 180
  %557 = getelementptr inbounds i8, ptr %0, i64 48
  %558 = getelementptr inbounds i8, ptr %0, i64 64
  %559 = getelementptr inbounds i8, ptr %0, i64 56
  %560 = getelementptr inbounds i8, ptr %0, i64 80
  %561 = getelementptr inbounds i8, ptr %0, i64 120
  %562 = getelementptr inbounds i8, ptr %0, i64 16
  %563 = sext i32 %.05041 to i64
  %564 = sext i32 %.05040 to i64
  %wide.trip.count8681 = zext nneg i32 %.05043 to i64
  %wide.trip.count8676 = zext nneg i32 %.05042 to i64
  br label %565

565:                                              ; preds = %.lr.ph7907, %655
  %indvars.iv8678 = phi i64 [ 0, %.lr.ph7907 ], [ %indvars.iv.next8679, %655 ]
  %.050447905 = phi double [ 0.000000e+00, %.lr.ph7907 ], [ %.15045, %655 ]
  %.050487904 = phi double [ 0.000000e+00, %.lr.ph7907 ], [ %.15049, %655 ]
  %.050567903 = phi double [ 0.000000e+00, %.lr.ph7907 ], [ %.15057.lcssa, %655 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %16) #8
  store double 0.000000e+00, ptr %16, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %17) #8
  store double 0.000000e+00, ptr %17, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %18) #8
  store double 0.000000e+00, ptr %18, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %19) #8
  store double 0.000000e+00, ptr %19, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %20) #8
  store double 0.000000e+00, ptr %20, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %21) #8
  store double 0.000000e+00, ptr %21, align 8, !tbaa !13
  br i1 %548, label %.lr.ph7899, label %._crit_edge7900

.lr.ph7899:                                       ; preds = %565
  %566 = mul nsw i64 %indvars.iv8678, %563
  %567 = mul nsw i64 %indvars.iv8678, %564
  %invariant.gep9110 = getelementptr i64, ptr %spec.select, i64 %566
  %invariant.gep9112 = getelementptr i64, ptr %spec.select6345, i64 %567
  %568 = trunc nuw nsw i64 %indvars.iv8678 to i32
  br label %569

569:                                              ; preds = %.lr.ph7899, %646
  %indvars.iv8673 = phi i64 [ 0, %.lr.ph7899 ], [ %indvars.iv.next8674, %646 ]
  %.150577897 = phi double [ %.050567903, %.lr.ph7899 ], [ %.25058, %646 ]
  br i1 %.not6332, label %573, label %570

570:                                              ; preds = %569
  %gep9111 = getelementptr i64, ptr %invariant.gep9110, i64 %indvars.iv8673
  %571 = load i64, ptr %gep9111, align 8, !tbaa !14
  %572 = sitofp i64 %571 to double
  br label %573

573:                                              ; preds = %569, %570
  %574 = phi double [ %572, %570 ], [ 0.000000e+00, %569 ]
  %gep9113 = getelementptr i64, ptr %invariant.gep9112, i64 %indvars.iv8673
  %575 = load i64, ptr %gep9113, align 8, !tbaa !14
  %576 = sitofp i64 %575 to double
  %577 = fcmp oge double %574, 0.000000e+00
  %578 = fneg double %574
  %579 = select i1 %577, double %574, double %578
  %580 = fneg double %576
  %581 = icmp slt i64 %575, 0
  %582 = select i1 %581, double %580, double %576
  %583 = load double, ptr %542, align 8, !tbaa !10
  %584 = fcmp ogt double %583, %576
  br i1 %584, label %585, label %586

585:                                              ; preds = %573
  store double %576, ptr %542, align 8, !tbaa !10
  br label %586

586:                                              ; preds = %585, %573
  %587 = load double, ptr %549, align 8, !tbaa !16
  %588 = fcmp olt double %587, %576
  br i1 %588, label %589, label %590

589:                                              ; preds = %586
  store double %576, ptr %549, align 8, !tbaa !16
  br label %590

590:                                              ; preds = %586, %589
  %591 = fcmp ogt double %543, %579
  %592 = fcmp oeq double %574, %576
  %or.cond6347 = select i1 %591, i1 true, i1 %592
  br i1 %or.cond6347, label %593, label %.thread6494

593:                                              ; preds = %590
  br i1 %.not6332, label %600, label %594

594:                                              ; preds = %593
  %595 = fcmp ogt double %574, %576
  br i1 %595, label %596, label %598

596:                                              ; preds = %594
  %597 = fsub double %574, %576
  br label %600

598:                                              ; preds = %594
  %599 = fsub double %576, %574
  br label %600

600:                                              ; preds = %593, %596, %598
  %601 = phi double [ %597, %596 ], [ %599, %598 ], [ 0.000000e+00, %593 ]
  %602 = fcmp ugt double %582, 0.000000e+00
  %603 = fdiv double %601, %582
  %604 = select i1 %602, double %603, double %579
  %605 = load double, ptr %550, align 8, !tbaa !17
  %606 = fcmp olt double %574, %605
  br i1 %606, label %607, label %608

607:                                              ; preds = %600
  store double %574, ptr %550, align 8, !tbaa !17
  br label %608

608:                                              ; preds = %607, %600
  %609 = load double, ptr %551, align 8, !tbaa !18
  %610 = fcmp ogt double %574, %609
  br i1 %610, label %611, label %612

611:                                              ; preds = %608
  store double %574, ptr %551, align 8, !tbaa !18
  br label %612

612:                                              ; preds = %611, %608
  %613 = load double, ptr %552, align 8, !tbaa !19
  %614 = fcmp olt double %613, %601
  br i1 %614, label %615, label %617

615:                                              ; preds = %612
  store double %601, ptr %552, align 8, !tbaa !19
  store double %576, ptr %553, align 8, !tbaa !20
  store double %574, ptr %554, align 8, !tbaa !21
  %616 = trunc nuw nsw i64 %indvars.iv8673 to i32
  store i32 %616, ptr %555, align 8, !tbaa !22
  store i32 %568, ptr %556, align 4, !tbaa !23
  br label %617

617:                                              ; preds = %615, %612
  %618 = load double, ptr %557, align 8, !tbaa !24
  %619 = fcmp olt double %618, %604
  br i1 %619, label %620, label %621

620:                                              ; preds = %617
  store double %604, ptr %557, align 8, !tbaa !24
  br label %621

621:                                              ; preds = %620, %617
  %622 = fmul double %604, %604
  %623 = fcmp ogt double %543, %622
  br i1 %623, label %624, label %630

624:                                              ; preds = %621
  %625 = fsub double %622, %.150577897
  %626 = load double, ptr %558, align 8, !tbaa !25
  %627 = fadd double %625, %626
  %628 = fsub double %627, %626
  %629 = fsub double %628, %625
  store double %627, ptr %558, align 8, !tbaa !25
  br label %630

630:                                              ; preds = %624, %621
  %.25058 = phi double [ %629, %624 ], [ %.150577897, %621 ]
  %631 = call double @libxsmm_kahan_sum(double noundef %582, ptr noundef nonnull %19, ptr noundef nonnull %16)
  %632 = call double @libxsmm_kahan_sum(double noundef %579, ptr noundef nonnull %20, ptr noundef nonnull %17)
  %633 = call double @libxsmm_kahan_sum(double noundef %601, ptr noundef nonnull %21, ptr noundef nonnull %18)
  %634 = fmul double %576, %576
  %635 = call double @libxsmm_kahan_sum(double noundef %634, ptr noundef nonnull %12, ptr noundef nonnull %10)
  %636 = fmul double %574, %574
  %637 = call double @libxsmm_kahan_sum(double noundef %636, ptr noundef nonnull %13, ptr noundef nonnull %11)
  %638 = fmul double %601, %601
  %639 = fcmp ogt double %543, %638
  br i1 %639, label %640, label %646

640:                                              ; preds = %630
  %641 = call double @libxsmm_kahan_sum(double noundef %638, ptr noundef nonnull %559, ptr noundef nonnull %9)
  br label %646

.thread6494:                                      ; preds = %590
  %642 = trunc nuw nsw i64 %indvars.iv8678 to i32
  %643 = trunc nuw nsw i64 %indvars.iv8673 to i32
  %644 = fcmp ogt double %543, %582
  %645 = select i1 %644, i32 1, i32 2
  store i32 %643, ptr %555, align 8, !tbaa !22
  store i32 %642, ptr %556, align 4, !tbaa !23
  store double %576, ptr %553, align 8, !tbaa !20
  store double %574, ptr %554, align 8, !tbaa !21
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %21) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %20) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %19) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %18) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %17) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %16) #8
  br label %775

646:                                              ; preds = %640, %630
  %indvars.iv.next8674 = add nuw nsw i64 %indvars.iv8673, 1
  %exitcond8677.not = icmp eq i64 %indvars.iv.next8674, %wide.trip.count8676
  br i1 %exitcond8677.not, label %._crit_edge7900.loopexit, label %569, !llvm.loop !26

._crit_edge7900.loopexit:                         ; preds = %646
  %.pre8732 = load double, ptr %19, align 8, !tbaa !13
  br label %._crit_edge7900

._crit_edge7900:                                  ; preds = %._crit_edge7900.loopexit, %565
  %647 = phi double [ 0.000000e+00, %565 ], [ %.pre8732, %._crit_edge7900.loopexit ]
  %.15057.lcssa = phi double [ %.050567903, %565 ], [ %.25058, %._crit_edge7900.loopexit ]
  %648 = call double @libxsmm_kahan_sum(double noundef %647, ptr noundef nonnull %560, ptr noundef nonnull %14)
  %649 = load double, ptr %20, align 8, !tbaa !13
  %650 = call double @libxsmm_kahan_sum(double noundef %649, ptr noundef nonnull %561, ptr noundef nonnull %15)
  %651 = load double, ptr %562, align 8, !tbaa !28
  %652 = load double, ptr %21, align 8, !tbaa !13
  %653 = fcmp olt double %651, %652
  br i1 %653, label %654, label %655

654:                                              ; preds = %._crit_edge7900
  store double %652, ptr %562, align 8, !tbaa !28
  br label %655

655:                                              ; preds = %654, %._crit_edge7900
  %656 = load double, ptr %19, align 8, !tbaa !13
  %657 = fcmp olt double %.050447905, %656
  %.15045 = select i1 %657, double %656, double %.050447905
  %658 = load double, ptr %20, align 8, !tbaa !13
  %659 = fcmp olt double %.050487904, %658
  %.15049 = select i1 %659, double %658, double %.050487904
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %21) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %20) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %19) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %18) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %17) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %16) #8
  %indvars.iv.next8679 = add nuw nsw i64 %indvars.iv8678, 1
  %exitcond8682.not = icmp eq i64 %indvars.iv.next8679, %wide.trip.count8681
  br i1 %exitcond8682.not, label %._crit_edge7908, label %565, !llvm.loop !29

._crit_edge7908:                                  ; preds = %655, %546
  %.05048.lcssa = phi double [ 0.000000e+00, %546 ], [ %.15049, %655 ]
  %.05044.lcssa = phi double [ 0.000000e+00, %546 ], [ %.15045, %655 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %22) #8
  store double 0.000000e+00, ptr %22, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %23) #8
  store double 0.000000e+00, ptr %23, align 8, !tbaa !13
  %660 = getelementptr inbounds i8, ptr %0, i64 112
  %661 = load double, ptr %660, align 8, !tbaa !30
  %662 = fcmp oeq double %661, 0.000000e+00
  br i1 %662, label %664, label %663

663:                                              ; preds = %._crit_edge7908
  call void @__assert_fail(ptr noundef nonnull @.str.1, ptr noundef nonnull @.str.2, i32 noundef 130, ptr noundef nonnull @__PRETTY_FUNCTION__.libxsmm_matdiff) #10
  unreachable

664:                                              ; preds = %._crit_edge7908
  %665 = getelementptr inbounds i8, ptr %0, i64 152
  %666 = load double, ptr %665, align 8, !tbaa !31
  %667 = fcmp oeq double %666, 0.000000e+00
  br i1 %667, label %669, label %668

668:                                              ; preds = %664
  call void @__assert_fail(ptr noundef nonnull @.str.3, ptr noundef nonnull @.str.2, i32 noundef 131, ptr noundef nonnull @__PRETTY_FUNCTION__.libxsmm_matdiff) #10
  unreachable

669:                                              ; preds = %664
  %.not6333 = icmp eq i64 %538, 0
  br i1 %.not6333, label %680, label %670

670:                                              ; preds = %669
  %671 = getelementptr inbounds i8, ptr %0, i64 80
  %672 = load double, ptr %671, align 8, !tbaa !32
  %673 = uitofp i64 %538 to double
  %674 = fdiv double %672, %673
  %675 = getelementptr inbounds i8, ptr %0, i64 104
  store double %674, ptr %675, align 8, !tbaa !33
  %676 = getelementptr inbounds i8, ptr %0, i64 120
  %677 = load double, ptr %676, align 8, !tbaa !34
  %678 = fdiv double %677, %673
  %679 = getelementptr inbounds i8, ptr %0, i64 144
  store double %678, ptr %679, align 8, !tbaa !35
  br label %680

680:                                              ; preds = %670, %669
  %681 = fcmp ugt double %.05044.lcssa, 0.000000e+00
  br i1 %681, label %682, label %688

682:                                              ; preds = %680
  %683 = getelementptr inbounds i8, ptr %0, i64 16
  %684 = load double, ptr %683, align 8, !tbaa !28
  %685 = fcmp ogt double %.05044.lcssa, 0.000000e+00
  %686 = select i1 %685, double %.05044.lcssa, double 1.000000e+00
  %687 = fdiv double %684, %686
  br label %688

688:                                              ; preds = %680, %682
  %689 = phi double [ %687, %682 ], [ %.05048.lcssa, %680 ]
  %690 = getelementptr inbounds i8, ptr %0, i64 24
  store double %689, ptr %690, align 8, !tbaa !36
  %691 = load double, ptr %12, align 8
  %692 = fcmp ugt double %691, 0.000000e+00
  br i1 %692, label %699, label %693

693:                                              ; preds = %688
  %694 = load double, ptr %13, align 8, !tbaa !13
  %695 = fmul double %694, %694
  %696 = getelementptr inbounds i8, ptr %0, i64 56
  %697 = load double, ptr %696, align 8, !tbaa !37
  %698 = fcmp olt double %695, %697
  %. = select i1 %698, double %695, double %697
  br label %705

699:                                              ; preds = %688
  %700 = getelementptr inbounds i8, ptr %0, i64 56
  %701 = load double, ptr %700, align 8, !tbaa !37
  %702 = fcmp ogt double %691, 0.000000e+00
  %703 = select i1 %702, double %691, double 1.000000e+00
  %704 = fdiv double %701, %703
  br label %705

705:                                              ; preds = %693, %699
  %706 = phi double [ %704, %699 ], [ %., %693 ]
  %707 = getelementptr inbounds i8, ptr %0, i64 32
  store double %706, ptr %707, align 8, !tbaa !38
  %708 = icmp sgt i32 %.05042, 0
  br i1 %708, label %.lr.ph7920, label %._crit_edge7921.thread

.lr.ph7920:                                       ; preds = %705
  %.not6334 = icmp eq ptr %spec.select, null
  %709 = getelementptr inbounds i8, ptr %0, i64 104
  %710 = getelementptr inbounds i8, ptr %0, i64 144
  %711 = sext i32 %.05040 to i64
  %712 = sext i32 %.05041 to i64
  %wide.trip.count8696 = zext nneg i32 %.05042 to i64
  %wide.trip.count8686 = zext nneg i32 %.05043 to i64
  %wide.trip.count8691 = zext nneg i32 %.05043 to i64
  br label %713

713:                                              ; preds = %.lr.ph7920, %762
  %indvars.iv8693 = phi i64 [ 0, %.lr.ph7920 ], [ %indvars.iv.next8694, %762 ]
  %.050527918 = phi double [ 0.000000e+00, %.lr.ph7920 ], [ %.15053, %762 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %24) #8
  store double 0.000000e+00, ptr %24, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %25) #8
  store double 0.000000e+00, ptr %25, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %26) #8
  store double 0.000000e+00, ptr %26, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %27) #8
  store double 0.000000e+00, ptr %27, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %28) #8
  store double 0.000000e+00, ptr %28, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %29) #8
  store double 0.000000e+00, ptr %29, align 8, !tbaa !13
  br i1 %547, label %.lr.ph7913, label %._crit_edge7914

.lr.ph7913:                                       ; preds = %713
  %invariant.gep9118 = getelementptr i64, ptr %spec.select6345, i64 %indvars.iv8693
  br i1 %.not6334, label %.thread6510.us, label %.lr.ph7913.split.preheader

.lr.ph7913.split.preheader:                       ; preds = %.lr.ph7913
  %invariant.gep9116 = getelementptr i64, ptr %spec.select, i64 %indvars.iv8693
  br label %.lr.ph7913.split

.thread6510.us:                                   ; preds = %.lr.ph7913, %.thread6510.us
  %indvars.iv8688 = phi i64 [ %indvars.iv.next8689, %.thread6510.us ], [ 0, %.lr.ph7913 ]
  %714 = mul nsw i64 %indvars.iv8688, %711
  %gep9119 = getelementptr i64, ptr %invariant.gep9118, i64 %714
  %715 = load i64, ptr %gep9119, align 8, !tbaa !14
  %716 = sitofp i64 %715 to double
  %717 = load double, ptr %709, align 8, !tbaa !33
  %718 = fsub double %716, %717
  %719 = load double, ptr %710, align 8, !tbaa !35
  %720 = fsub double 0.000000e+00, %719
  %721 = fneg double %716
  %722 = icmp slt i64 %715, 0
  %723 = select i1 %722, double %721, double %716
  %724 = fmul double %718, %718
  %725 = call double @libxsmm_kahan_sum(double noundef %724, ptr noundef nonnull %660, ptr noundef nonnull %22)
  %726 = fmul double %720, %720
  %727 = call double @libxsmm_kahan_sum(double noundef %726, ptr noundef nonnull %665, ptr noundef nonnull %23)
  %728 = call double @libxsmm_kahan_sum(double noundef %723, ptr noundef nonnull %27, ptr noundef nonnull %24)
  %729 = call double @libxsmm_kahan_sum(double noundef 0.000000e+00, ptr noundef nonnull %28, ptr noundef nonnull %25)
  %730 = call double @libxsmm_kahan_sum(double noundef 0.000000e+00, ptr noundef nonnull %29, ptr noundef nonnull %26)
  %indvars.iv.next8689 = add nuw nsw i64 %indvars.iv8688, 1
  %exitcond8692.not = icmp eq i64 %indvars.iv.next8689, %wide.trip.count8691
  br i1 %exitcond8692.not, label %._crit_edge7914, label %.thread6510.us, !llvm.loop !39

.lr.ph7913.split:                                 ; preds = %.lr.ph7913.split.preheader, %.lr.ph7913.split
  %indvars.iv8683 = phi i64 [ 0, %.lr.ph7913.split.preheader ], [ %indvars.iv.next8684, %.lr.ph7913.split ]
  %731 = mul nsw i64 %indvars.iv8683, %711
  %gep9115 = getelementptr i64, ptr %invariant.gep9118, i64 %731
  %732 = load i64, ptr %gep9115, align 8, !tbaa !14
  %733 = sitofp i64 %732 to double
  %734 = mul nsw i64 %indvars.iv8683, %712
  %gep9117 = getelementptr i64, ptr %invariant.gep9116, i64 %734
  %735 = load i64, ptr %gep9117, align 8, !tbaa !14
  %736 = sitofp i64 %735 to double
  %737 = fcmp ogt double %736, %733
  %738 = fsub double %736, %733
  %739 = fsub double %733, %736
  %740 = select i1 %737, double %738, double %739
  %741 = load double, ptr %709, align 8, !tbaa !33
  %742 = fsub double %733, %741
  %743 = load double, ptr %710, align 8, !tbaa !35
  %744 = fsub double %736, %743
  %745 = fneg double %733
  %746 = icmp slt i64 %732, 0
  %747 = select i1 %746, double %745, double %733
  %748 = fneg double %736
  %749 = icmp slt i64 %735, 0
  %750 = select i1 %749, double %748, double %736
  %751 = fmul double %742, %742
  %752 = call double @libxsmm_kahan_sum(double noundef %751, ptr noundef nonnull %660, ptr noundef nonnull %22)
  %753 = fmul double %744, %744
  %754 = call double @libxsmm_kahan_sum(double noundef %753, ptr noundef nonnull %665, ptr noundef nonnull %23)
  %755 = call double @libxsmm_kahan_sum(double noundef %747, ptr noundef nonnull %27, ptr noundef nonnull %24)
  %756 = call double @libxsmm_kahan_sum(double noundef %750, ptr noundef nonnull %28, ptr noundef nonnull %25)
  %757 = call double @libxsmm_kahan_sum(double noundef %740, ptr noundef nonnull %29, ptr noundef nonnull %26)
  %indvars.iv.next8684 = add nuw nsw i64 %indvars.iv8683, 1
  %exitcond8687.not = icmp eq i64 %indvars.iv.next8684, %wide.trip.count8686
  br i1 %exitcond8687.not, label %._crit_edge7914, label %.lr.ph7913.split, !llvm.loop !39

._crit_edge7914:                                  ; preds = %.lr.ph7913.split, %.thread6510.us, %713
  %758 = load double, ptr %0, align 8, !tbaa !40
  %759 = load double, ptr %29, align 8, !tbaa !13
  %760 = fcmp olt double %758, %759
  br i1 %760, label %761, label %762

761:                                              ; preds = %._crit_edge7914
  store double %759, ptr %0, align 8, !tbaa !40
  br label %762

762:                                              ; preds = %761, %._crit_edge7914
  %763 = load double, ptr %27, align 8, !tbaa !13
  %764 = fcmp olt double %.050527918, %763
  %.15053 = select i1 %764, double %763, double %.050527918
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %29) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %28) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %27) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %26) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %25) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %24) #8
  %indvars.iv.next8694 = add nuw nsw i64 %indvars.iv8693, 1
  %exitcond8697.not = icmp eq i64 %indvars.iv.next8694, %wide.trip.count8696
  br i1 %exitcond8697.not, label %._crit_edge7921, label %713, !llvm.loop !41

._crit_edge7921:                                  ; preds = %762
  %765 = fcmp ugt double %.15053, 0.000000e+00
  br i1 %765, label %767, label %._crit_edge7921.thread

._crit_edge7921.thread:                           ; preds = %705, %._crit_edge7921
  %766 = load double, ptr %0, align 8, !tbaa !40
  br label %772

767:                                              ; preds = %._crit_edge7921
  %768 = load double, ptr %0, align 8, !tbaa !40
  %769 = fcmp ogt double %.15053, 0.000000e+00
  %770 = select i1 %769, double %.15053, double 1.000000e+00
  %771 = fdiv double %768, %770
  br label %772

772:                                              ; preds = %767, %._crit_edge7921.thread
  %773 = phi double [ %766, %._crit_edge7921.thread ], [ %771, %767 ]
  %774 = getelementptr inbounds i8, ptr %0, i64 8
  store double %773, ptr %774, align 8, !tbaa !42
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %23) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %22) #8
  br label %775

775:                                              ; preds = %.thread6494, %772
  %.46509 = phi i32 [ %645, %.thread6494 ], [ 0, %772 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %15) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %14) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %13) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %12) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %11) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %10) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %9) #8
  br label %6314

776:                                              ; preds = %544
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %30) #8
  store double 0.000000e+00, ptr %30, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %31) #8
  store double 0.000000e+00, ptr %31, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %32) #8
  store double 0.000000e+00, ptr %32, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %33) #8
  store double 0.000000e+00, ptr %33, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %34) #8
  store double 0.000000e+00, ptr %34, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %35) #8
  store double 0.000000e+00, ptr %35, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %36) #8
  store double 0.000000e+00, ptr %36, align 8, !tbaa !13
  %777 = sext i32 %.05042 to i64
  %778 = sext i32 %.05043 to i64
  %779 = mul nsw i64 %777, %778
  %780 = tail call i64 @libxsmm_coprime2(i64 noundef %779)
  %781 = icmp sgt i32 %.05043, 0
  br i1 %781, label %.lr.ph7881, label %._crit_edge7882

.lr.ph7881:                                       ; preds = %776
  %782 = icmp sgt i32 %.05042, 0
  %.not6329 = icmp eq ptr %spec.select, null
  %783 = getelementptr inbounds i8, ptr %0, i64 96
  %784 = getelementptr inbounds i8, ptr %0, i64 128
  %785 = getelementptr inbounds i8, ptr %0, i64 136
  %786 = getelementptr inbounds i8, ptr %0, i64 40
  %787 = getelementptr inbounds i8, ptr %0, i64 160
  %788 = getelementptr inbounds i8, ptr %0, i64 168
  %789 = getelementptr inbounds i8, ptr %0, i64 176
  %790 = getelementptr inbounds i8, ptr %0, i64 180
  %791 = getelementptr inbounds i8, ptr %0, i64 48
  %792 = getelementptr inbounds i8, ptr %0, i64 64
  %793 = getelementptr inbounds i8, ptr %0, i64 56
  %794 = getelementptr inbounds i8, ptr %0, i64 80
  %795 = getelementptr inbounds i8, ptr %0, i64 120
  %796 = getelementptr inbounds i8, ptr %0, i64 16
  %797 = zext i32 %.05042 to i64
  %wide.trip.count8661 = zext nneg i32 %.05043 to i64
  br label %798

798:                                              ; preds = %.lr.ph7881, %898
  %indvars.iv8658 = phi i64 [ 0, %.lr.ph7881 ], [ %indvars.iv.next8659, %898 ]
  %.051137879 = phi double [ 0.000000e+00, %.lr.ph7881 ], [ %.15114, %898 ]
  %.051177878 = phi double [ 0.000000e+00, %.lr.ph7881 ], [ %.15118, %898 ]
  %.051297877 = phi double [ 0.000000e+00, %.lr.ph7881 ], [ %.15130.lcssa, %898 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %37) #8
  store double 0.000000e+00, ptr %37, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %38) #8
  store double 0.000000e+00, ptr %38, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %39) #8
  store double 0.000000e+00, ptr %39, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %40) #8
  store double 0.000000e+00, ptr %40, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %41) #8
  store double 0.000000e+00, ptr %41, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %42) #8
  store double 0.000000e+00, ptr %42, align 8, !tbaa !13
  br i1 %782, label %.lr.ph7873, label %._crit_edge7874

.lr.ph7873:                                       ; preds = %798
  %799 = mul nuw nsw i64 %indvars.iv8658, %797
  br label %800

800:                                              ; preds = %.lr.ph7873, %889
  %indvars.iv8653 = phi i64 [ 0, %.lr.ph7873 ], [ %indvars.iv.next8654, %889 ]
  %.151307871 = phi double [ %.051297877, %.lr.ph7873 ], [ %.25131, %889 ]
  %801 = add nuw nsw i64 %indvars.iv8653, %799
  %802 = mul i64 %780, %801
  %803 = urem i64 %802, %779
  %804 = udiv i64 %803, %777
  %805 = trunc i64 %804 to i32
  %806 = urem i64 %803, %777
  %807 = trunc nuw i64 %806 to i32
  br i1 %.not6329, label %815, label %808

808:                                              ; preds = %800
  %809 = mul nsw i32 %.05041, %805
  %810 = add nsw i32 %809, %807
  %811 = sext i32 %810 to i64
  %812 = getelementptr inbounds i64, ptr %spec.select, i64 %811
  %813 = load i64, ptr %812, align 8, !tbaa !14
  %814 = sitofp i64 %813 to double
  br label %815

815:                                              ; preds = %800, %808
  %816 = phi double [ %814, %808 ], [ 0.000000e+00, %800 ]
  %817 = mul nsw i32 %.05040, %805
  %818 = add nsw i32 %817, %807
  %819 = sext i32 %818 to i64
  %820 = getelementptr inbounds i64, ptr %spec.select6345, i64 %819
  %821 = load i64, ptr %820, align 8, !tbaa !14
  %822 = sitofp i64 %821 to double
  %823 = fcmp oge double %816, 0.000000e+00
  %824 = fneg double %816
  %825 = select i1 %823, double %816, double %824
  %826 = fneg double %822
  %827 = icmp slt i64 %821, 0
  %828 = select i1 %827, double %826, double %822
  %829 = load double, ptr %542, align 8, !tbaa !10
  %830 = fcmp ogt double %829, %822
  br i1 %830, label %831, label %832

831:                                              ; preds = %815
  store double %822, ptr %542, align 8, !tbaa !10
  br label %832

832:                                              ; preds = %831, %815
  %833 = load double, ptr %783, align 8, !tbaa !16
  %834 = fcmp olt double %833, %822
  br i1 %834, label %835, label %836

835:                                              ; preds = %832
  store double %822, ptr %783, align 8, !tbaa !16
  br label %836

836:                                              ; preds = %832, %835
  %837 = fcmp ogt double %543, %825
  %838 = fcmp oeq double %816, %822
  %or.cond6350 = select i1 %837, i1 true, i1 %838
  br i1 %or.cond6350, label %839, label %.thread6519

839:                                              ; preds = %836
  br i1 %.not6329, label %846, label %840

840:                                              ; preds = %839
  %841 = fcmp ogt double %816, %822
  br i1 %841, label %842, label %844

842:                                              ; preds = %840
  %843 = fsub double %816, %822
  br label %846

844:                                              ; preds = %840
  %845 = fsub double %822, %816
  br label %846

846:                                              ; preds = %839, %842, %844
  %847 = phi double [ %843, %842 ], [ %845, %844 ], [ 0.000000e+00, %839 ]
  %848 = fcmp ugt double %828, 0.000000e+00
  %849 = fdiv double %847, %828
  %850 = select i1 %848, double %849, double %825
  %851 = load double, ptr %784, align 8, !tbaa !17
  %852 = fcmp olt double %816, %851
  br i1 %852, label %853, label %854

853:                                              ; preds = %846
  store double %816, ptr %784, align 8, !tbaa !17
  br label %854

854:                                              ; preds = %853, %846
  %855 = load double, ptr %785, align 8, !tbaa !18
  %856 = fcmp ogt double %816, %855
  br i1 %856, label %857, label %858

857:                                              ; preds = %854
  store double %816, ptr %785, align 8, !tbaa !18
  br label %858

858:                                              ; preds = %857, %854
  %859 = load double, ptr %786, align 8, !tbaa !19
  %860 = fcmp olt double %859, %847
  br i1 %860, label %861, label %862

861:                                              ; preds = %858
  store double %847, ptr %786, align 8, !tbaa !19
  store double %822, ptr %787, align 8, !tbaa !20
  store double %816, ptr %788, align 8, !tbaa !21
  store i32 %807, ptr %789, align 8, !tbaa !22
  store i32 %805, ptr %790, align 4, !tbaa !23
  br label %862

862:                                              ; preds = %861, %858
  %863 = load double, ptr %791, align 8, !tbaa !24
  %864 = fcmp olt double %863, %850
  br i1 %864, label %865, label %866

865:                                              ; preds = %862
  store double %850, ptr %791, align 8, !tbaa !24
  br label %866

866:                                              ; preds = %865, %862
  %867 = fmul double %850, %850
  %868 = fcmp ogt double %543, %867
  br i1 %868, label %869, label %875

869:                                              ; preds = %866
  %870 = fsub double %867, %.151307871
  %871 = load double, ptr %792, align 8, !tbaa !25
  %872 = fadd double %870, %871
  %873 = fsub double %872, %871
  %874 = fsub double %873, %870
  store double %872, ptr %792, align 8, !tbaa !25
  br label %875

875:                                              ; preds = %869, %866
  %.25131 = phi double [ %874, %869 ], [ %.151307871, %866 ]
  %876 = call double @libxsmm_kahan_sum(double noundef %828, ptr noundef nonnull %40, ptr noundef nonnull %37)
  %877 = call double @libxsmm_kahan_sum(double noundef %825, ptr noundef nonnull %41, ptr noundef nonnull %38)
  %878 = call double @libxsmm_kahan_sum(double noundef %847, ptr noundef nonnull %42, ptr noundef nonnull %39)
  %879 = fmul double %822, %822
  %880 = call double @libxsmm_kahan_sum(double noundef %879, ptr noundef nonnull %33, ptr noundef nonnull %31)
  %881 = fmul double %816, %816
  %882 = call double @libxsmm_kahan_sum(double noundef %881, ptr noundef nonnull %34, ptr noundef nonnull %32)
  %883 = fmul double %847, %847
  %884 = fcmp ogt double %543, %883
  br i1 %884, label %885, label %889

885:                                              ; preds = %875
  %886 = call double @libxsmm_kahan_sum(double noundef %883, ptr noundef nonnull %793, ptr noundef nonnull %30)
  br label %889

.thread6519:                                      ; preds = %836
  %887 = fcmp ogt double %543, %828
  %888 = select i1 %887, i32 1, i32 2
  store i32 %807, ptr %789, align 8, !tbaa !22
  store i32 %805, ptr %790, align 4, !tbaa !23
  store double %822, ptr %787, align 8, !tbaa !20
  store double %816, ptr %788, align 8, !tbaa !21
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %42) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %41) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %40) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %39) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %38) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %37) #8
  br label %1018

889:                                              ; preds = %885, %875
  %indvars.iv.next8654 = add nuw nsw i64 %indvars.iv8653, 1
  %exitcond8657.not = icmp eq i64 %indvars.iv.next8654, %797
  br i1 %exitcond8657.not, label %._crit_edge7874.loopexit, label %800, !llvm.loop !43

._crit_edge7874.loopexit:                         ; preds = %889
  %.pre8730 = load double, ptr %40, align 8, !tbaa !13
  br label %._crit_edge7874

._crit_edge7874:                                  ; preds = %._crit_edge7874.loopexit, %798
  %890 = phi double [ 0.000000e+00, %798 ], [ %.pre8730, %._crit_edge7874.loopexit ]
  %.15130.lcssa = phi double [ %.051297877, %798 ], [ %.25131, %._crit_edge7874.loopexit ]
  %891 = call double @libxsmm_kahan_sum(double noundef %890, ptr noundef nonnull %794, ptr noundef nonnull %35)
  %892 = load double, ptr %41, align 8, !tbaa !13
  %893 = call double @libxsmm_kahan_sum(double noundef %892, ptr noundef nonnull %795, ptr noundef nonnull %36)
  %894 = load double, ptr %796, align 8, !tbaa !28
  %895 = load double, ptr %42, align 8, !tbaa !13
  %896 = fcmp olt double %894, %895
  br i1 %896, label %897, label %898

897:                                              ; preds = %._crit_edge7874
  store double %895, ptr %796, align 8, !tbaa !28
  br label %898

898:                                              ; preds = %897, %._crit_edge7874
  %899 = load double, ptr %40, align 8, !tbaa !13
  %900 = fcmp olt double %.051137879, %899
  %.15114 = select i1 %900, double %899, double %.051137879
  %901 = load double, ptr %41, align 8, !tbaa !13
  %902 = fcmp olt double %.051177878, %901
  %.15118 = select i1 %902, double %901, double %.051177878
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %42) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %41) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %40) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %39) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %38) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %37) #8
  %indvars.iv.next8659 = add nuw nsw i64 %indvars.iv8658, 1
  %exitcond8662.not = icmp eq i64 %indvars.iv.next8659, %wide.trip.count8661
  br i1 %exitcond8662.not, label %._crit_edge7882, label %798, !llvm.loop !44

._crit_edge7882:                                  ; preds = %898, %776
  %.05117.lcssa = phi double [ 0.000000e+00, %776 ], [ %.15118, %898 ]
  %.05113.lcssa = phi double [ 0.000000e+00, %776 ], [ %.15114, %898 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %43) #8
  store double 0.000000e+00, ptr %43, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %44) #8
  store double 0.000000e+00, ptr %44, align 8, !tbaa !13
  %903 = getelementptr inbounds i8, ptr %0, i64 112
  %904 = load double, ptr %903, align 8, !tbaa !30
  %905 = fcmp oeq double %904, 0.000000e+00
  br i1 %905, label %907, label %906

906:                                              ; preds = %._crit_edge7882
  call void @__assert_fail(ptr noundef nonnull @.str.1, ptr noundef nonnull @.str.2, i32 noundef 130, ptr noundef nonnull @__PRETTY_FUNCTION__.libxsmm_matdiff) #10
  unreachable

907:                                              ; preds = %._crit_edge7882
  %908 = getelementptr inbounds i8, ptr %0, i64 152
  %909 = load double, ptr %908, align 8, !tbaa !31
  %910 = fcmp oeq double %909, 0.000000e+00
  br i1 %910, label %912, label %911

911:                                              ; preds = %907
  call void @__assert_fail(ptr noundef nonnull @.str.3, ptr noundef nonnull @.str.2, i32 noundef 131, ptr noundef nonnull @__PRETTY_FUNCTION__.libxsmm_matdiff) #10
  unreachable

912:                                              ; preds = %907
  %.not6330 = icmp eq i64 %538, 0
  br i1 %.not6330, label %923, label %913

913:                                              ; preds = %912
  %914 = getelementptr inbounds i8, ptr %0, i64 80
  %915 = load double, ptr %914, align 8, !tbaa !32
  %916 = uitofp i64 %538 to double
  %917 = fdiv double %915, %916
  %918 = getelementptr inbounds i8, ptr %0, i64 104
  store double %917, ptr %918, align 8, !tbaa !33
  %919 = getelementptr inbounds i8, ptr %0, i64 120
  %920 = load double, ptr %919, align 8, !tbaa !34
  %921 = fdiv double %920, %916
  %922 = getelementptr inbounds i8, ptr %0, i64 144
  store double %921, ptr %922, align 8, !tbaa !35
  br label %923

923:                                              ; preds = %913, %912
  %924 = fcmp ugt double %.05113.lcssa, 0.000000e+00
  br i1 %924, label %925, label %931

925:                                              ; preds = %923
  %926 = getelementptr inbounds i8, ptr %0, i64 16
  %927 = load double, ptr %926, align 8, !tbaa !28
  %928 = fcmp ogt double %.05113.lcssa, 0.000000e+00
  %929 = select i1 %928, double %.05113.lcssa, double 1.000000e+00
  %930 = fdiv double %927, %929
  br label %931

931:                                              ; preds = %923, %925
  %932 = phi double [ %930, %925 ], [ %.05117.lcssa, %923 ]
  %933 = getelementptr inbounds i8, ptr %0, i64 24
  store double %932, ptr %933, align 8, !tbaa !36
  %934 = load double, ptr %33, align 8
  %935 = fcmp ugt double %934, 0.000000e+00
  br i1 %935, label %942, label %936

936:                                              ; preds = %931
  %937 = load double, ptr %34, align 8, !tbaa !13
  %938 = fmul double %937, %937
  %939 = getelementptr inbounds i8, ptr %0, i64 56
  %940 = load double, ptr %939, align 8, !tbaa !37
  %941 = fcmp olt double %938, %940
  %.6355 = select i1 %941, double %938, double %940
  br label %948

942:                                              ; preds = %931
  %943 = getelementptr inbounds i8, ptr %0, i64 56
  %944 = load double, ptr %943, align 8, !tbaa !37
  %945 = fcmp ogt double %934, 0.000000e+00
  %946 = select i1 %945, double %934, double 1.000000e+00
  %947 = fdiv double %944, %946
  br label %948

948:                                              ; preds = %936, %942
  %949 = phi double [ %947, %942 ], [ %.6355, %936 ]
  %950 = getelementptr inbounds i8, ptr %0, i64 32
  store double %949, ptr %950, align 8, !tbaa !38
  %951 = icmp sgt i32 %.05042, 0
  br i1 %951, label %.lr.ph7893, label %._crit_edge7894.thread

.lr.ph7893:                                       ; preds = %948
  %.not6331 = icmp eq ptr %spec.select, null
  %952 = getelementptr inbounds i8, ptr %0, i64 104
  %953 = getelementptr inbounds i8, ptr %0, i64 144
  %954 = zext nneg i32 %.05042 to i64
  %wide.trip.count8666 = zext nneg i32 %.05043 to i64
  br label %955

955:                                              ; preds = %.lr.ph7893, %1005
  %indvars.iv8668 = phi i64 [ 0, %.lr.ph7893 ], [ %indvars.iv.next8669, %1005 ]
  %.051217891 = phi double [ 0.000000e+00, %.lr.ph7893 ], [ %.15122, %1005 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %45) #8
  store double 0.000000e+00, ptr %45, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %46) #8
  store double 0.000000e+00, ptr %46, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %47) #8
  store double 0.000000e+00, ptr %47, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %48) #8
  store double 0.000000e+00, ptr %48, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %49) #8
  store double 0.000000e+00, ptr %49, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %50) #8
  store double 0.000000e+00, ptr %50, align 8, !tbaa !13
  br i1 %781, label %.lr.ph7887, label %._crit_edge7888

.lr.ph7887:                                       ; preds = %955, %.thread6535
  %indvars.iv8663 = phi i64 [ %indvars.iv.next8664, %.thread6535 ], [ 0, %955 ]
  %956 = mul nuw nsw i64 %indvars.iv8663, %954
  %957 = add nuw nsw i64 %956, %indvars.iv8668
  %958 = mul i64 %780, %957
  %959 = urem i64 %958, %779
  %960 = udiv i64 %959, %777
  %961 = trunc i64 %960 to i32
  %962 = urem i64 %959, %777
  %963 = trunc nuw i64 %962 to i32
  %964 = mul nsw i32 %.05040, %961
  %965 = add nsw i32 %964, %963
  %966 = sext i32 %965 to i64
  %967 = getelementptr inbounds i64, ptr %spec.select6345, i64 %966
  %968 = load i64, ptr %967, align 8, !tbaa !14
  %969 = sitofp i64 %968 to double
  br i1 %.not6331, label %.thread6535, label %970

970:                                              ; preds = %.lr.ph7887
  %971 = mul nsw i32 %.05041, %961
  %972 = add nsw i32 %971, %963
  %973 = sext i32 %972 to i64
  %974 = getelementptr inbounds i64, ptr %spec.select, i64 %973
  %975 = load i64, ptr %974, align 8, !tbaa !14
  %976 = sitofp i64 %975 to double
  %977 = fcmp ogt double %976, %969
  br i1 %977, label %978, label %980

978:                                              ; preds = %970
  %979 = fsub double %976, %969
  br label %.thread6535

980:                                              ; preds = %970
  %981 = fsub double %969, %976
  br label %.thread6535

.thread6535:                                      ; preds = %.lr.ph7887, %978, %980
  %982 = phi double [ %976, %978 ], [ %976, %980 ], [ 0.000000e+00, %.lr.ph7887 ]
  %983 = phi double [ %979, %978 ], [ %981, %980 ], [ 0.000000e+00, %.lr.ph7887 ]
  %984 = load double, ptr %952, align 8, !tbaa !33
  %985 = fsub double %969, %984
  %986 = load double, ptr %953, align 8, !tbaa !35
  %987 = fsub double %982, %986
  %988 = fneg double %969
  %989 = icmp slt i64 %968, 0
  %990 = select i1 %989, double %988, double %969
  %991 = fcmp oge double %982, 0.000000e+00
  %992 = fneg double %982
  %993 = select i1 %991, double %982, double %992
  %994 = fmul double %985, %985
  %995 = call double @libxsmm_kahan_sum(double noundef %994, ptr noundef nonnull %903, ptr noundef nonnull %43)
  %996 = fmul double %987, %987
  %997 = call double @libxsmm_kahan_sum(double noundef %996, ptr noundef nonnull %908, ptr noundef nonnull %44)
  %998 = call double @libxsmm_kahan_sum(double noundef %990, ptr noundef nonnull %48, ptr noundef nonnull %45)
  %999 = call double @libxsmm_kahan_sum(double noundef %993, ptr noundef nonnull %49, ptr noundef nonnull %46)
  %1000 = call double @libxsmm_kahan_sum(double noundef %983, ptr noundef nonnull %50, ptr noundef nonnull %47)
  %indvars.iv.next8664 = add nuw nsw i64 %indvars.iv8663, 1
  %exitcond8667.not = icmp eq i64 %indvars.iv.next8664, %wide.trip.count8666
  br i1 %exitcond8667.not, label %._crit_edge7888.loopexit, label %.lr.ph7887, !llvm.loop !45

._crit_edge7888.loopexit:                         ; preds = %.thread6535
  %.pre8731 = load double, ptr %50, align 8, !tbaa !13
  br label %._crit_edge7888

._crit_edge7888:                                  ; preds = %._crit_edge7888.loopexit, %955
  %1001 = phi double [ %.pre8731, %._crit_edge7888.loopexit ], [ 0.000000e+00, %955 ]
  %1002 = load double, ptr %0, align 8, !tbaa !40
  %1003 = fcmp olt double %1002, %1001
  br i1 %1003, label %1004, label %1005

1004:                                             ; preds = %._crit_edge7888
  store double %1001, ptr %0, align 8, !tbaa !40
  br label %1005

1005:                                             ; preds = %1004, %._crit_edge7888
  %1006 = load double, ptr %48, align 8, !tbaa !13
  %1007 = fcmp olt double %.051217891, %1006
  %.15122 = select i1 %1007, double %1006, double %.051217891
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %50) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %49) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %48) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %47) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %46) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %45) #8
  %indvars.iv.next8669 = add nuw nsw i64 %indvars.iv8668, 1
  %exitcond8672.not = icmp eq i64 %indvars.iv.next8669, %954
  br i1 %exitcond8672.not, label %._crit_edge7894, label %955, !llvm.loop !46

._crit_edge7894:                                  ; preds = %1005
  %1008 = fcmp ugt double %.15122, 0.000000e+00
  br i1 %1008, label %1010, label %._crit_edge7894.thread

._crit_edge7894.thread:                           ; preds = %948, %._crit_edge7894
  %1009 = load double, ptr %0, align 8, !tbaa !40
  br label %1015

1010:                                             ; preds = %._crit_edge7894
  %1011 = load double, ptr %0, align 8, !tbaa !40
  %1012 = fcmp ogt double %.15122, 0.000000e+00
  %1013 = select i1 %1012, double %.15122, double 1.000000e+00
  %1014 = fdiv double %1011, %1013
  br label %1015

1015:                                             ; preds = %1010, %._crit_edge7894.thread
  %1016 = phi double [ %1009, %._crit_edge7894.thread ], [ %1014, %1010 ]
  %1017 = getelementptr inbounds i8, ptr %0, i64 8
  store double %1016, ptr %1017, align 8, !tbaa !42
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %44) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %43) #8
  br label %1018

1018:                                             ; preds = %.thread6519, %1015
  %.96534 = phi i32 [ %888, %.thread6519 ], [ 0, %1015 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %36) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %35) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %34) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %33) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %32) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %31) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %30) #8
  br label %6314

1019:                                             ; preds = %541
  %1020 = icmp eq i32 %535, 0
  br i1 %1020, label %1021, label %1251

1021:                                             ; preds = %1019
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %51) #8
  store double 0.000000e+00, ptr %51, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %52) #8
  store double 0.000000e+00, ptr %52, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %53) #8
  store double 0.000000e+00, ptr %53, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %54) #8
  store double 0.000000e+00, ptr %54, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %55) #8
  store double 0.000000e+00, ptr %55, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %56) #8
  store double 0.000000e+00, ptr %56, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %57) #8
  store double 0.000000e+00, ptr %57, align 8, !tbaa !13
  %1022 = icmp sgt i32 %.05043, 0
  br i1 %1022, label %.lr.ph7854, label %._crit_edge7855

.lr.ph7854:                                       ; preds = %1021
  %1023 = icmp sgt i32 %.05042, 0
  %.not6326 = icmp eq ptr %spec.select, null
  %1024 = getelementptr inbounds i8, ptr %0, i64 96
  %1025 = getelementptr inbounds i8, ptr %0, i64 128
  %1026 = getelementptr inbounds i8, ptr %0, i64 136
  %1027 = getelementptr inbounds i8, ptr %0, i64 40
  %1028 = getelementptr inbounds i8, ptr %0, i64 160
  %1029 = getelementptr inbounds i8, ptr %0, i64 168
  %1030 = getelementptr inbounds i8, ptr %0, i64 176
  %1031 = getelementptr inbounds i8, ptr %0, i64 180
  %1032 = getelementptr inbounds i8, ptr %0, i64 48
  %1033 = getelementptr inbounds i8, ptr %0, i64 64
  %1034 = getelementptr inbounds i8, ptr %0, i64 56
  %1035 = getelementptr inbounds i8, ptr %0, i64 80
  %1036 = getelementptr inbounds i8, ptr %0, i64 120
  %1037 = getelementptr inbounds i8, ptr %0, i64 16
  %1038 = sext i32 %.05041 to i64
  %1039 = sext i32 %.05040 to i64
  %wide.trip.count8636 = zext nneg i32 %.05043 to i64
  %wide.trip.count8631 = zext nneg i32 %.05042 to i64
  br label %1040

1040:                                             ; preds = %.lr.ph7854, %1130
  %indvars.iv8633 = phi i64 [ 0, %.lr.ph7854 ], [ %indvars.iv.next8634, %1130 ]
  %.051557852 = phi double [ 0.000000e+00, %.lr.ph7854 ], [ %.15156, %1130 ]
  %.051597851 = phi double [ 0.000000e+00, %.lr.ph7854 ], [ %.15160, %1130 ]
  %.051677850 = phi double [ 0.000000e+00, %.lr.ph7854 ], [ %.15168.lcssa, %1130 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %58) #8
  store double 0.000000e+00, ptr %58, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %59) #8
  store double 0.000000e+00, ptr %59, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %60) #8
  store double 0.000000e+00, ptr %60, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %61) #8
  store double 0.000000e+00, ptr %61, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %62) #8
  store double 0.000000e+00, ptr %62, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %63) #8
  store double 0.000000e+00, ptr %63, align 8, !tbaa !13
  br i1 %1023, label %.lr.ph7846, label %._crit_edge7847

.lr.ph7846:                                       ; preds = %1040
  %1041 = mul nsw i64 %indvars.iv8633, %1038
  %1042 = mul nsw i64 %indvars.iv8633, %1039
  %invariant.gep9100 = getelementptr i32, ptr %spec.select, i64 %1041
  %invariant.gep9102 = getelementptr i32, ptr %spec.select6345, i64 %1042
  %1043 = trunc nuw nsw i64 %indvars.iv8633 to i32
  br label %1044

1044:                                             ; preds = %.lr.ph7846, %1121
  %indvars.iv8628 = phi i64 [ 0, %.lr.ph7846 ], [ %indvars.iv.next8629, %1121 ]
  %.151687844 = phi double [ %.051677850, %.lr.ph7846 ], [ %.25169, %1121 ]
  br i1 %.not6326, label %1048, label %1045

1045:                                             ; preds = %1044
  %gep9101 = getelementptr i32, ptr %invariant.gep9100, i64 %indvars.iv8628
  %1046 = load i32, ptr %gep9101, align 4, !tbaa !5
  %1047 = sitofp i32 %1046 to double
  br label %1048

1048:                                             ; preds = %1044, %1045
  %1049 = phi double [ %1047, %1045 ], [ 0.000000e+00, %1044 ]
  %gep9103 = getelementptr i32, ptr %invariant.gep9102, i64 %indvars.iv8628
  %1050 = load i32, ptr %gep9103, align 4, !tbaa !5
  %1051 = sitofp i32 %1050 to double
  %1052 = fcmp oge double %1049, 0.000000e+00
  %1053 = fneg double %1049
  %1054 = select i1 %1052, double %1049, double %1053
  %1055 = fneg double %1051
  %1056 = icmp slt i32 %1050, 0
  %1057 = select i1 %1056, double %1055, double %1051
  %1058 = load double, ptr %542, align 8, !tbaa !10
  %1059 = fcmp ogt double %1058, %1051
  br i1 %1059, label %1060, label %1061

1060:                                             ; preds = %1048
  store double %1051, ptr %542, align 8, !tbaa !10
  br label %1061

1061:                                             ; preds = %1060, %1048
  %1062 = load double, ptr %1024, align 8, !tbaa !16
  %1063 = fcmp olt double %1062, %1051
  br i1 %1063, label %1064, label %1065

1064:                                             ; preds = %1061
  store double %1051, ptr %1024, align 8, !tbaa !16
  br label %1065

1065:                                             ; preds = %1061, %1064
  %1066 = fcmp ogt double %543, %1054
  %1067 = fcmp oeq double %1049, %1051
  %or.cond6356 = select i1 %1066, i1 true, i1 %1067
  br i1 %or.cond6356, label %1068, label %.thread6544

1068:                                             ; preds = %1065
  br i1 %.not6326, label %1075, label %1069

1069:                                             ; preds = %1068
  %1070 = fcmp ogt double %1049, %1051
  br i1 %1070, label %1071, label %1073

1071:                                             ; preds = %1069
  %1072 = fsub double %1049, %1051
  br label %1075

1073:                                             ; preds = %1069
  %1074 = fsub double %1051, %1049
  br label %1075

1075:                                             ; preds = %1068, %1071, %1073
  %1076 = phi double [ %1072, %1071 ], [ %1074, %1073 ], [ 0.000000e+00, %1068 ]
  %1077 = fcmp ugt double %1057, 0.000000e+00
  %1078 = fdiv double %1076, %1057
  %1079 = select i1 %1077, double %1078, double %1054
  %1080 = load double, ptr %1025, align 8, !tbaa !17
  %1081 = fcmp olt double %1049, %1080
  br i1 %1081, label %1082, label %1083

1082:                                             ; preds = %1075
  store double %1049, ptr %1025, align 8, !tbaa !17
  br label %1083

1083:                                             ; preds = %1082, %1075
  %1084 = load double, ptr %1026, align 8, !tbaa !18
  %1085 = fcmp ogt double %1049, %1084
  br i1 %1085, label %1086, label %1087

1086:                                             ; preds = %1083
  store double %1049, ptr %1026, align 8, !tbaa !18
  br label %1087

1087:                                             ; preds = %1086, %1083
  %1088 = load double, ptr %1027, align 8, !tbaa !19
  %1089 = fcmp olt double %1088, %1076
  br i1 %1089, label %1090, label %1092

1090:                                             ; preds = %1087
  store double %1076, ptr %1027, align 8, !tbaa !19
  store double %1051, ptr %1028, align 8, !tbaa !20
  store double %1049, ptr %1029, align 8, !tbaa !21
  %1091 = trunc nuw nsw i64 %indvars.iv8628 to i32
  store i32 %1091, ptr %1030, align 8, !tbaa !22
  store i32 %1043, ptr %1031, align 4, !tbaa !23
  br label %1092

1092:                                             ; preds = %1090, %1087
  %1093 = load double, ptr %1032, align 8, !tbaa !24
  %1094 = fcmp olt double %1093, %1079
  br i1 %1094, label %1095, label %1096

1095:                                             ; preds = %1092
  store double %1079, ptr %1032, align 8, !tbaa !24
  br label %1096

1096:                                             ; preds = %1095, %1092
  %1097 = fmul double %1079, %1079
  %1098 = fcmp ogt double %543, %1097
  br i1 %1098, label %1099, label %1105

1099:                                             ; preds = %1096
  %1100 = fsub double %1097, %.151687844
  %1101 = load double, ptr %1033, align 8, !tbaa !25
  %1102 = fadd double %1100, %1101
  %1103 = fsub double %1102, %1101
  %1104 = fsub double %1103, %1100
  store double %1102, ptr %1033, align 8, !tbaa !25
  br label %1105

1105:                                             ; preds = %1099, %1096
  %.25169 = phi double [ %1104, %1099 ], [ %.151687844, %1096 ]
  %1106 = call double @libxsmm_kahan_sum(double noundef %1057, ptr noundef nonnull %61, ptr noundef nonnull %58)
  %1107 = call double @libxsmm_kahan_sum(double noundef %1054, ptr noundef nonnull %62, ptr noundef nonnull %59)
  %1108 = call double @libxsmm_kahan_sum(double noundef %1076, ptr noundef nonnull %63, ptr noundef nonnull %60)
  %1109 = fmul double %1051, %1051
  %1110 = call double @libxsmm_kahan_sum(double noundef %1109, ptr noundef nonnull %54, ptr noundef nonnull %52)
  %1111 = fmul double %1049, %1049
  %1112 = call double @libxsmm_kahan_sum(double noundef %1111, ptr noundef nonnull %55, ptr noundef nonnull %53)
  %1113 = fmul double %1076, %1076
  %1114 = fcmp ogt double %543, %1113
  br i1 %1114, label %1115, label %1121

1115:                                             ; preds = %1105
  %1116 = call double @libxsmm_kahan_sum(double noundef %1113, ptr noundef nonnull %1034, ptr noundef nonnull %51)
  br label %1121

.thread6544:                                      ; preds = %1065
  %1117 = trunc nuw nsw i64 %indvars.iv8633 to i32
  %1118 = trunc nuw nsw i64 %indvars.iv8628 to i32
  %1119 = fcmp ogt double %543, %1057
  %1120 = select i1 %1119, i32 1, i32 2
  store i32 %1118, ptr %1030, align 8, !tbaa !22
  store i32 %1117, ptr %1031, align 4, !tbaa !23
  store double %1051, ptr %1028, align 8, !tbaa !20
  store double %1049, ptr %1029, align 8, !tbaa !21
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %63) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %62) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %61) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %60) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %59) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %58) #8
  br label %1250

1121:                                             ; preds = %1115, %1105
  %indvars.iv.next8629 = add nuw nsw i64 %indvars.iv8628, 1
  %exitcond8632.not = icmp eq i64 %indvars.iv.next8629, %wide.trip.count8631
  br i1 %exitcond8632.not, label %._crit_edge7847.loopexit, label %1044, !llvm.loop !47

._crit_edge7847.loopexit:                         ; preds = %1121
  %.pre8729 = load double, ptr %61, align 8, !tbaa !13
  br label %._crit_edge7847

._crit_edge7847:                                  ; preds = %._crit_edge7847.loopexit, %1040
  %1122 = phi double [ 0.000000e+00, %1040 ], [ %.pre8729, %._crit_edge7847.loopexit ]
  %.15168.lcssa = phi double [ %.051677850, %1040 ], [ %.25169, %._crit_edge7847.loopexit ]
  %1123 = call double @libxsmm_kahan_sum(double noundef %1122, ptr noundef nonnull %1035, ptr noundef nonnull %56)
  %1124 = load double, ptr %62, align 8, !tbaa !13
  %1125 = call double @libxsmm_kahan_sum(double noundef %1124, ptr noundef nonnull %1036, ptr noundef nonnull %57)
  %1126 = load double, ptr %1037, align 8, !tbaa !28
  %1127 = load double, ptr %63, align 8, !tbaa !13
  %1128 = fcmp olt double %1126, %1127
  br i1 %1128, label %1129, label %1130

1129:                                             ; preds = %._crit_edge7847
  store double %1127, ptr %1037, align 8, !tbaa !28
  br label %1130

1130:                                             ; preds = %1129, %._crit_edge7847
  %1131 = load double, ptr %61, align 8, !tbaa !13
  %1132 = fcmp olt double %.051557852, %1131
  %.15156 = select i1 %1132, double %1131, double %.051557852
  %1133 = load double, ptr %62, align 8, !tbaa !13
  %1134 = fcmp olt double %.051597851, %1133
  %.15160 = select i1 %1134, double %1133, double %.051597851
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %63) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %62) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %61) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %60) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %59) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %58) #8
  %indvars.iv.next8634 = add nuw nsw i64 %indvars.iv8633, 1
  %exitcond8637.not = icmp eq i64 %indvars.iv.next8634, %wide.trip.count8636
  br i1 %exitcond8637.not, label %._crit_edge7855, label %1040, !llvm.loop !48

._crit_edge7855:                                  ; preds = %1130, %1021
  %.05159.lcssa = phi double [ 0.000000e+00, %1021 ], [ %.15160, %1130 ]
  %.05155.lcssa = phi double [ 0.000000e+00, %1021 ], [ %.15156, %1130 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %64) #8
  store double 0.000000e+00, ptr %64, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %65) #8
  store double 0.000000e+00, ptr %65, align 8, !tbaa !13
  %1135 = getelementptr inbounds i8, ptr %0, i64 112
  %1136 = load double, ptr %1135, align 8, !tbaa !30
  %1137 = fcmp oeq double %1136, 0.000000e+00
  br i1 %1137, label %1139, label %1138

1138:                                             ; preds = %._crit_edge7855
  call void @__assert_fail(ptr noundef nonnull @.str.1, ptr noundef nonnull @.str.2, i32 noundef 130, ptr noundef nonnull @__PRETTY_FUNCTION__.libxsmm_matdiff) #10
  unreachable

1139:                                             ; preds = %._crit_edge7855
  %1140 = getelementptr inbounds i8, ptr %0, i64 152
  %1141 = load double, ptr %1140, align 8, !tbaa !31
  %1142 = fcmp oeq double %1141, 0.000000e+00
  br i1 %1142, label %1144, label %1143

1143:                                             ; preds = %1139
  call void @__assert_fail(ptr noundef nonnull @.str.3, ptr noundef nonnull @.str.2, i32 noundef 131, ptr noundef nonnull @__PRETTY_FUNCTION__.libxsmm_matdiff) #10
  unreachable

1144:                                             ; preds = %1139
  %.not6327 = icmp eq i64 %538, 0
  br i1 %.not6327, label %1155, label %1145

1145:                                             ; preds = %1144
  %1146 = getelementptr inbounds i8, ptr %0, i64 80
  %1147 = load double, ptr %1146, align 8, !tbaa !32
  %1148 = uitofp i64 %538 to double
  %1149 = fdiv double %1147, %1148
  %1150 = getelementptr inbounds i8, ptr %0, i64 104
  store double %1149, ptr %1150, align 8, !tbaa !33
  %1151 = getelementptr inbounds i8, ptr %0, i64 120
  %1152 = load double, ptr %1151, align 8, !tbaa !34
  %1153 = fdiv double %1152, %1148
  %1154 = getelementptr inbounds i8, ptr %0, i64 144
  store double %1153, ptr %1154, align 8, !tbaa !35
  br label %1155

1155:                                             ; preds = %1145, %1144
  %1156 = fcmp ugt double %.05155.lcssa, 0.000000e+00
  br i1 %1156, label %1157, label %1163

1157:                                             ; preds = %1155
  %1158 = getelementptr inbounds i8, ptr %0, i64 16
  %1159 = load double, ptr %1158, align 8, !tbaa !28
  %1160 = fcmp ogt double %.05155.lcssa, 0.000000e+00
  %1161 = select i1 %1160, double %.05155.lcssa, double 1.000000e+00
  %1162 = fdiv double %1159, %1161
  br label %1163

1163:                                             ; preds = %1155, %1157
  %1164 = phi double [ %1162, %1157 ], [ %.05159.lcssa, %1155 ]
  %1165 = getelementptr inbounds i8, ptr %0, i64 24
  store double %1164, ptr %1165, align 8, !tbaa !36
  %1166 = load double, ptr %54, align 8
  %1167 = fcmp ugt double %1166, 0.000000e+00
  br i1 %1167, label %1174, label %1168

1168:                                             ; preds = %1163
  %1169 = load double, ptr %55, align 8, !tbaa !13
  %1170 = fmul double %1169, %1169
  %1171 = getelementptr inbounds i8, ptr %0, i64 56
  %1172 = load double, ptr %1171, align 8, !tbaa !37
  %1173 = fcmp olt double %1170, %1172
  %.6361 = select i1 %1173, double %1170, double %1172
  br label %1180

1174:                                             ; preds = %1163
  %1175 = getelementptr inbounds i8, ptr %0, i64 56
  %1176 = load double, ptr %1175, align 8, !tbaa !37
  %1177 = fcmp ogt double %1166, 0.000000e+00
  %1178 = select i1 %1177, double %1166, double 1.000000e+00
  %1179 = fdiv double %1176, %1178
  br label %1180

1180:                                             ; preds = %1168, %1174
  %1181 = phi double [ %1179, %1174 ], [ %.6361, %1168 ]
  %1182 = getelementptr inbounds i8, ptr %0, i64 32
  store double %1181, ptr %1182, align 8, !tbaa !38
  %1183 = icmp sgt i32 %.05042, 0
  br i1 %1183, label %.lr.ph7867, label %._crit_edge7868.thread

.lr.ph7867:                                       ; preds = %1180
  %.not6328 = icmp eq ptr %spec.select, null
  %1184 = getelementptr inbounds i8, ptr %0, i64 104
  %1185 = getelementptr inbounds i8, ptr %0, i64 144
  %1186 = sext i32 %.05040 to i64
  %1187 = sext i32 %.05041 to i64
  %wide.trip.count8651 = zext nneg i32 %.05042 to i64
  %wide.trip.count8641 = zext nneg i32 %.05043 to i64
  %wide.trip.count8646 = zext nneg i32 %.05043 to i64
  br label %1188

1188:                                             ; preds = %.lr.ph7867, %1237
  %indvars.iv8648 = phi i64 [ 0, %.lr.ph7867 ], [ %indvars.iv.next8649, %1237 ]
  %.051637865 = phi double [ 0.000000e+00, %.lr.ph7867 ], [ %.15164, %1237 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %66) #8
  store double 0.000000e+00, ptr %66, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %67) #8
  store double 0.000000e+00, ptr %67, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %68) #8
  store double 0.000000e+00, ptr %68, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %69) #8
  store double 0.000000e+00, ptr %69, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %70) #8
  store double 0.000000e+00, ptr %70, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %71) #8
  store double 0.000000e+00, ptr %71, align 8, !tbaa !13
  br i1 %1022, label %.lr.ph7860, label %._crit_edge7861

.lr.ph7860:                                       ; preds = %1188
  %invariant.gep9108 = getelementptr i32, ptr %spec.select6345, i64 %indvars.iv8648
  br i1 %.not6328, label %.thread6560.us, label %.lr.ph7860.split.preheader

.lr.ph7860.split.preheader:                       ; preds = %.lr.ph7860
  %invariant.gep9106 = getelementptr i32, ptr %spec.select, i64 %indvars.iv8648
  br label %.lr.ph7860.split

.thread6560.us:                                   ; preds = %.lr.ph7860, %.thread6560.us
  %indvars.iv8643 = phi i64 [ %indvars.iv.next8644, %.thread6560.us ], [ 0, %.lr.ph7860 ]
  %1189 = mul nsw i64 %indvars.iv8643, %1186
  %gep9109 = getelementptr i32, ptr %invariant.gep9108, i64 %1189
  %1190 = load i32, ptr %gep9109, align 4, !tbaa !5
  %1191 = sitofp i32 %1190 to double
  %1192 = load double, ptr %1184, align 8, !tbaa !33
  %1193 = fsub double %1191, %1192
  %1194 = load double, ptr %1185, align 8, !tbaa !35
  %1195 = fsub double 0.000000e+00, %1194
  %1196 = fneg double %1191
  %1197 = icmp slt i32 %1190, 0
  %1198 = select i1 %1197, double %1196, double %1191
  %1199 = fmul double %1193, %1193
  %1200 = call double @libxsmm_kahan_sum(double noundef %1199, ptr noundef nonnull %1135, ptr noundef nonnull %64)
  %1201 = fmul double %1195, %1195
  %1202 = call double @libxsmm_kahan_sum(double noundef %1201, ptr noundef nonnull %1140, ptr noundef nonnull %65)
  %1203 = call double @libxsmm_kahan_sum(double noundef %1198, ptr noundef nonnull %69, ptr noundef nonnull %66)
  %1204 = call double @libxsmm_kahan_sum(double noundef 0.000000e+00, ptr noundef nonnull %70, ptr noundef nonnull %67)
  %1205 = call double @libxsmm_kahan_sum(double noundef 0.000000e+00, ptr noundef nonnull %71, ptr noundef nonnull %68)
  %indvars.iv.next8644 = add nuw nsw i64 %indvars.iv8643, 1
  %exitcond8647.not = icmp eq i64 %indvars.iv.next8644, %wide.trip.count8646
  br i1 %exitcond8647.not, label %._crit_edge7861, label %.thread6560.us, !llvm.loop !49

.lr.ph7860.split:                                 ; preds = %.lr.ph7860.split.preheader, %.lr.ph7860.split
  %indvars.iv8638 = phi i64 [ 0, %.lr.ph7860.split.preheader ], [ %indvars.iv.next8639, %.lr.ph7860.split ]
  %1206 = mul nsw i64 %indvars.iv8638, %1186
  %gep9105 = getelementptr i32, ptr %invariant.gep9108, i64 %1206
  %1207 = load i32, ptr %gep9105, align 4, !tbaa !5
  %1208 = sitofp i32 %1207 to double
  %1209 = mul nsw i64 %indvars.iv8638, %1187
  %gep9107 = getelementptr i32, ptr %invariant.gep9106, i64 %1209
  %1210 = load i32, ptr %gep9107, align 4, !tbaa !5
  %1211 = sitofp i32 %1210 to double
  %1212 = fcmp ogt double %1211, %1208
  %1213 = fsub double %1211, %1208
  %1214 = fsub double %1208, %1211
  %1215 = select i1 %1212, double %1213, double %1214
  %1216 = load double, ptr %1184, align 8, !tbaa !33
  %1217 = fsub double %1208, %1216
  %1218 = load double, ptr %1185, align 8, !tbaa !35
  %1219 = fsub double %1211, %1218
  %1220 = fneg double %1208
  %1221 = icmp slt i32 %1207, 0
  %1222 = select i1 %1221, double %1220, double %1208
  %1223 = fneg double %1211
  %1224 = icmp slt i32 %1210, 0
  %1225 = select i1 %1224, double %1223, double %1211
  %1226 = fmul double %1217, %1217
  %1227 = call double @libxsmm_kahan_sum(double noundef %1226, ptr noundef nonnull %1135, ptr noundef nonnull %64)
  %1228 = fmul double %1219, %1219
  %1229 = call double @libxsmm_kahan_sum(double noundef %1228, ptr noundef nonnull %1140, ptr noundef nonnull %65)
  %1230 = call double @libxsmm_kahan_sum(double noundef %1222, ptr noundef nonnull %69, ptr noundef nonnull %66)
  %1231 = call double @libxsmm_kahan_sum(double noundef %1225, ptr noundef nonnull %70, ptr noundef nonnull %67)
  %1232 = call double @libxsmm_kahan_sum(double noundef %1215, ptr noundef nonnull %71, ptr noundef nonnull %68)
  %indvars.iv.next8639 = add nuw nsw i64 %indvars.iv8638, 1
  %exitcond8642.not = icmp eq i64 %indvars.iv.next8639, %wide.trip.count8641
  br i1 %exitcond8642.not, label %._crit_edge7861, label %.lr.ph7860.split, !llvm.loop !49

._crit_edge7861:                                  ; preds = %.lr.ph7860.split, %.thread6560.us, %1188
  %1233 = load double, ptr %0, align 8, !tbaa !40
  %1234 = load double, ptr %71, align 8, !tbaa !13
  %1235 = fcmp olt double %1233, %1234
  br i1 %1235, label %1236, label %1237

1236:                                             ; preds = %._crit_edge7861
  store double %1234, ptr %0, align 8, !tbaa !40
  br label %1237

1237:                                             ; preds = %1236, %._crit_edge7861
  %1238 = load double, ptr %69, align 8, !tbaa !13
  %1239 = fcmp olt double %.051637865, %1238
  %.15164 = select i1 %1239, double %1238, double %.051637865
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %71) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %70) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %69) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %68) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %67) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %66) #8
  %indvars.iv.next8649 = add nuw nsw i64 %indvars.iv8648, 1
  %exitcond8652.not = icmp eq i64 %indvars.iv.next8649, %wide.trip.count8651
  br i1 %exitcond8652.not, label %._crit_edge7868, label %1188, !llvm.loop !50

._crit_edge7868:                                  ; preds = %1237
  %1240 = fcmp ugt double %.15164, 0.000000e+00
  br i1 %1240, label %1242, label %._crit_edge7868.thread

._crit_edge7868.thread:                           ; preds = %1180, %._crit_edge7868
  %1241 = load double, ptr %0, align 8, !tbaa !40
  br label %1247

1242:                                             ; preds = %._crit_edge7868
  %1243 = load double, ptr %0, align 8, !tbaa !40
  %1244 = fcmp ogt double %.15164, 0.000000e+00
  %1245 = select i1 %1244, double %.15164, double 1.000000e+00
  %1246 = fdiv double %1243, %1245
  br label %1247

1247:                                             ; preds = %1242, %._crit_edge7868.thread
  %1248 = phi double [ %1241, %._crit_edge7868.thread ], [ %1246, %1242 ]
  %1249 = getelementptr inbounds i8, ptr %0, i64 8
  store double %1248, ptr %1249, align 8, !tbaa !42
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %65) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %64) #8
  br label %1250

1250:                                             ; preds = %.thread6544, %1247
  %.146559 = phi i32 [ %1120, %.thread6544 ], [ 0, %1247 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %57) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %56) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %55) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %54) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %53) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %52) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %51) #8
  br label %6314

1251:                                             ; preds = %1019
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %72) #8
  store double 0.000000e+00, ptr %72, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %73) #8
  store double 0.000000e+00, ptr %73, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %74) #8
  store double 0.000000e+00, ptr %74, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %75) #8
  store double 0.000000e+00, ptr %75, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %76) #8
  store double 0.000000e+00, ptr %76, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %77) #8
  store double 0.000000e+00, ptr %77, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %78) #8
  store double 0.000000e+00, ptr %78, align 8, !tbaa !13
  %1252 = sext i32 %.05042 to i64
  %1253 = sext i32 %.05043 to i64
  %1254 = mul nsw i64 %1252, %1253
  %1255 = tail call i64 @libxsmm_coprime2(i64 noundef %1254)
  %1256 = icmp sgt i32 %.05043, 0
  br i1 %1256, label %.lr.ph7828, label %._crit_edge7829

.lr.ph7828:                                       ; preds = %1251
  %1257 = icmp sgt i32 %.05042, 0
  %.not6323 = icmp eq ptr %spec.select, null
  %1258 = getelementptr inbounds i8, ptr %0, i64 96
  %1259 = getelementptr inbounds i8, ptr %0, i64 128
  %1260 = getelementptr inbounds i8, ptr %0, i64 136
  %1261 = getelementptr inbounds i8, ptr %0, i64 40
  %1262 = getelementptr inbounds i8, ptr %0, i64 160
  %1263 = getelementptr inbounds i8, ptr %0, i64 168
  %1264 = getelementptr inbounds i8, ptr %0, i64 176
  %1265 = getelementptr inbounds i8, ptr %0, i64 180
  %1266 = getelementptr inbounds i8, ptr %0, i64 48
  %1267 = getelementptr inbounds i8, ptr %0, i64 64
  %1268 = getelementptr inbounds i8, ptr %0, i64 56
  %1269 = getelementptr inbounds i8, ptr %0, i64 80
  %1270 = getelementptr inbounds i8, ptr %0, i64 120
  %1271 = getelementptr inbounds i8, ptr %0, i64 16
  %1272 = zext i32 %.05042 to i64
  %wide.trip.count8616 = zext nneg i32 %.05043 to i64
  br label %1273

1273:                                             ; preds = %.lr.ph7828, %1373
  %indvars.iv8613 = phi i64 [ 0, %.lr.ph7828 ], [ %indvars.iv.next8614, %1373 ]
  %.051767826 = phi double [ 0.000000e+00, %.lr.ph7828 ], [ %.15177, %1373 ]
  %.051807825 = phi double [ 0.000000e+00, %.lr.ph7828 ], [ %.15181, %1373 ]
  %.051887824 = phi double [ 0.000000e+00, %.lr.ph7828 ], [ %.15189.lcssa, %1373 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %79) #8
  store double 0.000000e+00, ptr %79, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %80) #8
  store double 0.000000e+00, ptr %80, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %81) #8
  store double 0.000000e+00, ptr %81, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %82) #8
  store double 0.000000e+00, ptr %82, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %83) #8
  store double 0.000000e+00, ptr %83, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %84) #8
  store double 0.000000e+00, ptr %84, align 8, !tbaa !13
  br i1 %1257, label %.lr.ph7820, label %._crit_edge7821

.lr.ph7820:                                       ; preds = %1273
  %1274 = mul nuw nsw i64 %indvars.iv8613, %1272
  br label %1275

1275:                                             ; preds = %.lr.ph7820, %1364
  %indvars.iv8608 = phi i64 [ 0, %.lr.ph7820 ], [ %indvars.iv.next8609, %1364 ]
  %.151897818 = phi double [ %.051887824, %.lr.ph7820 ], [ %.25190, %1364 ]
  %1276 = add nuw nsw i64 %indvars.iv8608, %1274
  %1277 = mul i64 %1255, %1276
  %1278 = urem i64 %1277, %1254
  %1279 = udiv i64 %1278, %1252
  %1280 = trunc i64 %1279 to i32
  %1281 = urem i64 %1278, %1252
  %1282 = trunc nuw i64 %1281 to i32
  br i1 %.not6323, label %1290, label %1283

1283:                                             ; preds = %1275
  %1284 = mul nsw i32 %.05041, %1280
  %1285 = add nsw i32 %1284, %1282
  %1286 = sext i32 %1285 to i64
  %1287 = getelementptr inbounds i32, ptr %spec.select, i64 %1286
  %1288 = load i32, ptr %1287, align 4, !tbaa !5
  %1289 = sitofp i32 %1288 to double
  br label %1290

1290:                                             ; preds = %1275, %1283
  %1291 = phi double [ %1289, %1283 ], [ 0.000000e+00, %1275 ]
  %1292 = mul nsw i32 %.05040, %1280
  %1293 = add nsw i32 %1292, %1282
  %1294 = sext i32 %1293 to i64
  %1295 = getelementptr inbounds i32, ptr %spec.select6345, i64 %1294
  %1296 = load i32, ptr %1295, align 4, !tbaa !5
  %1297 = sitofp i32 %1296 to double
  %1298 = fcmp oge double %1291, 0.000000e+00
  %1299 = fneg double %1291
  %1300 = select i1 %1298, double %1291, double %1299
  %1301 = fneg double %1297
  %1302 = icmp slt i32 %1296, 0
  %1303 = select i1 %1302, double %1301, double %1297
  %1304 = load double, ptr %542, align 8, !tbaa !10
  %1305 = fcmp ogt double %1304, %1297
  br i1 %1305, label %1306, label %1307

1306:                                             ; preds = %1290
  store double %1297, ptr %542, align 8, !tbaa !10
  br label %1307

1307:                                             ; preds = %1306, %1290
  %1308 = load double, ptr %1258, align 8, !tbaa !16
  %1309 = fcmp olt double %1308, %1297
  br i1 %1309, label %1310, label %1311

1310:                                             ; preds = %1307
  store double %1297, ptr %1258, align 8, !tbaa !16
  br label %1311

1311:                                             ; preds = %1307, %1310
  %1312 = fcmp ogt double %543, %1300
  %1313 = fcmp oeq double %1291, %1297
  %or.cond6362 = select i1 %1312, i1 true, i1 %1313
  br i1 %or.cond6362, label %1314, label %.thread6569

1314:                                             ; preds = %1311
  br i1 %.not6323, label %1321, label %1315

1315:                                             ; preds = %1314
  %1316 = fcmp ogt double %1291, %1297
  br i1 %1316, label %1317, label %1319

1317:                                             ; preds = %1315
  %1318 = fsub double %1291, %1297
  br label %1321

1319:                                             ; preds = %1315
  %1320 = fsub double %1297, %1291
  br label %1321

1321:                                             ; preds = %1314, %1317, %1319
  %1322 = phi double [ %1318, %1317 ], [ %1320, %1319 ], [ 0.000000e+00, %1314 ]
  %1323 = fcmp ugt double %1303, 0.000000e+00
  %1324 = fdiv double %1322, %1303
  %1325 = select i1 %1323, double %1324, double %1300
  %1326 = load double, ptr %1259, align 8, !tbaa !17
  %1327 = fcmp olt double %1291, %1326
  br i1 %1327, label %1328, label %1329

1328:                                             ; preds = %1321
  store double %1291, ptr %1259, align 8, !tbaa !17
  br label %1329

1329:                                             ; preds = %1328, %1321
  %1330 = load double, ptr %1260, align 8, !tbaa !18
  %1331 = fcmp ogt double %1291, %1330
  br i1 %1331, label %1332, label %1333

1332:                                             ; preds = %1329
  store double %1291, ptr %1260, align 8, !tbaa !18
  br label %1333

1333:                                             ; preds = %1332, %1329
  %1334 = load double, ptr %1261, align 8, !tbaa !19
  %1335 = fcmp olt double %1334, %1322
  br i1 %1335, label %1336, label %1337

1336:                                             ; preds = %1333
  store double %1322, ptr %1261, align 8, !tbaa !19
  store double %1297, ptr %1262, align 8, !tbaa !20
  store double %1291, ptr %1263, align 8, !tbaa !21
  store i32 %1282, ptr %1264, align 8, !tbaa !22
  store i32 %1280, ptr %1265, align 4, !tbaa !23
  br label %1337

1337:                                             ; preds = %1336, %1333
  %1338 = load double, ptr %1266, align 8, !tbaa !24
  %1339 = fcmp olt double %1338, %1325
  br i1 %1339, label %1340, label %1341

1340:                                             ; preds = %1337
  store double %1325, ptr %1266, align 8, !tbaa !24
  br label %1341

1341:                                             ; preds = %1340, %1337
  %1342 = fmul double %1325, %1325
  %1343 = fcmp ogt double %543, %1342
  br i1 %1343, label %1344, label %1350

1344:                                             ; preds = %1341
  %1345 = fsub double %1342, %.151897818
  %1346 = load double, ptr %1267, align 8, !tbaa !25
  %1347 = fadd double %1345, %1346
  %1348 = fsub double %1347, %1346
  %1349 = fsub double %1348, %1345
  store double %1347, ptr %1267, align 8, !tbaa !25
  br label %1350

1350:                                             ; preds = %1344, %1341
  %.25190 = phi double [ %1349, %1344 ], [ %.151897818, %1341 ]
  %1351 = call double @libxsmm_kahan_sum(double noundef %1303, ptr noundef nonnull %82, ptr noundef nonnull %79)
  %1352 = call double @libxsmm_kahan_sum(double noundef %1300, ptr noundef nonnull %83, ptr noundef nonnull %80)
  %1353 = call double @libxsmm_kahan_sum(double noundef %1322, ptr noundef nonnull %84, ptr noundef nonnull %81)
  %1354 = fmul double %1297, %1297
  %1355 = call double @libxsmm_kahan_sum(double noundef %1354, ptr noundef nonnull %75, ptr noundef nonnull %73)
  %1356 = fmul double %1291, %1291
  %1357 = call double @libxsmm_kahan_sum(double noundef %1356, ptr noundef nonnull %76, ptr noundef nonnull %74)
  %1358 = fmul double %1322, %1322
  %1359 = fcmp ogt double %543, %1358
  br i1 %1359, label %1360, label %1364

1360:                                             ; preds = %1350
  %1361 = call double @libxsmm_kahan_sum(double noundef %1358, ptr noundef nonnull %1268, ptr noundef nonnull %72)
  br label %1364

.thread6569:                                      ; preds = %1311
  %1362 = fcmp ogt double %543, %1303
  %1363 = select i1 %1362, i32 1, i32 2
  store i32 %1282, ptr %1264, align 8, !tbaa !22
  store i32 %1280, ptr %1265, align 4, !tbaa !23
  store double %1297, ptr %1262, align 8, !tbaa !20
  store double %1291, ptr %1263, align 8, !tbaa !21
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %84) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %83) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %82) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %81) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %80) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %79) #8
  br label %1493

1364:                                             ; preds = %1360, %1350
  %indvars.iv.next8609 = add nuw nsw i64 %indvars.iv8608, 1
  %exitcond8612.not = icmp eq i64 %indvars.iv.next8609, %1272
  br i1 %exitcond8612.not, label %._crit_edge7821.loopexit, label %1275, !llvm.loop !51

._crit_edge7821.loopexit:                         ; preds = %1364
  %.pre8727 = load double, ptr %82, align 8, !tbaa !13
  br label %._crit_edge7821

._crit_edge7821:                                  ; preds = %._crit_edge7821.loopexit, %1273
  %1365 = phi double [ 0.000000e+00, %1273 ], [ %.pre8727, %._crit_edge7821.loopexit ]
  %.15189.lcssa = phi double [ %.051887824, %1273 ], [ %.25190, %._crit_edge7821.loopexit ]
  %1366 = call double @libxsmm_kahan_sum(double noundef %1365, ptr noundef nonnull %1269, ptr noundef nonnull %77)
  %1367 = load double, ptr %83, align 8, !tbaa !13
  %1368 = call double @libxsmm_kahan_sum(double noundef %1367, ptr noundef nonnull %1270, ptr noundef nonnull %78)
  %1369 = load double, ptr %1271, align 8, !tbaa !28
  %1370 = load double, ptr %84, align 8, !tbaa !13
  %1371 = fcmp olt double %1369, %1370
  br i1 %1371, label %1372, label %1373

1372:                                             ; preds = %._crit_edge7821
  store double %1370, ptr %1271, align 8, !tbaa !28
  br label %1373

1373:                                             ; preds = %1372, %._crit_edge7821
  %1374 = load double, ptr %82, align 8, !tbaa !13
  %1375 = fcmp olt double %.051767826, %1374
  %.15177 = select i1 %1375, double %1374, double %.051767826
  %1376 = load double, ptr %83, align 8, !tbaa !13
  %1377 = fcmp olt double %.051807825, %1376
  %.15181 = select i1 %1377, double %1376, double %.051807825
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %84) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %83) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %82) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %81) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %80) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %79) #8
  %indvars.iv.next8614 = add nuw nsw i64 %indvars.iv8613, 1
  %exitcond8617.not = icmp eq i64 %indvars.iv.next8614, %wide.trip.count8616
  br i1 %exitcond8617.not, label %._crit_edge7829, label %1273, !llvm.loop !52

._crit_edge7829:                                  ; preds = %1373, %1251
  %.05180.lcssa = phi double [ 0.000000e+00, %1251 ], [ %.15181, %1373 ]
  %.05176.lcssa = phi double [ 0.000000e+00, %1251 ], [ %.15177, %1373 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %85) #8
  store double 0.000000e+00, ptr %85, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %86) #8
  store double 0.000000e+00, ptr %86, align 8, !tbaa !13
  %1378 = getelementptr inbounds i8, ptr %0, i64 112
  %1379 = load double, ptr %1378, align 8, !tbaa !30
  %1380 = fcmp oeq double %1379, 0.000000e+00
  br i1 %1380, label %1382, label %1381

1381:                                             ; preds = %._crit_edge7829
  call void @__assert_fail(ptr noundef nonnull @.str.1, ptr noundef nonnull @.str.2, i32 noundef 130, ptr noundef nonnull @__PRETTY_FUNCTION__.libxsmm_matdiff) #10
  unreachable

1382:                                             ; preds = %._crit_edge7829
  %1383 = getelementptr inbounds i8, ptr %0, i64 152
  %1384 = load double, ptr %1383, align 8, !tbaa !31
  %1385 = fcmp oeq double %1384, 0.000000e+00
  br i1 %1385, label %1387, label %1386

1386:                                             ; preds = %1382
  call void @__assert_fail(ptr noundef nonnull @.str.3, ptr noundef nonnull @.str.2, i32 noundef 131, ptr noundef nonnull @__PRETTY_FUNCTION__.libxsmm_matdiff) #10
  unreachable

1387:                                             ; preds = %1382
  %.not6324 = icmp eq i64 %538, 0
  br i1 %.not6324, label %1398, label %1388

1388:                                             ; preds = %1387
  %1389 = getelementptr inbounds i8, ptr %0, i64 80
  %1390 = load double, ptr %1389, align 8, !tbaa !32
  %1391 = uitofp i64 %538 to double
  %1392 = fdiv double %1390, %1391
  %1393 = getelementptr inbounds i8, ptr %0, i64 104
  store double %1392, ptr %1393, align 8, !tbaa !33
  %1394 = getelementptr inbounds i8, ptr %0, i64 120
  %1395 = load double, ptr %1394, align 8, !tbaa !34
  %1396 = fdiv double %1395, %1391
  %1397 = getelementptr inbounds i8, ptr %0, i64 144
  store double %1396, ptr %1397, align 8, !tbaa !35
  br label %1398

1398:                                             ; preds = %1388, %1387
  %1399 = fcmp ugt double %.05176.lcssa, 0.000000e+00
  br i1 %1399, label %1400, label %1406

1400:                                             ; preds = %1398
  %1401 = getelementptr inbounds i8, ptr %0, i64 16
  %1402 = load double, ptr %1401, align 8, !tbaa !28
  %1403 = fcmp ogt double %.05176.lcssa, 0.000000e+00
  %1404 = select i1 %1403, double %.05176.lcssa, double 1.000000e+00
  %1405 = fdiv double %1402, %1404
  br label %1406

1406:                                             ; preds = %1398, %1400
  %1407 = phi double [ %1405, %1400 ], [ %.05180.lcssa, %1398 ]
  %1408 = getelementptr inbounds i8, ptr %0, i64 24
  store double %1407, ptr %1408, align 8, !tbaa !36
  %1409 = load double, ptr %75, align 8
  %1410 = fcmp ugt double %1409, 0.000000e+00
  br i1 %1410, label %1417, label %1411

1411:                                             ; preds = %1406
  %1412 = load double, ptr %76, align 8, !tbaa !13
  %1413 = fmul double %1412, %1412
  %1414 = getelementptr inbounds i8, ptr %0, i64 56
  %1415 = load double, ptr %1414, align 8, !tbaa !37
  %1416 = fcmp olt double %1413, %1415
  %.6367 = select i1 %1416, double %1413, double %1415
  br label %1423

1417:                                             ; preds = %1406
  %1418 = getelementptr inbounds i8, ptr %0, i64 56
  %1419 = load double, ptr %1418, align 8, !tbaa !37
  %1420 = fcmp ogt double %1409, 0.000000e+00
  %1421 = select i1 %1420, double %1409, double 1.000000e+00
  %1422 = fdiv double %1419, %1421
  br label %1423

1423:                                             ; preds = %1411, %1417
  %1424 = phi double [ %1422, %1417 ], [ %.6367, %1411 ]
  %1425 = getelementptr inbounds i8, ptr %0, i64 32
  store double %1424, ptr %1425, align 8, !tbaa !38
  %1426 = icmp sgt i32 %.05042, 0
  br i1 %1426, label %.lr.ph7840, label %._crit_edge7841.thread

.lr.ph7840:                                       ; preds = %1423
  %.not6325 = icmp eq ptr %spec.select, null
  %1427 = getelementptr inbounds i8, ptr %0, i64 104
  %1428 = getelementptr inbounds i8, ptr %0, i64 144
  %1429 = zext nneg i32 %.05042 to i64
  %wide.trip.count8621 = zext nneg i32 %.05043 to i64
  br label %1430

1430:                                             ; preds = %.lr.ph7840, %1480
  %indvars.iv8623 = phi i64 [ 0, %.lr.ph7840 ], [ %indvars.iv.next8624, %1480 ]
  %.051847838 = phi double [ 0.000000e+00, %.lr.ph7840 ], [ %.15185, %1480 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %87) #8
  store double 0.000000e+00, ptr %87, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %88) #8
  store double 0.000000e+00, ptr %88, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %89) #8
  store double 0.000000e+00, ptr %89, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %90) #8
  store double 0.000000e+00, ptr %90, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %91) #8
  store double 0.000000e+00, ptr %91, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %92) #8
  store double 0.000000e+00, ptr %92, align 8, !tbaa !13
  br i1 %1256, label %.lr.ph7834, label %._crit_edge7835

.lr.ph7834:                                       ; preds = %1430, %.thread6585
  %indvars.iv8618 = phi i64 [ %indvars.iv.next8619, %.thread6585 ], [ 0, %1430 ]
  %1431 = mul nuw nsw i64 %indvars.iv8618, %1429
  %1432 = add nuw nsw i64 %1431, %indvars.iv8623
  %1433 = mul i64 %1255, %1432
  %1434 = urem i64 %1433, %1254
  %1435 = udiv i64 %1434, %1252
  %1436 = trunc i64 %1435 to i32
  %1437 = urem i64 %1434, %1252
  %1438 = trunc nuw i64 %1437 to i32
  %1439 = mul nsw i32 %.05040, %1436
  %1440 = add nsw i32 %1439, %1438
  %1441 = sext i32 %1440 to i64
  %1442 = getelementptr inbounds i32, ptr %spec.select6345, i64 %1441
  %1443 = load i32, ptr %1442, align 4, !tbaa !5
  %1444 = sitofp i32 %1443 to double
  br i1 %.not6325, label %.thread6585, label %1445

1445:                                             ; preds = %.lr.ph7834
  %1446 = mul nsw i32 %.05041, %1436
  %1447 = add nsw i32 %1446, %1438
  %1448 = sext i32 %1447 to i64
  %1449 = getelementptr inbounds i32, ptr %spec.select, i64 %1448
  %1450 = load i32, ptr %1449, align 4, !tbaa !5
  %1451 = sitofp i32 %1450 to double
  %1452 = fcmp ogt double %1451, %1444
  br i1 %1452, label %1453, label %1455

1453:                                             ; preds = %1445
  %1454 = fsub double %1451, %1444
  br label %.thread6585

1455:                                             ; preds = %1445
  %1456 = fsub double %1444, %1451
  br label %.thread6585

.thread6585:                                      ; preds = %.lr.ph7834, %1453, %1455
  %1457 = phi double [ %1451, %1453 ], [ %1451, %1455 ], [ 0.000000e+00, %.lr.ph7834 ]
  %1458 = phi double [ %1454, %1453 ], [ %1456, %1455 ], [ 0.000000e+00, %.lr.ph7834 ]
  %1459 = load double, ptr %1427, align 8, !tbaa !33
  %1460 = fsub double %1444, %1459
  %1461 = load double, ptr %1428, align 8, !tbaa !35
  %1462 = fsub double %1457, %1461
  %1463 = fneg double %1444
  %1464 = icmp slt i32 %1443, 0
  %1465 = select i1 %1464, double %1463, double %1444
  %1466 = fcmp oge double %1457, 0.000000e+00
  %1467 = fneg double %1457
  %1468 = select i1 %1466, double %1457, double %1467
  %1469 = fmul double %1460, %1460
  %1470 = call double @libxsmm_kahan_sum(double noundef %1469, ptr noundef nonnull %1378, ptr noundef nonnull %85)
  %1471 = fmul double %1462, %1462
  %1472 = call double @libxsmm_kahan_sum(double noundef %1471, ptr noundef nonnull %1383, ptr noundef nonnull %86)
  %1473 = call double @libxsmm_kahan_sum(double noundef %1465, ptr noundef nonnull %90, ptr noundef nonnull %87)
  %1474 = call double @libxsmm_kahan_sum(double noundef %1468, ptr noundef nonnull %91, ptr noundef nonnull %88)
  %1475 = call double @libxsmm_kahan_sum(double noundef %1458, ptr noundef nonnull %92, ptr noundef nonnull %89)
  %indvars.iv.next8619 = add nuw nsw i64 %indvars.iv8618, 1
  %exitcond8622.not = icmp eq i64 %indvars.iv.next8619, %wide.trip.count8621
  br i1 %exitcond8622.not, label %._crit_edge7835.loopexit, label %.lr.ph7834, !llvm.loop !53

._crit_edge7835.loopexit:                         ; preds = %.thread6585
  %.pre8728 = load double, ptr %92, align 8, !tbaa !13
  br label %._crit_edge7835

._crit_edge7835:                                  ; preds = %._crit_edge7835.loopexit, %1430
  %1476 = phi double [ %.pre8728, %._crit_edge7835.loopexit ], [ 0.000000e+00, %1430 ]
  %1477 = load double, ptr %0, align 8, !tbaa !40
  %1478 = fcmp olt double %1477, %1476
  br i1 %1478, label %1479, label %1480

1479:                                             ; preds = %._crit_edge7835
  store double %1476, ptr %0, align 8, !tbaa !40
  br label %1480

1480:                                             ; preds = %1479, %._crit_edge7835
  %1481 = load double, ptr %90, align 8, !tbaa !13
  %1482 = fcmp olt double %.051847838, %1481
  %.15185 = select i1 %1482, double %1481, double %.051847838
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %92) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %91) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %90) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %89) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %88) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %87) #8
  %indvars.iv.next8624 = add nuw nsw i64 %indvars.iv8623, 1
  %exitcond8627.not = icmp eq i64 %indvars.iv.next8624, %1429
  br i1 %exitcond8627.not, label %._crit_edge7841, label %1430, !llvm.loop !54

._crit_edge7841:                                  ; preds = %1480
  %1483 = fcmp ugt double %.15185, 0.000000e+00
  br i1 %1483, label %1485, label %._crit_edge7841.thread

._crit_edge7841.thread:                           ; preds = %1423, %._crit_edge7841
  %1484 = load double, ptr %0, align 8, !tbaa !40
  br label %1490

1485:                                             ; preds = %._crit_edge7841
  %1486 = load double, ptr %0, align 8, !tbaa !40
  %1487 = fcmp ogt double %.15185, 0.000000e+00
  %1488 = select i1 %1487, double %.15185, double 1.000000e+00
  %1489 = fdiv double %1486, %1488
  br label %1490

1490:                                             ; preds = %1485, %._crit_edge7841.thread
  %1491 = phi double [ %1484, %._crit_edge7841.thread ], [ %1489, %1485 ]
  %1492 = getelementptr inbounds i8, ptr %0, i64 8
  store double %1491, ptr %1492, align 8, !tbaa !42
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %86) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %85) #8
  br label %1493

1493:                                             ; preds = %.thread6569, %1490
  %.196584 = phi i32 [ %1363, %.thread6569 ], [ 0, %1490 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %78) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %77) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %76) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %75) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %74) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %73) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %72) #8
  br label %6314

1494:                                             ; preds = %541
  %1495 = icmp eq i32 %535, 0
  br i1 %1495, label %1496, label %1711

1496:                                             ; preds = %1494
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %93) #8
  store double 0.000000e+00, ptr %93, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %94) #8
  store double 0.000000e+00, ptr %94, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %95) #8
  store double 0.000000e+00, ptr %95, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %96) #8
  store double 0.000000e+00, ptr %96, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %97) #8
  store double 0.000000e+00, ptr %97, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %98) #8
  store double 0.000000e+00, ptr %98, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %99) #8
  store double 0.000000e+00, ptr %99, align 8, !tbaa !13
  %1497 = icmp sgt i32 %.05043, 0
  br i1 %1497, label %.lr.ph7801, label %._crit_edge7802

.lr.ph7801:                                       ; preds = %1496
  %1498 = icmp sgt i32 %.05042, 0
  %.not6320 = icmp eq ptr %spec.select, null
  %1499 = getelementptr inbounds i8, ptr %0, i64 96
  %1500 = getelementptr inbounds i8, ptr %0, i64 128
  %1501 = getelementptr inbounds i8, ptr %0, i64 136
  %1502 = getelementptr inbounds i8, ptr %0, i64 40
  %1503 = getelementptr inbounds i8, ptr %0, i64 160
  %1504 = getelementptr inbounds i8, ptr %0, i64 168
  %1505 = getelementptr inbounds i8, ptr %0, i64 176
  %1506 = getelementptr inbounds i8, ptr %0, i64 180
  %1507 = getelementptr inbounds i8, ptr %0, i64 48
  %1508 = getelementptr inbounds i8, ptr %0, i64 64
  %1509 = getelementptr inbounds i8, ptr %0, i64 56
  %1510 = getelementptr inbounds i8, ptr %0, i64 80
  %1511 = getelementptr inbounds i8, ptr %0, i64 120
  %1512 = getelementptr inbounds i8, ptr %0, i64 16
  %1513 = sext i32 %.05041 to i64
  %1514 = sext i32 %.05040 to i64
  %wide.trip.count8591 = zext nneg i32 %.05043 to i64
  %wide.trip.count8586 = zext nneg i32 %.05042 to i64
  br label %1515

1515:                                             ; preds = %.lr.ph7801, %1599
  %indvars.iv8588 = phi i64 [ 0, %.lr.ph7801 ], [ %indvars.iv.next8589, %1599 ]
  %.051977799 = phi double [ 0.000000e+00, %.lr.ph7801 ], [ %.15198, %1599 ]
  %.052017798 = phi double [ 0.000000e+00, %.lr.ph7801 ], [ %.15202, %1599 ]
  %.052307797 = phi double [ 0.000000e+00, %.lr.ph7801 ], [ %.15231.lcssa, %1599 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %100) #8
  store double 0.000000e+00, ptr %100, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %101) #8
  store double 0.000000e+00, ptr %101, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %102) #8
  store double 0.000000e+00, ptr %102, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %103) #8
  store double 0.000000e+00, ptr %103, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %104) #8
  store double 0.000000e+00, ptr %104, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %105) #8
  store double 0.000000e+00, ptr %105, align 8, !tbaa !13
  br i1 %1498, label %.lr.ph7793, label %._crit_edge7794

.lr.ph7793:                                       ; preds = %1515
  %1516 = mul nsw i64 %indvars.iv8588, %1513
  %1517 = mul nsw i64 %indvars.iv8588, %1514
  %invariant.gep9090 = getelementptr i32, ptr %spec.select, i64 %1516
  %invariant.gep9092 = getelementptr i32, ptr %spec.select6345, i64 %1517
  %1518 = trunc nuw nsw i64 %indvars.iv8588 to i32
  br label %1519

1519:                                             ; preds = %.lr.ph7793, %1590
  %indvars.iv8583 = phi i64 [ 0, %.lr.ph7793 ], [ %indvars.iv.next8584, %1590 ]
  %.152317791 = phi double [ %.052307797, %.lr.ph7793 ], [ %.25232, %1590 ]
  br i1 %.not6320, label %1523, label %1520

1520:                                             ; preds = %1519
  %gep9091 = getelementptr i32, ptr %invariant.gep9090, i64 %indvars.iv8583
  %1521 = load i32, ptr %gep9091, align 4, !tbaa !5
  %1522 = uitofp i32 %1521 to double
  br label %1523

1523:                                             ; preds = %1519, %1520
  %1524 = phi double [ %1522, %1520 ], [ 0.000000e+00, %1519 ]
  %gep9093 = getelementptr i32, ptr %invariant.gep9092, i64 %indvars.iv8583
  %1525 = load i32, ptr %gep9093, align 4, !tbaa !5
  %1526 = uitofp i32 %1525 to double
  %1527 = load double, ptr %542, align 8, !tbaa !10
  %1528 = fcmp ogt double %1527, %1526
  br i1 %1528, label %1529, label %1530

1529:                                             ; preds = %1523
  store double %1526, ptr %542, align 8, !tbaa !10
  br label %1530

1530:                                             ; preds = %1529, %1523
  %1531 = load double, ptr %1499, align 8, !tbaa !16
  %1532 = fcmp olt double %1531, %1526
  br i1 %1532, label %1533, label %1534

1533:                                             ; preds = %1530
  store double %1526, ptr %1499, align 8, !tbaa !16
  br label %1534

1534:                                             ; preds = %1530, %1533
  %1535 = fcmp ogt double %543, %1524
  %1536 = fcmp oeq double %1524, %1526
  %or.cond6368 = or i1 %1535, %1536
  br i1 %or.cond6368, label %1537, label %.thread6594

1537:                                             ; preds = %1534
  br i1 %.not6320, label %1544, label %1538

1538:                                             ; preds = %1537
  %1539 = fcmp ogt double %1524, %1526
  br i1 %1539, label %1540, label %1542

1540:                                             ; preds = %1538
  %1541 = fsub double %1524, %1526
  br label %1544

1542:                                             ; preds = %1538
  %1543 = fsub double %1526, %1524
  br label %1544

1544:                                             ; preds = %1537, %1540, %1542
  %1545 = phi double [ %1541, %1540 ], [ %1543, %1542 ], [ 0.000000e+00, %1537 ]
  %1546 = icmp eq i32 %1525, 0
  %1547 = fdiv double %1545, %1526
  %1548 = select i1 %1546, double %1524, double %1547
  %1549 = load double, ptr %1500, align 8, !tbaa !17
  %1550 = fcmp olt double %1524, %1549
  br i1 %1550, label %1551, label %1552

1551:                                             ; preds = %1544
  store double %1524, ptr %1500, align 8, !tbaa !17
  br label %1552

1552:                                             ; preds = %1551, %1544
  %1553 = load double, ptr %1501, align 8, !tbaa !18
  %1554 = fcmp ogt double %1524, %1553
  br i1 %1554, label %1555, label %1556

1555:                                             ; preds = %1552
  store double %1524, ptr %1501, align 8, !tbaa !18
  br label %1556

1556:                                             ; preds = %1555, %1552
  %1557 = load double, ptr %1502, align 8, !tbaa !19
  %1558 = fcmp olt double %1557, %1545
  br i1 %1558, label %1559, label %1561

1559:                                             ; preds = %1556
  store double %1545, ptr %1502, align 8, !tbaa !19
  store double %1526, ptr %1503, align 8, !tbaa !20
  store double %1524, ptr %1504, align 8, !tbaa !21
  %1560 = trunc nuw nsw i64 %indvars.iv8583 to i32
  store i32 %1560, ptr %1505, align 8, !tbaa !22
  store i32 %1518, ptr %1506, align 4, !tbaa !23
  br label %1561

1561:                                             ; preds = %1559, %1556
  %1562 = load double, ptr %1507, align 8, !tbaa !24
  %1563 = fcmp olt double %1562, %1548
  br i1 %1563, label %1564, label %1565

1564:                                             ; preds = %1561
  store double %1548, ptr %1507, align 8, !tbaa !24
  br label %1565

1565:                                             ; preds = %1564, %1561
  %1566 = fmul double %1548, %1548
  %1567 = fcmp ogt double %543, %1566
  br i1 %1567, label %1568, label %1574

1568:                                             ; preds = %1565
  %1569 = fsub double %1566, %.152317791
  %1570 = load double, ptr %1508, align 8, !tbaa !25
  %1571 = fadd double %1569, %1570
  %1572 = fsub double %1571, %1570
  %1573 = fsub double %1572, %1569
  store double %1571, ptr %1508, align 8, !tbaa !25
  br label %1574

1574:                                             ; preds = %1568, %1565
  %.25232 = phi double [ %1573, %1568 ], [ %.152317791, %1565 ]
  %1575 = call double @libxsmm_kahan_sum(double noundef %1526, ptr noundef nonnull %103, ptr noundef nonnull %100)
  %1576 = call double @libxsmm_kahan_sum(double noundef %1524, ptr noundef nonnull %104, ptr noundef nonnull %101)
  %1577 = call double @libxsmm_kahan_sum(double noundef %1545, ptr noundef nonnull %105, ptr noundef nonnull %102)
  %1578 = fmul double %1526, %1526
  %1579 = call double @libxsmm_kahan_sum(double noundef %1578, ptr noundef nonnull %96, ptr noundef nonnull %94)
  %1580 = fmul double %1524, %1524
  %1581 = call double @libxsmm_kahan_sum(double noundef %1580, ptr noundef nonnull %97, ptr noundef nonnull %95)
  %1582 = fmul double %1545, %1545
  %1583 = fcmp ogt double %543, %1582
  br i1 %1583, label %1584, label %1590

1584:                                             ; preds = %1574
  %1585 = call double @libxsmm_kahan_sum(double noundef %1582, ptr noundef nonnull %1509, ptr noundef nonnull %93)
  br label %1590

.thread6594:                                      ; preds = %1534
  %1586 = trunc nuw nsw i64 %indvars.iv8588 to i32
  %1587 = trunc nuw nsw i64 %indvars.iv8583 to i32
  %1588 = fcmp ogt double %543, %1526
  %1589 = select i1 %1588, i32 1, i32 2
  store i32 %1587, ptr %1505, align 8, !tbaa !22
  store i32 %1586, ptr %1506, align 4, !tbaa !23
  store double %1526, ptr %1503, align 8, !tbaa !20
  store double %1524, ptr %1504, align 8, !tbaa !21
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %105) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %104) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %103) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %102) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %101) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %100) #8
  br label %1710

1590:                                             ; preds = %1584, %1574
  %indvars.iv.next8584 = add nuw nsw i64 %indvars.iv8583, 1
  %exitcond8587.not = icmp eq i64 %indvars.iv.next8584, %wide.trip.count8586
  br i1 %exitcond8587.not, label %._crit_edge7794.loopexit, label %1519, !llvm.loop !55

._crit_edge7794.loopexit:                         ; preds = %1590
  %.pre8726 = load double, ptr %103, align 8, !tbaa !13
  br label %._crit_edge7794

._crit_edge7794:                                  ; preds = %._crit_edge7794.loopexit, %1515
  %1591 = phi double [ 0.000000e+00, %1515 ], [ %.pre8726, %._crit_edge7794.loopexit ]
  %.15231.lcssa = phi double [ %.052307797, %1515 ], [ %.25232, %._crit_edge7794.loopexit ]
  %1592 = call double @libxsmm_kahan_sum(double noundef %1591, ptr noundef nonnull %1510, ptr noundef nonnull %98)
  %1593 = load double, ptr %104, align 8, !tbaa !13
  %1594 = call double @libxsmm_kahan_sum(double noundef %1593, ptr noundef nonnull %1511, ptr noundef nonnull %99)
  %1595 = load double, ptr %1512, align 8, !tbaa !28
  %1596 = load double, ptr %105, align 8, !tbaa !13
  %1597 = fcmp olt double %1595, %1596
  br i1 %1597, label %1598, label %1599

1598:                                             ; preds = %._crit_edge7794
  store double %1596, ptr %1512, align 8, !tbaa !28
  br label %1599

1599:                                             ; preds = %1598, %._crit_edge7794
  %1600 = load double, ptr %103, align 8, !tbaa !13
  %1601 = fcmp olt double %.051977799, %1600
  %.15198 = select i1 %1601, double %1600, double %.051977799
  %1602 = load double, ptr %104, align 8, !tbaa !13
  %1603 = fcmp olt double %.052017798, %1602
  %.15202 = select i1 %1603, double %1602, double %.052017798
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %105) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %104) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %103) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %102) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %101) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %100) #8
  %indvars.iv.next8589 = add nuw nsw i64 %indvars.iv8588, 1
  %exitcond8592.not = icmp eq i64 %indvars.iv.next8589, %wide.trip.count8591
  br i1 %exitcond8592.not, label %._crit_edge7802, label %1515, !llvm.loop !56

._crit_edge7802:                                  ; preds = %1599, %1496
  %.05201.lcssa = phi double [ 0.000000e+00, %1496 ], [ %.15202, %1599 ]
  %.05197.lcssa = phi double [ 0.000000e+00, %1496 ], [ %.15198, %1599 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %106) #8
  store double 0.000000e+00, ptr %106, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %107) #8
  store double 0.000000e+00, ptr %107, align 8, !tbaa !13
  %1604 = getelementptr inbounds i8, ptr %0, i64 112
  %1605 = load double, ptr %1604, align 8, !tbaa !30
  %1606 = fcmp oeq double %1605, 0.000000e+00
  br i1 %1606, label %1608, label %1607

1607:                                             ; preds = %._crit_edge7802
  call void @__assert_fail(ptr noundef nonnull @.str.1, ptr noundef nonnull @.str.2, i32 noundef 130, ptr noundef nonnull @__PRETTY_FUNCTION__.libxsmm_matdiff) #10
  unreachable

1608:                                             ; preds = %._crit_edge7802
  %1609 = getelementptr inbounds i8, ptr %0, i64 152
  %1610 = load double, ptr %1609, align 8, !tbaa !31
  %1611 = fcmp oeq double %1610, 0.000000e+00
  br i1 %1611, label %1613, label %1612

1612:                                             ; preds = %1608
  call void @__assert_fail(ptr noundef nonnull @.str.3, ptr noundef nonnull @.str.2, i32 noundef 131, ptr noundef nonnull @__PRETTY_FUNCTION__.libxsmm_matdiff) #10
  unreachable

1613:                                             ; preds = %1608
  %.not6321 = icmp eq i64 %538, 0
  br i1 %.not6321, label %1624, label %1614

1614:                                             ; preds = %1613
  %1615 = getelementptr inbounds i8, ptr %0, i64 80
  %1616 = load double, ptr %1615, align 8, !tbaa !32
  %1617 = uitofp i64 %538 to double
  %1618 = fdiv double %1616, %1617
  %1619 = getelementptr inbounds i8, ptr %0, i64 104
  store double %1618, ptr %1619, align 8, !tbaa !33
  %1620 = getelementptr inbounds i8, ptr %0, i64 120
  %1621 = load double, ptr %1620, align 8, !tbaa !34
  %1622 = fdiv double %1621, %1617
  %1623 = getelementptr inbounds i8, ptr %0, i64 144
  store double %1622, ptr %1623, align 8, !tbaa !35
  br label %1624

1624:                                             ; preds = %1614, %1613
  %1625 = fcmp ugt double %.05197.lcssa, 0.000000e+00
  br i1 %1625, label %1626, label %1632

1626:                                             ; preds = %1624
  %1627 = getelementptr inbounds i8, ptr %0, i64 16
  %1628 = load double, ptr %1627, align 8, !tbaa !28
  %1629 = fcmp ogt double %.05197.lcssa, 0.000000e+00
  %1630 = select i1 %1629, double %.05197.lcssa, double 1.000000e+00
  %1631 = fdiv double %1628, %1630
  br label %1632

1632:                                             ; preds = %1624, %1626
  %1633 = phi double [ %1631, %1626 ], [ %.05201.lcssa, %1624 ]
  %1634 = getelementptr inbounds i8, ptr %0, i64 24
  store double %1633, ptr %1634, align 8, !tbaa !36
  %1635 = load double, ptr %96, align 8
  %1636 = fcmp ugt double %1635, 0.000000e+00
  br i1 %1636, label %1643, label %1637

1637:                                             ; preds = %1632
  %1638 = load double, ptr %97, align 8, !tbaa !13
  %1639 = fmul double %1638, %1638
  %1640 = getelementptr inbounds i8, ptr %0, i64 56
  %1641 = load double, ptr %1640, align 8, !tbaa !37
  %1642 = fcmp olt double %1639, %1641
  %.6373 = select i1 %1642, double %1639, double %1641
  br label %1649

1643:                                             ; preds = %1632
  %1644 = getelementptr inbounds i8, ptr %0, i64 56
  %1645 = load double, ptr %1644, align 8, !tbaa !37
  %1646 = fcmp ogt double %1635, 0.000000e+00
  %1647 = select i1 %1646, double %1635, double 1.000000e+00
  %1648 = fdiv double %1645, %1647
  br label %1649

1649:                                             ; preds = %1637, %1643
  %1650 = phi double [ %1648, %1643 ], [ %.6373, %1637 ]
  %1651 = getelementptr inbounds i8, ptr %0, i64 32
  store double %1650, ptr %1651, align 8, !tbaa !38
  %1652 = icmp sgt i32 %.05042, 0
  br i1 %1652, label %.lr.ph7814, label %._crit_edge7815.thread

.lr.ph7814:                                       ; preds = %1649
  %.not6322 = icmp eq ptr %spec.select, null
  %1653 = getelementptr inbounds i8, ptr %0, i64 104
  %1654 = getelementptr inbounds i8, ptr %0, i64 144
  %1655 = sext i32 %.05040 to i64
  %1656 = sext i32 %.05041 to i64
  %wide.trip.count8606 = zext nneg i32 %.05042 to i64
  %wide.trip.count8596 = zext nneg i32 %.05043 to i64
  %wide.trip.count8601 = zext nneg i32 %.05043 to i64
  br label %1657

1657:                                             ; preds = %.lr.ph7814, %1697
  %indvars.iv8603 = phi i64 [ 0, %.lr.ph7814 ], [ %indvars.iv.next8604, %1697 ]
  %.052267812 = phi double [ 0.000000e+00, %.lr.ph7814 ], [ %.15227, %1697 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %108) #8
  store double 0.000000e+00, ptr %108, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %109) #8
  store double 0.000000e+00, ptr %109, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %110) #8
  store double 0.000000e+00, ptr %110, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %111) #8
  store double 0.000000e+00, ptr %111, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %112) #8
  store double 0.000000e+00, ptr %112, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %113) #8
  store double 0.000000e+00, ptr %113, align 8, !tbaa !13
  br i1 %1497, label %.lr.ph7807, label %._crit_edge7808

.lr.ph7807:                                       ; preds = %1657
  %invariant.gep9098 = getelementptr i32, ptr %spec.select6345, i64 %indvars.iv8603
  br i1 %.not6322, label %.thread6610.us, label %.lr.ph7807.split.preheader

.lr.ph7807.split.preheader:                       ; preds = %.lr.ph7807
  %invariant.gep9096 = getelementptr i32, ptr %spec.select, i64 %indvars.iv8603
  br label %.lr.ph7807.split

.thread6610.us:                                   ; preds = %.lr.ph7807, %.thread6610.us
  %indvars.iv8598 = phi i64 [ %indvars.iv.next8599, %.thread6610.us ], [ 0, %.lr.ph7807 ]
  %1658 = mul nsw i64 %indvars.iv8598, %1655
  %gep9099 = getelementptr i32, ptr %invariant.gep9098, i64 %1658
  %1659 = load i32, ptr %gep9099, align 4, !tbaa !5
  %1660 = uitofp i32 %1659 to double
  %1661 = load double, ptr %1653, align 8, !tbaa !33
  %1662 = fsub double %1660, %1661
  %1663 = load double, ptr %1654, align 8, !tbaa !35
  %1664 = fsub double 0.000000e+00, %1663
  %1665 = fmul double %1662, %1662
  %1666 = call double @libxsmm_kahan_sum(double noundef %1665, ptr noundef nonnull %1604, ptr noundef nonnull %106)
  %1667 = fmul double %1664, %1664
  %1668 = call double @libxsmm_kahan_sum(double noundef %1667, ptr noundef nonnull %1609, ptr noundef nonnull %107)
  %1669 = call double @libxsmm_kahan_sum(double noundef %1660, ptr noundef nonnull %111, ptr noundef nonnull %108)
  %1670 = call double @libxsmm_kahan_sum(double noundef 0.000000e+00, ptr noundef nonnull %112, ptr noundef nonnull %109)
  %1671 = call double @libxsmm_kahan_sum(double noundef 0.000000e+00, ptr noundef nonnull %113, ptr noundef nonnull %110)
  %indvars.iv.next8599 = add nuw nsw i64 %indvars.iv8598, 1
  %exitcond8602.not = icmp eq i64 %indvars.iv.next8599, %wide.trip.count8601
  br i1 %exitcond8602.not, label %._crit_edge7808, label %.thread6610.us, !llvm.loop !57

.lr.ph7807.split:                                 ; preds = %.lr.ph7807.split.preheader, %.lr.ph7807.split
  %indvars.iv8593 = phi i64 [ 0, %.lr.ph7807.split.preheader ], [ %indvars.iv.next8594, %.lr.ph7807.split ]
  %1672 = mul nsw i64 %indvars.iv8593, %1655
  %gep9095 = getelementptr i32, ptr %invariant.gep9098, i64 %1672
  %1673 = load i32, ptr %gep9095, align 4, !tbaa !5
  %1674 = uitofp i32 %1673 to double
  %1675 = mul nsw i64 %indvars.iv8593, %1656
  %gep9097 = getelementptr i32, ptr %invariant.gep9096, i64 %1675
  %1676 = load i32, ptr %gep9097, align 4, !tbaa !5
  %1677 = uitofp i32 %1676 to double
  %1678 = fcmp ogt double %1677, %1674
  %1679 = fsub double %1677, %1674
  %1680 = fsub double %1674, %1677
  %1681 = select i1 %1678, double %1679, double %1680
  %1682 = load double, ptr %1653, align 8, !tbaa !33
  %1683 = fsub double %1674, %1682
  %1684 = load double, ptr %1654, align 8, !tbaa !35
  %1685 = fsub double %1677, %1684
  %1686 = fmul double %1683, %1683
  %1687 = call double @libxsmm_kahan_sum(double noundef %1686, ptr noundef nonnull %1604, ptr noundef nonnull %106)
  %1688 = fmul double %1685, %1685
  %1689 = call double @libxsmm_kahan_sum(double noundef %1688, ptr noundef nonnull %1609, ptr noundef nonnull %107)
  %1690 = call double @libxsmm_kahan_sum(double noundef %1674, ptr noundef nonnull %111, ptr noundef nonnull %108)
  %1691 = call double @libxsmm_kahan_sum(double noundef %1677, ptr noundef nonnull %112, ptr noundef nonnull %109)
  %1692 = call double @libxsmm_kahan_sum(double noundef %1681, ptr noundef nonnull %113, ptr noundef nonnull %110)
  %indvars.iv.next8594 = add nuw nsw i64 %indvars.iv8593, 1
  %exitcond8597.not = icmp eq i64 %indvars.iv.next8594, %wide.trip.count8596
  br i1 %exitcond8597.not, label %._crit_edge7808, label %.lr.ph7807.split, !llvm.loop !57

._crit_edge7808:                                  ; preds = %.lr.ph7807.split, %.thread6610.us, %1657
  %1693 = load double, ptr %0, align 8, !tbaa !40
  %1694 = load double, ptr %113, align 8, !tbaa !13
  %1695 = fcmp olt double %1693, %1694
  br i1 %1695, label %1696, label %1697

1696:                                             ; preds = %._crit_edge7808
  store double %1694, ptr %0, align 8, !tbaa !40
  br label %1697

1697:                                             ; preds = %1696, %._crit_edge7808
  %1698 = load double, ptr %111, align 8, !tbaa !13
  %1699 = fcmp olt double %.052267812, %1698
  %.15227 = select i1 %1699, double %1698, double %.052267812
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %113) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %112) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %111) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %110) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %109) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %108) #8
  %indvars.iv.next8604 = add nuw nsw i64 %indvars.iv8603, 1
  %exitcond8607.not = icmp eq i64 %indvars.iv.next8604, %wide.trip.count8606
  br i1 %exitcond8607.not, label %._crit_edge7815, label %1657, !llvm.loop !58

._crit_edge7815:                                  ; preds = %1697
  %1700 = fcmp ugt double %.15227, 0.000000e+00
  br i1 %1700, label %1702, label %._crit_edge7815.thread

._crit_edge7815.thread:                           ; preds = %1649, %._crit_edge7815
  %1701 = load double, ptr %0, align 8, !tbaa !40
  br label %1707

1702:                                             ; preds = %._crit_edge7815
  %1703 = load double, ptr %0, align 8, !tbaa !40
  %1704 = fcmp ogt double %.15227, 0.000000e+00
  %1705 = select i1 %1704, double %.15227, double 1.000000e+00
  %1706 = fdiv double %1703, %1705
  br label %1707

1707:                                             ; preds = %1702, %._crit_edge7815.thread
  %1708 = phi double [ %1701, %._crit_edge7815.thread ], [ %1706, %1702 ]
  %1709 = getelementptr inbounds i8, ptr %0, i64 8
  store double %1708, ptr %1709, align 8, !tbaa !42
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %107) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %106) #8
  br label %1710

1710:                                             ; preds = %.thread6594, %1707
  %.246609 = phi i32 [ %1589, %.thread6594 ], [ 0, %1707 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %99) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %98) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %97) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %96) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %95) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %94) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %93) #8
  br label %6314

1711:                                             ; preds = %1494
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %114) #8
  store double 0.000000e+00, ptr %114, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %115) #8
  store double 0.000000e+00, ptr %115, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %116) #8
  store double 0.000000e+00, ptr %116, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %117) #8
  store double 0.000000e+00, ptr %117, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %118) #8
  store double 0.000000e+00, ptr %118, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %119) #8
  store double 0.000000e+00, ptr %119, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %120) #8
  store double 0.000000e+00, ptr %120, align 8, !tbaa !13
  %1712 = sext i32 %.05042 to i64
  %1713 = sext i32 %.05043 to i64
  %1714 = mul nsw i64 %1712, %1713
  %1715 = tail call i64 @libxsmm_coprime2(i64 noundef %1714)
  %1716 = icmp sgt i32 %.05043, 0
  br i1 %1716, label %.lr.ph7775, label %._crit_edge7776

.lr.ph7775:                                       ; preds = %1711
  %1717 = icmp sgt i32 %.05042, 0
  %.not6317 = icmp eq ptr %spec.select, null
  %1718 = getelementptr inbounds i8, ptr %0, i64 96
  %1719 = getelementptr inbounds i8, ptr %0, i64 128
  %1720 = getelementptr inbounds i8, ptr %0, i64 136
  %1721 = getelementptr inbounds i8, ptr %0, i64 40
  %1722 = getelementptr inbounds i8, ptr %0, i64 160
  %1723 = getelementptr inbounds i8, ptr %0, i64 168
  %1724 = getelementptr inbounds i8, ptr %0, i64 176
  %1725 = getelementptr inbounds i8, ptr %0, i64 180
  %1726 = getelementptr inbounds i8, ptr %0, i64 48
  %1727 = getelementptr inbounds i8, ptr %0, i64 64
  %1728 = getelementptr inbounds i8, ptr %0, i64 56
  %1729 = getelementptr inbounds i8, ptr %0, i64 80
  %1730 = getelementptr inbounds i8, ptr %0, i64 120
  %1731 = getelementptr inbounds i8, ptr %0, i64 16
  %1732 = zext i32 %.05042 to i64
  %wide.trip.count8571 = zext nneg i32 %.05043 to i64
  br label %1733

1733:                                             ; preds = %.lr.ph7775, %1827
  %indvars.iv8568 = phi i64 [ 0, %.lr.ph7775 ], [ %indvars.iv.next8569, %1827 ]
  %.052397773 = phi double [ 0.000000e+00, %.lr.ph7775 ], [ %.15240, %1827 ]
  %.052437772 = phi double [ 0.000000e+00, %.lr.ph7775 ], [ %.15244, %1827 ]
  %.052517771 = phi double [ 0.000000e+00, %.lr.ph7775 ], [ %.15252.lcssa, %1827 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %121) #8
  store double 0.000000e+00, ptr %121, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %122) #8
  store double 0.000000e+00, ptr %122, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %123) #8
  store double 0.000000e+00, ptr %123, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %124) #8
  store double 0.000000e+00, ptr %124, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %125) #8
  store double 0.000000e+00, ptr %125, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %126) #8
  store double 0.000000e+00, ptr %126, align 8, !tbaa !13
  br i1 %1717, label %.lr.ph7767, label %._crit_edge7768

.lr.ph7767:                                       ; preds = %1733
  %1734 = mul nuw nsw i64 %indvars.iv8568, %1732
  br label %1735

1735:                                             ; preds = %.lr.ph7767, %1818
  %indvars.iv8563 = phi i64 [ 0, %.lr.ph7767 ], [ %indvars.iv.next8564, %1818 ]
  %.152527765 = phi double [ %.052517771, %.lr.ph7767 ], [ %.25253, %1818 ]
  %1736 = add nuw nsw i64 %indvars.iv8563, %1734
  %1737 = mul i64 %1715, %1736
  %1738 = urem i64 %1737, %1714
  %1739 = udiv i64 %1738, %1712
  %1740 = trunc i64 %1739 to i32
  %1741 = urem i64 %1738, %1712
  %1742 = trunc nuw i64 %1741 to i32
  br i1 %.not6317, label %1750, label %1743

1743:                                             ; preds = %1735
  %1744 = mul nsw i32 %.05041, %1740
  %1745 = add nsw i32 %1744, %1742
  %1746 = sext i32 %1745 to i64
  %1747 = getelementptr inbounds i32, ptr %spec.select, i64 %1746
  %1748 = load i32, ptr %1747, align 4, !tbaa !5
  %1749 = uitofp i32 %1748 to double
  br label %1750

1750:                                             ; preds = %1735, %1743
  %1751 = phi double [ %1749, %1743 ], [ 0.000000e+00, %1735 ]
  %1752 = mul nsw i32 %.05040, %1740
  %1753 = add nsw i32 %1752, %1742
  %1754 = sext i32 %1753 to i64
  %1755 = getelementptr inbounds i32, ptr %spec.select6345, i64 %1754
  %1756 = load i32, ptr %1755, align 4, !tbaa !5
  %1757 = uitofp i32 %1756 to double
  %1758 = load double, ptr %542, align 8, !tbaa !10
  %1759 = fcmp ogt double %1758, %1757
  br i1 %1759, label %1760, label %1761

1760:                                             ; preds = %1750
  store double %1757, ptr %542, align 8, !tbaa !10
  br label %1761

1761:                                             ; preds = %1760, %1750
  %1762 = load double, ptr %1718, align 8, !tbaa !16
  %1763 = fcmp olt double %1762, %1757
  br i1 %1763, label %1764, label %1765

1764:                                             ; preds = %1761
  store double %1757, ptr %1718, align 8, !tbaa !16
  br label %1765

1765:                                             ; preds = %1761, %1764
  %1766 = fcmp ogt double %543, %1751
  %1767 = fcmp oeq double %1751, %1757
  %or.cond6374 = or i1 %1766, %1767
  br i1 %or.cond6374, label %1768, label %.thread6619

1768:                                             ; preds = %1765
  br i1 %.not6317, label %1775, label %1769

1769:                                             ; preds = %1768
  %1770 = fcmp ogt double %1751, %1757
  br i1 %1770, label %1771, label %1773

1771:                                             ; preds = %1769
  %1772 = fsub double %1751, %1757
  br label %1775

1773:                                             ; preds = %1769
  %1774 = fsub double %1757, %1751
  br label %1775

1775:                                             ; preds = %1768, %1771, %1773
  %1776 = phi double [ %1772, %1771 ], [ %1774, %1773 ], [ 0.000000e+00, %1768 ]
  %1777 = icmp eq i32 %1756, 0
  %1778 = fdiv double %1776, %1757
  %1779 = select i1 %1777, double %1751, double %1778
  %1780 = load double, ptr %1719, align 8, !tbaa !17
  %1781 = fcmp olt double %1751, %1780
  br i1 %1781, label %1782, label %1783

1782:                                             ; preds = %1775
  store double %1751, ptr %1719, align 8, !tbaa !17
  br label %1783

1783:                                             ; preds = %1782, %1775
  %1784 = load double, ptr %1720, align 8, !tbaa !18
  %1785 = fcmp ogt double %1751, %1784
  br i1 %1785, label %1786, label %1787

1786:                                             ; preds = %1783
  store double %1751, ptr %1720, align 8, !tbaa !18
  br label %1787

1787:                                             ; preds = %1786, %1783
  %1788 = load double, ptr %1721, align 8, !tbaa !19
  %1789 = fcmp olt double %1788, %1776
  br i1 %1789, label %1790, label %1791

1790:                                             ; preds = %1787
  store double %1776, ptr %1721, align 8, !tbaa !19
  store double %1757, ptr %1722, align 8, !tbaa !20
  store double %1751, ptr %1723, align 8, !tbaa !21
  store i32 %1742, ptr %1724, align 8, !tbaa !22
  store i32 %1740, ptr %1725, align 4, !tbaa !23
  br label %1791

1791:                                             ; preds = %1790, %1787
  %1792 = load double, ptr %1726, align 8, !tbaa !24
  %1793 = fcmp olt double %1792, %1779
  br i1 %1793, label %1794, label %1795

1794:                                             ; preds = %1791
  store double %1779, ptr %1726, align 8, !tbaa !24
  br label %1795

1795:                                             ; preds = %1794, %1791
  %1796 = fmul double %1779, %1779
  %1797 = fcmp ogt double %543, %1796
  br i1 %1797, label %1798, label %1804

1798:                                             ; preds = %1795
  %1799 = fsub double %1796, %.152527765
  %1800 = load double, ptr %1727, align 8, !tbaa !25
  %1801 = fadd double %1799, %1800
  %1802 = fsub double %1801, %1800
  %1803 = fsub double %1802, %1799
  store double %1801, ptr %1727, align 8, !tbaa !25
  br label %1804

1804:                                             ; preds = %1798, %1795
  %.25253 = phi double [ %1803, %1798 ], [ %.152527765, %1795 ]
  %1805 = call double @libxsmm_kahan_sum(double noundef %1757, ptr noundef nonnull %124, ptr noundef nonnull %121)
  %1806 = call double @libxsmm_kahan_sum(double noundef %1751, ptr noundef nonnull %125, ptr noundef nonnull %122)
  %1807 = call double @libxsmm_kahan_sum(double noundef %1776, ptr noundef nonnull %126, ptr noundef nonnull %123)
  %1808 = fmul double %1757, %1757
  %1809 = call double @libxsmm_kahan_sum(double noundef %1808, ptr noundef nonnull %117, ptr noundef nonnull %115)
  %1810 = fmul double %1751, %1751
  %1811 = call double @libxsmm_kahan_sum(double noundef %1810, ptr noundef nonnull %118, ptr noundef nonnull %116)
  %1812 = fmul double %1776, %1776
  %1813 = fcmp ogt double %543, %1812
  br i1 %1813, label %1814, label %1818

1814:                                             ; preds = %1804
  %1815 = call double @libxsmm_kahan_sum(double noundef %1812, ptr noundef nonnull %1728, ptr noundef nonnull %114)
  br label %1818

.thread6619:                                      ; preds = %1765
  %1816 = fcmp ogt double %543, %1757
  %1817 = select i1 %1816, i32 1, i32 2
  store i32 %1742, ptr %1724, align 8, !tbaa !22
  store i32 %1740, ptr %1725, align 4, !tbaa !23
  store double %1757, ptr %1722, align 8, !tbaa !20
  store double %1751, ptr %1723, align 8, !tbaa !21
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %126) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %125) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %124) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %123) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %122) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %121) #8
  br label %1941

1818:                                             ; preds = %1814, %1804
  %indvars.iv.next8564 = add nuw nsw i64 %indvars.iv8563, 1
  %exitcond8567.not = icmp eq i64 %indvars.iv.next8564, %1732
  br i1 %exitcond8567.not, label %._crit_edge7768.loopexit, label %1735, !llvm.loop !59

._crit_edge7768.loopexit:                         ; preds = %1818
  %.pre8724 = load double, ptr %124, align 8, !tbaa !13
  br label %._crit_edge7768

._crit_edge7768:                                  ; preds = %._crit_edge7768.loopexit, %1733
  %1819 = phi double [ 0.000000e+00, %1733 ], [ %.pre8724, %._crit_edge7768.loopexit ]
  %.15252.lcssa = phi double [ %.052517771, %1733 ], [ %.25253, %._crit_edge7768.loopexit ]
  %1820 = call double @libxsmm_kahan_sum(double noundef %1819, ptr noundef nonnull %1729, ptr noundef nonnull %119)
  %1821 = load double, ptr %125, align 8, !tbaa !13
  %1822 = call double @libxsmm_kahan_sum(double noundef %1821, ptr noundef nonnull %1730, ptr noundef nonnull %120)
  %1823 = load double, ptr %1731, align 8, !tbaa !28
  %1824 = load double, ptr %126, align 8, !tbaa !13
  %1825 = fcmp olt double %1823, %1824
  br i1 %1825, label %1826, label %1827

1826:                                             ; preds = %._crit_edge7768
  store double %1824, ptr %1731, align 8, !tbaa !28
  br label %1827

1827:                                             ; preds = %1826, %._crit_edge7768
  %1828 = load double, ptr %124, align 8, !tbaa !13
  %1829 = fcmp olt double %.052397773, %1828
  %.15240 = select i1 %1829, double %1828, double %.052397773
  %1830 = load double, ptr %125, align 8, !tbaa !13
  %1831 = fcmp olt double %.052437772, %1830
  %.15244 = select i1 %1831, double %1830, double %.052437772
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %126) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %125) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %124) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %123) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %122) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %121) #8
  %indvars.iv.next8569 = add nuw nsw i64 %indvars.iv8568, 1
  %exitcond8572.not = icmp eq i64 %indvars.iv.next8569, %wide.trip.count8571
  br i1 %exitcond8572.not, label %._crit_edge7776, label %1733, !llvm.loop !60

._crit_edge7776:                                  ; preds = %1827, %1711
  %.05243.lcssa = phi double [ 0.000000e+00, %1711 ], [ %.15244, %1827 ]
  %.05239.lcssa = phi double [ 0.000000e+00, %1711 ], [ %.15240, %1827 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %127) #8
  store double 0.000000e+00, ptr %127, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %128) #8
  store double 0.000000e+00, ptr %128, align 8, !tbaa !13
  %1832 = getelementptr inbounds i8, ptr %0, i64 112
  %1833 = load double, ptr %1832, align 8, !tbaa !30
  %1834 = fcmp oeq double %1833, 0.000000e+00
  br i1 %1834, label %1836, label %1835

1835:                                             ; preds = %._crit_edge7776
  call void @__assert_fail(ptr noundef nonnull @.str.1, ptr noundef nonnull @.str.2, i32 noundef 130, ptr noundef nonnull @__PRETTY_FUNCTION__.libxsmm_matdiff) #10
  unreachable

1836:                                             ; preds = %._crit_edge7776
  %1837 = getelementptr inbounds i8, ptr %0, i64 152
  %1838 = load double, ptr %1837, align 8, !tbaa !31
  %1839 = fcmp oeq double %1838, 0.000000e+00
  br i1 %1839, label %1841, label %1840

1840:                                             ; preds = %1836
  call void @__assert_fail(ptr noundef nonnull @.str.3, ptr noundef nonnull @.str.2, i32 noundef 131, ptr noundef nonnull @__PRETTY_FUNCTION__.libxsmm_matdiff) #10
  unreachable

1841:                                             ; preds = %1836
  %.not6318 = icmp eq i64 %538, 0
  br i1 %.not6318, label %1852, label %1842

1842:                                             ; preds = %1841
  %1843 = getelementptr inbounds i8, ptr %0, i64 80
  %1844 = load double, ptr %1843, align 8, !tbaa !32
  %1845 = uitofp i64 %538 to double
  %1846 = fdiv double %1844, %1845
  %1847 = getelementptr inbounds i8, ptr %0, i64 104
  store double %1846, ptr %1847, align 8, !tbaa !33
  %1848 = getelementptr inbounds i8, ptr %0, i64 120
  %1849 = load double, ptr %1848, align 8, !tbaa !34
  %1850 = fdiv double %1849, %1845
  %1851 = getelementptr inbounds i8, ptr %0, i64 144
  store double %1850, ptr %1851, align 8, !tbaa !35
  br label %1852

1852:                                             ; preds = %1842, %1841
  %1853 = fcmp ugt double %.05239.lcssa, 0.000000e+00
  br i1 %1853, label %1854, label %1860

1854:                                             ; preds = %1852
  %1855 = getelementptr inbounds i8, ptr %0, i64 16
  %1856 = load double, ptr %1855, align 8, !tbaa !28
  %1857 = fcmp ogt double %.05239.lcssa, 0.000000e+00
  %1858 = select i1 %1857, double %.05239.lcssa, double 1.000000e+00
  %1859 = fdiv double %1856, %1858
  br label %1860

1860:                                             ; preds = %1852, %1854
  %1861 = phi double [ %1859, %1854 ], [ %.05243.lcssa, %1852 ]
  %1862 = getelementptr inbounds i8, ptr %0, i64 24
  store double %1861, ptr %1862, align 8, !tbaa !36
  %1863 = load double, ptr %117, align 8
  %1864 = fcmp ugt double %1863, 0.000000e+00
  br i1 %1864, label %1871, label %1865

1865:                                             ; preds = %1860
  %1866 = load double, ptr %118, align 8, !tbaa !13
  %1867 = fmul double %1866, %1866
  %1868 = getelementptr inbounds i8, ptr %0, i64 56
  %1869 = load double, ptr %1868, align 8, !tbaa !37
  %1870 = fcmp olt double %1867, %1869
  %.6379 = select i1 %1870, double %1867, double %1869
  br label %1877

1871:                                             ; preds = %1860
  %1872 = getelementptr inbounds i8, ptr %0, i64 56
  %1873 = load double, ptr %1872, align 8, !tbaa !37
  %1874 = fcmp ogt double %1863, 0.000000e+00
  %1875 = select i1 %1874, double %1863, double 1.000000e+00
  %1876 = fdiv double %1873, %1875
  br label %1877

1877:                                             ; preds = %1865, %1871
  %1878 = phi double [ %1876, %1871 ], [ %.6379, %1865 ]
  %1879 = getelementptr inbounds i8, ptr %0, i64 32
  store double %1878, ptr %1879, align 8, !tbaa !38
  %1880 = icmp sgt i32 %.05042, 0
  br i1 %1880, label %.lr.ph7787, label %._crit_edge7788.thread

.lr.ph7787:                                       ; preds = %1877
  %.not6319 = icmp eq ptr %spec.select, null
  %1881 = getelementptr inbounds i8, ptr %0, i64 104
  %1882 = getelementptr inbounds i8, ptr %0, i64 144
  %1883 = zext nneg i32 %.05042 to i64
  %wide.trip.count8576 = zext nneg i32 %.05043 to i64
  br label %1884

1884:                                             ; preds = %.lr.ph7787, %1928
  %indvars.iv8578 = phi i64 [ 0, %.lr.ph7787 ], [ %indvars.iv.next8579, %1928 ]
  %.052477785 = phi double [ 0.000000e+00, %.lr.ph7787 ], [ %.15248, %1928 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %129) #8
  store double 0.000000e+00, ptr %129, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %130) #8
  store double 0.000000e+00, ptr %130, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %131) #8
  store double 0.000000e+00, ptr %131, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %132) #8
  store double 0.000000e+00, ptr %132, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %133) #8
  store double 0.000000e+00, ptr %133, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %134) #8
  store double 0.000000e+00, ptr %134, align 8, !tbaa !13
  br i1 %1716, label %.lr.ph7781, label %._crit_edge7782

.lr.ph7781:                                       ; preds = %1884, %.thread6635
  %indvars.iv8573 = phi i64 [ %indvars.iv.next8574, %.thread6635 ], [ 0, %1884 ]
  %1885 = mul nuw nsw i64 %indvars.iv8573, %1883
  %1886 = add nuw nsw i64 %1885, %indvars.iv8578
  %1887 = mul i64 %1715, %1886
  %1888 = urem i64 %1887, %1714
  %1889 = udiv i64 %1888, %1712
  %1890 = trunc i64 %1889 to i32
  %1891 = urem i64 %1888, %1712
  %1892 = trunc nuw i64 %1891 to i32
  %1893 = mul nsw i32 %.05040, %1890
  %1894 = add nsw i32 %1893, %1892
  %1895 = sext i32 %1894 to i64
  %1896 = getelementptr inbounds i32, ptr %spec.select6345, i64 %1895
  %1897 = load i32, ptr %1896, align 4, !tbaa !5
  %1898 = uitofp i32 %1897 to double
  br i1 %.not6319, label %.thread6635, label %1899

1899:                                             ; preds = %.lr.ph7781
  %1900 = mul nsw i32 %.05041, %1890
  %1901 = add nsw i32 %1900, %1892
  %1902 = sext i32 %1901 to i64
  %1903 = getelementptr inbounds i32, ptr %spec.select, i64 %1902
  %1904 = load i32, ptr %1903, align 4, !tbaa !5
  %1905 = uitofp i32 %1904 to double
  %1906 = fcmp ogt double %1905, %1898
  br i1 %1906, label %1907, label %1909

1907:                                             ; preds = %1899
  %1908 = fsub double %1905, %1898
  br label %.thread6635

1909:                                             ; preds = %1899
  %1910 = fsub double %1898, %1905
  br label %.thread6635

.thread6635:                                      ; preds = %.lr.ph7781, %1907, %1909
  %1911 = phi double [ %1905, %1907 ], [ %1905, %1909 ], [ 0.000000e+00, %.lr.ph7781 ]
  %1912 = phi double [ %1908, %1907 ], [ %1910, %1909 ], [ 0.000000e+00, %.lr.ph7781 ]
  %1913 = load double, ptr %1881, align 8, !tbaa !33
  %1914 = fsub double %1898, %1913
  %1915 = load double, ptr %1882, align 8, !tbaa !35
  %1916 = fsub double %1911, %1915
  %1917 = fmul double %1914, %1914
  %1918 = call double @libxsmm_kahan_sum(double noundef %1917, ptr noundef nonnull %1832, ptr noundef nonnull %127)
  %1919 = fmul double %1916, %1916
  %1920 = call double @libxsmm_kahan_sum(double noundef %1919, ptr noundef nonnull %1837, ptr noundef nonnull %128)
  %1921 = call double @libxsmm_kahan_sum(double noundef %1898, ptr noundef nonnull %132, ptr noundef nonnull %129)
  %1922 = call double @libxsmm_kahan_sum(double noundef %1911, ptr noundef nonnull %133, ptr noundef nonnull %130)
  %1923 = call double @libxsmm_kahan_sum(double noundef %1912, ptr noundef nonnull %134, ptr noundef nonnull %131)
  %indvars.iv.next8574 = add nuw nsw i64 %indvars.iv8573, 1
  %exitcond8577.not = icmp eq i64 %indvars.iv.next8574, %wide.trip.count8576
  br i1 %exitcond8577.not, label %._crit_edge7782.loopexit, label %.lr.ph7781, !llvm.loop !61

._crit_edge7782.loopexit:                         ; preds = %.thread6635
  %.pre8725 = load double, ptr %134, align 8, !tbaa !13
  br label %._crit_edge7782

._crit_edge7782:                                  ; preds = %._crit_edge7782.loopexit, %1884
  %1924 = phi double [ %.pre8725, %._crit_edge7782.loopexit ], [ 0.000000e+00, %1884 ]
  %1925 = load double, ptr %0, align 8, !tbaa !40
  %1926 = fcmp olt double %1925, %1924
  br i1 %1926, label %1927, label %1928

1927:                                             ; preds = %._crit_edge7782
  store double %1924, ptr %0, align 8, !tbaa !40
  br label %1928

1928:                                             ; preds = %1927, %._crit_edge7782
  %1929 = load double, ptr %132, align 8, !tbaa !13
  %1930 = fcmp olt double %.052477785, %1929
  %.15248 = select i1 %1930, double %1929, double %.052477785
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %134) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %133) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %132) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %131) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %130) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %129) #8
  %indvars.iv.next8579 = add nuw nsw i64 %indvars.iv8578, 1
  %exitcond8582.not = icmp eq i64 %indvars.iv.next8579, %1883
  br i1 %exitcond8582.not, label %._crit_edge7788, label %1884, !llvm.loop !62

._crit_edge7788:                                  ; preds = %1928
  %1931 = fcmp ugt double %.15248, 0.000000e+00
  br i1 %1931, label %1933, label %._crit_edge7788.thread

._crit_edge7788.thread:                           ; preds = %1877, %._crit_edge7788
  %1932 = load double, ptr %0, align 8, !tbaa !40
  br label %1938

1933:                                             ; preds = %._crit_edge7788
  %1934 = load double, ptr %0, align 8, !tbaa !40
  %1935 = fcmp ogt double %.15248, 0.000000e+00
  %1936 = select i1 %1935, double %.15248, double 1.000000e+00
  %1937 = fdiv double %1934, %1936
  br label %1938

1938:                                             ; preds = %1933, %._crit_edge7788.thread
  %1939 = phi double [ %1932, %._crit_edge7788.thread ], [ %1937, %1933 ]
  %1940 = getelementptr inbounds i8, ptr %0, i64 8
  store double %1939, ptr %1940, align 8, !tbaa !42
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %128) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %127) #8
  br label %1941

1941:                                             ; preds = %.thread6619, %1938
  %.296634 = phi i32 [ %1817, %.thread6619 ], [ 0, %1938 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %120) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %119) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %118) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %117) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %116) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %115) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %114) #8
  br label %6314

1942:                                             ; preds = %541
  %1943 = icmp eq i32 %535, 0
  br i1 %1943, label %1944, label %2174

1944:                                             ; preds = %1942
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %135) #8
  store double 0.000000e+00, ptr %135, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %136) #8
  store double 0.000000e+00, ptr %136, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %137) #8
  store double 0.000000e+00, ptr %137, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %138) #8
  store double 0.000000e+00, ptr %138, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %139) #8
  store double 0.000000e+00, ptr %139, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %140) #8
  store double 0.000000e+00, ptr %140, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %141) #8
  store double 0.000000e+00, ptr %141, align 8, !tbaa !13
  %1945 = icmp sgt i32 %.05043, 0
  br i1 %1945, label %.lr.ph7748, label %._crit_edge7749

.lr.ph7748:                                       ; preds = %1944
  %1946 = icmp sgt i32 %.05042, 0
  %.not6314 = icmp eq ptr %spec.select, null
  %1947 = getelementptr inbounds i8, ptr %0, i64 96
  %1948 = getelementptr inbounds i8, ptr %0, i64 128
  %1949 = getelementptr inbounds i8, ptr %0, i64 136
  %1950 = getelementptr inbounds i8, ptr %0, i64 40
  %1951 = getelementptr inbounds i8, ptr %0, i64 160
  %1952 = getelementptr inbounds i8, ptr %0, i64 168
  %1953 = getelementptr inbounds i8, ptr %0, i64 176
  %1954 = getelementptr inbounds i8, ptr %0, i64 180
  %1955 = getelementptr inbounds i8, ptr %0, i64 48
  %1956 = getelementptr inbounds i8, ptr %0, i64 64
  %1957 = getelementptr inbounds i8, ptr %0, i64 56
  %1958 = getelementptr inbounds i8, ptr %0, i64 80
  %1959 = getelementptr inbounds i8, ptr %0, i64 120
  %1960 = getelementptr inbounds i8, ptr %0, i64 16
  %1961 = sext i32 %.05041 to i64
  %1962 = sext i32 %.05040 to i64
  %wide.trip.count8546 = zext nneg i32 %.05043 to i64
  %wide.trip.count8541 = zext nneg i32 %.05042 to i64
  br label %1963

1963:                                             ; preds = %.lr.ph7748, %2053
  %indvars.iv8543 = phi i64 [ 0, %.lr.ph7748 ], [ %indvars.iv.next8544, %2053 ]
  %.052607746 = phi double [ 0.000000e+00, %.lr.ph7748 ], [ %.15261, %2053 ]
  %.052647745 = phi double [ 0.000000e+00, %.lr.ph7748 ], [ %.15265, %2053 ]
  %.052727744 = phi double [ 0.000000e+00, %.lr.ph7748 ], [ %.15273.lcssa, %2053 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %142) #8
  store double 0.000000e+00, ptr %142, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %143) #8
  store double 0.000000e+00, ptr %143, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %144) #8
  store double 0.000000e+00, ptr %144, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %145) #8
  store double 0.000000e+00, ptr %145, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %146) #8
  store double 0.000000e+00, ptr %146, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %147) #8
  store double 0.000000e+00, ptr %147, align 8, !tbaa !13
  br i1 %1946, label %.lr.ph7740, label %._crit_edge7741

.lr.ph7740:                                       ; preds = %1963
  %1964 = mul nsw i64 %indvars.iv8543, %1961
  %1965 = mul nsw i64 %indvars.iv8543, %1962
  %invariant.gep9080 = getelementptr i16, ptr %spec.select, i64 %1964
  %invariant.gep9082 = getelementptr i16, ptr %spec.select6345, i64 %1965
  %1966 = trunc nuw nsw i64 %indvars.iv8543 to i32
  br label %1967

1967:                                             ; preds = %.lr.ph7740, %2044
  %indvars.iv8538 = phi i64 [ 0, %.lr.ph7740 ], [ %indvars.iv.next8539, %2044 ]
  %.152737738 = phi double [ %.052727744, %.lr.ph7740 ], [ %.25274, %2044 ]
  br i1 %.not6314, label %1971, label %1968

1968:                                             ; preds = %1967
  %gep9081 = getelementptr i16, ptr %invariant.gep9080, i64 %indvars.iv8538
  %1969 = load i16, ptr %gep9081, align 2, !tbaa !63
  %1970 = sitofp i16 %1969 to double
  br label %1971

1971:                                             ; preds = %1967, %1968
  %1972 = phi double [ %1970, %1968 ], [ 0.000000e+00, %1967 ]
  %gep9083 = getelementptr i16, ptr %invariant.gep9082, i64 %indvars.iv8538
  %1973 = load i16, ptr %gep9083, align 2, !tbaa !63
  %1974 = sitofp i16 %1973 to double
  %1975 = fcmp oge double %1972, 0.000000e+00
  %1976 = fneg double %1972
  %1977 = select i1 %1975, double %1972, double %1976
  %1978 = fneg double %1974
  %1979 = icmp slt i16 %1973, 0
  %1980 = select i1 %1979, double %1978, double %1974
  %1981 = load double, ptr %542, align 8, !tbaa !10
  %1982 = fcmp ogt double %1981, %1974
  br i1 %1982, label %1983, label %1984

1983:                                             ; preds = %1971
  store double %1974, ptr %542, align 8, !tbaa !10
  br label %1984

1984:                                             ; preds = %1983, %1971
  %1985 = load double, ptr %1947, align 8, !tbaa !16
  %1986 = fcmp olt double %1985, %1974
  br i1 %1986, label %1987, label %1988

1987:                                             ; preds = %1984
  store double %1974, ptr %1947, align 8, !tbaa !16
  br label %1988

1988:                                             ; preds = %1984, %1987
  %1989 = fcmp ogt double %543, %1977
  %1990 = fcmp oeq double %1972, %1974
  %or.cond6380 = select i1 %1989, i1 true, i1 %1990
  br i1 %or.cond6380, label %1991, label %.thread6644

1991:                                             ; preds = %1988
  br i1 %.not6314, label %1998, label %1992

1992:                                             ; preds = %1991
  %1993 = fcmp ogt double %1972, %1974
  br i1 %1993, label %1994, label %1996

1994:                                             ; preds = %1992
  %1995 = fsub double %1972, %1974
  br label %1998

1996:                                             ; preds = %1992
  %1997 = fsub double %1974, %1972
  br label %1998

1998:                                             ; preds = %1991, %1994, %1996
  %1999 = phi double [ %1995, %1994 ], [ %1997, %1996 ], [ 0.000000e+00, %1991 ]
  %2000 = fcmp ugt double %1980, 0.000000e+00
  %2001 = fdiv double %1999, %1980
  %2002 = select i1 %2000, double %2001, double %1977
  %2003 = load double, ptr %1948, align 8, !tbaa !17
  %2004 = fcmp olt double %1972, %2003
  br i1 %2004, label %2005, label %2006

2005:                                             ; preds = %1998
  store double %1972, ptr %1948, align 8, !tbaa !17
  br label %2006

2006:                                             ; preds = %2005, %1998
  %2007 = load double, ptr %1949, align 8, !tbaa !18
  %2008 = fcmp ogt double %1972, %2007
  br i1 %2008, label %2009, label %2010

2009:                                             ; preds = %2006
  store double %1972, ptr %1949, align 8, !tbaa !18
  br label %2010

2010:                                             ; preds = %2009, %2006
  %2011 = load double, ptr %1950, align 8, !tbaa !19
  %2012 = fcmp olt double %2011, %1999
  br i1 %2012, label %2013, label %2015

2013:                                             ; preds = %2010
  store double %1999, ptr %1950, align 8, !tbaa !19
  store double %1974, ptr %1951, align 8, !tbaa !20
  store double %1972, ptr %1952, align 8, !tbaa !21
  %2014 = trunc nuw nsw i64 %indvars.iv8538 to i32
  store i32 %2014, ptr %1953, align 8, !tbaa !22
  store i32 %1966, ptr %1954, align 4, !tbaa !23
  br label %2015

2015:                                             ; preds = %2013, %2010
  %2016 = load double, ptr %1955, align 8, !tbaa !24
  %2017 = fcmp olt double %2016, %2002
  br i1 %2017, label %2018, label %2019

2018:                                             ; preds = %2015
  store double %2002, ptr %1955, align 8, !tbaa !24
  br label %2019

2019:                                             ; preds = %2018, %2015
  %2020 = fmul double %2002, %2002
  %2021 = fcmp ogt double %543, %2020
  br i1 %2021, label %2022, label %2028

2022:                                             ; preds = %2019
  %2023 = fsub double %2020, %.152737738
  %2024 = load double, ptr %1956, align 8, !tbaa !25
  %2025 = fadd double %2023, %2024
  %2026 = fsub double %2025, %2024
  %2027 = fsub double %2026, %2023
  store double %2025, ptr %1956, align 8, !tbaa !25
  br label %2028

2028:                                             ; preds = %2022, %2019
  %.25274 = phi double [ %2027, %2022 ], [ %.152737738, %2019 ]
  %2029 = call double @libxsmm_kahan_sum(double noundef %1980, ptr noundef nonnull %145, ptr noundef nonnull %142)
  %2030 = call double @libxsmm_kahan_sum(double noundef %1977, ptr noundef nonnull %146, ptr noundef nonnull %143)
  %2031 = call double @libxsmm_kahan_sum(double noundef %1999, ptr noundef nonnull %147, ptr noundef nonnull %144)
  %2032 = fmul double %1974, %1974
  %2033 = call double @libxsmm_kahan_sum(double noundef %2032, ptr noundef nonnull %138, ptr noundef nonnull %136)
  %2034 = fmul double %1972, %1972
  %2035 = call double @libxsmm_kahan_sum(double noundef %2034, ptr noundef nonnull %139, ptr noundef nonnull %137)
  %2036 = fmul double %1999, %1999
  %2037 = fcmp ogt double %543, %2036
  br i1 %2037, label %2038, label %2044

2038:                                             ; preds = %2028
  %2039 = call double @libxsmm_kahan_sum(double noundef %2036, ptr noundef nonnull %1957, ptr noundef nonnull %135)
  br label %2044

.thread6644:                                      ; preds = %1988
  %2040 = trunc nuw nsw i64 %indvars.iv8543 to i32
  %2041 = trunc nuw nsw i64 %indvars.iv8538 to i32
  %2042 = fcmp ogt double %543, %1980
  %2043 = select i1 %2042, i32 1, i32 2
  store i32 %2041, ptr %1953, align 8, !tbaa !22
  store i32 %2040, ptr %1954, align 4, !tbaa !23
  store double %1974, ptr %1951, align 8, !tbaa !20
  store double %1972, ptr %1952, align 8, !tbaa !21
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %147) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %146) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %145) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %144) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %143) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %142) #8
  br label %2173

2044:                                             ; preds = %2038, %2028
  %indvars.iv.next8539 = add nuw nsw i64 %indvars.iv8538, 1
  %exitcond8542.not = icmp eq i64 %indvars.iv.next8539, %wide.trip.count8541
  br i1 %exitcond8542.not, label %._crit_edge7741.loopexit, label %1967, !llvm.loop !65

._crit_edge7741.loopexit:                         ; preds = %2044
  %.pre8723 = load double, ptr %145, align 8, !tbaa !13
  br label %._crit_edge7741

._crit_edge7741:                                  ; preds = %._crit_edge7741.loopexit, %1963
  %2045 = phi double [ 0.000000e+00, %1963 ], [ %.pre8723, %._crit_edge7741.loopexit ]
  %.15273.lcssa = phi double [ %.052727744, %1963 ], [ %.25274, %._crit_edge7741.loopexit ]
  %2046 = call double @libxsmm_kahan_sum(double noundef %2045, ptr noundef nonnull %1958, ptr noundef nonnull %140)
  %2047 = load double, ptr %146, align 8, !tbaa !13
  %2048 = call double @libxsmm_kahan_sum(double noundef %2047, ptr noundef nonnull %1959, ptr noundef nonnull %141)
  %2049 = load double, ptr %1960, align 8, !tbaa !28
  %2050 = load double, ptr %147, align 8, !tbaa !13
  %2051 = fcmp olt double %2049, %2050
  br i1 %2051, label %2052, label %2053

2052:                                             ; preds = %._crit_edge7741
  store double %2050, ptr %1960, align 8, !tbaa !28
  br label %2053

2053:                                             ; preds = %2052, %._crit_edge7741
  %2054 = load double, ptr %145, align 8, !tbaa !13
  %2055 = fcmp olt double %.052607746, %2054
  %.15261 = select i1 %2055, double %2054, double %.052607746
  %2056 = load double, ptr %146, align 8, !tbaa !13
  %2057 = fcmp olt double %.052647745, %2056
  %.15265 = select i1 %2057, double %2056, double %.052647745
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %147) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %146) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %145) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %144) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %143) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %142) #8
  %indvars.iv.next8544 = add nuw nsw i64 %indvars.iv8543, 1
  %exitcond8547.not = icmp eq i64 %indvars.iv.next8544, %wide.trip.count8546
  br i1 %exitcond8547.not, label %._crit_edge7749, label %1963, !llvm.loop !66

._crit_edge7749:                                  ; preds = %2053, %1944
  %.05264.lcssa = phi double [ 0.000000e+00, %1944 ], [ %.15265, %2053 ]
  %.05260.lcssa = phi double [ 0.000000e+00, %1944 ], [ %.15261, %2053 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %148) #8
  store double 0.000000e+00, ptr %148, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %149) #8
  store double 0.000000e+00, ptr %149, align 8, !tbaa !13
  %2058 = getelementptr inbounds i8, ptr %0, i64 112
  %2059 = load double, ptr %2058, align 8, !tbaa !30
  %2060 = fcmp oeq double %2059, 0.000000e+00
  br i1 %2060, label %2062, label %2061

2061:                                             ; preds = %._crit_edge7749
  call void @__assert_fail(ptr noundef nonnull @.str.1, ptr noundef nonnull @.str.2, i32 noundef 130, ptr noundef nonnull @__PRETTY_FUNCTION__.libxsmm_matdiff) #10
  unreachable

2062:                                             ; preds = %._crit_edge7749
  %2063 = getelementptr inbounds i8, ptr %0, i64 152
  %2064 = load double, ptr %2063, align 8, !tbaa !31
  %2065 = fcmp oeq double %2064, 0.000000e+00
  br i1 %2065, label %2067, label %2066

2066:                                             ; preds = %2062
  call void @__assert_fail(ptr noundef nonnull @.str.3, ptr noundef nonnull @.str.2, i32 noundef 131, ptr noundef nonnull @__PRETTY_FUNCTION__.libxsmm_matdiff) #10
  unreachable

2067:                                             ; preds = %2062
  %.not6315 = icmp eq i64 %538, 0
  br i1 %.not6315, label %2078, label %2068

2068:                                             ; preds = %2067
  %2069 = getelementptr inbounds i8, ptr %0, i64 80
  %2070 = load double, ptr %2069, align 8, !tbaa !32
  %2071 = uitofp i64 %538 to double
  %2072 = fdiv double %2070, %2071
  %2073 = getelementptr inbounds i8, ptr %0, i64 104
  store double %2072, ptr %2073, align 8, !tbaa !33
  %2074 = getelementptr inbounds i8, ptr %0, i64 120
  %2075 = load double, ptr %2074, align 8, !tbaa !34
  %2076 = fdiv double %2075, %2071
  %2077 = getelementptr inbounds i8, ptr %0, i64 144
  store double %2076, ptr %2077, align 8, !tbaa !35
  br label %2078

2078:                                             ; preds = %2068, %2067
  %2079 = fcmp ugt double %.05260.lcssa, 0.000000e+00
  br i1 %2079, label %2080, label %2086

2080:                                             ; preds = %2078
  %2081 = getelementptr inbounds i8, ptr %0, i64 16
  %2082 = load double, ptr %2081, align 8, !tbaa !28
  %2083 = fcmp ogt double %.05260.lcssa, 0.000000e+00
  %2084 = select i1 %2083, double %.05260.lcssa, double 1.000000e+00
  %2085 = fdiv double %2082, %2084
  br label %2086

2086:                                             ; preds = %2078, %2080
  %2087 = phi double [ %2085, %2080 ], [ %.05264.lcssa, %2078 ]
  %2088 = getelementptr inbounds i8, ptr %0, i64 24
  store double %2087, ptr %2088, align 8, !tbaa !36
  %2089 = load double, ptr %138, align 8
  %2090 = fcmp ugt double %2089, 0.000000e+00
  br i1 %2090, label %2097, label %2091

2091:                                             ; preds = %2086
  %2092 = load double, ptr %139, align 8, !tbaa !13
  %2093 = fmul double %2092, %2092
  %2094 = getelementptr inbounds i8, ptr %0, i64 56
  %2095 = load double, ptr %2094, align 8, !tbaa !37
  %2096 = fcmp olt double %2093, %2095
  %.6385 = select i1 %2096, double %2093, double %2095
  br label %2103

2097:                                             ; preds = %2086
  %2098 = getelementptr inbounds i8, ptr %0, i64 56
  %2099 = load double, ptr %2098, align 8, !tbaa !37
  %2100 = fcmp ogt double %2089, 0.000000e+00
  %2101 = select i1 %2100, double %2089, double 1.000000e+00
  %2102 = fdiv double %2099, %2101
  br label %2103

2103:                                             ; preds = %2091, %2097
  %2104 = phi double [ %2102, %2097 ], [ %.6385, %2091 ]
  %2105 = getelementptr inbounds i8, ptr %0, i64 32
  store double %2104, ptr %2105, align 8, !tbaa !38
  %2106 = icmp sgt i32 %.05042, 0
  br i1 %2106, label %.lr.ph7761, label %._crit_edge7762.thread

.lr.ph7761:                                       ; preds = %2103
  %.not6316 = icmp eq ptr %spec.select, null
  %2107 = getelementptr inbounds i8, ptr %0, i64 104
  %2108 = getelementptr inbounds i8, ptr %0, i64 144
  %2109 = sext i32 %.05040 to i64
  %2110 = sext i32 %.05041 to i64
  %wide.trip.count8561 = zext nneg i32 %.05042 to i64
  %wide.trip.count8551 = zext nneg i32 %.05043 to i64
  %wide.trip.count8556 = zext nneg i32 %.05043 to i64
  br label %2111

2111:                                             ; preds = %.lr.ph7761, %2160
  %indvars.iv8558 = phi i64 [ 0, %.lr.ph7761 ], [ %indvars.iv.next8559, %2160 ]
  %.052687759 = phi double [ 0.000000e+00, %.lr.ph7761 ], [ %.15269, %2160 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %150) #8
  store double 0.000000e+00, ptr %150, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %151) #8
  store double 0.000000e+00, ptr %151, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %152) #8
  store double 0.000000e+00, ptr %152, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %153) #8
  store double 0.000000e+00, ptr %153, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %154) #8
  store double 0.000000e+00, ptr %154, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %155) #8
  store double 0.000000e+00, ptr %155, align 8, !tbaa !13
  br i1 %1945, label %.lr.ph7754, label %._crit_edge7755

.lr.ph7754:                                       ; preds = %2111
  %invariant.gep9088 = getelementptr i16, ptr %spec.select6345, i64 %indvars.iv8558
  br i1 %.not6316, label %.thread6660.us, label %.lr.ph7754.split.preheader

.lr.ph7754.split.preheader:                       ; preds = %.lr.ph7754
  %invariant.gep9086 = getelementptr i16, ptr %spec.select, i64 %indvars.iv8558
  br label %.lr.ph7754.split

.thread6660.us:                                   ; preds = %.lr.ph7754, %.thread6660.us
  %indvars.iv8553 = phi i64 [ %indvars.iv.next8554, %.thread6660.us ], [ 0, %.lr.ph7754 ]
  %2112 = mul nsw i64 %indvars.iv8553, %2109
  %gep9089 = getelementptr i16, ptr %invariant.gep9088, i64 %2112
  %2113 = load i16, ptr %gep9089, align 2, !tbaa !63
  %2114 = sitofp i16 %2113 to double
  %2115 = load double, ptr %2107, align 8, !tbaa !33
  %2116 = fsub double %2114, %2115
  %2117 = load double, ptr %2108, align 8, !tbaa !35
  %2118 = fsub double 0.000000e+00, %2117
  %2119 = fneg double %2114
  %2120 = icmp slt i16 %2113, 0
  %2121 = select i1 %2120, double %2119, double %2114
  %2122 = fmul double %2116, %2116
  %2123 = call double @libxsmm_kahan_sum(double noundef %2122, ptr noundef nonnull %2058, ptr noundef nonnull %148)
  %2124 = fmul double %2118, %2118
  %2125 = call double @libxsmm_kahan_sum(double noundef %2124, ptr noundef nonnull %2063, ptr noundef nonnull %149)
  %2126 = call double @libxsmm_kahan_sum(double noundef %2121, ptr noundef nonnull %153, ptr noundef nonnull %150)
  %2127 = call double @libxsmm_kahan_sum(double noundef 0.000000e+00, ptr noundef nonnull %154, ptr noundef nonnull %151)
  %2128 = call double @libxsmm_kahan_sum(double noundef 0.000000e+00, ptr noundef nonnull %155, ptr noundef nonnull %152)
  %indvars.iv.next8554 = add nuw nsw i64 %indvars.iv8553, 1
  %exitcond8557.not = icmp eq i64 %indvars.iv.next8554, %wide.trip.count8556
  br i1 %exitcond8557.not, label %._crit_edge7755, label %.thread6660.us, !llvm.loop !67

.lr.ph7754.split:                                 ; preds = %.lr.ph7754.split.preheader, %.lr.ph7754.split
  %indvars.iv8548 = phi i64 [ 0, %.lr.ph7754.split.preheader ], [ %indvars.iv.next8549, %.lr.ph7754.split ]
  %2129 = mul nsw i64 %indvars.iv8548, %2109
  %gep9085 = getelementptr i16, ptr %invariant.gep9088, i64 %2129
  %2130 = load i16, ptr %gep9085, align 2, !tbaa !63
  %2131 = sitofp i16 %2130 to double
  %2132 = mul nsw i64 %indvars.iv8548, %2110
  %gep9087 = getelementptr i16, ptr %invariant.gep9086, i64 %2132
  %2133 = load i16, ptr %gep9087, align 2, !tbaa !63
  %2134 = sitofp i16 %2133 to double
  %2135 = fcmp ogt double %2134, %2131
  %2136 = fsub double %2134, %2131
  %2137 = fsub double %2131, %2134
  %2138 = select i1 %2135, double %2136, double %2137
  %2139 = load double, ptr %2107, align 8, !tbaa !33
  %2140 = fsub double %2131, %2139
  %2141 = load double, ptr %2108, align 8, !tbaa !35
  %2142 = fsub double %2134, %2141
  %2143 = fneg double %2131
  %2144 = icmp slt i16 %2130, 0
  %2145 = select i1 %2144, double %2143, double %2131
  %2146 = fneg double %2134
  %2147 = icmp slt i16 %2133, 0
  %2148 = select i1 %2147, double %2146, double %2134
  %2149 = fmul double %2140, %2140
  %2150 = call double @libxsmm_kahan_sum(double noundef %2149, ptr noundef nonnull %2058, ptr noundef nonnull %148)
  %2151 = fmul double %2142, %2142
  %2152 = call double @libxsmm_kahan_sum(double noundef %2151, ptr noundef nonnull %2063, ptr noundef nonnull %149)
  %2153 = call double @libxsmm_kahan_sum(double noundef %2145, ptr noundef nonnull %153, ptr noundef nonnull %150)
  %2154 = call double @libxsmm_kahan_sum(double noundef %2148, ptr noundef nonnull %154, ptr noundef nonnull %151)
  %2155 = call double @libxsmm_kahan_sum(double noundef %2138, ptr noundef nonnull %155, ptr noundef nonnull %152)
  %indvars.iv.next8549 = add nuw nsw i64 %indvars.iv8548, 1
  %exitcond8552.not = icmp eq i64 %indvars.iv.next8549, %wide.trip.count8551
  br i1 %exitcond8552.not, label %._crit_edge7755, label %.lr.ph7754.split, !llvm.loop !67

._crit_edge7755:                                  ; preds = %.lr.ph7754.split, %.thread6660.us, %2111
  %2156 = load double, ptr %0, align 8, !tbaa !40
  %2157 = load double, ptr %155, align 8, !tbaa !13
  %2158 = fcmp olt double %2156, %2157
  br i1 %2158, label %2159, label %2160

2159:                                             ; preds = %._crit_edge7755
  store double %2157, ptr %0, align 8, !tbaa !40
  br label %2160

2160:                                             ; preds = %2159, %._crit_edge7755
  %2161 = load double, ptr %153, align 8, !tbaa !13
  %2162 = fcmp olt double %.052687759, %2161
  %.15269 = select i1 %2162, double %2161, double %.052687759
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %155) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %154) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %153) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %152) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %151) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %150) #8
  %indvars.iv.next8559 = add nuw nsw i64 %indvars.iv8558, 1
  %exitcond8562.not = icmp eq i64 %indvars.iv.next8559, %wide.trip.count8561
  br i1 %exitcond8562.not, label %._crit_edge7762, label %2111, !llvm.loop !68

._crit_edge7762:                                  ; preds = %2160
  %2163 = fcmp ugt double %.15269, 0.000000e+00
  br i1 %2163, label %2165, label %._crit_edge7762.thread

._crit_edge7762.thread:                           ; preds = %2103, %._crit_edge7762
  %2164 = load double, ptr %0, align 8, !tbaa !40
  br label %2170

2165:                                             ; preds = %._crit_edge7762
  %2166 = load double, ptr %0, align 8, !tbaa !40
  %2167 = fcmp ogt double %.15269, 0.000000e+00
  %2168 = select i1 %2167, double %.15269, double 1.000000e+00
  %2169 = fdiv double %2166, %2168
  br label %2170

2170:                                             ; preds = %2165, %._crit_edge7762.thread
  %2171 = phi double [ %2164, %._crit_edge7762.thread ], [ %2169, %2165 ]
  %2172 = getelementptr inbounds i8, ptr %0, i64 8
  store double %2171, ptr %2172, align 8, !tbaa !42
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %149) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %148) #8
  br label %2173

2173:                                             ; preds = %.thread6644, %2170
  %.346659 = phi i32 [ %2043, %.thread6644 ], [ 0, %2170 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %141) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %140) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %139) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %138) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %137) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %136) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %135) #8
  br label %6314

2174:                                             ; preds = %1942
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %156) #8
  store double 0.000000e+00, ptr %156, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %157) #8
  store double 0.000000e+00, ptr %157, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %158) #8
  store double 0.000000e+00, ptr %158, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %159) #8
  store double 0.000000e+00, ptr %159, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %160) #8
  store double 0.000000e+00, ptr %160, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %161) #8
  store double 0.000000e+00, ptr %161, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %162) #8
  store double 0.000000e+00, ptr %162, align 8, !tbaa !13
  %2175 = sext i32 %.05042 to i64
  %2176 = sext i32 %.05043 to i64
  %2177 = mul nsw i64 %2175, %2176
  %2178 = tail call i64 @libxsmm_coprime2(i64 noundef %2177)
  %2179 = icmp sgt i32 %.05043, 0
  br i1 %2179, label %.lr.ph7722, label %._crit_edge7723

.lr.ph7722:                                       ; preds = %2174
  %2180 = icmp sgt i32 %.05042, 0
  %.not6311 = icmp eq ptr %spec.select, null
  %2181 = getelementptr inbounds i8, ptr %0, i64 96
  %2182 = getelementptr inbounds i8, ptr %0, i64 128
  %2183 = getelementptr inbounds i8, ptr %0, i64 136
  %2184 = getelementptr inbounds i8, ptr %0, i64 40
  %2185 = getelementptr inbounds i8, ptr %0, i64 160
  %2186 = getelementptr inbounds i8, ptr %0, i64 168
  %2187 = getelementptr inbounds i8, ptr %0, i64 176
  %2188 = getelementptr inbounds i8, ptr %0, i64 180
  %2189 = getelementptr inbounds i8, ptr %0, i64 48
  %2190 = getelementptr inbounds i8, ptr %0, i64 64
  %2191 = getelementptr inbounds i8, ptr %0, i64 56
  %2192 = getelementptr inbounds i8, ptr %0, i64 80
  %2193 = getelementptr inbounds i8, ptr %0, i64 120
  %2194 = getelementptr inbounds i8, ptr %0, i64 16
  %2195 = zext i32 %.05042 to i64
  %wide.trip.count8526 = zext nneg i32 %.05043 to i64
  br label %2196

2196:                                             ; preds = %.lr.ph7722, %2296
  %indvars.iv8523 = phi i64 [ 0, %.lr.ph7722 ], [ %indvars.iv.next8524, %2296 ]
  %.052857720 = phi double [ 0.000000e+00, %.lr.ph7722 ], [ %.15286, %2296 ]
  %.052897719 = phi double [ 0.000000e+00, %.lr.ph7722 ], [ %.15290, %2296 ]
  %.053147718 = phi double [ 0.000000e+00, %.lr.ph7722 ], [ %.15315.lcssa, %2296 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %163) #8
  store double 0.000000e+00, ptr %163, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %164) #8
  store double 0.000000e+00, ptr %164, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %165) #8
  store double 0.000000e+00, ptr %165, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %166) #8
  store double 0.000000e+00, ptr %166, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %167) #8
  store double 0.000000e+00, ptr %167, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %168) #8
  store double 0.000000e+00, ptr %168, align 8, !tbaa !13
  br i1 %2180, label %.lr.ph7714, label %._crit_edge7715

.lr.ph7714:                                       ; preds = %2196
  %2197 = mul nuw nsw i64 %indvars.iv8523, %2195
  br label %2198

2198:                                             ; preds = %.lr.ph7714, %2287
  %indvars.iv8518 = phi i64 [ 0, %.lr.ph7714 ], [ %indvars.iv.next8519, %2287 ]
  %.153157712 = phi double [ %.053147718, %.lr.ph7714 ], [ %.25316, %2287 ]
  %2199 = add nuw nsw i64 %indvars.iv8518, %2197
  %2200 = mul i64 %2178, %2199
  %2201 = urem i64 %2200, %2177
  %2202 = udiv i64 %2201, %2175
  %2203 = trunc i64 %2202 to i32
  %2204 = urem i64 %2201, %2175
  %2205 = trunc nuw i64 %2204 to i32
  br i1 %.not6311, label %2213, label %2206

2206:                                             ; preds = %2198
  %2207 = mul nsw i32 %.05041, %2203
  %2208 = add nsw i32 %2207, %2205
  %2209 = sext i32 %2208 to i64
  %2210 = getelementptr inbounds i16, ptr %spec.select, i64 %2209
  %2211 = load i16, ptr %2210, align 2, !tbaa !63
  %2212 = sitofp i16 %2211 to double
  br label %2213

2213:                                             ; preds = %2198, %2206
  %2214 = phi double [ %2212, %2206 ], [ 0.000000e+00, %2198 ]
  %2215 = mul nsw i32 %.05040, %2203
  %2216 = add nsw i32 %2215, %2205
  %2217 = sext i32 %2216 to i64
  %2218 = getelementptr inbounds i16, ptr %spec.select6345, i64 %2217
  %2219 = load i16, ptr %2218, align 2, !tbaa !63
  %2220 = sitofp i16 %2219 to double
  %2221 = fcmp oge double %2214, 0.000000e+00
  %2222 = fneg double %2214
  %2223 = select i1 %2221, double %2214, double %2222
  %2224 = fneg double %2220
  %2225 = icmp slt i16 %2219, 0
  %2226 = select i1 %2225, double %2224, double %2220
  %2227 = load double, ptr %542, align 8, !tbaa !10
  %2228 = fcmp ogt double %2227, %2220
  br i1 %2228, label %2229, label %2230

2229:                                             ; preds = %2213
  store double %2220, ptr %542, align 8, !tbaa !10
  br label %2230

2230:                                             ; preds = %2229, %2213
  %2231 = load double, ptr %2181, align 8, !tbaa !16
  %2232 = fcmp olt double %2231, %2220
  br i1 %2232, label %2233, label %2234

2233:                                             ; preds = %2230
  store double %2220, ptr %2181, align 8, !tbaa !16
  br label %2234

2234:                                             ; preds = %2230, %2233
  %2235 = fcmp ogt double %543, %2223
  %2236 = fcmp oeq double %2214, %2220
  %or.cond6386 = select i1 %2235, i1 true, i1 %2236
  br i1 %or.cond6386, label %2237, label %.thread6669

2237:                                             ; preds = %2234
  br i1 %.not6311, label %2244, label %2238

2238:                                             ; preds = %2237
  %2239 = fcmp ogt double %2214, %2220
  br i1 %2239, label %2240, label %2242

2240:                                             ; preds = %2238
  %2241 = fsub double %2214, %2220
  br label %2244

2242:                                             ; preds = %2238
  %2243 = fsub double %2220, %2214
  br label %2244

2244:                                             ; preds = %2237, %2240, %2242
  %2245 = phi double [ %2241, %2240 ], [ %2243, %2242 ], [ 0.000000e+00, %2237 ]
  %2246 = fcmp ugt double %2226, 0.000000e+00
  %2247 = fdiv double %2245, %2226
  %2248 = select i1 %2246, double %2247, double %2223
  %2249 = load double, ptr %2182, align 8, !tbaa !17
  %2250 = fcmp olt double %2214, %2249
  br i1 %2250, label %2251, label %2252

2251:                                             ; preds = %2244
  store double %2214, ptr %2182, align 8, !tbaa !17
  br label %2252

2252:                                             ; preds = %2251, %2244
  %2253 = load double, ptr %2183, align 8, !tbaa !18
  %2254 = fcmp ogt double %2214, %2253
  br i1 %2254, label %2255, label %2256

2255:                                             ; preds = %2252
  store double %2214, ptr %2183, align 8, !tbaa !18
  br label %2256

2256:                                             ; preds = %2255, %2252
  %2257 = load double, ptr %2184, align 8, !tbaa !19
  %2258 = fcmp olt double %2257, %2245
  br i1 %2258, label %2259, label %2260

2259:                                             ; preds = %2256
  store double %2245, ptr %2184, align 8, !tbaa !19
  store double %2220, ptr %2185, align 8, !tbaa !20
  store double %2214, ptr %2186, align 8, !tbaa !21
  store i32 %2205, ptr %2187, align 8, !tbaa !22
  store i32 %2203, ptr %2188, align 4, !tbaa !23
  br label %2260

2260:                                             ; preds = %2259, %2256
  %2261 = load double, ptr %2189, align 8, !tbaa !24
  %2262 = fcmp olt double %2261, %2248
  br i1 %2262, label %2263, label %2264

2263:                                             ; preds = %2260
  store double %2248, ptr %2189, align 8, !tbaa !24
  br label %2264

2264:                                             ; preds = %2263, %2260
  %2265 = fmul double %2248, %2248
  %2266 = fcmp ogt double %543, %2265
  br i1 %2266, label %2267, label %2273

2267:                                             ; preds = %2264
  %2268 = fsub double %2265, %.153157712
  %2269 = load double, ptr %2190, align 8, !tbaa !25
  %2270 = fadd double %2268, %2269
  %2271 = fsub double %2270, %2269
  %2272 = fsub double %2271, %2268
  store double %2270, ptr %2190, align 8, !tbaa !25
  br label %2273

2273:                                             ; preds = %2267, %2264
  %.25316 = phi double [ %2272, %2267 ], [ %.153157712, %2264 ]
  %2274 = call double @libxsmm_kahan_sum(double noundef %2226, ptr noundef nonnull %166, ptr noundef nonnull %163)
  %2275 = call double @libxsmm_kahan_sum(double noundef %2223, ptr noundef nonnull %167, ptr noundef nonnull %164)
  %2276 = call double @libxsmm_kahan_sum(double noundef %2245, ptr noundef nonnull %168, ptr noundef nonnull %165)
  %2277 = fmul double %2220, %2220
  %2278 = call double @libxsmm_kahan_sum(double noundef %2277, ptr noundef nonnull %159, ptr noundef nonnull %157)
  %2279 = fmul double %2214, %2214
  %2280 = call double @libxsmm_kahan_sum(double noundef %2279, ptr noundef nonnull %160, ptr noundef nonnull %158)
  %2281 = fmul double %2245, %2245
  %2282 = fcmp ogt double %543, %2281
  br i1 %2282, label %2283, label %2287

2283:                                             ; preds = %2273
  %2284 = call double @libxsmm_kahan_sum(double noundef %2281, ptr noundef nonnull %2191, ptr noundef nonnull %156)
  br label %2287

.thread6669:                                      ; preds = %2234
  %2285 = fcmp ogt double %543, %2226
  %2286 = select i1 %2285, i32 1, i32 2
  store i32 %2205, ptr %2187, align 8, !tbaa !22
  store i32 %2203, ptr %2188, align 4, !tbaa !23
  store double %2220, ptr %2185, align 8, !tbaa !20
  store double %2214, ptr %2186, align 8, !tbaa !21
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %168) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %167) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %166) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %165) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %164) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %163) #8
  br label %2416

2287:                                             ; preds = %2283, %2273
  %indvars.iv.next8519 = add nuw nsw i64 %indvars.iv8518, 1
  %exitcond8522.not = icmp eq i64 %indvars.iv.next8519, %2195
  br i1 %exitcond8522.not, label %._crit_edge7715.loopexit, label %2198, !llvm.loop !69

._crit_edge7715.loopexit:                         ; preds = %2287
  %.pre8721 = load double, ptr %166, align 8, !tbaa !13
  br label %._crit_edge7715

._crit_edge7715:                                  ; preds = %._crit_edge7715.loopexit, %2196
  %2288 = phi double [ 0.000000e+00, %2196 ], [ %.pre8721, %._crit_edge7715.loopexit ]
  %.15315.lcssa = phi double [ %.053147718, %2196 ], [ %.25316, %._crit_edge7715.loopexit ]
  %2289 = call double @libxsmm_kahan_sum(double noundef %2288, ptr noundef nonnull %2192, ptr noundef nonnull %161)
  %2290 = load double, ptr %167, align 8, !tbaa !13
  %2291 = call double @libxsmm_kahan_sum(double noundef %2290, ptr noundef nonnull %2193, ptr noundef nonnull %162)
  %2292 = load double, ptr %2194, align 8, !tbaa !28
  %2293 = load double, ptr %168, align 8, !tbaa !13
  %2294 = fcmp olt double %2292, %2293
  br i1 %2294, label %2295, label %2296

2295:                                             ; preds = %._crit_edge7715
  store double %2293, ptr %2194, align 8, !tbaa !28
  br label %2296

2296:                                             ; preds = %2295, %._crit_edge7715
  %2297 = load double, ptr %166, align 8, !tbaa !13
  %2298 = fcmp olt double %.052857720, %2297
  %.15286 = select i1 %2298, double %2297, double %.052857720
  %2299 = load double, ptr %167, align 8, !tbaa !13
  %2300 = fcmp olt double %.052897719, %2299
  %.15290 = select i1 %2300, double %2299, double %.052897719
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %168) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %167) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %166) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %165) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %164) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %163) #8
  %indvars.iv.next8524 = add nuw nsw i64 %indvars.iv8523, 1
  %exitcond8527.not = icmp eq i64 %indvars.iv.next8524, %wide.trip.count8526
  br i1 %exitcond8527.not, label %._crit_edge7723, label %2196, !llvm.loop !70

._crit_edge7723:                                  ; preds = %2296, %2174
  %.05289.lcssa = phi double [ 0.000000e+00, %2174 ], [ %.15290, %2296 ]
  %.05285.lcssa = phi double [ 0.000000e+00, %2174 ], [ %.15286, %2296 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %169) #8
  store double 0.000000e+00, ptr %169, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %170) #8
  store double 0.000000e+00, ptr %170, align 8, !tbaa !13
  %2301 = getelementptr inbounds i8, ptr %0, i64 112
  %2302 = load double, ptr %2301, align 8, !tbaa !30
  %2303 = fcmp oeq double %2302, 0.000000e+00
  br i1 %2303, label %2305, label %2304

2304:                                             ; preds = %._crit_edge7723
  call void @__assert_fail(ptr noundef nonnull @.str.1, ptr noundef nonnull @.str.2, i32 noundef 130, ptr noundef nonnull @__PRETTY_FUNCTION__.libxsmm_matdiff) #10
  unreachable

2305:                                             ; preds = %._crit_edge7723
  %2306 = getelementptr inbounds i8, ptr %0, i64 152
  %2307 = load double, ptr %2306, align 8, !tbaa !31
  %2308 = fcmp oeq double %2307, 0.000000e+00
  br i1 %2308, label %2310, label %2309

2309:                                             ; preds = %2305
  call void @__assert_fail(ptr noundef nonnull @.str.3, ptr noundef nonnull @.str.2, i32 noundef 131, ptr noundef nonnull @__PRETTY_FUNCTION__.libxsmm_matdiff) #10
  unreachable

2310:                                             ; preds = %2305
  %.not6312 = icmp eq i64 %538, 0
  br i1 %.not6312, label %2321, label %2311

2311:                                             ; preds = %2310
  %2312 = getelementptr inbounds i8, ptr %0, i64 80
  %2313 = load double, ptr %2312, align 8, !tbaa !32
  %2314 = uitofp i64 %538 to double
  %2315 = fdiv double %2313, %2314
  %2316 = getelementptr inbounds i8, ptr %0, i64 104
  store double %2315, ptr %2316, align 8, !tbaa !33
  %2317 = getelementptr inbounds i8, ptr %0, i64 120
  %2318 = load double, ptr %2317, align 8, !tbaa !34
  %2319 = fdiv double %2318, %2314
  %2320 = getelementptr inbounds i8, ptr %0, i64 144
  store double %2319, ptr %2320, align 8, !tbaa !35
  br label %2321

2321:                                             ; preds = %2311, %2310
  %2322 = fcmp ugt double %.05285.lcssa, 0.000000e+00
  br i1 %2322, label %2323, label %2329

2323:                                             ; preds = %2321
  %2324 = getelementptr inbounds i8, ptr %0, i64 16
  %2325 = load double, ptr %2324, align 8, !tbaa !28
  %2326 = fcmp ogt double %.05285.lcssa, 0.000000e+00
  %2327 = select i1 %2326, double %.05285.lcssa, double 1.000000e+00
  %2328 = fdiv double %2325, %2327
  br label %2329

2329:                                             ; preds = %2321, %2323
  %2330 = phi double [ %2328, %2323 ], [ %.05289.lcssa, %2321 ]
  %2331 = getelementptr inbounds i8, ptr %0, i64 24
  store double %2330, ptr %2331, align 8, !tbaa !36
  %2332 = load double, ptr %159, align 8
  %2333 = fcmp ugt double %2332, 0.000000e+00
  br i1 %2333, label %2340, label %2334

2334:                                             ; preds = %2329
  %2335 = load double, ptr %160, align 8, !tbaa !13
  %2336 = fmul double %2335, %2335
  %2337 = getelementptr inbounds i8, ptr %0, i64 56
  %2338 = load double, ptr %2337, align 8, !tbaa !37
  %2339 = fcmp olt double %2336, %2338
  %.6391 = select i1 %2339, double %2336, double %2338
  br label %2346

2340:                                             ; preds = %2329
  %2341 = getelementptr inbounds i8, ptr %0, i64 56
  %2342 = load double, ptr %2341, align 8, !tbaa !37
  %2343 = fcmp ogt double %2332, 0.000000e+00
  %2344 = select i1 %2343, double %2332, double 1.000000e+00
  %2345 = fdiv double %2342, %2344
  br label %2346

2346:                                             ; preds = %2334, %2340
  %2347 = phi double [ %2345, %2340 ], [ %.6391, %2334 ]
  %2348 = getelementptr inbounds i8, ptr %0, i64 32
  store double %2347, ptr %2348, align 8, !tbaa !38
  %2349 = icmp sgt i32 %.05042, 0
  br i1 %2349, label %.lr.ph7734, label %._crit_edge7735.thread

.lr.ph7734:                                       ; preds = %2346
  %.not6313 = icmp eq ptr %spec.select, null
  %2350 = getelementptr inbounds i8, ptr %0, i64 104
  %2351 = getelementptr inbounds i8, ptr %0, i64 144
  %2352 = zext nneg i32 %.05042 to i64
  %wide.trip.count8531 = zext nneg i32 %.05043 to i64
  br label %2353

2353:                                             ; preds = %.lr.ph7734, %2403
  %indvars.iv8533 = phi i64 [ 0, %.lr.ph7734 ], [ %indvars.iv.next8534, %2403 ]
  %.053107732 = phi double [ 0.000000e+00, %.lr.ph7734 ], [ %.15311, %2403 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %171) #8
  store double 0.000000e+00, ptr %171, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %172) #8
  store double 0.000000e+00, ptr %172, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %173) #8
  store double 0.000000e+00, ptr %173, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %174) #8
  store double 0.000000e+00, ptr %174, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %175) #8
  store double 0.000000e+00, ptr %175, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %176) #8
  store double 0.000000e+00, ptr %176, align 8, !tbaa !13
  br i1 %2179, label %.lr.ph7728, label %._crit_edge7729

.lr.ph7728:                                       ; preds = %2353, %.thread6685
  %indvars.iv8528 = phi i64 [ %indvars.iv.next8529, %.thread6685 ], [ 0, %2353 ]
  %2354 = mul nuw nsw i64 %indvars.iv8528, %2352
  %2355 = add nuw nsw i64 %2354, %indvars.iv8533
  %2356 = mul i64 %2178, %2355
  %2357 = urem i64 %2356, %2177
  %2358 = udiv i64 %2357, %2175
  %2359 = trunc i64 %2358 to i32
  %2360 = urem i64 %2357, %2175
  %2361 = trunc nuw i64 %2360 to i32
  %2362 = mul nsw i32 %.05040, %2359
  %2363 = add nsw i32 %2362, %2361
  %2364 = sext i32 %2363 to i64
  %2365 = getelementptr inbounds i16, ptr %spec.select6345, i64 %2364
  %2366 = load i16, ptr %2365, align 2, !tbaa !63
  %2367 = sitofp i16 %2366 to double
  br i1 %.not6313, label %.thread6685, label %2368

2368:                                             ; preds = %.lr.ph7728
  %2369 = mul nsw i32 %.05041, %2359
  %2370 = add nsw i32 %2369, %2361
  %2371 = sext i32 %2370 to i64
  %2372 = getelementptr inbounds i16, ptr %spec.select, i64 %2371
  %2373 = load i16, ptr %2372, align 2, !tbaa !63
  %2374 = sitofp i16 %2373 to double
  %2375 = fcmp ogt double %2374, %2367
  br i1 %2375, label %2376, label %2378

2376:                                             ; preds = %2368
  %2377 = fsub double %2374, %2367
  br label %.thread6685

2378:                                             ; preds = %2368
  %2379 = fsub double %2367, %2374
  br label %.thread6685

.thread6685:                                      ; preds = %.lr.ph7728, %2376, %2378
  %2380 = phi double [ %2374, %2376 ], [ %2374, %2378 ], [ 0.000000e+00, %.lr.ph7728 ]
  %2381 = phi double [ %2377, %2376 ], [ %2379, %2378 ], [ 0.000000e+00, %.lr.ph7728 ]
  %2382 = load double, ptr %2350, align 8, !tbaa !33
  %2383 = fsub double %2367, %2382
  %2384 = load double, ptr %2351, align 8, !tbaa !35
  %2385 = fsub double %2380, %2384
  %2386 = fneg double %2367
  %2387 = icmp slt i16 %2366, 0
  %2388 = select i1 %2387, double %2386, double %2367
  %2389 = fcmp oge double %2380, 0.000000e+00
  %2390 = fneg double %2380
  %2391 = select i1 %2389, double %2380, double %2390
  %2392 = fmul double %2383, %2383
  %2393 = call double @libxsmm_kahan_sum(double noundef %2392, ptr noundef nonnull %2301, ptr noundef nonnull %169)
  %2394 = fmul double %2385, %2385
  %2395 = call double @libxsmm_kahan_sum(double noundef %2394, ptr noundef nonnull %2306, ptr noundef nonnull %170)
  %2396 = call double @libxsmm_kahan_sum(double noundef %2388, ptr noundef nonnull %174, ptr noundef nonnull %171)
  %2397 = call double @libxsmm_kahan_sum(double noundef %2391, ptr noundef nonnull %175, ptr noundef nonnull %172)
  %2398 = call double @libxsmm_kahan_sum(double noundef %2381, ptr noundef nonnull %176, ptr noundef nonnull %173)
  %indvars.iv.next8529 = add nuw nsw i64 %indvars.iv8528, 1
  %exitcond8532.not = icmp eq i64 %indvars.iv.next8529, %wide.trip.count8531
  br i1 %exitcond8532.not, label %._crit_edge7729.loopexit, label %.lr.ph7728, !llvm.loop !71

._crit_edge7729.loopexit:                         ; preds = %.thread6685
  %.pre8722 = load double, ptr %176, align 8, !tbaa !13
  br label %._crit_edge7729

._crit_edge7729:                                  ; preds = %._crit_edge7729.loopexit, %2353
  %2399 = phi double [ %.pre8722, %._crit_edge7729.loopexit ], [ 0.000000e+00, %2353 ]
  %2400 = load double, ptr %0, align 8, !tbaa !40
  %2401 = fcmp olt double %2400, %2399
  br i1 %2401, label %2402, label %2403

2402:                                             ; preds = %._crit_edge7729
  store double %2399, ptr %0, align 8, !tbaa !40
  br label %2403

2403:                                             ; preds = %2402, %._crit_edge7729
  %2404 = load double, ptr %174, align 8, !tbaa !13
  %2405 = fcmp olt double %.053107732, %2404
  %.15311 = select i1 %2405, double %2404, double %.053107732
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %176) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %175) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %174) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %173) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %172) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %171) #8
  %indvars.iv.next8534 = add nuw nsw i64 %indvars.iv8533, 1
  %exitcond8537.not = icmp eq i64 %indvars.iv.next8534, %2352
  br i1 %exitcond8537.not, label %._crit_edge7735, label %2353, !llvm.loop !72

._crit_edge7735:                                  ; preds = %2403
  %2406 = fcmp ugt double %.15311, 0.000000e+00
  br i1 %2406, label %2408, label %._crit_edge7735.thread

._crit_edge7735.thread:                           ; preds = %2346, %._crit_edge7735
  %2407 = load double, ptr %0, align 8, !tbaa !40
  br label %2413

2408:                                             ; preds = %._crit_edge7735
  %2409 = load double, ptr %0, align 8, !tbaa !40
  %2410 = fcmp ogt double %.15311, 0.000000e+00
  %2411 = select i1 %2410, double %.15311, double 1.000000e+00
  %2412 = fdiv double %2409, %2411
  br label %2413

2413:                                             ; preds = %2408, %._crit_edge7735.thread
  %2414 = phi double [ %2407, %._crit_edge7735.thread ], [ %2412, %2408 ]
  %2415 = getelementptr inbounds i8, ptr %0, i64 8
  store double %2414, ptr %2415, align 8, !tbaa !42
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %170) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %169) #8
  br label %2416

2416:                                             ; preds = %.thread6669, %2413
  %.396684 = phi i32 [ %2286, %.thread6669 ], [ 0, %2413 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %162) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %161) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %160) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %159) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %158) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %157) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %156) #8
  br label %6314

2417:                                             ; preds = %541
  %2418 = icmp eq i32 %535, 0
  br i1 %2418, label %2419, label %2634

2419:                                             ; preds = %2417
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %177) #8
  store double 0.000000e+00, ptr %177, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %178) #8
  store double 0.000000e+00, ptr %178, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %179) #8
  store double 0.000000e+00, ptr %179, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %180) #8
  store double 0.000000e+00, ptr %180, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %181) #8
  store double 0.000000e+00, ptr %181, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %182) #8
  store double 0.000000e+00, ptr %182, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %183) #8
  store double 0.000000e+00, ptr %183, align 8, !tbaa !13
  %2420 = icmp sgt i32 %.05043, 0
  br i1 %2420, label %.lr.ph7695, label %._crit_edge7696

.lr.ph7695:                                       ; preds = %2419
  %2421 = icmp sgt i32 %.05042, 0
  %.not6308 = icmp eq ptr %spec.select, null
  %2422 = getelementptr inbounds i8, ptr %0, i64 96
  %2423 = getelementptr inbounds i8, ptr %0, i64 128
  %2424 = getelementptr inbounds i8, ptr %0, i64 136
  %2425 = getelementptr inbounds i8, ptr %0, i64 40
  %2426 = getelementptr inbounds i8, ptr %0, i64 160
  %2427 = getelementptr inbounds i8, ptr %0, i64 168
  %2428 = getelementptr inbounds i8, ptr %0, i64 176
  %2429 = getelementptr inbounds i8, ptr %0, i64 180
  %2430 = getelementptr inbounds i8, ptr %0, i64 48
  %2431 = getelementptr inbounds i8, ptr %0, i64 64
  %2432 = getelementptr inbounds i8, ptr %0, i64 56
  %2433 = getelementptr inbounds i8, ptr %0, i64 80
  %2434 = getelementptr inbounds i8, ptr %0, i64 120
  %2435 = getelementptr inbounds i8, ptr %0, i64 16
  %2436 = sext i32 %.05041 to i64
  %2437 = sext i32 %.05040 to i64
  %wide.trip.count8501 = zext nneg i32 %.05043 to i64
  %wide.trip.count8496 = zext nneg i32 %.05042 to i64
  br label %2438

2438:                                             ; preds = %.lr.ph7695, %2522
  %indvars.iv8498 = phi i64 [ 0, %.lr.ph7695 ], [ %indvars.iv.next8499, %2522 ]
  %.053237693 = phi double [ 0.000000e+00, %.lr.ph7695 ], [ %.15324, %2522 ]
  %.053277692 = phi double [ 0.000000e+00, %.lr.ph7695 ], [ %.15328, %2522 ]
  %.053357691 = phi double [ 0.000000e+00, %.lr.ph7695 ], [ %.15336.lcssa, %2522 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %184) #8
  store double 0.000000e+00, ptr %184, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %185) #8
  store double 0.000000e+00, ptr %185, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %186) #8
  store double 0.000000e+00, ptr %186, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %187) #8
  store double 0.000000e+00, ptr %187, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %188) #8
  store double 0.000000e+00, ptr %188, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %189) #8
  store double 0.000000e+00, ptr %189, align 8, !tbaa !13
  br i1 %2421, label %.lr.ph7687, label %._crit_edge7688

.lr.ph7687:                                       ; preds = %2438
  %2439 = mul nsw i64 %indvars.iv8498, %2436
  %2440 = mul nsw i64 %indvars.iv8498, %2437
  %invariant.gep9070 = getelementptr i16, ptr %spec.select, i64 %2439
  %invariant.gep9072 = getelementptr i16, ptr %spec.select6345, i64 %2440
  %2441 = trunc nuw nsw i64 %indvars.iv8498 to i32
  br label %2442

2442:                                             ; preds = %.lr.ph7687, %2513
  %indvars.iv8493 = phi i64 [ 0, %.lr.ph7687 ], [ %indvars.iv.next8494, %2513 ]
  %.153367685 = phi double [ %.053357691, %.lr.ph7687 ], [ %.25337, %2513 ]
  br i1 %.not6308, label %2446, label %2443

2443:                                             ; preds = %2442
  %gep9071 = getelementptr i16, ptr %invariant.gep9070, i64 %indvars.iv8493
  %2444 = load i16, ptr %gep9071, align 2, !tbaa !63
  %2445 = uitofp i16 %2444 to double
  br label %2446

2446:                                             ; preds = %2442, %2443
  %2447 = phi double [ %2445, %2443 ], [ 0.000000e+00, %2442 ]
  %gep9073 = getelementptr i16, ptr %invariant.gep9072, i64 %indvars.iv8493
  %2448 = load i16, ptr %gep9073, align 2, !tbaa !63
  %2449 = uitofp i16 %2448 to double
  %2450 = load double, ptr %542, align 8, !tbaa !10
  %2451 = fcmp ogt double %2450, %2449
  br i1 %2451, label %2452, label %2453

2452:                                             ; preds = %2446
  store double %2449, ptr %542, align 8, !tbaa !10
  br label %2453

2453:                                             ; preds = %2452, %2446
  %2454 = load double, ptr %2422, align 8, !tbaa !16
  %2455 = fcmp olt double %2454, %2449
  br i1 %2455, label %2456, label %2457

2456:                                             ; preds = %2453
  store double %2449, ptr %2422, align 8, !tbaa !16
  br label %2457

2457:                                             ; preds = %2453, %2456
  %2458 = fcmp ogt double %543, %2447
  %2459 = fcmp oeq double %2447, %2449
  %or.cond6392 = or i1 %2458, %2459
  br i1 %or.cond6392, label %2460, label %.thread6694

2460:                                             ; preds = %2457
  br i1 %.not6308, label %2467, label %2461

2461:                                             ; preds = %2460
  %2462 = fcmp ogt double %2447, %2449
  br i1 %2462, label %2463, label %2465

2463:                                             ; preds = %2461
  %2464 = fsub double %2447, %2449
  br label %2467

2465:                                             ; preds = %2461
  %2466 = fsub double %2449, %2447
  br label %2467

2467:                                             ; preds = %2460, %2463, %2465
  %2468 = phi double [ %2464, %2463 ], [ %2466, %2465 ], [ 0.000000e+00, %2460 ]
  %2469 = icmp eq i16 %2448, 0
  %2470 = fdiv double %2468, %2449
  %2471 = select i1 %2469, double %2447, double %2470
  %2472 = load double, ptr %2423, align 8, !tbaa !17
  %2473 = fcmp olt double %2447, %2472
  br i1 %2473, label %2474, label %2475

2474:                                             ; preds = %2467
  store double %2447, ptr %2423, align 8, !tbaa !17
  br label %2475

2475:                                             ; preds = %2474, %2467
  %2476 = load double, ptr %2424, align 8, !tbaa !18
  %2477 = fcmp ogt double %2447, %2476
  br i1 %2477, label %2478, label %2479

2478:                                             ; preds = %2475
  store double %2447, ptr %2424, align 8, !tbaa !18
  br label %2479

2479:                                             ; preds = %2478, %2475
  %2480 = load double, ptr %2425, align 8, !tbaa !19
  %2481 = fcmp olt double %2480, %2468
  br i1 %2481, label %2482, label %2484

2482:                                             ; preds = %2479
  store double %2468, ptr %2425, align 8, !tbaa !19
  store double %2449, ptr %2426, align 8, !tbaa !20
  store double %2447, ptr %2427, align 8, !tbaa !21
  %2483 = trunc nuw nsw i64 %indvars.iv8493 to i32
  store i32 %2483, ptr %2428, align 8, !tbaa !22
  store i32 %2441, ptr %2429, align 4, !tbaa !23
  br label %2484

2484:                                             ; preds = %2482, %2479
  %2485 = load double, ptr %2430, align 8, !tbaa !24
  %2486 = fcmp olt double %2485, %2471
  br i1 %2486, label %2487, label %2488

2487:                                             ; preds = %2484
  store double %2471, ptr %2430, align 8, !tbaa !24
  br label %2488

2488:                                             ; preds = %2487, %2484
  %2489 = fmul double %2471, %2471
  %2490 = fcmp ogt double %543, %2489
  br i1 %2490, label %2491, label %2497

2491:                                             ; preds = %2488
  %2492 = fsub double %2489, %.153367685
  %2493 = load double, ptr %2431, align 8, !tbaa !25
  %2494 = fadd double %2492, %2493
  %2495 = fsub double %2494, %2493
  %2496 = fsub double %2495, %2492
  store double %2494, ptr %2431, align 8, !tbaa !25
  br label %2497

2497:                                             ; preds = %2491, %2488
  %.25337 = phi double [ %2496, %2491 ], [ %.153367685, %2488 ]
  %2498 = call double @libxsmm_kahan_sum(double noundef %2449, ptr noundef nonnull %187, ptr noundef nonnull %184)
  %2499 = call double @libxsmm_kahan_sum(double noundef %2447, ptr noundef nonnull %188, ptr noundef nonnull %185)
  %2500 = call double @libxsmm_kahan_sum(double noundef %2468, ptr noundef nonnull %189, ptr noundef nonnull %186)
  %2501 = fmul double %2449, %2449
  %2502 = call double @libxsmm_kahan_sum(double noundef %2501, ptr noundef nonnull %180, ptr noundef nonnull %178)
  %2503 = fmul double %2447, %2447
  %2504 = call double @libxsmm_kahan_sum(double noundef %2503, ptr noundef nonnull %181, ptr noundef nonnull %179)
  %2505 = fmul double %2468, %2468
  %2506 = fcmp ogt double %543, %2505
  br i1 %2506, label %2507, label %2513

2507:                                             ; preds = %2497
  %2508 = call double @libxsmm_kahan_sum(double noundef %2505, ptr noundef nonnull %2432, ptr noundef nonnull %177)
  br label %2513

.thread6694:                                      ; preds = %2457
  %2509 = trunc nuw nsw i64 %indvars.iv8498 to i32
  %2510 = trunc nuw nsw i64 %indvars.iv8493 to i32
  %2511 = fcmp ogt double %543, %2449
  %2512 = select i1 %2511, i32 1, i32 2
  store i32 %2510, ptr %2428, align 8, !tbaa !22
  store i32 %2509, ptr %2429, align 4, !tbaa !23
  store double %2449, ptr %2426, align 8, !tbaa !20
  store double %2447, ptr %2427, align 8, !tbaa !21
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %189) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %188) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %187) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %186) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %185) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %184) #8
  br label %2633

2513:                                             ; preds = %2507, %2497
  %indvars.iv.next8494 = add nuw nsw i64 %indvars.iv8493, 1
  %exitcond8497.not = icmp eq i64 %indvars.iv.next8494, %wide.trip.count8496
  br i1 %exitcond8497.not, label %._crit_edge7688.loopexit, label %2442, !llvm.loop !73

._crit_edge7688.loopexit:                         ; preds = %2513
  %.pre8720 = load double, ptr %187, align 8, !tbaa !13
  br label %._crit_edge7688

._crit_edge7688:                                  ; preds = %._crit_edge7688.loopexit, %2438
  %2514 = phi double [ 0.000000e+00, %2438 ], [ %.pre8720, %._crit_edge7688.loopexit ]
  %.15336.lcssa = phi double [ %.053357691, %2438 ], [ %.25337, %._crit_edge7688.loopexit ]
  %2515 = call double @libxsmm_kahan_sum(double noundef %2514, ptr noundef nonnull %2433, ptr noundef nonnull %182)
  %2516 = load double, ptr %188, align 8, !tbaa !13
  %2517 = call double @libxsmm_kahan_sum(double noundef %2516, ptr noundef nonnull %2434, ptr noundef nonnull %183)
  %2518 = load double, ptr %2435, align 8, !tbaa !28
  %2519 = load double, ptr %189, align 8, !tbaa !13
  %2520 = fcmp olt double %2518, %2519
  br i1 %2520, label %2521, label %2522

2521:                                             ; preds = %._crit_edge7688
  store double %2519, ptr %2435, align 8, !tbaa !28
  br label %2522

2522:                                             ; preds = %2521, %._crit_edge7688
  %2523 = load double, ptr %187, align 8, !tbaa !13
  %2524 = fcmp olt double %.053237693, %2523
  %.15324 = select i1 %2524, double %2523, double %.053237693
  %2525 = load double, ptr %188, align 8, !tbaa !13
  %2526 = fcmp olt double %.053277692, %2525
  %.15328 = select i1 %2526, double %2525, double %.053277692
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %189) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %188) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %187) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %186) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %185) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %184) #8
  %indvars.iv.next8499 = add nuw nsw i64 %indvars.iv8498, 1
  %exitcond8502.not = icmp eq i64 %indvars.iv.next8499, %wide.trip.count8501
  br i1 %exitcond8502.not, label %._crit_edge7696, label %2438, !llvm.loop !74

._crit_edge7696:                                  ; preds = %2522, %2419
  %.05327.lcssa = phi double [ 0.000000e+00, %2419 ], [ %.15328, %2522 ]
  %.05323.lcssa = phi double [ 0.000000e+00, %2419 ], [ %.15324, %2522 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %190) #8
  store double 0.000000e+00, ptr %190, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %191) #8
  store double 0.000000e+00, ptr %191, align 8, !tbaa !13
  %2527 = getelementptr inbounds i8, ptr %0, i64 112
  %2528 = load double, ptr %2527, align 8, !tbaa !30
  %2529 = fcmp oeq double %2528, 0.000000e+00
  br i1 %2529, label %2531, label %2530

2530:                                             ; preds = %._crit_edge7696
  call void @__assert_fail(ptr noundef nonnull @.str.1, ptr noundef nonnull @.str.2, i32 noundef 130, ptr noundef nonnull @__PRETTY_FUNCTION__.libxsmm_matdiff) #10
  unreachable

2531:                                             ; preds = %._crit_edge7696
  %2532 = getelementptr inbounds i8, ptr %0, i64 152
  %2533 = load double, ptr %2532, align 8, !tbaa !31
  %2534 = fcmp oeq double %2533, 0.000000e+00
  br i1 %2534, label %2536, label %2535

2535:                                             ; preds = %2531
  call void @__assert_fail(ptr noundef nonnull @.str.3, ptr noundef nonnull @.str.2, i32 noundef 131, ptr noundef nonnull @__PRETTY_FUNCTION__.libxsmm_matdiff) #10
  unreachable

2536:                                             ; preds = %2531
  %.not6309 = icmp eq i64 %538, 0
  br i1 %.not6309, label %2547, label %2537

2537:                                             ; preds = %2536
  %2538 = getelementptr inbounds i8, ptr %0, i64 80
  %2539 = load double, ptr %2538, align 8, !tbaa !32
  %2540 = uitofp i64 %538 to double
  %2541 = fdiv double %2539, %2540
  %2542 = getelementptr inbounds i8, ptr %0, i64 104
  store double %2541, ptr %2542, align 8, !tbaa !33
  %2543 = getelementptr inbounds i8, ptr %0, i64 120
  %2544 = load double, ptr %2543, align 8, !tbaa !34
  %2545 = fdiv double %2544, %2540
  %2546 = getelementptr inbounds i8, ptr %0, i64 144
  store double %2545, ptr %2546, align 8, !tbaa !35
  br label %2547

2547:                                             ; preds = %2537, %2536
  %2548 = fcmp ugt double %.05323.lcssa, 0.000000e+00
  br i1 %2548, label %2549, label %2555

2549:                                             ; preds = %2547
  %2550 = getelementptr inbounds i8, ptr %0, i64 16
  %2551 = load double, ptr %2550, align 8, !tbaa !28
  %2552 = fcmp ogt double %.05323.lcssa, 0.000000e+00
  %2553 = select i1 %2552, double %.05323.lcssa, double 1.000000e+00
  %2554 = fdiv double %2551, %2553
  br label %2555

2555:                                             ; preds = %2547, %2549
  %2556 = phi double [ %2554, %2549 ], [ %.05327.lcssa, %2547 ]
  %2557 = getelementptr inbounds i8, ptr %0, i64 24
  store double %2556, ptr %2557, align 8, !tbaa !36
  %2558 = load double, ptr %180, align 8
  %2559 = fcmp ugt double %2558, 0.000000e+00
  br i1 %2559, label %2566, label %2560

2560:                                             ; preds = %2555
  %2561 = load double, ptr %181, align 8, !tbaa !13
  %2562 = fmul double %2561, %2561
  %2563 = getelementptr inbounds i8, ptr %0, i64 56
  %2564 = load double, ptr %2563, align 8, !tbaa !37
  %2565 = fcmp olt double %2562, %2564
  %.6397 = select i1 %2565, double %2562, double %2564
  br label %2572

2566:                                             ; preds = %2555
  %2567 = getelementptr inbounds i8, ptr %0, i64 56
  %2568 = load double, ptr %2567, align 8, !tbaa !37
  %2569 = fcmp ogt double %2558, 0.000000e+00
  %2570 = select i1 %2569, double %2558, double 1.000000e+00
  %2571 = fdiv double %2568, %2570
  br label %2572

2572:                                             ; preds = %2560, %2566
  %2573 = phi double [ %2571, %2566 ], [ %.6397, %2560 ]
  %2574 = getelementptr inbounds i8, ptr %0, i64 32
  store double %2573, ptr %2574, align 8, !tbaa !38
  %2575 = icmp sgt i32 %.05042, 0
  br i1 %2575, label %.lr.ph7708, label %._crit_edge7709.thread

.lr.ph7708:                                       ; preds = %2572
  %.not6310 = icmp eq ptr %spec.select, null
  %2576 = getelementptr inbounds i8, ptr %0, i64 104
  %2577 = getelementptr inbounds i8, ptr %0, i64 144
  %2578 = sext i32 %.05040 to i64
  %2579 = sext i32 %.05041 to i64
  %wide.trip.count8516 = zext nneg i32 %.05042 to i64
  %wide.trip.count8506 = zext nneg i32 %.05043 to i64
  %wide.trip.count8511 = zext nneg i32 %.05043 to i64
  br label %2580

2580:                                             ; preds = %.lr.ph7708, %2620
  %indvars.iv8513 = phi i64 [ 0, %.lr.ph7708 ], [ %indvars.iv.next8514, %2620 ]
  %.053317706 = phi double [ 0.000000e+00, %.lr.ph7708 ], [ %.15332, %2620 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %192) #8
  store double 0.000000e+00, ptr %192, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %193) #8
  store double 0.000000e+00, ptr %193, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %194) #8
  store double 0.000000e+00, ptr %194, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %195) #8
  store double 0.000000e+00, ptr %195, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %196) #8
  store double 0.000000e+00, ptr %196, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %197) #8
  store double 0.000000e+00, ptr %197, align 8, !tbaa !13
  br i1 %2420, label %.lr.ph7701, label %._crit_edge7702

.lr.ph7701:                                       ; preds = %2580
  %invariant.gep9078 = getelementptr i16, ptr %spec.select6345, i64 %indvars.iv8513
  br i1 %.not6310, label %.thread6710.us, label %.lr.ph7701.split.preheader

.lr.ph7701.split.preheader:                       ; preds = %.lr.ph7701
  %invariant.gep9076 = getelementptr i16, ptr %spec.select, i64 %indvars.iv8513
  br label %.lr.ph7701.split

.thread6710.us:                                   ; preds = %.lr.ph7701, %.thread6710.us
  %indvars.iv8508 = phi i64 [ %indvars.iv.next8509, %.thread6710.us ], [ 0, %.lr.ph7701 ]
  %2581 = mul nsw i64 %indvars.iv8508, %2578
  %gep9079 = getelementptr i16, ptr %invariant.gep9078, i64 %2581
  %2582 = load i16, ptr %gep9079, align 2, !tbaa !63
  %2583 = uitofp i16 %2582 to double
  %2584 = load double, ptr %2576, align 8, !tbaa !33
  %2585 = fsub double %2583, %2584
  %2586 = load double, ptr %2577, align 8, !tbaa !35
  %2587 = fsub double 0.000000e+00, %2586
  %2588 = fmul double %2585, %2585
  %2589 = call double @libxsmm_kahan_sum(double noundef %2588, ptr noundef nonnull %2527, ptr noundef nonnull %190)
  %2590 = fmul double %2587, %2587
  %2591 = call double @libxsmm_kahan_sum(double noundef %2590, ptr noundef nonnull %2532, ptr noundef nonnull %191)
  %2592 = call double @libxsmm_kahan_sum(double noundef %2583, ptr noundef nonnull %195, ptr noundef nonnull %192)
  %2593 = call double @libxsmm_kahan_sum(double noundef 0.000000e+00, ptr noundef nonnull %196, ptr noundef nonnull %193)
  %2594 = call double @libxsmm_kahan_sum(double noundef 0.000000e+00, ptr noundef nonnull %197, ptr noundef nonnull %194)
  %indvars.iv.next8509 = add nuw nsw i64 %indvars.iv8508, 1
  %exitcond8512.not = icmp eq i64 %indvars.iv.next8509, %wide.trip.count8511
  br i1 %exitcond8512.not, label %._crit_edge7702, label %.thread6710.us, !llvm.loop !75

.lr.ph7701.split:                                 ; preds = %.lr.ph7701.split.preheader, %.lr.ph7701.split
  %indvars.iv8503 = phi i64 [ 0, %.lr.ph7701.split.preheader ], [ %indvars.iv.next8504, %.lr.ph7701.split ]
  %2595 = mul nsw i64 %indvars.iv8503, %2578
  %gep9075 = getelementptr i16, ptr %invariant.gep9078, i64 %2595
  %2596 = load i16, ptr %gep9075, align 2, !tbaa !63
  %2597 = uitofp i16 %2596 to double
  %2598 = mul nsw i64 %indvars.iv8503, %2579
  %gep9077 = getelementptr i16, ptr %invariant.gep9076, i64 %2598
  %2599 = load i16, ptr %gep9077, align 2, !tbaa !63
  %2600 = uitofp i16 %2599 to double
  %2601 = fcmp ogt double %2600, %2597
  %2602 = fsub double %2600, %2597
  %2603 = fsub double %2597, %2600
  %2604 = select i1 %2601, double %2602, double %2603
  %2605 = load double, ptr %2576, align 8, !tbaa !33
  %2606 = fsub double %2597, %2605
  %2607 = load double, ptr %2577, align 8, !tbaa !35
  %2608 = fsub double %2600, %2607
  %2609 = fmul double %2606, %2606
  %2610 = call double @libxsmm_kahan_sum(double noundef %2609, ptr noundef nonnull %2527, ptr noundef nonnull %190)
  %2611 = fmul double %2608, %2608
  %2612 = call double @libxsmm_kahan_sum(double noundef %2611, ptr noundef nonnull %2532, ptr noundef nonnull %191)
  %2613 = call double @libxsmm_kahan_sum(double noundef %2597, ptr noundef nonnull %195, ptr noundef nonnull %192)
  %2614 = call double @libxsmm_kahan_sum(double noundef %2600, ptr noundef nonnull %196, ptr noundef nonnull %193)
  %2615 = call double @libxsmm_kahan_sum(double noundef %2604, ptr noundef nonnull %197, ptr noundef nonnull %194)
  %indvars.iv.next8504 = add nuw nsw i64 %indvars.iv8503, 1
  %exitcond8507.not = icmp eq i64 %indvars.iv.next8504, %wide.trip.count8506
  br i1 %exitcond8507.not, label %._crit_edge7702, label %.lr.ph7701.split, !llvm.loop !75

._crit_edge7702:                                  ; preds = %.lr.ph7701.split, %.thread6710.us, %2580
  %2616 = load double, ptr %0, align 8, !tbaa !40
  %2617 = load double, ptr %197, align 8, !tbaa !13
  %2618 = fcmp olt double %2616, %2617
  br i1 %2618, label %2619, label %2620

2619:                                             ; preds = %._crit_edge7702
  store double %2617, ptr %0, align 8, !tbaa !40
  br label %2620

2620:                                             ; preds = %2619, %._crit_edge7702
  %2621 = load double, ptr %195, align 8, !tbaa !13
  %2622 = fcmp olt double %.053317706, %2621
  %.15332 = select i1 %2622, double %2621, double %.053317706
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %197) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %196) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %195) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %194) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %193) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %192) #8
  %indvars.iv.next8514 = add nuw nsw i64 %indvars.iv8513, 1
  %exitcond8517.not = icmp eq i64 %indvars.iv.next8514, %wide.trip.count8516
  br i1 %exitcond8517.not, label %._crit_edge7709, label %2580, !llvm.loop !76

._crit_edge7709:                                  ; preds = %2620
  %2623 = fcmp ugt double %.15332, 0.000000e+00
  br i1 %2623, label %2625, label %._crit_edge7709.thread

._crit_edge7709.thread:                           ; preds = %2572, %._crit_edge7709
  %2624 = load double, ptr %0, align 8, !tbaa !40
  br label %2630

2625:                                             ; preds = %._crit_edge7709
  %2626 = load double, ptr %0, align 8, !tbaa !40
  %2627 = fcmp ogt double %.15332, 0.000000e+00
  %2628 = select i1 %2627, double %.15332, double 1.000000e+00
  %2629 = fdiv double %2626, %2628
  br label %2630

2630:                                             ; preds = %2625, %._crit_edge7709.thread
  %2631 = phi double [ %2624, %._crit_edge7709.thread ], [ %2629, %2625 ]
  %2632 = getelementptr inbounds i8, ptr %0, i64 8
  store double %2631, ptr %2632, align 8, !tbaa !42
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %191) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %190) #8
  br label %2633

2633:                                             ; preds = %.thread6694, %2630
  %.446709 = phi i32 [ %2512, %.thread6694 ], [ 0, %2630 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %183) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %182) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %181) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %180) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %179) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %178) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %177) #8
  br label %6314

2634:                                             ; preds = %2417
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %198) #8
  store double 0.000000e+00, ptr %198, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %199) #8
  store double 0.000000e+00, ptr %199, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %200) #8
  store double 0.000000e+00, ptr %200, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %201) #8
  store double 0.000000e+00, ptr %201, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %202) #8
  store double 0.000000e+00, ptr %202, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %203) #8
  store double 0.000000e+00, ptr %203, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %204) #8
  store double 0.000000e+00, ptr %204, align 8, !tbaa !13
  %2635 = sext i32 %.05042 to i64
  %2636 = sext i32 %.05043 to i64
  %2637 = mul nsw i64 %2635, %2636
  %2638 = tail call i64 @libxsmm_coprime2(i64 noundef %2637)
  %2639 = icmp sgt i32 %.05043, 0
  br i1 %2639, label %.lr.ph7669, label %._crit_edge7670

.lr.ph7669:                                       ; preds = %2634
  %2640 = icmp sgt i32 %.05042, 0
  %.not6305 = icmp eq ptr %spec.select, null
  %2641 = getelementptr inbounds i8, ptr %0, i64 96
  %2642 = getelementptr inbounds i8, ptr %0, i64 128
  %2643 = getelementptr inbounds i8, ptr %0, i64 136
  %2644 = getelementptr inbounds i8, ptr %0, i64 40
  %2645 = getelementptr inbounds i8, ptr %0, i64 160
  %2646 = getelementptr inbounds i8, ptr %0, i64 168
  %2647 = getelementptr inbounds i8, ptr %0, i64 176
  %2648 = getelementptr inbounds i8, ptr %0, i64 180
  %2649 = getelementptr inbounds i8, ptr %0, i64 48
  %2650 = getelementptr inbounds i8, ptr %0, i64 64
  %2651 = getelementptr inbounds i8, ptr %0, i64 56
  %2652 = getelementptr inbounds i8, ptr %0, i64 80
  %2653 = getelementptr inbounds i8, ptr %0, i64 120
  %2654 = getelementptr inbounds i8, ptr %0, i64 16
  %2655 = zext i32 %.05042 to i64
  %wide.trip.count8481 = zext nneg i32 %.05043 to i64
  br label %2656

2656:                                             ; preds = %.lr.ph7669, %2750
  %indvars.iv8478 = phi i64 [ 0, %.lr.ph7669 ], [ %indvars.iv.next8479, %2750 ]
  %.053447667 = phi double [ 0.000000e+00, %.lr.ph7669 ], [ %.15345, %2750 ]
  %.053487666 = phi double [ 0.000000e+00, %.lr.ph7669 ], [ %.15349, %2750 ]
  %.053567665 = phi double [ 0.000000e+00, %.lr.ph7669 ], [ %.15357.lcssa, %2750 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %205) #8
  store double 0.000000e+00, ptr %205, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %206) #8
  store double 0.000000e+00, ptr %206, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %207) #8
  store double 0.000000e+00, ptr %207, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %208) #8
  store double 0.000000e+00, ptr %208, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %209) #8
  store double 0.000000e+00, ptr %209, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %210) #8
  store double 0.000000e+00, ptr %210, align 8, !tbaa !13
  br i1 %2640, label %.lr.ph7661, label %._crit_edge7662

.lr.ph7661:                                       ; preds = %2656
  %2657 = mul nuw nsw i64 %indvars.iv8478, %2655
  br label %2658

2658:                                             ; preds = %.lr.ph7661, %2741
  %indvars.iv8473 = phi i64 [ 0, %.lr.ph7661 ], [ %indvars.iv.next8474, %2741 ]
  %.153577659 = phi double [ %.053567665, %.lr.ph7661 ], [ %.25358, %2741 ]
  %2659 = add nuw nsw i64 %indvars.iv8473, %2657
  %2660 = mul i64 %2638, %2659
  %2661 = urem i64 %2660, %2637
  %2662 = udiv i64 %2661, %2635
  %2663 = trunc i64 %2662 to i32
  %2664 = urem i64 %2661, %2635
  %2665 = trunc nuw i64 %2664 to i32
  br i1 %.not6305, label %2673, label %2666

2666:                                             ; preds = %2658
  %2667 = mul nsw i32 %.05041, %2663
  %2668 = add nsw i32 %2667, %2665
  %2669 = sext i32 %2668 to i64
  %2670 = getelementptr inbounds i16, ptr %spec.select, i64 %2669
  %2671 = load i16, ptr %2670, align 2, !tbaa !63
  %2672 = uitofp i16 %2671 to double
  br label %2673

2673:                                             ; preds = %2658, %2666
  %2674 = phi double [ %2672, %2666 ], [ 0.000000e+00, %2658 ]
  %2675 = mul nsw i32 %.05040, %2663
  %2676 = add nsw i32 %2675, %2665
  %2677 = sext i32 %2676 to i64
  %2678 = getelementptr inbounds i16, ptr %spec.select6345, i64 %2677
  %2679 = load i16, ptr %2678, align 2, !tbaa !63
  %2680 = uitofp i16 %2679 to double
  %2681 = load double, ptr %542, align 8, !tbaa !10
  %2682 = fcmp ogt double %2681, %2680
  br i1 %2682, label %2683, label %2684

2683:                                             ; preds = %2673
  store double %2680, ptr %542, align 8, !tbaa !10
  br label %2684

2684:                                             ; preds = %2683, %2673
  %2685 = load double, ptr %2641, align 8, !tbaa !16
  %2686 = fcmp olt double %2685, %2680
  br i1 %2686, label %2687, label %2688

2687:                                             ; preds = %2684
  store double %2680, ptr %2641, align 8, !tbaa !16
  br label %2688

2688:                                             ; preds = %2684, %2687
  %2689 = fcmp ogt double %543, %2674
  %2690 = fcmp oeq double %2674, %2680
  %or.cond6398 = or i1 %2689, %2690
  br i1 %or.cond6398, label %2691, label %.thread6719

2691:                                             ; preds = %2688
  br i1 %.not6305, label %2698, label %2692

2692:                                             ; preds = %2691
  %2693 = fcmp ogt double %2674, %2680
  br i1 %2693, label %2694, label %2696

2694:                                             ; preds = %2692
  %2695 = fsub double %2674, %2680
  br label %2698

2696:                                             ; preds = %2692
  %2697 = fsub double %2680, %2674
  br label %2698

2698:                                             ; preds = %2691, %2694, %2696
  %2699 = phi double [ %2695, %2694 ], [ %2697, %2696 ], [ 0.000000e+00, %2691 ]
  %2700 = icmp eq i16 %2679, 0
  %2701 = fdiv double %2699, %2680
  %2702 = select i1 %2700, double %2674, double %2701
  %2703 = load double, ptr %2642, align 8, !tbaa !17
  %2704 = fcmp olt double %2674, %2703
  br i1 %2704, label %2705, label %2706

2705:                                             ; preds = %2698
  store double %2674, ptr %2642, align 8, !tbaa !17
  br label %2706

2706:                                             ; preds = %2705, %2698
  %2707 = load double, ptr %2643, align 8, !tbaa !18
  %2708 = fcmp ogt double %2674, %2707
  br i1 %2708, label %2709, label %2710

2709:                                             ; preds = %2706
  store double %2674, ptr %2643, align 8, !tbaa !18
  br label %2710

2710:                                             ; preds = %2709, %2706
  %2711 = load double, ptr %2644, align 8, !tbaa !19
  %2712 = fcmp olt double %2711, %2699
  br i1 %2712, label %2713, label %2714

2713:                                             ; preds = %2710
  store double %2699, ptr %2644, align 8, !tbaa !19
  store double %2680, ptr %2645, align 8, !tbaa !20
  store double %2674, ptr %2646, align 8, !tbaa !21
  store i32 %2665, ptr %2647, align 8, !tbaa !22
  store i32 %2663, ptr %2648, align 4, !tbaa !23
  br label %2714

2714:                                             ; preds = %2713, %2710
  %2715 = load double, ptr %2649, align 8, !tbaa !24
  %2716 = fcmp olt double %2715, %2702
  br i1 %2716, label %2717, label %2718

2717:                                             ; preds = %2714
  store double %2702, ptr %2649, align 8, !tbaa !24
  br label %2718

2718:                                             ; preds = %2717, %2714
  %2719 = fmul double %2702, %2702
  %2720 = fcmp ogt double %543, %2719
  br i1 %2720, label %2721, label %2727

2721:                                             ; preds = %2718
  %2722 = fsub double %2719, %.153577659
  %2723 = load double, ptr %2650, align 8, !tbaa !25
  %2724 = fadd double %2722, %2723
  %2725 = fsub double %2724, %2723
  %2726 = fsub double %2725, %2722
  store double %2724, ptr %2650, align 8, !tbaa !25
  br label %2727

2727:                                             ; preds = %2721, %2718
  %.25358 = phi double [ %2726, %2721 ], [ %.153577659, %2718 ]
  %2728 = call double @libxsmm_kahan_sum(double noundef %2680, ptr noundef nonnull %208, ptr noundef nonnull %205)
  %2729 = call double @libxsmm_kahan_sum(double noundef %2674, ptr noundef nonnull %209, ptr noundef nonnull %206)
  %2730 = call double @libxsmm_kahan_sum(double noundef %2699, ptr noundef nonnull %210, ptr noundef nonnull %207)
  %2731 = fmul double %2680, %2680
  %2732 = call double @libxsmm_kahan_sum(double noundef %2731, ptr noundef nonnull %201, ptr noundef nonnull %199)
  %2733 = fmul double %2674, %2674
  %2734 = call double @libxsmm_kahan_sum(double noundef %2733, ptr noundef nonnull %202, ptr noundef nonnull %200)
  %2735 = fmul double %2699, %2699
  %2736 = fcmp ogt double %543, %2735
  br i1 %2736, label %2737, label %2741

2737:                                             ; preds = %2727
  %2738 = call double @libxsmm_kahan_sum(double noundef %2735, ptr noundef nonnull %2651, ptr noundef nonnull %198)
  br label %2741

.thread6719:                                      ; preds = %2688
  %2739 = fcmp ogt double %543, %2680
  %2740 = select i1 %2739, i32 1, i32 2
  store i32 %2665, ptr %2647, align 8, !tbaa !22
  store i32 %2663, ptr %2648, align 4, !tbaa !23
  store double %2680, ptr %2645, align 8, !tbaa !20
  store double %2674, ptr %2646, align 8, !tbaa !21
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %210) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %209) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %208) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %207) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %206) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %205) #8
  br label %2864

2741:                                             ; preds = %2737, %2727
  %indvars.iv.next8474 = add nuw nsw i64 %indvars.iv8473, 1
  %exitcond8477.not = icmp eq i64 %indvars.iv.next8474, %2655
  br i1 %exitcond8477.not, label %._crit_edge7662.loopexit, label %2658, !llvm.loop !77

._crit_edge7662.loopexit:                         ; preds = %2741
  %.pre8718 = load double, ptr %208, align 8, !tbaa !13
  br label %._crit_edge7662

._crit_edge7662:                                  ; preds = %._crit_edge7662.loopexit, %2656
  %2742 = phi double [ 0.000000e+00, %2656 ], [ %.pre8718, %._crit_edge7662.loopexit ]
  %.15357.lcssa = phi double [ %.053567665, %2656 ], [ %.25358, %._crit_edge7662.loopexit ]
  %2743 = call double @libxsmm_kahan_sum(double noundef %2742, ptr noundef nonnull %2652, ptr noundef nonnull %203)
  %2744 = load double, ptr %209, align 8, !tbaa !13
  %2745 = call double @libxsmm_kahan_sum(double noundef %2744, ptr noundef nonnull %2653, ptr noundef nonnull %204)
  %2746 = load double, ptr %2654, align 8, !tbaa !28
  %2747 = load double, ptr %210, align 8, !tbaa !13
  %2748 = fcmp olt double %2746, %2747
  br i1 %2748, label %2749, label %2750

2749:                                             ; preds = %._crit_edge7662
  store double %2747, ptr %2654, align 8, !tbaa !28
  br label %2750

2750:                                             ; preds = %2749, %._crit_edge7662
  %2751 = load double, ptr %208, align 8, !tbaa !13
  %2752 = fcmp olt double %.053447667, %2751
  %.15345 = select i1 %2752, double %2751, double %.053447667
  %2753 = load double, ptr %209, align 8, !tbaa !13
  %2754 = fcmp olt double %.053487666, %2753
  %.15349 = select i1 %2754, double %2753, double %.053487666
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %210) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %209) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %208) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %207) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %206) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %205) #8
  %indvars.iv.next8479 = add nuw nsw i64 %indvars.iv8478, 1
  %exitcond8482.not = icmp eq i64 %indvars.iv.next8479, %wide.trip.count8481
  br i1 %exitcond8482.not, label %._crit_edge7670, label %2656, !llvm.loop !78

._crit_edge7670:                                  ; preds = %2750, %2634
  %.05348.lcssa = phi double [ 0.000000e+00, %2634 ], [ %.15349, %2750 ]
  %.05344.lcssa = phi double [ 0.000000e+00, %2634 ], [ %.15345, %2750 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %211) #8
  store double 0.000000e+00, ptr %211, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %212) #8
  store double 0.000000e+00, ptr %212, align 8, !tbaa !13
  %2755 = getelementptr inbounds i8, ptr %0, i64 112
  %2756 = load double, ptr %2755, align 8, !tbaa !30
  %2757 = fcmp oeq double %2756, 0.000000e+00
  br i1 %2757, label %2759, label %2758

2758:                                             ; preds = %._crit_edge7670
  call void @__assert_fail(ptr noundef nonnull @.str.1, ptr noundef nonnull @.str.2, i32 noundef 130, ptr noundef nonnull @__PRETTY_FUNCTION__.libxsmm_matdiff) #10
  unreachable

2759:                                             ; preds = %._crit_edge7670
  %2760 = getelementptr inbounds i8, ptr %0, i64 152
  %2761 = load double, ptr %2760, align 8, !tbaa !31
  %2762 = fcmp oeq double %2761, 0.000000e+00
  br i1 %2762, label %2764, label %2763

2763:                                             ; preds = %2759
  call void @__assert_fail(ptr noundef nonnull @.str.3, ptr noundef nonnull @.str.2, i32 noundef 131, ptr noundef nonnull @__PRETTY_FUNCTION__.libxsmm_matdiff) #10
  unreachable

2764:                                             ; preds = %2759
  %.not6306 = icmp eq i64 %538, 0
  br i1 %.not6306, label %2775, label %2765

2765:                                             ; preds = %2764
  %2766 = getelementptr inbounds i8, ptr %0, i64 80
  %2767 = load double, ptr %2766, align 8, !tbaa !32
  %2768 = uitofp i64 %538 to double
  %2769 = fdiv double %2767, %2768
  %2770 = getelementptr inbounds i8, ptr %0, i64 104
  store double %2769, ptr %2770, align 8, !tbaa !33
  %2771 = getelementptr inbounds i8, ptr %0, i64 120
  %2772 = load double, ptr %2771, align 8, !tbaa !34
  %2773 = fdiv double %2772, %2768
  %2774 = getelementptr inbounds i8, ptr %0, i64 144
  store double %2773, ptr %2774, align 8, !tbaa !35
  br label %2775

2775:                                             ; preds = %2765, %2764
  %2776 = fcmp ugt double %.05344.lcssa, 0.000000e+00
  br i1 %2776, label %2777, label %2783

2777:                                             ; preds = %2775
  %2778 = getelementptr inbounds i8, ptr %0, i64 16
  %2779 = load double, ptr %2778, align 8, !tbaa !28
  %2780 = fcmp ogt double %.05344.lcssa, 0.000000e+00
  %2781 = select i1 %2780, double %.05344.lcssa, double 1.000000e+00
  %2782 = fdiv double %2779, %2781
  br label %2783

2783:                                             ; preds = %2775, %2777
  %2784 = phi double [ %2782, %2777 ], [ %.05348.lcssa, %2775 ]
  %2785 = getelementptr inbounds i8, ptr %0, i64 24
  store double %2784, ptr %2785, align 8, !tbaa !36
  %2786 = load double, ptr %201, align 8
  %2787 = fcmp ugt double %2786, 0.000000e+00
  br i1 %2787, label %2794, label %2788

2788:                                             ; preds = %2783
  %2789 = load double, ptr %202, align 8, !tbaa !13
  %2790 = fmul double %2789, %2789
  %2791 = getelementptr inbounds i8, ptr %0, i64 56
  %2792 = load double, ptr %2791, align 8, !tbaa !37
  %2793 = fcmp olt double %2790, %2792
  %.6403 = select i1 %2793, double %2790, double %2792
  br label %2800

2794:                                             ; preds = %2783
  %2795 = getelementptr inbounds i8, ptr %0, i64 56
  %2796 = load double, ptr %2795, align 8, !tbaa !37
  %2797 = fcmp ogt double %2786, 0.000000e+00
  %2798 = select i1 %2797, double %2786, double 1.000000e+00
  %2799 = fdiv double %2796, %2798
  br label %2800

2800:                                             ; preds = %2788, %2794
  %2801 = phi double [ %2799, %2794 ], [ %.6403, %2788 ]
  %2802 = getelementptr inbounds i8, ptr %0, i64 32
  store double %2801, ptr %2802, align 8, !tbaa !38
  %2803 = icmp sgt i32 %.05042, 0
  br i1 %2803, label %.lr.ph7681, label %._crit_edge7682.thread

.lr.ph7681:                                       ; preds = %2800
  %.not6307 = icmp eq ptr %spec.select, null
  %2804 = getelementptr inbounds i8, ptr %0, i64 104
  %2805 = getelementptr inbounds i8, ptr %0, i64 144
  %2806 = zext nneg i32 %.05042 to i64
  %wide.trip.count8486 = zext nneg i32 %.05043 to i64
  br label %2807

2807:                                             ; preds = %.lr.ph7681, %2851
  %indvars.iv8488 = phi i64 [ 0, %.lr.ph7681 ], [ %indvars.iv.next8489, %2851 ]
  %.053527679 = phi double [ 0.000000e+00, %.lr.ph7681 ], [ %.15353, %2851 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %213) #8
  store double 0.000000e+00, ptr %213, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %214) #8
  store double 0.000000e+00, ptr %214, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %215) #8
  store double 0.000000e+00, ptr %215, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %216) #8
  store double 0.000000e+00, ptr %216, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %217) #8
  store double 0.000000e+00, ptr %217, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %218) #8
  store double 0.000000e+00, ptr %218, align 8, !tbaa !13
  br i1 %2639, label %.lr.ph7675, label %._crit_edge7676

.lr.ph7675:                                       ; preds = %2807, %.thread6735
  %indvars.iv8483 = phi i64 [ %indvars.iv.next8484, %.thread6735 ], [ 0, %2807 ]
  %2808 = mul nuw nsw i64 %indvars.iv8483, %2806
  %2809 = add nuw nsw i64 %2808, %indvars.iv8488
  %2810 = mul i64 %2638, %2809
  %2811 = urem i64 %2810, %2637
  %2812 = udiv i64 %2811, %2635
  %2813 = trunc i64 %2812 to i32
  %2814 = urem i64 %2811, %2635
  %2815 = trunc nuw i64 %2814 to i32
  %2816 = mul nsw i32 %.05040, %2813
  %2817 = add nsw i32 %2816, %2815
  %2818 = sext i32 %2817 to i64
  %2819 = getelementptr inbounds i16, ptr %spec.select6345, i64 %2818
  %2820 = load i16, ptr %2819, align 2, !tbaa !63
  %2821 = uitofp i16 %2820 to double
  br i1 %.not6307, label %.thread6735, label %2822

2822:                                             ; preds = %.lr.ph7675
  %2823 = mul nsw i32 %.05041, %2813
  %2824 = add nsw i32 %2823, %2815
  %2825 = sext i32 %2824 to i64
  %2826 = getelementptr inbounds i16, ptr %spec.select, i64 %2825
  %2827 = load i16, ptr %2826, align 2, !tbaa !63
  %2828 = uitofp i16 %2827 to double
  %2829 = fcmp ogt double %2828, %2821
  br i1 %2829, label %2830, label %2832

2830:                                             ; preds = %2822
  %2831 = fsub double %2828, %2821
  br label %.thread6735

2832:                                             ; preds = %2822
  %2833 = fsub double %2821, %2828
  br label %.thread6735

.thread6735:                                      ; preds = %.lr.ph7675, %2830, %2832
  %2834 = phi double [ %2828, %2830 ], [ %2828, %2832 ], [ 0.000000e+00, %.lr.ph7675 ]
  %2835 = phi double [ %2831, %2830 ], [ %2833, %2832 ], [ 0.000000e+00, %.lr.ph7675 ]
  %2836 = load double, ptr %2804, align 8, !tbaa !33
  %2837 = fsub double %2821, %2836
  %2838 = load double, ptr %2805, align 8, !tbaa !35
  %2839 = fsub double %2834, %2838
  %2840 = fmul double %2837, %2837
  %2841 = call double @libxsmm_kahan_sum(double noundef %2840, ptr noundef nonnull %2755, ptr noundef nonnull %211)
  %2842 = fmul double %2839, %2839
  %2843 = call double @libxsmm_kahan_sum(double noundef %2842, ptr noundef nonnull %2760, ptr noundef nonnull %212)
  %2844 = call double @libxsmm_kahan_sum(double noundef %2821, ptr noundef nonnull %216, ptr noundef nonnull %213)
  %2845 = call double @libxsmm_kahan_sum(double noundef %2834, ptr noundef nonnull %217, ptr noundef nonnull %214)
  %2846 = call double @libxsmm_kahan_sum(double noundef %2835, ptr noundef nonnull %218, ptr noundef nonnull %215)
  %indvars.iv.next8484 = add nuw nsw i64 %indvars.iv8483, 1
  %exitcond8487.not = icmp eq i64 %indvars.iv.next8484, %wide.trip.count8486
  br i1 %exitcond8487.not, label %._crit_edge7676.loopexit, label %.lr.ph7675, !llvm.loop !79

._crit_edge7676.loopexit:                         ; preds = %.thread6735
  %.pre8719 = load double, ptr %218, align 8, !tbaa !13
  br label %._crit_edge7676

._crit_edge7676:                                  ; preds = %._crit_edge7676.loopexit, %2807
  %2847 = phi double [ %.pre8719, %._crit_edge7676.loopexit ], [ 0.000000e+00, %2807 ]
  %2848 = load double, ptr %0, align 8, !tbaa !40
  %2849 = fcmp olt double %2848, %2847
  br i1 %2849, label %2850, label %2851

2850:                                             ; preds = %._crit_edge7676
  store double %2847, ptr %0, align 8, !tbaa !40
  br label %2851

2851:                                             ; preds = %2850, %._crit_edge7676
  %2852 = load double, ptr %216, align 8, !tbaa !13
  %2853 = fcmp olt double %.053527679, %2852
  %.15353 = select i1 %2853, double %2852, double %.053527679
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %218) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %217) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %216) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %215) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %214) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %213) #8
  %indvars.iv.next8489 = add nuw nsw i64 %indvars.iv8488, 1
  %exitcond8492.not = icmp eq i64 %indvars.iv.next8489, %2806
  br i1 %exitcond8492.not, label %._crit_edge7682, label %2807, !llvm.loop !80

._crit_edge7682:                                  ; preds = %2851
  %2854 = fcmp ugt double %.15353, 0.000000e+00
  br i1 %2854, label %2856, label %._crit_edge7682.thread

._crit_edge7682.thread:                           ; preds = %2800, %._crit_edge7682
  %2855 = load double, ptr %0, align 8, !tbaa !40
  br label %2861

2856:                                             ; preds = %._crit_edge7682
  %2857 = load double, ptr %0, align 8, !tbaa !40
  %2858 = fcmp ogt double %.15353, 0.000000e+00
  %2859 = select i1 %2858, double %.15353, double 1.000000e+00
  %2860 = fdiv double %2857, %2859
  br label %2861

2861:                                             ; preds = %2856, %._crit_edge7682.thread
  %2862 = phi double [ %2855, %._crit_edge7682.thread ], [ %2860, %2856 ]
  %2863 = getelementptr inbounds i8, ptr %0, i64 8
  store double %2862, ptr %2863, align 8, !tbaa !42
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %212) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %211) #8
  br label %2864

2864:                                             ; preds = %.thread6719, %2861
  %.496734 = phi i32 [ %2740, %.thread6719 ], [ 0, %2861 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %204) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %203) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %202) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %201) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %200) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %199) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %198) #8
  br label %6314

2865:                                             ; preds = %541
  %2866 = icmp eq i32 %535, 0
  br i1 %2866, label %2867, label %3097

2867:                                             ; preds = %2865
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %219) #8
  store double 0.000000e+00, ptr %219, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %220) #8
  store double 0.000000e+00, ptr %220, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %221) #8
  store double 0.000000e+00, ptr %221, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %222) #8
  store double 0.000000e+00, ptr %222, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %223) #8
  store double 0.000000e+00, ptr %223, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %224) #8
  store double 0.000000e+00, ptr %224, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %225) #8
  store double 0.000000e+00, ptr %225, align 8, !tbaa !13
  %2868 = icmp sgt i32 %.05043, 0
  br i1 %2868, label %.lr.ph7642, label %._crit_edge7643

.lr.ph7642:                                       ; preds = %2867
  %2869 = icmp sgt i32 %.05042, 0
  %.not6302 = icmp eq ptr %spec.select, null
  %2870 = getelementptr inbounds i8, ptr %0, i64 96
  %2871 = getelementptr inbounds i8, ptr %0, i64 128
  %2872 = getelementptr inbounds i8, ptr %0, i64 136
  %2873 = getelementptr inbounds i8, ptr %0, i64 40
  %2874 = getelementptr inbounds i8, ptr %0, i64 160
  %2875 = getelementptr inbounds i8, ptr %0, i64 168
  %2876 = getelementptr inbounds i8, ptr %0, i64 176
  %2877 = getelementptr inbounds i8, ptr %0, i64 180
  %2878 = getelementptr inbounds i8, ptr %0, i64 48
  %2879 = getelementptr inbounds i8, ptr %0, i64 64
  %2880 = getelementptr inbounds i8, ptr %0, i64 56
  %2881 = getelementptr inbounds i8, ptr %0, i64 80
  %2882 = getelementptr inbounds i8, ptr %0, i64 120
  %2883 = getelementptr inbounds i8, ptr %0, i64 16
  %2884 = sext i32 %.05041 to i64
  %2885 = sext i32 %.05040 to i64
  %wide.trip.count8456 = zext nneg i32 %.05043 to i64
  %wide.trip.count8451 = zext nneg i32 %.05042 to i64
  br label %2886

2886:                                             ; preds = %.lr.ph7642, %2976
  %indvars.iv8453 = phi i64 [ 0, %.lr.ph7642 ], [ %indvars.iv.next8454, %2976 ]
  %.053867640 = phi double [ 0.000000e+00, %.lr.ph7642 ], [ %.15387, %2976 ]
  %.053907639 = phi double [ 0.000000e+00, %.lr.ph7642 ], [ %.15391, %2976 ]
  %.053987638 = phi double [ 0.000000e+00, %.lr.ph7642 ], [ %.15399.lcssa, %2976 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %226) #8
  store double 0.000000e+00, ptr %226, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %227) #8
  store double 0.000000e+00, ptr %227, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %228) #8
  store double 0.000000e+00, ptr %228, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %229) #8
  store double 0.000000e+00, ptr %229, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %230) #8
  store double 0.000000e+00, ptr %230, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %231) #8
  store double 0.000000e+00, ptr %231, align 8, !tbaa !13
  br i1 %2869, label %.lr.ph7634, label %._crit_edge7635

.lr.ph7634:                                       ; preds = %2886
  %2887 = mul nsw i64 %indvars.iv8453, %2884
  %2888 = mul nsw i64 %indvars.iv8453, %2885
  %invariant.gep9060 = getelementptr i8, ptr %spec.select, i64 %2887
  %invariant.gep9062 = getelementptr i8, ptr %spec.select6345, i64 %2888
  %2889 = trunc nuw nsw i64 %indvars.iv8453 to i32
  br label %2890

2890:                                             ; preds = %.lr.ph7634, %2967
  %indvars.iv8448 = phi i64 [ 0, %.lr.ph7634 ], [ %indvars.iv.next8449, %2967 ]
  %.153997632 = phi double [ %.053987638, %.lr.ph7634 ], [ %.25400, %2967 ]
  br i1 %.not6302, label %2894, label %2891

2891:                                             ; preds = %2890
  %gep9061 = getelementptr i8, ptr %invariant.gep9060, i64 %indvars.iv8448
  %2892 = load i8, ptr %gep9061, align 1, !tbaa !9
  %2893 = sitofp i8 %2892 to double
  br label %2894

2894:                                             ; preds = %2890, %2891
  %2895 = phi double [ %2893, %2891 ], [ 0.000000e+00, %2890 ]
  %gep9063 = getelementptr i8, ptr %invariant.gep9062, i64 %indvars.iv8448
  %2896 = load i8, ptr %gep9063, align 1, !tbaa !9
  %2897 = sitofp i8 %2896 to double
  %2898 = fcmp oge double %2895, 0.000000e+00
  %2899 = fneg double %2895
  %2900 = select i1 %2898, double %2895, double %2899
  %2901 = fneg double %2897
  %2902 = icmp slt i8 %2896, 0
  %2903 = select i1 %2902, double %2901, double %2897
  %2904 = load double, ptr %542, align 8, !tbaa !10
  %2905 = fcmp ogt double %2904, %2897
  br i1 %2905, label %2906, label %2907

2906:                                             ; preds = %2894
  store double %2897, ptr %542, align 8, !tbaa !10
  br label %2907

2907:                                             ; preds = %2906, %2894
  %2908 = load double, ptr %2870, align 8, !tbaa !16
  %2909 = fcmp olt double %2908, %2897
  br i1 %2909, label %2910, label %2911

2910:                                             ; preds = %2907
  store double %2897, ptr %2870, align 8, !tbaa !16
  br label %2911

2911:                                             ; preds = %2907, %2910
  %2912 = fcmp ogt double %543, %2900
  %2913 = fcmp oeq double %2895, %2897
  %or.cond6404 = select i1 %2912, i1 true, i1 %2913
  br i1 %or.cond6404, label %2914, label %.thread6744

2914:                                             ; preds = %2911
  br i1 %.not6302, label %2921, label %2915

2915:                                             ; preds = %2914
  %2916 = fcmp ogt double %2895, %2897
  br i1 %2916, label %2917, label %2919

2917:                                             ; preds = %2915
  %2918 = fsub double %2895, %2897
  br label %2921

2919:                                             ; preds = %2915
  %2920 = fsub double %2897, %2895
  br label %2921

2921:                                             ; preds = %2914, %2917, %2919
  %2922 = phi double [ %2918, %2917 ], [ %2920, %2919 ], [ 0.000000e+00, %2914 ]
  %2923 = fcmp ugt double %2903, 0.000000e+00
  %2924 = fdiv double %2922, %2903
  %2925 = select i1 %2923, double %2924, double %2900
  %2926 = load double, ptr %2871, align 8, !tbaa !17
  %2927 = fcmp olt double %2895, %2926
  br i1 %2927, label %2928, label %2929

2928:                                             ; preds = %2921
  store double %2895, ptr %2871, align 8, !tbaa !17
  br label %2929

2929:                                             ; preds = %2928, %2921
  %2930 = load double, ptr %2872, align 8, !tbaa !18
  %2931 = fcmp ogt double %2895, %2930
  br i1 %2931, label %2932, label %2933

2932:                                             ; preds = %2929
  store double %2895, ptr %2872, align 8, !tbaa !18
  br label %2933

2933:                                             ; preds = %2932, %2929
  %2934 = load double, ptr %2873, align 8, !tbaa !19
  %2935 = fcmp olt double %2934, %2922
  br i1 %2935, label %2936, label %2938

2936:                                             ; preds = %2933
  store double %2922, ptr %2873, align 8, !tbaa !19
  store double %2897, ptr %2874, align 8, !tbaa !20
  store double %2895, ptr %2875, align 8, !tbaa !21
  %2937 = trunc nuw nsw i64 %indvars.iv8448 to i32
  store i32 %2937, ptr %2876, align 8, !tbaa !22
  store i32 %2889, ptr %2877, align 4, !tbaa !23
  br label %2938

2938:                                             ; preds = %2936, %2933
  %2939 = load double, ptr %2878, align 8, !tbaa !24
  %2940 = fcmp olt double %2939, %2925
  br i1 %2940, label %2941, label %2942

2941:                                             ; preds = %2938
  store double %2925, ptr %2878, align 8, !tbaa !24
  br label %2942

2942:                                             ; preds = %2941, %2938
  %2943 = fmul double %2925, %2925
  %2944 = fcmp ogt double %543, %2943
  br i1 %2944, label %2945, label %2951

2945:                                             ; preds = %2942
  %2946 = fsub double %2943, %.153997632
  %2947 = load double, ptr %2879, align 8, !tbaa !25
  %2948 = fadd double %2946, %2947
  %2949 = fsub double %2948, %2947
  %2950 = fsub double %2949, %2946
  store double %2948, ptr %2879, align 8, !tbaa !25
  br label %2951

2951:                                             ; preds = %2945, %2942
  %.25400 = phi double [ %2950, %2945 ], [ %.153997632, %2942 ]
  %2952 = call double @libxsmm_kahan_sum(double noundef %2903, ptr noundef nonnull %229, ptr noundef nonnull %226)
  %2953 = call double @libxsmm_kahan_sum(double noundef %2900, ptr noundef nonnull %230, ptr noundef nonnull %227)
  %2954 = call double @libxsmm_kahan_sum(double noundef %2922, ptr noundef nonnull %231, ptr noundef nonnull %228)
  %2955 = fmul double %2897, %2897
  %2956 = call double @libxsmm_kahan_sum(double noundef %2955, ptr noundef nonnull %222, ptr noundef nonnull %220)
  %2957 = fmul double %2895, %2895
  %2958 = call double @libxsmm_kahan_sum(double noundef %2957, ptr noundef nonnull %223, ptr noundef nonnull %221)
  %2959 = fmul double %2922, %2922
  %2960 = fcmp ogt double %543, %2959
  br i1 %2960, label %2961, label %2967

2961:                                             ; preds = %2951
  %2962 = call double @libxsmm_kahan_sum(double noundef %2959, ptr noundef nonnull %2880, ptr noundef nonnull %219)
  br label %2967

.thread6744:                                      ; preds = %2911
  %2963 = trunc nuw nsw i64 %indvars.iv8453 to i32
  %2964 = trunc nuw nsw i64 %indvars.iv8448 to i32
  %2965 = fcmp ogt double %543, %2903
  %2966 = select i1 %2965, i32 1, i32 2
  store i32 %2964, ptr %2876, align 8, !tbaa !22
  store i32 %2963, ptr %2877, align 4, !tbaa !23
  store double %2897, ptr %2874, align 8, !tbaa !20
  store double %2895, ptr %2875, align 8, !tbaa !21
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %231) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %230) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %229) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %228) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %227) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %226) #8
  br label %3096

2967:                                             ; preds = %2961, %2951
  %indvars.iv.next8449 = add nuw nsw i64 %indvars.iv8448, 1
  %exitcond8452.not = icmp eq i64 %indvars.iv.next8449, %wide.trip.count8451
  br i1 %exitcond8452.not, label %._crit_edge7635.loopexit, label %2890, !llvm.loop !81

._crit_edge7635.loopexit:                         ; preds = %2967
  %.pre8717 = load double, ptr %229, align 8, !tbaa !13
  br label %._crit_edge7635

._crit_edge7635:                                  ; preds = %._crit_edge7635.loopexit, %2886
  %2968 = phi double [ 0.000000e+00, %2886 ], [ %.pre8717, %._crit_edge7635.loopexit ]
  %.15399.lcssa = phi double [ %.053987638, %2886 ], [ %.25400, %._crit_edge7635.loopexit ]
  %2969 = call double @libxsmm_kahan_sum(double noundef %2968, ptr noundef nonnull %2881, ptr noundef nonnull %224)
  %2970 = load double, ptr %230, align 8, !tbaa !13
  %2971 = call double @libxsmm_kahan_sum(double noundef %2970, ptr noundef nonnull %2882, ptr noundef nonnull %225)
  %2972 = load double, ptr %2883, align 8, !tbaa !28
  %2973 = load double, ptr %231, align 8, !tbaa !13
  %2974 = fcmp olt double %2972, %2973
  br i1 %2974, label %2975, label %2976

2975:                                             ; preds = %._crit_edge7635
  store double %2973, ptr %2883, align 8, !tbaa !28
  br label %2976

2976:                                             ; preds = %2975, %._crit_edge7635
  %2977 = load double, ptr %229, align 8, !tbaa !13
  %2978 = fcmp olt double %.053867640, %2977
  %.15387 = select i1 %2978, double %2977, double %.053867640
  %2979 = load double, ptr %230, align 8, !tbaa !13
  %2980 = fcmp olt double %.053907639, %2979
  %.15391 = select i1 %2980, double %2979, double %.053907639
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %231) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %230) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %229) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %228) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %227) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %226) #8
  %indvars.iv.next8454 = add nuw nsw i64 %indvars.iv8453, 1
  %exitcond8457.not = icmp eq i64 %indvars.iv.next8454, %wide.trip.count8456
  br i1 %exitcond8457.not, label %._crit_edge7643, label %2886, !llvm.loop !82

._crit_edge7643:                                  ; preds = %2976, %2867
  %.05390.lcssa = phi double [ 0.000000e+00, %2867 ], [ %.15391, %2976 ]
  %.05386.lcssa = phi double [ 0.000000e+00, %2867 ], [ %.15387, %2976 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %232) #8
  store double 0.000000e+00, ptr %232, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %233) #8
  store double 0.000000e+00, ptr %233, align 8, !tbaa !13
  %2981 = getelementptr inbounds i8, ptr %0, i64 112
  %2982 = load double, ptr %2981, align 8, !tbaa !30
  %2983 = fcmp oeq double %2982, 0.000000e+00
  br i1 %2983, label %2985, label %2984

2984:                                             ; preds = %._crit_edge7643
  call void @__assert_fail(ptr noundef nonnull @.str.1, ptr noundef nonnull @.str.2, i32 noundef 130, ptr noundef nonnull @__PRETTY_FUNCTION__.libxsmm_matdiff) #10
  unreachable

2985:                                             ; preds = %._crit_edge7643
  %2986 = getelementptr inbounds i8, ptr %0, i64 152
  %2987 = load double, ptr %2986, align 8, !tbaa !31
  %2988 = fcmp oeq double %2987, 0.000000e+00
  br i1 %2988, label %2990, label %2989

2989:                                             ; preds = %2985
  call void @__assert_fail(ptr noundef nonnull @.str.3, ptr noundef nonnull @.str.2, i32 noundef 131, ptr noundef nonnull @__PRETTY_FUNCTION__.libxsmm_matdiff) #10
  unreachable

2990:                                             ; preds = %2985
  %.not6303 = icmp eq i64 %538, 0
  br i1 %.not6303, label %3001, label %2991

2991:                                             ; preds = %2990
  %2992 = getelementptr inbounds i8, ptr %0, i64 80
  %2993 = load double, ptr %2992, align 8, !tbaa !32
  %2994 = uitofp i64 %538 to double
  %2995 = fdiv double %2993, %2994
  %2996 = getelementptr inbounds i8, ptr %0, i64 104
  store double %2995, ptr %2996, align 8, !tbaa !33
  %2997 = getelementptr inbounds i8, ptr %0, i64 120
  %2998 = load double, ptr %2997, align 8, !tbaa !34
  %2999 = fdiv double %2998, %2994
  %3000 = getelementptr inbounds i8, ptr %0, i64 144
  store double %2999, ptr %3000, align 8, !tbaa !35
  br label %3001

3001:                                             ; preds = %2991, %2990
  %3002 = fcmp ugt double %.05386.lcssa, 0.000000e+00
  br i1 %3002, label %3003, label %3009

3003:                                             ; preds = %3001
  %3004 = getelementptr inbounds i8, ptr %0, i64 16
  %3005 = load double, ptr %3004, align 8, !tbaa !28
  %3006 = fcmp ogt double %.05386.lcssa, 0.000000e+00
  %3007 = select i1 %3006, double %.05386.lcssa, double 1.000000e+00
  %3008 = fdiv double %3005, %3007
  br label %3009

3009:                                             ; preds = %3001, %3003
  %3010 = phi double [ %3008, %3003 ], [ %.05390.lcssa, %3001 ]
  %3011 = getelementptr inbounds i8, ptr %0, i64 24
  store double %3010, ptr %3011, align 8, !tbaa !36
  %3012 = load double, ptr %222, align 8
  %3013 = fcmp ugt double %3012, 0.000000e+00
  br i1 %3013, label %3020, label %3014

3014:                                             ; preds = %3009
  %3015 = load double, ptr %223, align 8, !tbaa !13
  %3016 = fmul double %3015, %3015
  %3017 = getelementptr inbounds i8, ptr %0, i64 56
  %3018 = load double, ptr %3017, align 8, !tbaa !37
  %3019 = fcmp olt double %3016, %3018
  %.6409 = select i1 %3019, double %3016, double %3018
  br label %3026

3020:                                             ; preds = %3009
  %3021 = getelementptr inbounds i8, ptr %0, i64 56
  %3022 = load double, ptr %3021, align 8, !tbaa !37
  %3023 = fcmp ogt double %3012, 0.000000e+00
  %3024 = select i1 %3023, double %3012, double 1.000000e+00
  %3025 = fdiv double %3022, %3024
  br label %3026

3026:                                             ; preds = %3014, %3020
  %3027 = phi double [ %3025, %3020 ], [ %.6409, %3014 ]
  %3028 = getelementptr inbounds i8, ptr %0, i64 32
  store double %3027, ptr %3028, align 8, !tbaa !38
  %3029 = icmp sgt i32 %.05042, 0
  br i1 %3029, label %.lr.ph7655, label %._crit_edge7656.thread

.lr.ph7655:                                       ; preds = %3026
  %.not6304 = icmp eq ptr %spec.select, null
  %3030 = getelementptr inbounds i8, ptr %0, i64 104
  %3031 = getelementptr inbounds i8, ptr %0, i64 144
  %3032 = sext i32 %.05040 to i64
  %3033 = sext i32 %.05041 to i64
  %wide.trip.count8471 = zext nneg i32 %.05042 to i64
  %wide.trip.count8461 = zext nneg i32 %.05043 to i64
  %wide.trip.count8466 = zext nneg i32 %.05043 to i64
  br label %3034

3034:                                             ; preds = %.lr.ph7655, %3083
  %indvars.iv8468 = phi i64 [ 0, %.lr.ph7655 ], [ %indvars.iv.next8469, %3083 ]
  %.053947653 = phi double [ 0.000000e+00, %.lr.ph7655 ], [ %.15395, %3083 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %234) #8
  store double 0.000000e+00, ptr %234, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %235) #8
  store double 0.000000e+00, ptr %235, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %236) #8
  store double 0.000000e+00, ptr %236, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %237) #8
  store double 0.000000e+00, ptr %237, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %238) #8
  store double 0.000000e+00, ptr %238, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %239) #8
  store double 0.000000e+00, ptr %239, align 8, !tbaa !13
  br i1 %2868, label %.lr.ph7648, label %._crit_edge7649

.lr.ph7648:                                       ; preds = %3034
  %invariant.gep9068 = getelementptr i8, ptr %spec.select6345, i64 %indvars.iv8468
  br i1 %.not6304, label %.thread6760.us, label %.lr.ph7648.split.preheader

.lr.ph7648.split.preheader:                       ; preds = %.lr.ph7648
  %invariant.gep9066 = getelementptr i8, ptr %spec.select, i64 %indvars.iv8468
  br label %.lr.ph7648.split

.thread6760.us:                                   ; preds = %.lr.ph7648, %.thread6760.us
  %indvars.iv8463 = phi i64 [ %indvars.iv.next8464, %.thread6760.us ], [ 0, %.lr.ph7648 ]
  %3035 = mul nsw i64 %indvars.iv8463, %3032
  %gep9069 = getelementptr i8, ptr %invariant.gep9068, i64 %3035
  %3036 = load i8, ptr %gep9069, align 1, !tbaa !9
  %3037 = sitofp i8 %3036 to double
  %3038 = load double, ptr %3030, align 8, !tbaa !33
  %3039 = fsub double %3037, %3038
  %3040 = load double, ptr %3031, align 8, !tbaa !35
  %3041 = fsub double 0.000000e+00, %3040
  %3042 = fneg double %3037
  %3043 = icmp slt i8 %3036, 0
  %3044 = select i1 %3043, double %3042, double %3037
  %3045 = fmul double %3039, %3039
  %3046 = call double @libxsmm_kahan_sum(double noundef %3045, ptr noundef nonnull %2981, ptr noundef nonnull %232)
  %3047 = fmul double %3041, %3041
  %3048 = call double @libxsmm_kahan_sum(double noundef %3047, ptr noundef nonnull %2986, ptr noundef nonnull %233)
  %3049 = call double @libxsmm_kahan_sum(double noundef %3044, ptr noundef nonnull %237, ptr noundef nonnull %234)
  %3050 = call double @libxsmm_kahan_sum(double noundef 0.000000e+00, ptr noundef nonnull %238, ptr noundef nonnull %235)
  %3051 = call double @libxsmm_kahan_sum(double noundef 0.000000e+00, ptr noundef nonnull %239, ptr noundef nonnull %236)
  %indvars.iv.next8464 = add nuw nsw i64 %indvars.iv8463, 1
  %exitcond8467.not = icmp eq i64 %indvars.iv.next8464, %wide.trip.count8466
  br i1 %exitcond8467.not, label %._crit_edge7649, label %.thread6760.us, !llvm.loop !83

.lr.ph7648.split:                                 ; preds = %.lr.ph7648.split.preheader, %.lr.ph7648.split
  %indvars.iv8458 = phi i64 [ 0, %.lr.ph7648.split.preheader ], [ %indvars.iv.next8459, %.lr.ph7648.split ]
  %3052 = mul nsw i64 %indvars.iv8458, %3032
  %gep9065 = getelementptr i8, ptr %invariant.gep9068, i64 %3052
  %3053 = load i8, ptr %gep9065, align 1, !tbaa !9
  %3054 = sitofp i8 %3053 to double
  %3055 = mul nsw i64 %indvars.iv8458, %3033
  %gep9067 = getelementptr i8, ptr %invariant.gep9066, i64 %3055
  %3056 = load i8, ptr %gep9067, align 1, !tbaa !9
  %3057 = sitofp i8 %3056 to double
  %3058 = fcmp ogt double %3057, %3054
  %3059 = fsub double %3057, %3054
  %3060 = fsub double %3054, %3057
  %3061 = select i1 %3058, double %3059, double %3060
  %3062 = load double, ptr %3030, align 8, !tbaa !33
  %3063 = fsub double %3054, %3062
  %3064 = load double, ptr %3031, align 8, !tbaa !35
  %3065 = fsub double %3057, %3064
  %3066 = fneg double %3054
  %3067 = icmp slt i8 %3053, 0
  %3068 = select i1 %3067, double %3066, double %3054
  %3069 = fneg double %3057
  %3070 = icmp slt i8 %3056, 0
  %3071 = select i1 %3070, double %3069, double %3057
  %3072 = fmul double %3063, %3063
  %3073 = call double @libxsmm_kahan_sum(double noundef %3072, ptr noundef nonnull %2981, ptr noundef nonnull %232)
  %3074 = fmul double %3065, %3065
  %3075 = call double @libxsmm_kahan_sum(double noundef %3074, ptr noundef nonnull %2986, ptr noundef nonnull %233)
  %3076 = call double @libxsmm_kahan_sum(double noundef %3068, ptr noundef nonnull %237, ptr noundef nonnull %234)
  %3077 = call double @libxsmm_kahan_sum(double noundef %3071, ptr noundef nonnull %238, ptr noundef nonnull %235)
  %3078 = call double @libxsmm_kahan_sum(double noundef %3061, ptr noundef nonnull %239, ptr noundef nonnull %236)
  %indvars.iv.next8459 = add nuw nsw i64 %indvars.iv8458, 1
  %exitcond8462.not = icmp eq i64 %indvars.iv.next8459, %wide.trip.count8461
  br i1 %exitcond8462.not, label %._crit_edge7649, label %.lr.ph7648.split, !llvm.loop !83

._crit_edge7649:                                  ; preds = %.lr.ph7648.split, %.thread6760.us, %3034
  %3079 = load double, ptr %0, align 8, !tbaa !40
  %3080 = load double, ptr %239, align 8, !tbaa !13
  %3081 = fcmp olt double %3079, %3080
  br i1 %3081, label %3082, label %3083

3082:                                             ; preds = %._crit_edge7649
  store double %3080, ptr %0, align 8, !tbaa !40
  br label %3083

3083:                                             ; preds = %3082, %._crit_edge7649
  %3084 = load double, ptr %237, align 8, !tbaa !13
  %3085 = fcmp olt double %.053947653, %3084
  %.15395 = select i1 %3085, double %3084, double %.053947653
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %239) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %238) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %237) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %236) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %235) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %234) #8
  %indvars.iv.next8469 = add nuw nsw i64 %indvars.iv8468, 1
  %exitcond8472.not = icmp eq i64 %indvars.iv.next8469, %wide.trip.count8471
  br i1 %exitcond8472.not, label %._crit_edge7656, label %3034, !llvm.loop !84

._crit_edge7656:                                  ; preds = %3083
  %3086 = fcmp ugt double %.15395, 0.000000e+00
  br i1 %3086, label %3088, label %._crit_edge7656.thread

._crit_edge7656.thread:                           ; preds = %3026, %._crit_edge7656
  %3087 = load double, ptr %0, align 8, !tbaa !40
  br label %3093

3088:                                             ; preds = %._crit_edge7656
  %3089 = load double, ptr %0, align 8, !tbaa !40
  %3090 = fcmp ogt double %.15395, 0.000000e+00
  %3091 = select i1 %3090, double %.15395, double 1.000000e+00
  %3092 = fdiv double %3089, %3091
  br label %3093

3093:                                             ; preds = %3088, %._crit_edge7656.thread
  %3094 = phi double [ %3087, %._crit_edge7656.thread ], [ %3092, %3088 ]
  %3095 = getelementptr inbounds i8, ptr %0, i64 8
  store double %3094, ptr %3095, align 8, !tbaa !42
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %233) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %232) #8
  br label %3096

3096:                                             ; preds = %.thread6744, %3093
  %.546759 = phi i32 [ %2966, %.thread6744 ], [ 0, %3093 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %225) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %224) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %223) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %222) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %221) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %220) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %219) #8
  br label %6314

3097:                                             ; preds = %2865
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %240) #8
  store double 0.000000e+00, ptr %240, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %241) #8
  store double 0.000000e+00, ptr %241, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %242) #8
  store double 0.000000e+00, ptr %242, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %243) #8
  store double 0.000000e+00, ptr %243, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %244) #8
  store double 0.000000e+00, ptr %244, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %245) #8
  store double 0.000000e+00, ptr %245, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %246) #8
  store double 0.000000e+00, ptr %246, align 8, !tbaa !13
  %3098 = sext i32 %.05042 to i64
  %3099 = sext i32 %.05043 to i64
  %3100 = mul nsw i64 %3098, %3099
  %3101 = tail call i64 @libxsmm_coprime2(i64 noundef %3100)
  %3102 = icmp sgt i32 %.05043, 0
  br i1 %3102, label %.lr.ph7616, label %._crit_edge7617

.lr.ph7616:                                       ; preds = %3097
  %3103 = icmp sgt i32 %.05042, 0
  %.not6299 = icmp eq ptr %spec.select, null
  %3104 = getelementptr inbounds i8, ptr %0, i64 96
  %3105 = getelementptr inbounds i8, ptr %0, i64 128
  %3106 = getelementptr inbounds i8, ptr %0, i64 136
  %3107 = getelementptr inbounds i8, ptr %0, i64 40
  %3108 = getelementptr inbounds i8, ptr %0, i64 160
  %3109 = getelementptr inbounds i8, ptr %0, i64 168
  %3110 = getelementptr inbounds i8, ptr %0, i64 176
  %3111 = getelementptr inbounds i8, ptr %0, i64 180
  %3112 = getelementptr inbounds i8, ptr %0, i64 48
  %3113 = getelementptr inbounds i8, ptr %0, i64 64
  %3114 = getelementptr inbounds i8, ptr %0, i64 56
  %3115 = getelementptr inbounds i8, ptr %0, i64 80
  %3116 = getelementptr inbounds i8, ptr %0, i64 120
  %3117 = getelementptr inbounds i8, ptr %0, i64 16
  %3118 = zext i32 %.05042 to i64
  %wide.trip.count8436 = zext nneg i32 %.05043 to i64
  br label %3119

3119:                                             ; preds = %.lr.ph7616, %3219
  %indvars.iv8433 = phi i64 [ 0, %.lr.ph7616 ], [ %indvars.iv.next8434, %3219 ]
  %.054077614 = phi double [ 0.000000e+00, %.lr.ph7616 ], [ %.15408, %3219 ]
  %.054117613 = phi double [ 0.000000e+00, %.lr.ph7616 ], [ %.15412, %3219 ]
  %.054197612 = phi double [ 0.000000e+00, %.lr.ph7616 ], [ %.15420.lcssa, %3219 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %247) #8
  store double 0.000000e+00, ptr %247, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %248) #8
  store double 0.000000e+00, ptr %248, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %249) #8
  store double 0.000000e+00, ptr %249, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %250) #8
  store double 0.000000e+00, ptr %250, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %251) #8
  store double 0.000000e+00, ptr %251, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %252) #8
  store double 0.000000e+00, ptr %252, align 8, !tbaa !13
  br i1 %3103, label %.lr.ph7608, label %._crit_edge7609

.lr.ph7608:                                       ; preds = %3119
  %3120 = mul nuw nsw i64 %indvars.iv8433, %3118
  br label %3121

3121:                                             ; preds = %.lr.ph7608, %3210
  %indvars.iv8428 = phi i64 [ 0, %.lr.ph7608 ], [ %indvars.iv.next8429, %3210 ]
  %.154207606 = phi double [ %.054197612, %.lr.ph7608 ], [ %.25421, %3210 ]
  %3122 = add nuw nsw i64 %indvars.iv8428, %3120
  %3123 = mul i64 %3101, %3122
  %3124 = urem i64 %3123, %3100
  %3125 = udiv i64 %3124, %3098
  %3126 = trunc i64 %3125 to i32
  %3127 = urem i64 %3124, %3098
  %3128 = trunc nuw i64 %3127 to i32
  br i1 %.not6299, label %3136, label %3129

3129:                                             ; preds = %3121
  %3130 = mul nsw i32 %.05041, %3126
  %3131 = add nsw i32 %3130, %3128
  %3132 = sext i32 %3131 to i64
  %3133 = getelementptr inbounds i8, ptr %spec.select, i64 %3132
  %3134 = load i8, ptr %3133, align 1, !tbaa !9
  %3135 = sitofp i8 %3134 to double
  br label %3136

3136:                                             ; preds = %3121, %3129
  %3137 = phi double [ %3135, %3129 ], [ 0.000000e+00, %3121 ]
  %3138 = mul nsw i32 %.05040, %3126
  %3139 = add nsw i32 %3138, %3128
  %3140 = sext i32 %3139 to i64
  %3141 = getelementptr inbounds i8, ptr %spec.select6345, i64 %3140
  %3142 = load i8, ptr %3141, align 1, !tbaa !9
  %3143 = sitofp i8 %3142 to double
  %3144 = fcmp oge double %3137, 0.000000e+00
  %3145 = fneg double %3137
  %3146 = select i1 %3144, double %3137, double %3145
  %3147 = fneg double %3143
  %3148 = icmp slt i8 %3142, 0
  %3149 = select i1 %3148, double %3147, double %3143
  %3150 = load double, ptr %542, align 8, !tbaa !10
  %3151 = fcmp ogt double %3150, %3143
  br i1 %3151, label %3152, label %3153

3152:                                             ; preds = %3136
  store double %3143, ptr %542, align 8, !tbaa !10
  br label %3153

3153:                                             ; preds = %3152, %3136
  %3154 = load double, ptr %3104, align 8, !tbaa !16
  %3155 = fcmp olt double %3154, %3143
  br i1 %3155, label %3156, label %3157

3156:                                             ; preds = %3153
  store double %3143, ptr %3104, align 8, !tbaa !16
  br label %3157

3157:                                             ; preds = %3153, %3156
  %3158 = fcmp ogt double %543, %3146
  %3159 = fcmp oeq double %3137, %3143
  %or.cond6410 = select i1 %3158, i1 true, i1 %3159
  br i1 %or.cond6410, label %3160, label %.thread6769

3160:                                             ; preds = %3157
  br i1 %.not6299, label %3167, label %3161

3161:                                             ; preds = %3160
  %3162 = fcmp ogt double %3137, %3143
  br i1 %3162, label %3163, label %3165

3163:                                             ; preds = %3161
  %3164 = fsub double %3137, %3143
  br label %3167

3165:                                             ; preds = %3161
  %3166 = fsub double %3143, %3137
  br label %3167

3167:                                             ; preds = %3160, %3163, %3165
  %3168 = phi double [ %3164, %3163 ], [ %3166, %3165 ], [ 0.000000e+00, %3160 ]
  %3169 = fcmp ugt double %3149, 0.000000e+00
  %3170 = fdiv double %3168, %3149
  %3171 = select i1 %3169, double %3170, double %3146
  %3172 = load double, ptr %3105, align 8, !tbaa !17
  %3173 = fcmp olt double %3137, %3172
  br i1 %3173, label %3174, label %3175

3174:                                             ; preds = %3167
  store double %3137, ptr %3105, align 8, !tbaa !17
  br label %3175

3175:                                             ; preds = %3174, %3167
  %3176 = load double, ptr %3106, align 8, !tbaa !18
  %3177 = fcmp ogt double %3137, %3176
  br i1 %3177, label %3178, label %3179

3178:                                             ; preds = %3175
  store double %3137, ptr %3106, align 8, !tbaa !18
  br label %3179

3179:                                             ; preds = %3178, %3175
  %3180 = load double, ptr %3107, align 8, !tbaa !19
  %3181 = fcmp olt double %3180, %3168
  br i1 %3181, label %3182, label %3183

3182:                                             ; preds = %3179
  store double %3168, ptr %3107, align 8, !tbaa !19
  store double %3143, ptr %3108, align 8, !tbaa !20
  store double %3137, ptr %3109, align 8, !tbaa !21
  store i32 %3128, ptr %3110, align 8, !tbaa !22
  store i32 %3126, ptr %3111, align 4, !tbaa !23
  br label %3183

3183:                                             ; preds = %3182, %3179
  %3184 = load double, ptr %3112, align 8, !tbaa !24
  %3185 = fcmp olt double %3184, %3171
  br i1 %3185, label %3186, label %3187

3186:                                             ; preds = %3183
  store double %3171, ptr %3112, align 8, !tbaa !24
  br label %3187

3187:                                             ; preds = %3186, %3183
  %3188 = fmul double %3171, %3171
  %3189 = fcmp ogt double %543, %3188
  br i1 %3189, label %3190, label %3196

3190:                                             ; preds = %3187
  %3191 = fsub double %3188, %.154207606
  %3192 = load double, ptr %3113, align 8, !tbaa !25
  %3193 = fadd double %3191, %3192
  %3194 = fsub double %3193, %3192
  %3195 = fsub double %3194, %3191
  store double %3193, ptr %3113, align 8, !tbaa !25
  br label %3196

3196:                                             ; preds = %3190, %3187
  %.25421 = phi double [ %3195, %3190 ], [ %.154207606, %3187 ]
  %3197 = call double @libxsmm_kahan_sum(double noundef %3149, ptr noundef nonnull %250, ptr noundef nonnull %247)
  %3198 = call double @libxsmm_kahan_sum(double noundef %3146, ptr noundef nonnull %251, ptr noundef nonnull %248)
  %3199 = call double @libxsmm_kahan_sum(double noundef %3168, ptr noundef nonnull %252, ptr noundef nonnull %249)
  %3200 = fmul double %3143, %3143
  %3201 = call double @libxsmm_kahan_sum(double noundef %3200, ptr noundef nonnull %243, ptr noundef nonnull %241)
  %3202 = fmul double %3137, %3137
  %3203 = call double @libxsmm_kahan_sum(double noundef %3202, ptr noundef nonnull %244, ptr noundef nonnull %242)
  %3204 = fmul double %3168, %3168
  %3205 = fcmp ogt double %543, %3204
  br i1 %3205, label %3206, label %3210

3206:                                             ; preds = %3196
  %3207 = call double @libxsmm_kahan_sum(double noundef %3204, ptr noundef nonnull %3114, ptr noundef nonnull %240)
  br label %3210

.thread6769:                                      ; preds = %3157
  %3208 = fcmp ogt double %543, %3149
  %3209 = select i1 %3208, i32 1, i32 2
  store i32 %3128, ptr %3110, align 8, !tbaa !22
  store i32 %3126, ptr %3111, align 4, !tbaa !23
  store double %3143, ptr %3108, align 8, !tbaa !20
  store double %3137, ptr %3109, align 8, !tbaa !21
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %252) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %251) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %250) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %249) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %248) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %247) #8
  br label %3339

3210:                                             ; preds = %3206, %3196
  %indvars.iv.next8429 = add nuw nsw i64 %indvars.iv8428, 1
  %exitcond8432.not = icmp eq i64 %indvars.iv.next8429, %3118
  br i1 %exitcond8432.not, label %._crit_edge7609.loopexit, label %3121, !llvm.loop !85

._crit_edge7609.loopexit:                         ; preds = %3210
  %.pre8715 = load double, ptr %250, align 8, !tbaa !13
  br label %._crit_edge7609

._crit_edge7609:                                  ; preds = %._crit_edge7609.loopexit, %3119
  %3211 = phi double [ 0.000000e+00, %3119 ], [ %.pre8715, %._crit_edge7609.loopexit ]
  %.15420.lcssa = phi double [ %.054197612, %3119 ], [ %.25421, %._crit_edge7609.loopexit ]
  %3212 = call double @libxsmm_kahan_sum(double noundef %3211, ptr noundef nonnull %3115, ptr noundef nonnull %245)
  %3213 = load double, ptr %251, align 8, !tbaa !13
  %3214 = call double @libxsmm_kahan_sum(double noundef %3213, ptr noundef nonnull %3116, ptr noundef nonnull %246)
  %3215 = load double, ptr %3117, align 8, !tbaa !28
  %3216 = load double, ptr %252, align 8, !tbaa !13
  %3217 = fcmp olt double %3215, %3216
  br i1 %3217, label %3218, label %3219

3218:                                             ; preds = %._crit_edge7609
  store double %3216, ptr %3117, align 8, !tbaa !28
  br label %3219

3219:                                             ; preds = %3218, %._crit_edge7609
  %3220 = load double, ptr %250, align 8, !tbaa !13
  %3221 = fcmp olt double %.054077614, %3220
  %.15408 = select i1 %3221, double %3220, double %.054077614
  %3222 = load double, ptr %251, align 8, !tbaa !13
  %3223 = fcmp olt double %.054117613, %3222
  %.15412 = select i1 %3223, double %3222, double %.054117613
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %252) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %251) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %250) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %249) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %248) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %247) #8
  %indvars.iv.next8434 = add nuw nsw i64 %indvars.iv8433, 1
  %exitcond8437.not = icmp eq i64 %indvars.iv.next8434, %wide.trip.count8436
  br i1 %exitcond8437.not, label %._crit_edge7617, label %3119, !llvm.loop !86

._crit_edge7617:                                  ; preds = %3219, %3097
  %.05411.lcssa = phi double [ 0.000000e+00, %3097 ], [ %.15412, %3219 ]
  %.05407.lcssa = phi double [ 0.000000e+00, %3097 ], [ %.15408, %3219 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %253) #8
  store double 0.000000e+00, ptr %253, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %254) #8
  store double 0.000000e+00, ptr %254, align 8, !tbaa !13
  %3224 = getelementptr inbounds i8, ptr %0, i64 112
  %3225 = load double, ptr %3224, align 8, !tbaa !30
  %3226 = fcmp oeq double %3225, 0.000000e+00
  br i1 %3226, label %3228, label %3227

3227:                                             ; preds = %._crit_edge7617
  call void @__assert_fail(ptr noundef nonnull @.str.1, ptr noundef nonnull @.str.2, i32 noundef 130, ptr noundef nonnull @__PRETTY_FUNCTION__.libxsmm_matdiff) #10
  unreachable

3228:                                             ; preds = %._crit_edge7617
  %3229 = getelementptr inbounds i8, ptr %0, i64 152
  %3230 = load double, ptr %3229, align 8, !tbaa !31
  %3231 = fcmp oeq double %3230, 0.000000e+00
  br i1 %3231, label %3233, label %3232

3232:                                             ; preds = %3228
  call void @__assert_fail(ptr noundef nonnull @.str.3, ptr noundef nonnull @.str.2, i32 noundef 131, ptr noundef nonnull @__PRETTY_FUNCTION__.libxsmm_matdiff) #10
  unreachable

3233:                                             ; preds = %3228
  %.not6300 = icmp eq i64 %538, 0
  br i1 %.not6300, label %3244, label %3234

3234:                                             ; preds = %3233
  %3235 = getelementptr inbounds i8, ptr %0, i64 80
  %3236 = load double, ptr %3235, align 8, !tbaa !32
  %3237 = uitofp i64 %538 to double
  %3238 = fdiv double %3236, %3237
  %3239 = getelementptr inbounds i8, ptr %0, i64 104
  store double %3238, ptr %3239, align 8, !tbaa !33
  %3240 = getelementptr inbounds i8, ptr %0, i64 120
  %3241 = load double, ptr %3240, align 8, !tbaa !34
  %3242 = fdiv double %3241, %3237
  %3243 = getelementptr inbounds i8, ptr %0, i64 144
  store double %3242, ptr %3243, align 8, !tbaa !35
  br label %3244

3244:                                             ; preds = %3234, %3233
  %3245 = fcmp ugt double %.05407.lcssa, 0.000000e+00
  br i1 %3245, label %3246, label %3252

3246:                                             ; preds = %3244
  %3247 = getelementptr inbounds i8, ptr %0, i64 16
  %3248 = load double, ptr %3247, align 8, !tbaa !28
  %3249 = fcmp ogt double %.05407.lcssa, 0.000000e+00
  %3250 = select i1 %3249, double %.05407.lcssa, double 1.000000e+00
  %3251 = fdiv double %3248, %3250
  br label %3252

3252:                                             ; preds = %3244, %3246
  %3253 = phi double [ %3251, %3246 ], [ %.05411.lcssa, %3244 ]
  %3254 = getelementptr inbounds i8, ptr %0, i64 24
  store double %3253, ptr %3254, align 8, !tbaa !36
  %3255 = load double, ptr %243, align 8
  %3256 = fcmp ugt double %3255, 0.000000e+00
  br i1 %3256, label %3263, label %3257

3257:                                             ; preds = %3252
  %3258 = load double, ptr %244, align 8, !tbaa !13
  %3259 = fmul double %3258, %3258
  %3260 = getelementptr inbounds i8, ptr %0, i64 56
  %3261 = load double, ptr %3260, align 8, !tbaa !37
  %3262 = fcmp olt double %3259, %3261
  %.6415 = select i1 %3262, double %3259, double %3261
  br label %3269

3263:                                             ; preds = %3252
  %3264 = getelementptr inbounds i8, ptr %0, i64 56
  %3265 = load double, ptr %3264, align 8, !tbaa !37
  %3266 = fcmp ogt double %3255, 0.000000e+00
  %3267 = select i1 %3266, double %3255, double 1.000000e+00
  %3268 = fdiv double %3265, %3267
  br label %3269

3269:                                             ; preds = %3257, %3263
  %3270 = phi double [ %3268, %3263 ], [ %.6415, %3257 ]
  %3271 = getelementptr inbounds i8, ptr %0, i64 32
  store double %3270, ptr %3271, align 8, !tbaa !38
  %3272 = icmp sgt i32 %.05042, 0
  br i1 %3272, label %.lr.ph7628, label %._crit_edge7629.thread

.lr.ph7628:                                       ; preds = %3269
  %.not6301 = icmp eq ptr %spec.select, null
  %3273 = getelementptr inbounds i8, ptr %0, i64 104
  %3274 = getelementptr inbounds i8, ptr %0, i64 144
  %3275 = zext nneg i32 %.05042 to i64
  %wide.trip.count8441 = zext nneg i32 %.05043 to i64
  br label %3276

3276:                                             ; preds = %.lr.ph7628, %3326
  %indvars.iv8443 = phi i64 [ 0, %.lr.ph7628 ], [ %indvars.iv.next8444, %3326 ]
  %.054157626 = phi double [ 0.000000e+00, %.lr.ph7628 ], [ %.15416, %3326 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %255) #8
  store double 0.000000e+00, ptr %255, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %256) #8
  store double 0.000000e+00, ptr %256, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %257) #8
  store double 0.000000e+00, ptr %257, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %258) #8
  store double 0.000000e+00, ptr %258, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %259) #8
  store double 0.000000e+00, ptr %259, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %260) #8
  store double 0.000000e+00, ptr %260, align 8, !tbaa !13
  br i1 %3102, label %.lr.ph7622, label %._crit_edge7623

.lr.ph7622:                                       ; preds = %3276, %.thread6785
  %indvars.iv8438 = phi i64 [ %indvars.iv.next8439, %.thread6785 ], [ 0, %3276 ]
  %3277 = mul nuw nsw i64 %indvars.iv8438, %3275
  %3278 = add nuw nsw i64 %3277, %indvars.iv8443
  %3279 = mul i64 %3101, %3278
  %3280 = urem i64 %3279, %3100
  %3281 = udiv i64 %3280, %3098
  %3282 = trunc i64 %3281 to i32
  %3283 = urem i64 %3280, %3098
  %3284 = trunc nuw i64 %3283 to i32
  %3285 = mul nsw i32 %.05040, %3282
  %3286 = add nsw i32 %3285, %3284
  %3287 = sext i32 %3286 to i64
  %3288 = getelementptr inbounds i8, ptr %spec.select6345, i64 %3287
  %3289 = load i8, ptr %3288, align 1, !tbaa !9
  %3290 = sitofp i8 %3289 to double
  br i1 %.not6301, label %.thread6785, label %3291

3291:                                             ; preds = %.lr.ph7622
  %3292 = mul nsw i32 %.05041, %3282
  %3293 = add nsw i32 %3292, %3284
  %3294 = sext i32 %3293 to i64
  %3295 = getelementptr inbounds i8, ptr %spec.select, i64 %3294
  %3296 = load i8, ptr %3295, align 1, !tbaa !9
  %3297 = sitofp i8 %3296 to double
  %3298 = fcmp ogt double %3297, %3290
  br i1 %3298, label %3299, label %3301

3299:                                             ; preds = %3291
  %3300 = fsub double %3297, %3290
  br label %.thread6785

3301:                                             ; preds = %3291
  %3302 = fsub double %3290, %3297
  br label %.thread6785

.thread6785:                                      ; preds = %.lr.ph7622, %3299, %3301
  %3303 = phi double [ %3297, %3299 ], [ %3297, %3301 ], [ 0.000000e+00, %.lr.ph7622 ]
  %3304 = phi double [ %3300, %3299 ], [ %3302, %3301 ], [ 0.000000e+00, %.lr.ph7622 ]
  %3305 = load double, ptr %3273, align 8, !tbaa !33
  %3306 = fsub double %3290, %3305
  %3307 = load double, ptr %3274, align 8, !tbaa !35
  %3308 = fsub double %3303, %3307
  %3309 = fneg double %3290
  %3310 = icmp slt i8 %3289, 0
  %3311 = select i1 %3310, double %3309, double %3290
  %3312 = fcmp oge double %3303, 0.000000e+00
  %3313 = fneg double %3303
  %3314 = select i1 %3312, double %3303, double %3313
  %3315 = fmul double %3306, %3306
  %3316 = call double @libxsmm_kahan_sum(double noundef %3315, ptr noundef nonnull %3224, ptr noundef nonnull %253)
  %3317 = fmul double %3308, %3308
  %3318 = call double @libxsmm_kahan_sum(double noundef %3317, ptr noundef nonnull %3229, ptr noundef nonnull %254)
  %3319 = call double @libxsmm_kahan_sum(double noundef %3311, ptr noundef nonnull %258, ptr noundef nonnull %255)
  %3320 = call double @libxsmm_kahan_sum(double noundef %3314, ptr noundef nonnull %259, ptr noundef nonnull %256)
  %3321 = call double @libxsmm_kahan_sum(double noundef %3304, ptr noundef nonnull %260, ptr noundef nonnull %257)
  %indvars.iv.next8439 = add nuw nsw i64 %indvars.iv8438, 1
  %exitcond8442.not = icmp eq i64 %indvars.iv.next8439, %wide.trip.count8441
  br i1 %exitcond8442.not, label %._crit_edge7623.loopexit, label %.lr.ph7622, !llvm.loop !87

._crit_edge7623.loopexit:                         ; preds = %.thread6785
  %.pre8716 = load double, ptr %260, align 8, !tbaa !13
  br label %._crit_edge7623

._crit_edge7623:                                  ; preds = %._crit_edge7623.loopexit, %3276
  %3322 = phi double [ %.pre8716, %._crit_edge7623.loopexit ], [ 0.000000e+00, %3276 ]
  %3323 = load double, ptr %0, align 8, !tbaa !40
  %3324 = fcmp olt double %3323, %3322
  br i1 %3324, label %3325, label %3326

3325:                                             ; preds = %._crit_edge7623
  store double %3322, ptr %0, align 8, !tbaa !40
  br label %3326

3326:                                             ; preds = %3325, %._crit_edge7623
  %3327 = load double, ptr %258, align 8, !tbaa !13
  %3328 = fcmp olt double %.054157626, %3327
  %.15416 = select i1 %3328, double %3327, double %.054157626
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %260) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %259) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %258) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %257) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %256) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %255) #8
  %indvars.iv.next8444 = add nuw nsw i64 %indvars.iv8443, 1
  %exitcond8447.not = icmp eq i64 %indvars.iv.next8444, %3275
  br i1 %exitcond8447.not, label %._crit_edge7629, label %3276, !llvm.loop !88

._crit_edge7629:                                  ; preds = %3326
  %3329 = fcmp ugt double %.15416, 0.000000e+00
  br i1 %3329, label %3331, label %._crit_edge7629.thread

._crit_edge7629.thread:                           ; preds = %3269, %._crit_edge7629
  %3330 = load double, ptr %0, align 8, !tbaa !40
  br label %3336

3331:                                             ; preds = %._crit_edge7629
  %3332 = load double, ptr %0, align 8, !tbaa !40
  %3333 = fcmp ogt double %.15416, 0.000000e+00
  %3334 = select i1 %3333, double %.15416, double 1.000000e+00
  %3335 = fdiv double %3332, %3334
  br label %3336

3336:                                             ; preds = %3331, %._crit_edge7629.thread
  %3337 = phi double [ %3330, %._crit_edge7629.thread ], [ %3335, %3331 ]
  %3338 = getelementptr inbounds i8, ptr %0, i64 8
  store double %3337, ptr %3338, align 8, !tbaa !42
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %254) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %253) #8
  br label %3339

3339:                                             ; preds = %.thread6769, %3336
  %.596784 = phi i32 [ %3209, %.thread6769 ], [ 0, %3336 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %246) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %245) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %244) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %243) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %242) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %241) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %240) #8
  br label %6314

3340:                                             ; preds = %541
  %3341 = icmp eq i32 %535, 0
  br i1 %3341, label %3342, label %3573

3342:                                             ; preds = %3340
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %261) #8
  store double 0.000000e+00, ptr %261, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %262) #8
  store double 0.000000e+00, ptr %262, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %263) #8
  store double 0.000000e+00, ptr %263, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %264) #8
  store double 0.000000e+00, ptr %264, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %265) #8
  store double 0.000000e+00, ptr %265, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %266) #8
  store double 0.000000e+00, ptr %266, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %267) #8
  store double 0.000000e+00, ptr %267, align 8, !tbaa !13
  %3343 = icmp sgt i32 %.05043, 0
  br i1 %3343, label %.lr.ph7589, label %._crit_edge7590

.lr.ph7589:                                       ; preds = %3342
  %3344 = icmp sgt i32 %.05042, 0
  %.not6296 = icmp eq ptr %spec.select, null
  %3345 = getelementptr inbounds i8, ptr %0, i64 96
  %3346 = getelementptr inbounds i8, ptr %0, i64 128
  %3347 = getelementptr inbounds i8, ptr %0, i64 136
  %3348 = getelementptr inbounds i8, ptr %0, i64 40
  %3349 = getelementptr inbounds i8, ptr %0, i64 160
  %3350 = getelementptr inbounds i8, ptr %0, i64 168
  %3351 = getelementptr inbounds i8, ptr %0, i64 176
  %3352 = getelementptr inbounds i8, ptr %0, i64 180
  %3353 = getelementptr inbounds i8, ptr %0, i64 48
  %3354 = getelementptr inbounds i8, ptr %0, i64 64
  %3355 = getelementptr inbounds i8, ptr %0, i64 56
  %3356 = getelementptr inbounds i8, ptr %0, i64 80
  %3357 = getelementptr inbounds i8, ptr %0, i64 120
  %3358 = getelementptr inbounds i8, ptr %0, i64 16
  %3359 = sext i32 %.05041 to i64
  %3360 = sext i32 %.05040 to i64
  %wide.trip.count8411 = zext nneg i32 %.05043 to i64
  %wide.trip.count8406 = zext nneg i32 %.05042 to i64
  br label %3361

3361:                                             ; preds = %.lr.ph7589, %3455
  %indvars.iv8408 = phi i64 [ 0, %.lr.ph7589 ], [ %indvars.iv.next8409, %3455 ]
  %.054287587 = phi double [ 0.000000e+00, %.lr.ph7589 ], [ %.15429, %3455 ]
  %.054327586 = phi double [ 0.000000e+00, %.lr.ph7589 ], [ %.15433, %3455 ]
  %.054447585 = phi double [ 0.000000e+00, %.lr.ph7589 ], [ %.15445.lcssa, %3455 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %268) #8
  store double 0.000000e+00, ptr %268, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %269) #8
  store double 0.000000e+00, ptr %269, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %270) #8
  store double 0.000000e+00, ptr %270, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %271) #8
  store double 0.000000e+00, ptr %271, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %272) #8
  store double 0.000000e+00, ptr %272, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %273) #8
  store double 0.000000e+00, ptr %273, align 8, !tbaa !13
  br i1 %3344, label %.lr.ph7581, label %._crit_edge7582

.lr.ph7581:                                       ; preds = %3361
  %3362 = mul nsw i64 %indvars.iv8408, %3359
  %3363 = mul nsw i64 %indvars.iv8408, %3360
  %3364 = trunc nuw nsw i64 %indvars.iv8408 to i32
  %invariant.gep9050 = getelementptr double, ptr %spec.select, i64 %3362
  %invariant.gep9052 = getelementptr double, ptr %spec.select6345, i64 %3363
  br label %3365

3365:                                             ; preds = %.lr.ph7581, %3446
  %indvars.iv8403 = phi i64 [ 0, %.lr.ph7581 ], [ %indvars.iv.next8404, %3446 ]
  %.154457579 = phi double [ %.054447585, %.lr.ph7581 ], [ %.25446, %3446 ]
  br i1 %.not6296, label %3368, label %3366

3366:                                             ; preds = %3365
  %gep9051 = getelementptr double, ptr %invariant.gep9050, i64 %indvars.iv8403
  %3367 = load double, ptr %gep9051, align 8, !tbaa !13
  br label %3368

3368:                                             ; preds = %3365, %3366
  %3369 = phi double [ %3367, %3366 ], [ 0.000000e+00, %3365 ]
  %gep9053 = getelementptr double, ptr %invariant.gep9052, i64 %indvars.iv8403
  %3370 = load double, ptr %gep9053, align 8, !tbaa !13
  %3371 = fcmp oge double %3369, 0.000000e+00
  %3372 = fneg double %3369
  %3373 = select i1 %3371, double %3369, double %3372
  %3374 = fcmp oge double %3370, 0.000000e+00
  %3375 = fneg double %3370
  %3376 = select i1 %3374, double %3370, double %3375
  %3377 = load double, ptr %542, align 8, !tbaa !10
  %3378 = fcmp olt double %3370, %3377
  br i1 %3378, label %3379, label %3380

3379:                                             ; preds = %3368
  store double %3370, ptr %542, align 8, !tbaa !10
  br label %3380

3380:                                             ; preds = %3379, %3368
  %3381 = load double, ptr %3345, align 8, !tbaa !16
  %3382 = fcmp ogt double %3370, %3381
  br i1 %3382, label %3383, label %3384

3383:                                             ; preds = %3380
  store double %3370, ptr %3345, align 8, !tbaa !16
  br label %3384

3384:                                             ; preds = %3383, %3380
  %3385 = fcmp ord double %3369, 0.000000e+00
  %3386 = trunc nuw nsw i64 %indvars.iv8403 to i32
  br i1 %3385, label %3387, label %.thread6794

3387:                                             ; preds = %3384
  %3388 = fcmp ogt double %543, %3373
  %3389 = fcmp oeq double %3369, %3370
  %or.cond6416 = select i1 %3388, i1 true, i1 %3389
  br i1 %or.cond6416, label %3390, label %.thread6794

3390:                                             ; preds = %3387
  br i1 %.not6296, label %3397, label %3391

3391:                                             ; preds = %3390
  %3392 = fcmp olt double %3370, %3369
  br i1 %3392, label %3393, label %3395

3393:                                             ; preds = %3391
  %3394 = fsub double %3369, %3370
  br label %3397

3395:                                             ; preds = %3391
  %3396 = fsub double %3370, %3369
  br label %3397

3397:                                             ; preds = %3390, %3393, %3395
  %3398 = phi double [ %3394, %3393 ], [ %3396, %3395 ], [ 0.000000e+00, %3390 ]
  %3399 = fcmp ugt double %3376, 0.000000e+00
  br i1 %3399, label %3400, label %3404

3400:                                             ; preds = %3397
  %3401 = fcmp ogt double %3376, 0.000000e+00
  %3402 = select i1 %3401, double %3376, double 1.000000e+00
  %3403 = fdiv double %3398, %3402
  br label %3404

3404:                                             ; preds = %3397, %3400
  %3405 = phi double [ %3403, %3400 ], [ %3373, %3397 ]
  %3406 = load double, ptr %3346, align 8, !tbaa !17
  %3407 = fcmp olt double %3369, %3406
  br i1 %3407, label %3408, label %3409

3408:                                             ; preds = %3404
  store double %3369, ptr %3346, align 8, !tbaa !17
  br label %3409

3409:                                             ; preds = %3408, %3404
  %3410 = load double, ptr %3347, align 8, !tbaa !18
  %3411 = fcmp ogt double %3369, %3410
  br i1 %3411, label %3412, label %3413

3412:                                             ; preds = %3409
  store double %3369, ptr %3347, align 8, !tbaa !18
  br label %3413

3413:                                             ; preds = %3412, %3409
  %3414 = load double, ptr %3348, align 8, !tbaa !19
  %3415 = fcmp olt double %3414, %3398
  br i1 %3415, label %3416, label %3417

3416:                                             ; preds = %3413
  store double %3398, ptr %3348, align 8, !tbaa !19
  store double %3370, ptr %3349, align 8, !tbaa !20
  store double %3369, ptr %3350, align 8, !tbaa !21
  store i32 %3386, ptr %3351, align 8, !tbaa !22
  store i32 %3364, ptr %3352, align 4, !tbaa !23
  br label %3417

3417:                                             ; preds = %3416, %3413
  %3418 = load double, ptr %3353, align 8, !tbaa !24
  %3419 = fcmp olt double %3418, %3405
  br i1 %3419, label %3420, label %3421

3420:                                             ; preds = %3417
  store double %3405, ptr %3353, align 8, !tbaa !24
  br label %3421

3421:                                             ; preds = %3420, %3417
  %3422 = fmul double %3405, %3405
  %3423 = fcmp ogt double %543, %3422
  br i1 %3423, label %3424, label %3430

3424:                                             ; preds = %3421
  %3425 = fsub double %3422, %.154457579
  %3426 = load double, ptr %3354, align 8, !tbaa !25
  %3427 = fadd double %3425, %3426
  %3428 = fsub double %3427, %3426
  %3429 = fsub double %3428, %3425
  store double %3427, ptr %3354, align 8, !tbaa !25
  br label %3430

3430:                                             ; preds = %3424, %3421
  %.25446 = phi double [ %3429, %3424 ], [ %.154457579, %3421 ]
  %3431 = call double @libxsmm_kahan_sum(double noundef %3376, ptr noundef nonnull %271, ptr noundef nonnull %268)
  %3432 = call double @libxsmm_kahan_sum(double noundef %3373, ptr noundef nonnull %272, ptr noundef nonnull %269)
  %3433 = call double @libxsmm_kahan_sum(double noundef %3398, ptr noundef nonnull %273, ptr noundef nonnull %270)
  %3434 = fmul double %3370, %3370
  %3435 = call double @libxsmm_kahan_sum(double noundef %3434, ptr noundef nonnull %264, ptr noundef nonnull %262)
  %3436 = fmul double %3369, %3369
  %3437 = call double @libxsmm_kahan_sum(double noundef %3436, ptr noundef nonnull %265, ptr noundef nonnull %263)
  %3438 = fmul double %3398, %3398
  %3439 = fcmp ogt double %543, %3438
  br i1 %3439, label %3440, label %3446

3440:                                             ; preds = %3430
  %3441 = call double @libxsmm_kahan_sum(double noundef %3438, ptr noundef nonnull %3355, ptr noundef nonnull %261)
  br label %3446

.thread6794:                                      ; preds = %3387, %3384
  %3442 = fcmp ord double %3370, 0.000000e+00
  %3443 = fcmp ogt double %543, %3376
  %3444 = select i1 %3442, i1 %3443, i1 false
  %3445 = select i1 %3444, i32 1, i32 2
  store i32 %3386, ptr %3351, align 8, !tbaa !22
  store i32 %3364, ptr %3352, align 4, !tbaa !23
  store double %3370, ptr %3349, align 8, !tbaa !20
  store double %3369, ptr %3350, align 8, !tbaa !21
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %273) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %272) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %271) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %270) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %269) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %268) #8
  br label %3572

3446:                                             ; preds = %3440, %3430
  %indvars.iv.next8404 = add nuw nsw i64 %indvars.iv8403, 1
  %exitcond8407.not = icmp eq i64 %indvars.iv.next8404, %wide.trip.count8406
  br i1 %exitcond8407.not, label %._crit_edge7582.loopexit, label %3365, !llvm.loop !89

._crit_edge7582.loopexit:                         ; preds = %3446
  %.pre8714 = load double, ptr %271, align 8, !tbaa !13
  br label %._crit_edge7582

._crit_edge7582:                                  ; preds = %._crit_edge7582.loopexit, %3361
  %3447 = phi double [ 0.000000e+00, %3361 ], [ %.pre8714, %._crit_edge7582.loopexit ]
  %.15445.lcssa = phi double [ %.054447585, %3361 ], [ %.25446, %._crit_edge7582.loopexit ]
  %3448 = call double @libxsmm_kahan_sum(double noundef %3447, ptr noundef nonnull %3356, ptr noundef nonnull %266)
  %3449 = load double, ptr %272, align 8, !tbaa !13
  %3450 = call double @libxsmm_kahan_sum(double noundef %3449, ptr noundef nonnull %3357, ptr noundef nonnull %267)
  %3451 = load double, ptr %3358, align 8, !tbaa !28
  %3452 = load double, ptr %273, align 8, !tbaa !13
  %3453 = fcmp olt double %3451, %3452
  br i1 %3453, label %3454, label %3455

3454:                                             ; preds = %._crit_edge7582
  store double %3452, ptr %3358, align 8, !tbaa !28
  br label %3455

3455:                                             ; preds = %3454, %._crit_edge7582
  %3456 = load double, ptr %271, align 8, !tbaa !13
  %3457 = fcmp olt double %.054287587, %3456
  %.15429 = select i1 %3457, double %3456, double %.054287587
  %3458 = load double, ptr %272, align 8, !tbaa !13
  %3459 = fcmp olt double %.054327586, %3458
  %.15433 = select i1 %3459, double %3458, double %.054327586
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %273) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %272) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %271) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %270) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %269) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %268) #8
  %indvars.iv.next8409 = add nuw nsw i64 %indvars.iv8408, 1
  %exitcond8412.not = icmp eq i64 %indvars.iv.next8409, %wide.trip.count8411
  br i1 %exitcond8412.not, label %._crit_edge7590, label %3361, !llvm.loop !90

._crit_edge7590:                                  ; preds = %3455, %3342
  %.05432.lcssa = phi double [ 0.000000e+00, %3342 ], [ %.15433, %3455 ]
  %.05428.lcssa = phi double [ 0.000000e+00, %3342 ], [ %.15429, %3455 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %274) #8
  store double 0.000000e+00, ptr %274, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %275) #8
  store double 0.000000e+00, ptr %275, align 8, !tbaa !13
  %3460 = getelementptr inbounds i8, ptr %0, i64 112
  %3461 = load double, ptr %3460, align 8, !tbaa !30
  %3462 = fcmp oeq double %3461, 0.000000e+00
  br i1 %3462, label %3464, label %3463

3463:                                             ; preds = %._crit_edge7590
  call void @__assert_fail(ptr noundef nonnull @.str.1, ptr noundef nonnull @.str.2, i32 noundef 130, ptr noundef nonnull @__PRETTY_FUNCTION__.libxsmm_matdiff) #10
  unreachable

3464:                                             ; preds = %._crit_edge7590
  %3465 = getelementptr inbounds i8, ptr %0, i64 152
  %3466 = load double, ptr %3465, align 8, !tbaa !31
  %3467 = fcmp oeq double %3466, 0.000000e+00
  br i1 %3467, label %3469, label %3468

3468:                                             ; preds = %3464
  call void @__assert_fail(ptr noundef nonnull @.str.3, ptr noundef nonnull @.str.2, i32 noundef 131, ptr noundef nonnull @__PRETTY_FUNCTION__.libxsmm_matdiff) #10
  unreachable

3469:                                             ; preds = %3464
  %.not6297 = icmp eq i64 %538, 0
  br i1 %.not6297, label %3480, label %3470

3470:                                             ; preds = %3469
  %3471 = getelementptr inbounds i8, ptr %0, i64 80
  %3472 = load double, ptr %3471, align 8, !tbaa !32
  %3473 = uitofp i64 %538 to double
  %3474 = fdiv double %3472, %3473
  %3475 = getelementptr inbounds i8, ptr %0, i64 104
  store double %3474, ptr %3475, align 8, !tbaa !33
  %3476 = getelementptr inbounds i8, ptr %0, i64 120
  %3477 = load double, ptr %3476, align 8, !tbaa !34
  %3478 = fdiv double %3477, %3473
  %3479 = getelementptr inbounds i8, ptr %0, i64 144
  store double %3478, ptr %3479, align 8, !tbaa !35
  br label %3480

3480:                                             ; preds = %3470, %3469
  %3481 = fcmp ugt double %.05428.lcssa, 0.000000e+00
  br i1 %3481, label %3482, label %3488

3482:                                             ; preds = %3480
  %3483 = getelementptr inbounds i8, ptr %0, i64 16
  %3484 = load double, ptr %3483, align 8, !tbaa !28
  %3485 = fcmp ogt double %.05428.lcssa, 0.000000e+00
  %3486 = select i1 %3485, double %.05428.lcssa, double 1.000000e+00
  %3487 = fdiv double %3484, %3486
  br label %3488

3488:                                             ; preds = %3480, %3482
  %3489 = phi double [ %3487, %3482 ], [ %.05432.lcssa, %3480 ]
  %3490 = getelementptr inbounds i8, ptr %0, i64 24
  store double %3489, ptr %3490, align 8, !tbaa !36
  %3491 = load double, ptr %264, align 8
  %3492 = fcmp ugt double %3491, 0.000000e+00
  br i1 %3492, label %3499, label %3493

3493:                                             ; preds = %3488
  %3494 = load double, ptr %265, align 8, !tbaa !13
  %3495 = fmul double %3494, %3494
  %3496 = getelementptr inbounds i8, ptr %0, i64 56
  %3497 = load double, ptr %3496, align 8, !tbaa !37
  %3498 = fcmp olt double %3495, %3497
  %.6421 = select i1 %3498, double %3495, double %3497
  br label %3505

3499:                                             ; preds = %3488
  %3500 = getelementptr inbounds i8, ptr %0, i64 56
  %3501 = load double, ptr %3500, align 8, !tbaa !37
  %3502 = fcmp ogt double %3491, 0.000000e+00
  %3503 = select i1 %3502, double %3491, double 1.000000e+00
  %3504 = fdiv double %3501, %3503
  br label %3505

3505:                                             ; preds = %3493, %3499
  %3506 = phi double [ %3504, %3499 ], [ %.6421, %3493 ]
  %3507 = getelementptr inbounds i8, ptr %0, i64 32
  store double %3506, ptr %3507, align 8, !tbaa !38
  %3508 = icmp sgt i32 %.05042, 0
  br i1 %3508, label %.lr.ph7602, label %._crit_edge7603.thread

.lr.ph7602:                                       ; preds = %3505
  %.not6298 = icmp eq ptr %spec.select, null
  %3509 = getelementptr inbounds i8, ptr %0, i64 104
  %3510 = getelementptr inbounds i8, ptr %0, i64 144
  %3511 = sext i32 %.05040 to i64
  %3512 = sext i32 %.05041 to i64
  %wide.trip.count8426 = zext nneg i32 %.05042 to i64
  %wide.trip.count8416 = zext nneg i32 %.05043 to i64
  %wide.trip.count8421 = zext nneg i32 %.05043 to i64
  br label %3513

3513:                                             ; preds = %.lr.ph7602, %3559
  %indvars.iv8423 = phi i64 [ 0, %.lr.ph7602 ], [ %indvars.iv.next8424, %3559 ]
  %.054367600 = phi double [ 0.000000e+00, %.lr.ph7602 ], [ %.15437, %3559 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %276) #8
  store double 0.000000e+00, ptr %276, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %277) #8
  store double 0.000000e+00, ptr %277, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %278) #8
  store double 0.000000e+00, ptr %278, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %279) #8
  store double 0.000000e+00, ptr %279, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %280) #8
  store double 0.000000e+00, ptr %280, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %281) #8
  store double 0.000000e+00, ptr %281, align 8, !tbaa !13
  br i1 %3343, label %.lr.ph7595, label %._crit_edge7596

.lr.ph7595:                                       ; preds = %3513
  %invariant.gep9058 = getelementptr double, ptr %spec.select6345, i64 %indvars.iv8423
  br i1 %.not6298, label %.thread6810.us, label %.lr.ph7595.split.preheader

.lr.ph7595.split.preheader:                       ; preds = %.lr.ph7595
  %invariant.gep9056 = getelementptr double, ptr %spec.select, i64 %indvars.iv8423
  br label %.lr.ph7595.split

.thread6810.us:                                   ; preds = %.lr.ph7595, %.thread6810.us
  %indvars.iv8418 = phi i64 [ %indvars.iv.next8419, %.thread6810.us ], [ 0, %.lr.ph7595 ]
  %3514 = mul nsw i64 %indvars.iv8418, %3511
  %gep9059 = getelementptr double, ptr %invariant.gep9058, i64 %3514
  %3515 = load double, ptr %gep9059, align 8, !tbaa !13
  %3516 = load double, ptr %3509, align 8, !tbaa !33
  %3517 = fsub double %3515, %3516
  %3518 = load double, ptr %3510, align 8, !tbaa !35
  %3519 = fsub double 0.000000e+00, %3518
  %3520 = fcmp oge double %3515, 0.000000e+00
  %3521 = fneg double %3515
  %3522 = select i1 %3520, double %3515, double %3521
  %3523 = fmul double %3517, %3517
  %3524 = call double @libxsmm_kahan_sum(double noundef %3523, ptr noundef nonnull %3460, ptr noundef nonnull %274)
  %3525 = fmul double %3519, %3519
  %3526 = call double @libxsmm_kahan_sum(double noundef %3525, ptr noundef nonnull %3465, ptr noundef nonnull %275)
  %3527 = call double @libxsmm_kahan_sum(double noundef %3522, ptr noundef nonnull %279, ptr noundef nonnull %276)
  %3528 = call double @libxsmm_kahan_sum(double noundef 0.000000e+00, ptr noundef nonnull %280, ptr noundef nonnull %277)
  %3529 = call double @libxsmm_kahan_sum(double noundef 0.000000e+00, ptr noundef nonnull %281, ptr noundef nonnull %278)
  %indvars.iv.next8419 = add nuw nsw i64 %indvars.iv8418, 1
  %exitcond8422.not = icmp eq i64 %indvars.iv.next8419, %wide.trip.count8421
  br i1 %exitcond8422.not, label %._crit_edge7596, label %.thread6810.us, !llvm.loop !91

.lr.ph7595.split:                                 ; preds = %.lr.ph7595.split.preheader, %.lr.ph7595.split
  %indvars.iv8413 = phi i64 [ 0, %.lr.ph7595.split.preheader ], [ %indvars.iv.next8414, %.lr.ph7595.split ]
  %3530 = mul nsw i64 %indvars.iv8413, %3511
  %gep9055 = getelementptr double, ptr %invariant.gep9058, i64 %3530
  %3531 = load double, ptr %gep9055, align 8, !tbaa !13
  %3532 = mul nsw i64 %indvars.iv8413, %3512
  %gep9057 = getelementptr double, ptr %invariant.gep9056, i64 %3532
  %3533 = load double, ptr %gep9057, align 8, !tbaa !13
  %3534 = fcmp olt double %3531, %3533
  %3535 = fsub double %3533, %3531
  %3536 = fsub double %3531, %3533
  %3537 = select i1 %3534, double %3535, double %3536
  %3538 = load double, ptr %3509, align 8, !tbaa !33
  %3539 = fsub double %3531, %3538
  %3540 = load double, ptr %3510, align 8, !tbaa !35
  %3541 = fsub double %3533, %3540
  %3542 = fcmp oge double %3531, 0.000000e+00
  %3543 = fneg double %3531
  %3544 = select i1 %3542, double %3531, double %3543
  %3545 = fcmp oge double %3533, 0.000000e+00
  %3546 = fneg double %3533
  %3547 = select i1 %3545, double %3533, double %3546
  %3548 = fmul double %3539, %3539
  %3549 = call double @libxsmm_kahan_sum(double noundef %3548, ptr noundef nonnull %3460, ptr noundef nonnull %274)
  %3550 = fmul double %3541, %3541
  %3551 = call double @libxsmm_kahan_sum(double noundef %3550, ptr noundef nonnull %3465, ptr noundef nonnull %275)
  %3552 = call double @libxsmm_kahan_sum(double noundef %3544, ptr noundef nonnull %279, ptr noundef nonnull %276)
  %3553 = call double @libxsmm_kahan_sum(double noundef %3547, ptr noundef nonnull %280, ptr noundef nonnull %277)
  %3554 = call double @libxsmm_kahan_sum(double noundef %3537, ptr noundef nonnull %281, ptr noundef nonnull %278)
  %indvars.iv.next8414 = add nuw nsw i64 %indvars.iv8413, 1
  %exitcond8417.not = icmp eq i64 %indvars.iv.next8414, %wide.trip.count8416
  br i1 %exitcond8417.not, label %._crit_edge7596, label %.lr.ph7595.split, !llvm.loop !91

._crit_edge7596:                                  ; preds = %.lr.ph7595.split, %.thread6810.us, %3513
  %3555 = load double, ptr %0, align 8, !tbaa !40
  %3556 = load double, ptr %281, align 8, !tbaa !13
  %3557 = fcmp olt double %3555, %3556
  br i1 %3557, label %3558, label %3559

3558:                                             ; preds = %._crit_edge7596
  store double %3556, ptr %0, align 8, !tbaa !40
  br label %3559

3559:                                             ; preds = %3558, %._crit_edge7596
  %3560 = load double, ptr %279, align 8, !tbaa !13
  %3561 = fcmp olt double %.054367600, %3560
  %.15437 = select i1 %3561, double %3560, double %.054367600
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %281) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %280) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %279) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %278) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %277) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %276) #8
  %indvars.iv.next8424 = add nuw nsw i64 %indvars.iv8423, 1
  %exitcond8427.not = icmp eq i64 %indvars.iv.next8424, %wide.trip.count8426
  br i1 %exitcond8427.not, label %._crit_edge7603, label %3513, !llvm.loop !92

._crit_edge7603:                                  ; preds = %3559
  %3562 = fcmp ugt double %.15437, 0.000000e+00
  br i1 %3562, label %3564, label %._crit_edge7603.thread

._crit_edge7603.thread:                           ; preds = %3505, %._crit_edge7603
  %3563 = load double, ptr %0, align 8, !tbaa !40
  br label %3569

3564:                                             ; preds = %._crit_edge7603
  %3565 = load double, ptr %0, align 8, !tbaa !40
  %3566 = fcmp ogt double %.15437, 0.000000e+00
  %3567 = select i1 %3566, double %.15437, double 1.000000e+00
  %3568 = fdiv double %3565, %3567
  br label %3569

3569:                                             ; preds = %3564, %._crit_edge7603.thread
  %3570 = phi double [ %3563, %._crit_edge7603.thread ], [ %3568, %3564 ]
  %3571 = getelementptr inbounds i8, ptr %0, i64 8
  store double %3570, ptr %3571, align 8, !tbaa !42
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %275) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %274) #8
  br label %3572

3572:                                             ; preds = %.thread6794, %3569
  %.646809 = phi i32 [ %3445, %.thread6794 ], [ 0, %3569 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %267) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %266) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %265) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %264) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %263) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %262) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %261) #8
  br label %6314

3573:                                             ; preds = %3340
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %282) #8
  store double 0.000000e+00, ptr %282, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %283) #8
  store double 0.000000e+00, ptr %283, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %284) #8
  store double 0.000000e+00, ptr %284, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %285) #8
  store double 0.000000e+00, ptr %285, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %286) #8
  store double 0.000000e+00, ptr %286, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %287) #8
  store double 0.000000e+00, ptr %287, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %288) #8
  store double 0.000000e+00, ptr %288, align 8, !tbaa !13
  %3574 = sext i32 %.05042 to i64
  %3575 = sext i32 %.05043 to i64
  %3576 = mul nsw i64 %3574, %3575
  %3577 = tail call i64 @libxsmm_coprime2(i64 noundef %3576)
  %3578 = icmp sgt i32 %.05043, 0
  br i1 %3578, label %.lr.ph7563, label %._crit_edge7564

.lr.ph7563:                                       ; preds = %3573
  %3579 = icmp sgt i32 %.05042, 0
  %.not6293 = icmp eq ptr %spec.select, null
  %3580 = getelementptr inbounds i8, ptr %0, i64 96
  %3581 = getelementptr inbounds i8, ptr %0, i64 128
  %3582 = getelementptr inbounds i8, ptr %0, i64 136
  %3583 = getelementptr inbounds i8, ptr %0, i64 40
  %3584 = getelementptr inbounds i8, ptr %0, i64 160
  %3585 = getelementptr inbounds i8, ptr %0, i64 168
  %3586 = getelementptr inbounds i8, ptr %0, i64 176
  %3587 = getelementptr inbounds i8, ptr %0, i64 180
  %3588 = getelementptr inbounds i8, ptr %0, i64 48
  %3589 = getelementptr inbounds i8, ptr %0, i64 64
  %3590 = getelementptr inbounds i8, ptr %0, i64 56
  %3591 = getelementptr inbounds i8, ptr %0, i64 80
  %3592 = getelementptr inbounds i8, ptr %0, i64 120
  %3593 = getelementptr inbounds i8, ptr %0, i64 16
  %3594 = zext i32 %.05042 to i64
  %wide.trip.count8391 = zext nneg i32 %.05043 to i64
  br label %3595

3595:                                             ; preds = %.lr.ph7563, %3701
  %indvars.iv8388 = phi i64 [ 0, %.lr.ph7563 ], [ %indvars.iv.next8389, %3701 ]
  %.054707561 = phi double [ 0.000000e+00, %.lr.ph7563 ], [ %.15471, %3701 ]
  %.054747560 = phi double [ 0.000000e+00, %.lr.ph7563 ], [ %.15475, %3701 ]
  %.054827559 = phi double [ 0.000000e+00, %.lr.ph7563 ], [ %.15483.lcssa, %3701 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %289) #8
  store double 0.000000e+00, ptr %289, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %290) #8
  store double 0.000000e+00, ptr %290, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %291) #8
  store double 0.000000e+00, ptr %291, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %292) #8
  store double 0.000000e+00, ptr %292, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %293) #8
  store double 0.000000e+00, ptr %293, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %294) #8
  store double 0.000000e+00, ptr %294, align 8, !tbaa !13
  br i1 %3579, label %.lr.ph7555, label %._crit_edge7556

.lr.ph7555:                                       ; preds = %3595
  %3596 = mul nuw nsw i64 %indvars.iv8388, %3594
  br label %3597

3597:                                             ; preds = %.lr.ph7555, %3692
  %indvars.iv8383 = phi i64 [ 0, %.lr.ph7555 ], [ %indvars.iv.next8384, %3692 ]
  %.154837553 = phi double [ %.054827559, %.lr.ph7555 ], [ %.25484, %3692 ]
  %3598 = add nuw nsw i64 %indvars.iv8383, %3596
  %3599 = mul i64 %3577, %3598
  %3600 = urem i64 %3599, %3576
  %3601 = udiv i64 %3600, %3574
  %3602 = trunc i64 %3601 to i32
  %3603 = urem i64 %3600, %3574
  %3604 = trunc nuw i64 %3603 to i32
  br i1 %.not6293, label %3611, label %3605

3605:                                             ; preds = %3597
  %3606 = mul nsw i32 %.05041, %3602
  %3607 = add nsw i32 %3606, %3604
  %3608 = sext i32 %3607 to i64
  %3609 = getelementptr inbounds double, ptr %spec.select, i64 %3608
  %3610 = load double, ptr %3609, align 8, !tbaa !13
  br label %3611

3611:                                             ; preds = %3597, %3605
  %3612 = phi double [ %3610, %3605 ], [ 0.000000e+00, %3597 ]
  %3613 = mul nsw i32 %.05040, %3602
  %3614 = add nsw i32 %3613, %3604
  %3615 = sext i32 %3614 to i64
  %3616 = getelementptr inbounds double, ptr %spec.select6345, i64 %3615
  %3617 = load double, ptr %3616, align 8, !tbaa !13
  %3618 = fcmp oge double %3612, 0.000000e+00
  %3619 = fneg double %3612
  %3620 = select i1 %3618, double %3612, double %3619
  %3621 = fcmp oge double %3617, 0.000000e+00
  %3622 = fneg double %3617
  %3623 = select i1 %3621, double %3617, double %3622
  %3624 = load double, ptr %542, align 8, !tbaa !10
  %3625 = fcmp olt double %3617, %3624
  br i1 %3625, label %3626, label %3627

3626:                                             ; preds = %3611
  store double %3617, ptr %542, align 8, !tbaa !10
  br label %3627

3627:                                             ; preds = %3626, %3611
  %3628 = load double, ptr %3580, align 8, !tbaa !16
  %3629 = fcmp ogt double %3617, %3628
  br i1 %3629, label %3630, label %3631

3630:                                             ; preds = %3627
  store double %3617, ptr %3580, align 8, !tbaa !16
  br label %3631

3631:                                             ; preds = %3630, %3627
  %3632 = fcmp ord double %3612, 0.000000e+00
  br i1 %3632, label %3633, label %.thread6819

3633:                                             ; preds = %3631
  %3634 = fcmp ogt double %543, %3620
  %3635 = fcmp oeq double %3612, %3617
  %or.cond6422 = select i1 %3634, i1 true, i1 %3635
  br i1 %or.cond6422, label %3636, label %.thread6819

3636:                                             ; preds = %3633
  br i1 %.not6293, label %3643, label %3637

3637:                                             ; preds = %3636
  %3638 = fcmp olt double %3617, %3612
  br i1 %3638, label %3639, label %3641

3639:                                             ; preds = %3637
  %3640 = fsub double %3612, %3617
  br label %3643

3641:                                             ; preds = %3637
  %3642 = fsub double %3617, %3612
  br label %3643

3643:                                             ; preds = %3636, %3639, %3641
  %3644 = phi double [ %3640, %3639 ], [ %3642, %3641 ], [ 0.000000e+00, %3636 ]
  %3645 = fcmp ugt double %3623, 0.000000e+00
  br i1 %3645, label %3646, label %3650

3646:                                             ; preds = %3643
  %3647 = fcmp ogt double %3623, 0.000000e+00
  %3648 = select i1 %3647, double %3623, double 1.000000e+00
  %3649 = fdiv double %3644, %3648
  br label %3650

3650:                                             ; preds = %3643, %3646
  %3651 = phi double [ %3649, %3646 ], [ %3620, %3643 ]
  %3652 = load double, ptr %3581, align 8, !tbaa !17
  %3653 = fcmp olt double %3612, %3652
  br i1 %3653, label %3654, label %3655

3654:                                             ; preds = %3650
  store double %3612, ptr %3581, align 8, !tbaa !17
  br label %3655

3655:                                             ; preds = %3654, %3650
  %3656 = load double, ptr %3582, align 8, !tbaa !18
  %3657 = fcmp ogt double %3612, %3656
  br i1 %3657, label %3658, label %3659

3658:                                             ; preds = %3655
  store double %3612, ptr %3582, align 8, !tbaa !18
  br label %3659

3659:                                             ; preds = %3658, %3655
  %3660 = load double, ptr %3583, align 8, !tbaa !19
  %3661 = fcmp olt double %3660, %3644
  br i1 %3661, label %3662, label %3663

3662:                                             ; preds = %3659
  store double %3644, ptr %3583, align 8, !tbaa !19
  store double %3617, ptr %3584, align 8, !tbaa !20
  store double %3612, ptr %3585, align 8, !tbaa !21
  store i32 %3604, ptr %3586, align 8, !tbaa !22
  store i32 %3602, ptr %3587, align 4, !tbaa !23
  br label %3663

3663:                                             ; preds = %3662, %3659
  %3664 = load double, ptr %3588, align 8, !tbaa !24
  %3665 = fcmp olt double %3664, %3651
  br i1 %3665, label %3666, label %3667

3666:                                             ; preds = %3663
  store double %3651, ptr %3588, align 8, !tbaa !24
  br label %3667

3667:                                             ; preds = %3666, %3663
  %3668 = fmul double %3651, %3651
  %3669 = fcmp ogt double %543, %3668
  br i1 %3669, label %3670, label %3676

3670:                                             ; preds = %3667
  %3671 = fsub double %3668, %.154837553
  %3672 = load double, ptr %3589, align 8, !tbaa !25
  %3673 = fadd double %3671, %3672
  %3674 = fsub double %3673, %3672
  %3675 = fsub double %3674, %3671
  store double %3673, ptr %3589, align 8, !tbaa !25
  br label %3676

3676:                                             ; preds = %3670, %3667
  %.25484 = phi double [ %3675, %3670 ], [ %.154837553, %3667 ]
  %3677 = call double @libxsmm_kahan_sum(double noundef %3623, ptr noundef nonnull %292, ptr noundef nonnull %289)
  %3678 = call double @libxsmm_kahan_sum(double noundef %3620, ptr noundef nonnull %293, ptr noundef nonnull %290)
  %3679 = call double @libxsmm_kahan_sum(double noundef %3644, ptr noundef nonnull %294, ptr noundef nonnull %291)
  %3680 = fmul double %3617, %3617
  %3681 = call double @libxsmm_kahan_sum(double noundef %3680, ptr noundef nonnull %285, ptr noundef nonnull %283)
  %3682 = fmul double %3612, %3612
  %3683 = call double @libxsmm_kahan_sum(double noundef %3682, ptr noundef nonnull %286, ptr noundef nonnull %284)
  %3684 = fmul double %3644, %3644
  %3685 = fcmp ogt double %543, %3684
  br i1 %3685, label %3686, label %3692

3686:                                             ; preds = %3676
  %3687 = call double @libxsmm_kahan_sum(double noundef %3684, ptr noundef nonnull %3590, ptr noundef nonnull %282)
  br label %3692

.thread6819:                                      ; preds = %3633, %3631
  %3688 = fcmp ord double %3617, 0.000000e+00
  %3689 = fcmp ogt double %543, %3623
  %3690 = select i1 %3688, i1 %3689, i1 false
  %3691 = select i1 %3690, i32 1, i32 2
  store i32 %3604, ptr %3586, align 8, !tbaa !22
  store i32 %3602, ptr %3587, align 4, !tbaa !23
  store double %3617, ptr %3584, align 8, !tbaa !20
  store double %3612, ptr %3585, align 8, !tbaa !21
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %294) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %293) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %292) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %291) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %290) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %289) #8
  br label %3819

3692:                                             ; preds = %3686, %3676
  %indvars.iv.next8384 = add nuw nsw i64 %indvars.iv8383, 1
  %exitcond8387.not = icmp eq i64 %indvars.iv.next8384, %3594
  br i1 %exitcond8387.not, label %._crit_edge7556.loopexit, label %3597, !llvm.loop !93

._crit_edge7556.loopexit:                         ; preds = %3692
  %.pre8712 = load double, ptr %292, align 8, !tbaa !13
  br label %._crit_edge7556

._crit_edge7556:                                  ; preds = %._crit_edge7556.loopexit, %3595
  %3693 = phi double [ 0.000000e+00, %3595 ], [ %.pre8712, %._crit_edge7556.loopexit ]
  %.15483.lcssa = phi double [ %.054827559, %3595 ], [ %.25484, %._crit_edge7556.loopexit ]
  %3694 = call double @libxsmm_kahan_sum(double noundef %3693, ptr noundef nonnull %3591, ptr noundef nonnull %287)
  %3695 = load double, ptr %293, align 8, !tbaa !13
  %3696 = call double @libxsmm_kahan_sum(double noundef %3695, ptr noundef nonnull %3592, ptr noundef nonnull %288)
  %3697 = load double, ptr %3593, align 8, !tbaa !28
  %3698 = load double, ptr %294, align 8, !tbaa !13
  %3699 = fcmp olt double %3697, %3698
  br i1 %3699, label %3700, label %3701

3700:                                             ; preds = %._crit_edge7556
  store double %3698, ptr %3593, align 8, !tbaa !28
  br label %3701

3701:                                             ; preds = %3700, %._crit_edge7556
  %3702 = load double, ptr %292, align 8, !tbaa !13
  %3703 = fcmp olt double %.054707561, %3702
  %.15471 = select i1 %3703, double %3702, double %.054707561
  %3704 = load double, ptr %293, align 8, !tbaa !13
  %3705 = fcmp olt double %.054747560, %3704
  %.15475 = select i1 %3705, double %3704, double %.054747560
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %294) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %293) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %292) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %291) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %290) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %289) #8
  %indvars.iv.next8389 = add nuw nsw i64 %indvars.iv8388, 1
  %exitcond8392.not = icmp eq i64 %indvars.iv.next8389, %wide.trip.count8391
  br i1 %exitcond8392.not, label %._crit_edge7564, label %3595, !llvm.loop !94

._crit_edge7564:                                  ; preds = %3701, %3573
  %.05474.lcssa = phi double [ 0.000000e+00, %3573 ], [ %.15475, %3701 ]
  %.05470.lcssa = phi double [ 0.000000e+00, %3573 ], [ %.15471, %3701 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %295) #8
  store double 0.000000e+00, ptr %295, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %296) #8
  store double 0.000000e+00, ptr %296, align 8, !tbaa !13
  %3706 = getelementptr inbounds i8, ptr %0, i64 112
  %3707 = load double, ptr %3706, align 8, !tbaa !30
  %3708 = fcmp oeq double %3707, 0.000000e+00
  br i1 %3708, label %3710, label %3709

3709:                                             ; preds = %._crit_edge7564
  call void @__assert_fail(ptr noundef nonnull @.str.1, ptr noundef nonnull @.str.2, i32 noundef 130, ptr noundef nonnull @__PRETTY_FUNCTION__.libxsmm_matdiff) #10
  unreachable

3710:                                             ; preds = %._crit_edge7564
  %3711 = getelementptr inbounds i8, ptr %0, i64 152
  %3712 = load double, ptr %3711, align 8, !tbaa !31
  %3713 = fcmp oeq double %3712, 0.000000e+00
  br i1 %3713, label %3715, label %3714

3714:                                             ; preds = %3710
  call void @__assert_fail(ptr noundef nonnull @.str.3, ptr noundef nonnull @.str.2, i32 noundef 131, ptr noundef nonnull @__PRETTY_FUNCTION__.libxsmm_matdiff) #10
  unreachable

3715:                                             ; preds = %3710
  %.not6294 = icmp eq i64 %538, 0
  br i1 %.not6294, label %3726, label %3716

3716:                                             ; preds = %3715
  %3717 = getelementptr inbounds i8, ptr %0, i64 80
  %3718 = load double, ptr %3717, align 8, !tbaa !32
  %3719 = uitofp i64 %538 to double
  %3720 = fdiv double %3718, %3719
  %3721 = getelementptr inbounds i8, ptr %0, i64 104
  store double %3720, ptr %3721, align 8, !tbaa !33
  %3722 = getelementptr inbounds i8, ptr %0, i64 120
  %3723 = load double, ptr %3722, align 8, !tbaa !34
  %3724 = fdiv double %3723, %3719
  %3725 = getelementptr inbounds i8, ptr %0, i64 144
  store double %3724, ptr %3725, align 8, !tbaa !35
  br label %3726

3726:                                             ; preds = %3716, %3715
  %3727 = fcmp ugt double %.05470.lcssa, 0.000000e+00
  br i1 %3727, label %3728, label %3734

3728:                                             ; preds = %3726
  %3729 = getelementptr inbounds i8, ptr %0, i64 16
  %3730 = load double, ptr %3729, align 8, !tbaa !28
  %3731 = fcmp ogt double %.05470.lcssa, 0.000000e+00
  %3732 = select i1 %3731, double %.05470.lcssa, double 1.000000e+00
  %3733 = fdiv double %3730, %3732
  br label %3734

3734:                                             ; preds = %3726, %3728
  %3735 = phi double [ %3733, %3728 ], [ %.05474.lcssa, %3726 ]
  %3736 = getelementptr inbounds i8, ptr %0, i64 24
  store double %3735, ptr %3736, align 8, !tbaa !36
  %3737 = load double, ptr %285, align 8
  %3738 = fcmp ugt double %3737, 0.000000e+00
  br i1 %3738, label %3745, label %3739

3739:                                             ; preds = %3734
  %3740 = load double, ptr %286, align 8, !tbaa !13
  %3741 = fmul double %3740, %3740
  %3742 = getelementptr inbounds i8, ptr %0, i64 56
  %3743 = load double, ptr %3742, align 8, !tbaa !37
  %3744 = fcmp olt double %3741, %3743
  %.6427 = select i1 %3744, double %3741, double %3743
  br label %3751

3745:                                             ; preds = %3734
  %3746 = getelementptr inbounds i8, ptr %0, i64 56
  %3747 = load double, ptr %3746, align 8, !tbaa !37
  %3748 = fcmp ogt double %3737, 0.000000e+00
  %3749 = select i1 %3748, double %3737, double 1.000000e+00
  %3750 = fdiv double %3747, %3749
  br label %3751

3751:                                             ; preds = %3739, %3745
  %3752 = phi double [ %3750, %3745 ], [ %.6427, %3739 ]
  %3753 = getelementptr inbounds i8, ptr %0, i64 32
  store double %3752, ptr %3753, align 8, !tbaa !38
  %3754 = icmp sgt i32 %.05042, 0
  br i1 %3754, label %.lr.ph7575, label %._crit_edge7576.thread

.lr.ph7575:                                       ; preds = %3751
  %.not6295 = icmp eq ptr %spec.select, null
  %3755 = getelementptr inbounds i8, ptr %0, i64 104
  %3756 = getelementptr inbounds i8, ptr %0, i64 144
  %3757 = zext nneg i32 %.05042 to i64
  %wide.trip.count8396 = zext nneg i32 %.05043 to i64
  br label %3758

3758:                                             ; preds = %.lr.ph7575, %3806
  %indvars.iv8398 = phi i64 [ 0, %.lr.ph7575 ], [ %indvars.iv.next8399, %3806 ]
  %.054787573 = phi double [ 0.000000e+00, %.lr.ph7575 ], [ %.15479, %3806 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %297) #8
  store double 0.000000e+00, ptr %297, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %298) #8
  store double 0.000000e+00, ptr %298, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %299) #8
  store double 0.000000e+00, ptr %299, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %300) #8
  store double 0.000000e+00, ptr %300, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %301) #8
  store double 0.000000e+00, ptr %301, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %302) #8
  store double 0.000000e+00, ptr %302, align 8, !tbaa !13
  br i1 %3578, label %.lr.ph7569, label %._crit_edge7570

.lr.ph7569:                                       ; preds = %3758, %.thread6835
  %indvars.iv8393 = phi i64 [ %indvars.iv.next8394, %.thread6835 ], [ 0, %3758 ]
  %3759 = mul nuw nsw i64 %indvars.iv8393, %3757
  %3760 = add nuw nsw i64 %3759, %indvars.iv8398
  %3761 = mul i64 %3577, %3760
  %3762 = urem i64 %3761, %3576
  %3763 = udiv i64 %3762, %3574
  %3764 = trunc i64 %3763 to i32
  %3765 = urem i64 %3762, %3574
  %3766 = trunc nuw i64 %3765 to i32
  %3767 = mul nsw i32 %.05040, %3764
  %3768 = add nsw i32 %3767, %3766
  %3769 = sext i32 %3768 to i64
  %3770 = getelementptr inbounds double, ptr %spec.select6345, i64 %3769
  %3771 = load double, ptr %3770, align 8, !tbaa !13
  br i1 %.not6295, label %.thread6835, label %3772

3772:                                             ; preds = %.lr.ph7569
  %3773 = mul nsw i32 %.05041, %3764
  %3774 = add nsw i32 %3773, %3766
  %3775 = sext i32 %3774 to i64
  %3776 = getelementptr inbounds double, ptr %spec.select, i64 %3775
  %3777 = load double, ptr %3776, align 8, !tbaa !13
  %3778 = fcmp olt double %3771, %3777
  br i1 %3778, label %3779, label %3781

3779:                                             ; preds = %3772
  %3780 = fsub double %3777, %3771
  br label %.thread6835

3781:                                             ; preds = %3772
  %3782 = fsub double %3771, %3777
  br label %.thread6835

.thread6835:                                      ; preds = %.lr.ph7569, %3779, %3781
  %3783 = phi double [ %3777, %3779 ], [ %3777, %3781 ], [ 0.000000e+00, %.lr.ph7569 ]
  %3784 = phi double [ %3780, %3779 ], [ %3782, %3781 ], [ 0.000000e+00, %.lr.ph7569 ]
  %3785 = load double, ptr %3755, align 8, !tbaa !33
  %3786 = fsub double %3771, %3785
  %3787 = load double, ptr %3756, align 8, !tbaa !35
  %3788 = fsub double %3783, %3787
  %3789 = fcmp oge double %3771, 0.000000e+00
  %3790 = fneg double %3771
  %3791 = select i1 %3789, double %3771, double %3790
  %3792 = fcmp oge double %3783, 0.000000e+00
  %3793 = fneg double %3783
  %3794 = select i1 %3792, double %3783, double %3793
  %3795 = fmul double %3786, %3786
  %3796 = call double @libxsmm_kahan_sum(double noundef %3795, ptr noundef nonnull %3706, ptr noundef nonnull %295)
  %3797 = fmul double %3788, %3788
  %3798 = call double @libxsmm_kahan_sum(double noundef %3797, ptr noundef nonnull %3711, ptr noundef nonnull %296)
  %3799 = call double @libxsmm_kahan_sum(double noundef %3791, ptr noundef nonnull %300, ptr noundef nonnull %297)
  %3800 = call double @libxsmm_kahan_sum(double noundef %3794, ptr noundef nonnull %301, ptr noundef nonnull %298)
  %3801 = call double @libxsmm_kahan_sum(double noundef %3784, ptr noundef nonnull %302, ptr noundef nonnull %299)
  %indvars.iv.next8394 = add nuw nsw i64 %indvars.iv8393, 1
  %exitcond8397.not = icmp eq i64 %indvars.iv.next8394, %wide.trip.count8396
  br i1 %exitcond8397.not, label %._crit_edge7570.loopexit, label %.lr.ph7569, !llvm.loop !95

._crit_edge7570.loopexit:                         ; preds = %.thread6835
  %.pre8713 = load double, ptr %302, align 8, !tbaa !13
  br label %._crit_edge7570

._crit_edge7570:                                  ; preds = %._crit_edge7570.loopexit, %3758
  %3802 = phi double [ %.pre8713, %._crit_edge7570.loopexit ], [ 0.000000e+00, %3758 ]
  %3803 = load double, ptr %0, align 8, !tbaa !40
  %3804 = fcmp olt double %3803, %3802
  br i1 %3804, label %3805, label %3806

3805:                                             ; preds = %._crit_edge7570
  store double %3802, ptr %0, align 8, !tbaa !40
  br label %3806

3806:                                             ; preds = %3805, %._crit_edge7570
  %3807 = load double, ptr %300, align 8, !tbaa !13
  %3808 = fcmp olt double %.054787573, %3807
  %.15479 = select i1 %3808, double %3807, double %.054787573
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %302) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %301) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %300) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %299) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %298) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %297) #8
  %indvars.iv.next8399 = add nuw nsw i64 %indvars.iv8398, 1
  %exitcond8402.not = icmp eq i64 %indvars.iv.next8399, %3757
  br i1 %exitcond8402.not, label %._crit_edge7576, label %3758, !llvm.loop !96

._crit_edge7576:                                  ; preds = %3806
  %3809 = fcmp ugt double %.15479, 0.000000e+00
  br i1 %3809, label %3811, label %._crit_edge7576.thread

._crit_edge7576.thread:                           ; preds = %3751, %._crit_edge7576
  %3810 = load double, ptr %0, align 8, !tbaa !40
  br label %3816

3811:                                             ; preds = %._crit_edge7576
  %3812 = load double, ptr %0, align 8, !tbaa !40
  %3813 = fcmp ogt double %.15479, 0.000000e+00
  %3814 = select i1 %3813, double %.15479, double 1.000000e+00
  %3815 = fdiv double %3812, %3814
  br label %3816

3816:                                             ; preds = %3811, %._crit_edge7576.thread
  %3817 = phi double [ %3810, %._crit_edge7576.thread ], [ %3815, %3811 ]
  %3818 = getelementptr inbounds i8, ptr %0, i64 8
  store double %3817, ptr %3818, align 8, !tbaa !42
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %296) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %295) #8
  br label %3819

3819:                                             ; preds = %.thread6819, %3816
  %.696834 = phi i32 [ %3691, %.thread6819 ], [ 0, %3816 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %288) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %287) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %286) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %285) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %284) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %283) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %282) #8
  br label %6314

3820:                                             ; preds = %541
  %3821 = icmp eq i32 %535, 0
  br i1 %3821, label %3822, label %4058

3822:                                             ; preds = %3820
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %303) #8
  store double 0.000000e+00, ptr %303, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %304) #8
  store double 0.000000e+00, ptr %304, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %305) #8
  store double 0.000000e+00, ptr %305, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %306) #8
  store double 0.000000e+00, ptr %306, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %307) #8
  store double 0.000000e+00, ptr %307, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %308) #8
  store double 0.000000e+00, ptr %308, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %309) #8
  store double 0.000000e+00, ptr %309, align 8, !tbaa !13
  %3823 = icmp sgt i32 %.05043, 0
  br i1 %3823, label %.lr.ph7536, label %._crit_edge7537

.lr.ph7536:                                       ; preds = %3822
  %3824 = icmp sgt i32 %.05042, 0
  %.not6290 = icmp eq ptr %spec.select, null
  %3825 = getelementptr inbounds i8, ptr %0, i64 96
  %3826 = getelementptr inbounds i8, ptr %0, i64 128
  %3827 = getelementptr inbounds i8, ptr %0, i64 136
  %3828 = getelementptr inbounds i8, ptr %0, i64 40
  %3829 = getelementptr inbounds i8, ptr %0, i64 160
  %3830 = getelementptr inbounds i8, ptr %0, i64 168
  %3831 = getelementptr inbounds i8, ptr %0, i64 176
  %3832 = getelementptr inbounds i8, ptr %0, i64 180
  %3833 = getelementptr inbounds i8, ptr %0, i64 48
  %3834 = getelementptr inbounds i8, ptr %0, i64 64
  %3835 = getelementptr inbounds i8, ptr %0, i64 56
  %3836 = getelementptr inbounds i8, ptr %0, i64 80
  %3837 = getelementptr inbounds i8, ptr %0, i64 120
  %3838 = getelementptr inbounds i8, ptr %0, i64 16
  %3839 = sext i32 %.05041 to i64
  %3840 = sext i32 %.05040 to i64
  %wide.trip.count8366 = zext nneg i32 %.05043 to i64
  %wide.trip.count8361 = zext nneg i32 %.05042 to i64
  br label %3841

3841:                                             ; preds = %.lr.ph7536, %3937
  %indvars.iv8363 = phi i64 [ 0, %.lr.ph7536 ], [ %indvars.iv.next8364, %3937 ]
  %.054917534 = phi double [ 0.000000e+00, %.lr.ph7536 ], [ %.15492, %3937 ]
  %.054957533 = phi double [ 0.000000e+00, %.lr.ph7536 ], [ %.15496, %3937 ]
  %.055037532 = phi double [ 0.000000e+00, %.lr.ph7536 ], [ %.15504.lcssa, %3937 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %310) #8
  store double 0.000000e+00, ptr %310, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %311) #8
  store double 0.000000e+00, ptr %311, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %312) #8
  store double 0.000000e+00, ptr %312, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %313) #8
  store double 0.000000e+00, ptr %313, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %314) #8
  store double 0.000000e+00, ptr %314, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %315) #8
  store double 0.000000e+00, ptr %315, align 8, !tbaa !13
  br i1 %3824, label %.lr.ph7528, label %._crit_edge7529

.lr.ph7528:                                       ; preds = %3841
  %3842 = mul nsw i64 %indvars.iv8363, %3839
  %3843 = mul nsw i64 %indvars.iv8363, %3840
  %3844 = trunc nuw nsw i64 %indvars.iv8363 to i32
  %invariant.gep9040 = getelementptr float, ptr %spec.select, i64 %3842
  %invariant.gep9042 = getelementptr float, ptr %spec.select6345, i64 %3843
  br label %3845

3845:                                             ; preds = %.lr.ph7528, %3928
  %indvars.iv8358 = phi i64 [ 0, %.lr.ph7528 ], [ %indvars.iv.next8359, %3928 ]
  %.155047526 = phi double [ %.055037532, %.lr.ph7528 ], [ %.25505, %3928 ]
  br i1 %.not6290, label %3848, label %3846

3846:                                             ; preds = %3845
  %gep9041 = getelementptr float, ptr %invariant.gep9040, i64 %indvars.iv8358
  %3847 = load float, ptr %gep9041, align 4, !tbaa !97
  br label %3848

3848:                                             ; preds = %3845, %3846
  %3849 = phi float [ %3847, %3846 ], [ 0.000000e+00, %3845 ]
  %3850 = fpext float %3849 to double
  %gep9043 = getelementptr float, ptr %invariant.gep9042, i64 %indvars.iv8358
  %3851 = load float, ptr %gep9043, align 4, !tbaa !97
  %3852 = fpext float %3851 to double
  %3853 = fcmp oge float %3849, 0.000000e+00
  %3854 = fneg double %3850
  %3855 = select i1 %3853, double %3850, double %3854
  %3856 = fcmp oge float %3851, 0.000000e+00
  %3857 = fneg double %3852
  %3858 = select i1 %3856, double %3852, double %3857
  %3859 = load double, ptr %542, align 8, !tbaa !10
  %3860 = fcmp ogt double %3859, %3852
  br i1 %3860, label %3861, label %3862

3861:                                             ; preds = %3848
  store double %3852, ptr %542, align 8, !tbaa !10
  br label %3862

3862:                                             ; preds = %3861, %3848
  %3863 = load double, ptr %3825, align 8, !tbaa !16
  %3864 = fcmp olt double %3863, %3852
  br i1 %3864, label %3865, label %3866

3865:                                             ; preds = %3862
  store double %3852, ptr %3825, align 8, !tbaa !16
  br label %3866

3866:                                             ; preds = %3865, %3862
  %3867 = fcmp ord float %3849, 0.000000e+00
  %3868 = trunc nuw nsw i64 %indvars.iv8358 to i32
  br i1 %3867, label %3869, label %.thread6844

3869:                                             ; preds = %3866
  %3870 = fcmp ogt double %543, %3855
  %3871 = fcmp oeq float %3849, %3851
  %or.cond6428 = select i1 %3870, i1 true, i1 %3871
  br i1 %or.cond6428, label %3872, label %.thread6844

3872:                                             ; preds = %3869
  br i1 %.not6290, label %3879, label %3873

3873:                                             ; preds = %3872
  %3874 = fcmp olt float %3851, %3849
  br i1 %3874, label %3875, label %3877

3875:                                             ; preds = %3873
  %3876 = fsub double %3850, %3852
  br label %3879

3877:                                             ; preds = %3873
  %3878 = fsub double %3852, %3850
  br label %3879

3879:                                             ; preds = %3872, %3875, %3877
  %3880 = phi double [ %3876, %3875 ], [ %3878, %3877 ], [ 0.000000e+00, %3872 ]
  %3881 = fcmp ugt double %3858, 0.000000e+00
  br i1 %3881, label %3882, label %3886

3882:                                             ; preds = %3879
  %3883 = fcmp ogt double %3858, 0.000000e+00
  %3884 = select i1 %3883, double %3858, double 1.000000e+00
  %3885 = fdiv double %3880, %3884
  br label %3886

3886:                                             ; preds = %3879, %3882
  %3887 = phi double [ %3885, %3882 ], [ %3855, %3879 ]
  %3888 = load double, ptr %3826, align 8, !tbaa !17
  %3889 = fcmp ogt double %3888, %3850
  br i1 %3889, label %3890, label %3891

3890:                                             ; preds = %3886
  store double %3850, ptr %3826, align 8, !tbaa !17
  br label %3891

3891:                                             ; preds = %3890, %3886
  %3892 = load double, ptr %3827, align 8, !tbaa !18
  %3893 = fcmp olt double %3892, %3850
  br i1 %3893, label %3894, label %3895

3894:                                             ; preds = %3891
  store double %3850, ptr %3827, align 8, !tbaa !18
  br label %3895

3895:                                             ; preds = %3894, %3891
  %3896 = load double, ptr %3828, align 8, !tbaa !19
  %3897 = fcmp olt double %3896, %3880
  br i1 %3897, label %3898, label %3899

3898:                                             ; preds = %3895
  store double %3880, ptr %3828, align 8, !tbaa !19
  store double %3852, ptr %3829, align 8, !tbaa !20
  store double %3850, ptr %3830, align 8, !tbaa !21
  store i32 %3868, ptr %3831, align 8, !tbaa !22
  store i32 %3844, ptr %3832, align 4, !tbaa !23
  br label %3899

3899:                                             ; preds = %3898, %3895
  %3900 = load double, ptr %3833, align 8, !tbaa !24
  %3901 = fcmp olt double %3900, %3887
  br i1 %3901, label %3902, label %3903

3902:                                             ; preds = %3899
  store double %3887, ptr %3833, align 8, !tbaa !24
  br label %3903

3903:                                             ; preds = %3902, %3899
  %3904 = fmul double %3887, %3887
  %3905 = fcmp ogt double %543, %3904
  br i1 %3905, label %3906, label %3912

3906:                                             ; preds = %3903
  %3907 = fsub double %3904, %.155047526
  %3908 = load double, ptr %3834, align 8, !tbaa !25
  %3909 = fadd double %3907, %3908
  %3910 = fsub double %3909, %3908
  %3911 = fsub double %3910, %3907
  store double %3909, ptr %3834, align 8, !tbaa !25
  br label %3912

3912:                                             ; preds = %3906, %3903
  %.25505 = phi double [ %3911, %3906 ], [ %.155047526, %3903 ]
  %3913 = call double @libxsmm_kahan_sum(double noundef %3858, ptr noundef nonnull %313, ptr noundef nonnull %310)
  %3914 = call double @libxsmm_kahan_sum(double noundef %3855, ptr noundef nonnull %314, ptr noundef nonnull %311)
  %3915 = call double @libxsmm_kahan_sum(double noundef %3880, ptr noundef nonnull %315, ptr noundef nonnull %312)
  %3916 = fmul double %3852, %3852
  %3917 = call double @libxsmm_kahan_sum(double noundef %3916, ptr noundef nonnull %306, ptr noundef nonnull %304)
  %3918 = fmul double %3850, %3850
  %3919 = call double @libxsmm_kahan_sum(double noundef %3918, ptr noundef nonnull %307, ptr noundef nonnull %305)
  %3920 = fmul double %3880, %3880
  %3921 = fcmp ogt double %543, %3920
  br i1 %3921, label %3922, label %3928

3922:                                             ; preds = %3912
  %3923 = call double @libxsmm_kahan_sum(double noundef %3920, ptr noundef nonnull %3835, ptr noundef nonnull %303)
  br label %3928

.thread6844:                                      ; preds = %3869, %3866
  %3924 = fcmp ord float %3851, 0.000000e+00
  %3925 = fcmp ogt double %543, %3858
  %3926 = select i1 %3924, i1 %3925, i1 false
  %3927 = select i1 %3926, i32 1, i32 2
  store i32 %3868, ptr %3831, align 8, !tbaa !22
  store i32 %3844, ptr %3832, align 4, !tbaa !23
  store double %3852, ptr %3829, align 8, !tbaa !20
  store double %3850, ptr %3830, align 8, !tbaa !21
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %315) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %314) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %313) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %312) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %311) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %310) #8
  br label %4057

3928:                                             ; preds = %3922, %3912
  %indvars.iv.next8359 = add nuw nsw i64 %indvars.iv8358, 1
  %exitcond8362.not = icmp eq i64 %indvars.iv.next8359, %wide.trip.count8361
  br i1 %exitcond8362.not, label %._crit_edge7529.loopexit, label %3845, !llvm.loop !99

._crit_edge7529.loopexit:                         ; preds = %3928
  %.pre8711 = load double, ptr %313, align 8, !tbaa !13
  br label %._crit_edge7529

._crit_edge7529:                                  ; preds = %._crit_edge7529.loopexit, %3841
  %3929 = phi double [ 0.000000e+00, %3841 ], [ %.pre8711, %._crit_edge7529.loopexit ]
  %.15504.lcssa = phi double [ %.055037532, %3841 ], [ %.25505, %._crit_edge7529.loopexit ]
  %3930 = call double @libxsmm_kahan_sum(double noundef %3929, ptr noundef nonnull %3836, ptr noundef nonnull %308)
  %3931 = load double, ptr %314, align 8, !tbaa !13
  %3932 = call double @libxsmm_kahan_sum(double noundef %3931, ptr noundef nonnull %3837, ptr noundef nonnull %309)
  %3933 = load double, ptr %3838, align 8, !tbaa !28
  %3934 = load double, ptr %315, align 8, !tbaa !13
  %3935 = fcmp olt double %3933, %3934
  br i1 %3935, label %3936, label %3937

3936:                                             ; preds = %._crit_edge7529
  store double %3934, ptr %3838, align 8, !tbaa !28
  br label %3937

3937:                                             ; preds = %3936, %._crit_edge7529
  %3938 = load double, ptr %313, align 8, !tbaa !13
  %3939 = fcmp olt double %.054917534, %3938
  %.15492 = select i1 %3939, double %3938, double %.054917534
  %3940 = load double, ptr %314, align 8, !tbaa !13
  %3941 = fcmp olt double %.054957533, %3940
  %.15496 = select i1 %3941, double %3940, double %.054957533
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %315) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %314) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %313) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %312) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %311) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %310) #8
  %indvars.iv.next8364 = add nuw nsw i64 %indvars.iv8363, 1
  %exitcond8367.not = icmp eq i64 %indvars.iv.next8364, %wide.trip.count8366
  br i1 %exitcond8367.not, label %._crit_edge7537, label %3841, !llvm.loop !100

._crit_edge7537:                                  ; preds = %3937, %3822
  %.05495.lcssa = phi double [ 0.000000e+00, %3822 ], [ %.15496, %3937 ]
  %.05491.lcssa = phi double [ 0.000000e+00, %3822 ], [ %.15492, %3937 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %316) #8
  store double 0.000000e+00, ptr %316, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %317) #8
  store double 0.000000e+00, ptr %317, align 8, !tbaa !13
  %3942 = getelementptr inbounds i8, ptr %0, i64 112
  %3943 = load double, ptr %3942, align 8, !tbaa !30
  %3944 = fcmp oeq double %3943, 0.000000e+00
  br i1 %3944, label %3946, label %3945

3945:                                             ; preds = %._crit_edge7537
  call void @__assert_fail(ptr noundef nonnull @.str.1, ptr noundef nonnull @.str.2, i32 noundef 130, ptr noundef nonnull @__PRETTY_FUNCTION__.libxsmm_matdiff) #10
  unreachable

3946:                                             ; preds = %._crit_edge7537
  %3947 = getelementptr inbounds i8, ptr %0, i64 152
  %3948 = load double, ptr %3947, align 8, !tbaa !31
  %3949 = fcmp oeq double %3948, 0.000000e+00
  br i1 %3949, label %3951, label %3950

3950:                                             ; preds = %3946
  call void @__assert_fail(ptr noundef nonnull @.str.3, ptr noundef nonnull @.str.2, i32 noundef 131, ptr noundef nonnull @__PRETTY_FUNCTION__.libxsmm_matdiff) #10
  unreachable

3951:                                             ; preds = %3946
  %.not6291 = icmp eq i64 %538, 0
  br i1 %.not6291, label %3962, label %3952

3952:                                             ; preds = %3951
  %3953 = getelementptr inbounds i8, ptr %0, i64 80
  %3954 = load double, ptr %3953, align 8, !tbaa !32
  %3955 = uitofp i64 %538 to double
  %3956 = fdiv double %3954, %3955
  %3957 = getelementptr inbounds i8, ptr %0, i64 104
  store double %3956, ptr %3957, align 8, !tbaa !33
  %3958 = getelementptr inbounds i8, ptr %0, i64 120
  %3959 = load double, ptr %3958, align 8, !tbaa !34
  %3960 = fdiv double %3959, %3955
  %3961 = getelementptr inbounds i8, ptr %0, i64 144
  store double %3960, ptr %3961, align 8, !tbaa !35
  br label %3962

3962:                                             ; preds = %3952, %3951
  %3963 = fcmp ugt double %.05491.lcssa, 0.000000e+00
  br i1 %3963, label %3964, label %3970

3964:                                             ; preds = %3962
  %3965 = getelementptr inbounds i8, ptr %0, i64 16
  %3966 = load double, ptr %3965, align 8, !tbaa !28
  %3967 = fcmp ogt double %.05491.lcssa, 0.000000e+00
  %3968 = select i1 %3967, double %.05491.lcssa, double 1.000000e+00
  %3969 = fdiv double %3966, %3968
  br label %3970

3970:                                             ; preds = %3962, %3964
  %3971 = phi double [ %3969, %3964 ], [ %.05495.lcssa, %3962 ]
  %3972 = getelementptr inbounds i8, ptr %0, i64 24
  store double %3971, ptr %3972, align 8, !tbaa !36
  %3973 = load double, ptr %306, align 8
  %3974 = fcmp ugt double %3973, 0.000000e+00
  br i1 %3974, label %3981, label %3975

3975:                                             ; preds = %3970
  %3976 = load double, ptr %307, align 8, !tbaa !13
  %3977 = fmul double %3976, %3976
  %3978 = getelementptr inbounds i8, ptr %0, i64 56
  %3979 = load double, ptr %3978, align 8, !tbaa !37
  %3980 = fcmp olt double %3977, %3979
  %.6433 = select i1 %3980, double %3977, double %3979
  br label %3987

3981:                                             ; preds = %3970
  %3982 = getelementptr inbounds i8, ptr %0, i64 56
  %3983 = load double, ptr %3982, align 8, !tbaa !37
  %3984 = fcmp ogt double %3973, 0.000000e+00
  %3985 = select i1 %3984, double %3973, double 1.000000e+00
  %3986 = fdiv double %3983, %3985
  br label %3987

3987:                                             ; preds = %3975, %3981
  %3988 = phi double [ %3986, %3981 ], [ %.6433, %3975 ]
  %3989 = getelementptr inbounds i8, ptr %0, i64 32
  store double %3988, ptr %3989, align 8, !tbaa !38
  %3990 = icmp sgt i32 %.05042, 0
  br i1 %3990, label %.lr.ph7549, label %._crit_edge7550.thread

.lr.ph7549:                                       ; preds = %3987
  %.not6292 = icmp eq ptr %spec.select, null
  %3991 = getelementptr inbounds i8, ptr %0, i64 104
  %3992 = getelementptr inbounds i8, ptr %0, i64 144
  %3993 = sext i32 %.05040 to i64
  %3994 = sext i32 %.05041 to i64
  %wide.trip.count8381 = zext nneg i32 %.05042 to i64
  %wide.trip.count8371 = zext nneg i32 %.05043 to i64
  %wide.trip.count8376 = zext nneg i32 %.05043 to i64
  br label %3995

3995:                                             ; preds = %.lr.ph7549, %4044
  %indvars.iv8378 = phi i64 [ 0, %.lr.ph7549 ], [ %indvars.iv.next8379, %4044 ]
  %.054997547 = phi double [ 0.000000e+00, %.lr.ph7549 ], [ %.15500, %4044 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %318) #8
  store double 0.000000e+00, ptr %318, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %319) #8
  store double 0.000000e+00, ptr %319, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %320) #8
  store double 0.000000e+00, ptr %320, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %321) #8
  store double 0.000000e+00, ptr %321, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %322) #8
  store double 0.000000e+00, ptr %322, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %323) #8
  store double 0.000000e+00, ptr %323, align 8, !tbaa !13
  br i1 %3823, label %.lr.ph7542, label %._crit_edge7543

.lr.ph7542:                                       ; preds = %3995
  %invariant.gep9048 = getelementptr float, ptr %spec.select6345, i64 %indvars.iv8378
  br i1 %.not6292, label %.thread6860.us, label %.lr.ph7542.split.preheader

.lr.ph7542.split.preheader:                       ; preds = %.lr.ph7542
  %invariant.gep9046 = getelementptr float, ptr %spec.select, i64 %indvars.iv8378
  br label %.lr.ph7542.split

.thread6860.us:                                   ; preds = %.lr.ph7542, %.thread6860.us
  %indvars.iv8373 = phi i64 [ %indvars.iv.next8374, %.thread6860.us ], [ 0, %.lr.ph7542 ]
  %3996 = mul nsw i64 %indvars.iv8373, %3993
  %gep9049 = getelementptr float, ptr %invariant.gep9048, i64 %3996
  %3997 = load float, ptr %gep9049, align 4, !tbaa !97
  %3998 = fpext float %3997 to double
  %3999 = load double, ptr %3991, align 8, !tbaa !33
  %4000 = fsub double %3998, %3999
  %4001 = load double, ptr %3992, align 8, !tbaa !35
  %4002 = fsub double 0.000000e+00, %4001
  %4003 = fcmp oge float %3997, 0.000000e+00
  %4004 = fneg double %3998
  %4005 = select i1 %4003, double %3998, double %4004
  %4006 = fmul double %4000, %4000
  %4007 = call double @libxsmm_kahan_sum(double noundef %4006, ptr noundef nonnull %3942, ptr noundef nonnull %316)
  %4008 = fmul double %4002, %4002
  %4009 = call double @libxsmm_kahan_sum(double noundef %4008, ptr noundef nonnull %3947, ptr noundef nonnull %317)
  %4010 = call double @libxsmm_kahan_sum(double noundef %4005, ptr noundef nonnull %321, ptr noundef nonnull %318)
  %4011 = call double @libxsmm_kahan_sum(double noundef 0.000000e+00, ptr noundef nonnull %322, ptr noundef nonnull %319)
  %4012 = call double @libxsmm_kahan_sum(double noundef 0.000000e+00, ptr noundef nonnull %323, ptr noundef nonnull %320)
  %indvars.iv.next8374 = add nuw nsw i64 %indvars.iv8373, 1
  %exitcond8377.not = icmp eq i64 %indvars.iv.next8374, %wide.trip.count8376
  br i1 %exitcond8377.not, label %._crit_edge7543, label %.thread6860.us, !llvm.loop !101

.lr.ph7542.split:                                 ; preds = %.lr.ph7542.split.preheader, %.lr.ph7542.split
  %indvars.iv8368 = phi i64 [ 0, %.lr.ph7542.split.preheader ], [ %indvars.iv.next8369, %.lr.ph7542.split ]
  %4013 = mul nsw i64 %indvars.iv8368, %3993
  %gep9045 = getelementptr float, ptr %invariant.gep9048, i64 %4013
  %4014 = load float, ptr %gep9045, align 4, !tbaa !97
  %4015 = fpext float %4014 to double
  %4016 = mul nsw i64 %indvars.iv8368, %3994
  %gep9047 = getelementptr float, ptr %invariant.gep9046, i64 %4016
  %4017 = load float, ptr %gep9047, align 4, !tbaa !97
  %4018 = fpext float %4017 to double
  %4019 = fcmp olt float %4014, %4017
  %4020 = fsub double %4018, %4015
  %4021 = fsub double %4015, %4018
  %4022 = select i1 %4019, double %4020, double %4021
  %4023 = load double, ptr %3991, align 8, !tbaa !33
  %4024 = fsub double %4015, %4023
  %4025 = load double, ptr %3992, align 8, !tbaa !35
  %4026 = fsub double %4018, %4025
  %4027 = fcmp oge float %4014, 0.000000e+00
  %4028 = fneg double %4015
  %4029 = select i1 %4027, double %4015, double %4028
  %4030 = fcmp oge float %4017, 0.000000e+00
  %4031 = fneg double %4018
  %4032 = select i1 %4030, double %4018, double %4031
  %4033 = fmul double %4024, %4024
  %4034 = call double @libxsmm_kahan_sum(double noundef %4033, ptr noundef nonnull %3942, ptr noundef nonnull %316)
  %4035 = fmul double %4026, %4026
  %4036 = call double @libxsmm_kahan_sum(double noundef %4035, ptr noundef nonnull %3947, ptr noundef nonnull %317)
  %4037 = call double @libxsmm_kahan_sum(double noundef %4029, ptr noundef nonnull %321, ptr noundef nonnull %318)
  %4038 = call double @libxsmm_kahan_sum(double noundef %4032, ptr noundef nonnull %322, ptr noundef nonnull %319)
  %4039 = call double @libxsmm_kahan_sum(double noundef %4022, ptr noundef nonnull %323, ptr noundef nonnull %320)
  %indvars.iv.next8369 = add nuw nsw i64 %indvars.iv8368, 1
  %exitcond8372.not = icmp eq i64 %indvars.iv.next8369, %wide.trip.count8371
  br i1 %exitcond8372.not, label %._crit_edge7543, label %.lr.ph7542.split, !llvm.loop !101

._crit_edge7543:                                  ; preds = %.lr.ph7542.split, %.thread6860.us, %3995
  %4040 = load double, ptr %0, align 8, !tbaa !40
  %4041 = load double, ptr %323, align 8, !tbaa !13
  %4042 = fcmp olt double %4040, %4041
  br i1 %4042, label %4043, label %4044

4043:                                             ; preds = %._crit_edge7543
  store double %4041, ptr %0, align 8, !tbaa !40
  br label %4044

4044:                                             ; preds = %4043, %._crit_edge7543
  %4045 = load double, ptr %321, align 8, !tbaa !13
  %4046 = fcmp olt double %.054997547, %4045
  %.15500 = select i1 %4046, double %4045, double %.054997547
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %323) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %322) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %321) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %320) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %319) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %318) #8
  %indvars.iv.next8379 = add nuw nsw i64 %indvars.iv8378, 1
  %exitcond8382.not = icmp eq i64 %indvars.iv.next8379, %wide.trip.count8381
  br i1 %exitcond8382.not, label %._crit_edge7550, label %3995, !llvm.loop !102

._crit_edge7550:                                  ; preds = %4044
  %4047 = fcmp ugt double %.15500, 0.000000e+00
  br i1 %4047, label %4049, label %._crit_edge7550.thread

._crit_edge7550.thread:                           ; preds = %3987, %._crit_edge7550
  %4048 = load double, ptr %0, align 8, !tbaa !40
  br label %4054

4049:                                             ; preds = %._crit_edge7550
  %4050 = load double, ptr %0, align 8, !tbaa !40
  %4051 = fcmp ogt double %.15500, 0.000000e+00
  %4052 = select i1 %4051, double %.15500, double 1.000000e+00
  %4053 = fdiv double %4050, %4052
  br label %4054

4054:                                             ; preds = %4049, %._crit_edge7550.thread
  %4055 = phi double [ %4048, %._crit_edge7550.thread ], [ %4053, %4049 ]
  %4056 = getelementptr inbounds i8, ptr %0, i64 8
  store double %4055, ptr %4056, align 8, !tbaa !42
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %317) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %316) #8
  br label %4057

4057:                                             ; preds = %.thread6844, %4054
  %.746859 = phi i32 [ %3927, %.thread6844 ], [ 0, %4054 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %309) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %308) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %307) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %306) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %305) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %304) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %303) #8
  br label %6314

4058:                                             ; preds = %3820
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %324) #8
  store double 0.000000e+00, ptr %324, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %325) #8
  store double 0.000000e+00, ptr %325, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %326) #8
  store double 0.000000e+00, ptr %326, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %327) #8
  store double 0.000000e+00, ptr %327, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %328) #8
  store double 0.000000e+00, ptr %328, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %329) #8
  store double 0.000000e+00, ptr %329, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %330) #8
  store double 0.000000e+00, ptr %330, align 8, !tbaa !13
  %4059 = sext i32 %.05042 to i64
  %4060 = sext i32 %.05043 to i64
  %4061 = mul nsw i64 %4059, %4060
  %4062 = tail call i64 @libxsmm_coprime2(i64 noundef %4061)
  %4063 = icmp sgt i32 %.05043, 0
  br i1 %4063, label %.lr.ph7510, label %._crit_edge7511

.lr.ph7510:                                       ; preds = %4058
  %4064 = icmp sgt i32 %.05042, 0
  %.not6287 = icmp eq ptr %spec.select, null
  %4065 = getelementptr inbounds i8, ptr %0, i64 96
  %4066 = getelementptr inbounds i8, ptr %0, i64 128
  %4067 = getelementptr inbounds i8, ptr %0, i64 136
  %4068 = getelementptr inbounds i8, ptr %0, i64 40
  %4069 = getelementptr inbounds i8, ptr %0, i64 160
  %4070 = getelementptr inbounds i8, ptr %0, i64 168
  %4071 = getelementptr inbounds i8, ptr %0, i64 176
  %4072 = getelementptr inbounds i8, ptr %0, i64 180
  %4073 = getelementptr inbounds i8, ptr %0, i64 48
  %4074 = getelementptr inbounds i8, ptr %0, i64 64
  %4075 = getelementptr inbounds i8, ptr %0, i64 56
  %4076 = getelementptr inbounds i8, ptr %0, i64 80
  %4077 = getelementptr inbounds i8, ptr %0, i64 120
  %4078 = getelementptr inbounds i8, ptr %0, i64 16
  %4079 = zext i32 %.05042 to i64
  %wide.trip.count8346 = zext nneg i32 %.05043 to i64
  br label %4080

4080:                                             ; preds = %.lr.ph7510, %4188
  %indvars.iv8343 = phi i64 [ 0, %.lr.ph7510 ], [ %indvars.iv.next8344, %4188 ]
  %.055127508 = phi double [ 0.000000e+00, %.lr.ph7510 ], [ %.15513, %4188 ]
  %.055167507 = phi double [ 0.000000e+00, %.lr.ph7510 ], [ %.15517, %4188 ]
  %.055457506 = phi double [ 0.000000e+00, %.lr.ph7510 ], [ %.15546.lcssa, %4188 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %331) #8
  store double 0.000000e+00, ptr %331, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %332) #8
  store double 0.000000e+00, ptr %332, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %333) #8
  store double 0.000000e+00, ptr %333, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %334) #8
  store double 0.000000e+00, ptr %334, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %335) #8
  store double 0.000000e+00, ptr %335, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %336) #8
  store double 0.000000e+00, ptr %336, align 8, !tbaa !13
  br i1 %4064, label %.lr.ph7502, label %._crit_edge7503

.lr.ph7502:                                       ; preds = %4080
  %4081 = mul nuw nsw i64 %indvars.iv8343, %4079
  br label %4082

4082:                                             ; preds = %.lr.ph7502, %4179
  %indvars.iv8338 = phi i64 [ 0, %.lr.ph7502 ], [ %indvars.iv.next8339, %4179 ]
  %.155467500 = phi double [ %.055457506, %.lr.ph7502 ], [ %.25547, %4179 ]
  %4083 = add nuw nsw i64 %indvars.iv8338, %4081
  %4084 = mul i64 %4062, %4083
  %4085 = urem i64 %4084, %4061
  %4086 = udiv i64 %4085, %4059
  %4087 = trunc i64 %4086 to i32
  %4088 = urem i64 %4085, %4059
  %4089 = trunc nuw i64 %4088 to i32
  br i1 %.not6287, label %4096, label %4090

4090:                                             ; preds = %4082
  %4091 = mul nsw i32 %.05041, %4087
  %4092 = add nsw i32 %4091, %4089
  %4093 = sext i32 %4092 to i64
  %4094 = getelementptr inbounds float, ptr %spec.select, i64 %4093
  %4095 = load float, ptr %4094, align 4, !tbaa !97
  br label %4096

4096:                                             ; preds = %4082, %4090
  %4097 = phi float [ %4095, %4090 ], [ 0.000000e+00, %4082 ]
  %4098 = fpext float %4097 to double
  %4099 = mul nsw i32 %.05040, %4087
  %4100 = add nsw i32 %4099, %4089
  %4101 = sext i32 %4100 to i64
  %4102 = getelementptr inbounds float, ptr %spec.select6345, i64 %4101
  %4103 = load float, ptr %4102, align 4, !tbaa !97
  %4104 = fpext float %4103 to double
  %4105 = fcmp oge float %4097, 0.000000e+00
  %4106 = fneg double %4098
  %4107 = select i1 %4105, double %4098, double %4106
  %4108 = fcmp oge float %4103, 0.000000e+00
  %4109 = fneg double %4104
  %4110 = select i1 %4108, double %4104, double %4109
  %4111 = load double, ptr %542, align 8, !tbaa !10
  %4112 = fcmp ogt double %4111, %4104
  br i1 %4112, label %4113, label %4114

4113:                                             ; preds = %4096
  store double %4104, ptr %542, align 8, !tbaa !10
  br label %4114

4114:                                             ; preds = %4113, %4096
  %4115 = load double, ptr %4065, align 8, !tbaa !16
  %4116 = fcmp olt double %4115, %4104
  br i1 %4116, label %4117, label %4118

4117:                                             ; preds = %4114
  store double %4104, ptr %4065, align 8, !tbaa !16
  br label %4118

4118:                                             ; preds = %4117, %4114
  %4119 = fcmp ord float %4097, 0.000000e+00
  br i1 %4119, label %4120, label %.thread6869

4120:                                             ; preds = %4118
  %4121 = fcmp ogt double %543, %4107
  %4122 = fcmp oeq float %4097, %4103
  %or.cond6434 = select i1 %4121, i1 true, i1 %4122
  br i1 %or.cond6434, label %4123, label %.thread6869

4123:                                             ; preds = %4120
  br i1 %.not6287, label %4130, label %4124

4124:                                             ; preds = %4123
  %4125 = fcmp olt float %4103, %4097
  br i1 %4125, label %4126, label %4128

4126:                                             ; preds = %4124
  %4127 = fsub double %4098, %4104
  br label %4130

4128:                                             ; preds = %4124
  %4129 = fsub double %4104, %4098
  br label %4130

4130:                                             ; preds = %4123, %4126, %4128
  %4131 = phi double [ %4127, %4126 ], [ %4129, %4128 ], [ 0.000000e+00, %4123 ]
  %4132 = fcmp ugt double %4110, 0.000000e+00
  br i1 %4132, label %4133, label %4137

4133:                                             ; preds = %4130
  %4134 = fcmp ogt double %4110, 0.000000e+00
  %4135 = select i1 %4134, double %4110, double 1.000000e+00
  %4136 = fdiv double %4131, %4135
  br label %4137

4137:                                             ; preds = %4130, %4133
  %4138 = phi double [ %4136, %4133 ], [ %4107, %4130 ]
  %4139 = load double, ptr %4066, align 8, !tbaa !17
  %4140 = fcmp ogt double %4139, %4098
  br i1 %4140, label %4141, label %4142

4141:                                             ; preds = %4137
  store double %4098, ptr %4066, align 8, !tbaa !17
  br label %4142

4142:                                             ; preds = %4141, %4137
  %4143 = load double, ptr %4067, align 8, !tbaa !18
  %4144 = fcmp olt double %4143, %4098
  br i1 %4144, label %4145, label %4146

4145:                                             ; preds = %4142
  store double %4098, ptr %4067, align 8, !tbaa !18
  br label %4146

4146:                                             ; preds = %4145, %4142
  %4147 = load double, ptr %4068, align 8, !tbaa !19
  %4148 = fcmp olt double %4147, %4131
  br i1 %4148, label %4149, label %4150

4149:                                             ; preds = %4146
  store double %4131, ptr %4068, align 8, !tbaa !19
  store double %4104, ptr %4069, align 8, !tbaa !20
  store double %4098, ptr %4070, align 8, !tbaa !21
  store i32 %4089, ptr %4071, align 8, !tbaa !22
  store i32 %4087, ptr %4072, align 4, !tbaa !23
  br label %4150

4150:                                             ; preds = %4149, %4146
  %4151 = load double, ptr %4073, align 8, !tbaa !24
  %4152 = fcmp olt double %4151, %4138
  br i1 %4152, label %4153, label %4154

4153:                                             ; preds = %4150
  store double %4138, ptr %4073, align 8, !tbaa !24
  br label %4154

4154:                                             ; preds = %4153, %4150
  %4155 = fmul double %4138, %4138
  %4156 = fcmp ogt double %543, %4155
  br i1 %4156, label %4157, label %4163

4157:                                             ; preds = %4154
  %4158 = fsub double %4155, %.155467500
  %4159 = load double, ptr %4074, align 8, !tbaa !25
  %4160 = fadd double %4158, %4159
  %4161 = fsub double %4160, %4159
  %4162 = fsub double %4161, %4158
  store double %4160, ptr %4074, align 8, !tbaa !25
  br label %4163

4163:                                             ; preds = %4157, %4154
  %.25547 = phi double [ %4162, %4157 ], [ %.155467500, %4154 ]
  %4164 = call double @libxsmm_kahan_sum(double noundef %4110, ptr noundef nonnull %334, ptr noundef nonnull %331)
  %4165 = call double @libxsmm_kahan_sum(double noundef %4107, ptr noundef nonnull %335, ptr noundef nonnull %332)
  %4166 = call double @libxsmm_kahan_sum(double noundef %4131, ptr noundef nonnull %336, ptr noundef nonnull %333)
  %4167 = fmul double %4104, %4104
  %4168 = call double @libxsmm_kahan_sum(double noundef %4167, ptr noundef nonnull %327, ptr noundef nonnull %325)
  %4169 = fmul double %4098, %4098
  %4170 = call double @libxsmm_kahan_sum(double noundef %4169, ptr noundef nonnull %328, ptr noundef nonnull %326)
  %4171 = fmul double %4131, %4131
  %4172 = fcmp ogt double %543, %4171
  br i1 %4172, label %4173, label %4179

4173:                                             ; preds = %4163
  %4174 = call double @libxsmm_kahan_sum(double noundef %4171, ptr noundef nonnull %4075, ptr noundef nonnull %324)
  br label %4179

.thread6869:                                      ; preds = %4120, %4118
  %4175 = fcmp ord float %4103, 0.000000e+00
  %4176 = fcmp ogt double %543, %4110
  %4177 = select i1 %4175, i1 %4176, i1 false
  %4178 = select i1 %4177, i32 1, i32 2
  store i32 %4089, ptr %4071, align 8, !tbaa !22
  store i32 %4087, ptr %4072, align 4, !tbaa !23
  store double %4104, ptr %4069, align 8, !tbaa !20
  store double %4098, ptr %4070, align 8, !tbaa !21
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %336) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %335) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %334) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %333) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %332) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %331) #8
  br label %4309

4179:                                             ; preds = %4173, %4163
  %indvars.iv.next8339 = add nuw nsw i64 %indvars.iv8338, 1
  %exitcond8342.not = icmp eq i64 %indvars.iv.next8339, %4079
  br i1 %exitcond8342.not, label %._crit_edge7503.loopexit, label %4082, !llvm.loop !103

._crit_edge7503.loopexit:                         ; preds = %4179
  %.pre8709 = load double, ptr %334, align 8, !tbaa !13
  br label %._crit_edge7503

._crit_edge7503:                                  ; preds = %._crit_edge7503.loopexit, %4080
  %4180 = phi double [ 0.000000e+00, %4080 ], [ %.pre8709, %._crit_edge7503.loopexit ]
  %.15546.lcssa = phi double [ %.055457506, %4080 ], [ %.25547, %._crit_edge7503.loopexit ]
  %4181 = call double @libxsmm_kahan_sum(double noundef %4180, ptr noundef nonnull %4076, ptr noundef nonnull %329)
  %4182 = load double, ptr %335, align 8, !tbaa !13
  %4183 = call double @libxsmm_kahan_sum(double noundef %4182, ptr noundef nonnull %4077, ptr noundef nonnull %330)
  %4184 = load double, ptr %4078, align 8, !tbaa !28
  %4185 = load double, ptr %336, align 8, !tbaa !13
  %4186 = fcmp olt double %4184, %4185
  br i1 %4186, label %4187, label %4188

4187:                                             ; preds = %._crit_edge7503
  store double %4185, ptr %4078, align 8, !tbaa !28
  br label %4188

4188:                                             ; preds = %4187, %._crit_edge7503
  %4189 = load double, ptr %334, align 8, !tbaa !13
  %4190 = fcmp olt double %.055127508, %4189
  %.15513 = select i1 %4190, double %4189, double %.055127508
  %4191 = load double, ptr %335, align 8, !tbaa !13
  %4192 = fcmp olt double %.055167507, %4191
  %.15517 = select i1 %4192, double %4191, double %.055167507
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %336) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %335) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %334) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %333) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %332) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %331) #8
  %indvars.iv.next8344 = add nuw nsw i64 %indvars.iv8343, 1
  %exitcond8347.not = icmp eq i64 %indvars.iv.next8344, %wide.trip.count8346
  br i1 %exitcond8347.not, label %._crit_edge7511, label %4080, !llvm.loop !104

._crit_edge7511:                                  ; preds = %4188, %4058
  %.05516.lcssa = phi double [ 0.000000e+00, %4058 ], [ %.15517, %4188 ]
  %.05512.lcssa = phi double [ 0.000000e+00, %4058 ], [ %.15513, %4188 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %337) #8
  store double 0.000000e+00, ptr %337, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %338) #8
  store double 0.000000e+00, ptr %338, align 8, !tbaa !13
  %4193 = getelementptr inbounds i8, ptr %0, i64 112
  %4194 = load double, ptr %4193, align 8, !tbaa !30
  %4195 = fcmp oeq double %4194, 0.000000e+00
  br i1 %4195, label %4197, label %4196

4196:                                             ; preds = %._crit_edge7511
  call void @__assert_fail(ptr noundef nonnull @.str.1, ptr noundef nonnull @.str.2, i32 noundef 130, ptr noundef nonnull @__PRETTY_FUNCTION__.libxsmm_matdiff) #10
  unreachable

4197:                                             ; preds = %._crit_edge7511
  %4198 = getelementptr inbounds i8, ptr %0, i64 152
  %4199 = load double, ptr %4198, align 8, !tbaa !31
  %4200 = fcmp oeq double %4199, 0.000000e+00
  br i1 %4200, label %4202, label %4201

4201:                                             ; preds = %4197
  call void @__assert_fail(ptr noundef nonnull @.str.3, ptr noundef nonnull @.str.2, i32 noundef 131, ptr noundef nonnull @__PRETTY_FUNCTION__.libxsmm_matdiff) #10
  unreachable

4202:                                             ; preds = %4197
  %.not6288 = icmp eq i64 %538, 0
  br i1 %.not6288, label %4213, label %4203

4203:                                             ; preds = %4202
  %4204 = getelementptr inbounds i8, ptr %0, i64 80
  %4205 = load double, ptr %4204, align 8, !tbaa !32
  %4206 = uitofp i64 %538 to double
  %4207 = fdiv double %4205, %4206
  %4208 = getelementptr inbounds i8, ptr %0, i64 104
  store double %4207, ptr %4208, align 8, !tbaa !33
  %4209 = getelementptr inbounds i8, ptr %0, i64 120
  %4210 = load double, ptr %4209, align 8, !tbaa !34
  %4211 = fdiv double %4210, %4206
  %4212 = getelementptr inbounds i8, ptr %0, i64 144
  store double %4211, ptr %4212, align 8, !tbaa !35
  br label %4213

4213:                                             ; preds = %4203, %4202
  %4214 = fcmp ugt double %.05512.lcssa, 0.000000e+00
  br i1 %4214, label %4215, label %4221

4215:                                             ; preds = %4213
  %4216 = getelementptr inbounds i8, ptr %0, i64 16
  %4217 = load double, ptr %4216, align 8, !tbaa !28
  %4218 = fcmp ogt double %.05512.lcssa, 0.000000e+00
  %4219 = select i1 %4218, double %.05512.lcssa, double 1.000000e+00
  %4220 = fdiv double %4217, %4219
  br label %4221

4221:                                             ; preds = %4213, %4215
  %4222 = phi double [ %4220, %4215 ], [ %.05516.lcssa, %4213 ]
  %4223 = getelementptr inbounds i8, ptr %0, i64 24
  store double %4222, ptr %4223, align 8, !tbaa !36
  %4224 = load double, ptr %327, align 8
  %4225 = fcmp ugt double %4224, 0.000000e+00
  br i1 %4225, label %4232, label %4226

4226:                                             ; preds = %4221
  %4227 = load double, ptr %328, align 8, !tbaa !13
  %4228 = fmul double %4227, %4227
  %4229 = getelementptr inbounds i8, ptr %0, i64 56
  %4230 = load double, ptr %4229, align 8, !tbaa !37
  %4231 = fcmp olt double %4228, %4230
  %.6439 = select i1 %4231, double %4228, double %4230
  br label %4238

4232:                                             ; preds = %4221
  %4233 = getelementptr inbounds i8, ptr %0, i64 56
  %4234 = load double, ptr %4233, align 8, !tbaa !37
  %4235 = fcmp ogt double %4224, 0.000000e+00
  %4236 = select i1 %4235, double %4224, double 1.000000e+00
  %4237 = fdiv double %4234, %4236
  br label %4238

4238:                                             ; preds = %4226, %4232
  %4239 = phi double [ %4237, %4232 ], [ %.6439, %4226 ]
  %4240 = getelementptr inbounds i8, ptr %0, i64 32
  store double %4239, ptr %4240, align 8, !tbaa !38
  %4241 = icmp sgt i32 %.05042, 0
  br i1 %4241, label %.lr.ph7522, label %._crit_edge7523.thread

.lr.ph7522:                                       ; preds = %4238
  %.not6289 = icmp eq ptr %spec.select, null
  %4242 = getelementptr inbounds i8, ptr %0, i64 104
  %4243 = getelementptr inbounds i8, ptr %0, i64 144
  %4244 = zext nneg i32 %.05042 to i64
  %wide.trip.count8351 = zext nneg i32 %.05043 to i64
  br label %4245

4245:                                             ; preds = %.lr.ph7522, %4296
  %indvars.iv8353 = phi i64 [ 0, %.lr.ph7522 ], [ %indvars.iv.next8354, %4296 ]
  %.055417520 = phi double [ 0.000000e+00, %.lr.ph7522 ], [ %.15542, %4296 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %339) #8
  store double 0.000000e+00, ptr %339, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %340) #8
  store double 0.000000e+00, ptr %340, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %341) #8
  store double 0.000000e+00, ptr %341, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %342) #8
  store double 0.000000e+00, ptr %342, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %343) #8
  store double 0.000000e+00, ptr %343, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %344) #8
  store double 0.000000e+00, ptr %344, align 8, !tbaa !13
  br i1 %4063, label %.lr.ph7516, label %._crit_edge7517

.lr.ph7516:                                       ; preds = %4245, %.thread6885
  %indvars.iv8348 = phi i64 [ %indvars.iv.next8349, %.thread6885 ], [ 0, %4245 ]
  %4246 = mul nuw nsw i64 %indvars.iv8348, %4244
  %4247 = add nuw nsw i64 %4246, %indvars.iv8353
  %4248 = mul i64 %4062, %4247
  %4249 = urem i64 %4248, %4061
  %4250 = udiv i64 %4249, %4059
  %4251 = trunc i64 %4250 to i32
  %4252 = urem i64 %4249, %4059
  %4253 = trunc nuw i64 %4252 to i32
  %4254 = mul nsw i32 %.05040, %4251
  %4255 = add nsw i32 %4254, %4253
  %4256 = sext i32 %4255 to i64
  %4257 = getelementptr inbounds float, ptr %spec.select6345, i64 %4256
  %4258 = load float, ptr %4257, align 4, !tbaa !97
  %4259 = fpext float %4258 to double
  br i1 %.not6289, label %.thread6885, label %4260

4260:                                             ; preds = %.lr.ph7516
  %4261 = mul nsw i32 %.05041, %4251
  %4262 = add nsw i32 %4261, %4253
  %4263 = sext i32 %4262 to i64
  %4264 = getelementptr inbounds float, ptr %spec.select, i64 %4263
  %4265 = load float, ptr %4264, align 4, !tbaa !97
  %4266 = fpext float %4265 to double
  %4267 = fcmp olt float %4258, %4265
  br i1 %4267, label %4268, label %4270

4268:                                             ; preds = %4260
  %4269 = fsub double %4266, %4259
  br label %.thread6885

4270:                                             ; preds = %4260
  %4271 = fsub double %4259, %4266
  br label %.thread6885

.thread6885:                                      ; preds = %.lr.ph7516, %4268, %4270
  %4272 = phi double [ %4266, %4268 ], [ %4266, %4270 ], [ 0.000000e+00, %.lr.ph7516 ]
  %4273 = phi float [ %4265, %4268 ], [ %4265, %4270 ], [ 0.000000e+00, %.lr.ph7516 ]
  %4274 = phi double [ %4269, %4268 ], [ %4271, %4270 ], [ 0.000000e+00, %.lr.ph7516 ]
  %4275 = load double, ptr %4242, align 8, !tbaa !33
  %4276 = fsub double %4259, %4275
  %4277 = load double, ptr %4243, align 8, !tbaa !35
  %4278 = fsub double %4272, %4277
  %4279 = fcmp oge float %4258, 0.000000e+00
  %4280 = fneg double %4259
  %4281 = select i1 %4279, double %4259, double %4280
  %4282 = fcmp oge float %4273, 0.000000e+00
  %4283 = fneg double %4272
  %4284 = select i1 %4282, double %4272, double %4283
  %4285 = fmul double %4276, %4276
  %4286 = call double @libxsmm_kahan_sum(double noundef %4285, ptr noundef nonnull %4193, ptr noundef nonnull %337)
  %4287 = fmul double %4278, %4278
  %4288 = call double @libxsmm_kahan_sum(double noundef %4287, ptr noundef nonnull %4198, ptr noundef nonnull %338)
  %4289 = call double @libxsmm_kahan_sum(double noundef %4281, ptr noundef nonnull %342, ptr noundef nonnull %339)
  %4290 = call double @libxsmm_kahan_sum(double noundef %4284, ptr noundef nonnull %343, ptr noundef nonnull %340)
  %4291 = call double @libxsmm_kahan_sum(double noundef %4274, ptr noundef nonnull %344, ptr noundef nonnull %341)
  %indvars.iv.next8349 = add nuw nsw i64 %indvars.iv8348, 1
  %exitcond8352.not = icmp eq i64 %indvars.iv.next8349, %wide.trip.count8351
  br i1 %exitcond8352.not, label %._crit_edge7517.loopexit, label %.lr.ph7516, !llvm.loop !105

._crit_edge7517.loopexit:                         ; preds = %.thread6885
  %.pre8710 = load double, ptr %344, align 8, !tbaa !13
  br label %._crit_edge7517

._crit_edge7517:                                  ; preds = %._crit_edge7517.loopexit, %4245
  %4292 = phi double [ %.pre8710, %._crit_edge7517.loopexit ], [ 0.000000e+00, %4245 ]
  %4293 = load double, ptr %0, align 8, !tbaa !40
  %4294 = fcmp olt double %4293, %4292
  br i1 %4294, label %4295, label %4296

4295:                                             ; preds = %._crit_edge7517
  store double %4292, ptr %0, align 8, !tbaa !40
  br label %4296

4296:                                             ; preds = %4295, %._crit_edge7517
  %4297 = load double, ptr %342, align 8, !tbaa !13
  %4298 = fcmp olt double %.055417520, %4297
  %.15542 = select i1 %4298, double %4297, double %.055417520
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %344) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %343) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %342) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %341) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %340) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %339) #8
  %indvars.iv.next8354 = add nuw nsw i64 %indvars.iv8353, 1
  %exitcond8357.not = icmp eq i64 %indvars.iv.next8354, %4244
  br i1 %exitcond8357.not, label %._crit_edge7523, label %4245, !llvm.loop !106

._crit_edge7523:                                  ; preds = %4296
  %4299 = fcmp ugt double %.15542, 0.000000e+00
  br i1 %4299, label %4301, label %._crit_edge7523.thread

._crit_edge7523.thread:                           ; preds = %4238, %._crit_edge7523
  %4300 = load double, ptr %0, align 8, !tbaa !40
  br label %4306

4301:                                             ; preds = %._crit_edge7523
  %4302 = load double, ptr %0, align 8, !tbaa !40
  %4303 = fcmp ogt double %.15542, 0.000000e+00
  %4304 = select i1 %4303, double %.15542, double 1.000000e+00
  %4305 = fdiv double %4302, %4304
  br label %4306

4306:                                             ; preds = %4301, %._crit_edge7523.thread
  %4307 = phi double [ %4300, %._crit_edge7523.thread ], [ %4305, %4301 ]
  %4308 = getelementptr inbounds i8, ptr %0, i64 8
  store double %4307, ptr %4308, align 8, !tbaa !42
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %338) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %337) #8
  br label %4309

4309:                                             ; preds = %.thread6869, %4306
  %.796884 = phi i32 [ %4178, %.thread6869 ], [ 0, %4306 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %330) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %329) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %328) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %327) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %326) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %325) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %324) #8
  br label %6314

4310:                                             ; preds = %541
  %4311 = icmp eq i32 %535, 0
  br i1 %4311, label %4312, label %4553

4312:                                             ; preds = %4310
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %345) #8
  store double 0.000000e+00, ptr %345, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %346) #8
  store double 0.000000e+00, ptr %346, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %347) #8
  store double 0.000000e+00, ptr %347, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %348) #8
  store double 0.000000e+00, ptr %348, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %349) #8
  store double 0.000000e+00, ptr %349, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %350) #8
  store double 0.000000e+00, ptr %350, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %351) #8
  store double 0.000000e+00, ptr %351, align 8, !tbaa !13
  %4313 = icmp sgt i32 %.05043, 0
  br i1 %4313, label %.lr.ph7483, label %._crit_edge7484

.lr.ph7483:                                       ; preds = %4312
  %4314 = icmp sgt i32 %.05042, 0
  %.not6284 = icmp eq ptr %spec.select, null
  %4315 = getelementptr inbounds i8, ptr %0, i64 96
  %4316 = getelementptr inbounds i8, ptr %0, i64 128
  %4317 = getelementptr inbounds i8, ptr %0, i64 136
  %4318 = getelementptr inbounds i8, ptr %0, i64 40
  %4319 = getelementptr inbounds i8, ptr %0, i64 160
  %4320 = getelementptr inbounds i8, ptr %0, i64 168
  %4321 = getelementptr inbounds i8, ptr %0, i64 176
  %4322 = getelementptr inbounds i8, ptr %0, i64 180
  %4323 = getelementptr inbounds i8, ptr %0, i64 48
  %4324 = getelementptr inbounds i8, ptr %0, i64 64
  %4325 = getelementptr inbounds i8, ptr %0, i64 56
  %4326 = getelementptr inbounds i8, ptr %0, i64 80
  %4327 = getelementptr inbounds i8, ptr %0, i64 120
  %4328 = getelementptr inbounds i8, ptr %0, i64 16
  %4329 = sext i32 %.05041 to i64
  %4330 = sext i32 %.05040 to i64
  %wide.trip.count8321 = zext nneg i32 %.05043 to i64
  %wide.trip.count8316 = zext nneg i32 %.05042 to i64
  br label %4331

4331:                                             ; preds = %.lr.ph7483, %4429
  %indvars.iv8318 = phi i64 [ 0, %.lr.ph7483 ], [ %indvars.iv.next8319, %4429 ]
  %.055547481 = phi double [ 0.000000e+00, %.lr.ph7483 ], [ %.15555, %4429 ]
  %.055587480 = phi double [ 0.000000e+00, %.lr.ph7483 ], [ %.15559, %4429 ]
  %.055667479 = phi double [ 0.000000e+00, %.lr.ph7483 ], [ %.15567.lcssa, %4429 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %352) #8
  store double 0.000000e+00, ptr %352, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %353) #8
  store double 0.000000e+00, ptr %353, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %354) #8
  store double 0.000000e+00, ptr %354, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %355) #8
  store double 0.000000e+00, ptr %355, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %356) #8
  store double 0.000000e+00, ptr %356, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %357) #8
  store double 0.000000e+00, ptr %357, align 8, !tbaa !13
  br i1 %4314, label %.lr.ph7475, label %._crit_edge7476

.lr.ph7475:                                       ; preds = %4331
  %4332 = mul nsw i64 %indvars.iv8318, %4329
  %4333 = mul nsw i64 %indvars.iv8318, %4330
  %4334 = trunc nuw nsw i64 %indvars.iv8318 to i32
  %invariant.gep9030 = getelementptr i16, ptr %spec.select, i64 %4332
  %invariant.gep9032 = getelementptr i16, ptr %spec.select6345, i64 %4333
  br label %4335

4335:                                             ; preds = %.lr.ph7475, %4420
  %indvars.iv8313 = phi i64 [ 0, %.lr.ph7475 ], [ %indvars.iv.next8314, %4420 ]
  %.155677473 = phi double [ %.055667479, %.lr.ph7475 ], [ %.25568, %4420 ]
  br i1 %.not6284, label %4339, label %4336

4336:                                             ; preds = %4335
  %gep9031 = getelementptr i16, ptr %invariant.gep9030, i64 %indvars.iv8313
  %4337 = load i16, ptr %gep9031, align 2, !tbaa !63
  %4338 = call float @libxsmm_convert_f16_to_f32(i16 noundef zeroext %4337)
  br label %4339

4339:                                             ; preds = %4335, %4336
  %4340 = phi float [ %4338, %4336 ], [ 0.000000e+00, %4335 ]
  %4341 = fpext float %4340 to double
  %gep9033 = getelementptr i16, ptr %invariant.gep9032, i64 %indvars.iv8313
  %4342 = load i16, ptr %gep9033, align 2, !tbaa !63
  %4343 = call float @libxsmm_convert_f16_to_f32(i16 noundef zeroext %4342)
  %4344 = fpext float %4343 to double
  %4345 = fcmp oge float %4340, 0.000000e+00
  %4346 = fneg double %4341
  %4347 = select i1 %4345, double %4341, double %4346
  %4348 = fcmp oge float %4343, 0.000000e+00
  %4349 = fneg double %4344
  %4350 = select i1 %4348, double %4344, double %4349
  %4351 = load double, ptr %542, align 8, !tbaa !10
  %4352 = fcmp ogt double %4351, %4344
  br i1 %4352, label %4353, label %4354

4353:                                             ; preds = %4339
  store double %4344, ptr %542, align 8, !tbaa !10
  br label %4354

4354:                                             ; preds = %4353, %4339
  %4355 = load double, ptr %4315, align 8, !tbaa !16
  %4356 = fcmp olt double %4355, %4344
  br i1 %4356, label %4357, label %4358

4357:                                             ; preds = %4354
  store double %4344, ptr %4315, align 8, !tbaa !16
  br label %4358

4358:                                             ; preds = %4357, %4354
  %4359 = fcmp ord float %4340, 0.000000e+00
  %4360 = trunc nuw nsw i64 %indvars.iv8313 to i32
  br i1 %4359, label %4361, label %.thread6894

4361:                                             ; preds = %4358
  %4362 = fcmp ogt double %543, %4347
  %4363 = fcmp oeq float %4340, %4343
  %or.cond6440 = select i1 %4362, i1 true, i1 %4363
  br i1 %or.cond6440, label %4364, label %.thread6894

4364:                                             ; preds = %4361
  br i1 %.not6284, label %4371, label %4365

4365:                                             ; preds = %4364
  %4366 = fcmp olt float %4343, %4340
  br i1 %4366, label %4367, label %4369

4367:                                             ; preds = %4365
  %4368 = fsub double %4341, %4344
  br label %4371

4369:                                             ; preds = %4365
  %4370 = fsub double %4344, %4341
  br label %4371

4371:                                             ; preds = %4364, %4367, %4369
  %4372 = phi double [ %4368, %4367 ], [ %4370, %4369 ], [ 0.000000e+00, %4364 ]
  %4373 = fcmp ugt double %4350, 0.000000e+00
  br i1 %4373, label %4374, label %4378

4374:                                             ; preds = %4371
  %4375 = fcmp ogt double %4350, 0.000000e+00
  %4376 = select i1 %4375, double %4350, double 1.000000e+00
  %4377 = fdiv double %4372, %4376
  br label %4378

4378:                                             ; preds = %4371, %4374
  %4379 = phi double [ %4377, %4374 ], [ %4347, %4371 ]
  %4380 = load double, ptr %4316, align 8, !tbaa !17
  %4381 = fcmp ogt double %4380, %4341
  br i1 %4381, label %4382, label %4383

4382:                                             ; preds = %4378
  store double %4341, ptr %4316, align 8, !tbaa !17
  br label %4383

4383:                                             ; preds = %4382, %4378
  %4384 = load double, ptr %4317, align 8, !tbaa !18
  %4385 = fcmp olt double %4384, %4341
  br i1 %4385, label %4386, label %4387

4386:                                             ; preds = %4383
  store double %4341, ptr %4317, align 8, !tbaa !18
  br label %4387

4387:                                             ; preds = %4386, %4383
  %4388 = load double, ptr %4318, align 8, !tbaa !19
  %4389 = fcmp olt double %4388, %4372
  br i1 %4389, label %4390, label %4391

4390:                                             ; preds = %4387
  store double %4372, ptr %4318, align 8, !tbaa !19
  store double %4344, ptr %4319, align 8, !tbaa !20
  store double %4341, ptr %4320, align 8, !tbaa !21
  store i32 %4360, ptr %4321, align 8, !tbaa !22
  store i32 %4334, ptr %4322, align 4, !tbaa !23
  br label %4391

4391:                                             ; preds = %4390, %4387
  %4392 = load double, ptr %4323, align 8, !tbaa !24
  %4393 = fcmp olt double %4392, %4379
  br i1 %4393, label %4394, label %4395

4394:                                             ; preds = %4391
  store double %4379, ptr %4323, align 8, !tbaa !24
  br label %4395

4395:                                             ; preds = %4394, %4391
  %4396 = fmul double %4379, %4379
  %4397 = fcmp ogt double %543, %4396
  br i1 %4397, label %4398, label %4404

4398:                                             ; preds = %4395
  %4399 = fsub double %4396, %.155677473
  %4400 = load double, ptr %4324, align 8, !tbaa !25
  %4401 = fadd double %4399, %4400
  %4402 = fsub double %4401, %4400
  %4403 = fsub double %4402, %4399
  store double %4401, ptr %4324, align 8, !tbaa !25
  br label %4404

4404:                                             ; preds = %4398, %4395
  %.25568 = phi double [ %4403, %4398 ], [ %.155677473, %4395 ]
  %4405 = call double @libxsmm_kahan_sum(double noundef %4350, ptr noundef nonnull %355, ptr noundef nonnull %352)
  %4406 = call double @libxsmm_kahan_sum(double noundef %4347, ptr noundef nonnull %356, ptr noundef nonnull %353)
  %4407 = call double @libxsmm_kahan_sum(double noundef %4372, ptr noundef nonnull %357, ptr noundef nonnull %354)
  %4408 = fmul double %4344, %4344
  %4409 = call double @libxsmm_kahan_sum(double noundef %4408, ptr noundef nonnull %348, ptr noundef nonnull %346)
  %4410 = fmul double %4341, %4341
  %4411 = call double @libxsmm_kahan_sum(double noundef %4410, ptr noundef nonnull %349, ptr noundef nonnull %347)
  %4412 = fmul double %4372, %4372
  %4413 = fcmp ogt double %543, %4412
  br i1 %4413, label %4414, label %4420

4414:                                             ; preds = %4404
  %4415 = call double @libxsmm_kahan_sum(double noundef %4412, ptr noundef nonnull %4325, ptr noundef nonnull %345)
  br label %4420

.thread6894:                                      ; preds = %4361, %4358
  %4416 = fcmp ord float %4343, 0.000000e+00
  %4417 = fcmp ogt double %543, %4350
  %4418 = select i1 %4416, i1 %4417, i1 false
  %4419 = select i1 %4418, i32 1, i32 2
  store i32 %4360, ptr %4321, align 8, !tbaa !22
  store i32 %4334, ptr %4322, align 4, !tbaa !23
  store double %4344, ptr %4319, align 8, !tbaa !20
  store double %4341, ptr %4320, align 8, !tbaa !21
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %357) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %356) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %355) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %354) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %353) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %352) #8
  br label %4552

4420:                                             ; preds = %4414, %4404
  %indvars.iv.next8314 = add nuw nsw i64 %indvars.iv8313, 1
  %exitcond8317.not = icmp eq i64 %indvars.iv.next8314, %wide.trip.count8316
  br i1 %exitcond8317.not, label %._crit_edge7476.loopexit, label %4335, !llvm.loop !107

._crit_edge7476.loopexit:                         ; preds = %4420
  %.pre8708 = load double, ptr %355, align 8, !tbaa !13
  br label %._crit_edge7476

._crit_edge7476:                                  ; preds = %._crit_edge7476.loopexit, %4331
  %4421 = phi double [ 0.000000e+00, %4331 ], [ %.pre8708, %._crit_edge7476.loopexit ]
  %.15567.lcssa = phi double [ %.055667479, %4331 ], [ %.25568, %._crit_edge7476.loopexit ]
  %4422 = call double @libxsmm_kahan_sum(double noundef %4421, ptr noundef nonnull %4326, ptr noundef nonnull %350)
  %4423 = load double, ptr %356, align 8, !tbaa !13
  %4424 = call double @libxsmm_kahan_sum(double noundef %4423, ptr noundef nonnull %4327, ptr noundef nonnull %351)
  %4425 = load double, ptr %4328, align 8, !tbaa !28
  %4426 = load double, ptr %357, align 8, !tbaa !13
  %4427 = fcmp olt double %4425, %4426
  br i1 %4427, label %4428, label %4429

4428:                                             ; preds = %._crit_edge7476
  store double %4426, ptr %4328, align 8, !tbaa !28
  br label %4429

4429:                                             ; preds = %4428, %._crit_edge7476
  %4430 = load double, ptr %355, align 8, !tbaa !13
  %4431 = fcmp olt double %.055547481, %4430
  %.15555 = select i1 %4431, double %4430, double %.055547481
  %4432 = load double, ptr %356, align 8, !tbaa !13
  %4433 = fcmp olt double %.055587480, %4432
  %.15559 = select i1 %4433, double %4432, double %.055587480
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %357) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %356) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %355) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %354) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %353) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %352) #8
  %indvars.iv.next8319 = add nuw nsw i64 %indvars.iv8318, 1
  %exitcond8322.not = icmp eq i64 %indvars.iv.next8319, %wide.trip.count8321
  br i1 %exitcond8322.not, label %._crit_edge7484, label %4331, !llvm.loop !108

._crit_edge7484:                                  ; preds = %4429, %4312
  %.05558.lcssa = phi double [ 0.000000e+00, %4312 ], [ %.15559, %4429 ]
  %.05554.lcssa = phi double [ 0.000000e+00, %4312 ], [ %.15555, %4429 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %358) #8
  store double 0.000000e+00, ptr %358, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %359) #8
  store double 0.000000e+00, ptr %359, align 8, !tbaa !13
  %4434 = getelementptr inbounds i8, ptr %0, i64 112
  %4435 = load double, ptr %4434, align 8, !tbaa !30
  %4436 = fcmp oeq double %4435, 0.000000e+00
  br i1 %4436, label %4438, label %4437

4437:                                             ; preds = %._crit_edge7484
  call void @__assert_fail(ptr noundef nonnull @.str.1, ptr noundef nonnull @.str.2, i32 noundef 130, ptr noundef nonnull @__PRETTY_FUNCTION__.libxsmm_matdiff) #10
  unreachable

4438:                                             ; preds = %._crit_edge7484
  %4439 = getelementptr inbounds i8, ptr %0, i64 152
  %4440 = load double, ptr %4439, align 8, !tbaa !31
  %4441 = fcmp oeq double %4440, 0.000000e+00
  br i1 %4441, label %4443, label %4442

4442:                                             ; preds = %4438
  call void @__assert_fail(ptr noundef nonnull @.str.3, ptr noundef nonnull @.str.2, i32 noundef 131, ptr noundef nonnull @__PRETTY_FUNCTION__.libxsmm_matdiff) #10
  unreachable

4443:                                             ; preds = %4438
  %.not6285 = icmp eq i64 %538, 0
  br i1 %.not6285, label %4454, label %4444

4444:                                             ; preds = %4443
  %4445 = getelementptr inbounds i8, ptr %0, i64 80
  %4446 = load double, ptr %4445, align 8, !tbaa !32
  %4447 = uitofp i64 %538 to double
  %4448 = fdiv double %4446, %4447
  %4449 = getelementptr inbounds i8, ptr %0, i64 104
  store double %4448, ptr %4449, align 8, !tbaa !33
  %4450 = getelementptr inbounds i8, ptr %0, i64 120
  %4451 = load double, ptr %4450, align 8, !tbaa !34
  %4452 = fdiv double %4451, %4447
  %4453 = getelementptr inbounds i8, ptr %0, i64 144
  store double %4452, ptr %4453, align 8, !tbaa !35
  br label %4454

4454:                                             ; preds = %4444, %4443
  %4455 = fcmp ugt double %.05554.lcssa, 0.000000e+00
  br i1 %4455, label %4456, label %4462

4456:                                             ; preds = %4454
  %4457 = getelementptr inbounds i8, ptr %0, i64 16
  %4458 = load double, ptr %4457, align 8, !tbaa !28
  %4459 = fcmp ogt double %.05554.lcssa, 0.000000e+00
  %4460 = select i1 %4459, double %.05554.lcssa, double 1.000000e+00
  %4461 = fdiv double %4458, %4460
  br label %4462

4462:                                             ; preds = %4454, %4456
  %4463 = phi double [ %4461, %4456 ], [ %.05558.lcssa, %4454 ]
  %4464 = getelementptr inbounds i8, ptr %0, i64 24
  store double %4463, ptr %4464, align 8, !tbaa !36
  %4465 = load double, ptr %348, align 8
  %4466 = fcmp ugt double %4465, 0.000000e+00
  br i1 %4466, label %4473, label %4467

4467:                                             ; preds = %4462
  %4468 = load double, ptr %349, align 8, !tbaa !13
  %4469 = fmul double %4468, %4468
  %4470 = getelementptr inbounds i8, ptr %0, i64 56
  %4471 = load double, ptr %4470, align 8, !tbaa !37
  %4472 = fcmp olt double %4469, %4471
  %.6445 = select i1 %4472, double %4469, double %4471
  br label %4479

4473:                                             ; preds = %4462
  %4474 = getelementptr inbounds i8, ptr %0, i64 56
  %4475 = load double, ptr %4474, align 8, !tbaa !37
  %4476 = fcmp ogt double %4465, 0.000000e+00
  %4477 = select i1 %4476, double %4465, double 1.000000e+00
  %4478 = fdiv double %4475, %4477
  br label %4479

4479:                                             ; preds = %4467, %4473
  %4480 = phi double [ %4478, %4473 ], [ %.6445, %4467 ]
  %4481 = getelementptr inbounds i8, ptr %0, i64 32
  store double %4480, ptr %4481, align 8, !tbaa !38
  %4482 = icmp sgt i32 %.05042, 0
  br i1 %4482, label %.lr.ph7496, label %._crit_edge7497.thread

.lr.ph7496:                                       ; preds = %4479
  %.not6286 = icmp eq ptr %spec.select, null
  %4483 = getelementptr inbounds i8, ptr %0, i64 104
  %4484 = getelementptr inbounds i8, ptr %0, i64 144
  %4485 = sext i32 %.05040 to i64
  %4486 = sext i32 %.05041 to i64
  %wide.trip.count8336 = zext nneg i32 %.05042 to i64
  %wide.trip.count8326 = zext nneg i32 %.05043 to i64
  %wide.trip.count8331 = zext nneg i32 %.05043 to i64
  br label %4487

4487:                                             ; preds = %.lr.ph7496, %4539
  %indvars.iv8333 = phi i64 [ 0, %.lr.ph7496 ], [ %indvars.iv.next8334, %4539 ]
  %.055627494 = phi double [ 0.000000e+00, %.lr.ph7496 ], [ %.15563, %4539 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %360) #8
  store double 0.000000e+00, ptr %360, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %361) #8
  store double 0.000000e+00, ptr %361, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %362) #8
  store double 0.000000e+00, ptr %362, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %363) #8
  store double 0.000000e+00, ptr %363, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %364) #8
  store double 0.000000e+00, ptr %364, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %365) #8
  store double 0.000000e+00, ptr %365, align 8, !tbaa !13
  br i1 %4313, label %.lr.ph7489, label %._crit_edge7490

.lr.ph7489:                                       ; preds = %4487
  %invariant.gep9038 = getelementptr i16, ptr %spec.select6345, i64 %indvars.iv8333
  br i1 %.not6286, label %.thread6910.us, label %.lr.ph7489.split.preheader

.lr.ph7489.split.preheader:                       ; preds = %.lr.ph7489
  %invariant.gep9036 = getelementptr i16, ptr %spec.select, i64 %indvars.iv8333
  br label %.lr.ph7489.split

.thread6910.us:                                   ; preds = %.lr.ph7489, %.thread6910.us
  %indvars.iv8328 = phi i64 [ %indvars.iv.next8329, %.thread6910.us ], [ 0, %.lr.ph7489 ]
  %4488 = mul nsw i64 %indvars.iv8328, %4485
  %gep9039 = getelementptr i16, ptr %invariant.gep9038, i64 %4488
  %4489 = load i16, ptr %gep9039, align 2, !tbaa !63
  %4490 = call float @libxsmm_convert_f16_to_f32(i16 noundef zeroext %4489)
  %4491 = fpext float %4490 to double
  %4492 = load double, ptr %4483, align 8, !tbaa !33
  %4493 = fsub double %4491, %4492
  %4494 = load double, ptr %4484, align 8, !tbaa !35
  %4495 = fsub double 0.000000e+00, %4494
  %4496 = fcmp oge float %4490, 0.000000e+00
  %4497 = fneg double %4491
  %4498 = select i1 %4496, double %4491, double %4497
  %4499 = fmul double %4493, %4493
  %4500 = call double @libxsmm_kahan_sum(double noundef %4499, ptr noundef nonnull %4434, ptr noundef nonnull %358)
  %4501 = fmul double %4495, %4495
  %4502 = call double @libxsmm_kahan_sum(double noundef %4501, ptr noundef nonnull %4439, ptr noundef nonnull %359)
  %4503 = call double @libxsmm_kahan_sum(double noundef %4498, ptr noundef nonnull %363, ptr noundef nonnull %360)
  %4504 = call double @libxsmm_kahan_sum(double noundef 0.000000e+00, ptr noundef nonnull %364, ptr noundef nonnull %361)
  %4505 = call double @libxsmm_kahan_sum(double noundef 0.000000e+00, ptr noundef nonnull %365, ptr noundef nonnull %362)
  %indvars.iv.next8329 = add nuw nsw i64 %indvars.iv8328, 1
  %exitcond8332.not = icmp eq i64 %indvars.iv.next8329, %wide.trip.count8331
  br i1 %exitcond8332.not, label %._crit_edge7490, label %.thread6910.us, !llvm.loop !109

.lr.ph7489.split:                                 ; preds = %.lr.ph7489.split.preheader, %.lr.ph7489.split
  %indvars.iv8323 = phi i64 [ 0, %.lr.ph7489.split.preheader ], [ %indvars.iv.next8324, %.lr.ph7489.split ]
  %4506 = mul nsw i64 %indvars.iv8323, %4485
  %gep9035 = getelementptr i16, ptr %invariant.gep9038, i64 %4506
  %4507 = load i16, ptr %gep9035, align 2, !tbaa !63
  %4508 = call float @libxsmm_convert_f16_to_f32(i16 noundef zeroext %4507)
  %4509 = fpext float %4508 to double
  %4510 = mul nsw i64 %indvars.iv8323, %4486
  %gep9037 = getelementptr i16, ptr %invariant.gep9036, i64 %4510
  %4511 = load i16, ptr %gep9037, align 2, !tbaa !63
  %4512 = call float @libxsmm_convert_f16_to_f32(i16 noundef zeroext %4511)
  %4513 = fpext float %4512 to double
  %4514 = fcmp olt float %4508, %4512
  %4515 = fsub double %4513, %4509
  %4516 = fsub double %4509, %4513
  %4517 = select i1 %4514, double %4515, double %4516
  %4518 = load double, ptr %4483, align 8, !tbaa !33
  %4519 = fsub double %4509, %4518
  %4520 = load double, ptr %4484, align 8, !tbaa !35
  %4521 = fsub double %4513, %4520
  %4522 = fcmp oge float %4508, 0.000000e+00
  %4523 = fneg double %4509
  %4524 = select i1 %4522, double %4509, double %4523
  %4525 = fcmp oge float %4512, 0.000000e+00
  %4526 = fneg double %4513
  %4527 = select i1 %4525, double %4513, double %4526
  %4528 = fmul double %4519, %4519
  %4529 = call double @libxsmm_kahan_sum(double noundef %4528, ptr noundef nonnull %4434, ptr noundef nonnull %358)
  %4530 = fmul double %4521, %4521
  %4531 = call double @libxsmm_kahan_sum(double noundef %4530, ptr noundef nonnull %4439, ptr noundef nonnull %359)
  %4532 = call double @libxsmm_kahan_sum(double noundef %4524, ptr noundef nonnull %363, ptr noundef nonnull %360)
  %4533 = call double @libxsmm_kahan_sum(double noundef %4527, ptr noundef nonnull %364, ptr noundef nonnull %361)
  %4534 = call double @libxsmm_kahan_sum(double noundef %4517, ptr noundef nonnull %365, ptr noundef nonnull %362)
  %indvars.iv.next8324 = add nuw nsw i64 %indvars.iv8323, 1
  %exitcond8327.not = icmp eq i64 %indvars.iv.next8324, %wide.trip.count8326
  br i1 %exitcond8327.not, label %._crit_edge7490, label %.lr.ph7489.split, !llvm.loop !109

._crit_edge7490:                                  ; preds = %.lr.ph7489.split, %.thread6910.us, %4487
  %4535 = load double, ptr %0, align 8, !tbaa !40
  %4536 = load double, ptr %365, align 8, !tbaa !13
  %4537 = fcmp olt double %4535, %4536
  br i1 %4537, label %4538, label %4539

4538:                                             ; preds = %._crit_edge7490
  store double %4536, ptr %0, align 8, !tbaa !40
  br label %4539

4539:                                             ; preds = %4538, %._crit_edge7490
  %4540 = load double, ptr %363, align 8, !tbaa !13
  %4541 = fcmp olt double %.055627494, %4540
  %.15563 = select i1 %4541, double %4540, double %.055627494
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %365) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %364) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %363) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %362) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %361) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %360) #8
  %indvars.iv.next8334 = add nuw nsw i64 %indvars.iv8333, 1
  %exitcond8337.not = icmp eq i64 %indvars.iv.next8334, %wide.trip.count8336
  br i1 %exitcond8337.not, label %._crit_edge7497, label %4487, !llvm.loop !110

._crit_edge7497:                                  ; preds = %4539
  %4542 = fcmp ugt double %.15563, 0.000000e+00
  br i1 %4542, label %4544, label %._crit_edge7497.thread

._crit_edge7497.thread:                           ; preds = %4479, %._crit_edge7497
  %4543 = load double, ptr %0, align 8, !tbaa !40
  br label %4549

4544:                                             ; preds = %._crit_edge7497
  %4545 = load double, ptr %0, align 8, !tbaa !40
  %4546 = fcmp ogt double %.15563, 0.000000e+00
  %4547 = select i1 %4546, double %.15563, double 1.000000e+00
  %4548 = fdiv double %4545, %4547
  br label %4549

4549:                                             ; preds = %4544, %._crit_edge7497.thread
  %4550 = phi double [ %4543, %._crit_edge7497.thread ], [ %4548, %4544 ]
  %4551 = getelementptr inbounds i8, ptr %0, i64 8
  store double %4550, ptr %4551, align 8, !tbaa !42
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %359) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %358) #8
  br label %4552

4552:                                             ; preds = %.thread6894, %4549
  %.846909 = phi i32 [ %4419, %.thread6894 ], [ 0, %4549 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %351) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %350) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %349) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %348) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %347) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %346) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %345) #8
  br label %6314

4553:                                             ; preds = %4310
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %366) #8
  store double 0.000000e+00, ptr %366, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %367) #8
  store double 0.000000e+00, ptr %367, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %368) #8
  store double 0.000000e+00, ptr %368, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %369) #8
  store double 0.000000e+00, ptr %369, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %370) #8
  store double 0.000000e+00, ptr %370, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %371) #8
  store double 0.000000e+00, ptr %371, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %372) #8
  store double 0.000000e+00, ptr %372, align 8, !tbaa !13
  %4554 = sext i32 %.05042 to i64
  %4555 = sext i32 %.05043 to i64
  %4556 = mul nsw i64 %4554, %4555
  %4557 = tail call i64 @libxsmm_coprime2(i64 noundef %4556)
  %4558 = icmp sgt i32 %.05043, 0
  br i1 %4558, label %.lr.ph7457, label %._crit_edge7458

.lr.ph7457:                                       ; preds = %4553
  %4559 = icmp sgt i32 %.05042, 0
  %.not6281 = icmp eq ptr %spec.select, null
  %4560 = getelementptr inbounds i8, ptr %0, i64 96
  %4561 = getelementptr inbounds i8, ptr %0, i64 128
  %4562 = getelementptr inbounds i8, ptr %0, i64 136
  %4563 = getelementptr inbounds i8, ptr %0, i64 40
  %4564 = getelementptr inbounds i8, ptr %0, i64 160
  %4565 = getelementptr inbounds i8, ptr %0, i64 168
  %4566 = getelementptr inbounds i8, ptr %0, i64 176
  %4567 = getelementptr inbounds i8, ptr %0, i64 180
  %4568 = getelementptr inbounds i8, ptr %0, i64 48
  %4569 = getelementptr inbounds i8, ptr %0, i64 64
  %4570 = getelementptr inbounds i8, ptr %0, i64 56
  %4571 = getelementptr inbounds i8, ptr %0, i64 80
  %4572 = getelementptr inbounds i8, ptr %0, i64 120
  %4573 = getelementptr inbounds i8, ptr %0, i64 16
  %4574 = zext i32 %.05042 to i64
  %wide.trip.count8301 = zext nneg i32 %.05043 to i64
  br label %4575

4575:                                             ; preds = %.lr.ph7457, %4685
  %indvars.iv8298 = phi i64 [ 0, %.lr.ph7457 ], [ %indvars.iv.next8299, %4685 ]
  %.055757455 = phi double [ 0.000000e+00, %.lr.ph7457 ], [ %.15576, %4685 ]
  %.055797454 = phi double [ 0.000000e+00, %.lr.ph7457 ], [ %.15580, %4685 ]
  %.055877453 = phi double [ 0.000000e+00, %.lr.ph7457 ], [ %.15588.lcssa, %4685 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %373) #8
  store double 0.000000e+00, ptr %373, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %374) #8
  store double 0.000000e+00, ptr %374, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %375) #8
  store double 0.000000e+00, ptr %375, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %376) #8
  store double 0.000000e+00, ptr %376, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %377) #8
  store double 0.000000e+00, ptr %377, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %378) #8
  store double 0.000000e+00, ptr %378, align 8, !tbaa !13
  br i1 %4559, label %.lr.ph7449, label %._crit_edge7450

.lr.ph7449:                                       ; preds = %4575
  %4576 = mul nuw nsw i64 %indvars.iv8298, %4574
  br label %4577

4577:                                             ; preds = %.lr.ph7449, %4676
  %indvars.iv8293 = phi i64 [ 0, %.lr.ph7449 ], [ %indvars.iv.next8294, %4676 ]
  %.155887447 = phi double [ %.055877453, %.lr.ph7449 ], [ %.25589, %4676 ]
  %4578 = add nuw nsw i64 %indvars.iv8293, %4576
  %4579 = mul i64 %4557, %4578
  %4580 = urem i64 %4579, %4556
  %4581 = udiv i64 %4580, %4554
  %4582 = trunc i64 %4581 to i32
  %4583 = urem i64 %4580, %4554
  %4584 = trunc nuw i64 %4583 to i32
  br i1 %.not6281, label %4592, label %4585

4585:                                             ; preds = %4577
  %4586 = mul nsw i32 %.05041, %4582
  %4587 = add nsw i32 %4586, %4584
  %4588 = sext i32 %4587 to i64
  %4589 = getelementptr inbounds i16, ptr %spec.select, i64 %4588
  %4590 = load i16, ptr %4589, align 2, !tbaa !63
  %4591 = call float @libxsmm_convert_f16_to_f32(i16 noundef zeroext %4590)
  br label %4592

4592:                                             ; preds = %4577, %4585
  %4593 = phi float [ %4591, %4585 ], [ 0.000000e+00, %4577 ]
  %4594 = fpext float %4593 to double
  %4595 = mul nsw i32 %.05040, %4582
  %4596 = add nsw i32 %4595, %4584
  %4597 = sext i32 %4596 to i64
  %4598 = getelementptr inbounds i16, ptr %spec.select6345, i64 %4597
  %4599 = load i16, ptr %4598, align 2, !tbaa !63
  %4600 = call float @libxsmm_convert_f16_to_f32(i16 noundef zeroext %4599)
  %4601 = fpext float %4600 to double
  %4602 = fcmp oge float %4593, 0.000000e+00
  %4603 = fneg double %4594
  %4604 = select i1 %4602, double %4594, double %4603
  %4605 = fcmp oge float %4600, 0.000000e+00
  %4606 = fneg double %4601
  %4607 = select i1 %4605, double %4601, double %4606
  %4608 = load double, ptr %542, align 8, !tbaa !10
  %4609 = fcmp ogt double %4608, %4601
  br i1 %4609, label %4610, label %4611

4610:                                             ; preds = %4592
  store double %4601, ptr %542, align 8, !tbaa !10
  br label %4611

4611:                                             ; preds = %4610, %4592
  %4612 = load double, ptr %4560, align 8, !tbaa !16
  %4613 = fcmp olt double %4612, %4601
  br i1 %4613, label %4614, label %4615

4614:                                             ; preds = %4611
  store double %4601, ptr %4560, align 8, !tbaa !16
  br label %4615

4615:                                             ; preds = %4614, %4611
  %4616 = fcmp ord float %4593, 0.000000e+00
  br i1 %4616, label %4617, label %.thread6919

4617:                                             ; preds = %4615
  %4618 = fcmp ogt double %543, %4604
  %4619 = fcmp oeq float %4593, %4600
  %or.cond6446 = select i1 %4618, i1 true, i1 %4619
  br i1 %or.cond6446, label %4620, label %.thread6919

4620:                                             ; preds = %4617
  br i1 %.not6281, label %4627, label %4621

4621:                                             ; preds = %4620
  %4622 = fcmp olt float %4600, %4593
  br i1 %4622, label %4623, label %4625

4623:                                             ; preds = %4621
  %4624 = fsub double %4594, %4601
  br label %4627

4625:                                             ; preds = %4621
  %4626 = fsub double %4601, %4594
  br label %4627

4627:                                             ; preds = %4620, %4623, %4625
  %4628 = phi double [ %4624, %4623 ], [ %4626, %4625 ], [ 0.000000e+00, %4620 ]
  %4629 = fcmp ugt double %4607, 0.000000e+00
  br i1 %4629, label %4630, label %4634

4630:                                             ; preds = %4627
  %4631 = fcmp ogt double %4607, 0.000000e+00
  %4632 = select i1 %4631, double %4607, double 1.000000e+00
  %4633 = fdiv double %4628, %4632
  br label %4634

4634:                                             ; preds = %4627, %4630
  %4635 = phi double [ %4633, %4630 ], [ %4604, %4627 ]
  %4636 = load double, ptr %4561, align 8, !tbaa !17
  %4637 = fcmp ogt double %4636, %4594
  br i1 %4637, label %4638, label %4639

4638:                                             ; preds = %4634
  store double %4594, ptr %4561, align 8, !tbaa !17
  br label %4639

4639:                                             ; preds = %4638, %4634
  %4640 = load double, ptr %4562, align 8, !tbaa !18
  %4641 = fcmp olt double %4640, %4594
  br i1 %4641, label %4642, label %4643

4642:                                             ; preds = %4639
  store double %4594, ptr %4562, align 8, !tbaa !18
  br label %4643

4643:                                             ; preds = %4642, %4639
  %4644 = load double, ptr %4563, align 8, !tbaa !19
  %4645 = fcmp olt double %4644, %4628
  br i1 %4645, label %4646, label %4647

4646:                                             ; preds = %4643
  store double %4628, ptr %4563, align 8, !tbaa !19
  store double %4601, ptr %4564, align 8, !tbaa !20
  store double %4594, ptr %4565, align 8, !tbaa !21
  store i32 %4584, ptr %4566, align 8, !tbaa !22
  store i32 %4582, ptr %4567, align 4, !tbaa !23
  br label %4647

4647:                                             ; preds = %4646, %4643
  %4648 = load double, ptr %4568, align 8, !tbaa !24
  %4649 = fcmp olt double %4648, %4635
  br i1 %4649, label %4650, label %4651

4650:                                             ; preds = %4647
  store double %4635, ptr %4568, align 8, !tbaa !24
  br label %4651

4651:                                             ; preds = %4650, %4647
  %4652 = fmul double %4635, %4635
  %4653 = fcmp ogt double %543, %4652
  br i1 %4653, label %4654, label %4660

4654:                                             ; preds = %4651
  %4655 = fsub double %4652, %.155887447
  %4656 = load double, ptr %4569, align 8, !tbaa !25
  %4657 = fadd double %4655, %4656
  %4658 = fsub double %4657, %4656
  %4659 = fsub double %4658, %4655
  store double %4657, ptr %4569, align 8, !tbaa !25
  br label %4660

4660:                                             ; preds = %4654, %4651
  %.25589 = phi double [ %4659, %4654 ], [ %.155887447, %4651 ]
  %4661 = call double @libxsmm_kahan_sum(double noundef %4607, ptr noundef nonnull %376, ptr noundef nonnull %373)
  %4662 = call double @libxsmm_kahan_sum(double noundef %4604, ptr noundef nonnull %377, ptr noundef nonnull %374)
  %4663 = call double @libxsmm_kahan_sum(double noundef %4628, ptr noundef nonnull %378, ptr noundef nonnull %375)
  %4664 = fmul double %4601, %4601
  %4665 = call double @libxsmm_kahan_sum(double noundef %4664, ptr noundef nonnull %369, ptr noundef nonnull %367)
  %4666 = fmul double %4594, %4594
  %4667 = call double @libxsmm_kahan_sum(double noundef %4666, ptr noundef nonnull %370, ptr noundef nonnull %368)
  %4668 = fmul double %4628, %4628
  %4669 = fcmp ogt double %543, %4668
  br i1 %4669, label %4670, label %4676

4670:                                             ; preds = %4660
  %4671 = call double @libxsmm_kahan_sum(double noundef %4668, ptr noundef nonnull %4570, ptr noundef nonnull %366)
  br label %4676

.thread6919:                                      ; preds = %4617, %4615
  %4672 = fcmp ord float %4600, 0.000000e+00
  %4673 = fcmp ogt double %543, %4607
  %4674 = select i1 %4672, i1 %4673, i1 false
  %4675 = select i1 %4674, i32 1, i32 2
  store i32 %4584, ptr %4566, align 8, !tbaa !22
  store i32 %4582, ptr %4567, align 4, !tbaa !23
  store double %4601, ptr %4564, align 8, !tbaa !20
  store double %4594, ptr %4565, align 8, !tbaa !21
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %378) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %377) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %376) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %375) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %374) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %373) #8
  br label %4808

4676:                                             ; preds = %4670, %4660
  %indvars.iv.next8294 = add nuw nsw i64 %indvars.iv8293, 1
  %exitcond8297.not = icmp eq i64 %indvars.iv.next8294, %4574
  br i1 %exitcond8297.not, label %._crit_edge7450.loopexit, label %4577, !llvm.loop !111

._crit_edge7450.loopexit:                         ; preds = %4676
  %.pre8706 = load double, ptr %376, align 8, !tbaa !13
  br label %._crit_edge7450

._crit_edge7450:                                  ; preds = %._crit_edge7450.loopexit, %4575
  %4677 = phi double [ 0.000000e+00, %4575 ], [ %.pre8706, %._crit_edge7450.loopexit ]
  %.15588.lcssa = phi double [ %.055877453, %4575 ], [ %.25589, %._crit_edge7450.loopexit ]
  %4678 = call double @libxsmm_kahan_sum(double noundef %4677, ptr noundef nonnull %4571, ptr noundef nonnull %371)
  %4679 = load double, ptr %377, align 8, !tbaa !13
  %4680 = call double @libxsmm_kahan_sum(double noundef %4679, ptr noundef nonnull %4572, ptr noundef nonnull %372)
  %4681 = load double, ptr %4573, align 8, !tbaa !28
  %4682 = load double, ptr %378, align 8, !tbaa !13
  %4683 = fcmp olt double %4681, %4682
  br i1 %4683, label %4684, label %4685

4684:                                             ; preds = %._crit_edge7450
  store double %4682, ptr %4573, align 8, !tbaa !28
  br label %4685

4685:                                             ; preds = %4684, %._crit_edge7450
  %4686 = load double, ptr %376, align 8, !tbaa !13
  %4687 = fcmp olt double %.055757455, %4686
  %.15576 = select i1 %4687, double %4686, double %.055757455
  %4688 = load double, ptr %377, align 8, !tbaa !13
  %4689 = fcmp olt double %.055797454, %4688
  %.15580 = select i1 %4689, double %4688, double %.055797454
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %378) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %377) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %376) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %375) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %374) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %373) #8
  %indvars.iv.next8299 = add nuw nsw i64 %indvars.iv8298, 1
  %exitcond8302.not = icmp eq i64 %indvars.iv.next8299, %wide.trip.count8301
  br i1 %exitcond8302.not, label %._crit_edge7458, label %4575, !llvm.loop !112

._crit_edge7458:                                  ; preds = %4685, %4553
  %.05579.lcssa = phi double [ 0.000000e+00, %4553 ], [ %.15580, %4685 ]
  %.05575.lcssa = phi double [ 0.000000e+00, %4553 ], [ %.15576, %4685 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %379) #8
  store double 0.000000e+00, ptr %379, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %380) #8
  store double 0.000000e+00, ptr %380, align 8, !tbaa !13
  %4690 = getelementptr inbounds i8, ptr %0, i64 112
  %4691 = load double, ptr %4690, align 8, !tbaa !30
  %4692 = fcmp oeq double %4691, 0.000000e+00
  br i1 %4692, label %4694, label %4693

4693:                                             ; preds = %._crit_edge7458
  call void @__assert_fail(ptr noundef nonnull @.str.1, ptr noundef nonnull @.str.2, i32 noundef 130, ptr noundef nonnull @__PRETTY_FUNCTION__.libxsmm_matdiff) #10
  unreachable

4694:                                             ; preds = %._crit_edge7458
  %4695 = getelementptr inbounds i8, ptr %0, i64 152
  %4696 = load double, ptr %4695, align 8, !tbaa !31
  %4697 = fcmp oeq double %4696, 0.000000e+00
  br i1 %4697, label %4699, label %4698

4698:                                             ; preds = %4694
  call void @__assert_fail(ptr noundef nonnull @.str.3, ptr noundef nonnull @.str.2, i32 noundef 131, ptr noundef nonnull @__PRETTY_FUNCTION__.libxsmm_matdiff) #10
  unreachable

4699:                                             ; preds = %4694
  %.not6282 = icmp eq i64 %538, 0
  br i1 %.not6282, label %4710, label %4700

4700:                                             ; preds = %4699
  %4701 = getelementptr inbounds i8, ptr %0, i64 80
  %4702 = load double, ptr %4701, align 8, !tbaa !32
  %4703 = uitofp i64 %538 to double
  %4704 = fdiv double %4702, %4703
  %4705 = getelementptr inbounds i8, ptr %0, i64 104
  store double %4704, ptr %4705, align 8, !tbaa !33
  %4706 = getelementptr inbounds i8, ptr %0, i64 120
  %4707 = load double, ptr %4706, align 8, !tbaa !34
  %4708 = fdiv double %4707, %4703
  %4709 = getelementptr inbounds i8, ptr %0, i64 144
  store double %4708, ptr %4709, align 8, !tbaa !35
  br label %4710

4710:                                             ; preds = %4700, %4699
  %4711 = fcmp ugt double %.05575.lcssa, 0.000000e+00
  br i1 %4711, label %4712, label %4718

4712:                                             ; preds = %4710
  %4713 = getelementptr inbounds i8, ptr %0, i64 16
  %4714 = load double, ptr %4713, align 8, !tbaa !28
  %4715 = fcmp ogt double %.05575.lcssa, 0.000000e+00
  %4716 = select i1 %4715, double %.05575.lcssa, double 1.000000e+00
  %4717 = fdiv double %4714, %4716
  br label %4718

4718:                                             ; preds = %4710, %4712
  %4719 = phi double [ %4717, %4712 ], [ %.05579.lcssa, %4710 ]
  %4720 = getelementptr inbounds i8, ptr %0, i64 24
  store double %4719, ptr %4720, align 8, !tbaa !36
  %4721 = load double, ptr %369, align 8
  %4722 = fcmp ugt double %4721, 0.000000e+00
  br i1 %4722, label %4729, label %4723

4723:                                             ; preds = %4718
  %4724 = load double, ptr %370, align 8, !tbaa !13
  %4725 = fmul double %4724, %4724
  %4726 = getelementptr inbounds i8, ptr %0, i64 56
  %4727 = load double, ptr %4726, align 8, !tbaa !37
  %4728 = fcmp olt double %4725, %4727
  %.6451 = select i1 %4728, double %4725, double %4727
  br label %4735

4729:                                             ; preds = %4718
  %4730 = getelementptr inbounds i8, ptr %0, i64 56
  %4731 = load double, ptr %4730, align 8, !tbaa !37
  %4732 = fcmp ogt double %4721, 0.000000e+00
  %4733 = select i1 %4732, double %4721, double 1.000000e+00
  %4734 = fdiv double %4731, %4733
  br label %4735

4735:                                             ; preds = %4723, %4729
  %4736 = phi double [ %4734, %4729 ], [ %.6451, %4723 ]
  %4737 = getelementptr inbounds i8, ptr %0, i64 32
  store double %4736, ptr %4737, align 8, !tbaa !38
  %4738 = icmp sgt i32 %.05042, 0
  br i1 %4738, label %.lr.ph7469, label %._crit_edge7470.thread

.lr.ph7469:                                       ; preds = %4735
  %.not6283 = icmp eq ptr %spec.select, null
  %4739 = getelementptr inbounds i8, ptr %0, i64 104
  %4740 = getelementptr inbounds i8, ptr %0, i64 144
  %4741 = zext nneg i32 %.05042 to i64
  %wide.trip.count8306 = zext nneg i32 %.05043 to i64
  br label %4742

4742:                                             ; preds = %.lr.ph7469, %4795
  %indvars.iv8308 = phi i64 [ 0, %.lr.ph7469 ], [ %indvars.iv.next8309, %4795 ]
  %.055837467 = phi double [ 0.000000e+00, %.lr.ph7469 ], [ %.15584, %4795 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %381) #8
  store double 0.000000e+00, ptr %381, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %382) #8
  store double 0.000000e+00, ptr %382, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %383) #8
  store double 0.000000e+00, ptr %383, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %384) #8
  store double 0.000000e+00, ptr %384, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %385) #8
  store double 0.000000e+00, ptr %385, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %386) #8
  store double 0.000000e+00, ptr %386, align 8, !tbaa !13
  br i1 %4558, label %.lr.ph7463, label %._crit_edge7464

.lr.ph7463:                                       ; preds = %4742, %.thread6935
  %indvars.iv8303 = phi i64 [ %indvars.iv.next8304, %.thread6935 ], [ 0, %4742 ]
  %4743 = mul nuw nsw i64 %indvars.iv8303, %4741
  %4744 = add nuw nsw i64 %4743, %indvars.iv8308
  %4745 = mul i64 %4557, %4744
  %4746 = urem i64 %4745, %4556
  %4747 = udiv i64 %4746, %4554
  %4748 = trunc i64 %4747 to i32
  %4749 = urem i64 %4746, %4554
  %4750 = trunc nuw i64 %4749 to i32
  %4751 = mul nsw i32 %.05040, %4748
  %4752 = add nsw i32 %4751, %4750
  %4753 = sext i32 %4752 to i64
  %4754 = getelementptr inbounds i16, ptr %spec.select6345, i64 %4753
  %4755 = load i16, ptr %4754, align 2, !tbaa !63
  %4756 = call float @libxsmm_convert_f16_to_f32(i16 noundef zeroext %4755)
  %4757 = fpext float %4756 to double
  br i1 %.not6283, label %.thread6935, label %4758

4758:                                             ; preds = %.lr.ph7463
  %4759 = mul nsw i32 %.05041, %4748
  %4760 = add nsw i32 %4759, %4750
  %4761 = sext i32 %4760 to i64
  %4762 = getelementptr inbounds i16, ptr %spec.select, i64 %4761
  %4763 = load i16, ptr %4762, align 2, !tbaa !63
  %4764 = call float @libxsmm_convert_f16_to_f32(i16 noundef zeroext %4763)
  %4765 = fpext float %4764 to double
  %4766 = fcmp olt float %4756, %4764
  br i1 %4766, label %4767, label %4769

4767:                                             ; preds = %4758
  %4768 = fsub double %4765, %4757
  br label %.thread6935

4769:                                             ; preds = %4758
  %4770 = fsub double %4757, %4765
  br label %.thread6935

.thread6935:                                      ; preds = %.lr.ph7463, %4767, %4769
  %4771 = phi double [ %4765, %4767 ], [ %4765, %4769 ], [ 0.000000e+00, %.lr.ph7463 ]
  %4772 = phi float [ %4764, %4767 ], [ %4764, %4769 ], [ 0.000000e+00, %.lr.ph7463 ]
  %4773 = phi double [ %4768, %4767 ], [ %4770, %4769 ], [ 0.000000e+00, %.lr.ph7463 ]
  %4774 = load double, ptr %4739, align 8, !tbaa !33
  %4775 = fsub double %4757, %4774
  %4776 = load double, ptr %4740, align 8, !tbaa !35
  %4777 = fsub double %4771, %4776
  %4778 = fcmp oge float %4756, 0.000000e+00
  %4779 = fneg double %4757
  %4780 = select i1 %4778, double %4757, double %4779
  %4781 = fcmp oge float %4772, 0.000000e+00
  %4782 = fneg double %4771
  %4783 = select i1 %4781, double %4771, double %4782
  %4784 = fmul double %4775, %4775
  %4785 = call double @libxsmm_kahan_sum(double noundef %4784, ptr noundef nonnull %4690, ptr noundef nonnull %379)
  %4786 = fmul double %4777, %4777
  %4787 = call double @libxsmm_kahan_sum(double noundef %4786, ptr noundef nonnull %4695, ptr noundef nonnull %380)
  %4788 = call double @libxsmm_kahan_sum(double noundef %4780, ptr noundef nonnull %384, ptr noundef nonnull %381)
  %4789 = call double @libxsmm_kahan_sum(double noundef %4783, ptr noundef nonnull %385, ptr noundef nonnull %382)
  %4790 = call double @libxsmm_kahan_sum(double noundef %4773, ptr noundef nonnull %386, ptr noundef nonnull %383)
  %indvars.iv.next8304 = add nuw nsw i64 %indvars.iv8303, 1
  %exitcond8307.not = icmp eq i64 %indvars.iv.next8304, %wide.trip.count8306
  br i1 %exitcond8307.not, label %._crit_edge7464.loopexit, label %.lr.ph7463, !llvm.loop !113

._crit_edge7464.loopexit:                         ; preds = %.thread6935
  %.pre8707 = load double, ptr %386, align 8, !tbaa !13
  br label %._crit_edge7464

._crit_edge7464:                                  ; preds = %._crit_edge7464.loopexit, %4742
  %4791 = phi double [ %.pre8707, %._crit_edge7464.loopexit ], [ 0.000000e+00, %4742 ]
  %4792 = load double, ptr %0, align 8, !tbaa !40
  %4793 = fcmp olt double %4792, %4791
  br i1 %4793, label %4794, label %4795

4794:                                             ; preds = %._crit_edge7464
  store double %4791, ptr %0, align 8, !tbaa !40
  br label %4795

4795:                                             ; preds = %4794, %._crit_edge7464
  %4796 = load double, ptr %384, align 8, !tbaa !13
  %4797 = fcmp olt double %.055837467, %4796
  %.15584 = select i1 %4797, double %4796, double %.055837467
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %386) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %385) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %384) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %383) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %382) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %381) #8
  %indvars.iv.next8309 = add nuw nsw i64 %indvars.iv8308, 1
  %exitcond8312.not = icmp eq i64 %indvars.iv.next8309, %4741
  br i1 %exitcond8312.not, label %._crit_edge7470, label %4742, !llvm.loop !114

._crit_edge7470:                                  ; preds = %4795
  %4798 = fcmp ugt double %.15584, 0.000000e+00
  br i1 %4798, label %4800, label %._crit_edge7470.thread

._crit_edge7470.thread:                           ; preds = %4735, %._crit_edge7470
  %4799 = load double, ptr %0, align 8, !tbaa !40
  br label %4805

4800:                                             ; preds = %._crit_edge7470
  %4801 = load double, ptr %0, align 8, !tbaa !40
  %4802 = fcmp ogt double %.15584, 0.000000e+00
  %4803 = select i1 %4802, double %.15584, double 1.000000e+00
  %4804 = fdiv double %4801, %4803
  br label %4805

4805:                                             ; preds = %4800, %._crit_edge7470.thread
  %4806 = phi double [ %4799, %._crit_edge7470.thread ], [ %4804, %4800 ]
  %4807 = getelementptr inbounds i8, ptr %0, i64 8
  store double %4806, ptr %4807, align 8, !tbaa !42
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %380) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %379) #8
  br label %4808

4808:                                             ; preds = %.thread6919, %4805
  %.896934 = phi i32 [ %4675, %.thread6919 ], [ 0, %4805 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %372) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %371) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %370) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %369) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %368) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %367) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %366) #8
  br label %6314

4809:                                             ; preds = %541
  %4810 = icmp eq i32 %535, 0
  br i1 %4810, label %4811, label %5052

4811:                                             ; preds = %4809
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %387) #8
  store double 0.000000e+00, ptr %387, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %388) #8
  store double 0.000000e+00, ptr %388, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %389) #8
  store double 0.000000e+00, ptr %389, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %390) #8
  store double 0.000000e+00, ptr %390, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %391) #8
  store double 0.000000e+00, ptr %391, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %392) #8
  store double 0.000000e+00, ptr %392, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %393) #8
  store double 0.000000e+00, ptr %393, align 8, !tbaa !13
  %4812 = icmp sgt i32 %.05043, 0
  br i1 %4812, label %.lr.ph7430, label %._crit_edge7431

.lr.ph7430:                                       ; preds = %4811
  %4813 = icmp sgt i32 %.05042, 0
  %.not6278 = icmp eq ptr %spec.select, null
  %4814 = getelementptr inbounds i8, ptr %0, i64 96
  %4815 = getelementptr inbounds i8, ptr %0, i64 128
  %4816 = getelementptr inbounds i8, ptr %0, i64 136
  %4817 = getelementptr inbounds i8, ptr %0, i64 40
  %4818 = getelementptr inbounds i8, ptr %0, i64 160
  %4819 = getelementptr inbounds i8, ptr %0, i64 168
  %4820 = getelementptr inbounds i8, ptr %0, i64 176
  %4821 = getelementptr inbounds i8, ptr %0, i64 180
  %4822 = getelementptr inbounds i8, ptr %0, i64 48
  %4823 = getelementptr inbounds i8, ptr %0, i64 64
  %4824 = getelementptr inbounds i8, ptr %0, i64 56
  %4825 = getelementptr inbounds i8, ptr %0, i64 80
  %4826 = getelementptr inbounds i8, ptr %0, i64 120
  %4827 = getelementptr inbounds i8, ptr %0, i64 16
  %4828 = sext i32 %.05041 to i64
  %4829 = sext i32 %.05040 to i64
  %wide.trip.count8276 = zext nneg i32 %.05043 to i64
  %wide.trip.count8271 = zext nneg i32 %.05042 to i64
  br label %4830

4830:                                             ; preds = %.lr.ph7430, %4928
  %indvars.iv8273 = phi i64 [ 0, %.lr.ph7430 ], [ %indvars.iv.next8274, %4928 ]
  %.055247427 = phi double [ 0.000000e+00, %.lr.ph7430 ], [ %.15525.lcssa, %4928 ]
  %.055337426 = phi double [ 0.000000e+00, %.lr.ph7430 ], [ %.15534, %4928 ]
  %.055377425 = phi double [ 0.000000e+00, %.lr.ph7430 ], [ %.15538, %4928 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %394) #8
  store double 0.000000e+00, ptr %394, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %395) #8
  store double 0.000000e+00, ptr %395, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %396) #8
  store double 0.000000e+00, ptr %396, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %397) #8
  store double 0.000000e+00, ptr %397, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %398) #8
  store double 0.000000e+00, ptr %398, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %399) #8
  store double 0.000000e+00, ptr %399, align 8, !tbaa !13
  br i1 %4813, label %.lr.ph7422, label %._crit_edge7423

.lr.ph7422:                                       ; preds = %4830
  %4831 = mul nsw i64 %indvars.iv8273, %4828
  %4832 = mul nsw i64 %indvars.iv8273, %4829
  %4833 = trunc nuw nsw i64 %indvars.iv8273 to i32
  %invariant.gep9020 = getelementptr i16, ptr %spec.select, i64 %4831
  %invariant.gep9022 = getelementptr i16, ptr %spec.select6345, i64 %4832
  br label %4834

4834:                                             ; preds = %.lr.ph7422, %4919
  %indvars.iv8268 = phi i64 [ 0, %.lr.ph7422 ], [ %indvars.iv.next8269, %4919 ]
  %.155257419 = phi double [ %.055247427, %.lr.ph7422 ], [ %.25526, %4919 ]
  br i1 %.not6278, label %4838, label %4835

4835:                                             ; preds = %4834
  %gep9021 = getelementptr i16, ptr %invariant.gep9020, i64 %indvars.iv8268
  %4836 = load i16, ptr %gep9021, align 2, !tbaa !63
  %4837 = call float @libxsmm_convert_bf16_to_f32(i16 noundef zeroext %4836)
  br label %4838

4838:                                             ; preds = %4834, %4835
  %4839 = phi float [ %4837, %4835 ], [ 0.000000e+00, %4834 ]
  %4840 = fpext float %4839 to double
  %gep9023 = getelementptr i16, ptr %invariant.gep9022, i64 %indvars.iv8268
  %4841 = load i16, ptr %gep9023, align 2, !tbaa !63
  %4842 = call float @libxsmm_convert_bf16_to_f32(i16 noundef zeroext %4841)
  %4843 = fpext float %4842 to double
  %4844 = fcmp oge float %4839, 0.000000e+00
  %4845 = fneg double %4840
  %4846 = select i1 %4844, double %4840, double %4845
  %4847 = fcmp oge float %4842, 0.000000e+00
  %4848 = fneg double %4843
  %4849 = select i1 %4847, double %4843, double %4848
  %4850 = load double, ptr %542, align 8, !tbaa !10
  %4851 = fcmp ogt double %4850, %4843
  br i1 %4851, label %4852, label %4853

4852:                                             ; preds = %4838
  store double %4843, ptr %542, align 8, !tbaa !10
  br label %4853

4853:                                             ; preds = %4852, %4838
  %4854 = load double, ptr %4814, align 8, !tbaa !16
  %4855 = fcmp olt double %4854, %4843
  br i1 %4855, label %4856, label %4857

4856:                                             ; preds = %4853
  store double %4843, ptr %4814, align 8, !tbaa !16
  br label %4857

4857:                                             ; preds = %4856, %4853
  %4858 = fcmp ord float %4839, 0.000000e+00
  %4859 = trunc nuw nsw i64 %indvars.iv8268 to i32
  br i1 %4858, label %4860, label %.thread6944

4860:                                             ; preds = %4857
  %4861 = fcmp ogt double %543, %4846
  %4862 = fcmp oeq float %4839, %4842
  %or.cond6452 = select i1 %4861, i1 true, i1 %4862
  br i1 %or.cond6452, label %4863, label %.thread6944

4863:                                             ; preds = %4860
  br i1 %.not6278, label %4870, label %4864

4864:                                             ; preds = %4863
  %4865 = fcmp olt float %4842, %4839
  br i1 %4865, label %4866, label %4868

4866:                                             ; preds = %4864
  %4867 = fsub double %4840, %4843
  br label %4870

4868:                                             ; preds = %4864
  %4869 = fsub double %4843, %4840
  br label %4870

4870:                                             ; preds = %4863, %4866, %4868
  %4871 = phi double [ %4867, %4866 ], [ %4869, %4868 ], [ 0.000000e+00, %4863 ]
  %4872 = fcmp ugt double %4849, 0.000000e+00
  br i1 %4872, label %4873, label %4877

4873:                                             ; preds = %4870
  %4874 = fcmp ogt double %4849, 0.000000e+00
  %4875 = select i1 %4874, double %4849, double 1.000000e+00
  %4876 = fdiv double %4871, %4875
  br label %4877

4877:                                             ; preds = %4870, %4873
  %4878 = phi double [ %4876, %4873 ], [ %4846, %4870 ]
  %4879 = load double, ptr %4815, align 8, !tbaa !17
  %4880 = fcmp ogt double %4879, %4840
  br i1 %4880, label %4881, label %4882

4881:                                             ; preds = %4877
  store double %4840, ptr %4815, align 8, !tbaa !17
  br label %4882

4882:                                             ; preds = %4881, %4877
  %4883 = load double, ptr %4816, align 8, !tbaa !18
  %4884 = fcmp olt double %4883, %4840
  br i1 %4884, label %4885, label %4886

4885:                                             ; preds = %4882
  store double %4840, ptr %4816, align 8, !tbaa !18
  br label %4886

4886:                                             ; preds = %4885, %4882
  %4887 = load double, ptr %4817, align 8, !tbaa !19
  %4888 = fcmp olt double %4887, %4871
  br i1 %4888, label %4889, label %4890

4889:                                             ; preds = %4886
  store double %4871, ptr %4817, align 8, !tbaa !19
  store double %4843, ptr %4818, align 8, !tbaa !20
  store double %4840, ptr %4819, align 8, !tbaa !21
  store i32 %4859, ptr %4820, align 8, !tbaa !22
  store i32 %4833, ptr %4821, align 4, !tbaa !23
  br label %4890

4890:                                             ; preds = %4889, %4886
  %4891 = load double, ptr %4822, align 8, !tbaa !24
  %4892 = fcmp olt double %4891, %4878
  br i1 %4892, label %4893, label %4894

4893:                                             ; preds = %4890
  store double %4878, ptr %4822, align 8, !tbaa !24
  br label %4894

4894:                                             ; preds = %4893, %4890
  %4895 = fmul double %4878, %4878
  %4896 = fcmp ogt double %543, %4895
  br i1 %4896, label %4897, label %4903

4897:                                             ; preds = %4894
  %4898 = fsub double %4895, %.155257419
  %4899 = load double, ptr %4823, align 8, !tbaa !25
  %4900 = fadd double %4898, %4899
  %4901 = fsub double %4900, %4899
  %4902 = fsub double %4901, %4898
  store double %4900, ptr %4823, align 8, !tbaa !25
  br label %4903

4903:                                             ; preds = %4897, %4894
  %.25526 = phi double [ %4902, %4897 ], [ %.155257419, %4894 ]
  %4904 = call double @libxsmm_kahan_sum(double noundef %4849, ptr noundef nonnull %397, ptr noundef nonnull %394)
  %4905 = call double @libxsmm_kahan_sum(double noundef %4846, ptr noundef nonnull %398, ptr noundef nonnull %395)
  %4906 = call double @libxsmm_kahan_sum(double noundef %4871, ptr noundef nonnull %399, ptr noundef nonnull %396)
  %4907 = fmul double %4843, %4843
  %4908 = call double @libxsmm_kahan_sum(double noundef %4907, ptr noundef nonnull %390, ptr noundef nonnull %388)
  %4909 = fmul double %4840, %4840
  %4910 = call double @libxsmm_kahan_sum(double noundef %4909, ptr noundef nonnull %391, ptr noundef nonnull %389)
  %4911 = fmul double %4871, %4871
  %4912 = fcmp ogt double %543, %4911
  br i1 %4912, label %4913, label %4919

4913:                                             ; preds = %4903
  %4914 = call double @libxsmm_kahan_sum(double noundef %4911, ptr noundef nonnull %4824, ptr noundef nonnull %387)
  br label %4919

.thread6944:                                      ; preds = %4860, %4857
  %4915 = fcmp ord float %4842, 0.000000e+00
  %4916 = fcmp ogt double %543, %4849
  %4917 = select i1 %4915, i1 %4916, i1 false
  %4918 = select i1 %4917, i32 1, i32 2
  store i32 %4859, ptr %4820, align 8, !tbaa !22
  store i32 %4833, ptr %4821, align 4, !tbaa !23
  store double %4843, ptr %4818, align 8, !tbaa !20
  store double %4840, ptr %4819, align 8, !tbaa !21
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %399) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %398) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %397) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %396) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %395) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %394) #8
  br label %5051

4919:                                             ; preds = %4913, %4903
  %indvars.iv.next8269 = add nuw nsw i64 %indvars.iv8268, 1
  %exitcond8272.not = icmp eq i64 %indvars.iv.next8269, %wide.trip.count8271
  br i1 %exitcond8272.not, label %._crit_edge7423.loopexit, label %4834, !llvm.loop !115

._crit_edge7423.loopexit:                         ; preds = %4919
  %.pre8705 = load double, ptr %397, align 8, !tbaa !13
  br label %._crit_edge7423

._crit_edge7423:                                  ; preds = %._crit_edge7423.loopexit, %4830
  %4920 = phi double [ 0.000000e+00, %4830 ], [ %.pre8705, %._crit_edge7423.loopexit ]
  %.15525.lcssa = phi double [ %.055247427, %4830 ], [ %.25526, %._crit_edge7423.loopexit ]
  %4921 = call double @libxsmm_kahan_sum(double noundef %4920, ptr noundef nonnull %4825, ptr noundef nonnull %392)
  %4922 = load double, ptr %398, align 8, !tbaa !13
  %4923 = call double @libxsmm_kahan_sum(double noundef %4922, ptr noundef nonnull %4826, ptr noundef nonnull %393)
  %4924 = load double, ptr %4827, align 8, !tbaa !28
  %4925 = load double, ptr %399, align 8, !tbaa !13
  %4926 = fcmp olt double %4924, %4925
  br i1 %4926, label %4927, label %4928

4927:                                             ; preds = %._crit_edge7423
  store double %4925, ptr %4827, align 8, !tbaa !28
  br label %4928

4928:                                             ; preds = %4927, %._crit_edge7423
  %4929 = load double, ptr %397, align 8, !tbaa !13
  %4930 = fcmp olt double %.055377425, %4929
  %.15538 = select i1 %4930, double %4929, double %.055377425
  %4931 = load double, ptr %398, align 8, !tbaa !13
  %4932 = fcmp olt double %.055337426, %4931
  %.15534 = select i1 %4932, double %4931, double %.055337426
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %399) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %398) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %397) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %396) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %395) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %394) #8
  %indvars.iv.next8274 = add nuw nsw i64 %indvars.iv8273, 1
  %exitcond8277.not = icmp eq i64 %indvars.iv.next8274, %wide.trip.count8276
  br i1 %exitcond8277.not, label %._crit_edge7431, label %4830, !llvm.loop !116

._crit_edge7431:                                  ; preds = %4928, %4811
  %.05537.lcssa = phi double [ 0.000000e+00, %4811 ], [ %.15538, %4928 ]
  %.05533.lcssa = phi double [ 0.000000e+00, %4811 ], [ %.15534, %4928 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %400) #8
  store double 0.000000e+00, ptr %400, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %401) #8
  store double 0.000000e+00, ptr %401, align 8, !tbaa !13
  %4933 = getelementptr inbounds i8, ptr %0, i64 112
  %4934 = load double, ptr %4933, align 8, !tbaa !30
  %4935 = fcmp oeq double %4934, 0.000000e+00
  br i1 %4935, label %4937, label %4936

4936:                                             ; preds = %._crit_edge7431
  call void @__assert_fail(ptr noundef nonnull @.str.1, ptr noundef nonnull @.str.2, i32 noundef 130, ptr noundef nonnull @__PRETTY_FUNCTION__.libxsmm_matdiff) #10
  unreachable

4937:                                             ; preds = %._crit_edge7431
  %4938 = getelementptr inbounds i8, ptr %0, i64 152
  %4939 = load double, ptr %4938, align 8, !tbaa !31
  %4940 = fcmp oeq double %4939, 0.000000e+00
  br i1 %4940, label %4942, label %4941

4941:                                             ; preds = %4937
  call void @__assert_fail(ptr noundef nonnull @.str.3, ptr noundef nonnull @.str.2, i32 noundef 131, ptr noundef nonnull @__PRETTY_FUNCTION__.libxsmm_matdiff) #10
  unreachable

4942:                                             ; preds = %4937
  %.not6279 = icmp eq i64 %538, 0
  br i1 %.not6279, label %4953, label %4943

4943:                                             ; preds = %4942
  %4944 = getelementptr inbounds i8, ptr %0, i64 80
  %4945 = load double, ptr %4944, align 8, !tbaa !32
  %4946 = uitofp i64 %538 to double
  %4947 = fdiv double %4945, %4946
  %4948 = getelementptr inbounds i8, ptr %0, i64 104
  store double %4947, ptr %4948, align 8, !tbaa !33
  %4949 = getelementptr inbounds i8, ptr %0, i64 120
  %4950 = load double, ptr %4949, align 8, !tbaa !34
  %4951 = fdiv double %4950, %4946
  %4952 = getelementptr inbounds i8, ptr %0, i64 144
  store double %4951, ptr %4952, align 8, !tbaa !35
  br label %4953

4953:                                             ; preds = %4943, %4942
  %4954 = fcmp ugt double %.05537.lcssa, 0.000000e+00
  br i1 %4954, label %4955, label %4961

4955:                                             ; preds = %4953
  %4956 = getelementptr inbounds i8, ptr %0, i64 16
  %4957 = load double, ptr %4956, align 8, !tbaa !28
  %4958 = fcmp ogt double %.05537.lcssa, 0.000000e+00
  %4959 = select i1 %4958, double %.05537.lcssa, double 1.000000e+00
  %4960 = fdiv double %4957, %4959
  br label %4961

4961:                                             ; preds = %4953, %4955
  %4962 = phi double [ %4960, %4955 ], [ %.05533.lcssa, %4953 ]
  %4963 = getelementptr inbounds i8, ptr %0, i64 24
  store double %4962, ptr %4963, align 8, !tbaa !36
  %4964 = load double, ptr %390, align 8
  %4965 = fcmp ugt double %4964, 0.000000e+00
  br i1 %4965, label %4972, label %4966

4966:                                             ; preds = %4961
  %4967 = load double, ptr %391, align 8, !tbaa !13
  %4968 = fmul double %4967, %4967
  %4969 = getelementptr inbounds i8, ptr %0, i64 56
  %4970 = load double, ptr %4969, align 8, !tbaa !37
  %4971 = fcmp olt double %4968, %4970
  %.6457 = select i1 %4971, double %4968, double %4970
  br label %4978

4972:                                             ; preds = %4961
  %4973 = getelementptr inbounds i8, ptr %0, i64 56
  %4974 = load double, ptr %4973, align 8, !tbaa !37
  %4975 = fcmp ogt double %4964, 0.000000e+00
  %4976 = select i1 %4975, double %4964, double 1.000000e+00
  %4977 = fdiv double %4974, %4976
  br label %4978

4978:                                             ; preds = %4966, %4972
  %4979 = phi double [ %4977, %4972 ], [ %.6457, %4966 ]
  %4980 = getelementptr inbounds i8, ptr %0, i64 32
  store double %4979, ptr %4980, align 8, !tbaa !38
  %4981 = icmp sgt i32 %.05042, 0
  br i1 %4981, label %.lr.ph7443, label %._crit_edge7444.thread

.lr.ph7443:                                       ; preds = %4978
  %.not6280 = icmp eq ptr %spec.select, null
  %4982 = getelementptr inbounds i8, ptr %0, i64 104
  %4983 = getelementptr inbounds i8, ptr %0, i64 144
  %4984 = sext i32 %.05040 to i64
  %4985 = sext i32 %.05041 to i64
  %wide.trip.count8291 = zext nneg i32 %.05042 to i64
  %wide.trip.count8281 = zext nneg i32 %.05043 to i64
  %wide.trip.count8286 = zext nneg i32 %.05043 to i64
  br label %4986

4986:                                             ; preds = %.lr.ph7443, %5038
  %indvars.iv8288 = phi i64 [ 0, %.lr.ph7443 ], [ %indvars.iv.next8289, %5038 ]
  %.055317438 = phi double [ 0.000000e+00, %.lr.ph7443 ], [ %.15532, %5038 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %402) #8
  store double 0.000000e+00, ptr %402, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %403) #8
  store double 0.000000e+00, ptr %403, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %404) #8
  store double 0.000000e+00, ptr %404, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %405) #8
  store double 0.000000e+00, ptr %405, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %406) #8
  store double 0.000000e+00, ptr %406, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %407) #8
  store double 0.000000e+00, ptr %407, align 8, !tbaa !13
  br i1 %4812, label %.lr.ph7436, label %._crit_edge7437

.lr.ph7436:                                       ; preds = %4986
  %invariant.gep9028 = getelementptr i16, ptr %spec.select6345, i64 %indvars.iv8288
  br i1 %.not6280, label %.thread6960.us, label %.lr.ph7436.split.preheader

.lr.ph7436.split.preheader:                       ; preds = %.lr.ph7436
  %invariant.gep9026 = getelementptr i16, ptr %spec.select, i64 %indvars.iv8288
  br label %.lr.ph7436.split

.thread6960.us:                                   ; preds = %.lr.ph7436, %.thread6960.us
  %indvars.iv8283 = phi i64 [ %indvars.iv.next8284, %.thread6960.us ], [ 0, %.lr.ph7436 ]
  %4987 = mul nsw i64 %indvars.iv8283, %4984
  %gep9029 = getelementptr i16, ptr %invariant.gep9028, i64 %4987
  %4988 = load i16, ptr %gep9029, align 2, !tbaa !63
  %4989 = call float @libxsmm_convert_bf16_to_f32(i16 noundef zeroext %4988)
  %4990 = fpext float %4989 to double
  %4991 = load double, ptr %4982, align 8, !tbaa !33
  %4992 = fsub double %4990, %4991
  %4993 = load double, ptr %4983, align 8, !tbaa !35
  %4994 = fsub double 0.000000e+00, %4993
  %4995 = fcmp oge float %4989, 0.000000e+00
  %4996 = fneg double %4990
  %4997 = select i1 %4995, double %4990, double %4996
  %4998 = fmul double %4992, %4992
  %4999 = call double @libxsmm_kahan_sum(double noundef %4998, ptr noundef nonnull %4933, ptr noundef nonnull %400)
  %5000 = fmul double %4994, %4994
  %5001 = call double @libxsmm_kahan_sum(double noundef %5000, ptr noundef nonnull %4938, ptr noundef nonnull %401)
  %5002 = call double @libxsmm_kahan_sum(double noundef %4997, ptr noundef nonnull %405, ptr noundef nonnull %402)
  %5003 = call double @libxsmm_kahan_sum(double noundef 0.000000e+00, ptr noundef nonnull %406, ptr noundef nonnull %403)
  %5004 = call double @libxsmm_kahan_sum(double noundef 0.000000e+00, ptr noundef nonnull %407, ptr noundef nonnull %404)
  %indvars.iv.next8284 = add nuw nsw i64 %indvars.iv8283, 1
  %exitcond8287.not = icmp eq i64 %indvars.iv.next8284, %wide.trip.count8286
  br i1 %exitcond8287.not, label %._crit_edge7437, label %.thread6960.us, !llvm.loop !117

.lr.ph7436.split:                                 ; preds = %.lr.ph7436.split.preheader, %.lr.ph7436.split
  %indvars.iv8278 = phi i64 [ 0, %.lr.ph7436.split.preheader ], [ %indvars.iv.next8279, %.lr.ph7436.split ]
  %5005 = mul nsw i64 %indvars.iv8278, %4984
  %gep9025 = getelementptr i16, ptr %invariant.gep9028, i64 %5005
  %5006 = load i16, ptr %gep9025, align 2, !tbaa !63
  %5007 = call float @libxsmm_convert_bf16_to_f32(i16 noundef zeroext %5006)
  %5008 = fpext float %5007 to double
  %5009 = mul nsw i64 %indvars.iv8278, %4985
  %gep9027 = getelementptr i16, ptr %invariant.gep9026, i64 %5009
  %5010 = load i16, ptr %gep9027, align 2, !tbaa !63
  %5011 = call float @libxsmm_convert_bf16_to_f32(i16 noundef zeroext %5010)
  %5012 = fpext float %5011 to double
  %5013 = fcmp olt float %5007, %5011
  %5014 = fsub double %5012, %5008
  %5015 = fsub double %5008, %5012
  %5016 = select i1 %5013, double %5014, double %5015
  %5017 = load double, ptr %4982, align 8, !tbaa !33
  %5018 = fsub double %5008, %5017
  %5019 = load double, ptr %4983, align 8, !tbaa !35
  %5020 = fsub double %5012, %5019
  %5021 = fcmp oge float %5007, 0.000000e+00
  %5022 = fneg double %5008
  %5023 = select i1 %5021, double %5008, double %5022
  %5024 = fcmp oge float %5011, 0.000000e+00
  %5025 = fneg double %5012
  %5026 = select i1 %5024, double %5012, double %5025
  %5027 = fmul double %5018, %5018
  %5028 = call double @libxsmm_kahan_sum(double noundef %5027, ptr noundef nonnull %4933, ptr noundef nonnull %400)
  %5029 = fmul double %5020, %5020
  %5030 = call double @libxsmm_kahan_sum(double noundef %5029, ptr noundef nonnull %4938, ptr noundef nonnull %401)
  %5031 = call double @libxsmm_kahan_sum(double noundef %5023, ptr noundef nonnull %405, ptr noundef nonnull %402)
  %5032 = call double @libxsmm_kahan_sum(double noundef %5026, ptr noundef nonnull %406, ptr noundef nonnull %403)
  %5033 = call double @libxsmm_kahan_sum(double noundef %5016, ptr noundef nonnull %407, ptr noundef nonnull %404)
  %indvars.iv.next8279 = add nuw nsw i64 %indvars.iv8278, 1
  %exitcond8282.not = icmp eq i64 %indvars.iv.next8279, %wide.trip.count8281
  br i1 %exitcond8282.not, label %._crit_edge7437, label %.lr.ph7436.split, !llvm.loop !117

._crit_edge7437:                                  ; preds = %.lr.ph7436.split, %.thread6960.us, %4986
  %5034 = load double, ptr %0, align 8, !tbaa !40
  %5035 = load double, ptr %407, align 8, !tbaa !13
  %5036 = fcmp olt double %5034, %5035
  br i1 %5036, label %5037, label %5038

5037:                                             ; preds = %._crit_edge7437
  store double %5035, ptr %0, align 8, !tbaa !40
  br label %5038

5038:                                             ; preds = %5037, %._crit_edge7437
  %5039 = load double, ptr %405, align 8, !tbaa !13
  %5040 = fcmp olt double %.055317438, %5039
  %.15532 = select i1 %5040, double %5039, double %.055317438
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %407) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %406) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %405) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %404) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %403) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %402) #8
  %indvars.iv.next8289 = add nuw nsw i64 %indvars.iv8288, 1
  %exitcond8292.not = icmp eq i64 %indvars.iv.next8289, %wide.trip.count8291
  br i1 %exitcond8292.not, label %._crit_edge7444, label %4986, !llvm.loop !118

._crit_edge7444:                                  ; preds = %5038
  %5041 = fcmp ugt double %.15532, 0.000000e+00
  br i1 %5041, label %5043, label %._crit_edge7444.thread

._crit_edge7444.thread:                           ; preds = %4978, %._crit_edge7444
  %5042 = load double, ptr %0, align 8, !tbaa !40
  br label %5048

5043:                                             ; preds = %._crit_edge7444
  %5044 = load double, ptr %0, align 8, !tbaa !40
  %5045 = fcmp ogt double %.15532, 0.000000e+00
  %5046 = select i1 %5045, double %.15532, double 1.000000e+00
  %5047 = fdiv double %5044, %5046
  br label %5048

5048:                                             ; preds = %5043, %._crit_edge7444.thread
  %5049 = phi double [ %5042, %._crit_edge7444.thread ], [ %5047, %5043 ]
  %5050 = getelementptr inbounds i8, ptr %0, i64 8
  store double %5049, ptr %5050, align 8, !tbaa !42
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %401) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %400) #8
  br label %5051

5051:                                             ; preds = %.thread6944, %5048
  %.946959 = phi i32 [ %4918, %.thread6944 ], [ 0, %5048 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %393) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %392) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %391) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %390) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %389) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %388) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %387) #8
  br label %6314

5052:                                             ; preds = %4809
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %408) #8
  store double 0.000000e+00, ptr %408, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %409) #8
  store double 0.000000e+00, ptr %409, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %410) #8
  store double 0.000000e+00, ptr %410, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %411) #8
  store double 0.000000e+00, ptr %411, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %412) #8
  store double 0.000000e+00, ptr %412, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %413) #8
  store double 0.000000e+00, ptr %413, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %414) #8
  store double 0.000000e+00, ptr %414, align 8, !tbaa !13
  %5053 = sext i32 %.05042 to i64
  %5054 = sext i32 %.05043 to i64
  %5055 = mul nsw i64 %5053, %5054
  %5056 = tail call i64 @libxsmm_coprime2(i64 noundef %5055)
  %5057 = icmp sgt i32 %.05043, 0
  br i1 %5057, label %.lr.ph7404, label %._crit_edge7405

.lr.ph7404:                                       ; preds = %5052
  %5058 = icmp sgt i32 %.05042, 0
  %.not6275 = icmp eq ptr %spec.select, null
  %5059 = getelementptr inbounds i8, ptr %0, i64 96
  %5060 = getelementptr inbounds i8, ptr %0, i64 128
  %5061 = getelementptr inbounds i8, ptr %0, i64 136
  %5062 = getelementptr inbounds i8, ptr %0, i64 40
  %5063 = getelementptr inbounds i8, ptr %0, i64 160
  %5064 = getelementptr inbounds i8, ptr %0, i64 168
  %5065 = getelementptr inbounds i8, ptr %0, i64 176
  %5066 = getelementptr inbounds i8, ptr %0, i64 180
  %5067 = getelementptr inbounds i8, ptr %0, i64 48
  %5068 = getelementptr inbounds i8, ptr %0, i64 64
  %5069 = getelementptr inbounds i8, ptr %0, i64 56
  %5070 = getelementptr inbounds i8, ptr %0, i64 80
  %5071 = getelementptr inbounds i8, ptr %0, i64 120
  %5072 = getelementptr inbounds i8, ptr %0, i64 16
  %5073 = zext i32 %.05042 to i64
  %wide.trip.count8256 = zext nneg i32 %.05043 to i64
  br label %5074

5074:                                             ; preds = %.lr.ph7404, %5184
  %indvars.iv8253 = phi i64 [ 0, %.lr.ph7404 ], [ %indvars.iv.next8254, %5184 ]
  %.054517401 = phi double [ 0.000000e+00, %.lr.ph7404 ], [ %.15452.lcssa, %5184 ]
  %.054607400 = phi double [ 0.000000e+00, %.lr.ph7404 ], [ %.15461, %5184 ]
  %.054647399 = phi double [ 0.000000e+00, %.lr.ph7404 ], [ %.15465, %5184 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %415) #8
  store double 0.000000e+00, ptr %415, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %416) #8
  store double 0.000000e+00, ptr %416, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %417) #8
  store double 0.000000e+00, ptr %417, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %418) #8
  store double 0.000000e+00, ptr %418, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %419) #8
  store double 0.000000e+00, ptr %419, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %420) #8
  store double 0.000000e+00, ptr %420, align 8, !tbaa !13
  br i1 %5058, label %.lr.ph7396, label %._crit_edge7397

.lr.ph7396:                                       ; preds = %5074
  %5075 = mul nuw nsw i64 %indvars.iv8253, %5073
  br label %5076

5076:                                             ; preds = %.lr.ph7396, %5175
  %indvars.iv8248 = phi i64 [ 0, %.lr.ph7396 ], [ %indvars.iv.next8249, %5175 ]
  %.154527393 = phi double [ %.054517401, %.lr.ph7396 ], [ %.25453, %5175 ]
  %5077 = add nuw nsw i64 %indvars.iv8248, %5075
  %5078 = mul i64 %5056, %5077
  %5079 = urem i64 %5078, %5055
  %5080 = udiv i64 %5079, %5053
  %5081 = trunc i64 %5080 to i32
  %5082 = urem i64 %5079, %5053
  %5083 = trunc nuw i64 %5082 to i32
  br i1 %.not6275, label %5091, label %5084

5084:                                             ; preds = %5076
  %5085 = mul nsw i32 %.05041, %5081
  %5086 = add nsw i32 %5085, %5083
  %5087 = sext i32 %5086 to i64
  %5088 = getelementptr inbounds i16, ptr %spec.select, i64 %5087
  %5089 = load i16, ptr %5088, align 2, !tbaa !63
  %5090 = call float @libxsmm_convert_bf16_to_f32(i16 noundef zeroext %5089)
  br label %5091

5091:                                             ; preds = %5076, %5084
  %5092 = phi float [ %5090, %5084 ], [ 0.000000e+00, %5076 ]
  %5093 = fpext float %5092 to double
  %5094 = mul nsw i32 %.05040, %5081
  %5095 = add nsw i32 %5094, %5083
  %5096 = sext i32 %5095 to i64
  %5097 = getelementptr inbounds i16, ptr %spec.select6345, i64 %5096
  %5098 = load i16, ptr %5097, align 2, !tbaa !63
  %5099 = call float @libxsmm_convert_bf16_to_f32(i16 noundef zeroext %5098)
  %5100 = fpext float %5099 to double
  %5101 = fcmp oge float %5092, 0.000000e+00
  %5102 = fneg double %5093
  %5103 = select i1 %5101, double %5093, double %5102
  %5104 = fcmp oge float %5099, 0.000000e+00
  %5105 = fneg double %5100
  %5106 = select i1 %5104, double %5100, double %5105
  %5107 = load double, ptr %542, align 8, !tbaa !10
  %5108 = fcmp ogt double %5107, %5100
  br i1 %5108, label %5109, label %5110

5109:                                             ; preds = %5091
  store double %5100, ptr %542, align 8, !tbaa !10
  br label %5110

5110:                                             ; preds = %5109, %5091
  %5111 = load double, ptr %5059, align 8, !tbaa !16
  %5112 = fcmp olt double %5111, %5100
  br i1 %5112, label %5113, label %5114

5113:                                             ; preds = %5110
  store double %5100, ptr %5059, align 8, !tbaa !16
  br label %5114

5114:                                             ; preds = %5113, %5110
  %5115 = fcmp ord float %5092, 0.000000e+00
  br i1 %5115, label %5116, label %.thread6969

5116:                                             ; preds = %5114
  %5117 = fcmp ogt double %543, %5103
  %5118 = fcmp oeq float %5092, %5099
  %or.cond6458 = select i1 %5117, i1 true, i1 %5118
  br i1 %or.cond6458, label %5119, label %.thread6969

5119:                                             ; preds = %5116
  br i1 %.not6275, label %5126, label %5120

5120:                                             ; preds = %5119
  %5121 = fcmp olt float %5099, %5092
  br i1 %5121, label %5122, label %5124

5122:                                             ; preds = %5120
  %5123 = fsub double %5093, %5100
  br label %5126

5124:                                             ; preds = %5120
  %5125 = fsub double %5100, %5093
  br label %5126

5126:                                             ; preds = %5119, %5122, %5124
  %5127 = phi double [ %5123, %5122 ], [ %5125, %5124 ], [ 0.000000e+00, %5119 ]
  %5128 = fcmp ugt double %5106, 0.000000e+00
  br i1 %5128, label %5129, label %5133

5129:                                             ; preds = %5126
  %5130 = fcmp ogt double %5106, 0.000000e+00
  %5131 = select i1 %5130, double %5106, double 1.000000e+00
  %5132 = fdiv double %5127, %5131
  br label %5133

5133:                                             ; preds = %5126, %5129
  %5134 = phi double [ %5132, %5129 ], [ %5103, %5126 ]
  %5135 = load double, ptr %5060, align 8, !tbaa !17
  %5136 = fcmp ogt double %5135, %5093
  br i1 %5136, label %5137, label %5138

5137:                                             ; preds = %5133
  store double %5093, ptr %5060, align 8, !tbaa !17
  br label %5138

5138:                                             ; preds = %5137, %5133
  %5139 = load double, ptr %5061, align 8, !tbaa !18
  %5140 = fcmp olt double %5139, %5093
  br i1 %5140, label %5141, label %5142

5141:                                             ; preds = %5138
  store double %5093, ptr %5061, align 8, !tbaa !18
  br label %5142

5142:                                             ; preds = %5141, %5138
  %5143 = load double, ptr %5062, align 8, !tbaa !19
  %5144 = fcmp olt double %5143, %5127
  br i1 %5144, label %5145, label %5146

5145:                                             ; preds = %5142
  store double %5127, ptr %5062, align 8, !tbaa !19
  store double %5100, ptr %5063, align 8, !tbaa !20
  store double %5093, ptr %5064, align 8, !tbaa !21
  store i32 %5083, ptr %5065, align 8, !tbaa !22
  store i32 %5081, ptr %5066, align 4, !tbaa !23
  br label %5146

5146:                                             ; preds = %5145, %5142
  %5147 = load double, ptr %5067, align 8, !tbaa !24
  %5148 = fcmp olt double %5147, %5134
  br i1 %5148, label %5149, label %5150

5149:                                             ; preds = %5146
  store double %5134, ptr %5067, align 8, !tbaa !24
  br label %5150

5150:                                             ; preds = %5149, %5146
  %5151 = fmul double %5134, %5134
  %5152 = fcmp ogt double %543, %5151
  br i1 %5152, label %5153, label %5159

5153:                                             ; preds = %5150
  %5154 = fsub double %5151, %.154527393
  %5155 = load double, ptr %5068, align 8, !tbaa !25
  %5156 = fadd double %5154, %5155
  %5157 = fsub double %5156, %5155
  %5158 = fsub double %5157, %5154
  store double %5156, ptr %5068, align 8, !tbaa !25
  br label %5159

5159:                                             ; preds = %5153, %5150
  %.25453 = phi double [ %5158, %5153 ], [ %.154527393, %5150 ]
  %5160 = call double @libxsmm_kahan_sum(double noundef %5106, ptr noundef nonnull %418, ptr noundef nonnull %415)
  %5161 = call double @libxsmm_kahan_sum(double noundef %5103, ptr noundef nonnull %419, ptr noundef nonnull %416)
  %5162 = call double @libxsmm_kahan_sum(double noundef %5127, ptr noundef nonnull %420, ptr noundef nonnull %417)
  %5163 = fmul double %5100, %5100
  %5164 = call double @libxsmm_kahan_sum(double noundef %5163, ptr noundef nonnull %411, ptr noundef nonnull %409)
  %5165 = fmul double %5093, %5093
  %5166 = call double @libxsmm_kahan_sum(double noundef %5165, ptr noundef nonnull %412, ptr noundef nonnull %410)
  %5167 = fmul double %5127, %5127
  %5168 = fcmp ogt double %543, %5167
  br i1 %5168, label %5169, label %5175

5169:                                             ; preds = %5159
  %5170 = call double @libxsmm_kahan_sum(double noundef %5167, ptr noundef nonnull %5069, ptr noundef nonnull %408)
  br label %5175

.thread6969:                                      ; preds = %5116, %5114
  %5171 = fcmp ord float %5099, 0.000000e+00
  %5172 = fcmp ogt double %543, %5106
  %5173 = select i1 %5171, i1 %5172, i1 false
  %5174 = select i1 %5173, i32 1, i32 2
  store i32 %5083, ptr %5065, align 8, !tbaa !22
  store i32 %5081, ptr %5066, align 4, !tbaa !23
  store double %5100, ptr %5063, align 8, !tbaa !20
  store double %5093, ptr %5064, align 8, !tbaa !21
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %420) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %419) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %418) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %417) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %416) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %415) #8
  br label %5307

5175:                                             ; preds = %5169, %5159
  %indvars.iv.next8249 = add nuw nsw i64 %indvars.iv8248, 1
  %exitcond8252.not = icmp eq i64 %indvars.iv.next8249, %5073
  br i1 %exitcond8252.not, label %._crit_edge7397.loopexit, label %5076, !llvm.loop !119

._crit_edge7397.loopexit:                         ; preds = %5175
  %.pre8703 = load double, ptr %418, align 8, !tbaa !13
  br label %._crit_edge7397

._crit_edge7397:                                  ; preds = %._crit_edge7397.loopexit, %5074
  %5176 = phi double [ 0.000000e+00, %5074 ], [ %.pre8703, %._crit_edge7397.loopexit ]
  %.15452.lcssa = phi double [ %.054517401, %5074 ], [ %.25453, %._crit_edge7397.loopexit ]
  %5177 = call double @libxsmm_kahan_sum(double noundef %5176, ptr noundef nonnull %5070, ptr noundef nonnull %413)
  %5178 = load double, ptr %419, align 8, !tbaa !13
  %5179 = call double @libxsmm_kahan_sum(double noundef %5178, ptr noundef nonnull %5071, ptr noundef nonnull %414)
  %5180 = load double, ptr %5072, align 8, !tbaa !28
  %5181 = load double, ptr %420, align 8, !tbaa !13
  %5182 = fcmp olt double %5180, %5181
  br i1 %5182, label %5183, label %5184

5183:                                             ; preds = %._crit_edge7397
  store double %5181, ptr %5072, align 8, !tbaa !28
  br label %5184

5184:                                             ; preds = %5183, %._crit_edge7397
  %5185 = load double, ptr %418, align 8, !tbaa !13
  %5186 = fcmp olt double %.054647399, %5185
  %.15465 = select i1 %5186, double %5185, double %.054647399
  %5187 = load double, ptr %419, align 8, !tbaa !13
  %5188 = fcmp olt double %.054607400, %5187
  %.15461 = select i1 %5188, double %5187, double %.054607400
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %420) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %419) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %418) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %417) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %416) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %415) #8
  %indvars.iv.next8254 = add nuw nsw i64 %indvars.iv8253, 1
  %exitcond8257.not = icmp eq i64 %indvars.iv.next8254, %wide.trip.count8256
  br i1 %exitcond8257.not, label %._crit_edge7405, label %5074, !llvm.loop !120

._crit_edge7405:                                  ; preds = %5184, %5052
  %.05464.lcssa = phi double [ 0.000000e+00, %5052 ], [ %.15465, %5184 ]
  %.05460.lcssa = phi double [ 0.000000e+00, %5052 ], [ %.15461, %5184 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %421) #8
  store double 0.000000e+00, ptr %421, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %422) #8
  store double 0.000000e+00, ptr %422, align 8, !tbaa !13
  %5189 = getelementptr inbounds i8, ptr %0, i64 112
  %5190 = load double, ptr %5189, align 8, !tbaa !30
  %5191 = fcmp oeq double %5190, 0.000000e+00
  br i1 %5191, label %5193, label %5192

5192:                                             ; preds = %._crit_edge7405
  call void @__assert_fail(ptr noundef nonnull @.str.1, ptr noundef nonnull @.str.2, i32 noundef 130, ptr noundef nonnull @__PRETTY_FUNCTION__.libxsmm_matdiff) #10
  unreachable

5193:                                             ; preds = %._crit_edge7405
  %5194 = getelementptr inbounds i8, ptr %0, i64 152
  %5195 = load double, ptr %5194, align 8, !tbaa !31
  %5196 = fcmp oeq double %5195, 0.000000e+00
  br i1 %5196, label %5198, label %5197

5197:                                             ; preds = %5193
  call void @__assert_fail(ptr noundef nonnull @.str.3, ptr noundef nonnull @.str.2, i32 noundef 131, ptr noundef nonnull @__PRETTY_FUNCTION__.libxsmm_matdiff) #10
  unreachable

5198:                                             ; preds = %5193
  %.not6276 = icmp eq i64 %538, 0
  br i1 %.not6276, label %5209, label %5199

5199:                                             ; preds = %5198
  %5200 = getelementptr inbounds i8, ptr %0, i64 80
  %5201 = load double, ptr %5200, align 8, !tbaa !32
  %5202 = uitofp i64 %538 to double
  %5203 = fdiv double %5201, %5202
  %5204 = getelementptr inbounds i8, ptr %0, i64 104
  store double %5203, ptr %5204, align 8, !tbaa !33
  %5205 = getelementptr inbounds i8, ptr %0, i64 120
  %5206 = load double, ptr %5205, align 8, !tbaa !34
  %5207 = fdiv double %5206, %5202
  %5208 = getelementptr inbounds i8, ptr %0, i64 144
  store double %5207, ptr %5208, align 8, !tbaa !35
  br label %5209

5209:                                             ; preds = %5199, %5198
  %5210 = fcmp ugt double %.05464.lcssa, 0.000000e+00
  br i1 %5210, label %5211, label %5217

5211:                                             ; preds = %5209
  %5212 = getelementptr inbounds i8, ptr %0, i64 16
  %5213 = load double, ptr %5212, align 8, !tbaa !28
  %5214 = fcmp ogt double %.05464.lcssa, 0.000000e+00
  %5215 = select i1 %5214, double %.05464.lcssa, double 1.000000e+00
  %5216 = fdiv double %5213, %5215
  br label %5217

5217:                                             ; preds = %5209, %5211
  %5218 = phi double [ %5216, %5211 ], [ %.05460.lcssa, %5209 ]
  %5219 = getelementptr inbounds i8, ptr %0, i64 24
  store double %5218, ptr %5219, align 8, !tbaa !36
  %5220 = load double, ptr %411, align 8
  %5221 = fcmp ugt double %5220, 0.000000e+00
  br i1 %5221, label %5228, label %5222

5222:                                             ; preds = %5217
  %5223 = load double, ptr %412, align 8, !tbaa !13
  %5224 = fmul double %5223, %5223
  %5225 = getelementptr inbounds i8, ptr %0, i64 56
  %5226 = load double, ptr %5225, align 8, !tbaa !37
  %5227 = fcmp olt double %5224, %5226
  %.6463 = select i1 %5227, double %5224, double %5226
  br label %5234

5228:                                             ; preds = %5217
  %5229 = getelementptr inbounds i8, ptr %0, i64 56
  %5230 = load double, ptr %5229, align 8, !tbaa !37
  %5231 = fcmp ogt double %5220, 0.000000e+00
  %5232 = select i1 %5231, double %5220, double 1.000000e+00
  %5233 = fdiv double %5230, %5232
  br label %5234

5234:                                             ; preds = %5222, %5228
  %5235 = phi double [ %5233, %5228 ], [ %.6463, %5222 ]
  %5236 = getelementptr inbounds i8, ptr %0, i64 32
  store double %5235, ptr %5236, align 8, !tbaa !38
  %5237 = icmp sgt i32 %.05042, 0
  br i1 %5237, label %.lr.ph7416, label %._crit_edge7417.thread

.lr.ph7416:                                       ; preds = %5234
  %.not6277 = icmp eq ptr %spec.select, null
  %5238 = getelementptr inbounds i8, ptr %0, i64 104
  %5239 = getelementptr inbounds i8, ptr %0, i64 144
  %5240 = zext nneg i32 %.05042 to i64
  %wide.trip.count8261 = zext nneg i32 %.05043 to i64
  br label %5241

5241:                                             ; preds = %.lr.ph7416, %5294
  %indvars.iv8263 = phi i64 [ 0, %.lr.ph7416 ], [ %indvars.iv.next8264, %5294 ]
  %.054587412 = phi double [ 0.000000e+00, %.lr.ph7416 ], [ %.15459, %5294 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %423) #8
  store double 0.000000e+00, ptr %423, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %424) #8
  store double 0.000000e+00, ptr %424, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %425) #8
  store double 0.000000e+00, ptr %425, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %426) #8
  store double 0.000000e+00, ptr %426, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %427) #8
  store double 0.000000e+00, ptr %427, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %428) #8
  store double 0.000000e+00, ptr %428, align 8, !tbaa !13
  br i1 %5057, label %.lr.ph7410, label %._crit_edge7411

.lr.ph7410:                                       ; preds = %5241, %.thread6985
  %indvars.iv8258 = phi i64 [ %indvars.iv.next8259, %.thread6985 ], [ 0, %5241 ]
  %5242 = mul nuw nsw i64 %indvars.iv8258, %5240
  %5243 = add nuw nsw i64 %5242, %indvars.iv8263
  %5244 = mul i64 %5056, %5243
  %5245 = urem i64 %5244, %5055
  %5246 = udiv i64 %5245, %5053
  %5247 = trunc i64 %5246 to i32
  %5248 = urem i64 %5245, %5053
  %5249 = trunc nuw i64 %5248 to i32
  %5250 = mul nsw i32 %.05040, %5247
  %5251 = add nsw i32 %5250, %5249
  %5252 = sext i32 %5251 to i64
  %5253 = getelementptr inbounds i16, ptr %spec.select6345, i64 %5252
  %5254 = load i16, ptr %5253, align 2, !tbaa !63
  %5255 = call float @libxsmm_convert_bf16_to_f32(i16 noundef zeroext %5254)
  %5256 = fpext float %5255 to double
  br i1 %.not6277, label %.thread6985, label %5257

5257:                                             ; preds = %.lr.ph7410
  %5258 = mul nsw i32 %.05041, %5247
  %5259 = add nsw i32 %5258, %5249
  %5260 = sext i32 %5259 to i64
  %5261 = getelementptr inbounds i16, ptr %spec.select, i64 %5260
  %5262 = load i16, ptr %5261, align 2, !tbaa !63
  %5263 = call float @libxsmm_convert_bf16_to_f32(i16 noundef zeroext %5262)
  %5264 = fpext float %5263 to double
  %5265 = fcmp olt float %5255, %5263
  br i1 %5265, label %5266, label %5268

5266:                                             ; preds = %5257
  %5267 = fsub double %5264, %5256
  br label %.thread6985

5268:                                             ; preds = %5257
  %5269 = fsub double %5256, %5264
  br label %.thread6985

.thread6985:                                      ; preds = %.lr.ph7410, %5266, %5268
  %5270 = phi double [ %5264, %5266 ], [ %5264, %5268 ], [ 0.000000e+00, %.lr.ph7410 ]
  %5271 = phi float [ %5263, %5266 ], [ %5263, %5268 ], [ 0.000000e+00, %.lr.ph7410 ]
  %5272 = phi double [ %5267, %5266 ], [ %5269, %5268 ], [ 0.000000e+00, %.lr.ph7410 ]
  %5273 = load double, ptr %5238, align 8, !tbaa !33
  %5274 = fsub double %5256, %5273
  %5275 = load double, ptr %5239, align 8, !tbaa !35
  %5276 = fsub double %5270, %5275
  %5277 = fcmp oge float %5255, 0.000000e+00
  %5278 = fneg double %5256
  %5279 = select i1 %5277, double %5256, double %5278
  %5280 = fcmp oge float %5271, 0.000000e+00
  %5281 = fneg double %5270
  %5282 = select i1 %5280, double %5270, double %5281
  %5283 = fmul double %5274, %5274
  %5284 = call double @libxsmm_kahan_sum(double noundef %5283, ptr noundef nonnull %5189, ptr noundef nonnull %421)
  %5285 = fmul double %5276, %5276
  %5286 = call double @libxsmm_kahan_sum(double noundef %5285, ptr noundef nonnull %5194, ptr noundef nonnull %422)
  %5287 = call double @libxsmm_kahan_sum(double noundef %5279, ptr noundef nonnull %426, ptr noundef nonnull %423)
  %5288 = call double @libxsmm_kahan_sum(double noundef %5282, ptr noundef nonnull %427, ptr noundef nonnull %424)
  %5289 = call double @libxsmm_kahan_sum(double noundef %5272, ptr noundef nonnull %428, ptr noundef nonnull %425)
  %indvars.iv.next8259 = add nuw nsw i64 %indvars.iv8258, 1
  %exitcond8262.not = icmp eq i64 %indvars.iv.next8259, %wide.trip.count8261
  br i1 %exitcond8262.not, label %._crit_edge7411.loopexit, label %.lr.ph7410, !llvm.loop !121

._crit_edge7411.loopexit:                         ; preds = %.thread6985
  %.pre8704 = load double, ptr %428, align 8, !tbaa !13
  br label %._crit_edge7411

._crit_edge7411:                                  ; preds = %._crit_edge7411.loopexit, %5241
  %5290 = phi double [ %.pre8704, %._crit_edge7411.loopexit ], [ 0.000000e+00, %5241 ]
  %5291 = load double, ptr %0, align 8, !tbaa !40
  %5292 = fcmp olt double %5291, %5290
  br i1 %5292, label %5293, label %5294

5293:                                             ; preds = %._crit_edge7411
  store double %5290, ptr %0, align 8, !tbaa !40
  br label %5294

5294:                                             ; preds = %5293, %._crit_edge7411
  %5295 = load double, ptr %426, align 8, !tbaa !13
  %5296 = fcmp olt double %.054587412, %5295
  %.15459 = select i1 %5296, double %5295, double %.054587412
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %428) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %427) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %426) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %425) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %424) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %423) #8
  %indvars.iv.next8264 = add nuw nsw i64 %indvars.iv8263, 1
  %exitcond8267.not = icmp eq i64 %indvars.iv.next8264, %5240
  br i1 %exitcond8267.not, label %._crit_edge7417, label %5241, !llvm.loop !122

._crit_edge7417:                                  ; preds = %5294
  %5297 = fcmp ugt double %.15459, 0.000000e+00
  br i1 %5297, label %5299, label %._crit_edge7417.thread

._crit_edge7417.thread:                           ; preds = %5234, %._crit_edge7417
  %5298 = load double, ptr %0, align 8, !tbaa !40
  br label %5304

5299:                                             ; preds = %._crit_edge7417
  %5300 = load double, ptr %0, align 8, !tbaa !40
  %5301 = fcmp ogt double %.15459, 0.000000e+00
  %5302 = select i1 %5301, double %.15459, double 1.000000e+00
  %5303 = fdiv double %5300, %5302
  br label %5304

5304:                                             ; preds = %5299, %._crit_edge7417.thread
  %5305 = phi double [ %5298, %._crit_edge7417.thread ], [ %5303, %5299 ]
  %5306 = getelementptr inbounds i8, ptr %0, i64 8
  store double %5305, ptr %5306, align 8, !tbaa !42
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %422) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %421) #8
  br label %5307

5307:                                             ; preds = %.thread6969, %5304
  %.996984 = phi i32 [ %5174, %.thread6969 ], [ 0, %5304 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %414) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %413) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %412) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %411) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %410) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %409) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %408) #8
  br label %6314

5308:                                             ; preds = %541
  %5309 = icmp eq i32 %535, 0
  br i1 %5309, label %5310, label %5551

5310:                                             ; preds = %5308
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %429) #8
  store double 0.000000e+00, ptr %429, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %430) #8
  store double 0.000000e+00, ptr %430, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %431) #8
  store double 0.000000e+00, ptr %431, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %432) #8
  store double 0.000000e+00, ptr %432, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %433) #8
  store double 0.000000e+00, ptr %433, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %434) #8
  store double 0.000000e+00, ptr %434, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %435) #8
  store double 0.000000e+00, ptr %435, align 8, !tbaa !13
  %5311 = icmp sgt i32 %.05043, 0
  br i1 %5311, label %.lr.ph7377, label %._crit_edge7378

.lr.ph7377:                                       ; preds = %5310
  %5312 = icmp sgt i32 %.05042, 0
  %.not6272 = icmp eq ptr %spec.select, null
  %5313 = getelementptr inbounds i8, ptr %0, i64 96
  %5314 = getelementptr inbounds i8, ptr %0, i64 128
  %5315 = getelementptr inbounds i8, ptr %0, i64 136
  %5316 = getelementptr inbounds i8, ptr %0, i64 40
  %5317 = getelementptr inbounds i8, ptr %0, i64 160
  %5318 = getelementptr inbounds i8, ptr %0, i64 168
  %5319 = getelementptr inbounds i8, ptr %0, i64 176
  %5320 = getelementptr inbounds i8, ptr %0, i64 180
  %5321 = getelementptr inbounds i8, ptr %0, i64 48
  %5322 = getelementptr inbounds i8, ptr %0, i64 64
  %5323 = getelementptr inbounds i8, ptr %0, i64 56
  %5324 = getelementptr inbounds i8, ptr %0, i64 80
  %5325 = getelementptr inbounds i8, ptr %0, i64 120
  %5326 = getelementptr inbounds i8, ptr %0, i64 16
  %5327 = sext i32 %.05041 to i64
  %5328 = sext i32 %.05040 to i64
  %wide.trip.count8231 = zext nneg i32 %.05043 to i64
  %wide.trip.count8226 = zext nneg i32 %.05042 to i64
  br label %5329

5329:                                             ; preds = %.lr.ph7377, %5427
  %indvars.iv8228 = phi i64 [ 0, %.lr.ph7377 ], [ %indvars.iv.next8229, %5427 ]
  %.053677374 = phi double [ 0.000000e+00, %.lr.ph7377 ], [ %.15368.lcssa, %5427 ]
  %.053767373 = phi double [ 0.000000e+00, %.lr.ph7377 ], [ %.15377, %5427 ]
  %.053807372 = phi double [ 0.000000e+00, %.lr.ph7377 ], [ %.15381, %5427 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %436) #8
  store double 0.000000e+00, ptr %436, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %437) #8
  store double 0.000000e+00, ptr %437, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %438) #8
  store double 0.000000e+00, ptr %438, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %439) #8
  store double 0.000000e+00, ptr %439, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %440) #8
  store double 0.000000e+00, ptr %440, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %441) #8
  store double 0.000000e+00, ptr %441, align 8, !tbaa !13
  br i1 %5312, label %.lr.ph7369, label %._crit_edge7370

.lr.ph7369:                                       ; preds = %5329
  %5330 = mul nsw i64 %indvars.iv8228, %5327
  %5331 = mul nsw i64 %indvars.iv8228, %5328
  %5332 = trunc nuw nsw i64 %indvars.iv8228 to i32
  %invariant.gep9010 = getelementptr i8, ptr %spec.select, i64 %5330
  %invariant.gep9012 = getelementptr i8, ptr %spec.select6345, i64 %5331
  br label %5333

5333:                                             ; preds = %.lr.ph7369, %5418
  %indvars.iv8223 = phi i64 [ 0, %.lr.ph7369 ], [ %indvars.iv.next8224, %5418 ]
  %.153687366 = phi double [ %.053677374, %.lr.ph7369 ], [ %.25369, %5418 ]
  br i1 %.not6272, label %5337, label %5334

5334:                                             ; preds = %5333
  %gep9011 = getelementptr i8, ptr %invariant.gep9010, i64 %indvars.iv8223
  %5335 = load i8, ptr %gep9011, align 1, !tbaa !9
  %5336 = call float @libxsmm_convert_bf8_to_f32(i8 noundef zeroext %5335)
  br label %5337

5337:                                             ; preds = %5333, %5334
  %5338 = phi float [ %5336, %5334 ], [ 0.000000e+00, %5333 ]
  %5339 = fpext float %5338 to double
  %gep9013 = getelementptr i8, ptr %invariant.gep9012, i64 %indvars.iv8223
  %5340 = load i8, ptr %gep9013, align 1, !tbaa !9
  %5341 = call float @libxsmm_convert_bf8_to_f32(i8 noundef zeroext %5340)
  %5342 = fpext float %5341 to double
  %5343 = fcmp oge float %5338, 0.000000e+00
  %5344 = fneg double %5339
  %5345 = select i1 %5343, double %5339, double %5344
  %5346 = fcmp oge float %5341, 0.000000e+00
  %5347 = fneg double %5342
  %5348 = select i1 %5346, double %5342, double %5347
  %5349 = load double, ptr %542, align 8, !tbaa !10
  %5350 = fcmp ogt double %5349, %5342
  br i1 %5350, label %5351, label %5352

5351:                                             ; preds = %5337
  store double %5342, ptr %542, align 8, !tbaa !10
  br label %5352

5352:                                             ; preds = %5351, %5337
  %5353 = load double, ptr %5313, align 8, !tbaa !16
  %5354 = fcmp olt double %5353, %5342
  br i1 %5354, label %5355, label %5356

5355:                                             ; preds = %5352
  store double %5342, ptr %5313, align 8, !tbaa !16
  br label %5356

5356:                                             ; preds = %5355, %5352
  %5357 = fcmp ord float %5338, 0.000000e+00
  %5358 = trunc nuw nsw i64 %indvars.iv8223 to i32
  br i1 %5357, label %5359, label %.thread6994

5359:                                             ; preds = %5356
  %5360 = fcmp ogt double %543, %5345
  %5361 = fcmp oeq float %5338, %5341
  %or.cond6464 = select i1 %5360, i1 true, i1 %5361
  br i1 %or.cond6464, label %5362, label %.thread6994

5362:                                             ; preds = %5359
  br i1 %.not6272, label %5369, label %5363

5363:                                             ; preds = %5362
  %5364 = fcmp olt float %5341, %5338
  br i1 %5364, label %5365, label %5367

5365:                                             ; preds = %5363
  %5366 = fsub double %5339, %5342
  br label %5369

5367:                                             ; preds = %5363
  %5368 = fsub double %5342, %5339
  br label %5369

5369:                                             ; preds = %5362, %5365, %5367
  %5370 = phi double [ %5366, %5365 ], [ %5368, %5367 ], [ 0.000000e+00, %5362 ]
  %5371 = fcmp ugt double %5348, 0.000000e+00
  br i1 %5371, label %5372, label %5376

5372:                                             ; preds = %5369
  %5373 = fcmp ogt double %5348, 0.000000e+00
  %5374 = select i1 %5373, double %5348, double 1.000000e+00
  %5375 = fdiv double %5370, %5374
  br label %5376

5376:                                             ; preds = %5369, %5372
  %5377 = phi double [ %5375, %5372 ], [ %5345, %5369 ]
  %5378 = load double, ptr %5314, align 8, !tbaa !17
  %5379 = fcmp ogt double %5378, %5339
  br i1 %5379, label %5380, label %5381

5380:                                             ; preds = %5376
  store double %5339, ptr %5314, align 8, !tbaa !17
  br label %5381

5381:                                             ; preds = %5380, %5376
  %5382 = load double, ptr %5315, align 8, !tbaa !18
  %5383 = fcmp olt double %5382, %5339
  br i1 %5383, label %5384, label %5385

5384:                                             ; preds = %5381
  store double %5339, ptr %5315, align 8, !tbaa !18
  br label %5385

5385:                                             ; preds = %5384, %5381
  %5386 = load double, ptr %5316, align 8, !tbaa !19
  %5387 = fcmp olt double %5386, %5370
  br i1 %5387, label %5388, label %5389

5388:                                             ; preds = %5385
  store double %5370, ptr %5316, align 8, !tbaa !19
  store double %5342, ptr %5317, align 8, !tbaa !20
  store double %5339, ptr %5318, align 8, !tbaa !21
  store i32 %5358, ptr %5319, align 8, !tbaa !22
  store i32 %5332, ptr %5320, align 4, !tbaa !23
  br label %5389

5389:                                             ; preds = %5388, %5385
  %5390 = load double, ptr %5321, align 8, !tbaa !24
  %5391 = fcmp olt double %5390, %5377
  br i1 %5391, label %5392, label %5393

5392:                                             ; preds = %5389
  store double %5377, ptr %5321, align 8, !tbaa !24
  br label %5393

5393:                                             ; preds = %5392, %5389
  %5394 = fmul double %5377, %5377
  %5395 = fcmp ogt double %543, %5394
  br i1 %5395, label %5396, label %5402

5396:                                             ; preds = %5393
  %5397 = fsub double %5394, %.153687366
  %5398 = load double, ptr %5322, align 8, !tbaa !25
  %5399 = fadd double %5397, %5398
  %5400 = fsub double %5399, %5398
  %5401 = fsub double %5400, %5397
  store double %5399, ptr %5322, align 8, !tbaa !25
  br label %5402

5402:                                             ; preds = %5396, %5393
  %.25369 = phi double [ %5401, %5396 ], [ %.153687366, %5393 ]
  %5403 = call double @libxsmm_kahan_sum(double noundef %5348, ptr noundef nonnull %439, ptr noundef nonnull %436)
  %5404 = call double @libxsmm_kahan_sum(double noundef %5345, ptr noundef nonnull %440, ptr noundef nonnull %437)
  %5405 = call double @libxsmm_kahan_sum(double noundef %5370, ptr noundef nonnull %441, ptr noundef nonnull %438)
  %5406 = fmul double %5342, %5342
  %5407 = call double @libxsmm_kahan_sum(double noundef %5406, ptr noundef nonnull %432, ptr noundef nonnull %430)
  %5408 = fmul double %5339, %5339
  %5409 = call double @libxsmm_kahan_sum(double noundef %5408, ptr noundef nonnull %433, ptr noundef nonnull %431)
  %5410 = fmul double %5370, %5370
  %5411 = fcmp ogt double %543, %5410
  br i1 %5411, label %5412, label %5418

5412:                                             ; preds = %5402
  %5413 = call double @libxsmm_kahan_sum(double noundef %5410, ptr noundef nonnull %5323, ptr noundef nonnull %429)
  br label %5418

.thread6994:                                      ; preds = %5359, %5356
  %5414 = fcmp ord float %5341, 0.000000e+00
  %5415 = fcmp ogt double %543, %5348
  %5416 = select i1 %5414, i1 %5415, i1 false
  %5417 = select i1 %5416, i32 1, i32 2
  store i32 %5358, ptr %5319, align 8, !tbaa !22
  store i32 %5332, ptr %5320, align 4, !tbaa !23
  store double %5342, ptr %5317, align 8, !tbaa !20
  store double %5339, ptr %5318, align 8, !tbaa !21
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %441) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %440) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %439) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %438) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %437) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %436) #8
  br label %5550

5418:                                             ; preds = %5412, %5402
  %indvars.iv.next8224 = add nuw nsw i64 %indvars.iv8223, 1
  %exitcond8227.not = icmp eq i64 %indvars.iv.next8224, %wide.trip.count8226
  br i1 %exitcond8227.not, label %._crit_edge7370.loopexit, label %5333, !llvm.loop !123

._crit_edge7370.loopexit:                         ; preds = %5418
  %.pre8702 = load double, ptr %439, align 8, !tbaa !13
  br label %._crit_edge7370

._crit_edge7370:                                  ; preds = %._crit_edge7370.loopexit, %5329
  %5419 = phi double [ 0.000000e+00, %5329 ], [ %.pre8702, %._crit_edge7370.loopexit ]
  %.15368.lcssa = phi double [ %.053677374, %5329 ], [ %.25369, %._crit_edge7370.loopexit ]
  %5420 = call double @libxsmm_kahan_sum(double noundef %5419, ptr noundef nonnull %5324, ptr noundef nonnull %434)
  %5421 = load double, ptr %440, align 8, !tbaa !13
  %5422 = call double @libxsmm_kahan_sum(double noundef %5421, ptr noundef nonnull %5325, ptr noundef nonnull %435)
  %5423 = load double, ptr %5326, align 8, !tbaa !28
  %5424 = load double, ptr %441, align 8, !tbaa !13
  %5425 = fcmp olt double %5423, %5424
  br i1 %5425, label %5426, label %5427

5426:                                             ; preds = %._crit_edge7370
  store double %5424, ptr %5326, align 8, !tbaa !28
  br label %5427

5427:                                             ; preds = %5426, %._crit_edge7370
  %5428 = load double, ptr %439, align 8, !tbaa !13
  %5429 = fcmp olt double %.053807372, %5428
  %.15381 = select i1 %5429, double %5428, double %.053807372
  %5430 = load double, ptr %440, align 8, !tbaa !13
  %5431 = fcmp olt double %.053767373, %5430
  %.15377 = select i1 %5431, double %5430, double %.053767373
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %441) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %440) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %439) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %438) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %437) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %436) #8
  %indvars.iv.next8229 = add nuw nsw i64 %indvars.iv8228, 1
  %exitcond8232.not = icmp eq i64 %indvars.iv.next8229, %wide.trip.count8231
  br i1 %exitcond8232.not, label %._crit_edge7378, label %5329, !llvm.loop !124

._crit_edge7378:                                  ; preds = %5427, %5310
  %.05380.lcssa = phi double [ 0.000000e+00, %5310 ], [ %.15381, %5427 ]
  %.05376.lcssa = phi double [ 0.000000e+00, %5310 ], [ %.15377, %5427 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %442) #8
  store double 0.000000e+00, ptr %442, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %443) #8
  store double 0.000000e+00, ptr %443, align 8, !tbaa !13
  %5432 = getelementptr inbounds i8, ptr %0, i64 112
  %5433 = load double, ptr %5432, align 8, !tbaa !30
  %5434 = fcmp oeq double %5433, 0.000000e+00
  br i1 %5434, label %5436, label %5435

5435:                                             ; preds = %._crit_edge7378
  call void @__assert_fail(ptr noundef nonnull @.str.1, ptr noundef nonnull @.str.2, i32 noundef 130, ptr noundef nonnull @__PRETTY_FUNCTION__.libxsmm_matdiff) #10
  unreachable

5436:                                             ; preds = %._crit_edge7378
  %5437 = getelementptr inbounds i8, ptr %0, i64 152
  %5438 = load double, ptr %5437, align 8, !tbaa !31
  %5439 = fcmp oeq double %5438, 0.000000e+00
  br i1 %5439, label %5441, label %5440

5440:                                             ; preds = %5436
  call void @__assert_fail(ptr noundef nonnull @.str.3, ptr noundef nonnull @.str.2, i32 noundef 131, ptr noundef nonnull @__PRETTY_FUNCTION__.libxsmm_matdiff) #10
  unreachable

5441:                                             ; preds = %5436
  %.not6273 = icmp eq i64 %538, 0
  br i1 %.not6273, label %5452, label %5442

5442:                                             ; preds = %5441
  %5443 = getelementptr inbounds i8, ptr %0, i64 80
  %5444 = load double, ptr %5443, align 8, !tbaa !32
  %5445 = uitofp i64 %538 to double
  %5446 = fdiv double %5444, %5445
  %5447 = getelementptr inbounds i8, ptr %0, i64 104
  store double %5446, ptr %5447, align 8, !tbaa !33
  %5448 = getelementptr inbounds i8, ptr %0, i64 120
  %5449 = load double, ptr %5448, align 8, !tbaa !34
  %5450 = fdiv double %5449, %5445
  %5451 = getelementptr inbounds i8, ptr %0, i64 144
  store double %5450, ptr %5451, align 8, !tbaa !35
  br label %5452

5452:                                             ; preds = %5442, %5441
  %5453 = fcmp ugt double %.05380.lcssa, 0.000000e+00
  br i1 %5453, label %5454, label %5460

5454:                                             ; preds = %5452
  %5455 = getelementptr inbounds i8, ptr %0, i64 16
  %5456 = load double, ptr %5455, align 8, !tbaa !28
  %5457 = fcmp ogt double %.05380.lcssa, 0.000000e+00
  %5458 = select i1 %5457, double %.05380.lcssa, double 1.000000e+00
  %5459 = fdiv double %5456, %5458
  br label %5460

5460:                                             ; preds = %5452, %5454
  %5461 = phi double [ %5459, %5454 ], [ %.05376.lcssa, %5452 ]
  %5462 = getelementptr inbounds i8, ptr %0, i64 24
  store double %5461, ptr %5462, align 8, !tbaa !36
  %5463 = load double, ptr %432, align 8
  %5464 = fcmp ugt double %5463, 0.000000e+00
  br i1 %5464, label %5471, label %5465

5465:                                             ; preds = %5460
  %5466 = load double, ptr %433, align 8, !tbaa !13
  %5467 = fmul double %5466, %5466
  %5468 = getelementptr inbounds i8, ptr %0, i64 56
  %5469 = load double, ptr %5468, align 8, !tbaa !37
  %5470 = fcmp olt double %5467, %5469
  %.6469 = select i1 %5470, double %5467, double %5469
  br label %5477

5471:                                             ; preds = %5460
  %5472 = getelementptr inbounds i8, ptr %0, i64 56
  %5473 = load double, ptr %5472, align 8, !tbaa !37
  %5474 = fcmp ogt double %5463, 0.000000e+00
  %5475 = select i1 %5474, double %5463, double 1.000000e+00
  %5476 = fdiv double %5473, %5475
  br label %5477

5477:                                             ; preds = %5465, %5471
  %5478 = phi double [ %5476, %5471 ], [ %.6469, %5465 ]
  %5479 = getelementptr inbounds i8, ptr %0, i64 32
  store double %5478, ptr %5479, align 8, !tbaa !38
  %5480 = icmp sgt i32 %.05042, 0
  br i1 %5480, label %.lr.ph7390, label %._crit_edge7391.thread

.lr.ph7390:                                       ; preds = %5477
  %.not6274 = icmp eq ptr %spec.select, null
  %5481 = getelementptr inbounds i8, ptr %0, i64 104
  %5482 = getelementptr inbounds i8, ptr %0, i64 144
  %5483 = sext i32 %.05040 to i64
  %5484 = sext i32 %.05041 to i64
  %wide.trip.count8246 = zext nneg i32 %.05042 to i64
  %wide.trip.count8236 = zext nneg i32 %.05043 to i64
  %wide.trip.count8241 = zext nneg i32 %.05043 to i64
  br label %5485

5485:                                             ; preds = %.lr.ph7390, %5537
  %indvars.iv8243 = phi i64 [ 0, %.lr.ph7390 ], [ %indvars.iv.next8244, %5537 ]
  %.053747385 = phi double [ 0.000000e+00, %.lr.ph7390 ], [ %.15375, %5537 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %444) #8
  store double 0.000000e+00, ptr %444, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %445) #8
  store double 0.000000e+00, ptr %445, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %446) #8
  store double 0.000000e+00, ptr %446, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %447) #8
  store double 0.000000e+00, ptr %447, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %448) #8
  store double 0.000000e+00, ptr %448, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %449) #8
  store double 0.000000e+00, ptr %449, align 8, !tbaa !13
  br i1 %5311, label %.lr.ph7383, label %._crit_edge7384

.lr.ph7383:                                       ; preds = %5485
  %invariant.gep9018 = getelementptr i8, ptr %spec.select6345, i64 %indvars.iv8243
  br i1 %.not6274, label %.thread7010.us, label %.lr.ph7383.split.preheader

.lr.ph7383.split.preheader:                       ; preds = %.lr.ph7383
  %invariant.gep9016 = getelementptr i8, ptr %spec.select, i64 %indvars.iv8243
  br label %.lr.ph7383.split

.thread7010.us:                                   ; preds = %.lr.ph7383, %.thread7010.us
  %indvars.iv8238 = phi i64 [ %indvars.iv.next8239, %.thread7010.us ], [ 0, %.lr.ph7383 ]
  %5486 = mul nsw i64 %indvars.iv8238, %5483
  %gep9019 = getelementptr i8, ptr %invariant.gep9018, i64 %5486
  %5487 = load i8, ptr %gep9019, align 1, !tbaa !9
  %5488 = call float @libxsmm_convert_bf8_to_f32(i8 noundef zeroext %5487)
  %5489 = fpext float %5488 to double
  %5490 = load double, ptr %5481, align 8, !tbaa !33
  %5491 = fsub double %5489, %5490
  %5492 = load double, ptr %5482, align 8, !tbaa !35
  %5493 = fsub double 0.000000e+00, %5492
  %5494 = fcmp oge float %5488, 0.000000e+00
  %5495 = fneg double %5489
  %5496 = select i1 %5494, double %5489, double %5495
  %5497 = fmul double %5491, %5491
  %5498 = call double @libxsmm_kahan_sum(double noundef %5497, ptr noundef nonnull %5432, ptr noundef nonnull %442)
  %5499 = fmul double %5493, %5493
  %5500 = call double @libxsmm_kahan_sum(double noundef %5499, ptr noundef nonnull %5437, ptr noundef nonnull %443)
  %5501 = call double @libxsmm_kahan_sum(double noundef %5496, ptr noundef nonnull %447, ptr noundef nonnull %444)
  %5502 = call double @libxsmm_kahan_sum(double noundef 0.000000e+00, ptr noundef nonnull %448, ptr noundef nonnull %445)
  %5503 = call double @libxsmm_kahan_sum(double noundef 0.000000e+00, ptr noundef nonnull %449, ptr noundef nonnull %446)
  %indvars.iv.next8239 = add nuw nsw i64 %indvars.iv8238, 1
  %exitcond8242.not = icmp eq i64 %indvars.iv.next8239, %wide.trip.count8241
  br i1 %exitcond8242.not, label %._crit_edge7384, label %.thread7010.us, !llvm.loop !125

.lr.ph7383.split:                                 ; preds = %.lr.ph7383.split.preheader, %.lr.ph7383.split
  %indvars.iv8233 = phi i64 [ 0, %.lr.ph7383.split.preheader ], [ %indvars.iv.next8234, %.lr.ph7383.split ]
  %5504 = mul nsw i64 %indvars.iv8233, %5483
  %gep9015 = getelementptr i8, ptr %invariant.gep9018, i64 %5504
  %5505 = load i8, ptr %gep9015, align 1, !tbaa !9
  %5506 = call float @libxsmm_convert_bf8_to_f32(i8 noundef zeroext %5505)
  %5507 = fpext float %5506 to double
  %5508 = mul nsw i64 %indvars.iv8233, %5484
  %gep9017 = getelementptr i8, ptr %invariant.gep9016, i64 %5508
  %5509 = load i8, ptr %gep9017, align 1, !tbaa !9
  %5510 = call float @libxsmm_convert_bf8_to_f32(i8 noundef zeroext %5509)
  %5511 = fpext float %5510 to double
  %5512 = fcmp olt float %5506, %5510
  %5513 = fsub double %5511, %5507
  %5514 = fsub double %5507, %5511
  %5515 = select i1 %5512, double %5513, double %5514
  %5516 = load double, ptr %5481, align 8, !tbaa !33
  %5517 = fsub double %5507, %5516
  %5518 = load double, ptr %5482, align 8, !tbaa !35
  %5519 = fsub double %5511, %5518
  %5520 = fcmp oge float %5506, 0.000000e+00
  %5521 = fneg double %5507
  %5522 = select i1 %5520, double %5507, double %5521
  %5523 = fcmp oge float %5510, 0.000000e+00
  %5524 = fneg double %5511
  %5525 = select i1 %5523, double %5511, double %5524
  %5526 = fmul double %5517, %5517
  %5527 = call double @libxsmm_kahan_sum(double noundef %5526, ptr noundef nonnull %5432, ptr noundef nonnull %442)
  %5528 = fmul double %5519, %5519
  %5529 = call double @libxsmm_kahan_sum(double noundef %5528, ptr noundef nonnull %5437, ptr noundef nonnull %443)
  %5530 = call double @libxsmm_kahan_sum(double noundef %5522, ptr noundef nonnull %447, ptr noundef nonnull %444)
  %5531 = call double @libxsmm_kahan_sum(double noundef %5525, ptr noundef nonnull %448, ptr noundef nonnull %445)
  %5532 = call double @libxsmm_kahan_sum(double noundef %5515, ptr noundef nonnull %449, ptr noundef nonnull %446)
  %indvars.iv.next8234 = add nuw nsw i64 %indvars.iv8233, 1
  %exitcond8237.not = icmp eq i64 %indvars.iv.next8234, %wide.trip.count8236
  br i1 %exitcond8237.not, label %._crit_edge7384, label %.lr.ph7383.split, !llvm.loop !125

._crit_edge7384:                                  ; preds = %.lr.ph7383.split, %.thread7010.us, %5485
  %5533 = load double, ptr %0, align 8, !tbaa !40
  %5534 = load double, ptr %449, align 8, !tbaa !13
  %5535 = fcmp olt double %5533, %5534
  br i1 %5535, label %5536, label %5537

5536:                                             ; preds = %._crit_edge7384
  store double %5534, ptr %0, align 8, !tbaa !40
  br label %5537

5537:                                             ; preds = %5536, %._crit_edge7384
  %5538 = load double, ptr %447, align 8, !tbaa !13
  %5539 = fcmp olt double %.053747385, %5538
  %.15375 = select i1 %5539, double %5538, double %.053747385
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %449) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %448) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %447) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %446) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %445) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %444) #8
  %indvars.iv.next8244 = add nuw nsw i64 %indvars.iv8243, 1
  %exitcond8247.not = icmp eq i64 %indvars.iv.next8244, %wide.trip.count8246
  br i1 %exitcond8247.not, label %._crit_edge7391, label %5485, !llvm.loop !126

._crit_edge7391:                                  ; preds = %5537
  %5540 = fcmp ugt double %.15375, 0.000000e+00
  br i1 %5540, label %5542, label %._crit_edge7391.thread

._crit_edge7391.thread:                           ; preds = %5477, %._crit_edge7391
  %5541 = load double, ptr %0, align 8, !tbaa !40
  br label %5547

5542:                                             ; preds = %._crit_edge7391
  %5543 = load double, ptr %0, align 8, !tbaa !40
  %5544 = fcmp ogt double %.15375, 0.000000e+00
  %5545 = select i1 %5544, double %.15375, double 1.000000e+00
  %5546 = fdiv double %5543, %5545
  br label %5547

5547:                                             ; preds = %5542, %._crit_edge7391.thread
  %5548 = phi double [ %5541, %._crit_edge7391.thread ], [ %5546, %5542 ]
  %5549 = getelementptr inbounds i8, ptr %0, i64 8
  store double %5548, ptr %5549, align 8, !tbaa !42
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %443) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %442) #8
  br label %5550

5550:                                             ; preds = %.thread6994, %5547
  %.1047009 = phi i32 [ %5417, %.thread6994 ], [ 0, %5547 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %435) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %434) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %433) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %432) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %431) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %430) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %429) #8
  br label %6314

5551:                                             ; preds = %5308
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %450) #8
  store double 0.000000e+00, ptr %450, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %451) #8
  store double 0.000000e+00, ptr %451, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %452) #8
  store double 0.000000e+00, ptr %452, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %453) #8
  store double 0.000000e+00, ptr %453, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %454) #8
  store double 0.000000e+00, ptr %454, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %455) #8
  store double 0.000000e+00, ptr %455, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %456) #8
  store double 0.000000e+00, ptr %456, align 8, !tbaa !13
  %5552 = sext i32 %.05042 to i64
  %5553 = sext i32 %.05043 to i64
  %5554 = mul nsw i64 %5552, %5553
  %5555 = tail call i64 @libxsmm_coprime2(i64 noundef %5554)
  %5556 = icmp sgt i32 %.05043, 0
  br i1 %5556, label %.lr.ph7351, label %._crit_edge7352

.lr.ph7351:                                       ; preds = %5551
  %5557 = icmp sgt i32 %.05042, 0
  %.not6269 = icmp eq ptr %spec.select, null
  %5558 = getelementptr inbounds i8, ptr %0, i64 96
  %5559 = getelementptr inbounds i8, ptr %0, i64 128
  %5560 = getelementptr inbounds i8, ptr %0, i64 136
  %5561 = getelementptr inbounds i8, ptr %0, i64 40
  %5562 = getelementptr inbounds i8, ptr %0, i64 160
  %5563 = getelementptr inbounds i8, ptr %0, i64 168
  %5564 = getelementptr inbounds i8, ptr %0, i64 176
  %5565 = getelementptr inbounds i8, ptr %0, i64 180
  %5566 = getelementptr inbounds i8, ptr %0, i64 48
  %5567 = getelementptr inbounds i8, ptr %0, i64 64
  %5568 = getelementptr inbounds i8, ptr %0, i64 56
  %5569 = getelementptr inbounds i8, ptr %0, i64 80
  %5570 = getelementptr inbounds i8, ptr %0, i64 120
  %5571 = getelementptr inbounds i8, ptr %0, i64 16
  %5572 = zext i32 %.05042 to i64
  %wide.trip.count8211 = zext nneg i32 %.05043 to i64
  br label %5573

5573:                                             ; preds = %.lr.ph7351, %5683
  %indvars.iv8208 = phi i64 [ 0, %.lr.ph7351 ], [ %indvars.iv.next8209, %5683 ]
  %.052937348 = phi double [ 0.000000e+00, %.lr.ph7351 ], [ %.15294.lcssa, %5683 ]
  %.053027347 = phi double [ 0.000000e+00, %.lr.ph7351 ], [ %.15303, %5683 ]
  %.053067346 = phi double [ 0.000000e+00, %.lr.ph7351 ], [ %.15307, %5683 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %457) #8
  store double 0.000000e+00, ptr %457, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %458) #8
  store double 0.000000e+00, ptr %458, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %459) #8
  store double 0.000000e+00, ptr %459, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %460) #8
  store double 0.000000e+00, ptr %460, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %461) #8
  store double 0.000000e+00, ptr %461, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %462) #8
  store double 0.000000e+00, ptr %462, align 8, !tbaa !13
  br i1 %5557, label %.lr.ph7343, label %._crit_edge7344

.lr.ph7343:                                       ; preds = %5573
  %5574 = mul nuw nsw i64 %indvars.iv8208, %5572
  br label %5575

5575:                                             ; preds = %.lr.ph7343, %5674
  %indvars.iv8203 = phi i64 [ 0, %.lr.ph7343 ], [ %indvars.iv.next8204, %5674 ]
  %.152947340 = phi double [ %.052937348, %.lr.ph7343 ], [ %.25295, %5674 ]
  %5576 = add nuw nsw i64 %indvars.iv8203, %5574
  %5577 = mul i64 %5555, %5576
  %5578 = urem i64 %5577, %5554
  %5579 = udiv i64 %5578, %5552
  %5580 = trunc i64 %5579 to i32
  %5581 = urem i64 %5578, %5552
  %5582 = trunc nuw i64 %5581 to i32
  br i1 %.not6269, label %5590, label %5583

5583:                                             ; preds = %5575
  %5584 = mul nsw i32 %.05041, %5580
  %5585 = add nsw i32 %5584, %5582
  %5586 = sext i32 %5585 to i64
  %5587 = getelementptr inbounds i8, ptr %spec.select, i64 %5586
  %5588 = load i8, ptr %5587, align 1, !tbaa !9
  %5589 = call float @libxsmm_convert_bf8_to_f32(i8 noundef zeroext %5588)
  br label %5590

5590:                                             ; preds = %5575, %5583
  %5591 = phi float [ %5589, %5583 ], [ 0.000000e+00, %5575 ]
  %5592 = fpext float %5591 to double
  %5593 = mul nsw i32 %.05040, %5580
  %5594 = add nsw i32 %5593, %5582
  %5595 = sext i32 %5594 to i64
  %5596 = getelementptr inbounds i8, ptr %spec.select6345, i64 %5595
  %5597 = load i8, ptr %5596, align 1, !tbaa !9
  %5598 = call float @libxsmm_convert_bf8_to_f32(i8 noundef zeroext %5597)
  %5599 = fpext float %5598 to double
  %5600 = fcmp oge float %5591, 0.000000e+00
  %5601 = fneg double %5592
  %5602 = select i1 %5600, double %5592, double %5601
  %5603 = fcmp oge float %5598, 0.000000e+00
  %5604 = fneg double %5599
  %5605 = select i1 %5603, double %5599, double %5604
  %5606 = load double, ptr %542, align 8, !tbaa !10
  %5607 = fcmp ogt double %5606, %5599
  br i1 %5607, label %5608, label %5609

5608:                                             ; preds = %5590
  store double %5599, ptr %542, align 8, !tbaa !10
  br label %5609

5609:                                             ; preds = %5608, %5590
  %5610 = load double, ptr %5558, align 8, !tbaa !16
  %5611 = fcmp olt double %5610, %5599
  br i1 %5611, label %5612, label %5613

5612:                                             ; preds = %5609
  store double %5599, ptr %5558, align 8, !tbaa !16
  br label %5613

5613:                                             ; preds = %5612, %5609
  %5614 = fcmp ord float %5591, 0.000000e+00
  br i1 %5614, label %5615, label %.thread7019

5615:                                             ; preds = %5613
  %5616 = fcmp ogt double %543, %5602
  %5617 = fcmp oeq float %5591, %5598
  %or.cond6470 = select i1 %5616, i1 true, i1 %5617
  br i1 %or.cond6470, label %5618, label %.thread7019

5618:                                             ; preds = %5615
  br i1 %.not6269, label %5625, label %5619

5619:                                             ; preds = %5618
  %5620 = fcmp olt float %5598, %5591
  br i1 %5620, label %5621, label %5623

5621:                                             ; preds = %5619
  %5622 = fsub double %5592, %5599
  br label %5625

5623:                                             ; preds = %5619
  %5624 = fsub double %5599, %5592
  br label %5625

5625:                                             ; preds = %5618, %5621, %5623
  %5626 = phi double [ %5622, %5621 ], [ %5624, %5623 ], [ 0.000000e+00, %5618 ]
  %5627 = fcmp ugt double %5605, 0.000000e+00
  br i1 %5627, label %5628, label %5632

5628:                                             ; preds = %5625
  %5629 = fcmp ogt double %5605, 0.000000e+00
  %5630 = select i1 %5629, double %5605, double 1.000000e+00
  %5631 = fdiv double %5626, %5630
  br label %5632

5632:                                             ; preds = %5625, %5628
  %5633 = phi double [ %5631, %5628 ], [ %5602, %5625 ]
  %5634 = load double, ptr %5559, align 8, !tbaa !17
  %5635 = fcmp ogt double %5634, %5592
  br i1 %5635, label %5636, label %5637

5636:                                             ; preds = %5632
  store double %5592, ptr %5559, align 8, !tbaa !17
  br label %5637

5637:                                             ; preds = %5636, %5632
  %5638 = load double, ptr %5560, align 8, !tbaa !18
  %5639 = fcmp olt double %5638, %5592
  br i1 %5639, label %5640, label %5641

5640:                                             ; preds = %5637
  store double %5592, ptr %5560, align 8, !tbaa !18
  br label %5641

5641:                                             ; preds = %5640, %5637
  %5642 = load double, ptr %5561, align 8, !tbaa !19
  %5643 = fcmp olt double %5642, %5626
  br i1 %5643, label %5644, label %5645

5644:                                             ; preds = %5641
  store double %5626, ptr %5561, align 8, !tbaa !19
  store double %5599, ptr %5562, align 8, !tbaa !20
  store double %5592, ptr %5563, align 8, !tbaa !21
  store i32 %5582, ptr %5564, align 8, !tbaa !22
  store i32 %5580, ptr %5565, align 4, !tbaa !23
  br label %5645

5645:                                             ; preds = %5644, %5641
  %5646 = load double, ptr %5566, align 8, !tbaa !24
  %5647 = fcmp olt double %5646, %5633
  br i1 %5647, label %5648, label %5649

5648:                                             ; preds = %5645
  store double %5633, ptr %5566, align 8, !tbaa !24
  br label %5649

5649:                                             ; preds = %5648, %5645
  %5650 = fmul double %5633, %5633
  %5651 = fcmp ogt double %543, %5650
  br i1 %5651, label %5652, label %5658

5652:                                             ; preds = %5649
  %5653 = fsub double %5650, %.152947340
  %5654 = load double, ptr %5567, align 8, !tbaa !25
  %5655 = fadd double %5653, %5654
  %5656 = fsub double %5655, %5654
  %5657 = fsub double %5656, %5653
  store double %5655, ptr %5567, align 8, !tbaa !25
  br label %5658

5658:                                             ; preds = %5652, %5649
  %.25295 = phi double [ %5657, %5652 ], [ %.152947340, %5649 ]
  %5659 = call double @libxsmm_kahan_sum(double noundef %5605, ptr noundef nonnull %460, ptr noundef nonnull %457)
  %5660 = call double @libxsmm_kahan_sum(double noundef %5602, ptr noundef nonnull %461, ptr noundef nonnull %458)
  %5661 = call double @libxsmm_kahan_sum(double noundef %5626, ptr noundef nonnull %462, ptr noundef nonnull %459)
  %5662 = fmul double %5599, %5599
  %5663 = call double @libxsmm_kahan_sum(double noundef %5662, ptr noundef nonnull %453, ptr noundef nonnull %451)
  %5664 = fmul double %5592, %5592
  %5665 = call double @libxsmm_kahan_sum(double noundef %5664, ptr noundef nonnull %454, ptr noundef nonnull %452)
  %5666 = fmul double %5626, %5626
  %5667 = fcmp ogt double %543, %5666
  br i1 %5667, label %5668, label %5674

5668:                                             ; preds = %5658
  %5669 = call double @libxsmm_kahan_sum(double noundef %5666, ptr noundef nonnull %5568, ptr noundef nonnull %450)
  br label %5674

.thread7019:                                      ; preds = %5615, %5613
  %5670 = fcmp ord float %5598, 0.000000e+00
  %5671 = fcmp ogt double %543, %5605
  %5672 = select i1 %5670, i1 %5671, i1 false
  %5673 = select i1 %5672, i32 1, i32 2
  store i32 %5582, ptr %5564, align 8, !tbaa !22
  store i32 %5580, ptr %5565, align 4, !tbaa !23
  store double %5599, ptr %5562, align 8, !tbaa !20
  store double %5592, ptr %5563, align 8, !tbaa !21
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %462) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %461) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %460) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %459) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %458) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %457) #8
  br label %5806

5674:                                             ; preds = %5668, %5658
  %indvars.iv.next8204 = add nuw nsw i64 %indvars.iv8203, 1
  %exitcond8207.not = icmp eq i64 %indvars.iv.next8204, %5572
  br i1 %exitcond8207.not, label %._crit_edge7344.loopexit, label %5575, !llvm.loop !127

._crit_edge7344.loopexit:                         ; preds = %5674
  %.pre8700 = load double, ptr %460, align 8, !tbaa !13
  br label %._crit_edge7344

._crit_edge7344:                                  ; preds = %._crit_edge7344.loopexit, %5573
  %5675 = phi double [ 0.000000e+00, %5573 ], [ %.pre8700, %._crit_edge7344.loopexit ]
  %.15294.lcssa = phi double [ %.052937348, %5573 ], [ %.25295, %._crit_edge7344.loopexit ]
  %5676 = call double @libxsmm_kahan_sum(double noundef %5675, ptr noundef nonnull %5569, ptr noundef nonnull %455)
  %5677 = load double, ptr %461, align 8, !tbaa !13
  %5678 = call double @libxsmm_kahan_sum(double noundef %5677, ptr noundef nonnull %5570, ptr noundef nonnull %456)
  %5679 = load double, ptr %5571, align 8, !tbaa !28
  %5680 = load double, ptr %462, align 8, !tbaa !13
  %5681 = fcmp olt double %5679, %5680
  br i1 %5681, label %5682, label %5683

5682:                                             ; preds = %._crit_edge7344
  store double %5680, ptr %5571, align 8, !tbaa !28
  br label %5683

5683:                                             ; preds = %5682, %._crit_edge7344
  %5684 = load double, ptr %460, align 8, !tbaa !13
  %5685 = fcmp olt double %.053067346, %5684
  %.15307 = select i1 %5685, double %5684, double %.053067346
  %5686 = load double, ptr %461, align 8, !tbaa !13
  %5687 = fcmp olt double %.053027347, %5686
  %.15303 = select i1 %5687, double %5686, double %.053027347
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %462) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %461) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %460) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %459) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %458) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %457) #8
  %indvars.iv.next8209 = add nuw nsw i64 %indvars.iv8208, 1
  %exitcond8212.not = icmp eq i64 %indvars.iv.next8209, %wide.trip.count8211
  br i1 %exitcond8212.not, label %._crit_edge7352, label %5573, !llvm.loop !128

._crit_edge7352:                                  ; preds = %5683, %5551
  %.05306.lcssa = phi double [ 0.000000e+00, %5551 ], [ %.15307, %5683 ]
  %.05302.lcssa = phi double [ 0.000000e+00, %5551 ], [ %.15303, %5683 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %463) #8
  store double 0.000000e+00, ptr %463, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %464) #8
  store double 0.000000e+00, ptr %464, align 8, !tbaa !13
  %5688 = getelementptr inbounds i8, ptr %0, i64 112
  %5689 = load double, ptr %5688, align 8, !tbaa !30
  %5690 = fcmp oeq double %5689, 0.000000e+00
  br i1 %5690, label %5692, label %5691

5691:                                             ; preds = %._crit_edge7352
  call void @__assert_fail(ptr noundef nonnull @.str.1, ptr noundef nonnull @.str.2, i32 noundef 130, ptr noundef nonnull @__PRETTY_FUNCTION__.libxsmm_matdiff) #10
  unreachable

5692:                                             ; preds = %._crit_edge7352
  %5693 = getelementptr inbounds i8, ptr %0, i64 152
  %5694 = load double, ptr %5693, align 8, !tbaa !31
  %5695 = fcmp oeq double %5694, 0.000000e+00
  br i1 %5695, label %5697, label %5696

5696:                                             ; preds = %5692
  call void @__assert_fail(ptr noundef nonnull @.str.3, ptr noundef nonnull @.str.2, i32 noundef 131, ptr noundef nonnull @__PRETTY_FUNCTION__.libxsmm_matdiff) #10
  unreachable

5697:                                             ; preds = %5692
  %.not6270 = icmp eq i64 %538, 0
  br i1 %.not6270, label %5708, label %5698

5698:                                             ; preds = %5697
  %5699 = getelementptr inbounds i8, ptr %0, i64 80
  %5700 = load double, ptr %5699, align 8, !tbaa !32
  %5701 = uitofp i64 %538 to double
  %5702 = fdiv double %5700, %5701
  %5703 = getelementptr inbounds i8, ptr %0, i64 104
  store double %5702, ptr %5703, align 8, !tbaa !33
  %5704 = getelementptr inbounds i8, ptr %0, i64 120
  %5705 = load double, ptr %5704, align 8, !tbaa !34
  %5706 = fdiv double %5705, %5701
  %5707 = getelementptr inbounds i8, ptr %0, i64 144
  store double %5706, ptr %5707, align 8, !tbaa !35
  br label %5708

5708:                                             ; preds = %5698, %5697
  %5709 = fcmp ugt double %.05306.lcssa, 0.000000e+00
  br i1 %5709, label %5710, label %5716

5710:                                             ; preds = %5708
  %5711 = getelementptr inbounds i8, ptr %0, i64 16
  %5712 = load double, ptr %5711, align 8, !tbaa !28
  %5713 = fcmp ogt double %.05306.lcssa, 0.000000e+00
  %5714 = select i1 %5713, double %.05306.lcssa, double 1.000000e+00
  %5715 = fdiv double %5712, %5714
  br label %5716

5716:                                             ; preds = %5708, %5710
  %5717 = phi double [ %5715, %5710 ], [ %.05302.lcssa, %5708 ]
  %5718 = getelementptr inbounds i8, ptr %0, i64 24
  store double %5717, ptr %5718, align 8, !tbaa !36
  %5719 = load double, ptr %453, align 8
  %5720 = fcmp ugt double %5719, 0.000000e+00
  br i1 %5720, label %5727, label %5721

5721:                                             ; preds = %5716
  %5722 = load double, ptr %454, align 8, !tbaa !13
  %5723 = fmul double %5722, %5722
  %5724 = getelementptr inbounds i8, ptr %0, i64 56
  %5725 = load double, ptr %5724, align 8, !tbaa !37
  %5726 = fcmp olt double %5723, %5725
  %.6475 = select i1 %5726, double %5723, double %5725
  br label %5733

5727:                                             ; preds = %5716
  %5728 = getelementptr inbounds i8, ptr %0, i64 56
  %5729 = load double, ptr %5728, align 8, !tbaa !37
  %5730 = fcmp ogt double %5719, 0.000000e+00
  %5731 = select i1 %5730, double %5719, double 1.000000e+00
  %5732 = fdiv double %5729, %5731
  br label %5733

5733:                                             ; preds = %5721, %5727
  %5734 = phi double [ %5732, %5727 ], [ %.6475, %5721 ]
  %5735 = getelementptr inbounds i8, ptr %0, i64 32
  store double %5734, ptr %5735, align 8, !tbaa !38
  %5736 = icmp sgt i32 %.05042, 0
  br i1 %5736, label %.lr.ph7363, label %._crit_edge7364.thread

.lr.ph7363:                                       ; preds = %5733
  %.not6271 = icmp eq ptr %spec.select, null
  %5737 = getelementptr inbounds i8, ptr %0, i64 104
  %5738 = getelementptr inbounds i8, ptr %0, i64 144
  %5739 = zext nneg i32 %.05042 to i64
  %wide.trip.count8216 = zext nneg i32 %.05043 to i64
  br label %5740

5740:                                             ; preds = %.lr.ph7363, %5793
  %indvars.iv8218 = phi i64 [ 0, %.lr.ph7363 ], [ %indvars.iv.next8219, %5793 ]
  %.053007359 = phi double [ 0.000000e+00, %.lr.ph7363 ], [ %.15301, %5793 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %465) #8
  store double 0.000000e+00, ptr %465, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %466) #8
  store double 0.000000e+00, ptr %466, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %467) #8
  store double 0.000000e+00, ptr %467, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %468) #8
  store double 0.000000e+00, ptr %468, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %469) #8
  store double 0.000000e+00, ptr %469, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %470) #8
  store double 0.000000e+00, ptr %470, align 8, !tbaa !13
  br i1 %5556, label %.lr.ph7357, label %._crit_edge7358

.lr.ph7357:                                       ; preds = %5740, %.thread7035
  %indvars.iv8213 = phi i64 [ %indvars.iv.next8214, %.thread7035 ], [ 0, %5740 ]
  %5741 = mul nuw nsw i64 %indvars.iv8213, %5739
  %5742 = add nuw nsw i64 %5741, %indvars.iv8218
  %5743 = mul i64 %5555, %5742
  %5744 = urem i64 %5743, %5554
  %5745 = udiv i64 %5744, %5552
  %5746 = trunc i64 %5745 to i32
  %5747 = urem i64 %5744, %5552
  %5748 = trunc nuw i64 %5747 to i32
  %5749 = mul nsw i32 %.05040, %5746
  %5750 = add nsw i32 %5749, %5748
  %5751 = sext i32 %5750 to i64
  %5752 = getelementptr inbounds i8, ptr %spec.select6345, i64 %5751
  %5753 = load i8, ptr %5752, align 1, !tbaa !9
  %5754 = call float @libxsmm_convert_bf8_to_f32(i8 noundef zeroext %5753)
  %5755 = fpext float %5754 to double
  br i1 %.not6271, label %.thread7035, label %5756

5756:                                             ; preds = %.lr.ph7357
  %5757 = mul nsw i32 %.05041, %5746
  %5758 = add nsw i32 %5757, %5748
  %5759 = sext i32 %5758 to i64
  %5760 = getelementptr inbounds i8, ptr %spec.select, i64 %5759
  %5761 = load i8, ptr %5760, align 1, !tbaa !9
  %5762 = call float @libxsmm_convert_bf8_to_f32(i8 noundef zeroext %5761)
  %5763 = fpext float %5762 to double
  %5764 = fcmp olt float %5754, %5762
  br i1 %5764, label %5765, label %5767

5765:                                             ; preds = %5756
  %5766 = fsub double %5763, %5755
  br label %.thread7035

5767:                                             ; preds = %5756
  %5768 = fsub double %5755, %5763
  br label %.thread7035

.thread7035:                                      ; preds = %.lr.ph7357, %5765, %5767
  %5769 = phi double [ %5763, %5765 ], [ %5763, %5767 ], [ 0.000000e+00, %.lr.ph7357 ]
  %5770 = phi float [ %5762, %5765 ], [ %5762, %5767 ], [ 0.000000e+00, %.lr.ph7357 ]
  %5771 = phi double [ %5766, %5765 ], [ %5768, %5767 ], [ 0.000000e+00, %.lr.ph7357 ]
  %5772 = load double, ptr %5737, align 8, !tbaa !33
  %5773 = fsub double %5755, %5772
  %5774 = load double, ptr %5738, align 8, !tbaa !35
  %5775 = fsub double %5769, %5774
  %5776 = fcmp oge float %5754, 0.000000e+00
  %5777 = fneg double %5755
  %5778 = select i1 %5776, double %5755, double %5777
  %5779 = fcmp oge float %5770, 0.000000e+00
  %5780 = fneg double %5769
  %5781 = select i1 %5779, double %5769, double %5780
  %5782 = fmul double %5773, %5773
  %5783 = call double @libxsmm_kahan_sum(double noundef %5782, ptr noundef nonnull %5688, ptr noundef nonnull %463)
  %5784 = fmul double %5775, %5775
  %5785 = call double @libxsmm_kahan_sum(double noundef %5784, ptr noundef nonnull %5693, ptr noundef nonnull %464)
  %5786 = call double @libxsmm_kahan_sum(double noundef %5778, ptr noundef nonnull %468, ptr noundef nonnull %465)
  %5787 = call double @libxsmm_kahan_sum(double noundef %5781, ptr noundef nonnull %469, ptr noundef nonnull %466)
  %5788 = call double @libxsmm_kahan_sum(double noundef %5771, ptr noundef nonnull %470, ptr noundef nonnull %467)
  %indvars.iv.next8214 = add nuw nsw i64 %indvars.iv8213, 1
  %exitcond8217.not = icmp eq i64 %indvars.iv.next8214, %wide.trip.count8216
  br i1 %exitcond8217.not, label %._crit_edge7358.loopexit, label %.lr.ph7357, !llvm.loop !129

._crit_edge7358.loopexit:                         ; preds = %.thread7035
  %.pre8701 = load double, ptr %470, align 8, !tbaa !13
  br label %._crit_edge7358

._crit_edge7358:                                  ; preds = %._crit_edge7358.loopexit, %5740
  %5789 = phi double [ %.pre8701, %._crit_edge7358.loopexit ], [ 0.000000e+00, %5740 ]
  %5790 = load double, ptr %0, align 8, !tbaa !40
  %5791 = fcmp olt double %5790, %5789
  br i1 %5791, label %5792, label %5793

5792:                                             ; preds = %._crit_edge7358
  store double %5789, ptr %0, align 8, !tbaa !40
  br label %5793

5793:                                             ; preds = %5792, %._crit_edge7358
  %5794 = load double, ptr %468, align 8, !tbaa !13
  %5795 = fcmp olt double %.053007359, %5794
  %.15301 = select i1 %5795, double %5794, double %.053007359
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %470) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %469) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %468) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %467) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %466) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %465) #8
  %indvars.iv.next8219 = add nuw nsw i64 %indvars.iv8218, 1
  %exitcond8222.not = icmp eq i64 %indvars.iv.next8219, %5739
  br i1 %exitcond8222.not, label %._crit_edge7364, label %5740, !llvm.loop !130

._crit_edge7364:                                  ; preds = %5793
  %5796 = fcmp ugt double %.15301, 0.000000e+00
  br i1 %5796, label %5798, label %._crit_edge7364.thread

._crit_edge7364.thread:                           ; preds = %5733, %._crit_edge7364
  %5797 = load double, ptr %0, align 8, !tbaa !40
  br label %5803

5798:                                             ; preds = %._crit_edge7364
  %5799 = load double, ptr %0, align 8, !tbaa !40
  %5800 = fcmp ogt double %.15301, 0.000000e+00
  %5801 = select i1 %5800, double %.15301, double 1.000000e+00
  %5802 = fdiv double %5799, %5801
  br label %5803

5803:                                             ; preds = %5798, %._crit_edge7364.thread
  %5804 = phi double [ %5797, %._crit_edge7364.thread ], [ %5802, %5798 ]
  %5805 = getelementptr inbounds i8, ptr %0, i64 8
  store double %5804, ptr %5805, align 8, !tbaa !42
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %464) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %463) #8
  br label %5806

5806:                                             ; preds = %.thread7019, %5803
  %.1097034 = phi i32 [ %5673, %.thread7019 ], [ 0, %5803 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %456) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %455) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %454) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %453) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %452) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %451) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %450) #8
  br label %6314

5807:                                             ; preds = %541
  %5808 = icmp eq i32 %535, 0
  br i1 %5808, label %5809, label %6050

5809:                                             ; preds = %5807
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %471) #8
  store double 0.000000e+00, ptr %471, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %472) #8
  store double 0.000000e+00, ptr %472, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %473) #8
  store double 0.000000e+00, ptr %473, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %474) #8
  store double 0.000000e+00, ptr %474, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %475) #8
  store double 0.000000e+00, ptr %475, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %476) #8
  store double 0.000000e+00, ptr %476, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %477) #8
  store double 0.000000e+00, ptr %477, align 8, !tbaa !13
  %5810 = icmp sgt i32 %.05043, 0
  br i1 %5810, label %.lr.ph7324, label %._crit_edge7325

.lr.ph7324:                                       ; preds = %5809
  %5811 = icmp sgt i32 %.05042, 0
  %.not6266 = icmp eq ptr %spec.select, null
  %5812 = getelementptr inbounds i8, ptr %0, i64 96
  %5813 = getelementptr inbounds i8, ptr %0, i64 128
  %5814 = getelementptr inbounds i8, ptr %0, i64 136
  %5815 = getelementptr inbounds i8, ptr %0, i64 40
  %5816 = getelementptr inbounds i8, ptr %0, i64 160
  %5817 = getelementptr inbounds i8, ptr %0, i64 168
  %5818 = getelementptr inbounds i8, ptr %0, i64 176
  %5819 = getelementptr inbounds i8, ptr %0, i64 180
  %5820 = getelementptr inbounds i8, ptr %0, i64 48
  %5821 = getelementptr inbounds i8, ptr %0, i64 64
  %5822 = getelementptr inbounds i8, ptr %0, i64 56
  %5823 = getelementptr inbounds i8, ptr %0, i64 80
  %5824 = getelementptr inbounds i8, ptr %0, i64 120
  %5825 = getelementptr inbounds i8, ptr %0, i64 16
  %5826 = sext i32 %.05041 to i64
  %5827 = sext i32 %.05040 to i64
  %wide.trip.count8186 = zext nneg i32 %.05043 to i64
  %wide.trip.count8181 = zext nneg i32 %.05042 to i64
  br label %5828

5828:                                             ; preds = %.lr.ph7324, %5926
  %indvars.iv8183 = phi i64 [ 0, %.lr.ph7324 ], [ %indvars.iv.next8184, %5926 ]
  %.052097321 = phi double [ 0.000000e+00, %.lr.ph7324 ], [ %.15210.lcssa, %5926 ]
  %.052187320 = phi double [ 0.000000e+00, %.lr.ph7324 ], [ %.15219, %5926 ]
  %.052227319 = phi double [ 0.000000e+00, %.lr.ph7324 ], [ %.15223, %5926 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %478) #8
  store double 0.000000e+00, ptr %478, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %479) #8
  store double 0.000000e+00, ptr %479, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %480) #8
  store double 0.000000e+00, ptr %480, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %481) #8
  store double 0.000000e+00, ptr %481, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %482) #8
  store double 0.000000e+00, ptr %482, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %483) #8
  store double 0.000000e+00, ptr %483, align 8, !tbaa !13
  br i1 %5811, label %.lr.ph7316, label %._crit_edge7317

.lr.ph7316:                                       ; preds = %5828
  %5829 = mul nsw i64 %indvars.iv8183, %5826
  %5830 = mul nsw i64 %indvars.iv8183, %5827
  %5831 = trunc nuw nsw i64 %indvars.iv8183 to i32
  %invariant.gep = getelementptr i8, ptr %spec.select, i64 %5829
  %invariant.gep9002 = getelementptr i8, ptr %spec.select6345, i64 %5830
  br label %5832

5832:                                             ; preds = %.lr.ph7316, %5917
  %indvars.iv8178 = phi i64 [ 0, %.lr.ph7316 ], [ %indvars.iv.next8179, %5917 ]
  %.152107313 = phi double [ %.052097321, %.lr.ph7316 ], [ %.25211, %5917 ]
  br i1 %.not6266, label %5836, label %5833

5833:                                             ; preds = %5832
  %gep = getelementptr i8, ptr %invariant.gep, i64 %indvars.iv8178
  %5834 = load i8, ptr %gep, align 1, !tbaa !9
  %5835 = call float @libxsmm_convert_hf8_to_f32(i8 noundef zeroext %5834)
  br label %5836

5836:                                             ; preds = %5832, %5833
  %5837 = phi float [ %5835, %5833 ], [ 0.000000e+00, %5832 ]
  %5838 = fpext float %5837 to double
  %gep9003 = getelementptr i8, ptr %invariant.gep9002, i64 %indvars.iv8178
  %5839 = load i8, ptr %gep9003, align 1, !tbaa !9
  %5840 = call float @libxsmm_convert_hf8_to_f32(i8 noundef zeroext %5839)
  %5841 = fpext float %5840 to double
  %5842 = fcmp oge float %5837, 0.000000e+00
  %5843 = fneg double %5838
  %5844 = select i1 %5842, double %5838, double %5843
  %5845 = fcmp oge float %5840, 0.000000e+00
  %5846 = fneg double %5841
  %5847 = select i1 %5845, double %5841, double %5846
  %5848 = load double, ptr %542, align 8, !tbaa !10
  %5849 = fcmp ogt double %5848, %5841
  br i1 %5849, label %5850, label %5851

5850:                                             ; preds = %5836
  store double %5841, ptr %542, align 8, !tbaa !10
  br label %5851

5851:                                             ; preds = %5850, %5836
  %5852 = load double, ptr %5812, align 8, !tbaa !16
  %5853 = fcmp olt double %5852, %5841
  br i1 %5853, label %5854, label %5855

5854:                                             ; preds = %5851
  store double %5841, ptr %5812, align 8, !tbaa !16
  br label %5855

5855:                                             ; preds = %5854, %5851
  %5856 = fcmp ord float %5837, 0.000000e+00
  %5857 = trunc nuw nsw i64 %indvars.iv8178 to i32
  br i1 %5856, label %5858, label %.thread7044

5858:                                             ; preds = %5855
  %5859 = fcmp ogt double %543, %5844
  %5860 = fcmp oeq float %5837, %5840
  %or.cond6476 = select i1 %5859, i1 true, i1 %5860
  br i1 %or.cond6476, label %5861, label %.thread7044

5861:                                             ; preds = %5858
  br i1 %.not6266, label %5868, label %5862

5862:                                             ; preds = %5861
  %5863 = fcmp olt float %5840, %5837
  br i1 %5863, label %5864, label %5866

5864:                                             ; preds = %5862
  %5865 = fsub double %5838, %5841
  br label %5868

5866:                                             ; preds = %5862
  %5867 = fsub double %5841, %5838
  br label %5868

5868:                                             ; preds = %5861, %5864, %5866
  %5869 = phi double [ %5865, %5864 ], [ %5867, %5866 ], [ 0.000000e+00, %5861 ]
  %5870 = fcmp ugt double %5847, 0.000000e+00
  br i1 %5870, label %5871, label %5875

5871:                                             ; preds = %5868
  %5872 = fcmp ogt double %5847, 0.000000e+00
  %5873 = select i1 %5872, double %5847, double 1.000000e+00
  %5874 = fdiv double %5869, %5873
  br label %5875

5875:                                             ; preds = %5868, %5871
  %5876 = phi double [ %5874, %5871 ], [ %5844, %5868 ]
  %5877 = load double, ptr %5813, align 8, !tbaa !17
  %5878 = fcmp ogt double %5877, %5838
  br i1 %5878, label %5879, label %5880

5879:                                             ; preds = %5875
  store double %5838, ptr %5813, align 8, !tbaa !17
  br label %5880

5880:                                             ; preds = %5879, %5875
  %5881 = load double, ptr %5814, align 8, !tbaa !18
  %5882 = fcmp olt double %5881, %5838
  br i1 %5882, label %5883, label %5884

5883:                                             ; preds = %5880
  store double %5838, ptr %5814, align 8, !tbaa !18
  br label %5884

5884:                                             ; preds = %5883, %5880
  %5885 = load double, ptr %5815, align 8, !tbaa !19
  %5886 = fcmp olt double %5885, %5869
  br i1 %5886, label %5887, label %5888

5887:                                             ; preds = %5884
  store double %5869, ptr %5815, align 8, !tbaa !19
  store double %5841, ptr %5816, align 8, !tbaa !20
  store double %5838, ptr %5817, align 8, !tbaa !21
  store i32 %5857, ptr %5818, align 8, !tbaa !22
  store i32 %5831, ptr %5819, align 4, !tbaa !23
  br label %5888

5888:                                             ; preds = %5887, %5884
  %5889 = load double, ptr %5820, align 8, !tbaa !24
  %5890 = fcmp olt double %5889, %5876
  br i1 %5890, label %5891, label %5892

5891:                                             ; preds = %5888
  store double %5876, ptr %5820, align 8, !tbaa !24
  br label %5892

5892:                                             ; preds = %5891, %5888
  %5893 = fmul double %5876, %5876
  %5894 = fcmp ogt double %543, %5893
  br i1 %5894, label %5895, label %5901

5895:                                             ; preds = %5892
  %5896 = fsub double %5893, %.152107313
  %5897 = load double, ptr %5821, align 8, !tbaa !25
  %5898 = fadd double %5896, %5897
  %5899 = fsub double %5898, %5897
  %5900 = fsub double %5899, %5896
  store double %5898, ptr %5821, align 8, !tbaa !25
  br label %5901

5901:                                             ; preds = %5895, %5892
  %.25211 = phi double [ %5900, %5895 ], [ %.152107313, %5892 ]
  %5902 = call double @libxsmm_kahan_sum(double noundef %5847, ptr noundef nonnull %481, ptr noundef nonnull %478)
  %5903 = call double @libxsmm_kahan_sum(double noundef %5844, ptr noundef nonnull %482, ptr noundef nonnull %479)
  %5904 = call double @libxsmm_kahan_sum(double noundef %5869, ptr noundef nonnull %483, ptr noundef nonnull %480)
  %5905 = fmul double %5841, %5841
  %5906 = call double @libxsmm_kahan_sum(double noundef %5905, ptr noundef nonnull %474, ptr noundef nonnull %472)
  %5907 = fmul double %5838, %5838
  %5908 = call double @libxsmm_kahan_sum(double noundef %5907, ptr noundef nonnull %475, ptr noundef nonnull %473)
  %5909 = fmul double %5869, %5869
  %5910 = fcmp ogt double %543, %5909
  br i1 %5910, label %5911, label %5917

5911:                                             ; preds = %5901
  %5912 = call double @libxsmm_kahan_sum(double noundef %5909, ptr noundef nonnull %5822, ptr noundef nonnull %471)
  br label %5917

.thread7044:                                      ; preds = %5858, %5855
  %5913 = fcmp ord float %5840, 0.000000e+00
  %5914 = fcmp ogt double %543, %5847
  %5915 = select i1 %5913, i1 %5914, i1 false
  %5916 = select i1 %5915, i32 1, i32 2
  store i32 %5857, ptr %5818, align 8, !tbaa !22
  store i32 %5831, ptr %5819, align 4, !tbaa !23
  store double %5841, ptr %5816, align 8, !tbaa !20
  store double %5838, ptr %5817, align 8, !tbaa !21
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %483) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %482) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %481) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %480) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %479) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %478) #8
  br label %6049

5917:                                             ; preds = %5911, %5901
  %indvars.iv.next8179 = add nuw nsw i64 %indvars.iv8178, 1
  %exitcond8182.not = icmp eq i64 %indvars.iv.next8179, %wide.trip.count8181
  br i1 %exitcond8182.not, label %._crit_edge7317.loopexit, label %5832, !llvm.loop !131

._crit_edge7317.loopexit:                         ; preds = %5917
  %.pre8699 = load double, ptr %481, align 8, !tbaa !13
  br label %._crit_edge7317

._crit_edge7317:                                  ; preds = %._crit_edge7317.loopexit, %5828
  %5918 = phi double [ 0.000000e+00, %5828 ], [ %.pre8699, %._crit_edge7317.loopexit ]
  %.15210.lcssa = phi double [ %.052097321, %5828 ], [ %.25211, %._crit_edge7317.loopexit ]
  %5919 = call double @libxsmm_kahan_sum(double noundef %5918, ptr noundef nonnull %5823, ptr noundef nonnull %476)
  %5920 = load double, ptr %482, align 8, !tbaa !13
  %5921 = call double @libxsmm_kahan_sum(double noundef %5920, ptr noundef nonnull %5824, ptr noundef nonnull %477)
  %5922 = load double, ptr %5825, align 8, !tbaa !28
  %5923 = load double, ptr %483, align 8, !tbaa !13
  %5924 = fcmp olt double %5922, %5923
  br i1 %5924, label %5925, label %5926

5925:                                             ; preds = %._crit_edge7317
  store double %5923, ptr %5825, align 8, !tbaa !28
  br label %5926

5926:                                             ; preds = %5925, %._crit_edge7317
  %5927 = load double, ptr %481, align 8, !tbaa !13
  %5928 = fcmp olt double %.052227319, %5927
  %.15223 = select i1 %5928, double %5927, double %.052227319
  %5929 = load double, ptr %482, align 8, !tbaa !13
  %5930 = fcmp olt double %.052187320, %5929
  %.15219 = select i1 %5930, double %5929, double %.052187320
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %483) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %482) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %481) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %480) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %479) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %478) #8
  %indvars.iv.next8184 = add nuw nsw i64 %indvars.iv8183, 1
  %exitcond8187.not = icmp eq i64 %indvars.iv.next8184, %wide.trip.count8186
  br i1 %exitcond8187.not, label %._crit_edge7325, label %5828, !llvm.loop !132

._crit_edge7325:                                  ; preds = %5926, %5809
  %.05222.lcssa = phi double [ 0.000000e+00, %5809 ], [ %.15223, %5926 ]
  %.05218.lcssa = phi double [ 0.000000e+00, %5809 ], [ %.15219, %5926 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %484) #8
  store double 0.000000e+00, ptr %484, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %485) #8
  store double 0.000000e+00, ptr %485, align 8, !tbaa !13
  %5931 = getelementptr inbounds i8, ptr %0, i64 112
  %5932 = load double, ptr %5931, align 8, !tbaa !30
  %5933 = fcmp oeq double %5932, 0.000000e+00
  br i1 %5933, label %5935, label %5934

5934:                                             ; preds = %._crit_edge7325
  call void @__assert_fail(ptr noundef nonnull @.str.1, ptr noundef nonnull @.str.2, i32 noundef 130, ptr noundef nonnull @__PRETTY_FUNCTION__.libxsmm_matdiff) #10
  unreachable

5935:                                             ; preds = %._crit_edge7325
  %5936 = getelementptr inbounds i8, ptr %0, i64 152
  %5937 = load double, ptr %5936, align 8, !tbaa !31
  %5938 = fcmp oeq double %5937, 0.000000e+00
  br i1 %5938, label %5940, label %5939

5939:                                             ; preds = %5935
  call void @__assert_fail(ptr noundef nonnull @.str.3, ptr noundef nonnull @.str.2, i32 noundef 131, ptr noundef nonnull @__PRETTY_FUNCTION__.libxsmm_matdiff) #10
  unreachable

5940:                                             ; preds = %5935
  %.not6267 = icmp eq i64 %538, 0
  br i1 %.not6267, label %5951, label %5941

5941:                                             ; preds = %5940
  %5942 = getelementptr inbounds i8, ptr %0, i64 80
  %5943 = load double, ptr %5942, align 8, !tbaa !32
  %5944 = uitofp i64 %538 to double
  %5945 = fdiv double %5943, %5944
  %5946 = getelementptr inbounds i8, ptr %0, i64 104
  store double %5945, ptr %5946, align 8, !tbaa !33
  %5947 = getelementptr inbounds i8, ptr %0, i64 120
  %5948 = load double, ptr %5947, align 8, !tbaa !34
  %5949 = fdiv double %5948, %5944
  %5950 = getelementptr inbounds i8, ptr %0, i64 144
  store double %5949, ptr %5950, align 8, !tbaa !35
  br label %5951

5951:                                             ; preds = %5941, %5940
  %5952 = fcmp ugt double %.05222.lcssa, 0.000000e+00
  br i1 %5952, label %5953, label %5959

5953:                                             ; preds = %5951
  %5954 = getelementptr inbounds i8, ptr %0, i64 16
  %5955 = load double, ptr %5954, align 8, !tbaa !28
  %5956 = fcmp ogt double %.05222.lcssa, 0.000000e+00
  %5957 = select i1 %5956, double %.05222.lcssa, double 1.000000e+00
  %5958 = fdiv double %5955, %5957
  br label %5959

5959:                                             ; preds = %5951, %5953
  %5960 = phi double [ %5958, %5953 ], [ %.05218.lcssa, %5951 ]
  %5961 = getelementptr inbounds i8, ptr %0, i64 24
  store double %5960, ptr %5961, align 8, !tbaa !36
  %5962 = load double, ptr %474, align 8
  %5963 = fcmp ugt double %5962, 0.000000e+00
  br i1 %5963, label %5970, label %5964

5964:                                             ; preds = %5959
  %5965 = load double, ptr %475, align 8, !tbaa !13
  %5966 = fmul double %5965, %5965
  %5967 = getelementptr inbounds i8, ptr %0, i64 56
  %5968 = load double, ptr %5967, align 8, !tbaa !37
  %5969 = fcmp olt double %5966, %5968
  %.6481 = select i1 %5969, double %5966, double %5968
  br label %5976

5970:                                             ; preds = %5959
  %5971 = getelementptr inbounds i8, ptr %0, i64 56
  %5972 = load double, ptr %5971, align 8, !tbaa !37
  %5973 = fcmp ogt double %5962, 0.000000e+00
  %5974 = select i1 %5973, double %5962, double 1.000000e+00
  %5975 = fdiv double %5972, %5974
  br label %5976

5976:                                             ; preds = %5964, %5970
  %5977 = phi double [ %5975, %5970 ], [ %.6481, %5964 ]
  %5978 = getelementptr inbounds i8, ptr %0, i64 32
  store double %5977, ptr %5978, align 8, !tbaa !38
  %5979 = icmp sgt i32 %.05042, 0
  br i1 %5979, label %.lr.ph7337, label %._crit_edge7338.thread

.lr.ph7337:                                       ; preds = %5976
  %.not6268 = icmp eq ptr %spec.select, null
  %5980 = getelementptr inbounds i8, ptr %0, i64 104
  %5981 = getelementptr inbounds i8, ptr %0, i64 144
  %5982 = sext i32 %.05040 to i64
  %5983 = sext i32 %.05041 to i64
  %wide.trip.count8201 = zext nneg i32 %.05042 to i64
  %wide.trip.count8191 = zext nneg i32 %.05043 to i64
  %wide.trip.count8196 = zext nneg i32 %.05043 to i64
  br label %5984

5984:                                             ; preds = %.lr.ph7337, %6036
  %indvars.iv8198 = phi i64 [ 0, %.lr.ph7337 ], [ %indvars.iv.next8199, %6036 ]
  %.052167332 = phi double [ 0.000000e+00, %.lr.ph7337 ], [ %.15217, %6036 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %486) #8
  store double 0.000000e+00, ptr %486, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %487) #8
  store double 0.000000e+00, ptr %487, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %488) #8
  store double 0.000000e+00, ptr %488, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %489) #8
  store double 0.000000e+00, ptr %489, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %490) #8
  store double 0.000000e+00, ptr %490, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %491) #8
  store double 0.000000e+00, ptr %491, align 8, !tbaa !13
  br i1 %5810, label %.lr.ph7330, label %._crit_edge7331

.lr.ph7330:                                       ; preds = %5984
  %invariant.gep9008 = getelementptr i8, ptr %spec.select6345, i64 %indvars.iv8198
  br i1 %.not6268, label %.thread7060.us, label %.lr.ph7330.split.preheader

.lr.ph7330.split.preheader:                       ; preds = %.lr.ph7330
  %invariant.gep9006 = getelementptr i8, ptr %spec.select, i64 %indvars.iv8198
  br label %.lr.ph7330.split

.thread7060.us:                                   ; preds = %.lr.ph7330, %.thread7060.us
  %indvars.iv8193 = phi i64 [ %indvars.iv.next8194, %.thread7060.us ], [ 0, %.lr.ph7330 ]
  %5985 = mul nsw i64 %indvars.iv8193, %5982
  %gep9009 = getelementptr i8, ptr %invariant.gep9008, i64 %5985
  %5986 = load i8, ptr %gep9009, align 1, !tbaa !9
  %5987 = call float @libxsmm_convert_hf8_to_f32(i8 noundef zeroext %5986)
  %5988 = fpext float %5987 to double
  %5989 = load double, ptr %5980, align 8, !tbaa !33
  %5990 = fsub double %5988, %5989
  %5991 = load double, ptr %5981, align 8, !tbaa !35
  %5992 = fsub double 0.000000e+00, %5991
  %5993 = fcmp oge float %5987, 0.000000e+00
  %5994 = fneg double %5988
  %5995 = select i1 %5993, double %5988, double %5994
  %5996 = fmul double %5990, %5990
  %5997 = call double @libxsmm_kahan_sum(double noundef %5996, ptr noundef nonnull %5931, ptr noundef nonnull %484)
  %5998 = fmul double %5992, %5992
  %5999 = call double @libxsmm_kahan_sum(double noundef %5998, ptr noundef nonnull %5936, ptr noundef nonnull %485)
  %6000 = call double @libxsmm_kahan_sum(double noundef %5995, ptr noundef nonnull %489, ptr noundef nonnull %486)
  %6001 = call double @libxsmm_kahan_sum(double noundef 0.000000e+00, ptr noundef nonnull %490, ptr noundef nonnull %487)
  %6002 = call double @libxsmm_kahan_sum(double noundef 0.000000e+00, ptr noundef nonnull %491, ptr noundef nonnull %488)
  %indvars.iv.next8194 = add nuw nsw i64 %indvars.iv8193, 1
  %exitcond8197.not = icmp eq i64 %indvars.iv.next8194, %wide.trip.count8196
  br i1 %exitcond8197.not, label %._crit_edge7331, label %.thread7060.us, !llvm.loop !133

.lr.ph7330.split:                                 ; preds = %.lr.ph7330.split.preheader, %.lr.ph7330.split
  %indvars.iv8188 = phi i64 [ 0, %.lr.ph7330.split.preheader ], [ %indvars.iv.next8189, %.lr.ph7330.split ]
  %6003 = mul nsw i64 %indvars.iv8188, %5982
  %gep9005 = getelementptr i8, ptr %invariant.gep9008, i64 %6003
  %6004 = load i8, ptr %gep9005, align 1, !tbaa !9
  %6005 = call float @libxsmm_convert_hf8_to_f32(i8 noundef zeroext %6004)
  %6006 = fpext float %6005 to double
  %6007 = mul nsw i64 %indvars.iv8188, %5983
  %gep9007 = getelementptr i8, ptr %invariant.gep9006, i64 %6007
  %6008 = load i8, ptr %gep9007, align 1, !tbaa !9
  %6009 = call float @libxsmm_convert_hf8_to_f32(i8 noundef zeroext %6008)
  %6010 = fpext float %6009 to double
  %6011 = fcmp olt float %6005, %6009
  %6012 = fsub double %6010, %6006
  %6013 = fsub double %6006, %6010
  %6014 = select i1 %6011, double %6012, double %6013
  %6015 = load double, ptr %5980, align 8, !tbaa !33
  %6016 = fsub double %6006, %6015
  %6017 = load double, ptr %5981, align 8, !tbaa !35
  %6018 = fsub double %6010, %6017
  %6019 = fcmp oge float %6005, 0.000000e+00
  %6020 = fneg double %6006
  %6021 = select i1 %6019, double %6006, double %6020
  %6022 = fcmp oge float %6009, 0.000000e+00
  %6023 = fneg double %6010
  %6024 = select i1 %6022, double %6010, double %6023
  %6025 = fmul double %6016, %6016
  %6026 = call double @libxsmm_kahan_sum(double noundef %6025, ptr noundef nonnull %5931, ptr noundef nonnull %484)
  %6027 = fmul double %6018, %6018
  %6028 = call double @libxsmm_kahan_sum(double noundef %6027, ptr noundef nonnull %5936, ptr noundef nonnull %485)
  %6029 = call double @libxsmm_kahan_sum(double noundef %6021, ptr noundef nonnull %489, ptr noundef nonnull %486)
  %6030 = call double @libxsmm_kahan_sum(double noundef %6024, ptr noundef nonnull %490, ptr noundef nonnull %487)
  %6031 = call double @libxsmm_kahan_sum(double noundef %6014, ptr noundef nonnull %491, ptr noundef nonnull %488)
  %indvars.iv.next8189 = add nuw nsw i64 %indvars.iv8188, 1
  %exitcond8192.not = icmp eq i64 %indvars.iv.next8189, %wide.trip.count8191
  br i1 %exitcond8192.not, label %._crit_edge7331, label %.lr.ph7330.split, !llvm.loop !133

._crit_edge7331:                                  ; preds = %.lr.ph7330.split, %.thread7060.us, %5984
  %6032 = load double, ptr %0, align 8, !tbaa !40
  %6033 = load double, ptr %491, align 8, !tbaa !13
  %6034 = fcmp olt double %6032, %6033
  br i1 %6034, label %6035, label %6036

6035:                                             ; preds = %._crit_edge7331
  store double %6033, ptr %0, align 8, !tbaa !40
  br label %6036

6036:                                             ; preds = %6035, %._crit_edge7331
  %6037 = load double, ptr %489, align 8, !tbaa !13
  %6038 = fcmp olt double %.052167332, %6037
  %.15217 = select i1 %6038, double %6037, double %.052167332
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %491) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %490) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %489) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %488) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %487) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %486) #8
  %indvars.iv.next8199 = add nuw nsw i64 %indvars.iv8198, 1
  %exitcond8202.not = icmp eq i64 %indvars.iv.next8199, %wide.trip.count8201
  br i1 %exitcond8202.not, label %._crit_edge7338, label %5984, !llvm.loop !134

._crit_edge7338:                                  ; preds = %6036
  %6039 = fcmp ugt double %.15217, 0.000000e+00
  br i1 %6039, label %6041, label %._crit_edge7338.thread

._crit_edge7338.thread:                           ; preds = %5976, %._crit_edge7338
  %6040 = load double, ptr %0, align 8, !tbaa !40
  br label %6046

6041:                                             ; preds = %._crit_edge7338
  %6042 = load double, ptr %0, align 8, !tbaa !40
  %6043 = fcmp ogt double %.15217, 0.000000e+00
  %6044 = select i1 %6043, double %.15217, double 1.000000e+00
  %6045 = fdiv double %6042, %6044
  br label %6046

6046:                                             ; preds = %6041, %._crit_edge7338.thread
  %6047 = phi double [ %6040, %._crit_edge7338.thread ], [ %6045, %6041 ]
  %6048 = getelementptr inbounds i8, ptr %0, i64 8
  store double %6047, ptr %6048, align 8, !tbaa !42
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %485) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %484) #8
  br label %6049

6049:                                             ; preds = %.thread7044, %6046
  %.1147059 = phi i32 [ %5916, %.thread7044 ], [ 0, %6046 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %477) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %476) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %475) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %474) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %473) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %472) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %471) #8
  br label %6314

6050:                                             ; preds = %5807
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %492) #8
  store double 0.000000e+00, ptr %492, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %493) #8
  store double 0.000000e+00, ptr %493, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %494) #8
  store double 0.000000e+00, ptr %494, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %495) #8
  store double 0.000000e+00, ptr %495, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %496) #8
  store double 0.000000e+00, ptr %496, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %497) #8
  store double 0.000000e+00, ptr %497, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %498) #8
  store double 0.000000e+00, ptr %498, align 8, !tbaa !13
  %6051 = sext i32 %.05042 to i64
  %6052 = sext i32 %.05043 to i64
  %6053 = mul nsw i64 %6051, %6052
  %6054 = tail call i64 @libxsmm_coprime2(i64 noundef %6053)
  %6055 = icmp sgt i32 %.05043, 0
  br i1 %6055, label %.lr.ph7298, label %._crit_edge7299

.lr.ph7298:                                       ; preds = %6050
  %6056 = icmp sgt i32 %.05042, 0
  %.not6263 = icmp eq ptr %spec.select, null
  %6057 = getelementptr inbounds i8, ptr %0, i64 96
  %6058 = getelementptr inbounds i8, ptr %0, i64 128
  %6059 = getelementptr inbounds i8, ptr %0, i64 136
  %6060 = getelementptr inbounds i8, ptr %0, i64 40
  %6061 = getelementptr inbounds i8, ptr %0, i64 160
  %6062 = getelementptr inbounds i8, ptr %0, i64 168
  %6063 = getelementptr inbounds i8, ptr %0, i64 176
  %6064 = getelementptr inbounds i8, ptr %0, i64 180
  %6065 = getelementptr inbounds i8, ptr %0, i64 48
  %6066 = getelementptr inbounds i8, ptr %0, i64 64
  %6067 = getelementptr inbounds i8, ptr %0, i64 56
  %6068 = getelementptr inbounds i8, ptr %0, i64 80
  %6069 = getelementptr inbounds i8, ptr %0, i64 120
  %6070 = getelementptr inbounds i8, ptr %0, i64 16
  %6071 = zext i32 %.05042 to i64
  %wide.trip.count8166 = zext nneg i32 %.05043 to i64
  br label %6072

6072:                                             ; preds = %.lr.ph7298, %6182
  %indvars.iv8163 = phi i64 [ 0, %.lr.ph7298 ], [ %indvars.iv.next8164, %6182 ]
  %.051367295 = phi double [ 0.000000e+00, %.lr.ph7298 ], [ %.15137.lcssa, %6182 ]
  %.051457294 = phi double [ 0.000000e+00, %.lr.ph7298 ], [ %.15146, %6182 ]
  %.051497293 = phi double [ 0.000000e+00, %.lr.ph7298 ], [ %.15150, %6182 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %499) #8
  store double 0.000000e+00, ptr %499, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %500) #8
  store double 0.000000e+00, ptr %500, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %501) #8
  store double 0.000000e+00, ptr %501, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %502) #8
  store double 0.000000e+00, ptr %502, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %503) #8
  store double 0.000000e+00, ptr %503, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %504) #8
  store double 0.000000e+00, ptr %504, align 8, !tbaa !13
  br i1 %6056, label %.lr.ph, label %._crit_edge

.lr.ph:                                           ; preds = %6072
  %6073 = mul nuw nsw i64 %indvars.iv8163, %6071
  br label %6074

6074:                                             ; preds = %.lr.ph, %6173
  %indvars.iv = phi i64 [ 0, %.lr.ph ], [ %indvars.iv.next, %6173 ]
  %.151377291 = phi double [ %.051367295, %.lr.ph ], [ %.25138, %6173 ]
  %6075 = add nuw nsw i64 %indvars.iv, %6073
  %6076 = mul i64 %6054, %6075
  %6077 = urem i64 %6076, %6053
  %6078 = udiv i64 %6077, %6051
  %6079 = trunc i64 %6078 to i32
  %6080 = urem i64 %6077, %6051
  %6081 = trunc nuw i64 %6080 to i32
  br i1 %.not6263, label %6089, label %6082

6082:                                             ; preds = %6074
  %6083 = mul nsw i32 %.05041, %6079
  %6084 = add nsw i32 %6083, %6081
  %6085 = sext i32 %6084 to i64
  %6086 = getelementptr inbounds i8, ptr %spec.select, i64 %6085
  %6087 = load i8, ptr %6086, align 1, !tbaa !9
  %6088 = call float @libxsmm_convert_hf8_to_f32(i8 noundef zeroext %6087)
  br label %6089

6089:                                             ; preds = %6074, %6082
  %6090 = phi float [ %6088, %6082 ], [ 0.000000e+00, %6074 ]
  %6091 = fpext float %6090 to double
  %6092 = mul nsw i32 %.05040, %6079
  %6093 = add nsw i32 %6092, %6081
  %6094 = sext i32 %6093 to i64
  %6095 = getelementptr inbounds i8, ptr %spec.select6345, i64 %6094
  %6096 = load i8, ptr %6095, align 1, !tbaa !9
  %6097 = call float @libxsmm_convert_hf8_to_f32(i8 noundef zeroext %6096)
  %6098 = fpext float %6097 to double
  %6099 = fcmp oge float %6090, 0.000000e+00
  %6100 = fneg double %6091
  %6101 = select i1 %6099, double %6091, double %6100
  %6102 = fcmp oge float %6097, 0.000000e+00
  %6103 = fneg double %6098
  %6104 = select i1 %6102, double %6098, double %6103
  %6105 = load double, ptr %542, align 8, !tbaa !10
  %6106 = fcmp ogt double %6105, %6098
  br i1 %6106, label %6107, label %6108

6107:                                             ; preds = %6089
  store double %6098, ptr %542, align 8, !tbaa !10
  br label %6108

6108:                                             ; preds = %6107, %6089
  %6109 = load double, ptr %6057, align 8, !tbaa !16
  %6110 = fcmp olt double %6109, %6098
  br i1 %6110, label %6111, label %6112

6111:                                             ; preds = %6108
  store double %6098, ptr %6057, align 8, !tbaa !16
  br label %6112

6112:                                             ; preds = %6111, %6108
  %6113 = fcmp ord float %6090, 0.000000e+00
  br i1 %6113, label %6114, label %.thread7069

6114:                                             ; preds = %6112
  %6115 = fcmp ogt double %543, %6101
  %6116 = fcmp oeq float %6090, %6097
  %or.cond6482 = select i1 %6115, i1 true, i1 %6116
  br i1 %or.cond6482, label %6117, label %.thread7069

6117:                                             ; preds = %6114
  br i1 %.not6263, label %6124, label %6118

6118:                                             ; preds = %6117
  %6119 = fcmp olt float %6097, %6090
  br i1 %6119, label %6120, label %6122

6120:                                             ; preds = %6118
  %6121 = fsub double %6091, %6098
  br label %6124

6122:                                             ; preds = %6118
  %6123 = fsub double %6098, %6091
  br label %6124

6124:                                             ; preds = %6117, %6120, %6122
  %6125 = phi double [ %6121, %6120 ], [ %6123, %6122 ], [ 0.000000e+00, %6117 ]
  %6126 = fcmp ugt double %6104, 0.000000e+00
  br i1 %6126, label %6127, label %6131

6127:                                             ; preds = %6124
  %6128 = fcmp ogt double %6104, 0.000000e+00
  %6129 = select i1 %6128, double %6104, double 1.000000e+00
  %6130 = fdiv double %6125, %6129
  br label %6131

6131:                                             ; preds = %6124, %6127
  %6132 = phi double [ %6130, %6127 ], [ %6101, %6124 ]
  %6133 = load double, ptr %6058, align 8, !tbaa !17
  %6134 = fcmp ogt double %6133, %6091
  br i1 %6134, label %6135, label %6136

6135:                                             ; preds = %6131
  store double %6091, ptr %6058, align 8, !tbaa !17
  br label %6136

6136:                                             ; preds = %6135, %6131
  %6137 = load double, ptr %6059, align 8, !tbaa !18
  %6138 = fcmp olt double %6137, %6091
  br i1 %6138, label %6139, label %6140

6139:                                             ; preds = %6136
  store double %6091, ptr %6059, align 8, !tbaa !18
  br label %6140

6140:                                             ; preds = %6139, %6136
  %6141 = load double, ptr %6060, align 8, !tbaa !19
  %6142 = fcmp olt double %6141, %6125
  br i1 %6142, label %6143, label %6144

6143:                                             ; preds = %6140
  store double %6125, ptr %6060, align 8, !tbaa !19
  store double %6098, ptr %6061, align 8, !tbaa !20
  store double %6091, ptr %6062, align 8, !tbaa !21
  store i32 %6081, ptr %6063, align 8, !tbaa !22
  store i32 %6079, ptr %6064, align 4, !tbaa !23
  br label %6144

6144:                                             ; preds = %6143, %6140
  %6145 = load double, ptr %6065, align 8, !tbaa !24
  %6146 = fcmp olt double %6145, %6132
  br i1 %6146, label %6147, label %6148

6147:                                             ; preds = %6144
  store double %6132, ptr %6065, align 8, !tbaa !24
  br label %6148

6148:                                             ; preds = %6147, %6144
  %6149 = fmul double %6132, %6132
  %6150 = fcmp ogt double %543, %6149
  br i1 %6150, label %6151, label %6157

6151:                                             ; preds = %6148
  %6152 = fsub double %6149, %.151377291
  %6153 = load double, ptr %6066, align 8, !tbaa !25
  %6154 = fadd double %6152, %6153
  %6155 = fsub double %6154, %6153
  %6156 = fsub double %6155, %6152
  store double %6154, ptr %6066, align 8, !tbaa !25
  br label %6157

6157:                                             ; preds = %6151, %6148
  %.25138 = phi double [ %6156, %6151 ], [ %.151377291, %6148 ]
  %6158 = call double @libxsmm_kahan_sum(double noundef %6104, ptr noundef nonnull %502, ptr noundef nonnull %499)
  %6159 = call double @libxsmm_kahan_sum(double noundef %6101, ptr noundef nonnull %503, ptr noundef nonnull %500)
  %6160 = call double @libxsmm_kahan_sum(double noundef %6125, ptr noundef nonnull %504, ptr noundef nonnull %501)
  %6161 = fmul double %6098, %6098
  %6162 = call double @libxsmm_kahan_sum(double noundef %6161, ptr noundef nonnull %495, ptr noundef nonnull %493)
  %6163 = fmul double %6091, %6091
  %6164 = call double @libxsmm_kahan_sum(double noundef %6163, ptr noundef nonnull %496, ptr noundef nonnull %494)
  %6165 = fmul double %6125, %6125
  %6166 = fcmp ogt double %543, %6165
  br i1 %6166, label %6167, label %6173

6167:                                             ; preds = %6157
  %6168 = call double @libxsmm_kahan_sum(double noundef %6165, ptr noundef nonnull %6067, ptr noundef nonnull %492)
  br label %6173

.thread7069:                                      ; preds = %6114, %6112
  %6169 = fcmp ord float %6097, 0.000000e+00
  %6170 = fcmp ogt double %543, %6104
  %6171 = select i1 %6169, i1 %6170, i1 false
  %6172 = select i1 %6171, i32 1, i32 2
  store i32 %6081, ptr %6063, align 8, !tbaa !22
  store i32 %6079, ptr %6064, align 4, !tbaa !23
  store double %6098, ptr %6061, align 8, !tbaa !20
  store double %6091, ptr %6062, align 8, !tbaa !21
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %504) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %503) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %502) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %501) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %500) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %499) #8
  br label %6305

6173:                                             ; preds = %6167, %6157
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, %6071
  br i1 %exitcond.not, label %._crit_edge.loopexit, label %6074, !llvm.loop !135

._crit_edge.loopexit:                             ; preds = %6173
  %.pre = load double, ptr %502, align 8, !tbaa !13
  br label %._crit_edge

._crit_edge:                                      ; preds = %._crit_edge.loopexit, %6072
  %6174 = phi double [ 0.000000e+00, %6072 ], [ %.pre, %._crit_edge.loopexit ]
  %.15137.lcssa = phi double [ %.051367295, %6072 ], [ %.25138, %._crit_edge.loopexit ]
  %6175 = call double @libxsmm_kahan_sum(double noundef %6174, ptr noundef nonnull %6068, ptr noundef nonnull %497)
  %6176 = load double, ptr %503, align 8, !tbaa !13
  %6177 = call double @libxsmm_kahan_sum(double noundef %6176, ptr noundef nonnull %6069, ptr noundef nonnull %498)
  %6178 = load double, ptr %6070, align 8, !tbaa !28
  %6179 = load double, ptr %504, align 8, !tbaa !13
  %6180 = fcmp olt double %6178, %6179
  br i1 %6180, label %6181, label %6182

6181:                                             ; preds = %._crit_edge
  store double %6179, ptr %6070, align 8, !tbaa !28
  br label %6182

6182:                                             ; preds = %6181, %._crit_edge
  %6183 = load double, ptr %502, align 8, !tbaa !13
  %6184 = fcmp olt double %.051497293, %6183
  %.15150 = select i1 %6184, double %6183, double %.051497293
  %6185 = load double, ptr %503, align 8, !tbaa !13
  %6186 = fcmp olt double %.051457294, %6185
  %.15146 = select i1 %6186, double %6185, double %.051457294
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %504) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %503) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %502) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %501) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %500) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %499) #8
  %indvars.iv.next8164 = add nuw nsw i64 %indvars.iv8163, 1
  %exitcond8167.not = icmp eq i64 %indvars.iv.next8164, %wide.trip.count8166
  br i1 %exitcond8167.not, label %._crit_edge7299, label %6072, !llvm.loop !136

._crit_edge7299:                                  ; preds = %6182, %6050
  %.05149.lcssa = phi double [ 0.000000e+00, %6050 ], [ %.15150, %6182 ]
  %.05145.lcssa = phi double [ 0.000000e+00, %6050 ], [ %.15146, %6182 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %505) #8
  store double 0.000000e+00, ptr %505, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %506) #8
  store double 0.000000e+00, ptr %506, align 8, !tbaa !13
  %6187 = getelementptr inbounds i8, ptr %0, i64 112
  %6188 = load double, ptr %6187, align 8, !tbaa !30
  %6189 = fcmp oeq double %6188, 0.000000e+00
  br i1 %6189, label %6191, label %6190

6190:                                             ; preds = %._crit_edge7299
  call void @__assert_fail(ptr noundef nonnull @.str.1, ptr noundef nonnull @.str.2, i32 noundef 130, ptr noundef nonnull @__PRETTY_FUNCTION__.libxsmm_matdiff) #10
  unreachable

6191:                                             ; preds = %._crit_edge7299
  %6192 = getelementptr inbounds i8, ptr %0, i64 152
  %6193 = load double, ptr %6192, align 8, !tbaa !31
  %6194 = fcmp oeq double %6193, 0.000000e+00
  br i1 %6194, label %6196, label %6195

6195:                                             ; preds = %6191
  call void @__assert_fail(ptr noundef nonnull @.str.3, ptr noundef nonnull @.str.2, i32 noundef 131, ptr noundef nonnull @__PRETTY_FUNCTION__.libxsmm_matdiff) #10
  unreachable

6196:                                             ; preds = %6191
  %.not6264 = icmp eq i64 %538, 0
  br i1 %.not6264, label %6207, label %6197

6197:                                             ; preds = %6196
  %6198 = getelementptr inbounds i8, ptr %0, i64 80
  %6199 = load double, ptr %6198, align 8, !tbaa !32
  %6200 = uitofp i64 %538 to double
  %6201 = fdiv double %6199, %6200
  %6202 = getelementptr inbounds i8, ptr %0, i64 104
  store double %6201, ptr %6202, align 8, !tbaa !33
  %6203 = getelementptr inbounds i8, ptr %0, i64 120
  %6204 = load double, ptr %6203, align 8, !tbaa !34
  %6205 = fdiv double %6204, %6200
  %6206 = getelementptr inbounds i8, ptr %0, i64 144
  store double %6205, ptr %6206, align 8, !tbaa !35
  br label %6207

6207:                                             ; preds = %6197, %6196
  %6208 = fcmp ugt double %.05149.lcssa, 0.000000e+00
  br i1 %6208, label %6209, label %6215

6209:                                             ; preds = %6207
  %6210 = getelementptr inbounds i8, ptr %0, i64 16
  %6211 = load double, ptr %6210, align 8, !tbaa !28
  %6212 = fcmp ogt double %.05149.lcssa, 0.000000e+00
  %6213 = select i1 %6212, double %.05149.lcssa, double 1.000000e+00
  %6214 = fdiv double %6211, %6213
  br label %6215

6215:                                             ; preds = %6207, %6209
  %6216 = phi double [ %6214, %6209 ], [ %.05145.lcssa, %6207 ]
  %6217 = getelementptr inbounds i8, ptr %0, i64 24
  store double %6216, ptr %6217, align 8, !tbaa !36
  %6218 = load double, ptr %495, align 8
  %6219 = fcmp ugt double %6218, 0.000000e+00
  br i1 %6219, label %6226, label %6220

6220:                                             ; preds = %6215
  %6221 = load double, ptr %496, align 8, !tbaa !13
  %6222 = fmul double %6221, %6221
  %6223 = getelementptr inbounds i8, ptr %0, i64 56
  %6224 = load double, ptr %6223, align 8, !tbaa !37
  %6225 = fcmp olt double %6222, %6224
  %.6487 = select i1 %6225, double %6222, double %6224
  br label %6232

6226:                                             ; preds = %6215
  %6227 = getelementptr inbounds i8, ptr %0, i64 56
  %6228 = load double, ptr %6227, align 8, !tbaa !37
  %6229 = fcmp ogt double %6218, 0.000000e+00
  %6230 = select i1 %6229, double %6218, double 1.000000e+00
  %6231 = fdiv double %6228, %6230
  br label %6232

6232:                                             ; preds = %6220, %6226
  %6233 = phi double [ %6231, %6226 ], [ %.6487, %6220 ]
  %6234 = getelementptr inbounds i8, ptr %0, i64 32
  store double %6233, ptr %6234, align 8, !tbaa !38
  %6235 = icmp sgt i32 %.05042, 0
  br i1 %6235, label %.lr.ph7310, label %._crit_edge7311.thread

.lr.ph7310:                                       ; preds = %6232
  %.not6265 = icmp eq ptr %spec.select, null
  %6236 = getelementptr inbounds i8, ptr %0, i64 104
  %6237 = getelementptr inbounds i8, ptr %0, i64 144
  %6238 = zext nneg i32 %.05042 to i64
  %wide.trip.count8171 = zext nneg i32 %.05043 to i64
  br label %6239

6239:                                             ; preds = %.lr.ph7310, %6292
  %indvars.iv8173 = phi i64 [ 0, %.lr.ph7310 ], [ %indvars.iv.next8174, %6292 ]
  %.051437306 = phi double [ 0.000000e+00, %.lr.ph7310 ], [ %.15144, %6292 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %507) #8
  store double 0.000000e+00, ptr %507, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %508) #8
  store double 0.000000e+00, ptr %508, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %509) #8
  store double 0.000000e+00, ptr %509, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %510) #8
  store double 0.000000e+00, ptr %510, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %511) #8
  store double 0.000000e+00, ptr %511, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %512) #8
  store double 0.000000e+00, ptr %512, align 8, !tbaa !13
  br i1 %6055, label %.lr.ph7304, label %._crit_edge7305

.lr.ph7304:                                       ; preds = %6239, %.thread7085
  %indvars.iv8168 = phi i64 [ %indvars.iv.next8169, %.thread7085 ], [ 0, %6239 ]
  %6240 = mul nuw nsw i64 %indvars.iv8168, %6238
  %6241 = add nuw nsw i64 %6240, %indvars.iv8173
  %6242 = mul i64 %6054, %6241
  %6243 = urem i64 %6242, %6053
  %6244 = udiv i64 %6243, %6051
  %6245 = trunc i64 %6244 to i32
  %6246 = urem i64 %6243, %6051
  %6247 = trunc nuw i64 %6246 to i32
  %6248 = mul nsw i32 %.05040, %6245
  %6249 = add nsw i32 %6248, %6247
  %6250 = sext i32 %6249 to i64
  %6251 = getelementptr inbounds i8, ptr %spec.select6345, i64 %6250
  %6252 = load i8, ptr %6251, align 1, !tbaa !9
  %6253 = call float @libxsmm_convert_hf8_to_f32(i8 noundef zeroext %6252)
  %6254 = fpext float %6253 to double
  br i1 %.not6265, label %.thread7085, label %6255

6255:                                             ; preds = %.lr.ph7304
  %6256 = mul nsw i32 %.05041, %6245
  %6257 = add nsw i32 %6256, %6247
  %6258 = sext i32 %6257 to i64
  %6259 = getelementptr inbounds i8, ptr %spec.select, i64 %6258
  %6260 = load i8, ptr %6259, align 1, !tbaa !9
  %6261 = call float @libxsmm_convert_hf8_to_f32(i8 noundef zeroext %6260)
  %6262 = fpext float %6261 to double
  %6263 = fcmp olt float %6253, %6261
  br i1 %6263, label %6264, label %6266

6264:                                             ; preds = %6255
  %6265 = fsub double %6262, %6254
  br label %.thread7085

6266:                                             ; preds = %6255
  %6267 = fsub double %6254, %6262
  br label %.thread7085

.thread7085:                                      ; preds = %.lr.ph7304, %6264, %6266
  %6268 = phi double [ %6262, %6264 ], [ %6262, %6266 ], [ 0.000000e+00, %.lr.ph7304 ]
  %6269 = phi float [ %6261, %6264 ], [ %6261, %6266 ], [ 0.000000e+00, %.lr.ph7304 ]
  %6270 = phi double [ %6265, %6264 ], [ %6267, %6266 ], [ 0.000000e+00, %.lr.ph7304 ]
  %6271 = load double, ptr %6236, align 8, !tbaa !33
  %6272 = fsub double %6254, %6271
  %6273 = load double, ptr %6237, align 8, !tbaa !35
  %6274 = fsub double %6268, %6273
  %6275 = fcmp oge float %6253, 0.000000e+00
  %6276 = fneg double %6254
  %6277 = select i1 %6275, double %6254, double %6276
  %6278 = fcmp oge float %6269, 0.000000e+00
  %6279 = fneg double %6268
  %6280 = select i1 %6278, double %6268, double %6279
  %6281 = fmul double %6272, %6272
  %6282 = call double @libxsmm_kahan_sum(double noundef %6281, ptr noundef nonnull %6187, ptr noundef nonnull %505)
  %6283 = fmul double %6274, %6274
  %6284 = call double @libxsmm_kahan_sum(double noundef %6283, ptr noundef nonnull %6192, ptr noundef nonnull %506)
  %6285 = call double @libxsmm_kahan_sum(double noundef %6277, ptr noundef nonnull %510, ptr noundef nonnull %507)
  %6286 = call double @libxsmm_kahan_sum(double noundef %6280, ptr noundef nonnull %511, ptr noundef nonnull %508)
  %6287 = call double @libxsmm_kahan_sum(double noundef %6270, ptr noundef nonnull %512, ptr noundef nonnull %509)
  %indvars.iv.next8169 = add nuw nsw i64 %indvars.iv8168, 1
  %exitcond8172.not = icmp eq i64 %indvars.iv.next8169, %wide.trip.count8171
  br i1 %exitcond8172.not, label %._crit_edge7305.loopexit, label %.lr.ph7304, !llvm.loop !137

._crit_edge7305.loopexit:                         ; preds = %.thread7085
  %.pre8698 = load double, ptr %512, align 8, !tbaa !13
  br label %._crit_edge7305

._crit_edge7305:                                  ; preds = %._crit_edge7305.loopexit, %6239
  %6288 = phi double [ %.pre8698, %._crit_edge7305.loopexit ], [ 0.000000e+00, %6239 ]
  %6289 = load double, ptr %0, align 8, !tbaa !40
  %6290 = fcmp olt double %6289, %6288
  br i1 %6290, label %6291, label %6292

6291:                                             ; preds = %._crit_edge7305
  store double %6288, ptr %0, align 8, !tbaa !40
  br label %6292

6292:                                             ; preds = %6291, %._crit_edge7305
  %6293 = load double, ptr %510, align 8, !tbaa !13
  %6294 = fcmp olt double %.051437306, %6293
  %.15144 = select i1 %6294, double %6293, double %.051437306
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %512) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %511) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %510) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %509) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %508) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %507) #8
  %indvars.iv.next8174 = add nuw nsw i64 %indvars.iv8173, 1
  %exitcond8177.not = icmp eq i64 %indvars.iv.next8174, %6238
  br i1 %exitcond8177.not, label %._crit_edge7311, label %6239, !llvm.loop !138

._crit_edge7311:                                  ; preds = %6292
  %6295 = fcmp ugt double %.15144, 0.000000e+00
  br i1 %6295, label %6297, label %._crit_edge7311.thread

._crit_edge7311.thread:                           ; preds = %6232, %._crit_edge7311
  %6296 = load double, ptr %0, align 8, !tbaa !40
  br label %6302

6297:                                             ; preds = %._crit_edge7311
  %6298 = load double, ptr %0, align 8, !tbaa !40
  %6299 = fcmp ogt double %.15144, 0.000000e+00
  %6300 = select i1 %6299, double %.15144, double 1.000000e+00
  %6301 = fdiv double %6298, %6300
  br label %6302

6302:                                             ; preds = %6297, %._crit_edge7311.thread
  %6303 = phi double [ %6296, %._crit_edge7311.thread ], [ %6301, %6297 ]
  %6304 = getelementptr inbounds i8, ptr %0, i64 8
  store double %6303, ptr %6304, align 8, !tbaa !42
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %506) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %505) #8
  br label %6305

6305:                                             ; preds = %.thread7069, %6302
  %.1197084 = phi i32 [ %6172, %.thread7069 ], [ 0, %6302 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %498) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %497) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %496) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %495) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %494) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %493) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %492) #8
  br label %6314

6306:                                             ; preds = %541
  %6307 = load i32, ptr @libxsmm_verbosity, align 4, !tbaa !5
  %.not6335 = icmp eq i32 %6307, 0
  br i1 %.not6335, label %6314, label %6308

6308:                                             ; preds = %6306
  %6309 = atomicrmw add ptr @libxsmm_matdiff.error_once, i32 1 seq_cst, align 4
  %6310 = icmp eq i32 %6309, 0
  br i1 %6310, label %6311, label %6314

6311:                                             ; preds = %6308
  %6312 = load ptr, ptr @stderr, align 8, !tbaa !139
  %6313 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %6312, ptr noundef nonnull @.str.4) #11
  br label %6314

6314:                                             ; preds = %6306, %6308, %6311, %6049, %6305, %5550, %5806, %5051, %5307, %4552, %4808, %4057, %4309, %3572, %3819, %3096, %3339, %2633, %2864, %2173, %2416, %1710, %1941, %1250, %1493, %775, %1018
  %.120 = phi i32 [ %.1147059, %6049 ], [ %.1197084, %6305 ], [ %.1047009, %5550 ], [ %.1097034, %5806 ], [ %.946959, %5051 ], [ %.996984, %5307 ], [ %.846909, %4552 ], [ %.896934, %4808 ], [ %.746859, %4057 ], [ %.796884, %4309 ], [ %.646809, %3572 ], [ %.696834, %3819 ], [ %.546759, %3096 ], [ %.596784, %3339 ], [ %.446709, %2633 ], [ %.496734, %2864 ], [ %.346659, %2173 ], [ %.396684, %2416 ], [ %.246609, %1710 ], [ %.296634, %1941 ], [ %.146559, %1250 ], [ %.196584, %1493 ], [ %.46509, %775 ], [ %.96534, %1018 ], [ 0, %6311 ], [ 0, %6308 ], [ 0, %6306 ]
  %6315 = phi i1 [ true, %6049 ], [ true, %6305 ], [ true, %5550 ], [ true, %5806 ], [ true, %5051 ], [ true, %5307 ], [ true, %4552 ], [ true, %4808 ], [ true, %4057 ], [ true, %4309 ], [ true, %3572 ], [ true, %3819 ], [ true, %3096 ], [ true, %3339 ], [ true, %2633 ], [ true, %2864 ], [ true, %2173 ], [ true, %2416 ], [ true, %1710 ], [ true, %1941 ], [ true, %1250 ], [ true, %1493 ], [ true, %775 ], [ true, %1018 ], [ false, %6311 ], [ false, %6308 ], [ false, %6306 ]
  %.05036 = phi i32 [ 0, %6049 ], [ 0, %6305 ], [ 0, %5550 ], [ 0, %5806 ], [ 0, %5051 ], [ 0, %5307 ], [ 0, %4552 ], [ 0, %4808 ], [ 0, %4057 ], [ 0, %4309 ], [ 0, %3572 ], [ 0, %3819 ], [ 0, %3096 ], [ 0, %3339 ], [ 0, %2633 ], [ 0, %2864 ], [ 0, %2173 ], [ 0, %2416 ], [ 0, %1710 ], [ 0, %1941 ], [ 0, %1250 ], [ 0, %1493 ], [ 0, %775 ], [ 0, %1018 ], [ 1, %6311 ], [ 1, %6308 ], [ 1, %6306 ]
  %6316 = getelementptr inbounds i8, ptr %0, i64 176
  %6317 = load i32, ptr %6316, align 8, !tbaa !22
  %6318 = icmp sgt i32 %6317, -1
  %6319 = getelementptr inbounds i8, ptr %0, i64 180
  %6320 = load i32, ptr %6319, align 4, !tbaa !23
  br i1 %6318, label %6321, label %6323

6321:                                             ; preds = %6314
  %6322 = icmp sgt i32 %6320, -1
  br i1 %6322, label %6326, label %6325

6323:                                             ; preds = %6314
  %6324 = icmp slt i32 %6320, 0
  br i1 %6324, label %6326, label %6325

6325:                                             ; preds = %6321, %6323
  call void @__assert_fail(ptr noundef nonnull @.str.5, ptr noundef nonnull @.str.6, i32 noundef 237, ptr noundef nonnull @__PRETTY_FUNCTION__.libxsmm_matdiff) #10
  unreachable

6326:                                             ; preds = %6321, %6323
  %6327 = icmp slt i32 %6317, %.05042
  br i1 %6327, label %6328, label %6331

6328:                                             ; preds = %6326
  %6329 = getelementptr inbounds i8, ptr %0, i64 180
  %6330 = icmp slt i32 %6320, %.05043
  br i1 %6330, label %6332, label %6331

6331:                                             ; preds = %6328, %6326
  call void @__assert_fail(ptr noundef nonnull @.str.7, ptr noundef nonnull @.str.6, i32 noundef 238, ptr noundef nonnull @__PRETTY_FUNCTION__.libxsmm_matdiff) #10
  unreachable

6332:                                             ; preds = %6328
  br i1 %6315, label %6333, label %6434

6333:                                             ; preds = %6332
  %6334 = call ptr @getenv(ptr noundef nonnull @.str.8) #8
  %6335 = load i32, ptr @libxsmm_ninit, align 4, !tbaa !5
  %6336 = icmp ult i32 %6335, 2
  br i1 %6336, label %6337, label %6338

6337:                                             ; preds = %6333
  call void @libxsmm_init() #8
  br label %6338

6338:                                             ; preds = %6337, %6333
  %.not6336 = icmp eq ptr %6334, null
  br i1 %.not6336, label %6359, label %6339

6339:                                             ; preds = %6338
  %6340 = load i8, ptr %6334, align 1, !tbaa !9
  %cond = icmp eq i8 %6340, 45
  br i1 %cond, label %6341, label %6359

6341:                                             ; preds = %6339
  %6342 = load i32, ptr %6316, align 8, !tbaa !22
  %6343 = icmp sgt i32 %6342, -1
  br i1 %6343, label %6344, label %6350

6344:                                             ; preds = %6341
  %6345 = load i32, ptr %6329, align 4, !tbaa !23
  %6346 = icmp sgt i32 %6345, -1
  br i1 %6346, label %.thread7087, label %6350

.thread7087:                                      ; preds = %6344
  %.not63407088 = icmp eq ptr %spec.select, null
  br i1 %.not63407088, label %6359, label %.thread7089

.thread7089:                                      ; preds = %.thread7087
  %6347 = getelementptr inbounds i8, ptr %6334, i64 1
  %6348 = load i8, ptr %6347, align 1, !tbaa !9
  %6349 = icmp sgt i8 %6348, 49
  br i1 %6349, label %.sink.split, label %6359

6350:                                             ; preds = %6341, %6344
  %6351 = getelementptr inbounds i8, ptr %6334, i64 1
  %6352 = load i8, ptr %6351, align 1, !tbaa !9
  %6353 = icmp sgt i8 %6352, 49
  %6354 = icmp ne ptr %spec.select, null
  %or.cond5 = and i1 %6354, %6353
  br i1 %or.cond5, label %.sink.split, label %6359

.sink.split:                                      ; preds = %6350, %.thread7089
  %.str.9.sink = phi ptr [ @.str.9, %.thread7089 ], [ @.str.10, %6350 ]
  %6355 = call ptr @libxsmm_get_typename(i32 noundef %1) #8
  %6356 = sext i32 %.05040 to i64
  %6357 = sext i32 %.05041 to i64
  %6358 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) %.str.9.sink, ptr noundef %6355, i64 noundef %536, i64 noundef %537, i64 noundef %6356, i64 noundef %6357)
  br label %6359

6359:                                             ; preds = %6339, %.sink.split, %.thread7087, %.thread7089, %6350, %6338
  %6360 = icmp eq i32 %.120, 0
  br i1 %6360, label %6361, label %6393

6361:                                             ; preds = %6359
  %6362 = getelementptr inbounds i8, ptr %0, i64 112
  %6363 = load double, ptr %6362, align 8, !tbaa !30
  %6364 = fcmp ugt double %6363, 0.000000e+00
  %6365 = getelementptr inbounds i8, ptr %0, i64 56
  %6366 = load double, ptr %6365, align 8, !tbaa !37
  br i1 %6364, label %6367, label %6371

6367:                                             ; preds = %6361
  %6368 = fcmp ogt double %6363, 0.000000e+00
  %6369 = select i1 %6368, double %6363, double 1.000000e+00
  %6370 = fdiv double %6366, %6369
  br label %6371

6371:                                             ; preds = %6361, %6367
  %6372 = phi double [ %6370, %6367 ], [ %6366, %6361 ]
  %6373 = fsub double 1.000000e+00, %6372
  %6374 = fcmp ogt double %6373, 0.000000e+00
  %6375 = select i1 %6374, double %6373, double 0.000000e+00
  %6376 = getelementptr inbounds i8, ptr %0, i64 72
  store double %6375, ptr %6376, align 8, !tbaa !141
  %.not6341 = icmp eq i64 %538, 0
  br i1 %.not6341, label %6383, label %6377

6377:                                             ; preds = %6371
  %6378 = uitofp i64 %538 to double
  %6379 = fdiv double %6363, %6378
  store double %6379, ptr %6362, align 8, !tbaa !30
  %6380 = getelementptr inbounds i8, ptr %0, i64 152
  %6381 = load double, ptr %6380, align 8, !tbaa !31
  %6382 = fdiv double %6381, %6378
  store double %6382, ptr %6380, align 8, !tbaa !31
  br label %6383

6383:                                             ; preds = %6377, %6371
  %6384 = getelementptr inbounds i8, ptr %0, i64 32
  %6385 = load double, ptr %6384, align 8, !tbaa !38
  %6386 = call double @libxsmm_dsqrt(double noundef %6385)
  store double %6386, ptr %6384, align 8, !tbaa !38
  %6387 = getelementptr inbounds i8, ptr %0, i64 56
  %6388 = load double, ptr %6387, align 8, !tbaa !37
  %6389 = call double @libxsmm_dsqrt(double noundef %6388)
  store double %6389, ptr %6387, align 8, !tbaa !37
  %6390 = getelementptr inbounds i8, ptr %0, i64 64
  %6391 = load double, ptr %6390, align 8, !tbaa !25
  %6392 = call double @libxsmm_dsqrt(double noundef %6391)
  store double %6392, ptr %6390, align 8, !tbaa !25
  br label %6416

6393:                                             ; preds = %6359
  %6394 = getelementptr inbounds i8, ptr %0, i64 64
  store double %543, ptr %6394, align 8, !tbaa !25
  %6395 = getelementptr inbounds i8, ptr %0, i64 32
  %6396 = insertelement <4 x double> poison, double %543, i64 0
  %6397 = shufflevector <4 x double> %6396, <4 x double> poison, <4 x i32> zeroinitializer
  store <4 x double> %6397, ptr %6395, align 8, !tbaa !13
  store <4 x double> %6397, ptr %0, align 8, !tbaa !13
  %6398 = icmp eq i32 %.120, 1
  br i1 %6398, label %6399, label %6408

6399:                                             ; preds = %6393
  %6400 = getelementptr inbounds i8, ptr %0, i64 152
  store double %543, ptr %6400, align 8, !tbaa !31
  %6401 = getelementptr inbounds i8, ptr %0, i64 120
  store double %543, ptr %6401, align 8, !tbaa !34
  %6402 = getelementptr inbounds i8, ptr %0, i64 168
  %6403 = load double, ptr %6402, align 8, !tbaa !21
  %6404 = getelementptr inbounds i8, ptr %0, i64 144
  store double %6403, ptr %6404, align 8, !tbaa !35
  %6405 = getelementptr inbounds i8, ptr %0, i64 128
  store double %543, ptr %6405, align 8, !tbaa !17
  %6406 = fneg double %543
  %6407 = getelementptr inbounds i8, ptr %0, i64 136
  store double %6406, ptr %6407, align 8, !tbaa !18
  br label %6416

6408:                                             ; preds = %6393
  %6409 = getelementptr inbounds i8, ptr %0, i64 112
  store double %543, ptr %6409, align 8, !tbaa !30
  %6410 = getelementptr inbounds i8, ptr %0, i64 80
  store double %543, ptr %6410, align 8, !tbaa !32
  %6411 = getelementptr inbounds i8, ptr %0, i64 160
  %6412 = load double, ptr %6411, align 8, !tbaa !20
  %6413 = getelementptr inbounds i8, ptr %0, i64 104
  store double %6412, ptr %6413, align 8, !tbaa !33
  store double %543, ptr %542, align 8, !tbaa !10
  %6414 = fneg double %543
  %6415 = getelementptr inbounds i8, ptr %0, i64 96
  store double %6414, ptr %6415, align 8, !tbaa !16
  br label %6416

6416:                                             ; preds = %6408, %6399, %6383
  br i1 %539, label %6417, label %6420

6417:                                             ; preds = %6416
  %6418 = load <2 x i32>, ptr %6316, align 8, !tbaa !5
  %6419 = shufflevector <2 x i32> %6418, <2 x i32> poison, <2 x i32> <i32 1, i32 0>
  store <2 x i32> %6419, ptr %6316, align 8, !tbaa !5
  br label %6420

6420:                                             ; preds = %6417, %6416
  br i1 %or.cond.not, label %6434, label %6421

6421:                                             ; preds = %6420
  %6422 = getelementptr inbounds i8, ptr %0, i64 96
  %6423 = getelementptr inbounds i8, ptr %0, i64 136
  %6424 = load <2 x double>, ptr %6422, align 8, !tbaa !13
  store <2 x double> %6424, ptr %6423, align 8, !tbaa !13
  store <2 x double> zeroinitializer, ptr %6422, align 8, !tbaa !13
  %6425 = getelementptr inbounds i8, ptr %0, i64 112
  %6426 = load double, ptr %6425, align 8, !tbaa !30
  %6427 = getelementptr inbounds i8, ptr %0, i64 152
  store double %6426, ptr %6427, align 8, !tbaa !31
  store double 0.000000e+00, ptr %6425, align 8, !tbaa !30
  %6428 = getelementptr inbounds i8, ptr %0, i64 80
  %6429 = getelementptr inbounds i8, ptr %0, i64 120
  %6430 = load <2 x double>, ptr %6428, align 8, !tbaa !13
  store <2 x double> %6430, ptr %6429, align 8, !tbaa !13
  store <2 x double> zeroinitializer, ptr %6428, align 8, !tbaa !13
  %6431 = getelementptr inbounds i8, ptr %0, i64 160
  %6432 = load double, ptr %6431, align 8, !tbaa !20
  %6433 = getelementptr inbounds i8, ptr %0, i64 168
  store double %6432, ptr %6433, align 8, !tbaa !21
  store double 0.000000e+00, ptr %6431, align 8, !tbaa !20
  br label %6434

6434:                                             ; preds = %521, %6332, %6421, %6420
  %.1 = phi i32 [ %.05036, %6420 ], [ %.05036, %6421 ], [ %.05036, %6332 ], [ 1, %521 ]
  ret i32 %.1
}

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

; Function Attrs: nofree nounwind memory(read)
declare noundef ptr @getenv(ptr nocapture noundef) local_unnamed_addr #2

; Function Attrs: inlinehint mustprogress nofree nounwind willreturn memory(read) uwtable
declare i32 @atoi(ptr nocapture noundef nonnull) local_unnamed_addr #3

; Function Attrs: nounwind uwtable
declare dso_local void @libxsmm_matdiff_clear(ptr noundef) local_unnamed_addr #0

; Function Attrs: nounwind uwtable
declare dso_local double @libxsmm_kahan_sum(double noundef, ptr noundef, ptr noundef) local_unnamed_addr #0

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

; Function Attrs: noreturn nounwind
declare void @__assert_fail(ptr noundef, ptr noundef, i32 noundef, ptr noundef) local_unnamed_addr #4

; Function Attrs: nounwind uwtable
declare dso_local i64 @libxsmm_coprime2(i64 noundef) local_unnamed_addr #0

; Function Attrs: nounwind uwtable
declare dso_local float @libxsmm_convert_f16_to_f32(i16 noundef zeroext) local_unnamed_addr #0

; Function Attrs: nounwind uwtable
declare dso_local float @libxsmm_convert_bf16_to_f32(i16 noundef zeroext) local_unnamed_addr #0

; Function Attrs: nounwind uwtable
declare dso_local float @libxsmm_convert_bf8_to_f32(i8 noundef zeroext) local_unnamed_addr #0

; Function Attrs: nounwind uwtable
declare dso_local float @libxsmm_convert_hf8_to_f32(i8 noundef zeroext) local_unnamed_addr #0

; Function Attrs: nofree nounwind
declare noundef i32 @fprintf(ptr nocapture noundef, ptr nocapture noundef readonly, ...) local_unnamed_addr #5

declare void @libxsmm_init() local_unnamed_addr #6

; Function Attrs: nofree nounwind
declare noundef i32 @printf(ptr nocapture noundef readonly, ...) local_unnamed_addr #5

declare ptr @libxsmm_get_typename(i32 noundef) local_unnamed_addr #6

; Function Attrs: nounwind uwtable
declare dso_local double @libxsmm_dsqrt(double noundef) local_unnamed_addr #7

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 = { nofree nounwind memory(read) "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 #3 = { inlinehint mustprogress nofree nounwind willreturn memory(read) 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 #4 = { 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 #5 = { nofree 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 #6 = { "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 = { nounwind uwtable "min-legal-vector-width"="128" "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 #8 = { nounwind }
attributes #9 = { nounwind willreturn memory(read) }
attributes #10 = { noreturn nounwind }
attributes #11 = { cold 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 = !{!7, !7, i64 0}
!10 = !{!11, !12, i64 88}
!11 = !{!"libxsmm_matdiff_info", !12, i64 0, !12, i64 8, !12, i64 16, !12, i64 24, !12, i64 32, !12, i64 40, !12, i64 48, !12, i64 56, !12, i64 64, !12, i64 72, !12, i64 80, !12, i64 88, !12, i64 96, !12, i64 104, !12, i64 112, !12, i64 120, !12, i64 128, !12, i64 136, !12, i64 144, !12, i64 152, !12, i64 160, !12, i64 168, !6, i64 176, !6, i64 180, !6, i64 184, !6, i64 188}
!12 = !{!"double", !7, i64 0}
!13 = !{!12, !12, i64 0}
!14 = !{!15, !15, i64 0}
!15 = !{!"long long", !7, i64 0}
!16 = !{!11, !12, i64 96}
!17 = !{!11, !12, i64 128}
!18 = !{!11, !12, i64 136}
!19 = !{!11, !12, i64 40}
!20 = !{!11, !12, i64 160}
!21 = !{!11, !12, i64 168}
!22 = !{!11, !6, i64 176}
!23 = !{!11, !6, i64 180}
!24 = !{!11, !12, i64 48}
!25 = !{!11, !12, i64 64}
!26 = distinct !{!26, !27}
!27 = !{!"llvm.loop.mustprogress"}
!28 = !{!11, !12, i64 16}
!29 = distinct !{!29, !27}
!30 = !{!11, !12, i64 112}
!31 = !{!11, !12, i64 152}
!32 = !{!11, !12, i64 80}
!33 = !{!11, !12, i64 104}
!34 = !{!11, !12, i64 120}
!35 = !{!11, !12, i64 144}
!36 = !{!11, !12, i64 24}
!37 = !{!11, !12, i64 56}
!38 = !{!11, !12, i64 32}
!39 = distinct !{!39, !27}
!40 = !{!11, !12, i64 0}
!41 = distinct !{!41, !27}
!42 = !{!11, !12, i64 8}
!43 = distinct !{!43, !27}
!44 = distinct !{!44, !27}
!45 = distinct !{!45, !27}
!46 = distinct !{!46, !27}
!47 = distinct !{!47, !27}
!48 = distinct !{!48, !27}
!49 = distinct !{!49, !27}
!50 = distinct !{!50, !27}
!51 = distinct !{!51, !27}
!52 = distinct !{!52, !27}
!53 = distinct !{!53, !27}
!54 = distinct !{!54, !27}
!55 = distinct !{!55, !27}
!56 = distinct !{!56, !27}
!57 = distinct !{!57, !27}
!58 = distinct !{!58, !27}
!59 = distinct !{!59, !27}
!60 = distinct !{!60, !27}
!61 = distinct !{!61, !27}
!62 = distinct !{!62, !27}
!63 = !{!64, !64, i64 0}
!64 = !{!"short", !7, i64 0}
!65 = distinct !{!65, !27}
!66 = distinct !{!66, !27}
!67 = distinct !{!67, !27}
!68 = distinct !{!68, !27}
!69 = distinct !{!69, !27}
!70 = distinct !{!70, !27}
!71 = distinct !{!71, !27}
!72 = distinct !{!72, !27}
!73 = distinct !{!73, !27}
!74 = distinct !{!74, !27}
!75 = distinct !{!75, !27}
!76 = distinct !{!76, !27}
!77 = distinct !{!77, !27}
!78 = distinct !{!78, !27}
!79 = distinct !{!79, !27}
!80 = distinct !{!80, !27}
!81 = distinct !{!81, !27}
!82 = distinct !{!82, !27}
!83 = distinct !{!83, !27}
!84 = distinct !{!84, !27}
!85 = distinct !{!85, !27}
!86 = distinct !{!86, !27}
!87 = distinct !{!87, !27}
!88 = distinct !{!88, !27}
!89 = distinct !{!89, !27}
!90 = distinct !{!90, !27}
!91 = distinct !{!91, !27}
!92 = distinct !{!92, !27}
!93 = distinct !{!93, !27}
!94 = distinct !{!94, !27}
!95 = distinct !{!95, !27}
!96 = distinct !{!96, !27}
!97 = !{!98, !98, i64 0}
!98 = !{!"float", !7, i64 0}
!99 = distinct !{!99, !27}
!100 = distinct !{!100, !27}
!101 = distinct !{!101, !27}
!102 = distinct !{!102, !27}
!103 = distinct !{!103, !27}
!104 = distinct !{!104, !27}
!105 = distinct !{!105, !27}
!106 = distinct !{!106, !27}
!107 = distinct !{!107, !27}
!108 = distinct !{!108, !27}
!109 = distinct !{!109, !27}
!110 = distinct !{!110, !27}
!111 = distinct !{!111, !27}
!112 = distinct !{!112, !27}
!113 = distinct !{!113, !27}
!114 = distinct !{!114, !27}
!115 = distinct !{!115, !27}
!116 = distinct !{!116, !27}
!117 = distinct !{!117, !27}
!118 = distinct !{!118, !27}
!119 = distinct !{!119, !27}
!120 = distinct !{!120, !27}
!121 = distinct !{!121, !27}
!122 = distinct !{!122, !27}
!123 = distinct !{!123, !27}
!124 = distinct !{!124, !27}
!125 = distinct !{!125, !27}
!126 = distinct !{!126, !27}
!127 = distinct !{!127, !27}
!128 = distinct !{!128, !27}
!129 = distinct !{!129, !27}
!130 = distinct !{!130, !27}
!131 = distinct !{!131, !27}
!132 = distinct !{!132, !27}
!133 = distinct !{!133, !27}
!134 = distinct !{!134, !27}
!135 = distinct !{!135, !27}
!136 = distinct !{!136, !27}
!137 = distinct !{!137, !27}
!138 = distinct !{!138, !27}
!139 = !{!140, !140, i64 0}
!140 = !{!"any pointer", !7, i64 0}
!141 = !{!11, !12, i64 72}


; Effective O3 passes: ADCEPass,BDCEPass,CorrelatedValuePropagationPass,DSEPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LICMPass,LoopInstSimplifyPass,LoopRotatePass,LoopSimplifyCFGPass,LoopSimplifyPass,LoopUnrollPass,PostOrderFunctionAttrsPass,ReassociatePass,SLPVectorizerPass,SROAPass,SimplifyCFGPass,TailCallElimPass