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

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

; Function Attrs: nounwind uwtable
define dso_local i32 @main(i32 noundef %0, ptr noundef %1) #0 {
  %3 = alloca i32, align 4
  %4 = alloca i32, align 4
  %5 = alloca ptr, align 8
  %6 = alloca i32, align 4
  %7 = alloca i32, align 4
  %8 = alloca i32, align 4
  %9 = alloca i32, align 4
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  %14 = alloca i32, align 4
  %15 = alloca i32, align 4
  %16 = alloca double, align 8
  %17 = alloca double, align 8
  %18 = alloca i8, align 1
  %19 = alloca i8, align 1
  %20 = alloca i32, align 4
  %21 = alloca i32, align 4
  %22 = alloca i32, align 4
  %23 = alloca i32, align 4
  %24 = alloca i64, align 8
  %25 = alloca ptr, align 8
  %26 = alloca ptr, align 8
  %27 = alloca ptr, align 8
  %28 = alloca ptr, align 8
  %29 = alloca ptr, align 8
  %30 = alloca ptr, align 8
  %31 = alloca ptr, align 8
  %32 = alloca ptr, align 8
  %33 = alloca ptr, align 8
  %34 = alloca ptr, align 8
  %35 = alloca ptr, align 8
  %36 = alloca ptr, align 8
  %37 = alloca ptr, align 8
  %38 = alloca ptr, align 8
  %39 = alloca ptr, align 8
  %40 = alloca ptr, align 8
  %41 = alloca ptr, align 8
  %42 = alloca ptr, align 8
  %43 = alloca ptr, align 8
  %44 = alloca ptr, align 8
  %45 = alloca ptr, align 8
  %46 = alloca ptr, align 8
  %47 = alloca i32, align 4
  %48 = alloca double, align 8
  %49 = alloca %struct.libxsmm_matdiff_info, align 8
  %50 = alloca %struct.libxsmm_matdiff_info, align 8
  %51 = alloca i32, align 4
  %52 = alloca i32, align 4
  %53 = alloca double, align 8
  %54 = alloca double, align 8
  %55 = alloca i32, align 4
  %56 = alloca i32, align 4
  %57 = alloca i32, align 4
  %58 = alloca i32, align 4
  %59 = alloca i32, align 4
  %60 = alloca i32, align 4
  %61 = alloca i32, align 4
  %62 = alloca i32, align 4
  %63 = alloca double, align 8
  %64 = alloca double, align 8
  %65 = alloca i64, align 8
  %66 = alloca i32, align 4
  %67 = alloca double, align 8
  %68 = alloca double, align 8
  %69 = alloca i32, align 4
  %70 = alloca i32, align 4
  %71 = alloca i32, align 4
  %72 = alloca i32, align 4
  %73 = alloca i32, align 4
  %74 = alloca i32, align 4
  %75 = alloca i32, align 4
  %76 = alloca i32, align 4
  %77 = alloca double, align 8
  %78 = alloca double, align 8
  %79 = alloca i64, align 8
  %80 = alloca i32, align 4
  %81 = alloca double, align 8
  %82 = alloca double, align 8
  %83 = alloca i32, align 4
  %84 = alloca i32, align 4
  %85 = alloca i32, align 4
  %86 = alloca i32, align 4
  %87 = alloca i32, align 4
  %88 = alloca i32, align 4
  %89 = alloca i32, align 4
  %90 = alloca i32, align 4
  %91 = alloca double, align 8
  %92 = alloca double, align 8
  %93 = alloca i64, align 8
  %94 = alloca i32, align 4
  %95 = alloca double, align 8
  %96 = alloca double, align 8
  %97 = alloca i32, align 4
  %98 = alloca i32, align 4
  %99 = alloca i32, align 4
  %100 = alloca i32, align 4
  %101 = alloca i32, align 4
  %102 = alloca i32, align 4
  %103 = alloca i32, align 4
  %104 = alloca i32, align 4
  %105 = alloca double, align 8
  %106 = alloca double, align 8
  %107 = alloca i64, align 8
  %108 = alloca i32, align 4
  %109 = alloca i32, align 4
  %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 i32, align 4
  %117 = alloca double, align 8
  %118 = alloca i32, align 4
  %119 = alloca double, align 8
  %120 = alloca i32, align 4
  %121 = alloca double, align 8
  %122 = alloca i32, align 4
  %123 = alloca double, align 8
  %124 = alloca i32, align 4
  %125 = alloca double, align 8
  %126 = alloca i32, align 4
  %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
  store i32 0, ptr %3, align 4
  store i32 %0, ptr %4, align 4, !tbaa !5
  store ptr %1, ptr %5, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #5
  %132 = load i32, ptr %4, align 4, !tbaa !5
  %133 = icmp slt i32 1, %132
  br i1 %133, label %134, label %139

134:                                              ; preds = %2
  %135 = load ptr, ptr %5, align 8, !tbaa !9
  %136 = getelementptr inbounds ptr, ptr %135, i64 1
  %137 = load ptr, ptr %136, align 8, !tbaa !9
  %138 = call i32 @atoi(ptr noundef %137) #6
  br label %140

139:                                              ; preds = %2
  br label %140

140:                                              ; preds = %139, %134
  %141 = phi i32 [ %138, %134 ], [ 0, %139 ]
  store i32 %141, ptr %6, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #5
  %142 = load i32, ptr %4, align 4, !tbaa !5
  %143 = icmp slt i32 2, %142
  br i1 %143, label %144, label %149

144:                                              ; preds = %140
  %145 = load ptr, ptr %5, align 8, !tbaa !9
  %146 = getelementptr inbounds ptr, ptr %145, i64 2
  %147 = load ptr, ptr %146, align 8, !tbaa !9
  %148 = call i32 @atoi(ptr noundef %147) #6
  br label %150

149:                                              ; preds = %140
  br label %150

150:                                              ; preds = %149, %144
  %151 = phi i32 [ %148, %144 ], [ 13, %149 ]
  store i32 %151, ptr %7, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #5
  %152 = load i32, ptr %4, align 4, !tbaa !5
  %153 = icmp slt i32 3, %152
  br i1 %153, label %154, label %159

154:                                              ; preds = %150
  %155 = load ptr, ptr %5, align 8, !tbaa !9
  %156 = getelementptr inbounds ptr, ptr %155, i64 3
  %157 = load ptr, ptr %156, align 8, !tbaa !9
  %158 = call i32 @atoi(ptr noundef %157) #6
  br label %160

159:                                              ; preds = %150
  br label %160

160:                                              ; preds = %159, %154
  %161 = phi i32 [ %158, %154 ], [ 5, %159 ]
  store i32 %161, ptr %8, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #5
  %162 = load i32, ptr %4, align 4, !tbaa !5
  %163 = icmp slt i32 4, %162
  br i1 %163, label %164, label %169

164:                                              ; preds = %160
  %165 = load ptr, ptr %5, align 8, !tbaa !9
  %166 = getelementptr inbounds ptr, ptr %165, i64 4
  %167 = load ptr, ptr %166, align 8, !tbaa !9
  %168 = call i32 @atoi(ptr noundef %167) #6
  br label %170

169:                                              ; preds = %160
  br label %170

170:                                              ; preds = %169, %164
  %171 = phi i32 [ %168, %164 ], [ 7, %169 ]
  store i32 %171, ptr %9, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #5
  %172 = load i32, ptr %4, align 4, !tbaa !5
  %173 = icmp slt i32 5, %172
  br i1 %173, label %174, label %190

174:                                              ; preds = %170
  %175 = load ptr, ptr %5, align 8, !tbaa !9
  %176 = getelementptr inbounds ptr, ptr %175, i64 5
  %177 = load ptr, ptr %176, align 8, !tbaa !9
  %178 = call i32 @atoi(ptr noundef %177) #6
  %179 = load i32, ptr %7, align 4, !tbaa !5
  %180 = icmp slt i32 %178, %179
  br i1 %180, label %181, label %183

181:                                              ; preds = %174
  %182 = load i32, ptr %7, align 4, !tbaa !5
  br label %188

183:                                              ; preds = %174
  %184 = load ptr, ptr %5, align 8, !tbaa !9
  %185 = getelementptr inbounds ptr, ptr %184, i64 5
  %186 = load ptr, ptr %185, align 8, !tbaa !9
  %187 = call i32 @atoi(ptr noundef %186) #6
  br label %188

188:                                              ; preds = %183, %181
  %189 = phi i32 [ %182, %181 ], [ %187, %183 ]
  br label %192

190:                                              ; preds = %170
  %191 = load i32, ptr %7, align 4, !tbaa !5
  br label %192

192:                                              ; preds = %190, %188
  %193 = phi i32 [ %189, %188 ], [ %191, %190 ]
  store i32 %193, ptr %10, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #5
  %194 = load i32, ptr %4, align 4, !tbaa !5
  %195 = icmp slt i32 6, %194
  br i1 %195, label %196, label %212

196:                                              ; preds = %192
  %197 = load ptr, ptr %5, align 8, !tbaa !9
  %198 = getelementptr inbounds ptr, ptr %197, i64 6
  %199 = load ptr, ptr %198, align 8, !tbaa !9
  %200 = call i32 @atoi(ptr noundef %199) #6
  %201 = load i32, ptr %9, align 4, !tbaa !5
  %202 = icmp slt i32 %200, %201
  br i1 %202, label %203, label %205

203:                                              ; preds = %196
  %204 = load i32, ptr %9, align 4, !tbaa !5
  br label %210

205:                                              ; preds = %196
  %206 = load ptr, ptr %5, align 8, !tbaa !9
  %207 = getelementptr inbounds ptr, ptr %206, i64 6
  %208 = load ptr, ptr %207, align 8, !tbaa !9
  %209 = call i32 @atoi(ptr noundef %208) #6
  br label %210

210:                                              ; preds = %205, %203
  %211 = phi i32 [ %204, %203 ], [ %209, %205 ]
  br label %214

212:                                              ; preds = %192
  %213 = load i32, ptr %9, align 4, !tbaa !5
  br label %214

214:                                              ; preds = %212, %210
  %215 = phi i32 [ %211, %210 ], [ %213, %212 ]
  store i32 %215, ptr %11, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #5
  %216 = load i32, ptr %4, align 4, !tbaa !5
  %217 = icmp slt i32 7, %216
  br i1 %217, label %218, label %234

218:                                              ; preds = %214
  %219 = load ptr, ptr %5, align 8, !tbaa !9
  %220 = getelementptr inbounds ptr, ptr %219, i64 7
  %221 = load ptr, ptr %220, align 8, !tbaa !9
  %222 = call i32 @atoi(ptr noundef %221) #6
  %223 = load i32, ptr %7, align 4, !tbaa !5
  %224 = icmp slt i32 %222, %223
  br i1 %224, label %225, label %227

225:                                              ; preds = %218
  %226 = load i32, ptr %7, align 4, !tbaa !5
  br label %232

227:                                              ; preds = %218
  %228 = load ptr, ptr %5, align 8, !tbaa !9
  %229 = getelementptr inbounds ptr, ptr %228, i64 7
  %230 = load ptr, ptr %229, align 8, !tbaa !9
  %231 = call i32 @atoi(ptr noundef %230) #6
  br label %232

232:                                              ; preds = %227, %225
  %233 = phi i32 [ %226, %225 ], [ %231, %227 ]
  br label %239

234:                                              ; preds = %214
  %235 = load i32, ptr %7, align 4, !tbaa !5
  %236 = add nsw i32 %235, 7
  %237 = sdiv i32 %236, 8
  %238 = mul nsw i32 %237, 8
  br label %239

239:                                              ; preds = %234, %232
  %240 = phi i32 [ %233, %232 ], [ %238, %234 ]
  store i32 %240, ptr %12, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #5
  %241 = load i32, ptr %4, align 4, !tbaa !5
  %242 = icmp slt i32 8, %241
  br i1 %242, label %243, label %292

243:                                              ; preds = %239
  %244 = load ptr, ptr %5, align 8, !tbaa !9
  %245 = getelementptr inbounds ptr, ptr %244, i64 8
  %246 = load ptr, ptr %245, align 8, !tbaa !9
  %247 = call i32 @atoi(ptr noundef %246) #6
  %248 = icmp slt i32 0, %247
  br i1 %248, label %249, label %276

249:                                              ; preds = %243
  %250 = load ptr, ptr %5, align 8, !tbaa !9
  %251 = getelementptr inbounds ptr, ptr %250, i64 8
  %252 = load ptr, ptr %251, align 8, !tbaa !9
  %253 = call i32 @atoi(ptr noundef %252) #6
  %254 = icmp sle i32 %253, 100
  br i1 %254, label %255, label %260

255:                                              ; preds = %249
  %256 = load ptr, ptr %5, align 8, !tbaa !9
  %257 = getelementptr inbounds ptr, ptr %256, i64 8
  %258 = load ptr, ptr %257, align 8, !tbaa !9
  %259 = call i32 @atoi(ptr noundef %258) #6
  br label %274

260:                                              ; preds = %249
  %261 = load ptr, ptr %5, align 8, !tbaa !9
  %262 = getelementptr inbounds ptr, ptr %261, i64 8
  %263 = load ptr, ptr %262, align 8, !tbaa !9
  %264 = call i32 @atoi(ptr noundef %263) #6
  %265 = icmp slt i32 %264, 100
  br i1 %265, label %266, label %271

266:                                              ; preds = %260
  %267 = load ptr, ptr %5, align 8, !tbaa !9
  %268 = getelementptr inbounds ptr, ptr %267, i64 8
  %269 = load ptr, ptr %268, align 8, !tbaa !9
  %270 = call i32 @atoi(ptr noundef %269) #6
  br label %272

271:                                              ; preds = %260
  br label %272

272:                                              ; preds = %271, %266
  %273 = phi i32 [ %270, %266 ], [ 100, %271 ]
  br label %274

274:                                              ; preds = %272, %255
  %275 = phi i32 [ %259, %255 ], [ %273, %272 ]
  br label %290

276:                                              ; preds = %243
  %277 = load ptr, ptr %5, align 8, !tbaa !9
  %278 = getelementptr inbounds ptr, ptr %277, i64 8
  %279 = load ptr, ptr %278, align 8, !tbaa !9
  %280 = call i32 @atoi(ptr noundef %279) #6
  %281 = icmp slt i32 0, %280
  br i1 %281, label %282, label %287

282:                                              ; preds = %276
  %283 = load ptr, ptr %5, align 8, !tbaa !9
  %284 = getelementptr inbounds ptr, ptr %283, i64 8
  %285 = load ptr, ptr %284, align 8, !tbaa !9
  %286 = call i32 @atoi(ptr noundef %285) #6
  br label %288

287:                                              ; preds = %276
  br label %288

288:                                              ; preds = %287, %282
  %289 = phi i32 [ %286, %282 ], [ 0, %287 ]
  br label %290

290:                                              ; preds = %288, %274
  %291 = phi i32 [ %275, %274 ], [ %289, %288 ]
  br label %293

292:                                              ; preds = %239
  br label %293

293:                                              ; preds = %292, %290
  %294 = phi i32 [ %291, %290 ], [ 33, %292 ]
  store i32 %294, ptr %13, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #5
  store i32 0, ptr %14, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #5
  store i32 0, ptr %15, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #5
  store double 1.000000e+00, ptr %16, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #5
  store double 1.000000e+00, ptr %17, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 1, ptr %18) #5
  store i8 110, ptr %18, align 1, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 1, ptr %19) #5
  store i8 110, ptr %19, align 1, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #5
  %295 = load i32, ptr %10, align 4, !tbaa !5
  %296 = load i32, ptr %9, align 4, !tbaa !5
  %297 = mul nsw i32 %295, %296
  store i32 %297, ptr %20, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #5
  %298 = load i32, ptr %11, align 4, !tbaa !5
  %299 = load i32, ptr %8, align 4, !tbaa !5
  %300 = mul nsw i32 %298, %299
  store i32 %300, ptr %21, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #5
  %301 = load i32, ptr %12, align 4, !tbaa !5
  %302 = load i32, ptr %8, align 4, !tbaa !5
  %303 = mul nsw i32 %301, %302
  store i32 %303, ptr %22, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #5
  %304 = load i32, ptr %6, align 4, !tbaa !5
  %305 = icmp sge i32 0, %304
  br i1 %305, label %306, label %328

306:                                              ; preds = %293
  %307 = load i32, ptr %6, align 4, !tbaa !5
  %308 = icmp eq i32 0, %307
  br i1 %308, label %309, label %310

309:                                              ; preds = %306
  br label %314

310:                                              ; preds = %306
  %311 = load i32, ptr %6, align 4, !tbaa !5
  %312 = sub nsw i32 0, %311
  %313 = sext i32 %312 to i64
  br label %314

314:                                              ; preds = %310, %309
  %315 = phi i64 [ 512, %309 ], [ %313, %310 ]
  %316 = shl i64 %315, 20
  %317 = load i32, ptr %20, align 4, !tbaa !5
  %318 = sext i32 %317 to i64
  %319 = load i32, ptr %21, align 4, !tbaa !5
  %320 = sext i32 %319 to i64
  %321 = add i64 %318, %320
  %322 = load i32, ptr %22, align 4, !tbaa !5
  %323 = sext i32 %322 to i64
  %324 = add i64 %321, %323
  %325 = mul i64 8, %324
  %326 = udiv i64 %316, %325
  %327 = trunc i64 %326 to i32
  br label %330

328:                                              ; preds = %293
  %329 = load i32, ptr %6, align 4, !tbaa !5
  br label %330

330:                                              ; preds = %328, %314
  %331 = phi i32 [ %327, %314 ], [ %329, %328 ]
  store i32 %331, ptr %23, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #5
  %332 = load i32, ptr %4, align 4, !tbaa !5
  %333 = icmp slt i32 9, %332
  br i1 %333, label %334, label %339

334:                                              ; preds = %330
  %335 = load ptr, ptr %5, align 8, !tbaa !9
  %336 = getelementptr inbounds ptr, ptr %335, i64 9
  %337 = load ptr, ptr %336, align 8, !tbaa !9
  %338 = call i32 @atoi(ptr noundef %337) #6
  br label %340

339:                                              ; preds = %330
  br label %340

340:                                              ; preds = %339, %334
  %341 = phi i32 [ %338, %334 ], [ 1, %339 ]
  %342 = icmp ne i32 0, %341
  br i1 %342, label %343, label %347

343:                                              ; preds = %340
  %344 = load i32, ptr %23, align 4, !tbaa !5
  %345 = sext i32 %344 to i64
  %346 = call i64 @libxsmm_coprime2(i64 noundef %345)
  br label %348

347:                                              ; preds = %340
  br label %348

348:                                              ; preds = %347, %343
  %349 = phi i64 [ %346, %343 ], [ 0, %347 ]
  store i64 %349, ptr %24, align 8, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #5
  %350 = load i32, ptr %20, align 4, !tbaa !5
  %351 = sext i32 %350 to i64
  %352 = mul i64 8, %351
  %353 = load i32, ptr %23, align 4, !tbaa !5
  %354 = sext i32 %353 to i64
  %355 = mul i64 %352, %354
  %356 = call noalias ptr @libxsmm_malloc(i64 noundef %355)
  store ptr %356, ptr %25, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #5
  %357 = load i32, ptr %21, align 4, !tbaa !5
  %358 = sext i32 %357 to i64
  %359 = mul i64 8, %358
  %360 = load i32, ptr %23, align 4, !tbaa !5
  %361 = sext i32 %360 to i64
  %362 = mul i64 %359, %361
  %363 = call noalias ptr @libxsmm_malloc(i64 noundef %362)
  store ptr %363, ptr %26, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #5
  %364 = load i32, ptr %22, align 4, !tbaa !5
  %365 = sext i32 %364 to i64
  %366 = mul i64 8, %365
  %367 = load i32, ptr %23, align 4, !tbaa !5
  %368 = sext i32 %367 to i64
  %369 = mul i64 %366, %368
  %370 = call noalias ptr @libxsmm_malloc(i64 noundef %369)
  store ptr %370, ptr %27, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #5
  %371 = load i32, ptr %22, align 4, !tbaa !5
  %372 = sext i32 %371 to i64
  %373 = mul i64 8, %372
  %374 = load i32, ptr %23, align 4, !tbaa !5
  %375 = sext i32 %374 to i64
  %376 = mul i64 %373, %375
  %377 = call noalias ptr @libxsmm_malloc(i64 noundef %376)
  store ptr %377, ptr %28, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #5
  %378 = load i32, ptr %23, align 4, !tbaa !5
  %379 = sext i32 %378 to i64
  %380 = mul i64 4, %379
  %381 = call noalias ptr @libxsmm_malloc(i64 noundef %380)
  store ptr %381, ptr %29, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #5
  %382 = load i32, ptr %23, align 4, !tbaa !5
  %383 = sext i32 %382 to i64
  %384 = mul i64 4, %383
  %385 = call noalias ptr @libxsmm_malloc(i64 noundef %384)
  store ptr %385, ptr %30, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #5
  %386 = load i32, ptr %23, align 4, !tbaa !5
  %387 = sext i32 %386 to i64
  %388 = mul i64 4, %387
  %389 = call noalias ptr @libxsmm_malloc(i64 noundef %388)
  store ptr %389, ptr %31, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #5
  %390 = load i32, ptr %23, align 4, !tbaa !5
  %391 = sext i32 %390 to i64
  %392 = mul i64 4, %391
  %393 = call noalias ptr @libxsmm_malloc(i64 noundef %392)
  store ptr %393, ptr %32, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #5
  %394 = load i32, ptr %23, align 4, !tbaa !5
  %395 = sext i32 %394 to i64
  %396 = mul i64 4, %395
  %397 = call noalias ptr @libxsmm_malloc(i64 noundef %396)
  store ptr %397, ptr %33, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #5
  %398 = load i32, ptr %23, align 4, !tbaa !5
  %399 = sext i32 %398 to i64
  %400 = mul i64 4, %399
  %401 = call noalias ptr @libxsmm_malloc(i64 noundef %400)
  store ptr %401, ptr %34, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #5
  %402 = load i32, ptr %23, align 4, !tbaa !5
  %403 = sext i32 %402 to i64
  %404 = mul i64 4, %403
  %405 = call noalias ptr @libxsmm_malloc(i64 noundef %404)
  store ptr %405, ptr %35, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #5
  %406 = load i32, ptr %23, align 4, !tbaa !5
  %407 = sext i32 %406 to i64
  %408 = mul i64 4, %407
  %409 = call noalias ptr @libxsmm_malloc(i64 noundef %408)
  store ptr %409, ptr %36, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #5
  %410 = load i32, ptr %23, align 4, !tbaa !5
  %411 = sext i32 %410 to i64
  %412 = mul i64 4, %411
  %413 = call noalias ptr @libxsmm_malloc(i64 noundef %412)
  store ptr %413, ptr %37, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #5
  %414 = load i32, ptr %23, align 4, !tbaa !5
  %415 = sext i32 %414 to i64
  %416 = mul i64 4, %415
  %417 = call noalias ptr @libxsmm_malloc(i64 noundef %416)
  store ptr %417, ptr %38, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %39) #5
  %418 = load i32, ptr %23, align 4, !tbaa !5
  %419 = sext i32 %418 to i64
  %420 = call noalias ptr @libxsmm_malloc(i64 noundef %419)
  store ptr %420, ptr %39, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %40) #5
  %421 = load i32, ptr %23, align 4, !tbaa !5
  %422 = sext i32 %421 to i64
  %423 = call noalias ptr @libxsmm_malloc(i64 noundef %422)
  store ptr %423, ptr %40, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %41) #5
  %424 = load i32, ptr %23, align 4, !tbaa !5
  %425 = sext i32 %424 to i64
  %426 = mul i64 8, %425
  %427 = call noalias ptr @libxsmm_malloc(i64 noundef %426)
  store ptr %427, ptr %41, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %42) #5
  %428 = load i32, ptr %23, align 4, !tbaa !5
  %429 = sext i32 %428 to i64
  %430 = mul i64 8, %429
  %431 = call noalias ptr @libxsmm_malloc(i64 noundef %430)
  store ptr %431, ptr %42, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %43) #5
  %432 = load i32, ptr %23, align 4, !tbaa !5
  %433 = sext i32 %432 to i64
  %434 = mul i64 8, %433
  %435 = call noalias ptr @libxsmm_malloc(i64 noundef %434)
  store ptr %435, ptr %43, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %44) #5
  %436 = load i32, ptr %23, align 4, !tbaa !5
  %437 = sext i32 %436 to i64
  %438 = mul i64 8, %437
  %439 = call noalias ptr @libxsmm_malloc(i64 noundef %438)
  store ptr %439, ptr %44, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %45) #5
  %440 = load i32, ptr %23, align 4, !tbaa !5
  %441 = sext i32 %440 to i64
  %442 = mul i64 8, %441
  %443 = call noalias ptr @libxsmm_malloc(i64 noundef %442)
  store ptr %443, ptr %45, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %46) #5
  %444 = load i32, ptr %23, align 4, !tbaa !5
  %445 = sext i32 %444 to i64
  %446 = mul i64 8, %445
  %447 = call noalias ptr @libxsmm_malloc(i64 noundef %446)
  store ptr %447, ptr %46, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %47) #5
  store i32 0, ptr %47, align 4, !tbaa !5
  %448 = load ptr, ptr %25, align 8, !tbaa !9
  %449 = icmp ne ptr null, %448
  br i1 %449, label %450, label %2213

450:                                              ; preds = %348
  %451 = load ptr, ptr %26, align 8, !tbaa !9
  %452 = icmp ne ptr null, %451
  br i1 %452, label %453, label %2213

453:                                              ; preds = %450
  %454 = load ptr, ptr %27, align 8, !tbaa !9
  %455 = icmp ne ptr null, %454
  br i1 %455, label %456, label %2213

456:                                              ; preds = %453
  %457 = load ptr, ptr %28, align 8, !tbaa !9
  %458 = icmp ne ptr null, %457
  br i1 %458, label %459, label %2213

459:                                              ; preds = %456
  %460 = load ptr, ptr %45, align 8, !tbaa !9
  %461 = icmp ne ptr null, %460
  br i1 %461, label %462, label %2213

462:                                              ; preds = %459
  %463 = load ptr, ptr %46, align 8, !tbaa !9
  %464 = icmp ne ptr null, %463
  br i1 %464, label %465, label %2213

465:                                              ; preds = %462
  %466 = load ptr, ptr %29, align 8, !tbaa !9
  %467 = icmp ne ptr null, %466
  br i1 %467, label %468, label %2213

468:                                              ; preds = %465
  %469 = load ptr, ptr %41, align 8, !tbaa !9
  %470 = icmp ne ptr null, %469
  br i1 %470, label %471, label %2213

471:                                              ; preds = %468
  %472 = load ptr, ptr %42, align 8, !tbaa !9
  %473 = icmp ne ptr null, %472
  br i1 %473, label %474, label %2213

474:                                              ; preds = %471
  %475 = load ptr, ptr %43, align 8, !tbaa !9
  %476 = icmp ne ptr null, %475
  br i1 %476, label %477, label %2213

477:                                              ; preds = %474
  %478 = load ptr, ptr %44, align 8, !tbaa !9
  %479 = icmp ne ptr null, %478
  br i1 %479, label %480, label %2213

480:                                              ; preds = %477
  %481 = load ptr, ptr %30, align 8, !tbaa !9
  %482 = icmp ne ptr null, %481
  br i1 %482, label %483, label %2213

483:                                              ; preds = %480
  %484 = load ptr, ptr %31, align 8, !tbaa !9
  %485 = icmp ne ptr null, %484
  br i1 %485, label %486, label %2213

486:                                              ; preds = %483
  %487 = load ptr, ptr %32, align 8, !tbaa !9
  %488 = icmp ne ptr null, %487
  br i1 %488, label %489, label %2213

489:                                              ; preds = %486
  %490 = load ptr, ptr %33, align 8, !tbaa !9
  %491 = icmp ne ptr null, %490
  br i1 %491, label %492, label %2213

492:                                              ; preds = %489
  %493 = load ptr, ptr %34, align 8, !tbaa !9
  %494 = icmp ne ptr null, %493
  br i1 %494, label %495, label %2213

495:                                              ; preds = %492
  %496 = load ptr, ptr %35, align 8, !tbaa !9
  %497 = icmp ne ptr null, %496
  br i1 %497, label %498, label %2213

498:                                              ; preds = %495
  %499 = load ptr, ptr %36, align 8, !tbaa !9
  %500 = icmp ne ptr null, %499
  br i1 %500, label %501, label %2213

501:                                              ; preds = %498
  %502 = load ptr, ptr %37, align 8, !tbaa !9
  %503 = icmp ne ptr null, %502
  br i1 %503, label %504, label %2213

504:                                              ; preds = %501
  %505 = load ptr, ptr %38, align 8, !tbaa !9
  %506 = icmp ne ptr null, %505
  br i1 %506, label %507, label %2213

507:                                              ; preds = %504
  %508 = load ptr, ptr %39, align 8, !tbaa !9
  %509 = icmp ne ptr null, %508
  br i1 %509, label %510, label %2213

510:                                              ; preds = %507
  %511 = load ptr, ptr %40, align 8, !tbaa !9
  %512 = icmp ne ptr null, %511
  br i1 %512, label %513, label %2213

513:                                              ; preds = %510
  call void @llvm.lifetime.start.p0(i64 8, ptr %48) #5
  %514 = load i32, ptr %23, align 4, !tbaa !5
  %515 = sitofp i32 %514 to double
  %516 = fdiv double 1.000000e+00, %515
  store double %516, ptr %48, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 192, ptr %49) #5
  call void @llvm.lifetime.start.p0(i64 192, ptr %50) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %51) #5
  store i32 0, ptr %51, align 4, !tbaa !5
  call void @libxsmm_matdiff_clear(ptr noundef %49)
  store i32 0, ptr %51, align 4, !tbaa !5
  br label %517

517:                                              ; preds = %1122, %513
  %518 = load i32, ptr %51, align 4, !tbaa !5
  %519 = load i32, ptr %23, align 4, !tbaa !5
  %520 = icmp slt i32 %518, %519
  br i1 %520, label %521, label %1125

521:                                              ; preds = %517
  call void @llvm.lifetime.start.p0(i64 4, ptr %52) #5
  %522 = load i64, ptr %24, align 8, !tbaa !14
  %523 = icmp ne i64 0, %522
  br i1 %523, label %524, label %533

524:                                              ; preds = %521
  %525 = load i32, ptr %51, align 4, !tbaa !5
  %526 = sext i32 %525 to i64
  %527 = load i64, ptr %24, align 8, !tbaa !14
  %528 = mul i64 %526, %527
  %529 = load i32, ptr %23, align 4, !tbaa !5
  %530 = sext i32 %529 to i64
  %531 = urem i64 %528, %530
  %532 = trunc i64 %531 to i32
  br label %535

533:                                              ; preds = %521
  %534 = load i32, ptr %51, align 4, !tbaa !5
  br label %535

535:                                              ; preds = %533, %524
  %536 = phi i32 [ %532, %524 ], [ %534, %533 ]
  store i32 %536, ptr %52, align 4, !tbaa !5
  %537 = load i32, ptr %52, align 4, !tbaa !5
  %538 = load i32, ptr %20, align 4, !tbaa !5
  %539 = mul nsw i32 %537, %538
  %540 = load ptr, ptr %36, align 8, !tbaa !9
  %541 = load i32, ptr %51, align 4, !tbaa !5
  %542 = sext i32 %541 to i64
  %543 = getelementptr inbounds i32, ptr %540, i64 %542
  store i32 %539, ptr %543, align 4, !tbaa !5
  %544 = load i32, ptr %52, align 4, !tbaa !5
  %545 = load i32, ptr %21, align 4, !tbaa !5
  %546 = mul nsw i32 %544, %545
  %547 = load ptr, ptr %37, align 8, !tbaa !9
  %548 = load i32, ptr %51, align 4, !tbaa !5
  %549 = sext i32 %548 to i64
  %550 = getelementptr inbounds i32, ptr %547, i64 %549
  store i32 %546, ptr %550, align 4, !tbaa !5
  %551 = load i32, ptr %52, align 4, !tbaa !5
  %552 = load i32, ptr %22, align 4, !tbaa !5
  %553 = mul nsw i32 %551, %552
  %554 = load ptr, ptr %38, align 8, !tbaa !9
  %555 = load i32, ptr %51, align 4, !tbaa !5
  %556 = sext i32 %555 to i64
  %557 = getelementptr inbounds i32, ptr %554, i64 %556
  store i32 %553, ptr %557, align 4, !tbaa !5
  br label %558

558:                                              ; preds = %535
  call void @llvm.lifetime.start.p0(i64 8, ptr %53) #5
  %559 = load i32, ptr %51, align 4, !tbaa !5
  %560 = add nsw i32 25, %559
  %561 = sitofp i32 %560 to double
  store double %561, ptr %53, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %54) #5
  %562 = load double, ptr %53, align 8, !tbaa !11
  %563 = load double, ptr %48, align 8, !tbaa !11
  %564 = load double, ptr %48, align 8, !tbaa !11
  %565 = call double @llvm.fmuladd.f64(double %562, double %563, double %564)
  store double %565, ptr %54, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %55) #5
  %566 = load i32, ptr %7, align 4, !tbaa !5
  store i32 %566, ptr %55, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %56) #5
  %567 = load i32, ptr %9, align 4, !tbaa !5
  store i32 %567, ptr %56, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %57) #5
  %568 = load i32, ptr %10, align 4, !tbaa !5
  store i32 %568, ptr %57, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %58) #5
  store i32 0, ptr %58, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %59) #5
  store i32 0, ptr %59, align 4, !tbaa !5
  %569 = load double, ptr %53, align 8, !tbaa !11
  %570 = fcmp une double 0.000000e+00, %569
  br i1 %570, label %571, label %638

571:                                              ; preds = %558
  store i32 0, ptr %58, align 4, !tbaa !5
  br label %572

572:                                              ; preds = %634, %571
  %573 = load i32, ptr %58, align 4, !tbaa !5
  %574 = load i32, ptr %56, align 4, !tbaa !5
  %575 = icmp slt i32 %573, %574
  br i1 %575, label %576, label %637

576:                                              ; preds = %572
  store i32 0, ptr %59, align 4, !tbaa !5
  br label %577

577:                                              ; preds = %606, %576
  %578 = load i32, ptr %59, align 4, !tbaa !5
  %579 = load i32, ptr %55, align 4, !tbaa !5
  %580 = icmp slt i32 %578, %579
  br i1 %580, label %581, label %609

581:                                              ; preds = %577
  call void @llvm.lifetime.start.p0(i64 4, ptr %60) #5
  %582 = load i32, ptr %58, align 4, !tbaa !5
  %583 = load i32, ptr %57, align 4, !tbaa !5
  %584 = mul nsw i32 %582, %583
  %585 = load i32, ptr %59, align 4, !tbaa !5
  %586 = add nsw i32 %584, %585
  store i32 %586, ptr %60, align 4, !tbaa !5
  %587 = load double, ptr %54, align 8, !tbaa !11
  %588 = load i32, ptr %58, align 4, !tbaa !5
  %589 = sitofp i32 %588 to double
  %590 = load i32, ptr %55, align 4, !tbaa !5
  %591 = sitofp i32 %590 to double
  %592 = call double @llvm.fmuladd.f64(double %589, double %591, double 1.000000e+00)
  %593 = load i32, ptr %59, align 4, !tbaa !5
  %594 = sitofp i32 %593 to double
  %595 = fadd double %592, %594
  %596 = fmul double %587, %595
  %597 = load ptr, ptr %25, align 8, !tbaa !9
  %598 = load i32, ptr %51, align 4, !tbaa !5
  %599 = load i32, ptr %20, align 4, !tbaa !5
  %600 = mul nsw i32 %598, %599
  %601 = sext i32 %600 to i64
  %602 = getelementptr inbounds double, ptr %597, i64 %601
  %603 = load i32, ptr %60, align 4, !tbaa !5
  %604 = sext i32 %603 to i64
  %605 = getelementptr inbounds double, ptr %602, i64 %604
  store double %596, ptr %605, align 8, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 4, ptr %60) #5
  br label %606

606:                                              ; preds = %581
  %607 = load i32, ptr %59, align 4, !tbaa !5
  %608 = add nsw i32 %607, 1
  store i32 %608, ptr %59, align 4, !tbaa !5
  br label %577, !llvm.loop !16

609:                                              ; preds = %577
  br label %610

610:                                              ; preds = %630, %609
  %611 = load i32, ptr %59, align 4, !tbaa !5
  %612 = load i32, ptr %57, align 4, !tbaa !5
  %613 = icmp slt i32 %611, %612
  br i1 %613, label %614, label %633

614:                                              ; preds = %610
  call void @llvm.lifetime.start.p0(i64 4, ptr %61) #5
  %615 = load i32, ptr %58, align 4, !tbaa !5
  %616 = load i32, ptr %57, align 4, !tbaa !5
  %617 = mul nsw i32 %615, %616
  %618 = load i32, ptr %59, align 4, !tbaa !5
  %619 = add nsw i32 %617, %618
  store i32 %619, ptr %61, align 4, !tbaa !5
  %620 = load double, ptr %53, align 8, !tbaa !11
  %621 = load ptr, ptr %25, align 8, !tbaa !9
  %622 = load i32, ptr %51, align 4, !tbaa !5
  %623 = load i32, ptr %20, align 4, !tbaa !5
  %624 = mul nsw i32 %622, %623
  %625 = sext i32 %624 to i64
  %626 = getelementptr inbounds double, ptr %621, i64 %625
  %627 = load i32, ptr %61, align 4, !tbaa !5
  %628 = sext i32 %627 to i64
  %629 = getelementptr inbounds double, ptr %626, i64 %628
  store double %620, ptr %629, align 8, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 4, ptr %61) #5
  br label %630

630:                                              ; preds = %614
  %631 = load i32, ptr %59, align 4, !tbaa !5
  %632 = add nsw i32 %631, 1
  store i32 %632, ptr %59, align 4, !tbaa !5
  br label %610, !llvm.loop !18

633:                                              ; preds = %610
  br label %634

634:                                              ; preds = %633
  %635 = load i32, ptr %58, align 4, !tbaa !5
  %636 = add nsw i32 %635, 1
  store i32 %636, ptr %58, align 4, !tbaa !5
  br label %572, !llvm.loop !19

637:                                              ; preds = %572
  br label %696

638:                                              ; preds = %558
  call void @llvm.lifetime.start.p0(i64 4, ptr %62) #5
  %639 = load i32, ptr %56, align 4, !tbaa !5
  %640 = load i32, ptr %57, align 4, !tbaa !5
  %641 = mul nsw i32 %639, %640
  store i32 %641, ptr %62, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %63) #5
  %642 = load i32, ptr %62, align 4, !tbaa !5
  %643 = add nsw i32 %642, 1
  %644 = sdiv i32 %643, 2
  %645 = sitofp i32 %644 to double
  store double %645, ptr %63, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %64) #5
  %646 = load double, ptr %48, align 8, !tbaa !11
  %647 = load double, ptr %63, align 8, !tbaa !11
  %648 = fdiv double %646, %647
  store double %648, ptr %64, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %65) #5
  %649 = load i32, ptr %62, align 4, !tbaa !5
  %650 = sext i32 %649 to i64
  %651 = call i64 @libxsmm_coprime2(i64 noundef %650)
  store i64 %651, ptr %65, align 8, !tbaa !14
  store i32 0, ptr %58, align 4, !tbaa !5
  br label %652

652:                                              ; preds = %692, %638
  %653 = load i32, ptr %58, align 4, !tbaa !5
  %654 = load i32, ptr %56, align 4, !tbaa !5
  %655 = icmp slt i32 %653, %654
  br i1 %655, label %656, label %695

656:                                              ; preds = %652
  store i32 0, ptr %59, align 4, !tbaa !5
  br label %657

657:                                              ; preds = %688, %656
  %658 = load i32, ptr %59, align 4, !tbaa !5
  %659 = load i32, ptr %57, align 4, !tbaa !5
  %660 = icmp slt i32 %658, %659
  br i1 %660, label %661, label %691

661:                                              ; preds = %657
  call void @llvm.lifetime.start.p0(i64 4, ptr %66) #5
  %662 = load i32, ptr %58, align 4, !tbaa !5
  %663 = load i32, ptr %57, align 4, !tbaa !5
  %664 = mul nsw i32 %662, %663
  %665 = load i32, ptr %59, align 4, !tbaa !5
  %666 = add nsw i32 %664, %665
  store i32 %666, ptr %66, align 4, !tbaa !5
  %667 = load double, ptr %64, align 8, !tbaa !11
  %668 = load i64, ptr %65, align 8, !tbaa !14
  %669 = load i32, ptr %66, align 4, !tbaa !5
  %670 = sext i32 %669 to i64
  %671 = mul i64 %668, %670
  %672 = load i32, ptr %62, align 4, !tbaa !5
  %673 = sext i32 %672 to i64
  %674 = urem i64 %671, %673
  %675 = uitofp i64 %674 to double
  %676 = load double, ptr %63, align 8, !tbaa !11
  %677 = fsub double %675, %676
  %678 = fmul double %667, %677
  %679 = load ptr, ptr %25, align 8, !tbaa !9
  %680 = load i32, ptr %51, align 4, !tbaa !5
  %681 = load i32, ptr %20, align 4, !tbaa !5
  %682 = mul nsw i32 %680, %681
  %683 = sext i32 %682 to i64
  %684 = getelementptr inbounds double, ptr %679, i64 %683
  %685 = load i32, ptr %66, align 4, !tbaa !5
  %686 = sext i32 %685 to i64
  %687 = getelementptr inbounds double, ptr %684, i64 %686
  store double %678, ptr %687, align 8, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 4, ptr %66) #5
  br label %688

688:                                              ; preds = %661
  %689 = load i32, ptr %59, align 4, !tbaa !5
  %690 = add nsw i32 %689, 1
  store i32 %690, ptr %59, align 4, !tbaa !5
  br label %657, !llvm.loop !20

691:                                              ; preds = %657
  br label %692

692:                                              ; preds = %691
  %693 = load i32, ptr %58, align 4, !tbaa !5
  %694 = add nsw i32 %693, 1
  store i32 %694, ptr %58, align 4, !tbaa !5
  br label %652, !llvm.loop !21

695:                                              ; preds = %652
  call void @llvm.lifetime.end.p0(i64 8, ptr %65) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %64) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %63) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %62) #5
  br label %696

696:                                              ; preds = %695, %637
  call void @llvm.lifetime.end.p0(i64 4, ptr %59) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %58) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %57) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %56) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %55) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %54) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %53) #5
  br label %697

697:                                              ; preds = %696
  br label %698

698:                                              ; preds = %697
  br label %699

699:                                              ; preds = %698
  call void @llvm.lifetime.start.p0(i64 8, ptr %67) #5
  %700 = load i32, ptr %51, align 4, !tbaa !5
  %701 = add nsw i32 75, %700
  %702 = sitofp i32 %701 to double
  store double %702, ptr %67, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %68) #5
  %703 = load double, ptr %67, align 8, !tbaa !11
  %704 = load double, ptr %48, align 8, !tbaa !11
  %705 = load double, ptr %48, align 8, !tbaa !11
  %706 = call double @llvm.fmuladd.f64(double %703, double %704, double %705)
  store double %706, ptr %68, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %69) #5
  %707 = load i32, ptr %9, align 4, !tbaa !5
  store i32 %707, ptr %69, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %70) #5
  %708 = load i32, ptr %8, align 4, !tbaa !5
  store i32 %708, ptr %70, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %71) #5
  %709 = load i32, ptr %11, align 4, !tbaa !5
  store i32 %709, ptr %71, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %72) #5
  store i32 0, ptr %72, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %73) #5
  store i32 0, ptr %73, align 4, !tbaa !5
  %710 = load double, ptr %67, align 8, !tbaa !11
  %711 = fcmp une double 0.000000e+00, %710
  br i1 %711, label %712, label %779

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

713:                                              ; preds = %775, %712
  %714 = load i32, ptr %72, align 4, !tbaa !5
  %715 = load i32, ptr %70, align 4, !tbaa !5
  %716 = icmp slt i32 %714, %715
  br i1 %716, label %717, label %778

717:                                              ; preds = %713
  store i32 0, ptr %73, align 4, !tbaa !5
  br label %718

718:                                              ; preds = %747, %717
  %719 = load i32, ptr %73, align 4, !tbaa !5
  %720 = load i32, ptr %69, align 4, !tbaa !5
  %721 = icmp slt i32 %719, %720
  br i1 %721, label %722, label %750

722:                                              ; preds = %718
  call void @llvm.lifetime.start.p0(i64 4, ptr %74) #5
  %723 = load i32, ptr %72, align 4, !tbaa !5
  %724 = load i32, ptr %71, align 4, !tbaa !5
  %725 = mul nsw i32 %723, %724
  %726 = load i32, ptr %73, align 4, !tbaa !5
  %727 = add nsw i32 %725, %726
  store i32 %727, ptr %74, align 4, !tbaa !5
  %728 = load double, ptr %68, align 8, !tbaa !11
  %729 = load i32, ptr %72, align 4, !tbaa !5
  %730 = sitofp i32 %729 to double
  %731 = load i32, ptr %69, align 4, !tbaa !5
  %732 = sitofp i32 %731 to double
  %733 = call double @llvm.fmuladd.f64(double %730, double %732, double 1.000000e+00)
  %734 = load i32, ptr %73, align 4, !tbaa !5
  %735 = sitofp i32 %734 to double
  %736 = fadd double %733, %735
  %737 = fmul double %728, %736
  %738 = load ptr, ptr %26, align 8, !tbaa !9
  %739 = load i32, ptr %51, align 4, !tbaa !5
  %740 = load i32, ptr %21, align 4, !tbaa !5
  %741 = mul nsw i32 %739, %740
  %742 = sext i32 %741 to i64
  %743 = getelementptr inbounds double, ptr %738, i64 %742
  %744 = load i32, ptr %74, align 4, !tbaa !5
  %745 = sext i32 %744 to i64
  %746 = getelementptr inbounds double, ptr %743, i64 %745
  store double %737, ptr %746, align 8, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 4, ptr %74) #5
  br label %747

747:                                              ; preds = %722
  %748 = load i32, ptr %73, align 4, !tbaa !5
  %749 = add nsw i32 %748, 1
  store i32 %749, ptr %73, align 4, !tbaa !5
  br label %718, !llvm.loop !22

750:                                              ; preds = %718
  br label %751

751:                                              ; preds = %771, %750
  %752 = load i32, ptr %73, align 4, !tbaa !5
  %753 = load i32, ptr %71, align 4, !tbaa !5
  %754 = icmp slt i32 %752, %753
  br i1 %754, label %755, label %774

755:                                              ; preds = %751
  call void @llvm.lifetime.start.p0(i64 4, ptr %75) #5
  %756 = load i32, ptr %72, align 4, !tbaa !5
  %757 = load i32, ptr %71, align 4, !tbaa !5
  %758 = mul nsw i32 %756, %757
  %759 = load i32, ptr %73, align 4, !tbaa !5
  %760 = add nsw i32 %758, %759
  store i32 %760, ptr %75, align 4, !tbaa !5
  %761 = load double, ptr %67, align 8, !tbaa !11
  %762 = load ptr, ptr %26, align 8, !tbaa !9
  %763 = load i32, ptr %51, align 4, !tbaa !5
  %764 = load i32, ptr %21, align 4, !tbaa !5
  %765 = mul nsw i32 %763, %764
  %766 = sext i32 %765 to i64
  %767 = getelementptr inbounds double, ptr %762, i64 %766
  %768 = load i32, ptr %75, align 4, !tbaa !5
  %769 = sext i32 %768 to i64
  %770 = getelementptr inbounds double, ptr %767, i64 %769
  store double %761, ptr %770, align 8, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 4, ptr %75) #5
  br label %771

771:                                              ; preds = %755
  %772 = load i32, ptr %73, align 4, !tbaa !5
  %773 = add nsw i32 %772, 1
  store i32 %773, ptr %73, align 4, !tbaa !5
  br label %751, !llvm.loop !23

774:                                              ; preds = %751
  br label %775

775:                                              ; preds = %774
  %776 = load i32, ptr %72, align 4, !tbaa !5
  %777 = add nsw i32 %776, 1
  store i32 %777, ptr %72, align 4, !tbaa !5
  br label %713, !llvm.loop !24

778:                                              ; preds = %713
  br label %837

779:                                              ; preds = %699
  call void @llvm.lifetime.start.p0(i64 4, ptr %76) #5
  %780 = load i32, ptr %70, align 4, !tbaa !5
  %781 = load i32, ptr %71, align 4, !tbaa !5
  %782 = mul nsw i32 %780, %781
  store i32 %782, ptr %76, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %77) #5
  %783 = load i32, ptr %76, align 4, !tbaa !5
  %784 = add nsw i32 %783, 1
  %785 = sdiv i32 %784, 2
  %786 = sitofp i32 %785 to double
  store double %786, ptr %77, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %78) #5
  %787 = load double, ptr %48, align 8, !tbaa !11
  %788 = load double, ptr %77, align 8, !tbaa !11
  %789 = fdiv double %787, %788
  store double %789, ptr %78, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %79) #5
  %790 = load i32, ptr %76, align 4, !tbaa !5
  %791 = sext i32 %790 to i64
  %792 = call i64 @libxsmm_coprime2(i64 noundef %791)
  store i64 %792, ptr %79, align 8, !tbaa !14
  store i32 0, ptr %72, align 4, !tbaa !5
  br label %793

793:                                              ; preds = %833, %779
  %794 = load i32, ptr %72, align 4, !tbaa !5
  %795 = load i32, ptr %70, align 4, !tbaa !5
  %796 = icmp slt i32 %794, %795
  br i1 %796, label %797, label %836

797:                                              ; preds = %793
  store i32 0, ptr %73, align 4, !tbaa !5
  br label %798

798:                                              ; preds = %829, %797
  %799 = load i32, ptr %73, align 4, !tbaa !5
  %800 = load i32, ptr %71, align 4, !tbaa !5
  %801 = icmp slt i32 %799, %800
  br i1 %801, label %802, label %832

802:                                              ; preds = %798
  call void @llvm.lifetime.start.p0(i64 4, ptr %80) #5
  %803 = load i32, ptr %72, align 4, !tbaa !5
  %804 = load i32, ptr %71, align 4, !tbaa !5
  %805 = mul nsw i32 %803, %804
  %806 = load i32, ptr %73, align 4, !tbaa !5
  %807 = add nsw i32 %805, %806
  store i32 %807, ptr %80, align 4, !tbaa !5
  %808 = load double, ptr %78, align 8, !tbaa !11
  %809 = load i64, ptr %79, align 8, !tbaa !14
  %810 = load i32, ptr %80, align 4, !tbaa !5
  %811 = sext i32 %810 to i64
  %812 = mul i64 %809, %811
  %813 = load i32, ptr %76, align 4, !tbaa !5
  %814 = sext i32 %813 to i64
  %815 = urem i64 %812, %814
  %816 = uitofp i64 %815 to double
  %817 = load double, ptr %77, align 8, !tbaa !11
  %818 = fsub double %816, %817
  %819 = fmul double %808, %818
  %820 = load ptr, ptr %26, align 8, !tbaa !9
  %821 = load i32, ptr %51, align 4, !tbaa !5
  %822 = load i32, ptr %21, align 4, !tbaa !5
  %823 = mul nsw i32 %821, %822
  %824 = sext i32 %823 to i64
  %825 = getelementptr inbounds double, ptr %820, i64 %824
  %826 = load i32, ptr %80, align 4, !tbaa !5
  %827 = sext i32 %826 to i64
  %828 = getelementptr inbounds double, ptr %825, i64 %827
  store double %819, ptr %828, align 8, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 4, ptr %80) #5
  br label %829

829:                                              ; preds = %802
  %830 = load i32, ptr %73, align 4, !tbaa !5
  %831 = add nsw i32 %830, 1
  store i32 %831, ptr %73, align 4, !tbaa !5
  br label %798, !llvm.loop !25

832:                                              ; preds = %798
  br label %833

833:                                              ; preds = %832
  %834 = load i32, ptr %72, align 4, !tbaa !5
  %835 = add nsw i32 %834, 1
  store i32 %835, ptr %72, align 4, !tbaa !5
  br label %793, !llvm.loop !26

836:                                              ; preds = %793
  call void @llvm.lifetime.end.p0(i64 8, ptr %79) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %78) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %77) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %76) #5
  br label %837

837:                                              ; preds = %836, %778
  call void @llvm.lifetime.end.p0(i64 4, ptr %73) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %72) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %71) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %70) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %69) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %68) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %67) #5
  br label %838

838:                                              ; preds = %837
  br label %839

839:                                              ; preds = %838
  br label %840

840:                                              ; preds = %839
  call void @llvm.lifetime.start.p0(i64 8, ptr %81) #5
  %841 = load i32, ptr %51, align 4, !tbaa !5
  %842 = add nsw i32 42, %841
  %843 = sitofp i32 %842 to double
  store double %843, ptr %81, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %82) #5
  %844 = load double, ptr %81, align 8, !tbaa !11
  %845 = load double, ptr %48, align 8, !tbaa !11
  %846 = load double, ptr %48, align 8, !tbaa !11
  %847 = call double @llvm.fmuladd.f64(double %844, double %845, double %846)
  store double %847, ptr %82, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %83) #5
  %848 = load i32, ptr %7, align 4, !tbaa !5
  store i32 %848, ptr %83, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %84) #5
  %849 = load i32, ptr %8, align 4, !tbaa !5
  store i32 %849, ptr %84, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %85) #5
  %850 = load i32, ptr %12, align 4, !tbaa !5
  store i32 %850, ptr %85, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %86) #5
  store i32 0, ptr %86, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %87) #5
  store i32 0, ptr %87, align 4, !tbaa !5
  %851 = load double, ptr %81, align 8, !tbaa !11
  %852 = fcmp une double 0.000000e+00, %851
  br i1 %852, label %853, label %920

853:                                              ; preds = %840
  store i32 0, ptr %86, align 4, !tbaa !5
  br label %854

854:                                              ; preds = %916, %853
  %855 = load i32, ptr %86, align 4, !tbaa !5
  %856 = load i32, ptr %84, align 4, !tbaa !5
  %857 = icmp slt i32 %855, %856
  br i1 %857, label %858, label %919

858:                                              ; preds = %854
  store i32 0, ptr %87, align 4, !tbaa !5
  br label %859

859:                                              ; preds = %888, %858
  %860 = load i32, ptr %87, align 4, !tbaa !5
  %861 = load i32, ptr %83, align 4, !tbaa !5
  %862 = icmp slt i32 %860, %861
  br i1 %862, label %863, label %891

863:                                              ; preds = %859
  call void @llvm.lifetime.start.p0(i64 4, ptr %88) #5
  %864 = load i32, ptr %86, align 4, !tbaa !5
  %865 = load i32, ptr %85, align 4, !tbaa !5
  %866 = mul nsw i32 %864, %865
  %867 = load i32, ptr %87, align 4, !tbaa !5
  %868 = add nsw i32 %866, %867
  store i32 %868, ptr %88, align 4, !tbaa !5
  %869 = load double, ptr %82, align 8, !tbaa !11
  %870 = load i32, ptr %86, align 4, !tbaa !5
  %871 = sitofp i32 %870 to double
  %872 = load i32, ptr %83, align 4, !tbaa !5
  %873 = sitofp i32 %872 to double
  %874 = call double @llvm.fmuladd.f64(double %871, double %873, double 1.000000e+00)
  %875 = load i32, ptr %87, align 4, !tbaa !5
  %876 = sitofp i32 %875 to double
  %877 = fadd double %874, %876
  %878 = fmul double %869, %877
  %879 = load ptr, ptr %27, align 8, !tbaa !9
  %880 = load i32, ptr %51, align 4, !tbaa !5
  %881 = load i32, ptr %22, align 4, !tbaa !5
  %882 = mul nsw i32 %880, %881
  %883 = sext i32 %882 to i64
  %884 = getelementptr inbounds double, ptr %879, i64 %883
  %885 = load i32, ptr %88, align 4, !tbaa !5
  %886 = sext i32 %885 to i64
  %887 = getelementptr inbounds double, ptr %884, i64 %886
  store double %878, ptr %887, align 8, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 4, ptr %88) #5
  br label %888

888:                                              ; preds = %863
  %889 = load i32, ptr %87, align 4, !tbaa !5
  %890 = add nsw i32 %889, 1
  store i32 %890, ptr %87, align 4, !tbaa !5
  br label %859, !llvm.loop !27

891:                                              ; preds = %859
  br label %892

892:                                              ; preds = %912, %891
  %893 = load i32, ptr %87, align 4, !tbaa !5
  %894 = load i32, ptr %85, align 4, !tbaa !5
  %895 = icmp slt i32 %893, %894
  br i1 %895, label %896, label %915

896:                                              ; preds = %892
  call void @llvm.lifetime.start.p0(i64 4, ptr %89) #5
  %897 = load i32, ptr %86, align 4, !tbaa !5
  %898 = load i32, ptr %85, align 4, !tbaa !5
  %899 = mul nsw i32 %897, %898
  %900 = load i32, ptr %87, align 4, !tbaa !5
  %901 = add nsw i32 %899, %900
  store i32 %901, ptr %89, align 4, !tbaa !5
  %902 = load double, ptr %81, align 8, !tbaa !11
  %903 = load ptr, ptr %27, align 8, !tbaa !9
  %904 = load i32, ptr %51, align 4, !tbaa !5
  %905 = load i32, ptr %22, align 4, !tbaa !5
  %906 = mul nsw i32 %904, %905
  %907 = sext i32 %906 to i64
  %908 = getelementptr inbounds double, ptr %903, i64 %907
  %909 = load i32, ptr %89, align 4, !tbaa !5
  %910 = sext i32 %909 to i64
  %911 = getelementptr inbounds double, ptr %908, i64 %910
  store double %902, ptr %911, align 8, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 4, ptr %89) #5
  br label %912

912:                                              ; preds = %896
  %913 = load i32, ptr %87, align 4, !tbaa !5
  %914 = add nsw i32 %913, 1
  store i32 %914, ptr %87, align 4, !tbaa !5
  br label %892, !llvm.loop !28

915:                                              ; preds = %892
  br label %916

916:                                              ; preds = %915
  %917 = load i32, ptr %86, align 4, !tbaa !5
  %918 = add nsw i32 %917, 1
  store i32 %918, ptr %86, align 4, !tbaa !5
  br label %854, !llvm.loop !29

919:                                              ; preds = %854
  br label %978

920:                                              ; preds = %840
  call void @llvm.lifetime.start.p0(i64 4, ptr %90) #5
  %921 = load i32, ptr %84, align 4, !tbaa !5
  %922 = load i32, ptr %85, align 4, !tbaa !5
  %923 = mul nsw i32 %921, %922
  store i32 %923, ptr %90, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %91) #5
  %924 = load i32, ptr %90, align 4, !tbaa !5
  %925 = add nsw i32 %924, 1
  %926 = sdiv i32 %925, 2
  %927 = sitofp i32 %926 to double
  store double %927, ptr %91, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %92) #5
  %928 = load double, ptr %48, align 8, !tbaa !11
  %929 = load double, ptr %91, align 8, !tbaa !11
  %930 = fdiv double %928, %929
  store double %930, ptr %92, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %93) #5
  %931 = load i32, ptr %90, align 4, !tbaa !5
  %932 = sext i32 %931 to i64
  %933 = call i64 @libxsmm_coprime2(i64 noundef %932)
  store i64 %933, ptr %93, align 8, !tbaa !14
  store i32 0, ptr %86, align 4, !tbaa !5
  br label %934

934:                                              ; preds = %974, %920
  %935 = load i32, ptr %86, align 4, !tbaa !5
  %936 = load i32, ptr %84, align 4, !tbaa !5
  %937 = icmp slt i32 %935, %936
  br i1 %937, label %938, label %977

938:                                              ; preds = %934
  store i32 0, ptr %87, align 4, !tbaa !5
  br label %939

939:                                              ; preds = %970, %938
  %940 = load i32, ptr %87, align 4, !tbaa !5
  %941 = load i32, ptr %85, align 4, !tbaa !5
  %942 = icmp slt i32 %940, %941
  br i1 %942, label %943, label %973

943:                                              ; preds = %939
  call void @llvm.lifetime.start.p0(i64 4, ptr %94) #5
  %944 = load i32, ptr %86, align 4, !tbaa !5
  %945 = load i32, ptr %85, align 4, !tbaa !5
  %946 = mul nsw i32 %944, %945
  %947 = load i32, ptr %87, align 4, !tbaa !5
  %948 = add nsw i32 %946, %947
  store i32 %948, ptr %94, align 4, !tbaa !5
  %949 = load double, ptr %92, align 8, !tbaa !11
  %950 = load i64, ptr %93, align 8, !tbaa !14
  %951 = load i32, ptr %94, align 4, !tbaa !5
  %952 = sext i32 %951 to i64
  %953 = mul i64 %950, %952
  %954 = load i32, ptr %90, align 4, !tbaa !5
  %955 = sext i32 %954 to i64
  %956 = urem i64 %953, %955
  %957 = uitofp i64 %956 to double
  %958 = load double, ptr %91, align 8, !tbaa !11
  %959 = fsub double %957, %958
  %960 = fmul double %949, %959
  %961 = load ptr, ptr %27, align 8, !tbaa !9
  %962 = load i32, ptr %51, align 4, !tbaa !5
  %963 = load i32, ptr %22, align 4, !tbaa !5
  %964 = mul nsw i32 %962, %963
  %965 = sext i32 %964 to i64
  %966 = getelementptr inbounds double, ptr %961, i64 %965
  %967 = load i32, ptr %94, align 4, !tbaa !5
  %968 = sext i32 %967 to i64
  %969 = getelementptr inbounds double, ptr %966, i64 %968
  store double %960, ptr %969, align 8, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 4, ptr %94) #5
  br label %970

970:                                              ; preds = %943
  %971 = load i32, ptr %87, align 4, !tbaa !5
  %972 = add nsw i32 %971, 1
  store i32 %972, ptr %87, align 4, !tbaa !5
  br label %939, !llvm.loop !30

973:                                              ; preds = %939
  br label %974

974:                                              ; preds = %973
  %975 = load i32, ptr %86, align 4, !tbaa !5
  %976 = add nsw i32 %975, 1
  store i32 %976, ptr %86, align 4, !tbaa !5
  br label %934, !llvm.loop !31

977:                                              ; preds = %934
  call void @llvm.lifetime.end.p0(i64 8, ptr %93) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %92) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %91) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %90) #5
  br label %978

978:                                              ; preds = %977, %919
  call void @llvm.lifetime.end.p0(i64 4, ptr %87) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %86) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %85) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %84) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %83) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %82) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %81) #5
  br label %979

979:                                              ; preds = %978
  br label %980

980:                                              ; preds = %979
  br label %981

981:                                              ; preds = %980
  call void @llvm.lifetime.start.p0(i64 8, ptr %95) #5
  %982 = load i32, ptr %51, align 4, !tbaa !5
  %983 = add nsw i32 42, %982
  %984 = sitofp i32 %983 to double
  store double %984, ptr %95, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %96) #5
  %985 = load double, ptr %95, align 8, !tbaa !11
  %986 = load double, ptr %48, align 8, !tbaa !11
  %987 = load double, ptr %48, align 8, !tbaa !11
  %988 = call double @llvm.fmuladd.f64(double %985, double %986, double %987)
  store double %988, ptr %96, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %97) #5
  %989 = load i32, ptr %7, align 4, !tbaa !5
  store i32 %989, ptr %97, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %98) #5
  %990 = load i32, ptr %8, align 4, !tbaa !5
  store i32 %990, ptr %98, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %99) #5
  %991 = load i32, ptr %12, align 4, !tbaa !5
  store i32 %991, ptr %99, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %100) #5
  store i32 0, ptr %100, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %101) #5
  store i32 0, ptr %101, align 4, !tbaa !5
  %992 = load double, ptr %95, align 8, !tbaa !11
  %993 = fcmp une double 0.000000e+00, %992
  br i1 %993, label %994, label %1061

994:                                              ; preds = %981
  store i32 0, ptr %100, align 4, !tbaa !5
  br label %995

995:                                              ; preds = %1057, %994
  %996 = load i32, ptr %100, align 4, !tbaa !5
  %997 = load i32, ptr %98, align 4, !tbaa !5
  %998 = icmp slt i32 %996, %997
  br i1 %998, label %999, label %1060

999:                                              ; preds = %995
  store i32 0, ptr %101, align 4, !tbaa !5
  br label %1000

1000:                                             ; preds = %1029, %999
  %1001 = load i32, ptr %101, align 4, !tbaa !5
  %1002 = load i32, ptr %97, align 4, !tbaa !5
  %1003 = icmp slt i32 %1001, %1002
  br i1 %1003, label %1004, label %1032

1004:                                             ; preds = %1000
  call void @llvm.lifetime.start.p0(i64 4, ptr %102) #5
  %1005 = load i32, ptr %100, align 4, !tbaa !5
  %1006 = load i32, ptr %99, align 4, !tbaa !5
  %1007 = mul nsw i32 %1005, %1006
  %1008 = load i32, ptr %101, align 4, !tbaa !5
  %1009 = add nsw i32 %1007, %1008
  store i32 %1009, ptr %102, align 4, !tbaa !5
  %1010 = load double, ptr %96, align 8, !tbaa !11
  %1011 = load i32, ptr %100, align 4, !tbaa !5
  %1012 = sitofp i32 %1011 to double
  %1013 = load i32, ptr %97, align 4, !tbaa !5
  %1014 = sitofp i32 %1013 to double
  %1015 = call double @llvm.fmuladd.f64(double %1012, double %1014, double 1.000000e+00)
  %1016 = load i32, ptr %101, align 4, !tbaa !5
  %1017 = sitofp i32 %1016 to double
  %1018 = fadd double %1015, %1017
  %1019 = fmul double %1010, %1018
  %1020 = load ptr, ptr %28, align 8, !tbaa !9
  %1021 = load i32, ptr %51, align 4, !tbaa !5
  %1022 = load i32, ptr %22, align 4, !tbaa !5
  %1023 = mul nsw i32 %1021, %1022
  %1024 = sext i32 %1023 to i64
  %1025 = getelementptr inbounds double, ptr %1020, i64 %1024
  %1026 = load i32, ptr %102, align 4, !tbaa !5
  %1027 = sext i32 %1026 to i64
  %1028 = getelementptr inbounds double, ptr %1025, i64 %1027
  store double %1019, ptr %1028, align 8, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 4, ptr %102) #5
  br label %1029

1029:                                             ; preds = %1004
  %1030 = load i32, ptr %101, align 4, !tbaa !5
  %1031 = add nsw i32 %1030, 1
  store i32 %1031, ptr %101, align 4, !tbaa !5
  br label %1000, !llvm.loop !32

1032:                                             ; preds = %1000
  br label %1033

1033:                                             ; preds = %1053, %1032
  %1034 = load i32, ptr %101, align 4, !tbaa !5
  %1035 = load i32, ptr %99, align 4, !tbaa !5
  %1036 = icmp slt i32 %1034, %1035
  br i1 %1036, label %1037, label %1056

1037:                                             ; preds = %1033
  call void @llvm.lifetime.start.p0(i64 4, ptr %103) #5
  %1038 = load i32, ptr %100, align 4, !tbaa !5
  %1039 = load i32, ptr %99, align 4, !tbaa !5
  %1040 = mul nsw i32 %1038, %1039
  %1041 = load i32, ptr %101, align 4, !tbaa !5
  %1042 = add nsw i32 %1040, %1041
  store i32 %1042, ptr %103, align 4, !tbaa !5
  %1043 = load double, ptr %95, align 8, !tbaa !11
  %1044 = load ptr, ptr %28, align 8, !tbaa !9
  %1045 = load i32, ptr %51, align 4, !tbaa !5
  %1046 = load i32, ptr %22, align 4, !tbaa !5
  %1047 = mul nsw i32 %1045, %1046
  %1048 = sext i32 %1047 to i64
  %1049 = getelementptr inbounds double, ptr %1044, i64 %1048
  %1050 = load i32, ptr %103, align 4, !tbaa !5
  %1051 = sext i32 %1050 to i64
  %1052 = getelementptr inbounds double, ptr %1049, i64 %1051
  store double %1043, ptr %1052, align 8, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 4, ptr %103) #5
  br label %1053

1053:                                             ; preds = %1037
  %1054 = load i32, ptr %101, align 4, !tbaa !5
  %1055 = add nsw i32 %1054, 1
  store i32 %1055, ptr %101, align 4, !tbaa !5
  br label %1033, !llvm.loop !33

1056:                                             ; preds = %1033
  br label %1057

1057:                                             ; preds = %1056
  %1058 = load i32, ptr %100, align 4, !tbaa !5
  %1059 = add nsw i32 %1058, 1
  store i32 %1059, ptr %100, align 4, !tbaa !5
  br label %995, !llvm.loop !34

1060:                                             ; preds = %995
  br label %1119

1061:                                             ; preds = %981
  call void @llvm.lifetime.start.p0(i64 4, ptr %104) #5
  %1062 = load i32, ptr %98, align 4, !tbaa !5
  %1063 = load i32, ptr %99, align 4, !tbaa !5
  %1064 = mul nsw i32 %1062, %1063
  store i32 %1064, ptr %104, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %105) #5
  %1065 = load i32, ptr %104, align 4, !tbaa !5
  %1066 = add nsw i32 %1065, 1
  %1067 = sdiv i32 %1066, 2
  %1068 = sitofp i32 %1067 to double
  store double %1068, ptr %105, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %106) #5
  %1069 = load double, ptr %48, align 8, !tbaa !11
  %1070 = load double, ptr %105, align 8, !tbaa !11
  %1071 = fdiv double %1069, %1070
  store double %1071, ptr %106, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %107) #5
  %1072 = load i32, ptr %104, align 4, !tbaa !5
  %1073 = sext i32 %1072 to i64
  %1074 = call i64 @libxsmm_coprime2(i64 noundef %1073)
  store i64 %1074, ptr %107, align 8, !tbaa !14
  store i32 0, ptr %100, align 4, !tbaa !5
  br label %1075

1075:                                             ; preds = %1115, %1061
  %1076 = load i32, ptr %100, align 4, !tbaa !5
  %1077 = load i32, ptr %98, align 4, !tbaa !5
  %1078 = icmp slt i32 %1076, %1077
  br i1 %1078, label %1079, label %1118

1079:                                             ; preds = %1075
  store i32 0, ptr %101, align 4, !tbaa !5
  br label %1080

1080:                                             ; preds = %1111, %1079
  %1081 = load i32, ptr %101, align 4, !tbaa !5
  %1082 = load i32, ptr %99, align 4, !tbaa !5
  %1083 = icmp slt i32 %1081, %1082
  br i1 %1083, label %1084, label %1114

1084:                                             ; preds = %1080
  call void @llvm.lifetime.start.p0(i64 4, ptr %108) #5
  %1085 = load i32, ptr %100, align 4, !tbaa !5
  %1086 = load i32, ptr %99, align 4, !tbaa !5
  %1087 = mul nsw i32 %1085, %1086
  %1088 = load i32, ptr %101, align 4, !tbaa !5
  %1089 = add nsw i32 %1087, %1088
  store i32 %1089, ptr %108, align 4, !tbaa !5
  %1090 = load double, ptr %106, align 8, !tbaa !11
  %1091 = load i64, ptr %107, align 8, !tbaa !14
  %1092 = load i32, ptr %108, align 4, !tbaa !5
  %1093 = sext i32 %1092 to i64
  %1094 = mul i64 %1091, %1093
  %1095 = load i32, ptr %104, align 4, !tbaa !5
  %1096 = sext i32 %1095 to i64
  %1097 = urem i64 %1094, %1096
  %1098 = uitofp i64 %1097 to double
  %1099 = load double, ptr %105, align 8, !tbaa !11
  %1100 = fsub double %1098, %1099
  %1101 = fmul double %1090, %1100
  %1102 = load ptr, ptr %28, align 8, !tbaa !9
  %1103 = load i32, ptr %51, align 4, !tbaa !5
  %1104 = load i32, ptr %22, align 4, !tbaa !5
  %1105 = mul nsw i32 %1103, %1104
  %1106 = sext i32 %1105 to i64
  %1107 = getelementptr inbounds double, ptr %1102, i64 %1106
  %1108 = load i32, ptr %108, align 4, !tbaa !5
  %1109 = sext i32 %1108 to i64
  %1110 = getelementptr inbounds double, ptr %1107, i64 %1109
  store double %1101, ptr %1110, align 8, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 4, ptr %108) #5
  br label %1111

1111:                                             ; preds = %1084
  %1112 = load i32, ptr %101, align 4, !tbaa !5
  %1113 = add nsw i32 %1112, 1
  store i32 %1113, ptr %101, align 4, !tbaa !5
  br label %1080, !llvm.loop !35

1114:                                             ; preds = %1080
  br label %1115

1115:                                             ; preds = %1114
  %1116 = load i32, ptr %100, align 4, !tbaa !5
  %1117 = add nsw i32 %1116, 1
  store i32 %1117, ptr %100, align 4, !tbaa !5
  br label %1075, !llvm.loop !36

1118:                                             ; preds = %1075
  call void @llvm.lifetime.end.p0(i64 8, ptr %107) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %106) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %105) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %104) #5
  br label %1119

1119:                                             ; preds = %1118, %1060
  call void @llvm.lifetime.end.p0(i64 4, ptr %101) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %100) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %99) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %98) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %97) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %96) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %95) #5
  br label %1120

1120:                                             ; preds = %1119
  br label %1121

1121:                                             ; preds = %1120
  call void @llvm.lifetime.end.p0(i64 4, ptr %52) #5
  br label %1122

1122:                                             ; preds = %1121
  %1123 = load i32, ptr %51, align 4, !tbaa !5
  %1124 = add nsw i32 %1123, 1
  store i32 %1124, ptr %51, align 4, !tbaa !5
  br label %517, !llvm.loop !37

1125:                                             ; preds = %517
  %1126 = load i32, ptr %13, align 4, !tbaa !5
  %1127 = icmp slt i32 0, %1126
  br i1 %1127, label %1128, label %1155

1128:                                             ; preds = %1125
  store i32 0, ptr %51, align 4, !tbaa !5
  br label %1129

1129:                                             ; preds = %1151, %1128
  %1130 = load i32, ptr %51, align 4, !tbaa !5
  %1131 = load i32, ptr %23, align 4, !tbaa !5
  %1132 = icmp slt i32 %1130, %1131
  br i1 %1132, label %1133, label %1154

1133:                                             ; preds = %1129
  call void @llvm.lifetime.start.p0(i64 4, ptr %109) #5
  %1134 = call i32 @libxsmm_rng_u32(i32 noundef 100)
  store i32 %1134, ptr %109, align 4, !tbaa !5
  %1135 = load i32, ptr %109, align 4, !tbaa !5
  %1136 = load i32, ptr %13, align 4, !tbaa !5
  %1137 = icmp ult i32 %1135, %1136
  br i1 %1137, label %1138, label %1150

1138:                                             ; preds = %1133
  %1139 = load ptr, ptr %38, align 8, !tbaa !9
  %1140 = load i32, ptr %23, align 4, !tbaa !5
  %1141 = sub nsw i32 %1140, 1
  %1142 = call i32 @libxsmm_rng_u32(i32 noundef %1141)
  %1143 = zext i32 %1142 to i64
  %1144 = getelementptr inbounds i32, ptr %1139, i64 %1143
  %1145 = load i32, ptr %1144, align 4, !tbaa !5
  %1146 = load ptr, ptr %38, align 8, !tbaa !9
  %1147 = load i32, ptr %51, align 4, !tbaa !5
  %1148 = sext i32 %1147 to i64
  %1149 = getelementptr inbounds i32, ptr %1146, i64 %1148
  store i32 %1145, ptr %1149, align 4, !tbaa !5
  br label %1150

1150:                                             ; preds = %1138, %1133
  call void @llvm.lifetime.end.p0(i64 4, ptr %109) #5
  br label %1151

1151:                                             ; preds = %1150
  %1152 = load i32, ptr %51, align 4, !tbaa !5
  %1153 = add nsw i32 %1152, 1
  store i32 %1153, ptr %51, align 4, !tbaa !5
  br label %1129, !llvm.loop !38

1154:                                             ; preds = %1129
  br label %1155

1155:                                             ; preds = %1154, %1125
  %1156 = load i32, ptr %47, align 4, !tbaa !5
  %1157 = icmp eq i32 0, %1156
  br i1 %1157, label %1158, label %1227

1158:                                             ; preds = %1155
  %1159 = load i32, ptr %7, align 4, !tbaa !5
  %1160 = load i32, ptr %8, align 4, !tbaa !5
  %1161 = load i32, ptr %9, align 4, !tbaa !5
  %1162 = load ptr, ptr %25, align 8, !tbaa !9
  %1163 = load ptr, ptr %36, align 8, !tbaa !9
  %1164 = load ptr, ptr %26, align 8, !tbaa !9
  %1165 = load ptr, ptr %37, align 8, !tbaa !9
  %1166 = load ptr, ptr %27, align 8, !tbaa !9
  %1167 = load ptr, ptr %38, align 8, !tbaa !9
  %1168 = load i32, ptr %23, align 4, !tbaa !5
  call void @libxsmm_gemm_batch(i32 noundef 0, i32 noundef 0, ptr noundef %18, ptr noundef %19, i32 noundef %1159, i32 noundef %1160, i32 noundef %1161, ptr noundef %16, ptr noundef %1162, ptr noundef %10, ptr noundef %1163, ptr noundef %1164, ptr noundef %11, ptr noundef %1165, ptr noundef %17, ptr noundef %1166, ptr noundef %12, ptr noundef %1167, i32 noundef 4, i32 noundef 0, i32 noundef %1168, i32 noundef 0)
  store i32 0, ptr %51, align 4, !tbaa !5
  br label %1169

1169:                                             ; preds = %1199, %1158
  %1170 = load i32, ptr %51, align 4, !tbaa !5
  %1171 = load i32, ptr %23, align 4, !tbaa !5
  %1172 = icmp slt i32 %1170, %1171
  br i1 %1172, label %1173, label %1202

1173:                                             ; preds = %1169
  %1174 = call ptr @libxsmm_original_dgemm()
  %1175 = load ptr, ptr %25, align 8, !tbaa !9
  %1176 = load ptr, ptr %36, align 8, !tbaa !9
  %1177 = load i32, ptr %51, align 4, !tbaa !5
  %1178 = sext i32 %1177 to i64
  %1179 = getelementptr inbounds i32, ptr %1176, i64 %1178
  %1180 = load i32, ptr %1179, align 4, !tbaa !5
  %1181 = sext i32 %1180 to i64
  %1182 = getelementptr inbounds double, ptr %1175, i64 %1181
  %1183 = load ptr, ptr %26, align 8, !tbaa !9
  %1184 = load ptr, ptr %37, align 8, !tbaa !9
  %1185 = load i32, ptr %51, align 4, !tbaa !5
  %1186 = sext i32 %1185 to i64
  %1187 = getelementptr inbounds i32, ptr %1184, i64 %1186
  %1188 = load i32, ptr %1187, align 4, !tbaa !5
  %1189 = sext i32 %1188 to i64
  %1190 = getelementptr inbounds double, ptr %1183, i64 %1189
  %1191 = load ptr, ptr %28, align 8, !tbaa !9
  %1192 = load ptr, ptr %38, align 8, !tbaa !9
  %1193 = load i32, ptr %51, align 4, !tbaa !5
  %1194 = sext i32 %1193 to i64
  %1195 = getelementptr inbounds i32, ptr %1192, i64 %1194
  %1196 = load i32, ptr %1195, align 4, !tbaa !5
  %1197 = sext i32 %1196 to i64
  %1198 = getelementptr inbounds double, ptr %1191, i64 %1197
  call void %1174(ptr noundef %18, ptr noundef %19, ptr noundef %7, ptr noundef %8, ptr noundef %9, ptr noundef %16, ptr noundef %1182, ptr noundef %10, ptr noundef %1190, ptr noundef %11, ptr noundef %17, ptr noundef %1198, ptr noundef %12)
  br label %1199

1199:                                             ; preds = %1173
  %1200 = load i32, ptr %51, align 4, !tbaa !5
  %1201 = add nsw i32 %1200, 1
  store i32 %1201, ptr %51, align 4, !tbaa !5
  br label %1169, !llvm.loop !39

1202:                                             ; preds = %1169
  %1203 = load i32, ptr %7, align 4, !tbaa !5
  %1204 = load i32, ptr %8, align 4, !tbaa !5
  %1205 = load ptr, ptr %28, align 8, !tbaa !9
  %1206 = load ptr, ptr %27, align 8, !tbaa !9
  %1207 = call i32 @libxsmm_matdiff(ptr noundef %50, i32 noundef 0, i32 noundef %1203, i32 noundef %1204, ptr noundef %1205, ptr noundef %1206, ptr noundef %12, ptr noundef %12)
  store i32 %1207, ptr %47, align 4, !tbaa !5
  %1208 = load i32, ptr %47, align 4, !tbaa !5
  %1209 = icmp eq i32 0, %1208
  br i1 %1209, label %1210, label %1226

1210:                                             ; preds = %1202
  call void @llvm.lifetime.start.p0(i64 8, ptr %110) #5
  %1211 = call double @libxsmm_matdiff_epsilon(ptr noundef %50)
  store double %1211, ptr %110, align 8, !tbaa !11
  br label %1212

1212:                                             ; preds = %1210
  br label %1213

1213:                                             ; preds = %1212
  br label %1214

1214:                                             ; preds = %1213
  %1215 = load double, ptr %110, align 8, !tbaa !11
  %1216 = fcmp oge double 7.000000e-04, %1215
  br i1 %1216, label %1217, label %1221

1217:                                             ; preds = %1214
  br label %1218

1218:                                             ; preds = %1217
  br label %1219

1219:                                             ; preds = %1218
  br label %1220

1220:                                             ; preds = %1219
  br label %1225

1221:                                             ; preds = %1214
  br label %1222

1222:                                             ; preds = %1221
  br label %1223

1223:                                             ; preds = %1222
  br label %1224

1224:                                             ; preds = %1223
  store i32 1, ptr %47, align 4, !tbaa !5
  br label %1225

1225:                                             ; preds = %1224, %1220
  call void @llvm.lifetime.end.p0(i64 8, ptr %110) #5
  br label %1226

1226:                                             ; preds = %1225, %1202
  br label %1227

1227:                                             ; preds = %1226, %1155
  %1228 = load i32, ptr %47, align 4, !tbaa !5
  %1229 = icmp eq i32 0, %1228
  br i1 %1229, label %1230, label %1299

1230:                                             ; preds = %1227
  %1231 = load i32, ptr %7, align 4, !tbaa !5
  %1232 = load i32, ptr %8, align 4, !tbaa !5
  %1233 = load i32, ptr %9, align 4, !tbaa !5
  %1234 = load ptr, ptr %25, align 8, !tbaa !9
  %1235 = load ptr, ptr %36, align 8, !tbaa !9
  %1236 = load ptr, ptr %26, align 8, !tbaa !9
  %1237 = load ptr, ptr %37, align 8, !tbaa !9
  %1238 = load ptr, ptr %27, align 8, !tbaa !9
  %1239 = load ptr, ptr %38, align 8, !tbaa !9
  %1240 = load i32, ptr %23, align 4, !tbaa !5
  call void @libxsmm_gemm_batch(i32 noundef 0, i32 noundef 0, ptr noundef %18, ptr noundef %19, i32 noundef %1231, i32 noundef %1232, i32 noundef %1233, ptr noundef %16, ptr noundef %1234, ptr noundef %10, ptr noundef %1235, ptr noundef %1236, ptr noundef %11, ptr noundef %1237, ptr noundef %17, ptr noundef %1238, ptr noundef %12, ptr noundef %1239, i32 noundef 4, i32 noundef 0, i32 noundef %1240, i32 noundef 1)
  store i32 0, ptr %51, align 4, !tbaa !5
  br label %1241

1241:                                             ; preds = %1271, %1230
  %1242 = load i32, ptr %51, align 4, !tbaa !5
  %1243 = load i32, ptr %23, align 4, !tbaa !5
  %1244 = icmp slt i32 %1242, %1243
  br i1 %1244, label %1245, label %1274

1245:                                             ; preds = %1241
  %1246 = call ptr @libxsmm_original_dgemm()
  %1247 = load ptr, ptr %25, align 8, !tbaa !9
  %1248 = load ptr, ptr %36, align 8, !tbaa !9
  %1249 = load i32, ptr %51, align 4, !tbaa !5
  %1250 = sext i32 %1249 to i64
  %1251 = getelementptr inbounds i32, ptr %1248, i64 %1250
  %1252 = load i32, ptr %1251, align 4, !tbaa !5
  %1253 = sext i32 %1252 to i64
  %1254 = getelementptr inbounds double, ptr %1247, i64 %1253
  %1255 = load ptr, ptr %26, align 8, !tbaa !9
  %1256 = load ptr, ptr %37, align 8, !tbaa !9
  %1257 = load i32, ptr %51, align 4, !tbaa !5
  %1258 = sext i32 %1257 to i64
  %1259 = getelementptr inbounds i32, ptr %1256, i64 %1258
  %1260 = load i32, ptr %1259, align 4, !tbaa !5
  %1261 = sext i32 %1260 to i64
  %1262 = getelementptr inbounds double, ptr %1255, i64 %1261
  %1263 = load ptr, ptr %28, align 8, !tbaa !9
  %1264 = load ptr, ptr %38, align 8, !tbaa !9
  %1265 = load i32, ptr %51, align 4, !tbaa !5
  %1266 = sext i32 %1265 to i64
  %1267 = getelementptr inbounds i32, ptr %1264, i64 %1266
  %1268 = load i32, ptr %1267, align 4, !tbaa !5
  %1269 = sext i32 %1268 to i64
  %1270 = getelementptr inbounds double, ptr %1263, i64 %1269
  call void %1246(ptr noundef %18, ptr noundef %19, ptr noundef %7, ptr noundef %8, ptr noundef %9, ptr noundef %16, ptr noundef %1254, ptr noundef %10, ptr noundef %1262, ptr noundef %11, ptr noundef %17, ptr noundef %1270, ptr noundef %12)
  br label %1271

1271:                                             ; preds = %1245
  %1272 = load i32, ptr %51, align 4, !tbaa !5
  %1273 = add nsw i32 %1272, 1
  store i32 %1273, ptr %51, align 4, !tbaa !5
  br label %1241, !llvm.loop !40

1274:                                             ; preds = %1241
  %1275 = load i32, ptr %7, align 4, !tbaa !5
  %1276 = load i32, ptr %8, align 4, !tbaa !5
  %1277 = load ptr, ptr %28, align 8, !tbaa !9
  %1278 = load ptr, ptr %27, align 8, !tbaa !9
  %1279 = call i32 @libxsmm_matdiff(ptr noundef %50, i32 noundef 0, i32 noundef %1275, i32 noundef %1276, ptr noundef %1277, ptr noundef %1278, ptr noundef %12, ptr noundef %12)
  store i32 %1279, ptr %47, align 4, !tbaa !5
  %1280 = load i32, ptr %47, align 4, !tbaa !5
  %1281 = icmp eq i32 0, %1280
  br i1 %1281, label %1282, label %1298

1282:                                             ; preds = %1274
  call void @llvm.lifetime.start.p0(i64 8, ptr %111) #5
  %1283 = call double @libxsmm_matdiff_epsilon(ptr noundef %50)
  store double %1283, ptr %111, align 8, !tbaa !11
  br label %1284

1284:                                             ; preds = %1282
  br label %1285

1285:                                             ; preds = %1284
  br label %1286

1286:                                             ; preds = %1285
  %1287 = load double, ptr %111, align 8, !tbaa !11
  %1288 = fcmp oge double 7.000000e-04, %1287
  br i1 %1288, label %1289, label %1293

1289:                                             ; preds = %1286
  br label %1290

1290:                                             ; preds = %1289
  br label %1291

1291:                                             ; preds = %1290
  br label %1292

1292:                                             ; preds = %1291
  br label %1297

1293:                                             ; preds = %1286
  br label %1294

1294:                                             ; preds = %1293
  br label %1295

1295:                                             ; preds = %1294
  br label %1296

1296:                                             ; preds = %1295
  store i32 1, ptr %47, align 4, !tbaa !5
  br label %1297

1297:                                             ; preds = %1296, %1292
  call void @llvm.lifetime.end.p0(i64 8, ptr %111) #5
  br label %1298

1298:                                             ; preds = %1297, %1274
  br label %1299

1299:                                             ; preds = %1298, %1227
  %1300 = load i32, ptr %47, align 4, !tbaa !5
  %1301 = icmp eq i32 0, %1300
  br i1 %1301, label %1302, label %1371

1302:                                             ; preds = %1299
  %1303 = load i32, ptr %7, align 4, !tbaa !5
  %1304 = load i32, ptr %8, align 4, !tbaa !5
  %1305 = load i32, ptr %9, align 4, !tbaa !5
  %1306 = load ptr, ptr %25, align 8, !tbaa !9
  %1307 = load ptr, ptr %36, align 8, !tbaa !9
  %1308 = load ptr, ptr %26, align 8, !tbaa !9
  %1309 = load ptr, ptr %37, align 8, !tbaa !9
  %1310 = load ptr, ptr %27, align 8, !tbaa !9
  %1311 = load ptr, ptr %38, align 8, !tbaa !9
  %1312 = load i32, ptr %23, align 4, !tbaa !5
  call void @libxsmm_gemm_batch(i32 noundef 0, i32 noundef 0, ptr noundef %18, ptr noundef %19, i32 noundef %1303, i32 noundef %1304, i32 noundef %1305, ptr noundef %16, ptr noundef %1306, ptr noundef %10, ptr noundef %1307, ptr noundef %1308, ptr noundef %11, ptr noundef %1309, ptr noundef %17, ptr noundef %1310, ptr noundef %12, ptr noundef %1311, i32 noundef 4, i32 noundef 0, i32 noundef %1312, i32 noundef 0)
  store i32 0, ptr %51, align 4, !tbaa !5
  br label %1313

1313:                                             ; preds = %1343, %1302
  %1314 = load i32, ptr %51, align 4, !tbaa !5
  %1315 = load i32, ptr %23, align 4, !tbaa !5
  %1316 = icmp slt i32 %1314, %1315
  br i1 %1316, label %1317, label %1346

1317:                                             ; preds = %1313
  %1318 = call ptr @libxsmm_original_dgemm()
  %1319 = load ptr, ptr %25, align 8, !tbaa !9
  %1320 = load ptr, ptr %36, align 8, !tbaa !9
  %1321 = load i32, ptr %51, align 4, !tbaa !5
  %1322 = sext i32 %1321 to i64
  %1323 = getelementptr inbounds i32, ptr %1320, i64 %1322
  %1324 = load i32, ptr %1323, align 4, !tbaa !5
  %1325 = sext i32 %1324 to i64
  %1326 = getelementptr inbounds double, ptr %1319, i64 %1325
  %1327 = load ptr, ptr %26, align 8, !tbaa !9
  %1328 = load ptr, ptr %37, align 8, !tbaa !9
  %1329 = load i32, ptr %51, align 4, !tbaa !5
  %1330 = sext i32 %1329 to i64
  %1331 = getelementptr inbounds i32, ptr %1328, i64 %1330
  %1332 = load i32, ptr %1331, align 4, !tbaa !5
  %1333 = sext i32 %1332 to i64
  %1334 = getelementptr inbounds double, ptr %1327, i64 %1333
  %1335 = load ptr, ptr %28, align 8, !tbaa !9
  %1336 = load ptr, ptr %38, align 8, !tbaa !9
  %1337 = load i32, ptr %51, align 4, !tbaa !5
  %1338 = sext i32 %1337 to i64
  %1339 = getelementptr inbounds i32, ptr %1336, i64 %1338
  %1340 = load i32, ptr %1339, align 4, !tbaa !5
  %1341 = sext i32 %1340 to i64
  %1342 = getelementptr inbounds double, ptr %1335, i64 %1341
  call void %1318(ptr noundef %18, ptr noundef %19, ptr noundef %7, ptr noundef %8, ptr noundef %9, ptr noundef %16, ptr noundef %1326, ptr noundef %10, ptr noundef %1334, ptr noundef %11, ptr noundef %17, ptr noundef %1342, ptr noundef %12)
  br label %1343

1343:                                             ; preds = %1317
  %1344 = load i32, ptr %51, align 4, !tbaa !5
  %1345 = add nsw i32 %1344, 1
  store i32 %1345, ptr %51, align 4, !tbaa !5
  br label %1313, !llvm.loop !41

1346:                                             ; preds = %1313
  %1347 = load i32, ptr %7, align 4, !tbaa !5
  %1348 = load i32, ptr %8, align 4, !tbaa !5
  %1349 = load ptr, ptr %28, align 8, !tbaa !9
  %1350 = load ptr, ptr %27, align 8, !tbaa !9
  %1351 = call i32 @libxsmm_matdiff(ptr noundef %50, i32 noundef 0, i32 noundef %1347, i32 noundef %1348, ptr noundef %1349, ptr noundef %1350, ptr noundef %12, ptr noundef %12)
  store i32 %1351, ptr %47, align 4, !tbaa !5
  %1352 = load i32, ptr %47, align 4, !tbaa !5
  %1353 = icmp eq i32 0, %1352
  br i1 %1353, label %1354, label %1370

1354:                                             ; preds = %1346
  call void @llvm.lifetime.start.p0(i64 8, ptr %112) #5
  %1355 = call double @libxsmm_matdiff_epsilon(ptr noundef %50)
  store double %1355, ptr %112, align 8, !tbaa !11
  br label %1356

1356:                                             ; preds = %1354
  br label %1357

1357:                                             ; preds = %1356
  br label %1358

1358:                                             ; preds = %1357
  %1359 = load double, ptr %112, align 8, !tbaa !11
  %1360 = fcmp oge double 7.000000e-04, %1359
  br i1 %1360, label %1361, label %1365

1361:                                             ; preds = %1358
  br label %1362

1362:                                             ; preds = %1361
  br label %1363

1363:                                             ; preds = %1362
  br label %1364

1364:                                             ; preds = %1363
  br label %1369

1365:                                             ; preds = %1358
  br label %1366

1366:                                             ; preds = %1365
  br label %1367

1367:                                             ; preds = %1366
  br label %1368

1368:                                             ; preds = %1367
  store i32 1, ptr %47, align 4, !tbaa !5
  br label %1369

1369:                                             ; preds = %1368, %1364
  call void @llvm.lifetime.end.p0(i64 8, ptr %112) #5
  br label %1370

1370:                                             ; preds = %1369, %1346
  br label %1371

1371:                                             ; preds = %1370, %1299
  %1372 = load i32, ptr %47, align 4, !tbaa !5
  %1373 = icmp eq i32 0, %1372
  br i1 %1373, label %1374, label %1443

1374:                                             ; preds = %1371
  %1375 = load i32, ptr %7, align 4, !tbaa !5
  %1376 = load i32, ptr %8, align 4, !tbaa !5
  %1377 = load i32, ptr %9, align 4, !tbaa !5
  %1378 = load ptr, ptr %25, align 8, !tbaa !9
  %1379 = load ptr, ptr %36, align 8, !tbaa !9
  %1380 = load ptr, ptr %26, align 8, !tbaa !9
  %1381 = load ptr, ptr %37, align 8, !tbaa !9
  %1382 = load ptr, ptr %27, align 8, !tbaa !9
  %1383 = load ptr, ptr %38, align 8, !tbaa !9
  %1384 = load i32, ptr %23, align 4, !tbaa !5
  call void @libxsmm_gemm_batch(i32 noundef 0, i32 noundef 0, ptr noundef %18, ptr noundef %19, i32 noundef %1375, i32 noundef %1376, i32 noundef %1377, ptr noundef %16, ptr noundef %1378, ptr noundef %10, ptr noundef %1379, ptr noundef %1380, ptr noundef %11, ptr noundef %1381, ptr noundef %17, ptr noundef %1382, ptr noundef %12, ptr noundef %1383, i32 noundef 4, i32 noundef 0, i32 noundef %1384, i32 noundef 1)
  store i32 0, ptr %51, align 4, !tbaa !5
  br label %1385

1385:                                             ; preds = %1415, %1374
  %1386 = load i32, ptr %51, align 4, !tbaa !5
  %1387 = load i32, ptr %23, align 4, !tbaa !5
  %1388 = icmp slt i32 %1386, %1387
  br i1 %1388, label %1389, label %1418

1389:                                             ; preds = %1385
  %1390 = call ptr @libxsmm_original_dgemm()
  %1391 = load ptr, ptr %25, align 8, !tbaa !9
  %1392 = load ptr, ptr %36, align 8, !tbaa !9
  %1393 = load i32, ptr %51, align 4, !tbaa !5
  %1394 = sext i32 %1393 to i64
  %1395 = getelementptr inbounds i32, ptr %1392, i64 %1394
  %1396 = load i32, ptr %1395, align 4, !tbaa !5
  %1397 = sext i32 %1396 to i64
  %1398 = getelementptr inbounds double, ptr %1391, i64 %1397
  %1399 = load ptr, ptr %26, align 8, !tbaa !9
  %1400 = load ptr, ptr %37, align 8, !tbaa !9
  %1401 = load i32, ptr %51, align 4, !tbaa !5
  %1402 = sext i32 %1401 to i64
  %1403 = getelementptr inbounds i32, ptr %1400, i64 %1402
  %1404 = load i32, ptr %1403, align 4, !tbaa !5
  %1405 = sext i32 %1404 to i64
  %1406 = getelementptr inbounds double, ptr %1399, i64 %1405
  %1407 = load ptr, ptr %28, align 8, !tbaa !9
  %1408 = load ptr, ptr %38, align 8, !tbaa !9
  %1409 = load i32, ptr %51, align 4, !tbaa !5
  %1410 = sext i32 %1409 to i64
  %1411 = getelementptr inbounds i32, ptr %1408, i64 %1410
  %1412 = load i32, ptr %1411, align 4, !tbaa !5
  %1413 = sext i32 %1412 to i64
  %1414 = getelementptr inbounds double, ptr %1407, i64 %1413
  call void %1390(ptr noundef %18, ptr noundef %19, ptr noundef %7, ptr noundef %8, ptr noundef %9, ptr noundef %16, ptr noundef %1398, ptr noundef %10, ptr noundef %1406, ptr noundef %11, ptr noundef %17, ptr noundef %1414, ptr noundef %12)
  br label %1415

1415:                                             ; preds = %1389
  %1416 = load i32, ptr %51, align 4, !tbaa !5
  %1417 = add nsw i32 %1416, 1
  store i32 %1417, ptr %51, align 4, !tbaa !5
  br label %1385, !llvm.loop !42

1418:                                             ; preds = %1385
  %1419 = load i32, ptr %7, align 4, !tbaa !5
  %1420 = load i32, ptr %8, align 4, !tbaa !5
  %1421 = load ptr, ptr %28, align 8, !tbaa !9
  %1422 = load ptr, ptr %27, align 8, !tbaa !9
  %1423 = call i32 @libxsmm_matdiff(ptr noundef %50, i32 noundef 0, i32 noundef %1419, i32 noundef %1420, ptr noundef %1421, ptr noundef %1422, ptr noundef %12, ptr noundef %12)
  store i32 %1423, ptr %47, align 4, !tbaa !5
  %1424 = load i32, ptr %47, align 4, !tbaa !5
  %1425 = icmp eq i32 0, %1424
  br i1 %1425, label %1426, label %1442

1426:                                             ; preds = %1418
  call void @llvm.lifetime.start.p0(i64 8, ptr %113) #5
  %1427 = call double @libxsmm_matdiff_epsilon(ptr noundef %50)
  store double %1427, ptr %113, align 8, !tbaa !11
  br label %1428

1428:                                             ; preds = %1426
  br label %1429

1429:                                             ; preds = %1428
  br label %1430

1430:                                             ; preds = %1429
  %1431 = load double, ptr %113, align 8, !tbaa !11
  %1432 = fcmp oge double 7.000000e-04, %1431
  br i1 %1432, label %1433, label %1437

1433:                                             ; preds = %1430
  br label %1434

1434:                                             ; preds = %1433
  br label %1435

1435:                                             ; preds = %1434
  br label %1436

1436:                                             ; preds = %1435
  br label %1441

1437:                                             ; preds = %1430
  br label %1438

1438:                                             ; preds = %1437
  br label %1439

1439:                                             ; preds = %1438
  br label %1440

1440:                                             ; preds = %1439
  store i32 1, ptr %47, align 4, !tbaa !5
  br label %1441

1441:                                             ; preds = %1440, %1436
  call void @llvm.lifetime.end.p0(i64 8, ptr %113) #5
  br label %1442

1442:                                             ; preds = %1441, %1418
  br label %1443

1443:                                             ; preds = %1442, %1371
  %1444 = load i32, ptr %47, align 4, !tbaa !5
  %1445 = icmp eq i32 0, %1444
  br i1 %1445, label %1446, label %1515

1446:                                             ; preds = %1443
  %1447 = load i32, ptr %7, align 4, !tbaa !5
  %1448 = load i32, ptr %8, align 4, !tbaa !5
  %1449 = load i32, ptr %9, align 4, !tbaa !5
  %1450 = load ptr, ptr %25, align 8, !tbaa !9
  %1451 = load ptr, ptr %36, align 8, !tbaa !9
  %1452 = load ptr, ptr %26, align 8, !tbaa !9
  %1453 = load ptr, ptr %37, align 8, !tbaa !9
  %1454 = load ptr, ptr %27, align 8, !tbaa !9
  %1455 = load ptr, ptr %38, align 8, !tbaa !9
  %1456 = load i32, ptr %23, align 4, !tbaa !5
  call void @libxsmm_gemm_batch(i32 noundef 0, i32 noundef 0, ptr noundef %18, ptr noundef %19, i32 noundef %1447, i32 noundef %1448, i32 noundef %1449, ptr noundef %16, ptr noundef %1450, ptr noundef %10, ptr noundef %1451, ptr noundef %1452, ptr noundef %11, ptr noundef %1453, ptr noundef %17, ptr noundef %1454, ptr noundef %12, ptr noundef %1455, i32 noundef 4, i32 noundef 0, i32 noundef %1456, i32 noundef 0)
  store i32 0, ptr %51, align 4, !tbaa !5
  br label %1457

1457:                                             ; preds = %1487, %1446
  %1458 = load i32, ptr %51, align 4, !tbaa !5
  %1459 = load i32, ptr %23, align 4, !tbaa !5
  %1460 = icmp slt i32 %1458, %1459
  br i1 %1460, label %1461, label %1490

1461:                                             ; preds = %1457
  %1462 = call ptr @libxsmm_original_dgemm()
  %1463 = load ptr, ptr %25, align 8, !tbaa !9
  %1464 = load ptr, ptr %36, align 8, !tbaa !9
  %1465 = load i32, ptr %51, align 4, !tbaa !5
  %1466 = sext i32 %1465 to i64
  %1467 = getelementptr inbounds i32, ptr %1464, i64 %1466
  %1468 = load i32, ptr %1467, align 4, !tbaa !5
  %1469 = sext i32 %1468 to i64
  %1470 = getelementptr inbounds double, ptr %1463, i64 %1469
  %1471 = load ptr, ptr %26, align 8, !tbaa !9
  %1472 = load ptr, ptr %37, align 8, !tbaa !9
  %1473 = load i32, ptr %51, align 4, !tbaa !5
  %1474 = sext i32 %1473 to i64
  %1475 = getelementptr inbounds i32, ptr %1472, i64 %1474
  %1476 = load i32, ptr %1475, align 4, !tbaa !5
  %1477 = sext i32 %1476 to i64
  %1478 = getelementptr inbounds double, ptr %1471, i64 %1477
  %1479 = load ptr, ptr %28, align 8, !tbaa !9
  %1480 = load ptr, ptr %38, align 8, !tbaa !9
  %1481 = load i32, ptr %51, align 4, !tbaa !5
  %1482 = sext i32 %1481 to i64
  %1483 = getelementptr inbounds i32, ptr %1480, i64 %1482
  %1484 = load i32, ptr %1483, align 4, !tbaa !5
  %1485 = sext i32 %1484 to i64
  %1486 = getelementptr inbounds double, ptr %1479, i64 %1485
  call void %1462(ptr noundef %18, ptr noundef %19, ptr noundef %7, ptr noundef %8, ptr noundef %9, ptr noundef %16, ptr noundef %1470, ptr noundef %10, ptr noundef %1478, ptr noundef %11, ptr noundef %17, ptr noundef %1486, ptr noundef %12)
  br label %1487

1487:                                             ; preds = %1461
  %1488 = load i32, ptr %51, align 4, !tbaa !5
  %1489 = add nsw i32 %1488, 1
  store i32 %1489, ptr %51, align 4, !tbaa !5
  br label %1457, !llvm.loop !43

1490:                                             ; preds = %1457
  call void @libxsmm_matdiff_reduce(ptr noundef %49, ptr noundef %50)
  %1491 = load i32, ptr %7, align 4, !tbaa !5
  %1492 = load i32, ptr %8, align 4, !tbaa !5
  %1493 = load ptr, ptr %28, align 8, !tbaa !9
  %1494 = load ptr, ptr %27, align 8, !tbaa !9
  %1495 = call i32 @libxsmm_matdiff(ptr noundef %50, i32 noundef 0, i32 noundef %1491, i32 noundef %1492, ptr noundef %1493, ptr noundef %1494, ptr noundef %12, ptr noundef %12)
  store i32 %1495, ptr %47, align 4, !tbaa !5
  %1496 = load i32, ptr %47, align 4, !tbaa !5
  %1497 = icmp eq i32 0, %1496
  br i1 %1497, label %1498, label %1514

1498:                                             ; preds = %1490
  call void @llvm.lifetime.start.p0(i64 8, ptr %114) #5
  %1499 = call double @libxsmm_matdiff_epsilon(ptr noundef %50)
  store double %1499, ptr %114, align 8, !tbaa !11
  br label %1500

1500:                                             ; preds = %1498
  br label %1501

1501:                                             ; preds = %1500
  br label %1502

1502:                                             ; preds = %1501
  %1503 = load double, ptr %114, align 8, !tbaa !11
  %1504 = fcmp oge double 7.000000e-04, %1503
  br i1 %1504, label %1505, label %1509

1505:                                             ; preds = %1502
  br label %1506

1506:                                             ; preds = %1505
  br label %1507

1507:                                             ; preds = %1506
  br label %1508

1508:                                             ; preds = %1507
  br label %1513

1509:                                             ; preds = %1502
  br label %1510

1510:                                             ; preds = %1509
  br label %1511

1511:                                             ; preds = %1510
  br label %1512

1512:                                             ; preds = %1511
  store i32 1, ptr %47, align 4, !tbaa !5
  br label %1513

1513:                                             ; preds = %1512, %1508
  call void @llvm.lifetime.end.p0(i64 8, ptr %114) #5
  br label %1514

1514:                                             ; preds = %1513, %1490
  br label %1515

1515:                                             ; preds = %1514, %1443
  %1516 = load i32, ptr %47, align 4, !tbaa !5
  %1517 = icmp eq i32 0, %1516
  br i1 %1517, label %1518, label %1587

1518:                                             ; preds = %1515
  %1519 = load i32, ptr %7, align 4, !tbaa !5
  %1520 = load i32, ptr %8, align 4, !tbaa !5
  %1521 = load i32, ptr %9, align 4, !tbaa !5
  %1522 = load ptr, ptr %25, align 8, !tbaa !9
  %1523 = load ptr, ptr %36, align 8, !tbaa !9
  %1524 = load ptr, ptr %26, align 8, !tbaa !9
  %1525 = load ptr, ptr %37, align 8, !tbaa !9
  %1526 = load ptr, ptr %27, align 8, !tbaa !9
  %1527 = load ptr, ptr %38, align 8, !tbaa !9
  %1528 = load i32, ptr %23, align 4, !tbaa !5
  call void @libxsmm_gemm_batch(i32 noundef 0, i32 noundef 0, ptr noundef %18, ptr noundef %19, i32 noundef %1519, i32 noundef %1520, i32 noundef %1521, ptr noundef %16, ptr noundef %1522, ptr noundef %10, ptr noundef %1523, ptr noundef %1524, ptr noundef %11, ptr noundef %1525, ptr noundef %17, ptr noundef %1526, ptr noundef %12, ptr noundef %1527, i32 noundef 4, i32 noundef 0, i32 noundef %1528, i32 noundef 1)
  store i32 0, ptr %51, align 4, !tbaa !5
  br label %1529

1529:                                             ; preds = %1559, %1518
  %1530 = load i32, ptr %51, align 4, !tbaa !5
  %1531 = load i32, ptr %23, align 4, !tbaa !5
  %1532 = icmp slt i32 %1530, %1531
  br i1 %1532, label %1533, label %1562

1533:                                             ; preds = %1529
  %1534 = call ptr @libxsmm_original_dgemm()
  %1535 = load ptr, ptr %25, align 8, !tbaa !9
  %1536 = load ptr, ptr %36, align 8, !tbaa !9
  %1537 = load i32, ptr %51, align 4, !tbaa !5
  %1538 = sext i32 %1537 to i64
  %1539 = getelementptr inbounds i32, ptr %1536, i64 %1538
  %1540 = load i32, ptr %1539, align 4, !tbaa !5
  %1541 = sext i32 %1540 to i64
  %1542 = getelementptr inbounds double, ptr %1535, i64 %1541
  %1543 = load ptr, ptr %26, align 8, !tbaa !9
  %1544 = load ptr, ptr %37, align 8, !tbaa !9
  %1545 = load i32, ptr %51, align 4, !tbaa !5
  %1546 = sext i32 %1545 to i64
  %1547 = getelementptr inbounds i32, ptr %1544, i64 %1546
  %1548 = load i32, ptr %1547, align 4, !tbaa !5
  %1549 = sext i32 %1548 to i64
  %1550 = getelementptr inbounds double, ptr %1543, i64 %1549
  %1551 = load ptr, ptr %28, align 8, !tbaa !9
  %1552 = load ptr, ptr %38, align 8, !tbaa !9
  %1553 = load i32, ptr %51, align 4, !tbaa !5
  %1554 = sext i32 %1553 to i64
  %1555 = getelementptr inbounds i32, ptr %1552, i64 %1554
  %1556 = load i32, ptr %1555, align 4, !tbaa !5
  %1557 = sext i32 %1556 to i64
  %1558 = getelementptr inbounds double, ptr %1551, i64 %1557
  call void %1534(ptr noundef %18, ptr noundef %19, ptr noundef %7, ptr noundef %8, ptr noundef %9, ptr noundef %16, ptr noundef %1542, ptr noundef %10, ptr noundef %1550, ptr noundef %11, ptr noundef %17, ptr noundef %1558, ptr noundef %12)
  br label %1559

1559:                                             ; preds = %1533
  %1560 = load i32, ptr %51, align 4, !tbaa !5
  %1561 = add nsw i32 %1560, 1
  store i32 %1561, ptr %51, align 4, !tbaa !5
  br label %1529, !llvm.loop !44

1562:                                             ; preds = %1529
  call void @libxsmm_matdiff_reduce(ptr noundef %49, ptr noundef %50)
  %1563 = load i32, ptr %7, align 4, !tbaa !5
  %1564 = load i32, ptr %8, align 4, !tbaa !5
  %1565 = load ptr, ptr %28, align 8, !tbaa !9
  %1566 = load ptr, ptr %27, align 8, !tbaa !9
  %1567 = call i32 @libxsmm_matdiff(ptr noundef %50, i32 noundef 0, i32 noundef %1563, i32 noundef %1564, ptr noundef %1565, ptr noundef %1566, ptr noundef %12, ptr noundef %12)
  store i32 %1567, ptr %47, align 4, !tbaa !5
  %1568 = load i32, ptr %47, align 4, !tbaa !5
  %1569 = icmp eq i32 0, %1568
  br i1 %1569, label %1570, label %1586

1570:                                             ; preds = %1562
  call void @llvm.lifetime.start.p0(i64 8, ptr %115) #5
  %1571 = call double @libxsmm_matdiff_epsilon(ptr noundef %50)
  store double %1571, ptr %115, align 8, !tbaa !11
  br label %1572

1572:                                             ; preds = %1570
  br label %1573

1573:                                             ; preds = %1572
  br label %1574

1574:                                             ; preds = %1573
  %1575 = load double, ptr %115, align 8, !tbaa !11
  %1576 = fcmp oge double 7.000000e-04, %1575
  br i1 %1576, label %1577, label %1581

1577:                                             ; preds = %1574
  br label %1578

1578:                                             ; preds = %1577
  br label %1579

1579:                                             ; preds = %1578
  br label %1580

1580:                                             ; preds = %1579
  br label %1585

1581:                                             ; preds = %1574
  br label %1582

1582:                                             ; preds = %1581
  br label %1583

1583:                                             ; preds = %1582
  br label %1584

1584:                                             ; preds = %1583
  store i32 1, ptr %47, align 4, !tbaa !5
  br label %1585

1585:                                             ; preds = %1584, %1580
  call void @llvm.lifetime.end.p0(i64 8, ptr %115) #5
  br label %1586

1586:                                             ; preds = %1585, %1562
  br label %1587

1587:                                             ; preds = %1586, %1515
  %1588 = load i32, ptr %47, align 4, !tbaa !5
  %1589 = icmp eq i32 0, %1588
  br i1 %1589, label %1590, label %1704

1590:                                             ; preds = %1587
  call void @llvm.lifetime.start.p0(i64 4, ptr %116) #5
  store i32 8, ptr %116, align 4, !tbaa !5
  store i32 0, ptr %51, align 4, !tbaa !5
  br label %1591

1591:                                             ; preds = %1644, %1590
  %1592 = load i32, ptr %51, align 4, !tbaa !5
  %1593 = load i32, ptr %23, align 4, !tbaa !5
  %1594 = icmp slt i32 %1592, %1593
  br i1 %1594, label %1595, label %1647

1595:                                             ; preds = %1591
  %1596 = load ptr, ptr %25, align 8, !tbaa !9
  %1597 = load ptr, ptr %36, align 8, !tbaa !9
  %1598 = load i32, ptr %51, align 4, !tbaa !5
  %1599 = sext i32 %1598 to i64
  %1600 = getelementptr inbounds i32, ptr %1597, i64 %1599
  %1601 = load i32, ptr %1600, align 4, !tbaa !5
  %1602 = sext i32 %1601 to i64
  %1603 = getelementptr inbounds double, ptr %1596, i64 %1602
  %1604 = load ptr, ptr %41, align 8, !tbaa !9
  %1605 = load i32, ptr %51, align 4, !tbaa !5
  %1606 = sext i32 %1605 to i64
  %1607 = getelementptr inbounds ptr, ptr %1604, i64 %1606
  store ptr %1603, ptr %1607, align 8, !tbaa !9
  %1608 = load ptr, ptr %26, align 8, !tbaa !9
  %1609 = load ptr, ptr %37, align 8, !tbaa !9
  %1610 = load i32, ptr %51, align 4, !tbaa !5
  %1611 = sext i32 %1610 to i64
  %1612 = getelementptr inbounds i32, ptr %1609, i64 %1611
  %1613 = load i32, ptr %1612, align 4, !tbaa !5
  %1614 = sext i32 %1613 to i64
  %1615 = getelementptr inbounds double, ptr %1608, i64 %1614
  %1616 = load ptr, ptr %42, align 8, !tbaa !9
  %1617 = load i32, ptr %51, align 4, !tbaa !5
  %1618 = sext i32 %1617 to i64
  %1619 = getelementptr inbounds ptr, ptr %1616, i64 %1618
  store ptr %1615, ptr %1619, align 8, !tbaa !9
  %1620 = load ptr, ptr %27, align 8, !tbaa !9
  %1621 = load ptr, ptr %38, align 8, !tbaa !9
  %1622 = load i32, ptr %51, align 4, !tbaa !5
  %1623 = sext i32 %1622 to i64
  %1624 = getelementptr inbounds i32, ptr %1621, i64 %1623
  %1625 = load i32, ptr %1624, align 4, !tbaa !5
  %1626 = sext i32 %1625 to i64
  %1627 = getelementptr inbounds double, ptr %1620, i64 %1626
  %1628 = load ptr, ptr %43, align 8, !tbaa !9
  %1629 = load i32, ptr %51, align 4, !tbaa !5
  %1630 = sext i32 %1629 to i64
  %1631 = getelementptr inbounds ptr, ptr %1628, i64 %1630
  store ptr %1627, ptr %1631, align 8, !tbaa !9
  %1632 = load ptr, ptr %28, align 8, !tbaa !9
  %1633 = load ptr, ptr %38, align 8, !tbaa !9
  %1634 = load i32, ptr %51, align 4, !tbaa !5
  %1635 = sext i32 %1634 to i64
  %1636 = getelementptr inbounds i32, ptr %1633, i64 %1635
  %1637 = load i32, ptr %1636, align 4, !tbaa !5
  %1638 = sext i32 %1637 to i64
  %1639 = getelementptr inbounds double, ptr %1632, i64 %1638
  %1640 = load ptr, ptr %44, align 8, !tbaa !9
  %1641 = load i32, ptr %51, align 4, !tbaa !5
  %1642 = sext i32 %1641 to i64
  %1643 = getelementptr inbounds ptr, ptr %1640, i64 %1642
  store ptr %1639, ptr %1643, align 8, !tbaa !9
  br label %1644

1644:                                             ; preds = %1595
  %1645 = load i32, ptr %51, align 4, !tbaa !5
  %1646 = add nsw i32 %1645, 1
  store i32 %1646, ptr %51, align 4, !tbaa !5
  br label %1591, !llvm.loop !45

1647:                                             ; preds = %1591
  %1648 = load i32, ptr %7, align 4, !tbaa !5
  %1649 = load i32, ptr %8, align 4, !tbaa !5
  %1650 = load i32, ptr %9, align 4, !tbaa !5
  %1651 = load ptr, ptr %41, align 8, !tbaa !9
  %1652 = load ptr, ptr %42, align 8, !tbaa !9
  %1653 = load ptr, ptr %43, align 8, !tbaa !9
  %1654 = load i32, ptr %23, align 4, !tbaa !5
  call void @libxsmm_gemm_batch(i32 noundef 0, i32 noundef 0, ptr noundef %18, ptr noundef %19, i32 noundef %1648, i32 noundef %1649, i32 noundef %1650, ptr noundef %16, ptr noundef %1651, ptr noundef %10, ptr noundef %116, ptr noundef %1652, ptr noundef %11, ptr noundef %116, ptr noundef %17, ptr noundef %1653, ptr noundef %12, ptr noundef %116, i32 noundef 0, i32 noundef 0, i32 noundef %1654, i32 noundef 0)
  store i32 0, ptr %51, align 4, !tbaa !5
  br label %1655

1655:                                             ; preds = %1676, %1647
  %1656 = load i32, ptr %51, align 4, !tbaa !5
  %1657 = load i32, ptr %23, align 4, !tbaa !5
  %1658 = icmp slt i32 %1656, %1657
  br i1 %1658, label %1659, label %1679

1659:                                             ; preds = %1655
  %1660 = call ptr @libxsmm_original_dgemm()
  %1661 = load ptr, ptr %41, align 8, !tbaa !9
  %1662 = load i32, ptr %51, align 4, !tbaa !5
  %1663 = sext i32 %1662 to i64
  %1664 = getelementptr inbounds ptr, ptr %1661, i64 %1663
  %1665 = load ptr, ptr %1664, align 8, !tbaa !9
  %1666 = load ptr, ptr %42, align 8, !tbaa !9
  %1667 = load i32, ptr %51, align 4, !tbaa !5
  %1668 = sext i32 %1667 to i64
  %1669 = getelementptr inbounds ptr, ptr %1666, i64 %1668
  %1670 = load ptr, ptr %1669, align 8, !tbaa !9
  %1671 = load ptr, ptr %44, align 8, !tbaa !9
  %1672 = load i32, ptr %51, align 4, !tbaa !5
  %1673 = sext i32 %1672 to i64
  %1674 = getelementptr inbounds ptr, ptr %1671, i64 %1673
  %1675 = load ptr, ptr %1674, align 8, !tbaa !9
  call void %1660(ptr noundef %18, ptr noundef %19, ptr noundef %7, ptr noundef %8, ptr noundef %9, ptr noundef %16, ptr noundef %1665, ptr noundef %10, ptr noundef %1670, ptr noundef %11, ptr noundef %17, ptr noundef %1675, ptr noundef %12)
  br label %1676

1676:                                             ; preds = %1659
  %1677 = load i32, ptr %51, align 4, !tbaa !5
  %1678 = add nsw i32 %1677, 1
  store i32 %1678, ptr %51, align 4, !tbaa !5
  br label %1655, !llvm.loop !46

1679:                                             ; preds = %1655
  call void @libxsmm_matdiff_reduce(ptr noundef %49, ptr noundef %50)
  %1680 = load i32, ptr %7, align 4, !tbaa !5
  %1681 = load i32, ptr %8, align 4, !tbaa !5
  %1682 = load ptr, ptr %28, align 8, !tbaa !9
  %1683 = load ptr, ptr %27, align 8, !tbaa !9
  %1684 = call i32 @libxsmm_matdiff(ptr noundef %50, i32 noundef 0, i32 noundef %1680, i32 noundef %1681, ptr noundef %1682, ptr noundef %1683, ptr noundef %12, ptr noundef %12)
  store i32 %1684, ptr %47, align 4, !tbaa !5
  %1685 = load i32, ptr %47, align 4, !tbaa !5
  %1686 = icmp eq i32 0, %1685
  br i1 %1686, label %1687, label %1703

1687:                                             ; preds = %1679
  call void @llvm.lifetime.start.p0(i64 8, ptr %117) #5
  %1688 = call double @libxsmm_matdiff_epsilon(ptr noundef %50)
  store double %1688, ptr %117, align 8, !tbaa !11
  br label %1689

1689:                                             ; preds = %1687
  br label %1690

1690:                                             ; preds = %1689
  br label %1691

1691:                                             ; preds = %1690
  %1692 = load double, ptr %117, align 8, !tbaa !11
  %1693 = fcmp oge double 7.000000e-04, %1692
  br i1 %1693, label %1694, label %1698

1694:                                             ; preds = %1691
  br label %1695

1695:                                             ; preds = %1694
  br label %1696

1696:                                             ; preds = %1695
  br label %1697

1697:                                             ; preds = %1696
  br label %1702

1698:                                             ; preds = %1691
  br label %1699

1699:                                             ; preds = %1698
  br label %1700

1700:                                             ; preds = %1699
  br label %1701

1701:                                             ; preds = %1700
  store i32 1, ptr %47, align 4, !tbaa !5
  br label %1702

1702:                                             ; preds = %1701, %1697
  call void @llvm.lifetime.end.p0(i64 8, ptr %117) #5
  br label %1703

1703:                                             ; preds = %1702, %1679
  call void @llvm.lifetime.end.p0(i64 4, ptr %116) #5
  br label %1704

1704:                                             ; preds = %1703, %1587
  %1705 = load i32, ptr %47, align 4, !tbaa !5
  %1706 = icmp eq i32 0, %1705
  br i1 %1706, label %1707, label %1764

1707:                                             ; preds = %1704
  call void @llvm.lifetime.start.p0(i64 4, ptr %118) #5
  store i32 8, ptr %118, align 4, !tbaa !5
  %1708 = load i32, ptr %7, align 4, !tbaa !5
  %1709 = load i32, ptr %8, align 4, !tbaa !5
  %1710 = load i32, ptr %9, align 4, !tbaa !5
  %1711 = load ptr, ptr %41, align 8, !tbaa !9
  %1712 = load ptr, ptr %42, align 8, !tbaa !9
  %1713 = load ptr, ptr %43, align 8, !tbaa !9
  %1714 = load i32, ptr %23, align 4, !tbaa !5
  call void @libxsmm_gemm_batch(i32 noundef 0, i32 noundef 0, ptr noundef %18, ptr noundef %19, i32 noundef %1708, i32 noundef %1709, i32 noundef %1710, ptr noundef %16, ptr noundef %1711, ptr noundef %10, ptr noundef %118, ptr noundef %1712, ptr noundef %11, ptr noundef %118, ptr noundef %17, ptr noundef %1713, ptr noundef %12, ptr noundef %118, i32 noundef 0, i32 noundef 0, i32 noundef %1714, i32 noundef 1)
  store i32 0, ptr %51, align 4, !tbaa !5
  br label %1715

1715:                                             ; preds = %1736, %1707
  %1716 = load i32, ptr %51, align 4, !tbaa !5
  %1717 = load i32, ptr %23, align 4, !tbaa !5
  %1718 = icmp slt i32 %1716, %1717
  br i1 %1718, label %1719, label %1739

1719:                                             ; preds = %1715
  %1720 = call ptr @libxsmm_original_dgemm()
  %1721 = load ptr, ptr %41, align 8, !tbaa !9
  %1722 = load i32, ptr %51, align 4, !tbaa !5
  %1723 = sext i32 %1722 to i64
  %1724 = getelementptr inbounds ptr, ptr %1721, i64 %1723
  %1725 = load ptr, ptr %1724, align 8, !tbaa !9
  %1726 = load ptr, ptr %42, align 8, !tbaa !9
  %1727 = load i32, ptr %51, align 4, !tbaa !5
  %1728 = sext i32 %1727 to i64
  %1729 = getelementptr inbounds ptr, ptr %1726, i64 %1728
  %1730 = load ptr, ptr %1729, align 8, !tbaa !9
  %1731 = load ptr, ptr %44, align 8, !tbaa !9
  %1732 = load i32, ptr %51, align 4, !tbaa !5
  %1733 = sext i32 %1732 to i64
  %1734 = getelementptr inbounds ptr, ptr %1731, i64 %1733
  %1735 = load ptr, ptr %1734, align 8, !tbaa !9
  call void %1720(ptr noundef %18, ptr noundef %19, ptr noundef %7, ptr noundef %8, ptr noundef %9, ptr noundef %16, ptr noundef %1725, ptr noundef %10, ptr noundef %1730, ptr noundef %11, ptr noundef %17, ptr noundef %1735, ptr noundef %12)
  br label %1736

1736:                                             ; preds = %1719
  %1737 = load i32, ptr %51, align 4, !tbaa !5
  %1738 = add nsw i32 %1737, 1
  store i32 %1738, ptr %51, align 4, !tbaa !5
  br label %1715, !llvm.loop !47

1739:                                             ; preds = %1715
  call void @libxsmm_matdiff_reduce(ptr noundef %49, ptr noundef %50)
  %1740 = load i32, ptr %7, align 4, !tbaa !5
  %1741 = load i32, ptr %8, align 4, !tbaa !5
  %1742 = load ptr, ptr %28, align 8, !tbaa !9
  %1743 = load ptr, ptr %27, align 8, !tbaa !9
  %1744 = call i32 @libxsmm_matdiff(ptr noundef %50, i32 noundef 0, i32 noundef %1740, i32 noundef %1741, ptr noundef %1742, ptr noundef %1743, ptr noundef %12, ptr noundef %12)
  store i32 %1744, ptr %47, align 4, !tbaa !5
  %1745 = load i32, ptr %47, align 4, !tbaa !5
  %1746 = icmp eq i32 0, %1745
  br i1 %1746, label %1747, label %1763

1747:                                             ; preds = %1739
  call void @llvm.lifetime.start.p0(i64 8, ptr %119) #5
  %1748 = call double @libxsmm_matdiff_epsilon(ptr noundef %50)
  store double %1748, ptr %119, align 8, !tbaa !11
  br label %1749

1749:                                             ; preds = %1747
  br label %1750

1750:                                             ; preds = %1749
  br label %1751

1751:                                             ; preds = %1750
  %1752 = load double, ptr %119, align 8, !tbaa !11
  %1753 = fcmp oge double 7.000000e-04, %1752
  br i1 %1753, label %1754, label %1758

1754:                                             ; preds = %1751
  br label %1755

1755:                                             ; preds = %1754
  br label %1756

1756:                                             ; preds = %1755
  br label %1757

1757:                                             ; preds = %1756
  br label %1762

1758:                                             ; preds = %1751
  br label %1759

1759:                                             ; preds = %1758
  br label %1760

1760:                                             ; preds = %1759
  br label %1761

1761:                                             ; preds = %1760
  store i32 1, ptr %47, align 4, !tbaa !5
  br label %1762

1762:                                             ; preds = %1761, %1757
  call void @llvm.lifetime.end.p0(i64 8, ptr %119) #5
  br label %1763

1763:                                             ; preds = %1762, %1739
  call void @llvm.lifetime.end.p0(i64 4, ptr %118) #5
  br label %1764

1764:                                             ; preds = %1763, %1704
  %1765 = load i32, ptr %47, align 4, !tbaa !5
  %1766 = icmp eq i32 0, %1765
  br i1 %1766, label %1767, label %1824

1767:                                             ; preds = %1764
  call void @llvm.lifetime.start.p0(i64 4, ptr %120) #5
  store i32 8, ptr %120, align 4, !tbaa !5
  %1768 = load i32, ptr %7, align 4, !tbaa !5
  %1769 = load i32, ptr %8, align 4, !tbaa !5
  %1770 = load i32, ptr %9, align 4, !tbaa !5
  %1771 = load ptr, ptr %41, align 8, !tbaa !9
  %1772 = load ptr, ptr %42, align 8, !tbaa !9
  %1773 = load ptr, ptr %43, align 8, !tbaa !9
  %1774 = load i32, ptr %23, align 4, !tbaa !5
  call void @libxsmm_gemm_batch(i32 noundef 0, i32 noundef 0, ptr noundef %18, ptr noundef %19, i32 noundef %1768, i32 noundef %1769, i32 noundef %1770, ptr noundef %16, ptr noundef %1771, ptr noundef %10, ptr noundef %120, ptr noundef %1772, ptr noundef %11, ptr noundef %120, ptr noundef %17, ptr noundef %1773, ptr noundef %12, ptr noundef %120, i32 noundef 0, i32 noundef 0, i32 noundef %1774, i32 noundef 0)
  store i32 0, ptr %51, align 4, !tbaa !5
  br label %1775

1775:                                             ; preds = %1796, %1767
  %1776 = load i32, ptr %51, align 4, !tbaa !5
  %1777 = load i32, ptr %23, align 4, !tbaa !5
  %1778 = icmp slt i32 %1776, %1777
  br i1 %1778, label %1779, label %1799

1779:                                             ; preds = %1775
  %1780 = call ptr @libxsmm_original_dgemm()
  %1781 = load ptr, ptr %41, align 8, !tbaa !9
  %1782 = load i32, ptr %51, align 4, !tbaa !5
  %1783 = sext i32 %1782 to i64
  %1784 = getelementptr inbounds ptr, ptr %1781, i64 %1783
  %1785 = load ptr, ptr %1784, align 8, !tbaa !9
  %1786 = load ptr, ptr %42, align 8, !tbaa !9
  %1787 = load i32, ptr %51, align 4, !tbaa !5
  %1788 = sext i32 %1787 to i64
  %1789 = getelementptr inbounds ptr, ptr %1786, i64 %1788
  %1790 = load ptr, ptr %1789, align 8, !tbaa !9
  %1791 = load ptr, ptr %44, align 8, !tbaa !9
  %1792 = load i32, ptr %51, align 4, !tbaa !5
  %1793 = sext i32 %1792 to i64
  %1794 = getelementptr inbounds ptr, ptr %1791, i64 %1793
  %1795 = load ptr, ptr %1794, align 8, !tbaa !9
  call void %1780(ptr noundef %18, ptr noundef %19, ptr noundef %7, ptr noundef %8, ptr noundef %9, ptr noundef %16, ptr noundef %1785, ptr noundef %10, ptr noundef %1790, ptr noundef %11, ptr noundef %17, ptr noundef %1795, ptr noundef %12)
  br label %1796

1796:                                             ; preds = %1779
  %1797 = load i32, ptr %51, align 4, !tbaa !5
  %1798 = add nsw i32 %1797, 1
  store i32 %1798, ptr %51, align 4, !tbaa !5
  br label %1775, !llvm.loop !48

1799:                                             ; preds = %1775
  call void @libxsmm_matdiff_reduce(ptr noundef %49, ptr noundef %50)
  %1800 = load i32, ptr %7, align 4, !tbaa !5
  %1801 = load i32, ptr %8, align 4, !tbaa !5
  %1802 = load ptr, ptr %28, align 8, !tbaa !9
  %1803 = load ptr, ptr %27, align 8, !tbaa !9
  %1804 = call i32 @libxsmm_matdiff(ptr noundef %50, i32 noundef 0, i32 noundef %1800, i32 noundef %1801, ptr noundef %1802, ptr noundef %1803, ptr noundef %12, ptr noundef %12)
  store i32 %1804, ptr %47, align 4, !tbaa !5
  %1805 = load i32, ptr %47, align 4, !tbaa !5
  %1806 = icmp eq i32 0, %1805
  br i1 %1806, label %1807, label %1823

1807:                                             ; preds = %1799
  call void @llvm.lifetime.start.p0(i64 8, ptr %121) #5
  %1808 = call double @libxsmm_matdiff_epsilon(ptr noundef %50)
  store double %1808, ptr %121, align 8, !tbaa !11
  br label %1809

1809:                                             ; preds = %1807
  br label %1810

1810:                                             ; preds = %1809
  br label %1811

1811:                                             ; preds = %1810
  %1812 = load double, ptr %121, align 8, !tbaa !11
  %1813 = fcmp oge double 7.000000e-04, %1812
  br i1 %1813, label %1814, label %1818

1814:                                             ; preds = %1811
  br label %1815

1815:                                             ; preds = %1814
  br label %1816

1816:                                             ; preds = %1815
  br label %1817

1817:                                             ; preds = %1816
  br label %1822

1818:                                             ; preds = %1811
  br label %1819

1819:                                             ; preds = %1818
  br label %1820

1820:                                             ; preds = %1819
  br label %1821

1821:                                             ; preds = %1820
  store i32 1, ptr %47, align 4, !tbaa !5
  br label %1822

1822:                                             ; preds = %1821, %1817
  call void @llvm.lifetime.end.p0(i64 8, ptr %121) #5
  br label %1823

1823:                                             ; preds = %1822, %1799
  call void @llvm.lifetime.end.p0(i64 4, ptr %120) #5
  br label %1824

1824:                                             ; preds = %1823, %1764
  %1825 = load i32, ptr %47, align 4, !tbaa !5
  %1826 = icmp eq i32 0, %1825
  br i1 %1826, label %1827, label %1884

1827:                                             ; preds = %1824
  call void @llvm.lifetime.start.p0(i64 4, ptr %122) #5
  store i32 8, ptr %122, align 4, !tbaa !5
  %1828 = load i32, ptr %7, align 4, !tbaa !5
  %1829 = load i32, ptr %8, align 4, !tbaa !5
  %1830 = load i32, ptr %9, align 4, !tbaa !5
  %1831 = load ptr, ptr %41, align 8, !tbaa !9
  %1832 = load ptr, ptr %42, align 8, !tbaa !9
  %1833 = load ptr, ptr %43, align 8, !tbaa !9
  %1834 = load i32, ptr %23, align 4, !tbaa !5
  call void @libxsmm_gemm_batch(i32 noundef 0, i32 noundef 0, ptr noundef %18, ptr noundef %19, i32 noundef %1828, i32 noundef %1829, i32 noundef %1830, ptr noundef %16, ptr noundef %1831, ptr noundef %10, ptr noundef %122, ptr noundef %1832, ptr noundef %11, ptr noundef %122, ptr noundef %17, ptr noundef %1833, ptr noundef %12, ptr noundef %122, i32 noundef 0, i32 noundef 0, i32 noundef %1834, i32 noundef 1)
  store i32 0, ptr %51, align 4, !tbaa !5
  br label %1835

1835:                                             ; preds = %1856, %1827
  %1836 = load i32, ptr %51, align 4, !tbaa !5
  %1837 = load i32, ptr %23, align 4, !tbaa !5
  %1838 = icmp slt i32 %1836, %1837
  br i1 %1838, label %1839, label %1859

1839:                                             ; preds = %1835
  %1840 = call ptr @libxsmm_original_dgemm()
  %1841 = load ptr, ptr %41, align 8, !tbaa !9
  %1842 = load i32, ptr %51, align 4, !tbaa !5
  %1843 = sext i32 %1842 to i64
  %1844 = getelementptr inbounds ptr, ptr %1841, i64 %1843
  %1845 = load ptr, ptr %1844, align 8, !tbaa !9
  %1846 = load ptr, ptr %42, align 8, !tbaa !9
  %1847 = load i32, ptr %51, align 4, !tbaa !5
  %1848 = sext i32 %1847 to i64
  %1849 = getelementptr inbounds ptr, ptr %1846, i64 %1848
  %1850 = load ptr, ptr %1849, align 8, !tbaa !9
  %1851 = load ptr, ptr %44, align 8, !tbaa !9
  %1852 = load i32, ptr %51, align 4, !tbaa !5
  %1853 = sext i32 %1852 to i64
  %1854 = getelementptr inbounds ptr, ptr %1851, i64 %1853
  %1855 = load ptr, ptr %1854, align 8, !tbaa !9
  call void %1840(ptr noundef %18, ptr noundef %19, ptr noundef %7, ptr noundef %8, ptr noundef %9, ptr noundef %16, ptr noundef %1845, ptr noundef %10, ptr noundef %1850, ptr noundef %11, ptr noundef %17, ptr noundef %1855, ptr noundef %12)
  br label %1856

1856:                                             ; preds = %1839
  %1857 = load i32, ptr %51, align 4, !tbaa !5
  %1858 = add nsw i32 %1857, 1
  store i32 %1858, ptr %51, align 4, !tbaa !5
  br label %1835, !llvm.loop !49

1859:                                             ; preds = %1835
  call void @libxsmm_matdiff_reduce(ptr noundef %49, ptr noundef %50)
  %1860 = load i32, ptr %7, align 4, !tbaa !5
  %1861 = load i32, ptr %8, align 4, !tbaa !5
  %1862 = load ptr, ptr %28, align 8, !tbaa !9
  %1863 = load ptr, ptr %27, align 8, !tbaa !9
  %1864 = call i32 @libxsmm_matdiff(ptr noundef %50, i32 noundef 0, i32 noundef %1860, i32 noundef %1861, ptr noundef %1862, ptr noundef %1863, ptr noundef %12, ptr noundef %12)
  store i32 %1864, ptr %47, align 4, !tbaa !5
  %1865 = load i32, ptr %47, align 4, !tbaa !5
  %1866 = icmp eq i32 0, %1865
  br i1 %1866, label %1867, label %1883

1867:                                             ; preds = %1859
  call void @llvm.lifetime.start.p0(i64 8, ptr %123) #5
  %1868 = call double @libxsmm_matdiff_epsilon(ptr noundef %50)
  store double %1868, ptr %123, align 8, !tbaa !11
  br label %1869

1869:                                             ; preds = %1867
  br label %1870

1870:                                             ; preds = %1869
  br label %1871

1871:                                             ; preds = %1870
  %1872 = load double, ptr %123, align 8, !tbaa !11
  %1873 = fcmp oge double 7.000000e-04, %1872
  br i1 %1873, label %1874, label %1878

1874:                                             ; preds = %1871
  br label %1875

1875:                                             ; preds = %1874
  br label %1876

1876:                                             ; preds = %1875
  br label %1877

1877:                                             ; preds = %1876
  br label %1882

1878:                                             ; preds = %1871
  br label %1879

1879:                                             ; preds = %1878
  br label %1880

1880:                                             ; preds = %1879
  br label %1881

1881:                                             ; preds = %1880
  store i32 1, ptr %47, align 4, !tbaa !5
  br label %1882

1882:                                             ; preds = %1881, %1877
  call void @llvm.lifetime.end.p0(i64 8, ptr %123) #5
  br label %1883

1883:                                             ; preds = %1882, %1859
  call void @llvm.lifetime.end.p0(i64 4, ptr %122) #5
  br label %1884

1884:                                             ; preds = %1883, %1824
  %1885 = load i32, ptr %47, align 4, !tbaa !5
  %1886 = icmp eq i32 0, %1885
  br i1 %1886, label %1887, label %1944

1887:                                             ; preds = %1884
  call void @llvm.lifetime.start.p0(i64 4, ptr %124) #5
  store i32 8, ptr %124, align 4, !tbaa !5
  %1888 = load i32, ptr %7, align 4, !tbaa !5
  %1889 = load i32, ptr %8, align 4, !tbaa !5
  %1890 = load i32, ptr %9, align 4, !tbaa !5
  %1891 = load ptr, ptr %41, align 8, !tbaa !9
  %1892 = load ptr, ptr %42, align 8, !tbaa !9
  %1893 = load ptr, ptr %43, align 8, !tbaa !9
  %1894 = load i32, ptr %23, align 4, !tbaa !5
  call void @libxsmm_gemm_batch(i32 noundef 0, i32 noundef 0, ptr noundef %18, ptr noundef %19, i32 noundef %1888, i32 noundef %1889, i32 noundef %1890, ptr noundef %16, ptr noundef %1891, ptr noundef %10, ptr noundef %124, ptr noundef %1892, ptr noundef %11, ptr noundef %124, ptr noundef %17, ptr noundef %1893, ptr noundef %12, ptr noundef %124, i32 noundef 0, i32 noundef 0, i32 noundef %1894, i32 noundef 0)
  store i32 0, ptr %51, align 4, !tbaa !5
  br label %1895

1895:                                             ; preds = %1916, %1887
  %1896 = load i32, ptr %51, align 4, !tbaa !5
  %1897 = load i32, ptr %23, align 4, !tbaa !5
  %1898 = icmp slt i32 %1896, %1897
  br i1 %1898, label %1899, label %1919

1899:                                             ; preds = %1895
  %1900 = call ptr @libxsmm_original_dgemm()
  %1901 = load ptr, ptr %41, align 8, !tbaa !9
  %1902 = load i32, ptr %51, align 4, !tbaa !5
  %1903 = sext i32 %1902 to i64
  %1904 = getelementptr inbounds ptr, ptr %1901, i64 %1903
  %1905 = load ptr, ptr %1904, align 8, !tbaa !9
  %1906 = load ptr, ptr %42, align 8, !tbaa !9
  %1907 = load i32, ptr %51, align 4, !tbaa !5
  %1908 = sext i32 %1907 to i64
  %1909 = getelementptr inbounds ptr, ptr %1906, i64 %1908
  %1910 = load ptr, ptr %1909, align 8, !tbaa !9
  %1911 = load ptr, ptr %44, align 8, !tbaa !9
  %1912 = load i32, ptr %51, align 4, !tbaa !5
  %1913 = sext i32 %1912 to i64
  %1914 = getelementptr inbounds ptr, ptr %1911, i64 %1913
  %1915 = load ptr, ptr %1914, align 8, !tbaa !9
  call void %1900(ptr noundef %18, ptr noundef %19, ptr noundef %7, ptr noundef %8, ptr noundef %9, ptr noundef %16, ptr noundef %1905, ptr noundef %10, ptr noundef %1910, ptr noundef %11, ptr noundef %17, ptr noundef %1915, ptr noundef %12)
  br label %1916

1916:                                             ; preds = %1899
  %1917 = load i32, ptr %51, align 4, !tbaa !5
  %1918 = add nsw i32 %1917, 1
  store i32 %1918, ptr %51, align 4, !tbaa !5
  br label %1895, !llvm.loop !50

1919:                                             ; preds = %1895
  call void @libxsmm_matdiff_reduce(ptr noundef %49, ptr noundef %50)
  %1920 = load i32, ptr %7, align 4, !tbaa !5
  %1921 = load i32, ptr %8, align 4, !tbaa !5
  %1922 = load ptr, ptr %28, align 8, !tbaa !9
  %1923 = load ptr, ptr %27, align 8, !tbaa !9
  %1924 = call i32 @libxsmm_matdiff(ptr noundef %50, i32 noundef 0, i32 noundef %1920, i32 noundef %1921, ptr noundef %1922, ptr noundef %1923, ptr noundef %12, ptr noundef %12)
  store i32 %1924, ptr %47, align 4, !tbaa !5
  %1925 = load i32, ptr %47, align 4, !tbaa !5
  %1926 = icmp eq i32 0, %1925
  br i1 %1926, label %1927, label %1943

1927:                                             ; preds = %1919
  call void @llvm.lifetime.start.p0(i64 8, ptr %125) #5
  %1928 = call double @libxsmm_matdiff_epsilon(ptr noundef %50)
  store double %1928, ptr %125, align 8, !tbaa !11
  br label %1929

1929:                                             ; preds = %1927
  br label %1930

1930:                                             ; preds = %1929
  br label %1931

1931:                                             ; preds = %1930
  %1932 = load double, ptr %125, align 8, !tbaa !11
  %1933 = fcmp oge double 7.000000e-04, %1932
  br i1 %1933, label %1934, label %1938

1934:                                             ; preds = %1931
  br label %1935

1935:                                             ; preds = %1934
  br label %1936

1936:                                             ; preds = %1935
  br label %1937

1937:                                             ; preds = %1936
  br label %1942

1938:                                             ; preds = %1931
  br label %1939

1939:                                             ; preds = %1938
  br label %1940

1940:                                             ; preds = %1939
  br label %1941

1941:                                             ; preds = %1940
  store i32 1, ptr %47, align 4, !tbaa !5
  br label %1942

1942:                                             ; preds = %1941, %1937
  call void @llvm.lifetime.end.p0(i64 8, ptr %125) #5
  br label %1943

1943:                                             ; preds = %1942, %1919
  call void @llvm.lifetime.end.p0(i64 4, ptr %124) #5
  br label %1944

1944:                                             ; preds = %1943, %1884
  %1945 = load i32, ptr %47, align 4, !tbaa !5
  %1946 = icmp eq i32 0, %1945
  br i1 %1946, label %1947, label %2004

1947:                                             ; preds = %1944
  call void @llvm.lifetime.start.p0(i64 4, ptr %126) #5
  store i32 8, ptr %126, align 4, !tbaa !5
  %1948 = load i32, ptr %7, align 4, !tbaa !5
  %1949 = load i32, ptr %8, align 4, !tbaa !5
  %1950 = load i32, ptr %9, align 4, !tbaa !5
  %1951 = load ptr, ptr %41, align 8, !tbaa !9
  %1952 = load ptr, ptr %42, align 8, !tbaa !9
  %1953 = load ptr, ptr %43, align 8, !tbaa !9
  %1954 = load i32, ptr %23, align 4, !tbaa !5
  call void @libxsmm_gemm_batch(i32 noundef 0, i32 noundef 0, ptr noundef %18, ptr noundef %19, i32 noundef %1948, i32 noundef %1949, i32 noundef %1950, ptr noundef %16, ptr noundef %1951, ptr noundef %10, ptr noundef %126, ptr noundef %1952, ptr noundef %11, ptr noundef %126, ptr noundef %17, ptr noundef %1953, ptr noundef %12, ptr noundef %126, i32 noundef 0, i32 noundef 0, i32 noundef %1954, i32 noundef 1)
  store i32 0, ptr %51, align 4, !tbaa !5
  br label %1955

1955:                                             ; preds = %1976, %1947
  %1956 = load i32, ptr %51, align 4, !tbaa !5
  %1957 = load i32, ptr %23, align 4, !tbaa !5
  %1958 = icmp slt i32 %1956, %1957
  br i1 %1958, label %1959, label %1979

1959:                                             ; preds = %1955
  %1960 = call ptr @libxsmm_original_dgemm()
  %1961 = load ptr, ptr %41, align 8, !tbaa !9
  %1962 = load i32, ptr %51, align 4, !tbaa !5
  %1963 = sext i32 %1962 to i64
  %1964 = getelementptr inbounds ptr, ptr %1961, i64 %1963
  %1965 = load ptr, ptr %1964, align 8, !tbaa !9
  %1966 = load ptr, ptr %42, align 8, !tbaa !9
  %1967 = load i32, ptr %51, align 4, !tbaa !5
  %1968 = sext i32 %1967 to i64
  %1969 = getelementptr inbounds ptr, ptr %1966, i64 %1968
  %1970 = load ptr, ptr %1969, align 8, !tbaa !9
  %1971 = load ptr, ptr %44, align 8, !tbaa !9
  %1972 = load i32, ptr %51, align 4, !tbaa !5
  %1973 = sext i32 %1972 to i64
  %1974 = getelementptr inbounds ptr, ptr %1971, i64 %1973
  %1975 = load ptr, ptr %1974, align 8, !tbaa !9
  call void %1960(ptr noundef %18, ptr noundef %19, ptr noundef %7, ptr noundef %8, ptr noundef %9, ptr noundef %16, ptr noundef %1965, ptr noundef %10, ptr noundef %1970, ptr noundef %11, ptr noundef %17, ptr noundef %1975, ptr noundef %12)
  br label %1976

1976:                                             ; preds = %1959
  %1977 = load i32, ptr %51, align 4, !tbaa !5
  %1978 = add nsw i32 %1977, 1
  store i32 %1978, ptr %51, align 4, !tbaa !5
  br label %1955, !llvm.loop !51

1979:                                             ; preds = %1955
  call void @libxsmm_matdiff_reduce(ptr noundef %49, ptr noundef %50)
  %1980 = load i32, ptr %7, align 4, !tbaa !5
  %1981 = load i32, ptr %8, align 4, !tbaa !5
  %1982 = load ptr, ptr %28, align 8, !tbaa !9
  %1983 = load ptr, ptr %27, align 8, !tbaa !9
  %1984 = call i32 @libxsmm_matdiff(ptr noundef %50, i32 noundef 0, i32 noundef %1980, i32 noundef %1981, ptr noundef %1982, ptr noundef %1983, ptr noundef %12, ptr noundef %12)
  store i32 %1984, ptr %47, align 4, !tbaa !5
  %1985 = load i32, ptr %47, align 4, !tbaa !5
  %1986 = icmp eq i32 0, %1985
  br i1 %1986, label %1987, label %2003

1987:                                             ; preds = %1979
  call void @llvm.lifetime.start.p0(i64 8, ptr %127) #5
  %1988 = call double @libxsmm_matdiff_epsilon(ptr noundef %50)
  store double %1988, ptr %127, align 8, !tbaa !11
  br label %1989

1989:                                             ; preds = %1987
  br label %1990

1990:                                             ; preds = %1989
  br label %1991

1991:                                             ; preds = %1990
  %1992 = load double, ptr %127, align 8, !tbaa !11
  %1993 = fcmp oge double 7.000000e-04, %1992
  br i1 %1993, label %1994, label %1998

1994:                                             ; preds = %1991
  br label %1995

1995:                                             ; preds = %1994
  br label %1996

1996:                                             ; preds = %1995
  br label %1997

1997:                                             ; preds = %1996
  br label %2002

1998:                                             ; preds = %1991
  br label %1999

1999:                                             ; preds = %1998
  br label %2000

2000:                                             ; preds = %1999
  br label %2001

2001:                                             ; preds = %2000
  store i32 1, ptr %47, align 4, !tbaa !5
  br label %2002

2002:                                             ; preds = %2001, %1997
  call void @llvm.lifetime.end.p0(i64 8, ptr %127) #5
  br label %2003

2003:                                             ; preds = %2002, %1979
  call void @llvm.lifetime.end.p0(i64 4, ptr %126) #5
  br label %2004

2004:                                             ; preds = %2003, %1944
  %2005 = load i32, ptr %47, align 4, !tbaa !5
  %2006 = icmp eq i32 0, %2005
  br i1 %2006, label %2007, label %2067

2007:                                             ; preds = %2004
  %2008 = load i32, ptr %7, align 4, !tbaa !5
  %2009 = load i32, ptr %8, align 4, !tbaa !5
  %2010 = load i32, ptr %9, align 4, !tbaa !5
  %2011 = load ptr, ptr %25, align 8, !tbaa !9
  %2012 = load ptr, ptr %26, align 8, !tbaa !9
  %2013 = load ptr, ptr %27, align 8, !tbaa !9
  %2014 = load i32, ptr %23, align 4, !tbaa !5
  call void @libxsmm_gemm_strided(i32 noundef 0, i32 noundef 0, ptr noundef %18, ptr noundef %19, i32 noundef %2008, i32 noundef %2009, i32 noundef %2010, ptr noundef %16, ptr noundef %2011, ptr noundef %10, ptr noundef %20, ptr noundef %2012, ptr noundef %11, ptr noundef %21, ptr noundef %17, ptr noundef %2013, ptr noundef %12, ptr noundef %22, i32 noundef 0, i32 noundef %2014)
  store i32 0, ptr %51, align 4, !tbaa !5
  br label %2015

2015:                                             ; preds = %2039, %2007
  %2016 = load i32, ptr %51, align 4, !tbaa !5
  %2017 = load i32, ptr %23, align 4, !tbaa !5
  %2018 = icmp slt i32 %2016, %2017
  br i1 %2018, label %2019, label %2042

2019:                                             ; preds = %2015
  %2020 = call ptr @libxsmm_original_dgemm()
  %2021 = load ptr, ptr %25, align 8, !tbaa !9
  %2022 = load i32, ptr %51, align 4, !tbaa !5
  %2023 = load i32, ptr %20, align 4, !tbaa !5
  %2024 = mul nsw i32 %2022, %2023
  %2025 = sext i32 %2024 to i64
  %2026 = getelementptr inbounds double, ptr %2021, i64 %2025
  %2027 = load ptr, ptr %26, align 8, !tbaa !9
  %2028 = load i32, ptr %51, align 4, !tbaa !5
  %2029 = load i32, ptr %21, align 4, !tbaa !5
  %2030 = mul nsw i32 %2028, %2029
  %2031 = sext i32 %2030 to i64
  %2032 = getelementptr inbounds double, ptr %2027, i64 %2031
  %2033 = load ptr, ptr %28, align 8, !tbaa !9
  %2034 = load i32, ptr %51, align 4, !tbaa !5
  %2035 = load i32, ptr %22, align 4, !tbaa !5
  %2036 = mul nsw i32 %2034, %2035
  %2037 = sext i32 %2036 to i64
  %2038 = getelementptr inbounds double, ptr %2033, i64 %2037
  call void %2020(ptr noundef %18, ptr noundef %19, ptr noundef %7, ptr noundef %8, ptr noundef %9, ptr noundef %16, ptr noundef %2026, ptr noundef %10, ptr noundef %2032, ptr noundef %11, ptr noundef %17, ptr noundef %2038, ptr noundef %12)
  br label %2039

2039:                                             ; preds = %2019
  %2040 = load i32, ptr %51, align 4, !tbaa !5
  %2041 = add nsw i32 %2040, 1
  store i32 %2041, ptr %51, align 4, !tbaa !5
  br label %2015, !llvm.loop !52

2042:                                             ; preds = %2015
  call void @libxsmm_matdiff_reduce(ptr noundef %49, ptr noundef %50)
  %2043 = load i32, ptr %7, align 4, !tbaa !5
  %2044 = load i32, ptr %8, align 4, !tbaa !5
  %2045 = load ptr, ptr %28, align 8, !tbaa !9
  %2046 = load ptr, ptr %27, align 8, !tbaa !9
  %2047 = call i32 @libxsmm_matdiff(ptr noundef %50, i32 noundef 0, i32 noundef %2043, i32 noundef %2044, ptr noundef %2045, ptr noundef %2046, ptr noundef %12, ptr noundef %12)
  store i32 %2047, ptr %47, align 4, !tbaa !5
  %2048 = load i32, ptr %47, align 4, !tbaa !5
  %2049 = icmp eq i32 0, %2048
  br i1 %2049, label %2050, label %2066

2050:                                             ; preds = %2042
  call void @llvm.lifetime.start.p0(i64 8, ptr %128) #5
  %2051 = call double @libxsmm_matdiff_epsilon(ptr noundef %50)
  store double %2051, ptr %128, align 8, !tbaa !11
  br label %2052

2052:                                             ; preds = %2050
  br label %2053

2053:                                             ; preds = %2052
  br label %2054

2054:                                             ; preds = %2053
  %2055 = load double, ptr %128, align 8, !tbaa !11
  %2056 = fcmp oge double 7.000000e-04, %2055
  br i1 %2056, label %2057, label %2061

2057:                                             ; preds = %2054
  br label %2058

2058:                                             ; preds = %2057
  br label %2059

2059:                                             ; preds = %2058
  br label %2060

2060:                                             ; preds = %2059
  br label %2065

2061:                                             ; preds = %2054
  br label %2062

2062:                                             ; preds = %2061
  br label %2063

2063:                                             ; preds = %2062
  br label %2064

2064:                                             ; preds = %2063
  store i32 1, ptr %47, align 4, !tbaa !5
  br label %2065

2065:                                             ; preds = %2064, %2060
  call void @llvm.lifetime.end.p0(i64 8, ptr %128) #5
  br label %2066

2066:                                             ; preds = %2065, %2042
  br label %2067

2067:                                             ; preds = %2066, %2004
  %2068 = load i32, ptr %47, align 4, !tbaa !5
  %2069 = icmp eq i32 0, %2068
  br i1 %2069, label %2070, label %2130

2070:                                             ; preds = %2067
  %2071 = load i32, ptr %7, align 4, !tbaa !5
  %2072 = load i32, ptr %8, align 4, !tbaa !5
  %2073 = load i32, ptr %9, align 4, !tbaa !5
  %2074 = load ptr, ptr %25, align 8, !tbaa !9
  %2075 = load ptr, ptr %26, align 8, !tbaa !9
  %2076 = load ptr, ptr %27, align 8, !tbaa !9
  %2077 = load i32, ptr %23, align 4, !tbaa !5
  call void @libxsmm_gemm_strided(i32 noundef 0, i32 noundef 0, ptr noundef %18, ptr noundef %19, i32 noundef %2071, i32 noundef %2072, i32 noundef %2073, ptr noundef %16, ptr noundef %2074, ptr noundef %10, ptr noundef %20, ptr noundef %2075, ptr noundef %11, ptr noundef %21, ptr noundef %17, ptr noundef %2076, ptr noundef %12, ptr noundef %22, i32 noundef 0, i32 noundef %2077)
  store i32 0, ptr %51, align 4, !tbaa !5
  br label %2078

2078:                                             ; preds = %2102, %2070
  %2079 = load i32, ptr %51, align 4, !tbaa !5
  %2080 = load i32, ptr %23, align 4, !tbaa !5
  %2081 = icmp slt i32 %2079, %2080
  br i1 %2081, label %2082, label %2105

2082:                                             ; preds = %2078
  %2083 = call ptr @libxsmm_original_dgemm()
  %2084 = load ptr, ptr %25, align 8, !tbaa !9
  %2085 = load i32, ptr %51, align 4, !tbaa !5
  %2086 = load i32, ptr %20, align 4, !tbaa !5
  %2087 = mul nsw i32 %2085, %2086
  %2088 = sext i32 %2087 to i64
  %2089 = getelementptr inbounds double, ptr %2084, i64 %2088
  %2090 = load ptr, ptr %26, align 8, !tbaa !9
  %2091 = load i32, ptr %51, align 4, !tbaa !5
  %2092 = load i32, ptr %21, align 4, !tbaa !5
  %2093 = mul nsw i32 %2091, %2092
  %2094 = sext i32 %2093 to i64
  %2095 = getelementptr inbounds double, ptr %2090, i64 %2094
  %2096 = load ptr, ptr %28, align 8, !tbaa !9
  %2097 = load i32, ptr %51, align 4, !tbaa !5
  %2098 = load i32, ptr %22, align 4, !tbaa !5
  %2099 = mul nsw i32 %2097, %2098
  %2100 = sext i32 %2099 to i64
  %2101 = getelementptr inbounds double, ptr %2096, i64 %2100
  call void %2083(ptr noundef %18, ptr noundef %19, ptr noundef %7, ptr noundef %8, ptr noundef %9, ptr noundef %16, ptr noundef %2089, ptr noundef %10, ptr noundef %2095, ptr noundef %11, ptr noundef %17, ptr noundef %2101, ptr noundef %12)
  br label %2102

2102:                                             ; preds = %2082
  %2103 = load i32, ptr %51, align 4, !tbaa !5
  %2104 = add nsw i32 %2103, 1
  store i32 %2104, ptr %51, align 4, !tbaa !5
  br label %2078, !llvm.loop !53

2105:                                             ; preds = %2078
  call void @libxsmm_matdiff_reduce(ptr noundef %49, ptr noundef %50)
  %2106 = load i32, ptr %7, align 4, !tbaa !5
  %2107 = load i32, ptr %8, align 4, !tbaa !5
  %2108 = load ptr, ptr %28, align 8, !tbaa !9
  %2109 = load ptr, ptr %27, align 8, !tbaa !9
  %2110 = call i32 @libxsmm_matdiff(ptr noundef %50, i32 noundef 0, i32 noundef %2106, i32 noundef %2107, ptr noundef %2108, ptr noundef %2109, ptr noundef %12, ptr noundef %12)
  store i32 %2110, ptr %47, align 4, !tbaa !5
  %2111 = load i32, ptr %47, align 4, !tbaa !5
  %2112 = icmp eq i32 0, %2111
  br i1 %2112, label %2113, label %2129

2113:                                             ; preds = %2105
  call void @llvm.lifetime.start.p0(i64 8, ptr %129) #5
  %2114 = call double @libxsmm_matdiff_epsilon(ptr noundef %50)
  store double %2114, ptr %129, align 8, !tbaa !11
  br label %2115

2115:                                             ; preds = %2113
  br label %2116

2116:                                             ; preds = %2115
  br label %2117

2117:                                             ; preds = %2116
  %2118 = load double, ptr %129, align 8, !tbaa !11
  %2119 = fcmp oge double 7.000000e-04, %2118
  br i1 %2119, label %2120, label %2124

2120:                                             ; preds = %2117
  br label %2121

2121:                                             ; preds = %2120
  br label %2122

2122:                                             ; preds = %2121
  br label %2123

2123:                                             ; preds = %2122
  br label %2128

2124:                                             ; preds = %2117
  br label %2125

2125:                                             ; preds = %2124
  br label %2126

2126:                                             ; preds = %2125
  br label %2127

2127:                                             ; preds = %2126
  store i32 1, ptr %47, align 4, !tbaa !5
  br label %2128

2128:                                             ; preds = %2127, %2123
  call void @llvm.lifetime.end.p0(i64 8, ptr %129) #5
  br label %2129

2129:                                             ; preds = %2128, %2105
  br label %2130

2130:                                             ; preds = %2129, %2067
  %2131 = load i32, ptr %47, align 4, !tbaa !5
  %2132 = icmp eq i32 0, %2131
  br i1 %2132, label %2133, label %2193

2133:                                             ; preds = %2130
  %2134 = load i32, ptr %7, align 4, !tbaa !5
  %2135 = load i32, ptr %8, align 4, !tbaa !5
  %2136 = load i32, ptr %9, align 4, !tbaa !5
  %2137 = load ptr, ptr %25, align 8, !tbaa !9
  %2138 = load ptr, ptr %26, align 8, !tbaa !9
  %2139 = load ptr, ptr %27, align 8, !tbaa !9
  %2140 = load i32, ptr %23, align 4, !tbaa !5
  call void @libxsmm_gemm_strided(i32 noundef 0, i32 noundef 0, ptr noundef %18, ptr noundef %19, i32 noundef %2134, i32 noundef %2135, i32 noundef %2136, ptr noundef %16, ptr noundef %2137, ptr noundef %10, ptr noundef %20, ptr noundef %2138, ptr noundef %11, ptr noundef %21, ptr noundef %17, ptr noundef %2139, ptr noundef %12, ptr noundef %22, i32 noundef 0, i32 noundef %2140)
  store i32 0, ptr %51, align 4, !tbaa !5
  br label %2141

2141:                                             ; preds = %2165, %2133
  %2142 = load i32, ptr %51, align 4, !tbaa !5
  %2143 = load i32, ptr %23, align 4, !tbaa !5
  %2144 = icmp slt i32 %2142, %2143
  br i1 %2144, label %2145, label %2168

2145:                                             ; preds = %2141
  %2146 = call ptr @libxsmm_original_dgemm()
  %2147 = load ptr, ptr %25, align 8, !tbaa !9
  %2148 = load i32, ptr %51, align 4, !tbaa !5
  %2149 = load i32, ptr %20, align 4, !tbaa !5
  %2150 = mul nsw i32 %2148, %2149
  %2151 = sext i32 %2150 to i64
  %2152 = getelementptr inbounds double, ptr %2147, i64 %2151
  %2153 = load ptr, ptr %26, align 8, !tbaa !9
  %2154 = load i32, ptr %51, align 4, !tbaa !5
  %2155 = load i32, ptr %21, align 4, !tbaa !5
  %2156 = mul nsw i32 %2154, %2155
  %2157 = sext i32 %2156 to i64
  %2158 = getelementptr inbounds double, ptr %2153, i64 %2157
  %2159 = load ptr, ptr %28, align 8, !tbaa !9
  %2160 = load i32, ptr %51, align 4, !tbaa !5
  %2161 = load i32, ptr %22, align 4, !tbaa !5
  %2162 = mul nsw i32 %2160, %2161
  %2163 = sext i32 %2162 to i64
  %2164 = getelementptr inbounds double, ptr %2159, i64 %2163
  call void %2146(ptr noundef %18, ptr noundef %19, ptr noundef %7, ptr noundef %8, ptr noundef %9, ptr noundef %16, ptr noundef %2152, ptr noundef %10, ptr noundef %2158, ptr noundef %11, ptr noundef %17, ptr noundef %2164, ptr noundef %12)
  br label %2165

2165:                                             ; preds = %2145
  %2166 = load i32, ptr %51, align 4, !tbaa !5
  %2167 = add nsw i32 %2166, 1
  store i32 %2167, ptr %51, align 4, !tbaa !5
  br label %2141, !llvm.loop !54

2168:                                             ; preds = %2141
  call void @libxsmm_matdiff_reduce(ptr noundef %49, ptr noundef %50)
  %2169 = load i32, ptr %7, align 4, !tbaa !5
  %2170 = load i32, ptr %8, align 4, !tbaa !5
  %2171 = load ptr, ptr %28, align 8, !tbaa !9
  %2172 = load ptr, ptr %27, align 8, !tbaa !9
  %2173 = call i32 @libxsmm_matdiff(ptr noundef %50, i32 noundef 0, i32 noundef %2169, i32 noundef %2170, ptr noundef %2171, ptr noundef %2172, ptr noundef %12, ptr noundef %12)
  store i32 %2173, ptr %47, align 4, !tbaa !5
  %2174 = load i32, ptr %47, align 4, !tbaa !5
  %2175 = icmp eq i32 0, %2174
  br i1 %2175, label %2176, label %2192

2176:                                             ; preds = %2168
  call void @llvm.lifetime.start.p0(i64 8, ptr %130) #5
  %2177 = call double @libxsmm_matdiff_epsilon(ptr noundef %50)
  store double %2177, ptr %130, align 8, !tbaa !11
  br label %2178

2178:                                             ; preds = %2176
  br label %2179

2179:                                             ; preds = %2178
  br label %2180

2180:                                             ; preds = %2179
  %2181 = load double, ptr %130, align 8, !tbaa !11
  %2182 = fcmp oge double 7.000000e-04, %2181
  br i1 %2182, label %2183, label %2187

2183:                                             ; preds = %2180
  br label %2184

2184:                                             ; preds = %2183
  br label %2185

2185:                                             ; preds = %2184
  br label %2186

2186:                                             ; preds = %2185
  br label %2191

2187:                                             ; preds = %2180
  br label %2188

2188:                                             ; preds = %2187
  br label %2189

2189:                                             ; preds = %2188
  br label %2190

2190:                                             ; preds = %2189
  store i32 1, ptr %47, align 4, !tbaa !5
  br label %2191

2191:                                             ; preds = %2190, %2186
  call void @llvm.lifetime.end.p0(i64 8, ptr %130) #5
  br label %2192

2192:                                             ; preds = %2191, %2168
  br label %2193

2193:                                             ; preds = %2192, %2130
  %2194 = load i32, ptr %47, align 4, !tbaa !5
  %2195 = icmp eq i32 0, %2194
  br i1 %2195, label %2196, label %2212

2196:                                             ; preds = %2193
  call void @llvm.lifetime.start.p0(i64 8, ptr %131) #5
  call void @libxsmm_matdiff_reduce(ptr noundef %49, ptr noundef %50)
  %2197 = call double @libxsmm_matdiff_epsilon(ptr noundef %49)
  store double %2197, ptr %131, align 8, !tbaa !11
  br label %2198

2198:                                             ; preds = %2196
  br label %2199

2199:                                             ; preds = %2198
  br label %2200

2200:                                             ; preds = %2199
  %2201 = load double, ptr %131, align 8, !tbaa !11
  %2202 = fcmp oge double 7.000000e-04, %2201
  br i1 %2202, label %2203, label %2207

2203:                                             ; preds = %2200
  br label %2204

2204:                                             ; preds = %2203
  br label %2205

2205:                                             ; preds = %2204
  br label %2206

2206:                                             ; preds = %2205
  br label %2211

2207:                                             ; preds = %2200
  br label %2208

2208:                                             ; preds = %2207
  br label %2209

2209:                                             ; preds = %2208
  br label %2210

2210:                                             ; preds = %2209
  store i32 1, ptr %47, align 4, !tbaa !5
  br label %2211

2211:                                             ; preds = %2210, %2206
  call void @llvm.lifetime.end.p0(i64 8, ptr %131) #5
  br label %2212

2212:                                             ; preds = %2211, %2193
  call void @llvm.lifetime.end.p0(i64 4, ptr %51) #5
  call void @llvm.lifetime.end.p0(i64 192, ptr %50) #5
  call void @llvm.lifetime.end.p0(i64 192, ptr %49) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #5
  br label %2214

2213:                                             ; preds = %510, %507, %504, %501, %498, %495, %492, %489, %486, %483, %480, %477, %474, %471, %468, %465, %462, %459, %456, %453, %450, %348
  store i32 1, ptr %47, align 4, !tbaa !5
  br label %2214

2214:                                             ; preds = %2213, %2212
  %2215 = load ptr, ptr %33, align 8, !tbaa !9
  call void @libxsmm_free(ptr noundef %2215)
  %2216 = load ptr, ptr %34, align 8, !tbaa !9
  call void @libxsmm_free(ptr noundef %2216)
  %2217 = load ptr, ptr %35, align 8, !tbaa !9
  call void @libxsmm_free(ptr noundef %2217)
  %2218 = load ptr, ptr %39, align 8, !tbaa !9
  call void @libxsmm_free(ptr noundef %2218)
  %2219 = load ptr, ptr %40, align 8, !tbaa !9
  call void @libxsmm_free(ptr noundef %2219)
  %2220 = load ptr, ptr %41, align 8, !tbaa !9
  call void @libxsmm_free(ptr noundef %2220)
  %2221 = load ptr, ptr %42, align 8, !tbaa !9
  call void @libxsmm_free(ptr noundef %2221)
  %2222 = load ptr, ptr %43, align 8, !tbaa !9
  call void @libxsmm_free(ptr noundef %2222)
  %2223 = load ptr, ptr %44, align 8, !tbaa !9
  call void @libxsmm_free(ptr noundef %2223)
  %2224 = load ptr, ptr %45, align 8, !tbaa !9
  call void @libxsmm_free(ptr noundef %2224)
  %2225 = load ptr, ptr %46, align 8, !tbaa !9
  call void @libxsmm_free(ptr noundef %2225)
  %2226 = load ptr, ptr %29, align 8, !tbaa !9
  call void @libxsmm_free(ptr noundef %2226)
  %2227 = load ptr, ptr %30, align 8, !tbaa !9
  call void @libxsmm_free(ptr noundef %2227)
  %2228 = load ptr, ptr %31, align 8, !tbaa !9
  call void @libxsmm_free(ptr noundef %2228)
  %2229 = load ptr, ptr %32, align 8, !tbaa !9
  call void @libxsmm_free(ptr noundef %2229)
  %2230 = load ptr, ptr %36, align 8, !tbaa !9
  call void @libxsmm_free(ptr noundef %2230)
  %2231 = load ptr, ptr %37, align 8, !tbaa !9
  call void @libxsmm_free(ptr noundef %2231)
  %2232 = load ptr, ptr %38, align 8, !tbaa !9
  call void @libxsmm_free(ptr noundef %2232)
  %2233 = load ptr, ptr %25, align 8, !tbaa !9
  call void @libxsmm_free(ptr noundef %2233)
  %2234 = load ptr, ptr %26, align 8, !tbaa !9
  call void @libxsmm_free(ptr noundef %2234)
  %2235 = load ptr, ptr %27, align 8, !tbaa !9
  call void @libxsmm_free(ptr noundef %2235)
  %2236 = load i32, ptr %47, align 4, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 4, ptr %47) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %19) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %18) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #5
  ret i32 %2236
}

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

; Function Attrs: inlinehint nounwind willreturn memory(read) uwtable
declare i32 @atoi(ptr noundef nonnull) #2

declare i64 @libxsmm_coprime2(i64 noundef) #3

declare noalias ptr @libxsmm_malloc(i64 noundef) #3

declare void @libxsmm_matdiff_clear(ptr noundef) #3

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare double @llvm.fmuladd.f64(double, double, double) #4

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

declare i32 @libxsmm_rng_u32(i32 noundef) #3

declare void @libxsmm_gemm_batch(i32 noundef, i32 noundef, ptr noundef, ptr noundef, i32 noundef, i32 noundef, i32 noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef) #3

declare ptr @libxsmm_original_dgemm() #3

declare i32 @libxsmm_matdiff(ptr noundef, i32 noundef, i32 noundef, i32 noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) #3

declare double @libxsmm_matdiff_epsilon(ptr noundef) #3

declare void @libxsmm_matdiff_reduce(ptr noundef, ptr noundef) #3

declare void @libxsmm_gemm_strided(i32 noundef, i32 noundef, ptr noundef, ptr noundef, i32 noundef, i32 noundef, i32 noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, i32 noundef, i32 noundef) #3

declare void @libxsmm_free(ptr noundef) #3

attributes #0 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { 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 #3 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #5 = { nounwind }
attributes #6 = { nounwind willreturn memory(read) }

!llvm.module.flags = !{!0, !1, !2, !3}
!llvm.ident = !{!4}

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"any pointer", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"double", !7, i64 0}
!13 = !{!7, !7, i64 0}
!14 = !{!15, !15, i64 0}
!15 = !{!"long", !7, i64 0}
!16 = distinct !{!16, !17}
!17 = !{!"llvm.loop.mustprogress"}
!18 = distinct !{!18, !17}
!19 = distinct !{!19, !17}
!20 = distinct !{!20, !17}
!21 = distinct !{!21, !17}
!22 = distinct !{!22, !17}
!23 = distinct !{!23, !17}
!24 = distinct !{!24, !17}
!25 = distinct !{!25, !17}
!26 = distinct !{!26, !17}
!27 = distinct !{!27, !17}
!28 = distinct !{!28, !17}
!29 = distinct !{!29, !17}
!30 = distinct !{!30, !17}
!31 = distinct !{!31, !17}
!32 = distinct !{!32, !17}
!33 = distinct !{!33, !17}
!34 = distinct !{!34, !17}
!35 = distinct !{!35, !17}
!36 = distinct !{!36, !17}
!37 = distinct !{!37, !17}
!38 = distinct !{!38, !17}
!39 = distinct !{!39, !17}
!40 = distinct !{!40, !17}
!41 = distinct !{!41, !17}
!42 = distinct !{!42, !17}
!43 = distinct !{!43, !17}
!44 = distinct !{!44, !17}
!45 = distinct !{!45, !17}
!46 = distinct !{!46, !17}
!47 = distinct !{!47, !17}
!48 = distinct !{!48, !17}
!49 = distinct !{!49, !17}
!50 = distinct !{!50, !17}
!51 = distinct !{!51, !17}
!52 = distinct !{!52, !17}
!53 = distinct !{!53, !17}
!54 = distinct !{!54, !17}


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

%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 }

; Function Attrs: nounwind uwtable
define dso_local i32 @main(i32 noundef %0, ptr nocapture noundef readonly %1) local_unnamed_addr #0 {
  %3 = alloca i32, align 4
  %4 = alloca i32, align 4
  %5 = alloca i32, align 4
  %6 = alloca i32, align 4
  %7 = alloca i32, align 4
  %8 = alloca i32, align 4
  %9 = alloca double, align 8
  %10 = alloca double, align 8
  %11 = alloca i8, align 1
  %12 = alloca i8, align 1
  %13 = alloca i32, align 4
  %14 = alloca i32, align 4
  %15 = alloca i32, align 4
  %16 = alloca %struct.libxsmm_matdiff_info, align 8
  %17 = alloca %struct.libxsmm_matdiff_info, align 8
  %18 = alloca i32, align 4
  %19 = alloca i32, align 4
  %20 = alloca i32, align 4
  %21 = alloca i32, align 4
  %22 = alloca i32, align 4
  %23 = alloca i32, align 4
  %24 = icmp sgt i32 %0, 1
  br i1 %24, label %25, label %.thread

.thread:                                          ; preds = %2
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %3) #6
  br label %.thread814

25:                                               ; preds = %2
  %26 = getelementptr inbounds i8, ptr %1, i64 8
  %27 = load ptr, ptr %26, align 8, !tbaa !5
  %28 = tail call i32 @atoi(ptr nocapture noundef %27) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %3) #6
  %.not918 = icmp eq i32 %0, 2
  br i1 %.not918, label %.thread814, label %29

.thread814:                                       ; preds = %.thread, %25
  %.ph = phi i32 [ 0, %.thread ], [ %28, %25 ]
  store i32 13, ptr %3, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %4) #6
  br label %.thread818

29:                                               ; preds = %25
  %30 = getelementptr inbounds i8, ptr %1, i64 16
  %31 = load ptr, ptr %30, align 8, !tbaa !5
  %32 = tail call i32 @atoi(ptr nocapture noundef %31) #7
  store i32 %32, ptr %3, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %4) #6
  %33 = icmp ugt i32 %0, 3
  br i1 %33, label %34, label %.thread818

.thread818:                                       ; preds = %.thread814, %29
  %.ph816 = phi i32 [ 13, %.thread814 ], [ %32, %29 ]
  %.ph817 = phi i32 [ %.ph, %.thread814 ], [ %28, %29 ]
  store i32 5, ptr %4, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %5) #6
  br label %.thread823

34:                                               ; preds = %29
  %35 = getelementptr inbounds i8, ptr %1, i64 24
  %36 = load ptr, ptr %35, align 8, !tbaa !5
  %37 = tail call i32 @atoi(ptr nocapture noundef %36) #7
  store i32 %37, ptr %4, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %5) #6
  %.not919 = icmp eq i32 %0, 4
  br i1 %.not919, label %.thread823, label %38

.thread823:                                       ; preds = %.thread818, %34
  %.ph820 = phi i32 [ 5, %.thread818 ], [ %37, %34 ]
  %.ph821 = phi i32 [ %.ph817, %.thread818 ], [ %28, %34 ]
  %.ph822 = phi i32 [ %.ph816, %.thread818 ], [ %32, %34 ]
  store i32 7, ptr %5, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %6) #6
  br label %.thread830

38:                                               ; preds = %34
  %39 = getelementptr inbounds i8, ptr %1, i64 32
  %40 = load ptr, ptr %39, align 8, !tbaa !5
  %41 = tail call i32 @atoi(ptr nocapture noundef %40) #7
  store i32 %41, ptr %5, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %6) #6
  %42 = icmp ugt i32 %0, 5
  br i1 %42, label %43, label %.thread830

.thread830:                                       ; preds = %38, %.thread823
  %.ph825 = phi i32 [ %41, %38 ], [ 7, %.thread823 ]
  %.ph826 = phi i32 [ %32, %38 ], [ %.ph822, %.thread823 ]
  %.ph827 = phi i32 [ %28, %38 ], [ %.ph821, %.thread823 ]
  %.ph828 = phi i32 [ %37, %38 ], [ %.ph820, %.thread823 ]
  store i32 %.ph826, ptr %6, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %7) #6
  br label %.thread838

43:                                               ; preds = %38
  %44 = getelementptr inbounds i8, ptr %1, i64 40
  %45 = load ptr, ptr %44, align 8, !tbaa !5
  %46 = tail call i32 @atoi(ptr nocapture noundef %45) #7
  %. = tail call i32 @llvm.smax.i32(i32 %46, i32 %32)
  store i32 %., ptr %6, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %7) #6
  %.not920 = icmp eq i32 %0, 6
  br i1 %.not920, label %.thread838, label %47

.thread838:                                       ; preds = %43, %.thread830
  %.ph832 = phi i32 [ %., %43 ], [ %.ph826, %.thread830 ]
  %.ph833 = phi i32 [ %37, %43 ], [ %.ph828, %.thread830 ]
  %.ph834 = phi i32 [ %28, %43 ], [ %.ph827, %.thread830 ]
  %.ph835 = phi i32 [ %32, %43 ], [ %.ph826, %.thread830 ]
  %.ph836 = phi i32 [ %41, %43 ], [ %.ph825, %.thread830 ]
  store i32 %.ph836, ptr %7, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %8) #6
  br label %.thread839

47:                                               ; preds = %43
  %48 = getelementptr inbounds i8, ptr %1, i64 48
  %49 = load ptr, ptr %48, align 8, !tbaa !5
  %50 = tail call i32 @atoi(ptr nocapture noundef %49) #7
  %.811 = tail call i32 @llvm.smax.i32(i32 %50, i32 %41)
  store i32 %.811, ptr %7, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %8) #6
  %51 = icmp ugt i32 %0, 7
  br i1 %51, label %61, label %.thread839

.thread839:                                       ; preds = %47, %.thread838
  %52 = phi i32 [ %.ph836, %.thread838 ], [ %.811, %47 ]
  %53 = phi i32 [ %.ph836, %.thread838 ], [ %41, %47 ]
  %54 = phi i32 [ %.ph835, %.thread838 ], [ %32, %47 ]
  %55 = phi i32 [ %.ph834, %.thread838 ], [ %28, %47 ]
  %56 = phi i32 [ %.ph833, %.thread838 ], [ %37, %47 ]
  %57 = phi i32 [ %.ph832, %.thread838 ], [ %., %47 ]
  %58 = add nsw i32 %54, 7
  %59 = sdiv i32 %58, 8
  %60 = shl nsw i32 %59, 3
  store i32 %60, ptr %8, align 4, !tbaa !9
  br label %71

61:                                               ; preds = %47
  %62 = getelementptr inbounds i8, ptr %1, i64 56
  %63 = load ptr, ptr %62, align 8, !tbaa !5
  %64 = tail call i32 @atoi(ptr nocapture noundef %63) #7
  %.812 = tail call i32 @llvm.smax.i32(i32 %64, i32 %32)
  store i32 %.812, ptr %8, align 4, !tbaa !9
  %.not921 = icmp eq i32 %0, 8
  br i1 %.not921, label %71, label %65

65:                                               ; preds = %61
  %66 = getelementptr inbounds i8, ptr %1, i64 64
  %67 = load ptr, ptr %66, align 8, !tbaa !5
  %68 = tail call i32 @atoi(ptr nocapture noundef %67) #7
  %69 = icmp sgt i32 %68, 0
  br i1 %69, label %70, label %71

70:                                               ; preds = %65
  %.813 = tail call i32 @llvm.umin.i32(i32 %68, i32 100)
  br label %71

71:                                               ; preds = %.thread839, %65, %70, %61
  %72 = phi i32 [ %.812, %61 ], [ %.812, %70 ], [ %.812, %65 ], [ %60, %.thread839 ]
  %73 = phi i32 [ %., %61 ], [ %., %70 ], [ %., %65 ], [ %57, %.thread839 ]
  %74 = phi i32 [ %37, %61 ], [ %37, %70 ], [ %37, %65 ], [ %56, %.thread839 ]
  %75 = phi i32 [ %28, %61 ], [ %28, %70 ], [ %28, %65 ], [ %55, %.thread839 ]
  %76 = phi i32 [ %41, %61 ], [ %41, %70 ], [ %41, %65 ], [ %53, %.thread839 ]
  %77 = phi i32 [ %.811, %61 ], [ %.811, %70 ], [ %.811, %65 ], [ %52, %.thread839 ]
  %78 = phi i32 [ 33, %61 ], [ %.813, %70 ], [ 0, %65 ], [ 33, %.thread839 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %9) #6
  store double 1.000000e+00, ptr %9, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %10) #6
  store double 1.000000e+00, ptr %10, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %11) #6
  store i8 110, ptr %11, align 1, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %12) #6
  store i8 110, ptr %12, align 1, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %13) #6
  %79 = mul nsw i32 %76, %73
  store i32 %79, ptr %13, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %14) #6
  %80 = mul nsw i32 %77, %74
  store i32 %80, ptr %14, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %15) #6
  %81 = mul nsw i32 %74, %72
  store i32 %81, ptr %15, align 4, !tbaa !9
  %82 = icmp slt i32 %75, 1
  br i1 %82, label %83, label %96

83:                                               ; preds = %71
  %84 = icmp eq i32 %75, 0
  %85 = sub nsw i32 0, %75
  %narrow = select i1 %84, i32 512, i32 %85
  %86 = zext nneg i32 %narrow to i64
  %87 = shl nuw nsw i64 %86, 20
  %88 = sext i32 %79 to i64
  %89 = sext i32 %80 to i64
  %90 = sext i32 %81 to i64
  %91 = add nsw i64 %88, %90
  %92 = add nsw i64 %91, %89
  %93 = shl nsw i64 %92, 3
  %94 = udiv i64 %87, %93
  %95 = trunc i64 %94 to i32
  br label %96

96:                                               ; preds = %71, %83
  %97 = phi i32 [ %95, %83 ], [ %75, %71 ]
  %98 = icmp sgt i32 %0, 9
  br i1 %98, label %99, label %.thread840

99:                                               ; preds = %96
  %100 = getelementptr inbounds i8, ptr %1, i64 72
  %101 = load ptr, ptr %100, align 8, !tbaa !5
  %102 = tail call i32 @atoi(ptr nocapture noundef %101) #7
  %.not = icmp eq i32 %102, 0
  br i1 %.not, label %._crit_edge1168, label %.thread840

._crit_edge1168:                                  ; preds = %99
  %.pre = sext i32 %97 to i64
  br label %105

.thread840:                                       ; preds = %96, %99
  %103 = sext i32 %97 to i64
  %104 = tail call i64 @libxsmm_coprime2(i64 noundef %103) #6
  br label %105

105:                                              ; preds = %._crit_edge1168, %.thread840
  %.pre-phi = phi i64 [ %.pre, %._crit_edge1168 ], [ %103, %.thread840 ]
  %106 = phi i64 [ 0, %._crit_edge1168 ], [ %104, %.thread840 ]
  %107 = sext i32 %79 to i64
  %108 = shl nsw i64 %.pre-phi, 3
  %109 = mul i64 %108, %107
  %110 = tail call noalias ptr @libxsmm_malloc(i64 noundef %109) #6
  %111 = sext i32 %80 to i64
  %112 = mul i64 %108, %111
  %113 = tail call noalias ptr @libxsmm_malloc(i64 noundef %112) #6
  %114 = sext i32 %81 to i64
  %115 = mul i64 %108, %114
  %116 = tail call noalias ptr @libxsmm_malloc(i64 noundef %115) #6
  %117 = tail call noalias ptr @libxsmm_malloc(i64 noundef %115) #6
  %118 = shl nsw i64 %.pre-phi, 2
  %119 = tail call noalias ptr @libxsmm_malloc(i64 noundef %118) #6
  %120 = tail call noalias ptr @libxsmm_malloc(i64 noundef %118) #6
  %121 = tail call noalias ptr @libxsmm_malloc(i64 noundef %118) #6
  %122 = tail call noalias ptr @libxsmm_malloc(i64 noundef %118) #6
  %123 = tail call noalias ptr @libxsmm_malloc(i64 noundef %118) #6
  %124 = tail call noalias ptr @libxsmm_malloc(i64 noundef %118) #6
  %125 = tail call noalias ptr @libxsmm_malloc(i64 noundef %118) #6
  %126 = tail call noalias ptr @libxsmm_malloc(i64 noundef %118) #6
  %127 = tail call noalias ptr @libxsmm_malloc(i64 noundef %118) #6
  %128 = tail call noalias ptr @libxsmm_malloc(i64 noundef %118) #6
  %129 = tail call noalias ptr @libxsmm_malloc(i64 noundef %.pre-phi) #6
  %.fr1325 = freeze ptr %129
  %130 = tail call noalias ptr @libxsmm_malloc(i64 noundef %.pre-phi) #6
  %131 = tail call noalias ptr @libxsmm_malloc(i64 noundef %108) #6
  %132 = tail call noalias ptr @libxsmm_malloc(i64 noundef %108) #6
  %133 = tail call noalias ptr @libxsmm_malloc(i64 noundef %108) #6
  %134 = tail call noalias ptr @libxsmm_malloc(i64 noundef %108) #6
  %135 = tail call noalias ptr @libxsmm_malloc(i64 noundef %108) #6
  %136 = tail call noalias ptr @libxsmm_malloc(i64 noundef %108) #6
  %137 = insertelement <16 x ptr> poison, ptr %110, i64 0
  %138 = insertelement <16 x ptr> %137, ptr %113, i64 1
  %139 = insertelement <16 x ptr> %138, ptr %116, i64 2
  %140 = insertelement <16 x ptr> %139, ptr %117, i64 3
  %141 = insertelement <16 x ptr> %140, ptr %135, i64 4
  %142 = insertelement <16 x ptr> %141, ptr %136, i64 5
  %143 = insertelement <16 x ptr> %142, ptr %119, i64 6
  %144 = insertelement <16 x ptr> %143, ptr %131, i64 7
  %145 = insertelement <16 x ptr> %144, ptr %132, i64 8
  %146 = insertelement <16 x ptr> %145, ptr %133, i64 9
  %147 = insertelement <16 x ptr> %146, ptr %134, i64 10
  %148 = insertelement <16 x ptr> %147, ptr %120, i64 11
  %149 = insertelement <16 x ptr> %148, ptr %121, i64 12
  %150 = insertelement <16 x ptr> %149, ptr %122, i64 13
  %151 = insertelement <16 x ptr> %150, ptr %123, i64 14
  %152 = insertelement <16 x ptr> %151, ptr %124, i64 15
  %.fr = freeze <16 x ptr> %152
  %153 = insertelement <4 x ptr> poison, ptr %125, i64 0
  %154 = insertelement <4 x ptr> %153, ptr %126, i64 1
  %155 = insertelement <4 x ptr> %154, ptr %127, i64 2
  %156 = insertelement <4 x ptr> %155, ptr %128, i64 3
  %.fr1323 = freeze <4 x ptr> %156
  %157 = icmp ne ptr %.fr1325, null
  %158 = icmp ne ptr %130, null
  %159 = icmp eq <16 x ptr> %.fr, zeroinitializer
  %160 = bitcast <16 x i1> %159 to i16
  %161 = icmp eq i16 %160, 0
  %162 = icmp eq <4 x ptr> %.fr1323, zeroinitializer
  %163 = bitcast <4 x i1> %162 to i4
  %164 = icmp eq i4 %163, 0
  %op.rdx = and i1 %161, %164
  %op.rdx1321 = and i1 %op.rdx, %157
  %op.rdx1322 = select i1 %op.rdx1321, i1 %158, i1 false
  br i1 %op.rdx1322, label %165, label %688

165:                                              ; preds = %105
  %166 = sitofp i32 %97 to double
  %167 = fdiv double 1.000000e+00, %166
  call void @llvm.lifetime.start.p0(i64 192, ptr nonnull %16) #6
  call void @llvm.lifetime.start.p0(i64 192, ptr nonnull %17) #6
  call void @libxsmm_matdiff_clear(ptr noundef nonnull %16) #6
  %168 = icmp sgt i32 %97, 0
  %169 = load i32, ptr %5, align 4, !tbaa !9
  br i1 %168, label %.lr.ph962, label %._crit_edge969.critedge

.lr.ph962:                                        ; preds = %165
  %.not810 = icmp eq i64 %106, 0
  %170 = load i32, ptr %3, align 4, !tbaa !9
  %171 = load i32, ptr %6, align 4, !tbaa !9
  %172 = icmp sgt i32 %169, 0
  %173 = icmp sgt i32 %170, 0
  %174 = sitofp i32 %170 to double
  %175 = load i32, ptr %4, align 4, !tbaa !9
  %176 = load i32, ptr %7, align 4, !tbaa !9
  %177 = icmp sgt i32 %175, 0
  %178 = sitofp i32 %169 to double
  %179 = load i32, ptr %8, align 4, !tbaa !9
  %180 = sext i32 %171 to i64
  %181 = sext i32 %176 to i64
  %182 = sext i32 %179 to i64
  %wide.trip.count1093 = zext nneg i32 %97 to i64
  %wide.trip.count1043 = zext i32 %169 to i64
  %wide.trip.count = zext i32 %170 to i64
  %wide.trip.count1038 = zext i32 %171 to i64
  %wide.trip.count1058 = zext nneg i32 %175 to i64
  %wide.trip.count1048 = zext nneg i32 %169 to i64
  %wide.trip.count1053 = zext i32 %176 to i64
  %wide.trip.count1073 = zext nneg i32 %175 to i64
  %wide.trip.count1063 = zext nneg i32 %170 to i64
  %wide.trip.count1068 = zext i32 %179 to i64
  %wide.trip.count1088 = zext nneg i32 %175 to i64
  %wide.trip.count1078 = zext nneg i32 %170 to i64
  %wide.trip.count1083 = zext i32 %179 to i64
  %smax = call i32 @llvm.smax.i32(i32 %170, i32 0)
  %183 = zext nneg i32 %smax to i64
  %184 = sub nsw i64 %wide.trip.count1068, %183
  %smax1203 = call i32 @llvm.smax.i32(i32 %170, i32 0)
  %185 = zext nneg i32 %smax1203 to i64
  %186 = sub nsw i64 %wide.trip.count1068, %185
  %smax1238 = call i32 @llvm.smax.i32(i32 %169, i32 0)
  %187 = zext nneg i32 %smax1238 to i64
  %188 = sub nsw i64 %wide.trip.count1053, %187
  %smax1273 = call i32 @llvm.smax.i32(i32 %170, i32 0)
  %189 = zext nneg i32 %smax1273 to i64
  %190 = sub nsw i64 %wide.trip.count1038, %189
  %min.iters.check1291 = icmp ult i32 %170, 4
  %n.vec1294 = and i64 %wide.trip.count, 2147483644
  %cmp.n1307 = icmp eq i64 %n.vec1294, %wide.trip.count
  %min.iters.check1276 = icmp ult i64 %190, 4
  %n.vec1279 = and i64 %190, -4
  %cmp.n1288 = icmp eq i64 %190, %n.vec1279
  %min.iters.check1256 = icmp ult i32 %169, 4
  %n.vec1259 = and i64 %wide.trip.count1043, 2147483644
  %cmp.n1272 = icmp eq i64 %n.vec1259, %wide.trip.count1043
  %min.iters.check1241 = icmp ult i64 %188, 4
  %n.vec1244 = and i64 %188, -4
  %cmp.n1253 = icmp eq i64 %188, %n.vec1244
  %min.iters.check1221 = icmp ult i32 %170, 4
  %n.vec1224 = and i64 %wide.trip.count, 2147483644
  %cmp.n1237 = icmp eq i64 %n.vec1224, %wide.trip.count
  %min.iters.check1206 = icmp ult i64 %186, 4
  %n.vec1209 = and i64 %186, -4
  %cmp.n1218 = icmp eq i64 %186, %n.vec1209
  %min.iters.check1189 = icmp ult i32 %170, 4
  %n.vec1192 = and i64 %wide.trip.count, 2147483644
  %cmp.n1202 = icmp eq i64 %n.vec1192, %wide.trip.count
  %min.iters.check = icmp ult i64 %184, 4
  %n.vec = and i64 %184, -4
  %cmp.n = icmp eq i64 %184, %n.vec
  br label %191

191:                                              ; preds = %.lr.ph962, %._crit_edge959
  %indvars.iv1090 = phi i64 [ 0, %.lr.ph962 ], [ %indvars.iv.next1091, %._crit_edge959 ]
  br i1 %.not810, label %195, label %192

192:                                              ; preds = %191
  %193 = mul i64 %106, %indvars.iv1090
  %194 = urem i64 %193, %.pre-phi
  br label %195

195:                                              ; preds = %191, %192
  %.in = phi i64 [ %194, %192 ], [ %indvars.iv1090, %191 ]
  %196 = trunc i64 %.in to i32
  %197 = mul nsw i32 %79, %196
  %198 = getelementptr inbounds i32, ptr %126, i64 %indvars.iv1090
  store i32 %197, ptr %198, align 4, !tbaa !9
  %199 = mul nsw i32 %80, %196
  %200 = getelementptr inbounds i32, ptr %127, i64 %indvars.iv1090
  store i32 %199, ptr %200, align 4, !tbaa !9
  %201 = mul nsw i32 %81, %196
  %202 = getelementptr inbounds i32, ptr %128, i64 %indvars.iv1090
  store i32 %201, ptr %202, align 4, !tbaa !9
  %203 = trunc i64 %indvars.iv1090 to i32
  %204 = add i32 %203, 25
  %205 = uitofp nneg i32 %204 to double
  %206 = call double @llvm.fmuladd.f64(double %205, double %167, double %167)
  br i1 %172, label %.preheader930.lr.ph, label %._crit_edge936

.preheader930.lr.ph:                              ; preds = %195
  %207 = mul nsw i64 %indvars.iv1090, %107
  %208 = getelementptr inbounds double, ptr %110, i64 %207
  %broadcast.splatinsert1304 = insertelement <2 x double> poison, double %206, i64 0
  %broadcast.splat1305 = shufflevector <2 x double> %broadcast.splatinsert1304, <2 x double> poison, <2 x i32> zeroinitializer
  %broadcast.splatinsert1285 = insertelement <2 x double> poison, double %205, i64 0
  %broadcast.splat1286 = shufflevector <2 x double> %broadcast.splatinsert1285, <2 x double> poison, <2 x i32> zeroinitializer
  br label %.preheader930

.preheader930:                                    ; preds = %.preheader930.lr.ph, %._crit_edge
  %indvars.iv1040 = phi i64 [ 0, %.preheader930.lr.ph ], [ %indvars.iv.next1041, %._crit_edge ]
  br i1 %173, label %.lr.ph, label %.preheader929

.lr.ph:                                           ; preds = %.preheader930
  %209 = mul nsw i64 %indvars.iv1040, %180
  %210 = trunc nuw nsw i64 %indvars.iv1040 to i32
  %211 = uitofp nneg i32 %210 to double
  %212 = call double @llvm.fmuladd.f64(double %211, double %174, double 1.000000e+00)
  %invariant.gep = getelementptr double, ptr %208, i64 %209
  br i1 %min.iters.check1291, label %scalar.ph1290.preheader, label %vector.ph1292

scalar.ph1290.preheader:                          ; preds = %middle.block1289, %.lr.ph
  %indvars.iv.ph = phi i64 [ 0, %.lr.ph ], [ %n.vec1294, %middle.block1289 ]
  br label %scalar.ph1290

vector.ph1292:                                    ; preds = %.lr.ph
  %broadcast.splatinsert1302 = insertelement <2 x double> poison, double %212, i64 0
  %broadcast.splat1303 = shufflevector <2 x double> %broadcast.splatinsert1302, <2 x double> poison, <2 x i32> zeroinitializer
  br label %vector.body1296

vector.body1296:                                  ; preds = %vector.body1296, %vector.ph1292
  %index1297 = phi i64 [ 0, %vector.ph1292 ], [ %index.next1306, %vector.body1296 ]
  %vec.ind1298 = phi <2 x i32> [ <i32 0, i32 1>, %vector.ph1292 ], [ %vec.ind.next1301, %vector.body1296 ]
  %step.add1299 = add <2 x i32> %vec.ind1298, <i32 2, i32 2>
  %213 = uitofp <2 x i32> %vec.ind1298 to <2 x double>
  %214 = uitofp <2 x i32> %step.add1299 to <2 x double>
  %215 = fadd <2 x double> %broadcast.splat1303, %213
  %216 = fadd <2 x double> %broadcast.splat1303, %214
  %217 = fmul <2 x double> %broadcast.splat1305, %215
  %218 = fmul <2 x double> %broadcast.splat1305, %216
  %219 = getelementptr double, ptr %invariant.gep, i64 %index1297
  %220 = getelementptr i8, ptr %219, i64 16
  store <2 x double> %217, ptr %219, align 8, !tbaa !11
  store <2 x double> %218, ptr %220, align 8, !tbaa !11
  %index.next1306 = add nuw i64 %index1297, 4
  %vec.ind.next1301 = add <2 x i32> %vec.ind1298, <i32 4, i32 4>
  %221 = icmp eq i64 %index.next1306, %n.vec1294
  br i1 %221, label %middle.block1289, label %vector.body1296, !llvm.loop !14

middle.block1289:                                 ; preds = %vector.body1296
  br i1 %cmp.n1307, label %.preheader929, label %scalar.ph1290.preheader

.preheader929:                                    ; preds = %scalar.ph1290, %middle.block1289, %.preheader930
  %.0733.lcssa = phi i32 [ 0, %.preheader930 ], [ %170, %middle.block1289 ], [ %170, %scalar.ph1290 ]
  %222 = icmp slt i32 %.0733.lcssa, %171
  br i1 %222, label %.lr.ph934, label %._crit_edge

.lr.ph934:                                        ; preds = %.preheader929
  %223 = mul nsw i64 %indvars.iv1040, %180
  %224 = zext nneg i32 %.0733.lcssa to i64
  %invariant.gep1173 = getelementptr double, ptr %208, i64 %223
  br i1 %min.iters.check1276, label %scalar.ph1275.preheader, label %vector.ph1277

scalar.ph1275.preheader:                          ; preds = %middle.block1274, %.lr.ph934
  %indvars.iv1035.ph = phi i64 [ %224, %.lr.ph934 ], [ %ind.end1280, %middle.block1274 ]
  br label %scalar.ph1275

vector.ph1277:                                    ; preds = %.lr.ph934
  %ind.end1280 = add nsw i64 %n.vec1279, %224
  %invariant.gep1327 = getelementptr double, ptr %invariant.gep1173, i64 %224
  br label %vector.body1282

vector.body1282:                                  ; preds = %vector.body1282, %vector.ph1277
  %index1283 = phi i64 [ 0, %vector.ph1277 ], [ %index.next1287, %vector.body1282 ]
  %gep1328 = getelementptr double, ptr %invariant.gep1327, i64 %index1283
  %225 = getelementptr i8, ptr %gep1328, i64 16
  store <2 x double> %broadcast.splat1286, ptr %gep1328, align 8, !tbaa !11
  store <2 x double> %broadcast.splat1286, ptr %225, align 8, !tbaa !11
  %index.next1287 = add nuw i64 %index1283, 4
  %226 = icmp eq i64 %index.next1287, %n.vec1279
  br i1 %226, label %middle.block1274, label %vector.body1282, !llvm.loop !18

middle.block1274:                                 ; preds = %vector.body1282
  br i1 %cmp.n1288, label %._crit_edge, label %scalar.ph1275.preheader

scalar.ph1290:                                    ; preds = %scalar.ph1290.preheader, %scalar.ph1290
  %indvars.iv = phi i64 [ %indvars.iv.next, %scalar.ph1290 ], [ %indvars.iv.ph, %scalar.ph1290.preheader ]
  %227 = trunc nuw nsw i64 %indvars.iv to i32
  %228 = uitofp nneg i32 %227 to double
  %229 = fadd double %212, %228
  %230 = fmul double %206, %229
  %gep = getelementptr double, ptr %invariant.gep, i64 %indvars.iv
  store double %230, ptr %gep, align 8, !tbaa !11
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, %wide.trip.count
  br i1 %exitcond.not, label %.preheader929, label %scalar.ph1290, !llvm.loop !19

scalar.ph1275:                                    ; preds = %scalar.ph1275.preheader, %scalar.ph1275
  %indvars.iv1035 = phi i64 [ %indvars.iv.next1036, %scalar.ph1275 ], [ %indvars.iv1035.ph, %scalar.ph1275.preheader ]
  %gep1174 = getelementptr double, ptr %invariant.gep1173, i64 %indvars.iv1035
  store double %205, ptr %gep1174, align 8, !tbaa !11
  %indvars.iv.next1036 = add nuw nsw i64 %indvars.iv1035, 1
  %exitcond1039.not = icmp eq i64 %indvars.iv.next1036, %wide.trip.count1038
  br i1 %exitcond1039.not, label %._crit_edge, label %scalar.ph1275, !llvm.loop !20

._crit_edge:                                      ; preds = %scalar.ph1275, %middle.block1274, %.preheader929
  %indvars.iv.next1041 = add nuw nsw i64 %indvars.iv1040, 1
  %exitcond1044.not = icmp eq i64 %indvars.iv.next1041, %wide.trip.count1043
  br i1 %exitcond1044.not, label %._crit_edge936, label %.preheader930, !llvm.loop !21

._crit_edge936:                                   ; preds = %._crit_edge, %195
  %231 = trunc i64 %indvars.iv1090 to i32
  %232 = add i32 %231, 75
  %233 = uitofp nneg i32 %232 to double
  %234 = call double @llvm.fmuladd.f64(double %233, double %167, double %167)
  br i1 %177, label %.preheader928.lr.ph, label %._crit_edge959

.preheader928.lr.ph:                              ; preds = %._crit_edge936
  %235 = mul nsw i64 %indvars.iv1090, %111
  %236 = getelementptr inbounds double, ptr %113, i64 %235
  %broadcast.splatinsert1269 = insertelement <2 x double> poison, double %234, i64 0
  %broadcast.splat1270 = shufflevector <2 x double> %broadcast.splatinsert1269, <2 x double> poison, <2 x i32> zeroinitializer
  %broadcast.splatinsert1250 = insertelement <2 x double> poison, double %233, i64 0
  %broadcast.splat1251 = shufflevector <2 x double> %broadcast.splatinsert1250, <2 x double> poison, <2 x i32> zeroinitializer
  br label %.preheader928

.preheader928:                                    ; preds = %.preheader928.lr.ph, %._crit_edge942
  %indvars.iv1055 = phi i64 [ 0, %.preheader928.lr.ph ], [ %indvars.iv.next1056, %._crit_edge942 ]
  br i1 %172, label %.lr.ph938, label %.preheader927

.lr.ph938:                                        ; preds = %.preheader928
  %237 = mul nsw i64 %indvars.iv1055, %181
  %238 = trunc nuw nsw i64 %indvars.iv1055 to i32
  %239 = uitofp nneg i32 %238 to double
  %240 = call double @llvm.fmuladd.f64(double %239, double %178, double 1.000000e+00)
  %invariant.gep1175 = getelementptr double, ptr %236, i64 %237
  br i1 %min.iters.check1256, label %scalar.ph1255.preheader, label %vector.ph1257

scalar.ph1255.preheader:                          ; preds = %middle.block1254, %.lr.ph938
  %indvars.iv1045.ph = phi i64 [ 0, %.lr.ph938 ], [ %n.vec1259, %middle.block1254 ]
  br label %scalar.ph1255

vector.ph1257:                                    ; preds = %.lr.ph938
  %broadcast.splatinsert1267 = insertelement <2 x double> poison, double %240, i64 0
  %broadcast.splat1268 = shufflevector <2 x double> %broadcast.splatinsert1267, <2 x double> poison, <2 x i32> zeroinitializer
  br label %vector.body1261

vector.body1261:                                  ; preds = %vector.body1261, %vector.ph1257
  %index1262 = phi i64 [ 0, %vector.ph1257 ], [ %index.next1271, %vector.body1261 ]
  %vec.ind1263 = phi <2 x i32> [ <i32 0, i32 1>, %vector.ph1257 ], [ %vec.ind.next1266, %vector.body1261 ]
  %step.add1264 = add <2 x i32> %vec.ind1263, <i32 2, i32 2>
  %241 = uitofp <2 x i32> %vec.ind1263 to <2 x double>
  %242 = uitofp <2 x i32> %step.add1264 to <2 x double>
  %243 = fadd <2 x double> %broadcast.splat1268, %241
  %244 = fadd <2 x double> %broadcast.splat1268, %242
  %245 = fmul <2 x double> %broadcast.splat1270, %243
  %246 = fmul <2 x double> %broadcast.splat1270, %244
  %247 = getelementptr double, ptr %invariant.gep1175, i64 %index1262
  %248 = getelementptr i8, ptr %247, i64 16
  store <2 x double> %245, ptr %247, align 8, !tbaa !11
  store <2 x double> %246, ptr %248, align 8, !tbaa !11
  %index.next1271 = add nuw i64 %index1262, 4
  %vec.ind.next1266 = add <2 x i32> %vec.ind1263, <i32 4, i32 4>
  %249 = icmp eq i64 %index.next1271, %n.vec1259
  br i1 %249, label %middle.block1254, label %vector.body1261, !llvm.loop !22

middle.block1254:                                 ; preds = %vector.body1261
  br i1 %cmp.n1272, label %.preheader927, label %scalar.ph1255.preheader

.preheader927:                                    ; preds = %scalar.ph1255, %middle.block1254, %.preheader928
  %.0738.lcssa = phi i32 [ 0, %.preheader928 ], [ %169, %middle.block1254 ], [ %169, %scalar.ph1255 ]
  %250 = icmp slt i32 %.0738.lcssa, %176
  br i1 %250, label %.lr.ph941, label %._crit_edge942

.lr.ph941:                                        ; preds = %.preheader927
  %251 = mul nsw i64 %indvars.iv1055, %181
  %252 = zext nneg i32 %.0738.lcssa to i64
  %invariant.gep1177 = getelementptr double, ptr %236, i64 %251
  br i1 %min.iters.check1241, label %scalar.ph1240.preheader, label %vector.ph1242

scalar.ph1240.preheader:                          ; preds = %middle.block1239, %.lr.ph941
  %indvars.iv1050.ph = phi i64 [ %252, %.lr.ph941 ], [ %ind.end1245, %middle.block1239 ]
  br label %scalar.ph1240

vector.ph1242:                                    ; preds = %.lr.ph941
  %ind.end1245 = add nsw i64 %n.vec1244, %252
  %invariant.gep1329 = getelementptr double, ptr %invariant.gep1177, i64 %252
  br label %vector.body1247

vector.body1247:                                  ; preds = %vector.body1247, %vector.ph1242
  %index1248 = phi i64 [ 0, %vector.ph1242 ], [ %index.next1252, %vector.body1247 ]
  %gep1330 = getelementptr double, ptr %invariant.gep1329, i64 %index1248
  %253 = getelementptr i8, ptr %gep1330, i64 16
  store <2 x double> %broadcast.splat1251, ptr %gep1330, align 8, !tbaa !11
  store <2 x double> %broadcast.splat1251, ptr %253, align 8, !tbaa !11
  %index.next1252 = add nuw i64 %index1248, 4
  %254 = icmp eq i64 %index.next1252, %n.vec1244
  br i1 %254, label %middle.block1239, label %vector.body1247, !llvm.loop !23

middle.block1239:                                 ; preds = %vector.body1247
  br i1 %cmp.n1253, label %._crit_edge942, label %scalar.ph1240.preheader

scalar.ph1255:                                    ; preds = %scalar.ph1255.preheader, %scalar.ph1255
  %indvars.iv1045 = phi i64 [ %indvars.iv.next1046, %scalar.ph1255 ], [ %indvars.iv1045.ph, %scalar.ph1255.preheader ]
  %255 = trunc nuw nsw i64 %indvars.iv1045 to i32
  %256 = uitofp nneg i32 %255 to double
  %257 = fadd double %240, %256
  %258 = fmul double %234, %257
  %gep1176 = getelementptr double, ptr %invariant.gep1175, i64 %indvars.iv1045
  store double %258, ptr %gep1176, align 8, !tbaa !11
  %indvars.iv.next1046 = add nuw nsw i64 %indvars.iv1045, 1
  %exitcond1049.not = icmp eq i64 %indvars.iv.next1046, %wide.trip.count1048
  br i1 %exitcond1049.not, label %.preheader927, label %scalar.ph1255, !llvm.loop !24

scalar.ph1240:                                    ; preds = %scalar.ph1240.preheader, %scalar.ph1240
  %indvars.iv1050 = phi i64 [ %indvars.iv.next1051, %scalar.ph1240 ], [ %indvars.iv1050.ph, %scalar.ph1240.preheader ]
  %gep1178 = getelementptr double, ptr %invariant.gep1177, i64 %indvars.iv1050
  store double %233, ptr %gep1178, align 8, !tbaa !11
  %indvars.iv.next1051 = add nuw nsw i64 %indvars.iv1050, 1
  %exitcond1054.not = icmp eq i64 %indvars.iv.next1051, %wide.trip.count1053
  br i1 %exitcond1054.not, label %._crit_edge942, label %scalar.ph1240, !llvm.loop !25

._crit_edge942:                                   ; preds = %scalar.ph1240, %middle.block1239, %.preheader927
  %indvars.iv.next1056 = add nuw nsw i64 %indvars.iv1055, 1
  %exitcond1059.not = icmp eq i64 %indvars.iv.next1056, %wide.trip.count1058
  br i1 %exitcond1059.not, label %._crit_edge944, label %.preheader928, !llvm.loop !26

._crit_edge944:                                   ; preds = %._crit_edge942
  %259 = trunc i64 %indvars.iv1090 to i32
  %260 = add i32 %259, 42
  %261 = uitofp nneg i32 %260 to double
  %262 = call double @llvm.fmuladd.f64(double %261, double %167, double %167)
  br i1 %177, label %.preheader926.lr.ph, label %._crit_edge959

.preheader926.lr.ph:                              ; preds = %._crit_edge944
  %263 = mul nsw i64 %indvars.iv1090, %114
  %264 = getelementptr inbounds double, ptr %116, i64 %263
  %broadcast.splatinsert1234 = insertelement <2 x double> poison, double %262, i64 0
  %broadcast.splat1235 = shufflevector <2 x double> %broadcast.splatinsert1234, <2 x double> poison, <2 x i32> zeroinitializer
  %broadcast.splatinsert1215 = insertelement <2 x double> poison, double %261, i64 0
  %broadcast.splat1216 = shufflevector <2 x double> %broadcast.splatinsert1215, <2 x double> poison, <2 x i32> zeroinitializer
  br label %.preheader926

.preheader931:                                    ; preds = %._crit_edge950
  br i1 %177, label %.preheader924.lr.ph, label %._crit_edge959

.preheader924.lr.ph:                              ; preds = %.preheader931
  %265 = mul nsw i64 %indvars.iv1090, %114
  %266 = getelementptr inbounds double, ptr %117, i64 %265
  %broadcast.splatinsert1199 = insertelement <2 x double> poison, double %262, i64 0
  %broadcast.splat1200 = shufflevector <2 x double> %broadcast.splatinsert1199, <2 x double> poison, <2 x i32> zeroinitializer
  %broadcast.splatinsert = insertelement <2 x double> poison, double %261, i64 0
  %broadcast.splat = shufflevector <2 x double> %broadcast.splatinsert, <2 x double> poison, <2 x i32> zeroinitializer
  br label %.preheader924

.preheader926:                                    ; preds = %.preheader926.lr.ph, %._crit_edge950
  %indvars.iv1070 = phi i64 [ 0, %.preheader926.lr.ph ], [ %indvars.iv.next1071, %._crit_edge950 ]
  br i1 %173, label %.lr.ph946, label %.preheader925

.lr.ph946:                                        ; preds = %.preheader926
  %267 = mul nsw i64 %indvars.iv1070, %182
  %268 = trunc nuw nsw i64 %indvars.iv1070 to i32
  %269 = uitofp nneg i32 %268 to double
  %270 = call double @llvm.fmuladd.f64(double %269, double %174, double 1.000000e+00)
  %invariant.gep1179 = getelementptr double, ptr %264, i64 %267
  br i1 %min.iters.check1221, label %scalar.ph1220.preheader, label %vector.ph1222

scalar.ph1220.preheader:                          ; preds = %middle.block1219, %.lr.ph946
  %indvars.iv1060.ph = phi i64 [ 0, %.lr.ph946 ], [ %n.vec1224, %middle.block1219 ]
  br label %scalar.ph1220

vector.ph1222:                                    ; preds = %.lr.ph946
  %broadcast.splatinsert1232 = insertelement <2 x double> poison, double %270, i64 0
  %broadcast.splat1233 = shufflevector <2 x double> %broadcast.splatinsert1232, <2 x double> poison, <2 x i32> zeroinitializer
  br label %vector.body1226

vector.body1226:                                  ; preds = %vector.body1226, %vector.ph1222
  %index1227 = phi i64 [ 0, %vector.ph1222 ], [ %index.next1236, %vector.body1226 ]
  %vec.ind1228 = phi <2 x i32> [ <i32 0, i32 1>, %vector.ph1222 ], [ %vec.ind.next1231, %vector.body1226 ]
  %step.add1229 = add <2 x i32> %vec.ind1228, <i32 2, i32 2>
  %271 = uitofp <2 x i32> %vec.ind1228 to <2 x double>
  %272 = uitofp <2 x i32> %step.add1229 to <2 x double>
  %273 = fadd <2 x double> %broadcast.splat1233, %271
  %274 = fadd <2 x double> %broadcast.splat1233, %272
  %275 = fmul <2 x double> %broadcast.splat1235, %273
  %276 = fmul <2 x double> %broadcast.splat1235, %274
  %277 = getelementptr double, ptr %invariant.gep1179, i64 %index1227
  %278 = getelementptr i8, ptr %277, i64 16
  store <2 x double> %275, ptr %277, align 8, !tbaa !11
  store <2 x double> %276, ptr %278, align 8, !tbaa !11
  %index.next1236 = add nuw i64 %index1227, 4
  %vec.ind.next1231 = add <2 x i32> %vec.ind1228, <i32 4, i32 4>
  %279 = icmp eq i64 %index.next1236, %n.vec1224
  br i1 %279, label %middle.block1219, label %vector.body1226, !llvm.loop !27

middle.block1219:                                 ; preds = %vector.body1226
  br i1 %cmp.n1237, label %.preheader925, label %scalar.ph1220.preheader

.preheader925:                                    ; preds = %scalar.ph1220, %middle.block1219, %.preheader926
  %.0743.lcssa = phi i32 [ 0, %.preheader926 ], [ %170, %middle.block1219 ], [ %170, %scalar.ph1220 ]
  %280 = icmp slt i32 %.0743.lcssa, %179
  br i1 %280, label %.lr.ph949, label %._crit_edge950

.lr.ph949:                                        ; preds = %.preheader925
  %281 = mul nsw i64 %indvars.iv1070, %182
  %282 = zext nneg i32 %.0743.lcssa to i64
  %invariant.gep1181 = getelementptr double, ptr %264, i64 %281
  br i1 %min.iters.check1206, label %scalar.ph1205.preheader, label %vector.ph1207

scalar.ph1205.preheader:                          ; preds = %middle.block1204, %.lr.ph949
  %indvars.iv1065.ph = phi i64 [ %282, %.lr.ph949 ], [ %ind.end1210, %middle.block1204 ]
  br label %scalar.ph1205

vector.ph1207:                                    ; preds = %.lr.ph949
  %ind.end1210 = add nsw i64 %n.vec1209, %282
  %invariant.gep1331 = getelementptr double, ptr %invariant.gep1181, i64 %282
  br label %vector.body1212

vector.body1212:                                  ; preds = %vector.body1212, %vector.ph1207
  %index1213 = phi i64 [ 0, %vector.ph1207 ], [ %index.next1217, %vector.body1212 ]
  %gep1332 = getelementptr double, ptr %invariant.gep1331, i64 %index1213
  %283 = getelementptr i8, ptr %gep1332, i64 16
  store <2 x double> %broadcast.splat1216, ptr %gep1332, align 8, !tbaa !11
  store <2 x double> %broadcast.splat1216, ptr %283, align 8, !tbaa !11
  %index.next1217 = add nuw i64 %index1213, 4
  %284 = icmp eq i64 %index.next1217, %n.vec1209
  br i1 %284, label %middle.block1204, label %vector.body1212, !llvm.loop !28

middle.block1204:                                 ; preds = %vector.body1212
  br i1 %cmp.n1218, label %._crit_edge950, label %scalar.ph1205.preheader

scalar.ph1220:                                    ; preds = %scalar.ph1220.preheader, %scalar.ph1220
  %indvars.iv1060 = phi i64 [ %indvars.iv.next1061, %scalar.ph1220 ], [ %indvars.iv1060.ph, %scalar.ph1220.preheader ]
  %285 = trunc nuw nsw i64 %indvars.iv1060 to i32
  %286 = uitofp nneg i32 %285 to double
  %287 = fadd double %270, %286
  %288 = fmul double %262, %287
  %gep1180 = getelementptr double, ptr %invariant.gep1179, i64 %indvars.iv1060
  store double %288, ptr %gep1180, align 8, !tbaa !11
  %indvars.iv.next1061 = add nuw nsw i64 %indvars.iv1060, 1
  %exitcond1064.not = icmp eq i64 %indvars.iv.next1061, %wide.trip.count1063
  br i1 %exitcond1064.not, label %.preheader925, label %scalar.ph1220, !llvm.loop !29

scalar.ph1205:                                    ; preds = %scalar.ph1205.preheader, %scalar.ph1205
  %indvars.iv1065 = phi i64 [ %indvars.iv.next1066, %scalar.ph1205 ], [ %indvars.iv1065.ph, %scalar.ph1205.preheader ]
  %gep1182 = getelementptr double, ptr %invariant.gep1181, i64 %indvars.iv1065
  store double %261, ptr %gep1182, align 8, !tbaa !11
  %indvars.iv.next1066 = add nuw nsw i64 %indvars.iv1065, 1
  %exitcond1069.not = icmp eq i64 %indvars.iv.next1066, %wide.trip.count1068
  br i1 %exitcond1069.not, label %._crit_edge950, label %scalar.ph1205, !llvm.loop !30

._crit_edge950:                                   ; preds = %scalar.ph1205, %middle.block1204, %.preheader925
  %indvars.iv.next1071 = add nuw nsw i64 %indvars.iv1070, 1
  %exitcond1074.not = icmp eq i64 %indvars.iv.next1071, %wide.trip.count1073
  br i1 %exitcond1074.not, label %.preheader931, label %.preheader926, !llvm.loop !31

.preheader924:                                    ; preds = %.preheader924.lr.ph, %._crit_edge957
  %indvars.iv1085 = phi i64 [ 0, %.preheader924.lr.ph ], [ %indvars.iv.next1086, %._crit_edge957 ]
  br i1 %173, label %.lr.ph953, label %.preheader923

.lr.ph953:                                        ; preds = %.preheader924
  %289 = mul nsw i64 %indvars.iv1085, %182
  %290 = trunc nuw nsw i64 %indvars.iv1085 to i32
  %291 = uitofp nneg i32 %290 to double
  %292 = call double @llvm.fmuladd.f64(double %291, double %174, double 1.000000e+00)
  %invariant.gep1183 = getelementptr double, ptr %266, i64 %289
  br i1 %min.iters.check1189, label %scalar.ph1188.preheader, label %vector.ph1190

scalar.ph1188.preheader:                          ; preds = %middle.block1187, %.lr.ph953
  %indvars.iv1075.ph = phi i64 [ 0, %.lr.ph953 ], [ %n.vec1192, %middle.block1187 ]
  br label %scalar.ph1188

vector.ph1190:                                    ; preds = %.lr.ph953
  %broadcast.splatinsert1197 = insertelement <2 x double> poison, double %292, i64 0
  %broadcast.splat1198 = shufflevector <2 x double> %broadcast.splatinsert1197, <2 x double> poison, <2 x i32> zeroinitializer
  br label %vector.body1194

vector.body1194:                                  ; preds = %vector.body1194, %vector.ph1190
  %index1195 = phi i64 [ 0, %vector.ph1190 ], [ %index.next1201, %vector.body1194 ]
  %vec.ind = phi <2 x i32> [ <i32 0, i32 1>, %vector.ph1190 ], [ %vec.ind.next, %vector.body1194 ]
  %step.add = add <2 x i32> %vec.ind, <i32 2, i32 2>
  %293 = uitofp <2 x i32> %vec.ind to <2 x double>
  %294 = uitofp <2 x i32> %step.add to <2 x double>
  %295 = fadd <2 x double> %broadcast.splat1198, %293
  %296 = fadd <2 x double> %broadcast.splat1198, %294
  %297 = fmul <2 x double> %broadcast.splat1200, %295
  %298 = fmul <2 x double> %broadcast.splat1200, %296
  %299 = getelementptr double, ptr %invariant.gep1183, i64 %index1195
  %300 = getelementptr i8, ptr %299, i64 16
  store <2 x double> %297, ptr %299, align 8, !tbaa !11
  store <2 x double> %298, ptr %300, align 8, !tbaa !11
  %index.next1201 = add nuw i64 %index1195, 4
  %vec.ind.next = add <2 x i32> %vec.ind, <i32 4, i32 4>
  %301 = icmp eq i64 %index.next1201, %n.vec1192
  br i1 %301, label %middle.block1187, label %vector.body1194, !llvm.loop !32

middle.block1187:                                 ; preds = %vector.body1194
  br i1 %cmp.n1202, label %.preheader923, label %scalar.ph1188.preheader

.preheader923:                                    ; preds = %scalar.ph1188, %middle.block1187, %.preheader924
  %.0748.lcssa = phi i32 [ 0, %.preheader924 ], [ %170, %middle.block1187 ], [ %170, %scalar.ph1188 ]
  %302 = icmp slt i32 %.0748.lcssa, %179
  br i1 %302, label %.lr.ph956, label %._crit_edge957

.lr.ph956:                                        ; preds = %.preheader923
  %303 = mul nsw i64 %indvars.iv1085, %182
  %304 = zext nneg i32 %.0748.lcssa to i64
  %invariant.gep1185 = getelementptr double, ptr %266, i64 %303
  br i1 %min.iters.check, label %scalar.ph.preheader, label %vector.ph

scalar.ph.preheader:                              ; preds = %middle.block, %.lr.ph956
  %indvars.iv1080.ph = phi i64 [ %304, %.lr.ph956 ], [ %ind.end, %middle.block ]
  br label %scalar.ph

vector.ph:                                        ; preds = %.lr.ph956
  %ind.end = add nsw i64 %n.vec, %304
  %invariant.gep1333 = getelementptr double, ptr %invariant.gep1185, i64 %304
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %gep1334 = getelementptr double, ptr %invariant.gep1333, i64 %index
  %305 = getelementptr i8, ptr %gep1334, i64 16
  store <2 x double> %broadcast.splat, ptr %gep1334, align 8, !tbaa !11
  store <2 x double> %broadcast.splat, ptr %305, align 8, !tbaa !11
  %index.next = add nuw i64 %index, 4
  %306 = icmp eq i64 %index.next, %n.vec
  br i1 %306, label %middle.block, label %vector.body, !llvm.loop !33

middle.block:                                     ; preds = %vector.body
  br i1 %cmp.n, label %._crit_edge957, label %scalar.ph.preheader

scalar.ph1188:                                    ; preds = %scalar.ph1188.preheader, %scalar.ph1188
  %indvars.iv1075 = phi i64 [ %indvars.iv.next1076, %scalar.ph1188 ], [ %indvars.iv1075.ph, %scalar.ph1188.preheader ]
  %307 = trunc nuw nsw i64 %indvars.iv1075 to i32
  %308 = uitofp nneg i32 %307 to double
  %309 = fadd double %292, %308
  %310 = fmul double %262, %309
  %gep1184 = getelementptr double, ptr %invariant.gep1183, i64 %indvars.iv1075
  store double %310, ptr %gep1184, align 8, !tbaa !11
  %indvars.iv.next1076 = add nuw nsw i64 %indvars.iv1075, 1
  %exitcond1079.not = icmp eq i64 %indvars.iv.next1076, %wide.trip.count1078
  br i1 %exitcond1079.not, label %.preheader923, label %scalar.ph1188, !llvm.loop !34

scalar.ph:                                        ; preds = %scalar.ph.preheader, %scalar.ph
  %indvars.iv1080 = phi i64 [ %indvars.iv.next1081, %scalar.ph ], [ %indvars.iv1080.ph, %scalar.ph.preheader ]
  %gep1186 = getelementptr double, ptr %invariant.gep1185, i64 %indvars.iv1080
  store double %261, ptr %gep1186, align 8, !tbaa !11
  %indvars.iv.next1081 = add nuw nsw i64 %indvars.iv1080, 1
  %exitcond1084.not = icmp eq i64 %indvars.iv.next1081, %wide.trip.count1083
  br i1 %exitcond1084.not, label %._crit_edge957, label %scalar.ph, !llvm.loop !35

._crit_edge957:                                   ; preds = %scalar.ph, %middle.block, %.preheader923
  %indvars.iv.next1086 = add nuw nsw i64 %indvars.iv1085, 1
  %exitcond1089.not = icmp eq i64 %indvars.iv.next1086, %wide.trip.count1088
  br i1 %exitcond1089.not, label %._crit_edge959, label %.preheader924, !llvm.loop !36

._crit_edge959:                                   ; preds = %._crit_edge957, %._crit_edge936, %._crit_edge944, %.preheader931
  %indvars.iv.next1091 = add nuw nsw i64 %indvars.iv1090, 1
  %exitcond1094.not = icmp eq i64 %indvars.iv.next1091, %wide.trip.count1093
  br i1 %exitcond1094.not, label %._crit_edge963, label %191, !llvm.loop !37

._crit_edge963:                                   ; preds = %._crit_edge959
  %.not922 = icmp ne i32 %78, 0
  %or.cond1030 = and i1 %.not922, %168
  br i1 %or.cond1030, label %.lr.ph965, label %.loopexit

.lr.ph965:                                        ; preds = %._crit_edge963
  %311 = add nsw i32 %97, -1
  %wide.trip.count1098 = zext nneg i32 %97 to i64
  br label %312

312:                                              ; preds = %.lr.ph965, %321
  %indvars.iv1095 = phi i64 [ 0, %.lr.ph965 ], [ %indvars.iv.next1096, %321 ]
  %313 = call i32 @libxsmm_rng_u32(i32 noundef 100) #6
  %314 = icmp ult i32 %313, %78
  br i1 %314, label %315, label %321

315:                                              ; preds = %312
  %316 = call i32 @libxsmm_rng_u32(i32 noundef %311) #6
  %317 = zext i32 %316 to i64
  %318 = getelementptr inbounds i32, ptr %128, i64 %317
  %319 = load i32, ptr %318, align 4, !tbaa !9
  %320 = getelementptr inbounds i32, ptr %128, i64 %indvars.iv1095
  store i32 %319, ptr %320, align 4, !tbaa !9
  br label %321

321:                                              ; preds = %315, %312
  %indvars.iv.next1096 = add nuw nsw i64 %indvars.iv1095, 1
  %exitcond1099.not = icmp eq i64 %indvars.iv.next1096, %wide.trip.count1098
  br i1 %exitcond1099.not, label %.loopexit, label %312, !llvm.loop !38

.loopexit:                                        ; preds = %321, %._crit_edge963
  %322 = load i32, ptr %3, align 4, !tbaa !9
  %323 = load i32, ptr %4, align 4, !tbaa !9
  %324 = load i32, ptr %5, align 4, !tbaa !9
  call void @libxsmm_gemm_batch(i32 noundef 0, i32 noundef 0, ptr noundef nonnull %11, ptr noundef nonnull %12, i32 noundef %322, i32 noundef %323, i32 noundef %324, ptr noundef nonnull %9, ptr noundef nonnull %110, ptr noundef nonnull %6, ptr noundef nonnull %126, ptr noundef %113, ptr noundef nonnull %7, ptr noundef nonnull %127, ptr noundef nonnull %10, ptr noundef %116, ptr noundef nonnull %8, ptr noundef nonnull %128, i32 noundef 4, i32 noundef 0, i32 noundef %97, i32 noundef 0) #6
  br i1 %168, label %.lr.ph968.preheader, label %._crit_edge969

.lr.ph968.preheader:                              ; preds = %.loopexit
  %wide.trip.count1103 = zext nneg i32 %97 to i64
  br label %.lr.ph968

.lr.ph968:                                        ; preds = %.lr.ph968.preheader, %.lr.ph968
  %indvars.iv1100 = phi i64 [ 0, %.lr.ph968.preheader ], [ %indvars.iv.next1101, %.lr.ph968 ]
  %325 = call ptr @libxsmm_original_dgemm() #6
  %326 = getelementptr inbounds i32, ptr %126, i64 %indvars.iv1100
  %327 = load i32, ptr %326, align 4, !tbaa !9
  %328 = sext i32 %327 to i64
  %329 = getelementptr inbounds double, ptr %110, i64 %328
  %330 = getelementptr inbounds i32, ptr %127, i64 %indvars.iv1100
  %331 = load i32, ptr %330, align 4, !tbaa !9
  %332 = sext i32 %331 to i64
  %333 = getelementptr inbounds double, ptr %113, i64 %332
  %334 = getelementptr inbounds i32, ptr %128, i64 %indvars.iv1100
  %335 = load i32, ptr %334, align 4, !tbaa !9
  %336 = sext i32 %335 to i64
  %337 = getelementptr inbounds double, ptr %117, i64 %336
  call void %325(ptr noundef nonnull %11, ptr noundef nonnull %12, ptr noundef nonnull %3, ptr noundef nonnull %4, ptr noundef nonnull %5, ptr noundef nonnull %9, ptr noundef nonnull %329, ptr noundef nonnull %6, ptr noundef %333, ptr noundef nonnull %7, ptr noundef nonnull %10, ptr noundef %337, ptr noundef nonnull %8) #6
  %indvars.iv.next1101 = add nuw nsw i64 %indvars.iv1100, 1
  %exitcond1104.not = icmp eq i64 %indvars.iv.next1101, %wide.trip.count1103
  br i1 %exitcond1104.not, label %._crit_edge969, label %.lr.ph968, !llvm.loop !39

._crit_edge969.critedge:                          ; preds = %165
  %338 = load i32, ptr %3, align 4, !tbaa !9
  %339 = load i32, ptr %4, align 4, !tbaa !9
  call void @libxsmm_gemm_batch(i32 noundef 0, i32 noundef 0, ptr noundef nonnull %11, ptr noundef nonnull %12, i32 noundef %338, i32 noundef %339, i32 noundef %169, ptr noundef nonnull %9, ptr noundef nonnull %110, ptr noundef nonnull %6, ptr noundef nonnull %126, ptr noundef %113, ptr noundef nonnull %7, ptr noundef nonnull %127, ptr noundef nonnull %10, ptr noundef %116, ptr noundef nonnull %8, ptr noundef nonnull %128, i32 noundef 4, i32 noundef 0, i32 noundef %97, i32 noundef 0) #6
  br label %._crit_edge969

._crit_edge969:                                   ; preds = %.lr.ph968, %._crit_edge969.critedge, %.loopexit
  %340 = load i32, ptr %3, align 4, !tbaa !9
  %341 = load i32, ptr %4, align 4, !tbaa !9
  %342 = call i32 @libxsmm_matdiff(ptr noundef nonnull %17, i32 noundef 0, i32 noundef %340, i32 noundef %341, ptr noundef %117, ptr noundef %116, ptr noundef nonnull %8, ptr noundef nonnull %8) #6
  %343 = icmp eq i32 %342, 0
  br i1 %343, label %344, label %.thread916

344:                                              ; preds = %._crit_edge969
  %345 = call double @libxsmm_matdiff_epsilon(ptr noundef nonnull %17) #6
  %346 = fcmp ugt double %345, 7.000000e-04
  br i1 %346, label %.thread916, label %347

347:                                              ; preds = %344
  %348 = load i32, ptr %3, align 4, !tbaa !9
  %349 = load i32, ptr %4, align 4, !tbaa !9
  %350 = load i32, ptr %5, align 4, !tbaa !9
  call void @libxsmm_gemm_batch(i32 noundef 0, i32 noundef 0, ptr noundef nonnull %11, ptr noundef nonnull %12, i32 noundef %348, i32 noundef %349, i32 noundef %350, ptr noundef nonnull %9, ptr noundef nonnull %110, ptr noundef nonnull %6, ptr noundef nonnull %126, ptr noundef %113, ptr noundef nonnull %7, ptr noundef nonnull %127, ptr noundef nonnull %10, ptr noundef %116, ptr noundef nonnull %8, ptr noundef nonnull %128, i32 noundef 4, i32 noundef 0, i32 noundef %97, i32 noundef 1) #6
  br i1 %168, label %.lr.ph972.preheader, label %._crit_edge973

.lr.ph972.preheader:                              ; preds = %347
  %wide.trip.count1108 = zext nneg i32 %97 to i64
  br label %.lr.ph972

.lr.ph972:                                        ; preds = %.lr.ph972.preheader, %.lr.ph972
  %indvars.iv1105 = phi i64 [ 0, %.lr.ph972.preheader ], [ %indvars.iv.next1106, %.lr.ph972 ]
  %351 = call ptr @libxsmm_original_dgemm() #6
  %352 = getelementptr inbounds i32, ptr %126, i64 %indvars.iv1105
  %353 = load i32, ptr %352, align 4, !tbaa !9
  %354 = sext i32 %353 to i64
  %355 = getelementptr inbounds double, ptr %110, i64 %354
  %356 = getelementptr inbounds i32, ptr %127, i64 %indvars.iv1105
  %357 = load i32, ptr %356, align 4, !tbaa !9
  %358 = sext i32 %357 to i64
  %359 = getelementptr inbounds double, ptr %113, i64 %358
  %360 = getelementptr inbounds i32, ptr %128, i64 %indvars.iv1105
  %361 = load i32, ptr %360, align 4, !tbaa !9
  %362 = sext i32 %361 to i64
  %363 = getelementptr inbounds double, ptr %117, i64 %362
  call void %351(ptr noundef nonnull %11, ptr noundef nonnull %12, ptr noundef nonnull %3, ptr noundef nonnull %4, ptr noundef nonnull %5, ptr noundef nonnull %9, ptr noundef nonnull %355, ptr noundef nonnull %6, ptr noundef %359, ptr noundef nonnull %7, ptr noundef nonnull %10, ptr noundef %363, ptr noundef nonnull %8) #6
  %indvars.iv.next1106 = add nuw nsw i64 %indvars.iv1105, 1
  %exitcond1109.not = icmp eq i64 %indvars.iv.next1106, %wide.trip.count1108
  br i1 %exitcond1109.not, label %._crit_edge973, label %.lr.ph972, !llvm.loop !40

._crit_edge973:                                   ; preds = %.lr.ph972, %347
  %364 = load i32, ptr %3, align 4, !tbaa !9
  %365 = load i32, ptr %4, align 4, !tbaa !9
  %366 = call i32 @libxsmm_matdiff(ptr noundef nonnull %17, i32 noundef 0, i32 noundef %364, i32 noundef %365, ptr noundef %117, ptr noundef %116, ptr noundef nonnull %8, ptr noundef nonnull %8) #6
  %367 = icmp eq i32 %366, 0
  br i1 %367, label %368, label %.thread916

368:                                              ; preds = %._crit_edge973
  %369 = call double @libxsmm_matdiff_epsilon(ptr noundef nonnull %17) #6
  %370 = fcmp ugt double %369, 7.000000e-04
  br i1 %370, label %.thread916, label %371

371:                                              ; preds = %368
  %372 = load i32, ptr %3, align 4, !tbaa !9
  %373 = load i32, ptr %4, align 4, !tbaa !9
  %374 = load i32, ptr %5, align 4, !tbaa !9
  call void @libxsmm_gemm_batch(i32 noundef 0, i32 noundef 0, ptr noundef nonnull %11, ptr noundef nonnull %12, i32 noundef %372, i32 noundef %373, i32 noundef %374, ptr noundef nonnull %9, ptr noundef nonnull %110, ptr noundef nonnull %6, ptr noundef nonnull %126, ptr noundef %113, ptr noundef nonnull %7, ptr noundef nonnull %127, ptr noundef nonnull %10, ptr noundef %116, ptr noundef nonnull %8, ptr noundef nonnull %128, i32 noundef 4, i32 noundef 0, i32 noundef %97, i32 noundef 0) #6
  br i1 %168, label %.lr.ph976.preheader, label %._crit_edge977

.lr.ph976.preheader:                              ; preds = %371
  %wide.trip.count1113 = zext nneg i32 %97 to i64
  br label %.lr.ph976

.lr.ph976:                                        ; preds = %.lr.ph976.preheader, %.lr.ph976
  %indvars.iv1110 = phi i64 [ 0, %.lr.ph976.preheader ], [ %indvars.iv.next1111, %.lr.ph976 ]
  %375 = call ptr @libxsmm_original_dgemm() #6
  %376 = getelementptr inbounds i32, ptr %126, i64 %indvars.iv1110
  %377 = load i32, ptr %376, align 4, !tbaa !9
  %378 = sext i32 %377 to i64
  %379 = getelementptr inbounds double, ptr %110, i64 %378
  %380 = getelementptr inbounds i32, ptr %127, i64 %indvars.iv1110
  %381 = load i32, ptr %380, align 4, !tbaa !9
  %382 = sext i32 %381 to i64
  %383 = getelementptr inbounds double, ptr %113, i64 %382
  %384 = getelementptr inbounds i32, ptr %128, i64 %indvars.iv1110
  %385 = load i32, ptr %384, align 4, !tbaa !9
  %386 = sext i32 %385 to i64
  %387 = getelementptr inbounds double, ptr %117, i64 %386
  call void %375(ptr noundef nonnull %11, ptr noundef nonnull %12, ptr noundef nonnull %3, ptr noundef nonnull %4, ptr noundef nonnull %5, ptr noundef nonnull %9, ptr noundef nonnull %379, ptr noundef nonnull %6, ptr noundef %383, ptr noundef nonnull %7, ptr noundef nonnull %10, ptr noundef %387, ptr noundef nonnull %8) #6
  %indvars.iv.next1111 = add nuw nsw i64 %indvars.iv1110, 1
  %exitcond1114.not = icmp eq i64 %indvars.iv.next1111, %wide.trip.count1113
  br i1 %exitcond1114.not, label %._crit_edge977, label %.lr.ph976, !llvm.loop !41

._crit_edge977:                                   ; preds = %.lr.ph976, %371
  %388 = load i32, ptr %3, align 4, !tbaa !9
  %389 = load i32, ptr %4, align 4, !tbaa !9
  %390 = call i32 @libxsmm_matdiff(ptr noundef nonnull %17, i32 noundef 0, i32 noundef %388, i32 noundef %389, ptr noundef %117, ptr noundef %116, ptr noundef nonnull %8, ptr noundef nonnull %8) #6
  %391 = icmp eq i32 %390, 0
  br i1 %391, label %392, label %.thread916

392:                                              ; preds = %._crit_edge977
  %393 = call double @libxsmm_matdiff_epsilon(ptr noundef nonnull %17) #6
  %394 = fcmp ugt double %393, 7.000000e-04
  br i1 %394, label %.thread916, label %395

395:                                              ; preds = %392
  %396 = load i32, ptr %3, align 4, !tbaa !9
  %397 = load i32, ptr %4, align 4, !tbaa !9
  %398 = load i32, ptr %5, align 4, !tbaa !9
  call void @libxsmm_gemm_batch(i32 noundef 0, i32 noundef 0, ptr noundef nonnull %11, ptr noundef nonnull %12, i32 noundef %396, i32 noundef %397, i32 noundef %398, ptr noundef nonnull %9, ptr noundef nonnull %110, ptr noundef nonnull %6, ptr noundef nonnull %126, ptr noundef %113, ptr noundef nonnull %7, ptr noundef nonnull %127, ptr noundef nonnull %10, ptr noundef %116, ptr noundef nonnull %8, ptr noundef nonnull %128, i32 noundef 4, i32 noundef 0, i32 noundef %97, i32 noundef 1) #6
  br i1 %168, label %.lr.ph980.preheader, label %._crit_edge981

.lr.ph980.preheader:                              ; preds = %395
  %wide.trip.count1118 = zext nneg i32 %97 to i64
  br label %.lr.ph980

.lr.ph980:                                        ; preds = %.lr.ph980.preheader, %.lr.ph980
  %indvars.iv1115 = phi i64 [ 0, %.lr.ph980.preheader ], [ %indvars.iv.next1116, %.lr.ph980 ]
  %399 = call ptr @libxsmm_original_dgemm() #6
  %400 = getelementptr inbounds i32, ptr %126, i64 %indvars.iv1115
  %401 = load i32, ptr %400, align 4, !tbaa !9
  %402 = sext i32 %401 to i64
  %403 = getelementptr inbounds double, ptr %110, i64 %402
  %404 = getelementptr inbounds i32, ptr %127, i64 %indvars.iv1115
  %405 = load i32, ptr %404, align 4, !tbaa !9
  %406 = sext i32 %405 to i64
  %407 = getelementptr inbounds double, ptr %113, i64 %406
  %408 = getelementptr inbounds i32, ptr %128, i64 %indvars.iv1115
  %409 = load i32, ptr %408, align 4, !tbaa !9
  %410 = sext i32 %409 to i64
  %411 = getelementptr inbounds double, ptr %117, i64 %410
  call void %399(ptr noundef nonnull %11, ptr noundef nonnull %12, ptr noundef nonnull %3, ptr noundef nonnull %4, ptr noundef nonnull %5, ptr noundef nonnull %9, ptr noundef nonnull %403, ptr noundef nonnull %6, ptr noundef %407, ptr noundef nonnull %7, ptr noundef nonnull %10, ptr noundef %411, ptr noundef nonnull %8) #6
  %indvars.iv.next1116 = add nuw nsw i64 %indvars.iv1115, 1
  %exitcond1119.not = icmp eq i64 %indvars.iv.next1116, %wide.trip.count1118
  br i1 %exitcond1119.not, label %._crit_edge981, label %.lr.ph980, !llvm.loop !42

._crit_edge981:                                   ; preds = %.lr.ph980, %395
  %412 = load i32, ptr %3, align 4, !tbaa !9
  %413 = load i32, ptr %4, align 4, !tbaa !9
  %414 = call i32 @libxsmm_matdiff(ptr noundef nonnull %17, i32 noundef 0, i32 noundef %412, i32 noundef %413, ptr noundef %117, ptr noundef %116, ptr noundef nonnull %8, ptr noundef nonnull %8) #6
  %415 = icmp eq i32 %414, 0
  br i1 %415, label %416, label %.thread916

416:                                              ; preds = %._crit_edge981
  %417 = call double @libxsmm_matdiff_epsilon(ptr noundef nonnull %17) #6
  %418 = fcmp ugt double %417, 7.000000e-04
  br i1 %418, label %.thread916, label %419

419:                                              ; preds = %416
  %420 = load i32, ptr %3, align 4, !tbaa !9
  %421 = load i32, ptr %4, align 4, !tbaa !9
  %422 = load i32, ptr %5, align 4, !tbaa !9
  call void @libxsmm_gemm_batch(i32 noundef 0, i32 noundef 0, ptr noundef nonnull %11, ptr noundef nonnull %12, i32 noundef %420, i32 noundef %421, i32 noundef %422, ptr noundef nonnull %9, ptr noundef nonnull %110, ptr noundef nonnull %6, ptr noundef nonnull %126, ptr noundef %113, ptr noundef nonnull %7, ptr noundef nonnull %127, ptr noundef nonnull %10, ptr noundef %116, ptr noundef nonnull %8, ptr noundef nonnull %128, i32 noundef 4, i32 noundef 0, i32 noundef %97, i32 noundef 0) #6
  br i1 %168, label %.lr.ph984.preheader, label %._crit_edge985

.lr.ph984.preheader:                              ; preds = %419
  %wide.trip.count1123 = zext nneg i32 %97 to i64
  br label %.lr.ph984

.lr.ph984:                                        ; preds = %.lr.ph984.preheader, %.lr.ph984
  %indvars.iv1120 = phi i64 [ 0, %.lr.ph984.preheader ], [ %indvars.iv.next1121, %.lr.ph984 ]
  %423 = call ptr @libxsmm_original_dgemm() #6
  %424 = getelementptr inbounds i32, ptr %126, i64 %indvars.iv1120
  %425 = load i32, ptr %424, align 4, !tbaa !9
  %426 = sext i32 %425 to i64
  %427 = getelementptr inbounds double, ptr %110, i64 %426
  %428 = getelementptr inbounds i32, ptr %127, i64 %indvars.iv1120
  %429 = load i32, ptr %428, align 4, !tbaa !9
  %430 = sext i32 %429 to i64
  %431 = getelementptr inbounds double, ptr %113, i64 %430
  %432 = getelementptr inbounds i32, ptr %128, i64 %indvars.iv1120
  %433 = load i32, ptr %432, align 4, !tbaa !9
  %434 = sext i32 %433 to i64
  %435 = getelementptr inbounds double, ptr %117, i64 %434
  call void %423(ptr noundef nonnull %11, ptr noundef nonnull %12, ptr noundef nonnull %3, ptr noundef nonnull %4, ptr noundef nonnull %5, ptr noundef nonnull %9, ptr noundef nonnull %427, ptr noundef nonnull %6, ptr noundef %431, ptr noundef nonnull %7, ptr noundef nonnull %10, ptr noundef %435, ptr noundef nonnull %8) #6
  %indvars.iv.next1121 = add nuw nsw i64 %indvars.iv1120, 1
  %exitcond1124.not = icmp eq i64 %indvars.iv.next1121, %wide.trip.count1123
  br i1 %exitcond1124.not, label %._crit_edge985, label %.lr.ph984, !llvm.loop !43

._crit_edge985:                                   ; preds = %.lr.ph984, %419
  call void @libxsmm_matdiff_reduce(ptr noundef nonnull %16, ptr noundef nonnull %17) #6
  %436 = load i32, ptr %3, align 4, !tbaa !9
  %437 = load i32, ptr %4, align 4, !tbaa !9
  %438 = call i32 @libxsmm_matdiff(ptr noundef nonnull %17, i32 noundef 0, i32 noundef %436, i32 noundef %437, ptr noundef %117, ptr noundef %116, ptr noundef nonnull %8, ptr noundef nonnull %8) #6
  %439 = icmp eq i32 %438, 0
  br i1 %439, label %440, label %.thread916

440:                                              ; preds = %._crit_edge985
  %441 = call double @libxsmm_matdiff_epsilon(ptr noundef nonnull %17) #6
  %442 = fcmp ugt double %441, 7.000000e-04
  br i1 %442, label %.thread916, label %443

443:                                              ; preds = %440
  %444 = load i32, ptr %3, align 4, !tbaa !9
  %445 = load i32, ptr %4, align 4, !tbaa !9
  %446 = load i32, ptr %5, align 4, !tbaa !9
  call void @libxsmm_gemm_batch(i32 noundef 0, i32 noundef 0, ptr noundef nonnull %11, ptr noundef nonnull %12, i32 noundef %444, i32 noundef %445, i32 noundef %446, ptr noundef nonnull %9, ptr noundef nonnull %110, ptr noundef nonnull %6, ptr noundef nonnull %126, ptr noundef %113, ptr noundef nonnull %7, ptr noundef nonnull %127, ptr noundef nonnull %10, ptr noundef %116, ptr noundef nonnull %8, ptr noundef nonnull %128, i32 noundef 4, i32 noundef 0, i32 noundef %97, i32 noundef 1) #6
  br i1 %168, label %.lr.ph988.preheader, label %._crit_edge989

.lr.ph988.preheader:                              ; preds = %443
  %wide.trip.count1128 = zext nneg i32 %97 to i64
  br label %.lr.ph988

.lr.ph988:                                        ; preds = %.lr.ph988.preheader, %.lr.ph988
  %indvars.iv1125 = phi i64 [ 0, %.lr.ph988.preheader ], [ %indvars.iv.next1126, %.lr.ph988 ]
  %447 = call ptr @libxsmm_original_dgemm() #6
  %448 = getelementptr inbounds i32, ptr %126, i64 %indvars.iv1125
  %449 = load i32, ptr %448, align 4, !tbaa !9
  %450 = sext i32 %449 to i64
  %451 = getelementptr inbounds double, ptr %110, i64 %450
  %452 = getelementptr inbounds i32, ptr %127, i64 %indvars.iv1125
  %453 = load i32, ptr %452, align 4, !tbaa !9
  %454 = sext i32 %453 to i64
  %455 = getelementptr inbounds double, ptr %113, i64 %454
  %456 = getelementptr inbounds i32, ptr %128, i64 %indvars.iv1125
  %457 = load i32, ptr %456, align 4, !tbaa !9
  %458 = sext i32 %457 to i64
  %459 = getelementptr inbounds double, ptr %117, i64 %458
  call void %447(ptr noundef nonnull %11, ptr noundef nonnull %12, ptr noundef nonnull %3, ptr noundef nonnull %4, ptr noundef nonnull %5, ptr noundef nonnull %9, ptr noundef nonnull %451, ptr noundef nonnull %6, ptr noundef %455, ptr noundef nonnull %7, ptr noundef nonnull %10, ptr noundef %459, ptr noundef nonnull %8) #6
  %indvars.iv.next1126 = add nuw nsw i64 %indvars.iv1125, 1
  %exitcond1129.not = icmp eq i64 %indvars.iv.next1126, %wide.trip.count1128
  br i1 %exitcond1129.not, label %._crit_edge989, label %.lr.ph988, !llvm.loop !44

._crit_edge989:                                   ; preds = %.lr.ph988, %443
  call void @libxsmm_matdiff_reduce(ptr noundef nonnull %16, ptr noundef nonnull %17) #6
  %460 = load i32, ptr %3, align 4, !tbaa !9
  %461 = load i32, ptr %4, align 4, !tbaa !9
  %462 = call i32 @libxsmm_matdiff(ptr noundef nonnull %17, i32 noundef 0, i32 noundef %460, i32 noundef %461, ptr noundef %117, ptr noundef %116, ptr noundef nonnull %8, ptr noundef nonnull %8) #6
  %463 = icmp eq i32 %462, 0
  br i1 %463, label %464, label %.thread916

464:                                              ; preds = %._crit_edge989
  %465 = call double @libxsmm_matdiff_epsilon(ptr noundef nonnull %17) #6
  %466 = fcmp ugt double %465, 7.000000e-04
  br i1 %466, label %.thread916, label %467

467:                                              ; preds = %464
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %18) #6
  store i32 8, ptr %18, align 4, !tbaa !9
  br i1 %168, label %.lr.ph992.preheader, label %._crit_edge997.critedge

.lr.ph992.preheader:                              ; preds = %467
  %wide.trip.count1133 = zext nneg i32 %97 to i64
  %min.iters.check1310 = icmp eq i32 %97, 1
  br i1 %min.iters.check1310, label %.lr.ph992.preheader1326, label %vector.ph1311

vector.ph1311:                                    ; preds = %.lr.ph992.preheader
  %n.vec1313 = and i64 %wide.trip.count1133, 2147483646
  br label %vector.body1315

vector.body1315:                                  ; preds = %vector.body1315, %vector.ph1311
  %index1316 = phi i64 [ 0, %vector.ph1311 ], [ %index.next1319, %vector.body1315 ]
  %468 = getelementptr inbounds i32, ptr %126, i64 %index1316
  %wide.load = load <2 x i32>, ptr %468, align 4, !tbaa !9
  %469 = sext <2 x i32> %wide.load to <2 x i64>
  %470 = getelementptr inbounds double, ptr %110, <2 x i64> %469
  %471 = getelementptr inbounds ptr, ptr %131, i64 %index1316
  store <2 x ptr> %470, ptr %471, align 8, !tbaa !5
  %472 = getelementptr inbounds i32, ptr %127, i64 %index1316
  %wide.load1317 = load <2 x i32>, ptr %472, align 4, !tbaa !9
  %473 = sext <2 x i32> %wide.load1317 to <2 x i64>
  %474 = getelementptr inbounds double, ptr %113, <2 x i64> %473
  %475 = getelementptr inbounds ptr, ptr %132, i64 %index1316
  store <2 x ptr> %474, ptr %475, align 8, !tbaa !5
  %476 = getelementptr inbounds i32, ptr %128, i64 %index1316
  %wide.load1318 = load <2 x i32>, ptr %476, align 4, !tbaa !9
  %477 = sext <2 x i32> %wide.load1318 to <2 x i64>
  %478 = getelementptr inbounds double, ptr %116, <2 x i64> %477
  %479 = getelementptr inbounds ptr, ptr %133, i64 %index1316
  store <2 x ptr> %478, ptr %479, align 8, !tbaa !5
  %480 = getelementptr inbounds double, ptr %117, <2 x i64> %477
  %481 = getelementptr inbounds ptr, ptr %134, i64 %index1316
  store <2 x ptr> %480, ptr %481, align 8, !tbaa !5
  %index.next1319 = add nuw i64 %index1316, 2
  %482 = icmp eq i64 %index.next1319, %n.vec1313
  br i1 %482, label %middle.block1308, label %vector.body1315, !llvm.loop !45

middle.block1308:                                 ; preds = %vector.body1315
  %cmp.n1320 = icmp eq i64 %n.vec1313, %wide.trip.count1133
  br i1 %cmp.n1320, label %._crit_edge993, label %.lr.ph992.preheader1326

.lr.ph992.preheader1326:                          ; preds = %middle.block1308, %.lr.ph992.preheader
  %indvars.iv1130.ph = phi i64 [ 0, %.lr.ph992.preheader ], [ %n.vec1313, %middle.block1308 ]
  br label %.lr.ph992

.lr.ph992:                                        ; preds = %.lr.ph992.preheader1326, %.lr.ph992
  %indvars.iv1130 = phi i64 [ %indvars.iv.next1131, %.lr.ph992 ], [ %indvars.iv1130.ph, %.lr.ph992.preheader1326 ]
  %483 = getelementptr inbounds i32, ptr %126, i64 %indvars.iv1130
  %484 = load i32, ptr %483, align 4, !tbaa !9
  %485 = sext i32 %484 to i64
  %486 = getelementptr inbounds double, ptr %110, i64 %485
  %487 = getelementptr inbounds ptr, ptr %131, i64 %indvars.iv1130
  store ptr %486, ptr %487, align 8, !tbaa !5
  %488 = getelementptr inbounds i32, ptr %127, i64 %indvars.iv1130
  %489 = load i32, ptr %488, align 4, !tbaa !9
  %490 = sext i32 %489 to i64
  %491 = getelementptr inbounds double, ptr %113, i64 %490
  %492 = getelementptr inbounds ptr, ptr %132, i64 %indvars.iv1130
  store ptr %491, ptr %492, align 8, !tbaa !5
  %493 = getelementptr inbounds i32, ptr %128, i64 %indvars.iv1130
  %494 = load i32, ptr %493, align 4, !tbaa !9
  %495 = sext i32 %494 to i64
  %496 = getelementptr inbounds double, ptr %116, i64 %495
  %497 = getelementptr inbounds ptr, ptr %133, i64 %indvars.iv1130
  store ptr %496, ptr %497, align 8, !tbaa !5
  %498 = getelementptr inbounds double, ptr %117, i64 %495
  %499 = getelementptr inbounds ptr, ptr %134, i64 %indvars.iv1130
  store ptr %498, ptr %499, align 8, !tbaa !5
  %indvars.iv.next1131 = add nuw nsw i64 %indvars.iv1130, 1
  %exitcond1134.not = icmp eq i64 %indvars.iv.next1131, %wide.trip.count1133
  br i1 %exitcond1134.not, label %._crit_edge993, label %.lr.ph992, !llvm.loop !46

._crit_edge993:                                   ; preds = %.lr.ph992, %middle.block1308
  %500 = load i32, ptr %3, align 4, !tbaa !9
  %501 = load i32, ptr %4, align 4, !tbaa !9
  %502 = load i32, ptr %5, align 4, !tbaa !9
  call void @libxsmm_gemm_batch(i32 noundef 0, i32 noundef 0, ptr noundef nonnull %11, ptr noundef nonnull %12, i32 noundef %500, i32 noundef %501, i32 noundef %502, ptr noundef nonnull %9, ptr noundef nonnull %131, ptr noundef nonnull %6, ptr noundef nonnull %18, ptr noundef nonnull %132, ptr noundef nonnull %7, ptr noundef nonnull %18, ptr noundef nonnull %10, ptr noundef nonnull %133, ptr noundef nonnull %8, ptr noundef nonnull %18, i32 noundef 0, i32 noundef 0, i32 noundef %97, i32 noundef 0) #6
  br i1 %168, label %.lr.ph996.preheader, label %._crit_edge997

.lr.ph996.preheader:                              ; preds = %._crit_edge993
  %wide.trip.count1138 = zext nneg i32 %97 to i64
  br label %.lr.ph996

.lr.ph996:                                        ; preds = %.lr.ph996.preheader, %.lr.ph996
  %indvars.iv1135 = phi i64 [ 0, %.lr.ph996.preheader ], [ %indvars.iv.next1136, %.lr.ph996 ]
  %503 = call ptr @libxsmm_original_dgemm() #6
  %504 = getelementptr inbounds ptr, ptr %131, i64 %indvars.iv1135
  %505 = load ptr, ptr %504, align 8, !tbaa !5
  %506 = getelementptr inbounds ptr, ptr %132, i64 %indvars.iv1135
  %507 = load ptr, ptr %506, align 8, !tbaa !5
  %508 = getelementptr inbounds ptr, ptr %134, i64 %indvars.iv1135
  %509 = load ptr, ptr %508, align 8, !tbaa !5
  call void %503(ptr noundef nonnull %11, ptr noundef nonnull %12, ptr noundef nonnull %3, ptr noundef nonnull %4, ptr noundef nonnull %5, ptr noundef nonnull %9, ptr noundef %505, ptr noundef nonnull %6, ptr noundef %507, ptr noundef nonnull %7, ptr noundef nonnull %10, ptr noundef %509, ptr noundef nonnull %8) #6
  %indvars.iv.next1136 = add nuw nsw i64 %indvars.iv1135, 1
  %exitcond1139.not = icmp eq i64 %indvars.iv.next1136, %wide.trip.count1138
  br i1 %exitcond1139.not, label %._crit_edge997, label %.lr.ph996, !llvm.loop !47

._crit_edge997.critedge:                          ; preds = %467
  %510 = load i32, ptr %3, align 4, !tbaa !9
  %511 = load i32, ptr %4, align 4, !tbaa !9
  %512 = load i32, ptr %5, align 4, !tbaa !9
  call void @libxsmm_gemm_batch(i32 noundef 0, i32 noundef 0, ptr noundef nonnull %11, ptr noundef nonnull %12, i32 noundef %510, i32 noundef %511, i32 noundef %512, ptr noundef nonnull %9, ptr noundef nonnull %131, ptr noundef nonnull %6, ptr noundef nonnull %18, ptr noundef nonnull %132, ptr noundef nonnull %7, ptr noundef nonnull %18, ptr noundef nonnull %10, ptr noundef nonnull %133, ptr noundef nonnull %8, ptr noundef nonnull %18, i32 noundef 0, i32 noundef 0, i32 noundef %97, i32 noundef 0) #6
  br label %._crit_edge997

._crit_edge997:                                   ; preds = %.lr.ph996, %._crit_edge997.critedge, %._crit_edge993
  call void @libxsmm_matdiff_reduce(ptr noundef nonnull %16, ptr noundef nonnull %17) #6
  %513 = load i32, ptr %3, align 4, !tbaa !9
  %514 = load i32, ptr %4, align 4, !tbaa !9
  %515 = call i32 @libxsmm_matdiff(ptr noundef nonnull %17, i32 noundef 0, i32 noundef %513, i32 noundef %514, ptr noundef %117, ptr noundef %116, ptr noundef nonnull %8, ptr noundef nonnull %8) #6
  %516 = icmp eq i32 %515, 0
  br i1 %516, label %517, label %.thread869

517:                                              ; preds = %._crit_edge997
  %518 = call double @libxsmm_matdiff_epsilon(ptr noundef nonnull %17) #6
  %519 = fcmp ugt double %518, 7.000000e-04
  br i1 %519, label %.thread869, label %520

.thread869:                                       ; preds = %._crit_edge997, %517
  %.13.ph = phi i32 [ %515, %._crit_edge997 ], [ 1, %517 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %18) #6
  br label %.thread916

520:                                              ; preds = %517
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %18) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %19) #6
  store i32 8, ptr %19, align 4, !tbaa !9
  %521 = load i32, ptr %3, align 4, !tbaa !9
  %522 = load i32, ptr %4, align 4, !tbaa !9
  %523 = load i32, ptr %5, align 4, !tbaa !9
  call void @libxsmm_gemm_batch(i32 noundef 0, i32 noundef 0, ptr noundef nonnull %11, ptr noundef nonnull %12, i32 noundef %521, i32 noundef %522, i32 noundef %523, ptr noundef nonnull %9, ptr noundef nonnull %131, ptr noundef nonnull %6, ptr noundef nonnull %19, ptr noundef nonnull %132, ptr noundef nonnull %7, ptr noundef nonnull %19, ptr noundef nonnull %10, ptr noundef nonnull %133, ptr noundef nonnull %8, ptr noundef nonnull %19, i32 noundef 0, i32 noundef 0, i32 noundef %97, i32 noundef 1) #6
  br i1 %168, label %.lr.ph1000.preheader, label %._crit_edge1001

.lr.ph1000.preheader:                             ; preds = %520
  %wide.trip.count1143 = zext nneg i32 %97 to i64
  br label %.lr.ph1000

.lr.ph1000:                                       ; preds = %.lr.ph1000.preheader, %.lr.ph1000
  %indvars.iv1140 = phi i64 [ 0, %.lr.ph1000.preheader ], [ %indvars.iv.next1141, %.lr.ph1000 ]
  %524 = call ptr @libxsmm_original_dgemm() #6
  %525 = getelementptr inbounds ptr, ptr %131, i64 %indvars.iv1140
  %526 = load ptr, ptr %525, align 8, !tbaa !5
  %527 = getelementptr inbounds ptr, ptr %132, i64 %indvars.iv1140
  %528 = load ptr, ptr %527, align 8, !tbaa !5
  %529 = getelementptr inbounds ptr, ptr %134, i64 %indvars.iv1140
  %530 = load ptr, ptr %529, align 8, !tbaa !5
  call void %524(ptr noundef nonnull %11, ptr noundef nonnull %12, ptr noundef nonnull %3, ptr noundef nonnull %4, ptr noundef nonnull %5, ptr noundef nonnull %9, ptr noundef %526, ptr noundef nonnull %6, ptr noundef %528, ptr noundef nonnull %7, ptr noundef nonnull %10, ptr noundef %530, ptr noundef nonnull %8) #6
  %indvars.iv.next1141 = add nuw nsw i64 %indvars.iv1140, 1
  %exitcond1144.not = icmp eq i64 %indvars.iv.next1141, %wide.trip.count1143
  br i1 %exitcond1144.not, label %._crit_edge1001, label %.lr.ph1000, !llvm.loop !48

._crit_edge1001:                                  ; preds = %.lr.ph1000, %520
  call void @libxsmm_matdiff_reduce(ptr noundef nonnull %16, ptr noundef nonnull %17) #6
  %531 = load i32, ptr %3, align 4, !tbaa !9
  %532 = load i32, ptr %4, align 4, !tbaa !9
  %533 = call i32 @libxsmm_matdiff(ptr noundef nonnull %17, i32 noundef 0, i32 noundef %531, i32 noundef %532, ptr noundef %117, ptr noundef %116, ptr noundef nonnull %8, ptr noundef nonnull %8) #6
  %534 = icmp eq i32 %533, 0
  br i1 %534, label %535, label %.thread876

535:                                              ; preds = %._crit_edge1001
  %536 = call double @libxsmm_matdiff_epsilon(ptr noundef nonnull %17) #6
  %537 = fcmp ugt double %536, 7.000000e-04
  br i1 %537, label %.thread876, label %538

.thread876:                                       ; preds = %._crit_edge1001, %535
  %.16.ph = phi i32 [ %533, %._crit_edge1001 ], [ 1, %535 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %19) #6
  br label %.thread916

538:                                              ; preds = %535
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %19) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %20) #6
  store i32 8, ptr %20, align 4, !tbaa !9
  %539 = load i32, ptr %3, align 4, !tbaa !9
  %540 = load i32, ptr %4, align 4, !tbaa !9
  %541 = load i32, ptr %5, align 4, !tbaa !9
  call void @libxsmm_gemm_batch(i32 noundef 0, i32 noundef 0, ptr noundef nonnull %11, ptr noundef nonnull %12, i32 noundef %539, i32 noundef %540, i32 noundef %541, ptr noundef nonnull %9, ptr noundef nonnull %131, ptr noundef nonnull %6, ptr noundef nonnull %20, ptr noundef nonnull %132, ptr noundef nonnull %7, ptr noundef nonnull %20, ptr noundef nonnull %10, ptr noundef nonnull %133, ptr noundef nonnull %8, ptr noundef nonnull %20, i32 noundef 0, i32 noundef 0, i32 noundef %97, i32 noundef 0) #6
  br i1 %168, label %.lr.ph1004.preheader, label %._crit_edge1005

.lr.ph1004.preheader:                             ; preds = %538
  %wide.trip.count1148 = zext nneg i32 %97 to i64
  br label %.lr.ph1004

.lr.ph1004:                                       ; preds = %.lr.ph1004.preheader, %.lr.ph1004
  %indvars.iv1145 = phi i64 [ 0, %.lr.ph1004.preheader ], [ %indvars.iv.next1146, %.lr.ph1004 ]
  %542 = call ptr @libxsmm_original_dgemm() #6
  %543 = getelementptr inbounds ptr, ptr %131, i64 %indvars.iv1145
  %544 = load ptr, ptr %543, align 8, !tbaa !5
  %545 = getelementptr inbounds ptr, ptr %132, i64 %indvars.iv1145
  %546 = load ptr, ptr %545, align 8, !tbaa !5
  %547 = getelementptr inbounds ptr, ptr %134, i64 %indvars.iv1145
  %548 = load ptr, ptr %547, align 8, !tbaa !5
  call void %542(ptr noundef nonnull %11, ptr noundef nonnull %12, ptr noundef nonnull %3, ptr noundef nonnull %4, ptr noundef nonnull %5, ptr noundef nonnull %9, ptr noundef %544, ptr noundef nonnull %6, ptr noundef %546, ptr noundef nonnull %7, ptr noundef nonnull %10, ptr noundef %548, ptr noundef nonnull %8) #6
  %indvars.iv.next1146 = add nuw nsw i64 %indvars.iv1145, 1
  %exitcond1149.not = icmp eq i64 %indvars.iv.next1146, %wide.trip.count1148
  br i1 %exitcond1149.not, label %._crit_edge1005, label %.lr.ph1004, !llvm.loop !49

._crit_edge1005:                                  ; preds = %.lr.ph1004, %538
  call void @libxsmm_matdiff_reduce(ptr noundef nonnull %16, ptr noundef nonnull %17) #6
  %549 = load i32, ptr %3, align 4, !tbaa !9
  %550 = load i32, ptr %4, align 4, !tbaa !9
  %551 = call i32 @libxsmm_matdiff(ptr noundef nonnull %17, i32 noundef 0, i32 noundef %549, i32 noundef %550, ptr noundef %117, ptr noundef %116, ptr noundef nonnull %8, ptr noundef nonnull %8) #6
  %552 = icmp eq i32 %551, 0
  br i1 %552, label %553, label %.thread883

553:                                              ; preds = %._crit_edge1005
  %554 = call double @libxsmm_matdiff_epsilon(ptr noundef nonnull %17) #6
  %555 = fcmp ugt double %554, 7.000000e-04
  br i1 %555, label %.thread883, label %556

.thread883:                                       ; preds = %._crit_edge1005, %553
  %.19.ph = phi i32 [ %551, %._crit_edge1005 ], [ 1, %553 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %20) #6
  br label %.thread916

556:                                              ; preds = %553
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %20) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %21) #6
  store i32 8, ptr %21, align 4, !tbaa !9
  %557 = load i32, ptr %3, align 4, !tbaa !9
  %558 = load i32, ptr %4, align 4, !tbaa !9
  %559 = load i32, ptr %5, align 4, !tbaa !9
  call void @libxsmm_gemm_batch(i32 noundef 0, i32 noundef 0, ptr noundef nonnull %11, ptr noundef nonnull %12, i32 noundef %557, i32 noundef %558, i32 noundef %559, ptr noundef nonnull %9, ptr noundef nonnull %131, ptr noundef nonnull %6, ptr noundef nonnull %21, ptr noundef nonnull %132, ptr noundef nonnull %7, ptr noundef nonnull %21, ptr noundef nonnull %10, ptr noundef nonnull %133, ptr noundef nonnull %8, ptr noundef nonnull %21, i32 noundef 0, i32 noundef 0, i32 noundef %97, i32 noundef 1) #6
  br i1 %168, label %.lr.ph1008.preheader, label %._crit_edge1009

.lr.ph1008.preheader:                             ; preds = %556
  %wide.trip.count1153 = zext nneg i32 %97 to i64
  br label %.lr.ph1008

.lr.ph1008:                                       ; preds = %.lr.ph1008.preheader, %.lr.ph1008
  %indvars.iv1150 = phi i64 [ 0, %.lr.ph1008.preheader ], [ %indvars.iv.next1151, %.lr.ph1008 ]
  %560 = call ptr @libxsmm_original_dgemm() #6
  %561 = getelementptr inbounds ptr, ptr %131, i64 %indvars.iv1150
  %562 = load ptr, ptr %561, align 8, !tbaa !5
  %563 = getelementptr inbounds ptr, ptr %132, i64 %indvars.iv1150
  %564 = load ptr, ptr %563, align 8, !tbaa !5
  %565 = getelementptr inbounds ptr, ptr %134, i64 %indvars.iv1150
  %566 = load ptr, ptr %565, align 8, !tbaa !5
  call void %560(ptr noundef nonnull %11, ptr noundef nonnull %12, ptr noundef nonnull %3, ptr noundef nonnull %4, ptr noundef nonnull %5, ptr noundef nonnull %9, ptr noundef %562, ptr noundef nonnull %6, ptr noundef %564, ptr noundef nonnull %7, ptr noundef nonnull %10, ptr noundef %566, ptr noundef nonnull %8) #6
  %indvars.iv.next1151 = add nuw nsw i64 %indvars.iv1150, 1
  %exitcond1154.not = icmp eq i64 %indvars.iv.next1151, %wide.trip.count1153
  br i1 %exitcond1154.not, label %._crit_edge1009, label %.lr.ph1008, !llvm.loop !50

._crit_edge1009:                                  ; preds = %.lr.ph1008, %556
  call void @libxsmm_matdiff_reduce(ptr noundef nonnull %16, ptr noundef nonnull %17) #6
  %567 = load i32, ptr %3, align 4, !tbaa !9
  %568 = load i32, ptr %4, align 4, !tbaa !9
  %569 = call i32 @libxsmm_matdiff(ptr noundef nonnull %17, i32 noundef 0, i32 noundef %567, i32 noundef %568, ptr noundef %117, ptr noundef %116, ptr noundef nonnull %8, ptr noundef nonnull %8) #6
  %570 = icmp eq i32 %569, 0
  br i1 %570, label %571, label %.thread890

571:                                              ; preds = %._crit_edge1009
  %572 = call double @libxsmm_matdiff_epsilon(ptr noundef nonnull %17) #6
  %573 = fcmp ugt double %572, 7.000000e-04
  br i1 %573, label %.thread890, label %574

.thread890:                                       ; preds = %._crit_edge1009, %571
  %.22.ph = phi i32 [ %569, %._crit_edge1009 ], [ 1, %571 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %21) #6
  br label %.thread916

574:                                              ; preds = %571
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %21) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %22) #6
  store i32 8, ptr %22, align 4, !tbaa !9
  %575 = load i32, ptr %3, align 4, !tbaa !9
  %576 = load i32, ptr %4, align 4, !tbaa !9
  %577 = load i32, ptr %5, align 4, !tbaa !9
  call void @libxsmm_gemm_batch(i32 noundef 0, i32 noundef 0, ptr noundef nonnull %11, ptr noundef nonnull %12, i32 noundef %575, i32 noundef %576, i32 noundef %577, ptr noundef nonnull %9, ptr noundef nonnull %131, ptr noundef nonnull %6, ptr noundef nonnull %22, ptr noundef nonnull %132, ptr noundef nonnull %7, ptr noundef nonnull %22, ptr noundef nonnull %10, ptr noundef nonnull %133, ptr noundef nonnull %8, ptr noundef nonnull %22, i32 noundef 0, i32 noundef 0, i32 noundef %97, i32 noundef 0) #6
  br i1 %168, label %.lr.ph1012.preheader, label %._crit_edge1013

.lr.ph1012.preheader:                             ; preds = %574
  %wide.trip.count1158 = zext nneg i32 %97 to i64
  br label %.lr.ph1012

.lr.ph1012:                                       ; preds = %.lr.ph1012.preheader, %.lr.ph1012
  %indvars.iv1155 = phi i64 [ 0, %.lr.ph1012.preheader ], [ %indvars.iv.next1156, %.lr.ph1012 ]
  %578 = call ptr @libxsmm_original_dgemm() #6
  %579 = getelementptr inbounds ptr, ptr %131, i64 %indvars.iv1155
  %580 = load ptr, ptr %579, align 8, !tbaa !5
  %581 = getelementptr inbounds ptr, ptr %132, i64 %indvars.iv1155
  %582 = load ptr, ptr %581, align 8, !tbaa !5
  %583 = getelementptr inbounds ptr, ptr %134, i64 %indvars.iv1155
  %584 = load ptr, ptr %583, align 8, !tbaa !5
  call void %578(ptr noundef nonnull %11, ptr noundef nonnull %12, ptr noundef nonnull %3, ptr noundef nonnull %4, ptr noundef nonnull %5, ptr noundef nonnull %9, ptr noundef %580, ptr noundef nonnull %6, ptr noundef %582, ptr noundef nonnull %7, ptr noundef nonnull %10, ptr noundef %584, ptr noundef nonnull %8) #6
  %indvars.iv.next1156 = add nuw nsw i64 %indvars.iv1155, 1
  %exitcond1159.not = icmp eq i64 %indvars.iv.next1156, %wide.trip.count1158
  br i1 %exitcond1159.not, label %._crit_edge1013, label %.lr.ph1012, !llvm.loop !51

._crit_edge1013:                                  ; preds = %.lr.ph1012, %574
  call void @libxsmm_matdiff_reduce(ptr noundef nonnull %16, ptr noundef nonnull %17) #6
  %585 = load i32, ptr %3, align 4, !tbaa !9
  %586 = load i32, ptr %4, align 4, !tbaa !9
  %587 = call i32 @libxsmm_matdiff(ptr noundef nonnull %17, i32 noundef 0, i32 noundef %585, i32 noundef %586, ptr noundef %117, ptr noundef %116, ptr noundef nonnull %8, ptr noundef nonnull %8) #6
  %588 = icmp eq i32 %587, 0
  br i1 %588, label %589, label %.thread897

589:                                              ; preds = %._crit_edge1013
  %590 = call double @libxsmm_matdiff_epsilon(ptr noundef nonnull %17) #6
  %591 = fcmp ugt double %590, 7.000000e-04
  br i1 %591, label %.thread897, label %592

.thread897:                                       ; preds = %._crit_edge1013, %589
  %.25.ph = phi i32 [ %587, %._crit_edge1013 ], [ 1, %589 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %22) #6
  br label %.thread916

592:                                              ; preds = %589
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %22) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %23) #6
  store i32 8, ptr %23, align 4, !tbaa !9
  %593 = load i32, ptr %3, align 4, !tbaa !9
  %594 = load i32, ptr %4, align 4, !tbaa !9
  %595 = load i32, ptr %5, align 4, !tbaa !9
  call void @libxsmm_gemm_batch(i32 noundef 0, i32 noundef 0, ptr noundef nonnull %11, ptr noundef nonnull %12, i32 noundef %593, i32 noundef %594, i32 noundef %595, ptr noundef nonnull %9, ptr noundef nonnull %131, ptr noundef nonnull %6, ptr noundef nonnull %23, ptr noundef nonnull %132, ptr noundef nonnull %7, ptr noundef nonnull %23, ptr noundef nonnull %10, ptr noundef nonnull %133, ptr noundef nonnull %8, ptr noundef nonnull %23, i32 noundef 0, i32 noundef 0, i32 noundef %97, i32 noundef 1) #6
  br i1 %168, label %.lr.ph1016.preheader, label %._crit_edge1017

.lr.ph1016.preheader:                             ; preds = %592
  %wide.trip.count1163 = zext nneg i32 %97 to i64
  br label %.lr.ph1016

.lr.ph1016:                                       ; preds = %.lr.ph1016.preheader, %.lr.ph1016
  %indvars.iv1160 = phi i64 [ 0, %.lr.ph1016.preheader ], [ %indvars.iv.next1161, %.lr.ph1016 ]
  %596 = call ptr @libxsmm_original_dgemm() #6
  %597 = getelementptr inbounds ptr, ptr %131, i64 %indvars.iv1160
  %598 = load ptr, ptr %597, align 8, !tbaa !5
  %599 = getelementptr inbounds ptr, ptr %132, i64 %indvars.iv1160
  %600 = load ptr, ptr %599, align 8, !tbaa !5
  %601 = getelementptr inbounds ptr, ptr %134, i64 %indvars.iv1160
  %602 = load ptr, ptr %601, align 8, !tbaa !5
  call void %596(ptr noundef nonnull %11, ptr noundef nonnull %12, ptr noundef nonnull %3, ptr noundef nonnull %4, ptr noundef nonnull %5, ptr noundef nonnull %9, ptr noundef %598, ptr noundef nonnull %6, ptr noundef %600, ptr noundef nonnull %7, ptr noundef nonnull %10, ptr noundef %602, ptr noundef nonnull %8) #6
  %indvars.iv.next1161 = add nuw nsw i64 %indvars.iv1160, 1
  %exitcond1164.not = icmp eq i64 %indvars.iv.next1161, %wide.trip.count1163
  br i1 %exitcond1164.not, label %._crit_edge1017, label %.lr.ph1016, !llvm.loop !52

._crit_edge1017:                                  ; preds = %.lr.ph1016, %592
  call void @libxsmm_matdiff_reduce(ptr noundef nonnull %16, ptr noundef nonnull %17) #6
  %603 = load i32, ptr %3, align 4, !tbaa !9
  %604 = load i32, ptr %4, align 4, !tbaa !9
  %605 = call i32 @libxsmm_matdiff(ptr noundef nonnull %17, i32 noundef 0, i32 noundef %603, i32 noundef %604, ptr noundef %117, ptr noundef %116, ptr noundef nonnull %8, ptr noundef nonnull %8) #6
  %606 = icmp eq i32 %605, 0
  br i1 %606, label %607, label %.thread904

607:                                              ; preds = %._crit_edge1017
  %608 = call double @libxsmm_matdiff_epsilon(ptr noundef nonnull %17) #6
  %609 = fcmp ugt double %608, 7.000000e-04
  br i1 %609, label %.thread904, label %610

.thread904:                                       ; preds = %._crit_edge1017, %607
  %.28.ph = phi i32 [ %605, %._crit_edge1017 ], [ 1, %607 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %23) #6
  br label %.thread916

610:                                              ; preds = %607
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %23) #6
  %611 = load i32, ptr %3, align 4, !tbaa !9
  %612 = load i32, ptr %4, align 4, !tbaa !9
  %613 = load i32, ptr %5, align 4, !tbaa !9
  call void @libxsmm_gemm_strided(i32 noundef 0, i32 noundef 0, ptr noundef nonnull %11, ptr noundef nonnull %12, i32 noundef %611, i32 noundef %612, i32 noundef %613, ptr noundef nonnull %9, ptr noundef nonnull %110, ptr noundef nonnull %6, ptr noundef nonnull %13, ptr noundef %113, ptr noundef nonnull %7, ptr noundef nonnull %14, ptr noundef nonnull %10, ptr noundef %116, ptr noundef nonnull %8, ptr noundef nonnull %15, i32 noundef 0, i32 noundef %97) #6
  br i1 %168, label %.lr.ph1020, label %._crit_edge1021

.lr.ph1020:                                       ; preds = %610, %.lr.ph1020
  %.157281018 = phi i32 [ %627, %.lr.ph1020 ], [ 0, %610 ]
  %614 = call ptr @libxsmm_original_dgemm() #6
  %615 = load i32, ptr %13, align 4, !tbaa !9
  %616 = mul nsw i32 %615, %.157281018
  %617 = sext i32 %616 to i64
  %618 = getelementptr inbounds double, ptr %110, i64 %617
  %619 = load i32, ptr %14, align 4, !tbaa !9
  %620 = mul nsw i32 %619, %.157281018
  %621 = sext i32 %620 to i64
  %622 = getelementptr inbounds double, ptr %113, i64 %621
  %623 = load i32, ptr %15, align 4, !tbaa !9
  %624 = mul nsw i32 %623, %.157281018
  %625 = sext i32 %624 to i64
  %626 = getelementptr inbounds double, ptr %117, i64 %625
  call void %614(ptr noundef nonnull %11, ptr noundef nonnull %12, ptr noundef nonnull %3, ptr noundef nonnull %4, ptr noundef nonnull %5, ptr noundef nonnull %9, ptr noundef nonnull %618, ptr noundef nonnull %6, ptr noundef %622, ptr noundef nonnull %7, ptr noundef nonnull %10, ptr noundef %626, ptr noundef nonnull %8) #6
  %627 = add nuw nsw i32 %.157281018, 1
  %exitcond1165.not = icmp eq i32 %627, %97
  br i1 %exitcond1165.not, label %._crit_edge1021, label %.lr.ph1020, !llvm.loop !53

._crit_edge1021:                                  ; preds = %.lr.ph1020, %610
  call void @libxsmm_matdiff_reduce(ptr noundef nonnull %16, ptr noundef nonnull %17) #6
  %628 = load i32, ptr %3, align 4, !tbaa !9
  %629 = load i32, ptr %4, align 4, !tbaa !9
  %630 = call i32 @libxsmm_matdiff(ptr noundef nonnull %17, i32 noundef 0, i32 noundef %628, i32 noundef %629, ptr noundef %117, ptr noundef %116, ptr noundef nonnull %8, ptr noundef nonnull %8) #6
  %631 = icmp eq i32 %630, 0
  br i1 %631, label %632, label %.thread916

632:                                              ; preds = %._crit_edge1021
  %633 = call double @libxsmm_matdiff_epsilon(ptr noundef nonnull %17) #6
  %634 = fcmp ugt double %633, 7.000000e-04
  br i1 %634, label %.thread916, label %635

635:                                              ; preds = %632
  %636 = load i32, ptr %3, align 4, !tbaa !9
  %637 = load i32, ptr %4, align 4, !tbaa !9
  %638 = load i32, ptr %5, align 4, !tbaa !9
  call void @libxsmm_gemm_strided(i32 noundef 0, i32 noundef 0, ptr noundef nonnull %11, ptr noundef nonnull %12, i32 noundef %636, i32 noundef %637, i32 noundef %638, ptr noundef nonnull %9, ptr noundef nonnull %110, ptr noundef nonnull %6, ptr noundef nonnull %13, ptr noundef %113, ptr noundef nonnull %7, ptr noundef nonnull %14, ptr noundef nonnull %10, ptr noundef %116, ptr noundef nonnull %8, ptr noundef nonnull %15, i32 noundef 0, i32 noundef %97) #6
  br i1 %168, label %.lr.ph1024, label %._crit_edge1025

.lr.ph1024:                                       ; preds = %635, %.lr.ph1024
  %.167291022 = phi i32 [ %652, %.lr.ph1024 ], [ 0, %635 ]
  %639 = call ptr @libxsmm_original_dgemm() #6
  %640 = load i32, ptr %13, align 4, !tbaa !9
  %641 = mul nsw i32 %640, %.167291022
  %642 = sext i32 %641 to i64
  %643 = getelementptr inbounds double, ptr %110, i64 %642
  %644 = load i32, ptr %14, align 4, !tbaa !9
  %645 = mul nsw i32 %644, %.167291022
  %646 = sext i32 %645 to i64
  %647 = getelementptr inbounds double, ptr %113, i64 %646
  %648 = load i32, ptr %15, align 4, !tbaa !9
  %649 = mul nsw i32 %648, %.167291022
  %650 = sext i32 %649 to i64
  %651 = getelementptr inbounds double, ptr %117, i64 %650
  call void %639(ptr noundef nonnull %11, ptr noundef nonnull %12, ptr noundef nonnull %3, ptr noundef nonnull %4, ptr noundef nonnull %5, ptr noundef nonnull %9, ptr noundef nonnull %643, ptr noundef nonnull %6, ptr noundef %647, ptr noundef nonnull %7, ptr noundef nonnull %10, ptr noundef %651, ptr noundef nonnull %8) #6
  %652 = add nuw nsw i32 %.167291022, 1
  %exitcond1166.not = icmp eq i32 %652, %97
  br i1 %exitcond1166.not, label %._crit_edge1025, label %.lr.ph1024, !llvm.loop !54

._crit_edge1025:                                  ; preds = %.lr.ph1024, %635
  call void @libxsmm_matdiff_reduce(ptr noundef nonnull %16, ptr noundef nonnull %17) #6
  %653 = load i32, ptr %3, align 4, !tbaa !9
  %654 = load i32, ptr %4, align 4, !tbaa !9
  %655 = call i32 @libxsmm_matdiff(ptr noundef nonnull %17, i32 noundef 0, i32 noundef %653, i32 noundef %654, ptr noundef %117, ptr noundef %116, ptr noundef nonnull %8, ptr noundef nonnull %8) #6
  %656 = icmp eq i32 %655, 0
  br i1 %656, label %657, label %.thread916

657:                                              ; preds = %._crit_edge1025
  %658 = call double @libxsmm_matdiff_epsilon(ptr noundef nonnull %17) #6
  %659 = fcmp ugt double %658, 7.000000e-04
  br i1 %659, label %.thread916, label %660

660:                                              ; preds = %657
  %661 = load i32, ptr %3, align 4, !tbaa !9
  %662 = load i32, ptr %4, align 4, !tbaa !9
  %663 = load i32, ptr %5, align 4, !tbaa !9
  call void @libxsmm_gemm_strided(i32 noundef 0, i32 noundef 0, ptr noundef nonnull %11, ptr noundef nonnull %12, i32 noundef %661, i32 noundef %662, i32 noundef %663, ptr noundef nonnull %9, ptr noundef nonnull %110, ptr noundef nonnull %6, ptr noundef nonnull %13, ptr noundef %113, ptr noundef nonnull %7, ptr noundef nonnull %14, ptr noundef nonnull %10, ptr noundef %116, ptr noundef nonnull %8, ptr noundef nonnull %15, i32 noundef 0, i32 noundef %97) #6
  br i1 %168, label %.lr.ph1028, label %._crit_edge1029

.lr.ph1028:                                       ; preds = %660, %.lr.ph1028
  %.177301026 = phi i32 [ %677, %.lr.ph1028 ], [ 0, %660 ]
  %664 = call ptr @libxsmm_original_dgemm() #6
  %665 = load i32, ptr %13, align 4, !tbaa !9
  %666 = mul nsw i32 %665, %.177301026
  %667 = sext i32 %666 to i64
  %668 = getelementptr inbounds double, ptr %110, i64 %667
  %669 = load i32, ptr %14, align 4, !tbaa !9
  %670 = mul nsw i32 %669, %.177301026
  %671 = sext i32 %670 to i64
  %672 = getelementptr inbounds double, ptr %113, i64 %671
  %673 = load i32, ptr %15, align 4, !tbaa !9
  %674 = mul nsw i32 %673, %.177301026
  %675 = sext i32 %674 to i64
  %676 = getelementptr inbounds double, ptr %117, i64 %675
  call void %664(ptr noundef nonnull %11, ptr noundef nonnull %12, ptr noundef nonnull %3, ptr noundef nonnull %4, ptr noundef nonnull %5, ptr noundef nonnull %9, ptr noundef nonnull %668, ptr noundef nonnull %6, ptr noundef %672, ptr noundef nonnull %7, ptr noundef nonnull %10, ptr noundef %676, ptr noundef nonnull %8) #6
  %677 = add nuw nsw i32 %.177301026, 1
  %exitcond1167.not = icmp eq i32 %677, %97
  br i1 %exitcond1167.not, label %._crit_edge1029, label %.lr.ph1028, !llvm.loop !55

._crit_edge1029:                                  ; preds = %.lr.ph1028, %660
  call void @libxsmm_matdiff_reduce(ptr noundef nonnull %16, ptr noundef nonnull %17) #6
  %678 = load i32, ptr %3, align 4, !tbaa !9
  %679 = load i32, ptr %4, align 4, !tbaa !9
  %680 = call i32 @libxsmm_matdiff(ptr noundef nonnull %17, i32 noundef 0, i32 noundef %678, i32 noundef %679, ptr noundef %117, ptr noundef %116, ptr noundef nonnull %8, ptr noundef nonnull %8) #6
  %681 = icmp eq i32 %680, 0
  br i1 %681, label %682, label %.thread916

682:                                              ; preds = %._crit_edge1029
  %683 = call double @libxsmm_matdiff_epsilon(ptr noundef nonnull %17) #6
  %684 = fcmp ugt double %683, 7.000000e-04
  br i1 %684, label %.thread916, label %685

685:                                              ; preds = %682
  call void @libxsmm_matdiff_reduce(ptr noundef nonnull %16, ptr noundef nonnull %17) #6
  %686 = call double @libxsmm_matdiff_epsilon(ptr noundef nonnull %16) #6
  %687 = fcmp ugt double %686, 7.000000e-04
  %.36 = zext i1 %687 to i32
  br label %.thread916

.thread916:                                       ; preds = %682, %657, %632, %._crit_edge989, %._crit_edge985, %._crit_edge981, %._crit_edge977, %._crit_edge973, %._crit_edge969, %344, %368, %392, %416, %440, %464, %.thread869, %.thread876, %.thread883, %.thread890, %.thread897, %.thread904, %._crit_edge1021, %._crit_edge1025, %._crit_edge1029, %685
  %.37 = phi i32 [ %.36, %685 ], [ %680, %._crit_edge1029 ], [ %655, %._crit_edge1025 ], [ %.28.ph, %.thread904 ], [ %630, %._crit_edge1021 ], [ %.25.ph, %.thread897 ], [ %.22.ph, %.thread890 ], [ %.19.ph, %.thread883 ], [ %.16.ph, %.thread876 ], [ %.13.ph, %.thread869 ], [ %462, %._crit_edge989 ], [ %438, %._crit_edge985 ], [ %414, %._crit_edge981 ], [ %390, %._crit_edge977 ], [ %366, %._crit_edge973 ], [ %342, %._crit_edge969 ], [ 1, %344 ], [ 1, %368 ], [ 1, %392 ], [ 1, %416 ], [ 1, %440 ], [ 1, %464 ], [ 1, %632 ], [ 1, %657 ], [ 1, %682 ]
  call void @llvm.lifetime.end.p0(i64 192, ptr nonnull %17) #6
  call void @llvm.lifetime.end.p0(i64 192, ptr nonnull %16) #6
  br label %688

688:                                              ; preds = %105, %.thread916
  %.38 = phi i32 [ %.37, %.thread916 ], [ 1, %105 ]
  call void @libxsmm_free(ptr noundef %123) #6
  call void @libxsmm_free(ptr noundef %124) #6
  call void @libxsmm_free(ptr noundef %125) #6
  call void @libxsmm_free(ptr noundef %.fr1325) #6
  call void @libxsmm_free(ptr noundef %130) #6
  call void @libxsmm_free(ptr noundef %131) #6
  call void @libxsmm_free(ptr noundef %132) #6
  call void @libxsmm_free(ptr noundef %133) #6
  call void @libxsmm_free(ptr noundef %134) #6
  call void @libxsmm_free(ptr noundef %135) #6
  call void @libxsmm_free(ptr noundef %136) #6
  call void @libxsmm_free(ptr noundef %119) #6
  call void @libxsmm_free(ptr noundef %120) #6
  call void @libxsmm_free(ptr noundef %121) #6
  call void @libxsmm_free(ptr noundef %122) #6
  call void @libxsmm_free(ptr noundef %126) #6
  call void @libxsmm_free(ptr noundef %127) #6
  call void @libxsmm_free(ptr noundef %128) #6
  call void @libxsmm_free(ptr noundef %110) #6
  call void @libxsmm_free(ptr noundef %113) #6
  call void @libxsmm_free(ptr noundef %116) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %15) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %14) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %13) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %12) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %11) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %10) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %9) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %8) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %7) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %6) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %5) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %4) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %3) #6
  ret i32 %.38
}

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

; Function Attrs: inlinehint mustprogress nofree nounwind willreturn memory(read) uwtable
declare i32 @atoi(ptr nocapture noundef nonnull) local_unnamed_addr #2

declare i64 @libxsmm_coprime2(i64 noundef) local_unnamed_addr #3

declare noalias ptr @libxsmm_malloc(i64 noundef) local_unnamed_addr #3

declare void @libxsmm_matdiff_clear(ptr noundef) local_unnamed_addr #3

; Function Attrs: mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare double @llvm.fmuladd.f64(double, double, double) #4

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

declare i32 @libxsmm_rng_u32(i32 noundef) local_unnamed_addr #3

declare void @libxsmm_gemm_batch(i32 noundef, i32 noundef, ptr noundef, ptr noundef, i32 noundef, i32 noundef, i32 noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #3

declare ptr @libxsmm_original_dgemm() local_unnamed_addr #3

declare i32 @libxsmm_matdiff(ptr noundef, i32 noundef, i32 noundef, i32 noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #3

declare double @libxsmm_matdiff_epsilon(ptr noundef) local_unnamed_addr #3

declare void @libxsmm_matdiff_reduce(ptr noundef, ptr noundef) local_unnamed_addr #3

declare void @libxsmm_gemm_strided(i32 noundef, i32 noundef, ptr noundef, ptr noundef, i32 noundef, i32 noundef, i32 noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, i32 noundef, i32 noundef) local_unnamed_addr #3

declare void @libxsmm_free(ptr noundef) local_unnamed_addr #3

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.smax.i32(i32, i32) #5

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.umin.i32(i32, i32) #5

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 = { 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 #3 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #5 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #6 = { nounwind }
attributes #7 = { nounwind willreturn memory(read) }

!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 = !{!12, !12, i64 0}
!12 = !{!"double", !7, i64 0}
!13 = !{!7, !7, i64 0}
!14 = distinct !{!14, !15, !16, !17}
!15 = !{!"llvm.loop.mustprogress"}
!16 = !{!"llvm.loop.isvectorized", i32 1}
!17 = !{!"llvm.loop.unroll.runtime.disable"}
!18 = distinct !{!18, !15, !16, !17}
!19 = distinct !{!19, !15, !17, !16}
!20 = distinct !{!20, !15, !17, !16}
!21 = distinct !{!21, !15}
!22 = distinct !{!22, !15, !16, !17}
!23 = distinct !{!23, !15, !16, !17}
!24 = distinct !{!24, !15, !17, !16}
!25 = distinct !{!25, !15, !17, !16}
!26 = distinct !{!26, !15}
!27 = distinct !{!27, !15, !16, !17}
!28 = distinct !{!28, !15, !16, !17}
!29 = distinct !{!29, !15, !17, !16}
!30 = distinct !{!30, !15, !17, !16}
!31 = distinct !{!31, !15}
!32 = distinct !{!32, !15, !16, !17}
!33 = distinct !{!33, !15, !16, !17}
!34 = distinct !{!34, !15, !17, !16}
!35 = distinct !{!35, !15, !17, !16}
!36 = distinct !{!36, !15}
!37 = distinct !{!37, !15}
!38 = distinct !{!38, !15}
!39 = distinct !{!39, !15}
!40 = distinct !{!40, !15}
!41 = distinct !{!41, !15}
!42 = distinct !{!42, !15}
!43 = distinct !{!43, !15}
!44 = distinct !{!44, !15}
!45 = distinct !{!45, !15, !16, !17}
!46 = distinct !{!46, !15, !17, !16}
!47 = distinct !{!47, !15}
!48 = distinct !{!48, !15}
!49 = distinct !{!49, !15}
!50 = distinct !{!50, !15}
!51 = distinct !{!51, !15}
!52 = distinct !{!52, !15}
!53 = distinct !{!53, !15}
!54 = distinct !{!54, !15}
!55 = distinct !{!55, !15}


; Effective O3 passes: CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalDCEPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,JumpThreadingPass,LCSSAPass,LICMPass,LoopLoadEliminationPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,LoopVectorizePass,PostOrderFunctionAttrsPass,ReassociatePass,SLPVectorizerPass,SROAPass,SimplifyCFGPass,TailCallElimPass