; LLVM IR from libxsmm/libxsmm :: samples/utilities/dispatch (dispatch)

; 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_gemm_shape = type { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 }
%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 }
%struct.libxsmm_gemm_param = type { %struct.libxsmm_matrix_op_arg, %struct.libxsmm_matrix_arg, %struct.libxsmm_matrix_arg, %struct.libxsmm_matrix_arg }
%struct.libxsmm_matrix_op_arg = type { ptr, ptr, ptr, ptr }
%struct.libxsmm_matrix_arg = type { ptr, ptr, ptr, ptr, ptr, ptr }
%struct.triplet = type { i32, i32, i32 }

@stderr = external global ptr, align 8
@.str = external hidden unnamed_addr constant [53 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [63 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [1 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [63 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [62 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [55 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [42 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [43 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [43 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [10 x i8], align 1

; 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 i32, align 4
  %17 = alloca i32, align 4
  %18 = alloca i64, align 8
  %19 = alloca i64, align 8
  %20 = alloca i64, align 8
  %21 = alloca i64, align 8
  %22 = alloca i64, align 8
  %23 = alloca ptr, align 8
  %24 = alloca i64, align 8
  %25 = alloca double, align 8
  %26 = alloca double, align 8
  %27 = alloca i32, align 4
  %28 = alloca i32, align 4
  %29 = alloca i32, align 4
  %30 = alloca i8, align 1
  %31 = alloca i8, align 1
  %32 = alloca i32, align 4
  %33 = alloca i32, align 4
  %34 = alloca i32, align 4
  %35 = alloca i32, align 4
  %36 = alloca i32, align 4
  %37 = alloca i32, align 4
  %38 = alloca i32, align 4
  %39 = alloca %struct.libxsmm_gemm_shape, align 8
  %40 = alloca i32, align 4
  %41 = alloca %struct.libxsmm_gemm_shape, align 8
  %42 = alloca %struct.libxsmm_gemm_shape, align 8
  %43 = alloca i32, align 4
  %44 = alloca %struct.libxsmm_gemm_shape, align 8
  %45 = alloca [4096 x double], align 16
  %46 = alloca [4096 x double], align 16
  %47 = alloca [4096 x double], align 16
  %48 = alloca %struct.libxsmm_matdiff_info, align 8
  %49 = alloca double, align 8
  %50 = alloca double, align 8
  %51 = alloca i32, align 4
  %52 = alloca i32, align 4
  %53 = alloca i32, align 4
  %54 = alloca i32, align 4
  %55 = alloca i32, align 4
  %56 = alloca i32, align 4
  %57 = alloca i32, align 4
  %58 = alloca i32, align 4
  %59 = alloca double, align 8
  %60 = alloca double, align 8
  %61 = alloca i64, align 8
  %62 = alloca i32, align 4
  %63 = alloca double, align 8
  %64 = alloca double, align 8
  %65 = alloca i32, align 4
  %66 = alloca i32, align 4
  %67 = alloca i32, align 4
  %68 = alloca i32, align 4
  %69 = alloca i32, align 4
  %70 = alloca i32, align 4
  %71 = alloca i32, align 4
  %72 = alloca i32, align 4
  %73 = alloca double, align 8
  %74 = alloca double, align 8
  %75 = alloca i64, align 8
  %76 = alloca i32, align 4
  %77 = alloca double, align 8
  %78 = alloca double, align 8
  %79 = alloca i32, align 4
  %80 = alloca i32, align 4
  %81 = alloca i32, align 4
  %82 = alloca i32, align 4
  %83 = alloca i32, align 4
  %84 = alloca i32, align 4
  %85 = alloca i32, align 4
  %86 = alloca i32, align 4
  %87 = alloca double, align 8
  %88 = alloca double, align 8
  %89 = alloca i64, align 8
  %90 = alloca i32, align 4
  %91 = alloca i32, align 4
  %92 = alloca %struct.libxsmm_matdiff_info, align 8
  %93 = alloca %struct.libxsmm_gemm_shape, align 8
  %94 = alloca ptr, align 8
  %95 = alloca %struct.libxsmm_gemm_param, align 8
  %96 = alloca double, align 8
  %97 = alloca double, align 8
  %98 = alloca double, align 8
  %99 = 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) #8
  store i32 1, ptr %6, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #8
  store i32 4, ptr %7, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #8
  store i32 64, ptr %8, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #8
  store i32 1, ptr %9, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #8
  %100 = load i32, ptr %4, align 4, !tbaa !5
  %101 = icmp slt i32 1, %100
  br i1 %101, label %102, label %113

102:                                              ; preds = %2
  %103 = load ptr, ptr %5, align 8, !tbaa !9
  %104 = getelementptr inbounds ptr, ptr %103, i64 1
  %105 = load ptr, ptr %104, align 8, !tbaa !9
  %106 = call i32 @atoi(ptr noundef %105) #9
  %107 = icmp slt i32 0, %106
  br i1 %107, label %108, label %113

108:                                              ; preds = %102
  %109 = load ptr, ptr %5, align 8, !tbaa !9
  %110 = getelementptr inbounds ptr, ptr %109, i64 1
  %111 = load ptr, ptr %110, align 8, !tbaa !9
  %112 = call i32 @atoi(ptr noundef %111) #9
  br label %114

113:                                              ; preds = %102, %2
  br label %114

114:                                              ; preds = %113, %108
  %115 = phi i32 [ %112, %108 ], [ 10000, %113 ]
  %116 = icmp slt i32 %115, 2
  br i1 %116, label %117, label %118

117:                                              ; preds = %114
  br label %135

118:                                              ; preds = %114
  %119 = load i32, ptr %4, align 4, !tbaa !5
  %120 = icmp slt i32 1, %119
  br i1 %120, label %121, label %132

121:                                              ; preds = %118
  %122 = load ptr, ptr %5, align 8, !tbaa !9
  %123 = getelementptr inbounds ptr, ptr %122, i64 1
  %124 = load ptr, ptr %123, align 8, !tbaa !9
  %125 = call i32 @atoi(ptr noundef %124) #9
  %126 = icmp slt i32 0, %125
  br i1 %126, label %127, label %132

127:                                              ; preds = %121
  %128 = load ptr, ptr %5, align 8, !tbaa !9
  %129 = getelementptr inbounds ptr, ptr %128, i64 1
  %130 = load ptr, ptr %129, align 8, !tbaa !9
  %131 = call i32 @atoi(ptr noundef %130) #9
  br label %133

132:                                              ; preds = %121, %118
  br label %133

133:                                              ; preds = %132, %127
  %134 = phi i32 [ %131, %127 ], [ 10000, %132 ]
  br label %135

135:                                              ; preds = %133, %117
  %136 = phi i32 [ 2, %117 ], [ %134, %133 ]
  store i32 %136, ptr %10, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #8
  %137 = load i32, ptr %4, align 4, !tbaa !5
  %138 = icmp slt i32 2, %137
  br i1 %138, label %139, label %150

139:                                              ; preds = %135
  %140 = load ptr, ptr %5, align 8, !tbaa !9
  %141 = getelementptr inbounds ptr, ptr %140, i64 2
  %142 = load ptr, ptr %141, align 8, !tbaa !9
  %143 = call i32 @atoi(ptr noundef %142) #9
  %144 = icmp slt i32 0, %143
  br i1 %144, label %145, label %150

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

150:                                              ; preds = %139, %135
  br label %151

151:                                              ; preds = %150, %145
  %152 = phi i32 [ %149, %145 ], [ 4, %150 ]
  %153 = icmp slt i32 1, %152
  br i1 %153, label %154, label %232

154:                                              ; preds = %151
  %155 = load i32, ptr %4, align 4, !tbaa !5
  %156 = icmp slt i32 2, %155
  br i1 %156, label %157, label %168

157:                                              ; preds = %154
  %158 = load ptr, ptr %5, align 8, !tbaa !9
  %159 = getelementptr inbounds ptr, ptr %158, i64 2
  %160 = load ptr, ptr %159, align 8, !tbaa !9
  %161 = call i32 @atoi(ptr noundef %160) #9
  %162 = icmp slt i32 0, %161
  br i1 %162, label %163, label %168

163:                                              ; preds = %157
  %164 = load ptr, ptr %5, align 8, !tbaa !9
  %165 = getelementptr inbounds ptr, ptr %164, i64 2
  %166 = load ptr, ptr %165, align 8, !tbaa !9
  %167 = call i32 @atoi(ptr noundef %166) #9
  br label %169

168:                                              ; preds = %157, %154
  br label %169

169:                                              ; preds = %168, %163
  %170 = phi i32 [ %167, %163 ], [ 4, %168 ]
  %171 = load i32, ptr %10, align 4, !tbaa !5
  %172 = icmp sle i32 %170, %171
  br i1 %172, label %173, label %190

173:                                              ; preds = %169
  %174 = load i32, ptr %4, align 4, !tbaa !5
  %175 = icmp slt i32 2, %174
  br i1 %175, label %176, label %187

176:                                              ; preds = %173
  %177 = load ptr, ptr %5, align 8, !tbaa !9
  %178 = getelementptr inbounds ptr, ptr %177, i64 2
  %179 = load ptr, ptr %178, align 8, !tbaa !9
  %180 = call i32 @atoi(ptr noundef %179) #9
  %181 = icmp slt i32 0, %180
  br i1 %181, label %182, label %187

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

187:                                              ; preds = %176, %173
  br label %188

188:                                              ; preds = %187, %182
  %189 = phi i32 [ %186, %182 ], [ 4, %187 ]
  br label %230

190:                                              ; preds = %169
  %191 = load i32, ptr %4, align 4, !tbaa !5
  %192 = icmp slt i32 2, %191
  br i1 %192, label %193, label %204

193:                                              ; preds = %190
  %194 = load ptr, ptr %5, align 8, !tbaa !9
  %195 = getelementptr inbounds ptr, ptr %194, i64 2
  %196 = load ptr, ptr %195, align 8, !tbaa !9
  %197 = call i32 @atoi(ptr noundef %196) #9
  %198 = icmp slt i32 0, %197
  br i1 %198, label %199, label %204

199:                                              ; preds = %193
  %200 = load ptr, ptr %5, align 8, !tbaa !9
  %201 = getelementptr inbounds ptr, ptr %200, i64 2
  %202 = load ptr, ptr %201, align 8, !tbaa !9
  %203 = call i32 @atoi(ptr noundef %202) #9
  br label %205

204:                                              ; preds = %193, %190
  br label %205

205:                                              ; preds = %204, %199
  %206 = phi i32 [ %203, %199 ], [ 4, %204 ]
  %207 = load i32, ptr %10, align 4, !tbaa !5
  %208 = icmp slt i32 %206, %207
  br i1 %208, label %209, label %226

209:                                              ; preds = %205
  %210 = load i32, ptr %4, align 4, !tbaa !5
  %211 = icmp slt i32 2, %210
  br i1 %211, label %212, label %223

212:                                              ; preds = %209
  %213 = load ptr, ptr %5, align 8, !tbaa !9
  %214 = getelementptr inbounds ptr, ptr %213, i64 2
  %215 = load ptr, ptr %214, align 8, !tbaa !9
  %216 = call i32 @atoi(ptr noundef %215) #9
  %217 = icmp slt i32 0, %216
  br i1 %217, label %218, label %223

218:                                              ; preds = %212
  %219 = load ptr, ptr %5, align 8, !tbaa !9
  %220 = getelementptr inbounds ptr, ptr %219, i64 2
  %221 = load ptr, ptr %220, align 8, !tbaa !9
  %222 = call i32 @atoi(ptr noundef %221) #9
  br label %224

223:                                              ; preds = %212, %209
  br label %224

224:                                              ; preds = %223, %218
  %225 = phi i32 [ %222, %218 ], [ 4, %223 ]
  br label %228

226:                                              ; preds = %205
  %227 = load i32, ptr %10, align 4, !tbaa !5
  br label %228

228:                                              ; preds = %226, %224
  %229 = phi i32 [ %225, %224 ], [ %227, %226 ]
  br label %230

230:                                              ; preds = %228, %188
  %231 = phi i32 [ %189, %188 ], [ %229, %228 ]
  br label %270

232:                                              ; preds = %151
  %233 = load i32, ptr %4, align 4, !tbaa !5
  %234 = icmp slt i32 2, %233
  br i1 %234, label %235, label %246

235:                                              ; preds = %232
  %236 = load ptr, ptr %5, align 8, !tbaa !9
  %237 = getelementptr inbounds ptr, ptr %236, i64 2
  %238 = load ptr, ptr %237, align 8, !tbaa !9
  %239 = call i32 @atoi(ptr noundef %238) #9
  %240 = icmp slt i32 0, %239
  br i1 %240, label %241, label %246

241:                                              ; preds = %235
  %242 = load ptr, ptr %5, align 8, !tbaa !9
  %243 = getelementptr inbounds ptr, ptr %242, i64 2
  %244 = load ptr, ptr %243, align 8, !tbaa !9
  %245 = call i32 @atoi(ptr noundef %244) #9
  br label %247

246:                                              ; preds = %235, %232
  br label %247

247:                                              ; preds = %246, %241
  %248 = phi i32 [ %245, %241 ], [ 4, %246 ]
  %249 = icmp slt i32 1, %248
  br i1 %249, label %250, label %267

250:                                              ; preds = %247
  %251 = load i32, ptr %4, align 4, !tbaa !5
  %252 = icmp slt i32 2, %251
  br i1 %252, label %253, label %264

253:                                              ; preds = %250
  %254 = load ptr, ptr %5, align 8, !tbaa !9
  %255 = getelementptr inbounds ptr, ptr %254, i64 2
  %256 = load ptr, ptr %255, align 8, !tbaa !9
  %257 = call i32 @atoi(ptr noundef %256) #9
  %258 = icmp slt i32 0, %257
  br i1 %258, label %259, label %264

259:                                              ; preds = %253
  %260 = load ptr, ptr %5, align 8, !tbaa !9
  %261 = getelementptr inbounds ptr, ptr %260, i64 2
  %262 = load ptr, ptr %261, align 8, !tbaa !9
  %263 = call i32 @atoi(ptr noundef %262) #9
  br label %265

264:                                              ; preds = %253, %250
  br label %265

265:                                              ; preds = %264, %259
  %266 = phi i32 [ %263, %259 ], [ 4, %264 ]
  br label %268

267:                                              ; preds = %247
  br label %268

268:                                              ; preds = %267, %265
  %269 = phi i32 [ %266, %265 ], [ 1, %267 ]
  br label %270

270:                                              ; preds = %268, %230
  %271 = phi i32 [ %231, %230 ], [ %269, %268 ]
  store i32 %271, ptr %11, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #8
  %272 = load i32, ptr %4, align 4, !tbaa !5
  %273 = icmp slt i32 3, %272
  br i1 %273, label %274, label %279

274:                                              ; preds = %270
  %275 = load ptr, ptr %5, align 8, !tbaa !9
  %276 = getelementptr inbounds ptr, ptr %275, i64 3
  %277 = load ptr, ptr %276, align 8, !tbaa !9
  %278 = call i32 @atoi(ptr noundef %277) #9
  br label %280

279:                                              ; preds = %270
  br label %280

280:                                              ; preds = %279, %274
  %281 = phi i32 [ %278, %274 ], [ 1, %279 ]
  %282 = icmp slt i32 1, %281
  br i1 %282, label %283, label %334

283:                                              ; preds = %280
  %284 = load i32, ptr %4, align 4, !tbaa !5
  %285 = icmp slt i32 3, %284
  br i1 %285, label %286, label %291

286:                                              ; preds = %283
  %287 = load ptr, ptr %5, align 8, !tbaa !9
  %288 = getelementptr inbounds ptr, ptr %287, i64 3
  %289 = load ptr, ptr %288, align 8, !tbaa !9
  %290 = call i32 @atoi(ptr noundef %289) #9
  br label %292

291:                                              ; preds = %283
  br label %292

292:                                              ; preds = %291, %286
  %293 = phi i32 [ %290, %286 ], [ 1, %291 ]
  %294 = icmp sle i32 %293, 1
  br i1 %294, label %295, label %306

295:                                              ; preds = %292
  %296 = load i32, ptr %4, align 4, !tbaa !5
  %297 = icmp slt i32 3, %296
  br i1 %297, label %298, label %303

298:                                              ; preds = %295
  %299 = load ptr, ptr %5, align 8, !tbaa !9
  %300 = getelementptr inbounds ptr, ptr %299, i64 3
  %301 = load ptr, ptr %300, align 8, !tbaa !9
  %302 = call i32 @atoi(ptr noundef %301) #9
  br label %304

303:                                              ; preds = %295
  br label %304

304:                                              ; preds = %303, %298
  %305 = phi i32 [ %302, %298 ], [ 1, %303 ]
  br label %332

306:                                              ; preds = %292
  %307 = load i32, ptr %4, align 4, !tbaa !5
  %308 = icmp slt i32 3, %307
  br i1 %308, label %309, label %314

309:                                              ; preds = %306
  %310 = load ptr, ptr %5, align 8, !tbaa !9
  %311 = getelementptr inbounds ptr, ptr %310, i64 3
  %312 = load ptr, ptr %311, align 8, !tbaa !9
  %313 = call i32 @atoi(ptr noundef %312) #9
  br label %315

314:                                              ; preds = %306
  br label %315

315:                                              ; preds = %314, %309
  %316 = phi i32 [ %313, %309 ], [ 1, %314 ]
  %317 = icmp slt i32 %316, 1
  br i1 %317, label %318, label %329

318:                                              ; preds = %315
  %319 = load i32, ptr %4, align 4, !tbaa !5
  %320 = icmp slt i32 3, %319
  br i1 %320, label %321, label %326

321:                                              ; preds = %318
  %322 = load ptr, ptr %5, align 8, !tbaa !9
  %323 = getelementptr inbounds ptr, ptr %322, i64 3
  %324 = load ptr, ptr %323, align 8, !tbaa !9
  %325 = call i32 @atoi(ptr noundef %324) #9
  br label %327

326:                                              ; preds = %318
  br label %327

327:                                              ; preds = %326, %321
  %328 = phi i32 [ %325, %321 ], [ 1, %326 ]
  br label %330

329:                                              ; preds = %315
  br label %330

330:                                              ; preds = %329, %327
  %331 = phi i32 [ %328, %327 ], [ 1, %329 ]
  br label %332

332:                                              ; preds = %330, %304
  %333 = phi i32 [ %305, %304 ], [ %331, %330 ]
  br label %360

334:                                              ; preds = %280
  %335 = load i32, ptr %4, align 4, !tbaa !5
  %336 = icmp slt i32 3, %335
  br i1 %336, label %337, label %342

337:                                              ; preds = %334
  %338 = load ptr, ptr %5, align 8, !tbaa !9
  %339 = getelementptr inbounds ptr, ptr %338, i64 3
  %340 = load ptr, ptr %339, align 8, !tbaa !9
  %341 = call i32 @atoi(ptr noundef %340) #9
  br label %343

342:                                              ; preds = %334
  br label %343

343:                                              ; preds = %342, %337
  %344 = phi i32 [ %341, %337 ], [ 1, %342 ]
  %345 = icmp slt i32 1, %344
  br i1 %345, label %346, label %357

346:                                              ; preds = %343
  %347 = load i32, ptr %4, align 4, !tbaa !5
  %348 = icmp slt i32 3, %347
  br i1 %348, label %349, label %354

349:                                              ; preds = %346
  %350 = load ptr, ptr %5, align 8, !tbaa !9
  %351 = getelementptr inbounds ptr, ptr %350, i64 3
  %352 = load ptr, ptr %351, align 8, !tbaa !9
  %353 = call i32 @atoi(ptr noundef %352) #9
  br label %355

354:                                              ; preds = %346
  br label %355

355:                                              ; preds = %354, %349
  %356 = phi i32 [ %353, %349 ], [ 1, %354 ]
  br label %358

357:                                              ; preds = %343
  br label %358

358:                                              ; preds = %357, %355
  %359 = phi i32 [ %356, %355 ], [ 1, %357 ]
  br label %360

360:                                              ; preds = %358, %332
  %361 = phi i32 [ %333, %332 ], [ %359, %358 ]
  store i32 %361, ptr %12, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #8
  %362 = load i32, ptr %4, align 4, !tbaa !5
  %363 = icmp slt i32 4, %362
  br i1 %363, label %364, label %369

364:                                              ; preds = %360
  %365 = load ptr, ptr %5, align 8, !tbaa !9
  %366 = getelementptr inbounds ptr, ptr %365, i64 4
  %367 = load ptr, ptr %366, align 8, !tbaa !9
  %368 = call i32 @atoi(ptr noundef %367) #9
  br label %370

369:                                              ; preds = %360
  br label %370

370:                                              ; preds = %369, %364
  %371 = phi i32 [ %368, %364 ], [ 1, %369 ]
  %372 = icmp slt i32 %371, 1
  br i1 %372, label %373, label %374

373:                                              ; preds = %370
  br label %385

374:                                              ; preds = %370
  %375 = load i32, ptr %4, align 4, !tbaa !5
  %376 = icmp slt i32 4, %375
  br i1 %376, label %377, label %382

377:                                              ; preds = %374
  %378 = load ptr, ptr %5, align 8, !tbaa !9
  %379 = getelementptr inbounds ptr, ptr %378, i64 4
  %380 = load ptr, ptr %379, align 8, !tbaa !9
  %381 = call i32 @atoi(ptr noundef %380) #9
  br label %383

382:                                              ; preds = %374
  br label %383

383:                                              ; preds = %382, %377
  %384 = phi i32 [ %381, %377 ], [ 1, %382 ]
  br label %385

385:                                              ; preds = %383, %373
  %386 = phi i32 [ 1, %373 ], [ %384, %383 ]
  store i32 %386, ptr %13, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #8
  %387 = load i32, ptr %4, align 4, !tbaa !5
  %388 = icmp slt i32 5, %387
  br i1 %388, label %389, label %400

389:                                              ; preds = %385
  %390 = load ptr, ptr %5, align 8, !tbaa !9
  %391 = getelementptr inbounds ptr, ptr %390, i64 5
  %392 = load ptr, ptr %391, align 8, !tbaa !9
  %393 = call i32 @atoi(ptr noundef %392) #9
  %394 = icmp slt i32 0, %393
  br i1 %394, label %395, label %400

395:                                              ; preds = %389
  %396 = load ptr, ptr %5, align 8, !tbaa !9
  %397 = getelementptr inbounds ptr, ptr %396, i64 5
  %398 = load ptr, ptr %397, align 8, !tbaa !9
  %399 = call i32 @atoi(ptr noundef %398) #9
  br label %401

400:                                              ; preds = %389, %385
  br label %401

401:                                              ; preds = %400, %395
  %402 = phi i32 [ %399, %395 ], [ 1, %400 ]
  %403 = icmp slt i32 %402, 1
  br i1 %403, label %404, label %405

404:                                              ; preds = %401
  br label %422

405:                                              ; preds = %401
  %406 = load i32, ptr %4, align 4, !tbaa !5
  %407 = icmp slt i32 5, %406
  br i1 %407, label %408, label %419

408:                                              ; preds = %405
  %409 = load ptr, ptr %5, align 8, !tbaa !9
  %410 = getelementptr inbounds ptr, ptr %409, i64 5
  %411 = load ptr, ptr %410, align 8, !tbaa !9
  %412 = call i32 @atoi(ptr noundef %411) #9
  %413 = icmp slt i32 0, %412
  br i1 %413, label %414, label %419

414:                                              ; preds = %408
  %415 = load ptr, ptr %5, align 8, !tbaa !9
  %416 = getelementptr inbounds ptr, ptr %415, i64 5
  %417 = load ptr, ptr %416, align 8, !tbaa !9
  %418 = call i32 @atoi(ptr noundef %417) #9
  br label %420

419:                                              ; preds = %408, %405
  br label %420

420:                                              ; preds = %419, %414
  %421 = phi i32 [ %418, %414 ], [ 1, %419 ]
  br label %422

422:                                              ; preds = %420, %404
  %423 = phi i32 [ 1, %404 ], [ %421, %420 ]
  store i32 %423, ptr %14, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #8
  %424 = load i32, ptr %4, align 4, !tbaa !5
  %425 = icmp slt i32 6, %424
  br i1 %425, label %426, label %437

426:                                              ; preds = %422
  %427 = load ptr, ptr %5, align 8, !tbaa !9
  %428 = getelementptr inbounds ptr, ptr %427, i64 6
  %429 = load ptr, ptr %428, align 8, !tbaa !9
  %430 = call i32 @atoi(ptr noundef %429) #9
  %431 = icmp slt i32 0, %430
  br i1 %431, label %432, label %437

432:                                              ; preds = %426
  %433 = load ptr, ptr %5, align 8, !tbaa !9
  %434 = getelementptr inbounds ptr, ptr %433, i64 6
  %435 = load ptr, ptr %434, align 8, !tbaa !9
  %436 = call i32 @atoi(ptr noundef %435) #9
  br label %438

437:                                              ; preds = %426, %422
  br label %438

438:                                              ; preds = %437, %432
  %439 = phi i32 [ %436, %432 ], [ 64, %437 ]
  %440 = icmp slt i32 1, %439
  br i1 %440, label %441, label %516

441:                                              ; preds = %438
  %442 = load i32, ptr %4, align 4, !tbaa !5
  %443 = icmp slt i32 6, %442
  br i1 %443, label %444, label %455

444:                                              ; preds = %441
  %445 = load ptr, ptr %5, align 8, !tbaa !9
  %446 = getelementptr inbounds ptr, ptr %445, i64 6
  %447 = load ptr, ptr %446, align 8, !tbaa !9
  %448 = call i32 @atoi(ptr noundef %447) #9
  %449 = icmp slt i32 0, %448
  br i1 %449, label %450, label %455

450:                                              ; preds = %444
  %451 = load ptr, ptr %5, align 8, !tbaa !9
  %452 = getelementptr inbounds ptr, ptr %451, i64 6
  %453 = load ptr, ptr %452, align 8, !tbaa !9
  %454 = call i32 @atoi(ptr noundef %453) #9
  br label %456

455:                                              ; preds = %444, %441
  br label %456

456:                                              ; preds = %455, %450
  %457 = phi i32 [ %454, %450 ], [ 64, %455 ]
  %458 = icmp sle i32 %457, 64
  br i1 %458, label %459, label %476

459:                                              ; preds = %456
  %460 = load i32, ptr %4, align 4, !tbaa !5
  %461 = icmp slt i32 6, %460
  br i1 %461, label %462, label %473

462:                                              ; preds = %459
  %463 = load ptr, ptr %5, align 8, !tbaa !9
  %464 = getelementptr inbounds ptr, ptr %463, i64 6
  %465 = load ptr, ptr %464, align 8, !tbaa !9
  %466 = call i32 @atoi(ptr noundef %465) #9
  %467 = icmp slt i32 0, %466
  br i1 %467, label %468, label %473

468:                                              ; preds = %462
  %469 = load ptr, ptr %5, align 8, !tbaa !9
  %470 = getelementptr inbounds ptr, ptr %469, i64 6
  %471 = load ptr, ptr %470, align 8, !tbaa !9
  %472 = call i32 @atoi(ptr noundef %471) #9
  br label %474

473:                                              ; preds = %462, %459
  br label %474

474:                                              ; preds = %473, %468
  %475 = phi i32 [ %472, %468 ], [ 64, %473 ]
  br label %514

476:                                              ; preds = %456
  %477 = load i32, ptr %4, align 4, !tbaa !5
  %478 = icmp slt i32 6, %477
  br i1 %478, label %479, label %490

479:                                              ; preds = %476
  %480 = load ptr, ptr %5, align 8, !tbaa !9
  %481 = getelementptr inbounds ptr, ptr %480, i64 6
  %482 = load ptr, ptr %481, align 8, !tbaa !9
  %483 = call i32 @atoi(ptr noundef %482) #9
  %484 = icmp slt i32 0, %483
  br i1 %484, label %485, label %490

485:                                              ; preds = %479
  %486 = load ptr, ptr %5, align 8, !tbaa !9
  %487 = getelementptr inbounds ptr, ptr %486, i64 6
  %488 = load ptr, ptr %487, align 8, !tbaa !9
  %489 = call i32 @atoi(ptr noundef %488) #9
  br label %491

490:                                              ; preds = %479, %476
  br label %491

491:                                              ; preds = %490, %485
  %492 = phi i32 [ %489, %485 ], [ 64, %490 ]
  %493 = icmp slt i32 %492, 64
  br i1 %493, label %494, label %511

494:                                              ; preds = %491
  %495 = load i32, ptr %4, align 4, !tbaa !5
  %496 = icmp slt i32 6, %495
  br i1 %496, label %497, label %508

497:                                              ; preds = %494
  %498 = load ptr, ptr %5, align 8, !tbaa !9
  %499 = getelementptr inbounds ptr, ptr %498, i64 6
  %500 = load ptr, ptr %499, align 8, !tbaa !9
  %501 = call i32 @atoi(ptr noundef %500) #9
  %502 = icmp slt i32 0, %501
  br i1 %502, label %503, label %508

503:                                              ; preds = %497
  %504 = load ptr, ptr %5, align 8, !tbaa !9
  %505 = getelementptr inbounds ptr, ptr %504, i64 6
  %506 = load ptr, ptr %505, align 8, !tbaa !9
  %507 = call i32 @atoi(ptr noundef %506) #9
  br label %509

508:                                              ; preds = %497, %494
  br label %509

509:                                              ; preds = %508, %503
  %510 = phi i32 [ %507, %503 ], [ 64, %508 ]
  br label %512

511:                                              ; preds = %491
  br label %512

512:                                              ; preds = %511, %509
  %513 = phi i32 [ %510, %509 ], [ 64, %511 ]
  br label %514

514:                                              ; preds = %512, %474
  %515 = phi i32 [ %475, %474 ], [ %513, %512 ]
  br label %554

516:                                              ; preds = %438
  %517 = load i32, ptr %4, align 4, !tbaa !5
  %518 = icmp slt i32 6, %517
  br i1 %518, label %519, label %530

519:                                              ; preds = %516
  %520 = load ptr, ptr %5, align 8, !tbaa !9
  %521 = getelementptr inbounds ptr, ptr %520, i64 6
  %522 = load ptr, ptr %521, align 8, !tbaa !9
  %523 = call i32 @atoi(ptr noundef %522) #9
  %524 = icmp slt i32 0, %523
  br i1 %524, label %525, label %530

525:                                              ; preds = %519
  %526 = load ptr, ptr %5, align 8, !tbaa !9
  %527 = getelementptr inbounds ptr, ptr %526, i64 6
  %528 = load ptr, ptr %527, align 8, !tbaa !9
  %529 = call i32 @atoi(ptr noundef %528) #9
  br label %531

530:                                              ; preds = %519, %516
  br label %531

531:                                              ; preds = %530, %525
  %532 = phi i32 [ %529, %525 ], [ 64, %530 ]
  %533 = icmp slt i32 1, %532
  br i1 %533, label %534, label %551

534:                                              ; preds = %531
  %535 = load i32, ptr %4, align 4, !tbaa !5
  %536 = icmp slt i32 6, %535
  br i1 %536, label %537, label %548

537:                                              ; preds = %534
  %538 = load ptr, ptr %5, align 8, !tbaa !9
  %539 = getelementptr inbounds ptr, ptr %538, i64 6
  %540 = load ptr, ptr %539, align 8, !tbaa !9
  %541 = call i32 @atoi(ptr noundef %540) #9
  %542 = icmp slt i32 0, %541
  br i1 %542, label %543, label %548

543:                                              ; preds = %537
  %544 = load ptr, ptr %5, align 8, !tbaa !9
  %545 = getelementptr inbounds ptr, ptr %544, i64 6
  %546 = load ptr, ptr %545, align 8, !tbaa !9
  %547 = call i32 @atoi(ptr noundef %546) #9
  br label %549

548:                                              ; preds = %537, %534
  br label %549

549:                                              ; preds = %548, %543
  %550 = phi i32 [ %547, %543 ], [ 64, %548 ]
  br label %552

551:                                              ; preds = %531
  br label %552

552:                                              ; preds = %551, %549
  %553 = phi i32 [ %550, %549 ], [ 1, %551 ]
  br label %554

554:                                              ; preds = %552, %514
  %555 = phi i32 [ %515, %514 ], [ %553, %552 ]
  store i32 %555, ptr %15, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #8
  %556 = load i32, ptr %4, align 4, !tbaa !5
  %557 = icmp slt i32 7, %556
  br i1 %557, label %558, label %569

558:                                              ; preds = %554
  %559 = load ptr, ptr %5, align 8, !tbaa !9
  %560 = getelementptr inbounds ptr, ptr %559, i64 7
  %561 = load ptr, ptr %560, align 8, !tbaa !9
  %562 = call i32 @atoi(ptr noundef %561) #9
  %563 = icmp slt i32 0, %562
  br i1 %563, label %564, label %569

564:                                              ; preds = %558
  %565 = load ptr, ptr %5, align 8, !tbaa !9
  %566 = getelementptr inbounds ptr, ptr %565, i64 7
  %567 = load ptr, ptr %566, align 8, !tbaa !9
  %568 = call i32 @atoi(ptr noundef %567) #9
  br label %570

569:                                              ; preds = %558, %554
  br label %570

570:                                              ; preds = %569, %564
  %571 = phi i32 [ %568, %564 ], [ 4, %569 ]
  %572 = icmp slt i32 1, %571
  br i1 %572, label %573, label %651

573:                                              ; preds = %570
  %574 = load i32, ptr %4, align 4, !tbaa !5
  %575 = icmp slt i32 7, %574
  br i1 %575, label %576, label %587

576:                                              ; preds = %573
  %577 = load ptr, ptr %5, align 8, !tbaa !9
  %578 = getelementptr inbounds ptr, ptr %577, i64 7
  %579 = load ptr, ptr %578, align 8, !tbaa !9
  %580 = call i32 @atoi(ptr noundef %579) #9
  %581 = icmp slt i32 0, %580
  br i1 %581, label %582, label %587

582:                                              ; preds = %576
  %583 = load ptr, ptr %5, align 8, !tbaa !9
  %584 = getelementptr inbounds ptr, ptr %583, i64 7
  %585 = load ptr, ptr %584, align 8, !tbaa !9
  %586 = call i32 @atoi(ptr noundef %585) #9
  br label %588

587:                                              ; preds = %576, %573
  br label %588

588:                                              ; preds = %587, %582
  %589 = phi i32 [ %586, %582 ], [ 4, %587 ]
  %590 = load i32, ptr %15, align 4, !tbaa !5
  %591 = icmp sle i32 %589, %590
  br i1 %591, label %592, label %609

592:                                              ; preds = %588
  %593 = load i32, ptr %4, align 4, !tbaa !5
  %594 = icmp slt i32 7, %593
  br i1 %594, label %595, label %606

595:                                              ; preds = %592
  %596 = load ptr, ptr %5, align 8, !tbaa !9
  %597 = getelementptr inbounds ptr, ptr %596, i64 7
  %598 = load ptr, ptr %597, align 8, !tbaa !9
  %599 = call i32 @atoi(ptr noundef %598) #9
  %600 = icmp slt i32 0, %599
  br i1 %600, label %601, label %606

601:                                              ; preds = %595
  %602 = load ptr, ptr %5, align 8, !tbaa !9
  %603 = getelementptr inbounds ptr, ptr %602, i64 7
  %604 = load ptr, ptr %603, align 8, !tbaa !9
  %605 = call i32 @atoi(ptr noundef %604) #9
  br label %607

606:                                              ; preds = %595, %592
  br label %607

607:                                              ; preds = %606, %601
  %608 = phi i32 [ %605, %601 ], [ 4, %606 ]
  br label %649

609:                                              ; preds = %588
  %610 = load i32, ptr %4, align 4, !tbaa !5
  %611 = icmp slt i32 7, %610
  br i1 %611, label %612, label %623

612:                                              ; preds = %609
  %613 = load ptr, ptr %5, align 8, !tbaa !9
  %614 = getelementptr inbounds ptr, ptr %613, i64 7
  %615 = load ptr, ptr %614, align 8, !tbaa !9
  %616 = call i32 @atoi(ptr noundef %615) #9
  %617 = icmp slt i32 0, %616
  br i1 %617, label %618, label %623

618:                                              ; preds = %612
  %619 = load ptr, ptr %5, align 8, !tbaa !9
  %620 = getelementptr inbounds ptr, ptr %619, i64 7
  %621 = load ptr, ptr %620, align 8, !tbaa !9
  %622 = call i32 @atoi(ptr noundef %621) #9
  br label %624

623:                                              ; preds = %612, %609
  br label %624

624:                                              ; preds = %623, %618
  %625 = phi i32 [ %622, %618 ], [ 4, %623 ]
  %626 = load i32, ptr %15, align 4, !tbaa !5
  %627 = icmp slt i32 %625, %626
  br i1 %627, label %628, label %645

628:                                              ; preds = %624
  %629 = load i32, ptr %4, align 4, !tbaa !5
  %630 = icmp slt i32 7, %629
  br i1 %630, label %631, label %642

631:                                              ; preds = %628
  %632 = load ptr, ptr %5, align 8, !tbaa !9
  %633 = getelementptr inbounds ptr, ptr %632, i64 7
  %634 = load ptr, ptr %633, align 8, !tbaa !9
  %635 = call i32 @atoi(ptr noundef %634) #9
  %636 = icmp slt i32 0, %635
  br i1 %636, label %637, label %642

637:                                              ; preds = %631
  %638 = load ptr, ptr %5, align 8, !tbaa !9
  %639 = getelementptr inbounds ptr, ptr %638, i64 7
  %640 = load ptr, ptr %639, align 8, !tbaa !9
  %641 = call i32 @atoi(ptr noundef %640) #9
  br label %643

642:                                              ; preds = %631, %628
  br label %643

643:                                              ; preds = %642, %637
  %644 = phi i32 [ %641, %637 ], [ 4, %642 ]
  br label %647

645:                                              ; preds = %624
  %646 = load i32, ptr %15, align 4, !tbaa !5
  br label %647

647:                                              ; preds = %645, %643
  %648 = phi i32 [ %644, %643 ], [ %646, %645 ]
  br label %649

649:                                              ; preds = %647, %607
  %650 = phi i32 [ %608, %607 ], [ %648, %647 ]
  br label %689

651:                                              ; preds = %570
  %652 = load i32, ptr %4, align 4, !tbaa !5
  %653 = icmp slt i32 7, %652
  br i1 %653, label %654, label %665

654:                                              ; preds = %651
  %655 = load ptr, ptr %5, align 8, !tbaa !9
  %656 = getelementptr inbounds ptr, ptr %655, i64 7
  %657 = load ptr, ptr %656, align 8, !tbaa !9
  %658 = call i32 @atoi(ptr noundef %657) #9
  %659 = icmp slt i32 0, %658
  br i1 %659, label %660, label %665

660:                                              ; preds = %654
  %661 = load ptr, ptr %5, align 8, !tbaa !9
  %662 = getelementptr inbounds ptr, ptr %661, i64 7
  %663 = load ptr, ptr %662, align 8, !tbaa !9
  %664 = call i32 @atoi(ptr noundef %663) #9
  br label %666

665:                                              ; preds = %654, %651
  br label %666

666:                                              ; preds = %665, %660
  %667 = phi i32 [ %664, %660 ], [ 4, %665 ]
  %668 = icmp slt i32 1, %667
  br i1 %668, label %669, label %686

669:                                              ; preds = %666
  %670 = load i32, ptr %4, align 4, !tbaa !5
  %671 = icmp slt i32 7, %670
  br i1 %671, label %672, label %683

672:                                              ; preds = %669
  %673 = load ptr, ptr %5, align 8, !tbaa !9
  %674 = getelementptr inbounds ptr, ptr %673, i64 7
  %675 = load ptr, ptr %674, align 8, !tbaa !9
  %676 = call i32 @atoi(ptr noundef %675) #9
  %677 = icmp slt i32 0, %676
  br i1 %677, label %678, label %683

678:                                              ; preds = %672
  %679 = load ptr, ptr %5, align 8, !tbaa !9
  %680 = getelementptr inbounds ptr, ptr %679, i64 7
  %681 = load ptr, ptr %680, align 8, !tbaa !9
  %682 = call i32 @atoi(ptr noundef %681) #9
  br label %684

683:                                              ; preds = %672, %669
  br label %684

684:                                              ; preds = %683, %678
  %685 = phi i32 [ %682, %678 ], [ 4, %683 ]
  br label %687

686:                                              ; preds = %666
  br label %687

687:                                              ; preds = %686, %684
  %688 = phi i32 [ %685, %684 ], [ 1, %686 ]
  br label %689

689:                                              ; preds = %687, %649
  %690 = phi i32 [ %650, %649 ], [ %688, %687 ]
  store i32 %690, ptr %16, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #8
  %691 = load i32, ptr %15, align 4, !tbaa !5
  %692 = load i32, ptr %16, align 4, !tbaa !5
  %693 = sub nsw i32 %691, %692
  %694 = add nsw i32 %693, 1
  store i32 %694, ptr %17, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #8
  store i64 0, ptr %19, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #8
  store i64 0, ptr %20, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #8
  store i64 0, ptr %21, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #8
  store i64 0, ptr %22, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #8
  %695 = load i32, ptr %10, align 4, !tbaa !5
  %696 = icmp slt i32 0, %695
  br i1 %696, label %697, label %702

697:                                              ; preds = %689
  %698 = load i32, ptr %10, align 4, !tbaa !5
  %699 = sext i32 %698 to i64
  %700 = mul i64 12, %699
  %701 = call noalias ptr @malloc(i64 noundef %700) #10
  br label %703

702:                                              ; preds = %689
  br label %703

703:                                              ; preds = %702, %697
  %704 = phi ptr [ %701, %697 ], [ null, %702 ]
  store ptr %704, ptr %23, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #8
  %705 = load i32, ptr %10, align 4, !tbaa !5
  %706 = sext i32 %705 to i64
  %707 = call i64 @libxsmm_coprime2(i64 noundef %706)
  store i64 %707, ptr %24, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #8
  store double 1.000000e+00, ptr %25, align 8, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #8
  store double 1.000000e+00, ptr %26, align 8, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #8
  store i32 0, ptr %27, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr %30) #8
  store i8 78, ptr %30, align 1, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 1, ptr %31) #8
  store i8 78, ptr %31, align 1, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #8
  store i32 0, ptr %32, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #8
  store i32 0, ptr %33, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #8
  store i32 0, ptr %34, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #8
  store i32 -1, ptr %35, align 4, !tbaa !5
  %708 = call i32 @libxsmm_get_target_archid()
  %709 = icmp sgt i32 1002, %708
  br i1 %709, label %710, label %713

710:                                              ; preds = %703
  %711 = load ptr, ptr @stderr, align 8, !tbaa !9
  %712 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %711, ptr noundef @.str) #8
  br label %713

713:                                              ; preds = %710, %703
  %714 = load ptr, ptr %23, align 8, !tbaa !9
  %715 = icmp ne ptr null, %714
  br i1 %715, label %716, label %1699

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

717:                                              ; preds = %876, %716
  %718 = load i32, ptr %28, align 4, !tbaa !5
  %719 = load i32, ptr %10, align 4, !tbaa !5
  %720 = icmp slt i32 %718, %719
  br i1 %720, label %721, label %879

721:                                              ; preds = %717
  call void @llvm.lifetime.start.p0(i64 4, ptr %36) #8
  %722 = call i32 @rand() #8
  store i32 %722, ptr %36, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %37) #8
  %723 = call i32 @rand() #8
  store i32 %723, ptr %37, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %38) #8
  %724 = call i32 @rand() #8
  store i32 %724, ptr %38, align 4, !tbaa !5
  %725 = load i32, ptr %17, align 4, !tbaa !5
  %726 = icmp slt i32 1, %725
  br i1 %726, label %727, label %733

727:                                              ; preds = %721
  %728 = load i32, ptr %36, align 4, !tbaa !5
  %729 = load i32, ptr %17, align 4, !tbaa !5
  %730 = srem i32 %728, %729
  %731 = load i32, ptr %16, align 4, !tbaa !5
  %732 = add nsw i32 %730, %731
  br label %735

733:                                              ; preds = %721
  %734 = load i32, ptr %16, align 4, !tbaa !5
  br label %735

735:                                              ; preds = %733, %727
  %736 = phi i32 [ %732, %727 ], [ %734, %733 ]
  %737 = load ptr, ptr %23, align 8, !tbaa !9
  %738 = load i32, ptr %28, align 4, !tbaa !5
  %739 = sext i32 %738 to i64
  %740 = getelementptr inbounds %struct.triplet, ptr %737, i64 %739
  %741 = getelementptr inbounds %struct.triplet, ptr %740, i32 0, i32 0
  store i32 %736, ptr %741, align 4, !tbaa !18
  %742 = load i32, ptr %17, align 4, !tbaa !5
  %743 = icmp slt i32 1, %742
  br i1 %743, label %744, label %750

744:                                              ; preds = %735
  %745 = load i32, ptr %37, align 4, !tbaa !5
  %746 = load i32, ptr %17, align 4, !tbaa !5
  %747 = srem i32 %745, %746
  %748 = load i32, ptr %16, align 4, !tbaa !5
  %749 = add nsw i32 %747, %748
  br label %752

750:                                              ; preds = %735
  %751 = load i32, ptr %16, align 4, !tbaa !5
  br label %752

752:                                              ; preds = %750, %744
  %753 = phi i32 [ %749, %744 ], [ %751, %750 ]
  %754 = load ptr, ptr %23, align 8, !tbaa !9
  %755 = load i32, ptr %28, align 4, !tbaa !5
  %756 = sext i32 %755 to i64
  %757 = getelementptr inbounds %struct.triplet, ptr %754, i64 %756
  %758 = getelementptr inbounds %struct.triplet, ptr %757, i32 0, i32 1
  store i32 %753, ptr %758, align 4, !tbaa !20
  %759 = load i32, ptr %17, align 4, !tbaa !5
  %760 = icmp slt i32 1, %759
  br i1 %760, label %761, label %767

761:                                              ; preds = %752
  %762 = load i32, ptr %38, align 4, !tbaa !5
  %763 = load i32, ptr %17, align 4, !tbaa !5
  %764 = srem i32 %762, %763
  %765 = load i32, ptr %16, align 4, !tbaa !5
  %766 = add nsw i32 %764, %765
  br label %769

767:                                              ; preds = %752
  %768 = load i32, ptr %16, align 4, !tbaa !5
  br label %769

769:                                              ; preds = %767, %761
  %770 = phi i32 [ %766, %761 ], [ %768, %767 ]
  %771 = load ptr, ptr %23, align 8, !tbaa !9
  %772 = load i32, ptr %28, align 4, !tbaa !5
  %773 = sext i32 %772 to i64
  %774 = getelementptr inbounds %struct.triplet, ptr %771, i64 %773
  %775 = getelementptr inbounds %struct.triplet, ptr %774, i32 0, i32 2
  store i32 %770, ptr %775, align 4, !tbaa !21
  %776 = load i32, ptr %14, align 4, !tbaa !5
  %777 = icmp ne i32 1, %776
  br i1 %777, label %778, label %875

778:                                              ; preds = %769
  %779 = load ptr, ptr %23, align 8, !tbaa !9
  %780 = load i32, ptr %28, align 4, !tbaa !5
  %781 = sext i32 %780 to i64
  %782 = getelementptr inbounds %struct.triplet, ptr %779, i64 %781
  %783 = getelementptr inbounds %struct.triplet, ptr %782, i32 0, i32 0
  %784 = load i32, ptr %783, align 4, !tbaa !18
  %785 = load i32, ptr %14, align 4, !tbaa !5
  %786 = sdiv i32 %784, %785
  %787 = load i32, ptr %14, align 4, !tbaa !5
  %788 = mul nsw i32 %786, %787
  %789 = load i32, ptr %16, align 4, !tbaa !5
  %790 = icmp slt i32 %788, %789
  br i1 %790, label %791, label %793

791:                                              ; preds = %778
  %792 = load i32, ptr %16, align 4, !tbaa !5
  br label %804

793:                                              ; preds = %778
  %794 = load ptr, ptr %23, align 8, !tbaa !9
  %795 = load i32, ptr %28, align 4, !tbaa !5
  %796 = sext i32 %795 to i64
  %797 = getelementptr inbounds %struct.triplet, ptr %794, i64 %796
  %798 = getelementptr inbounds %struct.triplet, ptr %797, i32 0, i32 0
  %799 = load i32, ptr %798, align 4, !tbaa !18
  %800 = load i32, ptr %14, align 4, !tbaa !5
  %801 = sdiv i32 %799, %800
  %802 = load i32, ptr %14, align 4, !tbaa !5
  %803 = mul nsw i32 %801, %802
  br label %804

804:                                              ; preds = %793, %791
  %805 = phi i32 [ %792, %791 ], [ %803, %793 ]
  %806 = load ptr, ptr %23, align 8, !tbaa !9
  %807 = load i32, ptr %28, align 4, !tbaa !5
  %808 = sext i32 %807 to i64
  %809 = getelementptr inbounds %struct.triplet, ptr %806, i64 %808
  %810 = getelementptr inbounds %struct.triplet, ptr %809, i32 0, i32 0
  store i32 %805, ptr %810, align 4, !tbaa !18
  %811 = load ptr, ptr %23, align 8, !tbaa !9
  %812 = load i32, ptr %28, align 4, !tbaa !5
  %813 = sext i32 %812 to i64
  %814 = getelementptr inbounds %struct.triplet, ptr %811, i64 %813
  %815 = getelementptr inbounds %struct.triplet, ptr %814, i32 0, i32 1
  %816 = load i32, ptr %815, align 4, !tbaa !20
  %817 = load i32, ptr %14, align 4, !tbaa !5
  %818 = sdiv i32 %816, %817
  %819 = load i32, ptr %14, align 4, !tbaa !5
  %820 = mul nsw i32 %818, %819
  %821 = load i32, ptr %16, align 4, !tbaa !5
  %822 = icmp slt i32 %820, %821
  br i1 %822, label %823, label %825

823:                                              ; preds = %804
  %824 = load i32, ptr %16, align 4, !tbaa !5
  br label %836

825:                                              ; preds = %804
  %826 = load ptr, ptr %23, align 8, !tbaa !9
  %827 = load i32, ptr %28, align 4, !tbaa !5
  %828 = sext i32 %827 to i64
  %829 = getelementptr inbounds %struct.triplet, ptr %826, i64 %828
  %830 = getelementptr inbounds %struct.triplet, ptr %829, i32 0, i32 1
  %831 = load i32, ptr %830, align 4, !tbaa !20
  %832 = load i32, ptr %14, align 4, !tbaa !5
  %833 = sdiv i32 %831, %832
  %834 = load i32, ptr %14, align 4, !tbaa !5
  %835 = mul nsw i32 %833, %834
  br label %836

836:                                              ; preds = %825, %823
  %837 = phi i32 [ %824, %823 ], [ %835, %825 ]
  %838 = load ptr, ptr %23, align 8, !tbaa !9
  %839 = load i32, ptr %28, align 4, !tbaa !5
  %840 = sext i32 %839 to i64
  %841 = getelementptr inbounds %struct.triplet, ptr %838, i64 %840
  %842 = getelementptr inbounds %struct.triplet, ptr %841, i32 0, i32 1
  store i32 %837, ptr %842, align 4, !tbaa !20
  %843 = load ptr, ptr %23, align 8, !tbaa !9
  %844 = load i32, ptr %28, align 4, !tbaa !5
  %845 = sext i32 %844 to i64
  %846 = getelementptr inbounds %struct.triplet, ptr %843, i64 %845
  %847 = getelementptr inbounds %struct.triplet, ptr %846, i32 0, i32 2
  %848 = load i32, ptr %847, align 4, !tbaa !21
  %849 = load i32, ptr %14, align 4, !tbaa !5
  %850 = sdiv i32 %848, %849
  %851 = load i32, ptr %14, align 4, !tbaa !5
  %852 = mul nsw i32 %850, %851
  %853 = load i32, ptr %16, align 4, !tbaa !5
  %854 = icmp slt i32 %852, %853
  br i1 %854, label %855, label %857

855:                                              ; preds = %836
  %856 = load i32, ptr %16, align 4, !tbaa !5
  br label %868

857:                                              ; preds = %836
  %858 = load ptr, ptr %23, align 8, !tbaa !9
  %859 = load i32, ptr %28, align 4, !tbaa !5
  %860 = sext i32 %859 to i64
  %861 = getelementptr inbounds %struct.triplet, ptr %858, i64 %860
  %862 = getelementptr inbounds %struct.triplet, ptr %861, i32 0, i32 2
  %863 = load i32, ptr %862, align 4, !tbaa !21
  %864 = load i32, ptr %14, align 4, !tbaa !5
  %865 = sdiv i32 %863, %864
  %866 = load i32, ptr %14, align 4, !tbaa !5
  %867 = mul nsw i32 %865, %866
  br label %868

868:                                              ; preds = %857, %855
  %869 = phi i32 [ %856, %855 ], [ %867, %857 ]
  %870 = load ptr, ptr %23, align 8, !tbaa !9
  %871 = load i32, ptr %28, align 4, !tbaa !5
  %872 = sext i32 %871 to i64
  %873 = getelementptr inbounds %struct.triplet, ptr %870, i64 %872
  %874 = getelementptr inbounds %struct.triplet, ptr %873, i32 0, i32 2
  store i32 %869, ptr %874, align 4, !tbaa !21
  br label %875

875:                                              ; preds = %868, %769
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #8
  br label %876

876:                                              ; preds = %875
  %877 = load i32, ptr %28, align 4, !tbaa !5
  %878 = add nsw i32 %877, 1
  store i32 %878, ptr %28, align 4, !tbaa !5
  br label %717, !llvm.loop !22

879:                                              ; preds = %717
  %880 = load ptr, ptr %23, align 8, !tbaa !9
  call void @unique(ptr noundef %880, ptr noundef %10)
  %881 = load i32, ptr %10, align 4, !tbaa !5
  %882 = load i32, ptr %11, align 4, !tbaa !5
  %883 = load i32, ptr %12, align 4, !tbaa !5
  %884 = icmp sge i32 1, %883
  br i1 %884, label %885, label %886

885:                                              ; preds = %879
  br label %888

886:                                              ; preds = %879
  %887 = load i32, ptr %12, align 4, !tbaa !5
  br label %888

888:                                              ; preds = %886, %885
  %889 = phi i32 [ 1, %885 ], [ %887, %886 ]
  %890 = load i32, ptr %12, align 4, !tbaa !5
  %891 = icmp sge i32 1, %890
  %892 = zext i1 %891 to i64
  %893 = select i1 %891, ptr @.str.2, ptr @.str.3
  %894 = call i32 (ptr, ...) @printf(ptr noundef @.str.1, i32 noundef %881, i32 noundef %882, i32 noundef %889, ptr noundef %893)
  call void @libxsmm_init()
  %895 = call i64 @libxsmm_timer_tick()
  store i64 %895, ptr %18, align 8, !tbaa !11
  store i32 0, ptr %29, align 4, !tbaa !5
  br label %896

896:                                              ; preds = %910, %888
  %897 = load i32, ptr %29, align 4, !tbaa !5
  %898 = load i32, ptr %13, align 4, !tbaa !5
  %899 = icmp slt i32 %897, %898
  br i1 %899, label %900, label %913

900:                                              ; preds = %896
  store i32 0, ptr %28, align 4, !tbaa !5
  br label %901

901:                                              ; preds = %906, %900
  %902 = load i32, ptr %28, align 4, !tbaa !5
  %903 = load i32, ptr %10, align 4, !tbaa !5
  %904 = icmp slt i32 %902, %903
  br i1 %904, label %905, label %909

905:                                              ; preds = %901
  call void @libxsmm_init()
  br label %906

906:                                              ; preds = %905
  %907 = load i32, ptr %28, align 4, !tbaa !5
  %908 = add nsw i32 %907, 1
  store i32 %908, ptr %28, align 4, !tbaa !5
  br label %901, !llvm.loop !24

909:                                              ; preds = %901
  br label %910

910:                                              ; preds = %909
  %911 = load i32, ptr %29, align 4, !tbaa !5
  %912 = add nsw i32 %911, 1
  store i32 %912, ptr %29, align 4, !tbaa !5
  br label %896, !llvm.loop !25

913:                                              ; preds = %896
  %914 = load i64, ptr %18, align 8, !tbaa !11
  %915 = call i64 @libxsmm_timer_tick()
  %916 = call i64 @libxsmm_timer_ncycles(i64 noundef %914, i64 noundef %915)
  store i64 %916, ptr %19, align 8, !tbaa !11
  %917 = call i64 @libxsmm_timer_tick()
  store i64 %917, ptr %18, align 8, !tbaa !11
  store i32 0, ptr %28, align 4, !tbaa !5
  br label %918

918:                                              ; preds = %960, %913
  %919 = load i32, ptr %28, align 4, !tbaa !5
  %920 = load i32, ptr %11, align 4, !tbaa !5
  %921 = icmp slt i32 %919, %920
  br i1 %921, label %922, label %963

922:                                              ; preds = %918
  call void @llvm.lifetime.start.p0(i64 40, ptr %39) #8
  %923 = load ptr, ptr %23, align 8, !tbaa !9
  %924 = load i32, ptr %28, align 4, !tbaa !5
  %925 = sext i32 %924 to i64
  %926 = getelementptr inbounds %struct.triplet, ptr %923, i64 %925
  %927 = getelementptr inbounds %struct.triplet, ptr %926, i32 0, i32 0
  %928 = load i32, ptr %927, align 4, !tbaa !18
  %929 = load ptr, ptr %23, align 8, !tbaa !9
  %930 = load i32, ptr %28, align 4, !tbaa !5
  %931 = sext i32 %930 to i64
  %932 = getelementptr inbounds %struct.triplet, ptr %929, i64 %931
  %933 = getelementptr inbounds %struct.triplet, ptr %932, i32 0, i32 1
  %934 = load i32, ptr %933, align 4, !tbaa !20
  %935 = load ptr, ptr %23, align 8, !tbaa !9
  %936 = load i32, ptr %28, align 4, !tbaa !5
  %937 = sext i32 %936 to i64
  %938 = getelementptr inbounds %struct.triplet, ptr %935, i64 %937
  %939 = getelementptr inbounds %struct.triplet, ptr %938, i32 0, i32 2
  %940 = load i32, ptr %939, align 4, !tbaa !21
  %941 = load ptr, ptr %23, align 8, !tbaa !9
  %942 = load i32, ptr %28, align 4, !tbaa !5
  %943 = sext i32 %942 to i64
  %944 = getelementptr inbounds %struct.triplet, ptr %941, i64 %943
  %945 = getelementptr inbounds %struct.triplet, ptr %944, i32 0, i32 0
  %946 = load i32, ptr %945, align 4, !tbaa !18
  %947 = load ptr, ptr %23, align 8, !tbaa !9
  %948 = load i32, ptr %28, align 4, !tbaa !5
  %949 = sext i32 %948 to i64
  %950 = getelementptr inbounds %struct.triplet, ptr %947, i64 %949
  %951 = getelementptr inbounds %struct.triplet, ptr %950, i32 0, i32 2
  %952 = load i32, ptr %951, align 4, !tbaa !21
  %953 = load ptr, ptr %23, align 8, !tbaa !9
  %954 = load i32, ptr %28, align 4, !tbaa !5
  %955 = sext i32 %954 to i64
  %956 = getelementptr inbounds %struct.triplet, ptr %953, i64 %955
  %957 = getelementptr inbounds %struct.triplet, ptr %956, i32 0, i32 0
  %958 = load i32, ptr %957, align 4, !tbaa !18
  call void @libxsmm_create_gemm_shape(ptr dead_on_unwind writable sret(%struct.libxsmm_gemm_shape) align 4 %39, i32 noundef %928, i32 noundef %934, i32 noundef %940, i32 noundef %946, i32 noundef %952, i32 noundef %958, i32 noundef 0, i32 noundef 0, i32 noundef 0, i32 noundef 0)
  %959 = call ptr @libxsmm_dispatch_gemm(ptr noundef byval(%struct.libxsmm_gemm_shape) align 8 %39, i32 noundef 0, i32 noundef -1)
  call void @llvm.lifetime.end.p0(i64 40, ptr %39) #8
  br label %960

960:                                              ; preds = %922
  %961 = load i32, ptr %28, align 4, !tbaa !5
  %962 = add nsw i32 %961, 1
  store i32 %962, ptr %28, align 4, !tbaa !5
  br label %918, !llvm.loop !26

963:                                              ; preds = %918
  %964 = load i64, ptr %18, align 8, !tbaa !11
  %965 = call i64 @libxsmm_timer_tick()
  %966 = call i64 @libxsmm_timer_ncycles(i64 noundef %964, i64 noundef %965)
  store i64 %966, ptr %20, align 8, !tbaa !11
  store i32 0, ptr %29, align 4, !tbaa !5
  br label %967

967:                                              ; preds = %1027, %963
  %968 = load i32, ptr %29, align 4, !tbaa !5
  %969 = load i32, ptr %13, align 4, !tbaa !5
  %970 = icmp slt i32 %968, %969
  br i1 %970, label %971, label %1030

971:                                              ; preds = %967
  %972 = call i64 @libxsmm_timer_tick()
  store i64 %972, ptr %18, align 8, !tbaa !11
  store i32 0, ptr %28, align 4, !tbaa !5
  br label %973

973:                                              ; preds = %1018, %971
  %974 = load i32, ptr %28, align 4, !tbaa !5
  %975 = load i32, ptr %10, align 4, !tbaa !5
  %976 = icmp slt i32 %974, %975
  br i1 %976, label %977, label %1021

977:                                              ; preds = %973
  call void @llvm.lifetime.start.p0(i64 4, ptr %40) #8
  %978 = load i32, ptr %28, align 4, !tbaa !5
  %979 = load i32, ptr %11, align 4, !tbaa !5
  %980 = srem i32 %978, %979
  store i32 %980, ptr %40, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 40, ptr %41) #8
  %981 = load ptr, ptr %23, align 8, !tbaa !9
  %982 = load i32, ptr %40, align 4, !tbaa !5
  %983 = sext i32 %982 to i64
  %984 = getelementptr inbounds %struct.triplet, ptr %981, i64 %983
  %985 = getelementptr inbounds %struct.triplet, ptr %984, i32 0, i32 0
  %986 = load i32, ptr %985, align 4, !tbaa !18
  %987 = load ptr, ptr %23, align 8, !tbaa !9
  %988 = load i32, ptr %40, align 4, !tbaa !5
  %989 = sext i32 %988 to i64
  %990 = getelementptr inbounds %struct.triplet, ptr %987, i64 %989
  %991 = getelementptr inbounds %struct.triplet, ptr %990, i32 0, i32 1
  %992 = load i32, ptr %991, align 4, !tbaa !20
  %993 = load ptr, ptr %23, align 8, !tbaa !9
  %994 = load i32, ptr %40, align 4, !tbaa !5
  %995 = sext i32 %994 to i64
  %996 = getelementptr inbounds %struct.triplet, ptr %993, i64 %995
  %997 = getelementptr inbounds %struct.triplet, ptr %996, i32 0, i32 2
  %998 = load i32, ptr %997, align 4, !tbaa !21
  %999 = load ptr, ptr %23, align 8, !tbaa !9
  %1000 = load i32, ptr %40, align 4, !tbaa !5
  %1001 = sext i32 %1000 to i64
  %1002 = getelementptr inbounds %struct.triplet, ptr %999, i64 %1001
  %1003 = getelementptr inbounds %struct.triplet, ptr %1002, i32 0, i32 0
  %1004 = load i32, ptr %1003, align 4, !tbaa !18
  %1005 = load ptr, ptr %23, align 8, !tbaa !9
  %1006 = load i32, ptr %40, align 4, !tbaa !5
  %1007 = sext i32 %1006 to i64
  %1008 = getelementptr inbounds %struct.triplet, ptr %1005, i64 %1007
  %1009 = getelementptr inbounds %struct.triplet, ptr %1008, i32 0, i32 2
  %1010 = load i32, ptr %1009, align 4, !tbaa !21
  %1011 = load ptr, ptr %23, align 8, !tbaa !9
  %1012 = load i32, ptr %40, align 4, !tbaa !5
  %1013 = sext i32 %1012 to i64
  %1014 = getelementptr inbounds %struct.triplet, ptr %1011, i64 %1013
  %1015 = getelementptr inbounds %struct.triplet, ptr %1014, i32 0, i32 0
  %1016 = load i32, ptr %1015, align 4, !tbaa !18
  call void @libxsmm_create_gemm_shape(ptr dead_on_unwind writable sret(%struct.libxsmm_gemm_shape) align 4 %41, i32 noundef %986, i32 noundef %992, i32 noundef %998, i32 noundef %1004, i32 noundef %1010, i32 noundef %1016, i32 noundef 0, i32 noundef 0, i32 noundef 0, i32 noundef 0)
  %1017 = call ptr @libxsmm_dispatch_gemm(ptr noundef byval(%struct.libxsmm_gemm_shape) align 8 %41, i32 noundef 0, i32 noundef -1)
  call void @llvm.lifetime.end.p0(i64 40, ptr %41) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #8
  br label %1018

1018:                                             ; preds = %977
  %1019 = load i32, ptr %28, align 4, !tbaa !5
  %1020 = add nsw i32 %1019, 1
  store i32 %1020, ptr %28, align 4, !tbaa !5
  br label %973, !llvm.loop !27

1021:                                             ; preds = %973
  %1022 = load i64, ptr %18, align 8, !tbaa !11
  %1023 = call i64 @libxsmm_timer_tick()
  %1024 = call i64 @libxsmm_timer_ncycles(i64 noundef %1022, i64 noundef %1023)
  %1025 = load i64, ptr %22, align 8, !tbaa !11
  %1026 = add i64 %1025, %1024
  store i64 %1026, ptr %22, align 8, !tbaa !11
  br label %1027

1027:                                             ; preds = %1021
  %1028 = load i32, ptr %29, align 4, !tbaa !5
  %1029 = add nsw i32 %1028, 1
  store i32 %1029, ptr %29, align 4, !tbaa !5
  br label %967, !llvm.loop !28

1030:                                             ; preds = %967
  %1031 = call i64 @libxsmm_timer_tick()
  store i64 %1031, ptr %18, align 8, !tbaa !11
  %1032 = load i32, ptr %11, align 4, !tbaa !5
  store i32 %1032, ptr %28, align 4, !tbaa !5
  br label %1033

1033:                                             ; preds = %1075, %1030
  %1034 = load i32, ptr %28, align 4, !tbaa !5
  %1035 = load i32, ptr %10, align 4, !tbaa !5
  %1036 = icmp slt i32 %1034, %1035
  br i1 %1036, label %1037, label %1078

1037:                                             ; preds = %1033
  call void @llvm.lifetime.start.p0(i64 40, ptr %42) #8
  %1038 = load ptr, ptr %23, align 8, !tbaa !9
  %1039 = load i32, ptr %28, align 4, !tbaa !5
  %1040 = sext i32 %1039 to i64
  %1041 = getelementptr inbounds %struct.triplet, ptr %1038, i64 %1040
  %1042 = getelementptr inbounds %struct.triplet, ptr %1041, i32 0, i32 0
  %1043 = load i32, ptr %1042, align 4, !tbaa !18
  %1044 = load ptr, ptr %23, align 8, !tbaa !9
  %1045 = load i32, ptr %28, align 4, !tbaa !5
  %1046 = sext i32 %1045 to i64
  %1047 = getelementptr inbounds %struct.triplet, ptr %1044, i64 %1046
  %1048 = getelementptr inbounds %struct.triplet, ptr %1047, i32 0, i32 1
  %1049 = load i32, ptr %1048, align 4, !tbaa !20
  %1050 = load ptr, ptr %23, align 8, !tbaa !9
  %1051 = load i32, ptr %28, align 4, !tbaa !5
  %1052 = sext i32 %1051 to i64
  %1053 = getelementptr inbounds %struct.triplet, ptr %1050, i64 %1052
  %1054 = getelementptr inbounds %struct.triplet, ptr %1053, i32 0, i32 2
  %1055 = load i32, ptr %1054, align 4, !tbaa !21
  %1056 = load ptr, ptr %23, align 8, !tbaa !9
  %1057 = load i32, ptr %28, align 4, !tbaa !5
  %1058 = sext i32 %1057 to i64
  %1059 = getelementptr inbounds %struct.triplet, ptr %1056, i64 %1058
  %1060 = getelementptr inbounds %struct.triplet, ptr %1059, i32 0, i32 0
  %1061 = load i32, ptr %1060, align 4, !tbaa !18
  %1062 = load ptr, ptr %23, align 8, !tbaa !9
  %1063 = load i32, ptr %28, align 4, !tbaa !5
  %1064 = sext i32 %1063 to i64
  %1065 = getelementptr inbounds %struct.triplet, ptr %1062, i64 %1064
  %1066 = getelementptr inbounds %struct.triplet, ptr %1065, i32 0, i32 2
  %1067 = load i32, ptr %1066, align 4, !tbaa !21
  %1068 = load ptr, ptr %23, align 8, !tbaa !9
  %1069 = load i32, ptr %28, align 4, !tbaa !5
  %1070 = sext i32 %1069 to i64
  %1071 = getelementptr inbounds %struct.triplet, ptr %1068, i64 %1070
  %1072 = getelementptr inbounds %struct.triplet, ptr %1071, i32 0, i32 0
  %1073 = load i32, ptr %1072, align 4, !tbaa !18
  call void @libxsmm_create_gemm_shape(ptr dead_on_unwind writable sret(%struct.libxsmm_gemm_shape) align 4 %42, i32 noundef %1043, i32 noundef %1049, i32 noundef %1055, i32 noundef %1061, i32 noundef %1067, i32 noundef %1073, i32 noundef 0, i32 noundef 0, i32 noundef 0, i32 noundef 0)
  %1074 = call ptr @libxsmm_dispatch_gemm(ptr noundef byval(%struct.libxsmm_gemm_shape) align 8 %42, i32 noundef 0, i32 noundef -1)
  call void @llvm.lifetime.end.p0(i64 40, ptr %42) #8
  br label %1075

1075:                                             ; preds = %1037
  %1076 = load i32, ptr %28, align 4, !tbaa !5
  %1077 = add nsw i32 %1076, 1
  store i32 %1077, ptr %28, align 4, !tbaa !5
  br label %1033, !llvm.loop !29

1078:                                             ; preds = %1033
  %1079 = load i64, ptr %18, align 8, !tbaa !11
  %1080 = call i64 @libxsmm_timer_tick()
  %1081 = call i64 @libxsmm_timer_ncycles(i64 noundef %1079, i64 noundef %1080)
  %1082 = load i64, ptr %20, align 8, !tbaa !11
  %1083 = add i64 %1082, %1081
  store i64 %1083, ptr %20, align 8, !tbaa !11
  store i32 0, ptr %29, align 4, !tbaa !5
  br label %1084

1084:                                             ; preds = %1149, %1078
  %1085 = load i32, ptr %29, align 4, !tbaa !5
  %1086 = load i32, ptr %13, align 4, !tbaa !5
  %1087 = icmp slt i32 %1085, %1086
  br i1 %1087, label %1088, label %1152

1088:                                             ; preds = %1084
  %1089 = call i64 @libxsmm_timer_tick()
  store i64 %1089, ptr %18, align 8, !tbaa !11
  store i32 0, ptr %28, align 4, !tbaa !5
  br label %1090

1090:                                             ; preds = %1140, %1088
  %1091 = load i32, ptr %28, align 4, !tbaa !5
  %1092 = load i32, ptr %10, align 4, !tbaa !5
  %1093 = icmp slt i32 %1091, %1092
  br i1 %1093, label %1094, label %1143

1094:                                             ; preds = %1090
  call void @llvm.lifetime.start.p0(i64 4, ptr %43) #8
  %1095 = load i64, ptr %24, align 8, !tbaa !13
  %1096 = load i32, ptr %28, align 4, !tbaa !5
  %1097 = sext i32 %1096 to i64
  %1098 = mul i64 %1095, %1097
  %1099 = load i32, ptr %10, align 4, !tbaa !5
  %1100 = sext i32 %1099 to i64
  %1101 = urem i64 %1098, %1100
  %1102 = trunc i64 %1101 to i32
  store i32 %1102, ptr %43, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 40, ptr %44) #8
  %1103 = load ptr, ptr %23, align 8, !tbaa !9
  %1104 = load i32, ptr %43, align 4, !tbaa !5
  %1105 = sext i32 %1104 to i64
  %1106 = getelementptr inbounds %struct.triplet, ptr %1103, i64 %1105
  %1107 = getelementptr inbounds %struct.triplet, ptr %1106, i32 0, i32 0
  %1108 = load i32, ptr %1107, align 4, !tbaa !18
  %1109 = load ptr, ptr %23, align 8, !tbaa !9
  %1110 = load i32, ptr %43, align 4, !tbaa !5
  %1111 = sext i32 %1110 to i64
  %1112 = getelementptr inbounds %struct.triplet, ptr %1109, i64 %1111
  %1113 = getelementptr inbounds %struct.triplet, ptr %1112, i32 0, i32 1
  %1114 = load i32, ptr %1113, align 4, !tbaa !20
  %1115 = load ptr, ptr %23, align 8, !tbaa !9
  %1116 = load i32, ptr %43, align 4, !tbaa !5
  %1117 = sext i32 %1116 to i64
  %1118 = getelementptr inbounds %struct.triplet, ptr %1115, i64 %1117
  %1119 = getelementptr inbounds %struct.triplet, ptr %1118, i32 0, i32 2
  %1120 = load i32, ptr %1119, align 4, !tbaa !21
  %1121 = load ptr, ptr %23, align 8, !tbaa !9
  %1122 = load i32, ptr %43, align 4, !tbaa !5
  %1123 = sext i32 %1122 to i64
  %1124 = getelementptr inbounds %struct.triplet, ptr %1121, i64 %1123
  %1125 = getelementptr inbounds %struct.triplet, ptr %1124, i32 0, i32 0
  %1126 = load i32, ptr %1125, align 4, !tbaa !18
  %1127 = load ptr, ptr %23, align 8, !tbaa !9
  %1128 = load i32, ptr %43, align 4, !tbaa !5
  %1129 = sext i32 %1128 to i64
  %1130 = getelementptr inbounds %struct.triplet, ptr %1127, i64 %1129
  %1131 = getelementptr inbounds %struct.triplet, ptr %1130, i32 0, i32 2
  %1132 = load i32, ptr %1131, align 4, !tbaa !21
  %1133 = load ptr, ptr %23, align 8, !tbaa !9
  %1134 = load i32, ptr %43, align 4, !tbaa !5
  %1135 = sext i32 %1134 to i64
  %1136 = getelementptr inbounds %struct.triplet, ptr %1133, i64 %1135
  %1137 = getelementptr inbounds %struct.triplet, ptr %1136, i32 0, i32 0
  %1138 = load i32, ptr %1137, align 4, !tbaa !18
  call void @libxsmm_create_gemm_shape(ptr dead_on_unwind writable sret(%struct.libxsmm_gemm_shape) align 4 %44, i32 noundef %1108, i32 noundef %1114, i32 noundef %1120, i32 noundef %1126, i32 noundef %1132, i32 noundef %1138, i32 noundef 0, i32 noundef 0, i32 noundef 0, i32 noundef 0)
  %1139 = call ptr @libxsmm_dispatch_gemm(ptr noundef byval(%struct.libxsmm_gemm_shape) align 8 %44, i32 noundef 0, i32 noundef -1)
  call void @llvm.lifetime.end.p0(i64 40, ptr %44) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #8
  br label %1140

1140:                                             ; preds = %1094
  %1141 = load i32, ptr %28, align 4, !tbaa !5
  %1142 = add nsw i32 %1141, 1
  store i32 %1142, ptr %28, align 4, !tbaa !5
  br label %1090, !llvm.loop !30

1143:                                             ; preds = %1090
  %1144 = load i64, ptr %18, align 8, !tbaa !11
  %1145 = call i64 @libxsmm_timer_tick()
  %1146 = call i64 @libxsmm_timer_ncycles(i64 noundef %1144, i64 noundef %1145)
  %1147 = load i64, ptr %21, align 8, !tbaa !11
  %1148 = add i64 %1147, %1146
  store i64 %1148, ptr %21, align 8, !tbaa !11
  br label %1149

1149:                                             ; preds = %1143
  %1150 = load i32, ptr %29, align 4, !tbaa !5
  %1151 = add nsw i32 %1150, 1
  store i32 %1151, ptr %29, align 4, !tbaa !5
  br label %1084, !llvm.loop !31

1152:                                             ; preds = %1084
  call void @llvm.lifetime.start.p0(i64 32768, ptr %45) #8
  call void @llvm.lifetime.start.p0(i64 32768, ptr %46) #8
  call void @llvm.lifetime.start.p0(i64 32768, ptr %47) #8
  call void @llvm.lifetime.start.p0(i64 192, ptr %48) #8
  call void @libxsmm_matdiff_clear(ptr noundef %48)
  br label %1153

1153:                                             ; preds = %1152
  call void @llvm.lifetime.start.p0(i64 8, ptr %49) #8
  store double 0.000000e+00, ptr %49, align 8, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 8, ptr %50) #8
  %1154 = load double, ptr %49, align 8, !tbaa !15
  %1155 = call double @llvm.fmuladd.f64(double %1154, double 1.000000e+00, double 1.000000e+00)
  store double %1155, ptr %50, align 8, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %51) #8
  %1156 = load i32, ptr %15, align 4, !tbaa !5
  store i32 %1156, ptr %51, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %52) #8
  %1157 = load i32, ptr %15, align 4, !tbaa !5
  store i32 %1157, ptr %52, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %53) #8
  %1158 = load i32, ptr %15, align 4, !tbaa !5
  store i32 %1158, ptr %53, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %54) #8
  store i32 0, ptr %54, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %55) #8
  store i32 0, ptr %55, align 4, !tbaa !5
  %1159 = load double, ptr %49, align 8, !tbaa !15
  %1160 = fcmp une double 0.000000e+00, %1159
  br i1 %1160, label %1161, label %1218

1161:                                             ; preds = %1153
  store i32 0, ptr %54, align 4, !tbaa !5
  br label %1162

1162:                                             ; preds = %1214, %1161
  %1163 = load i32, ptr %54, align 4, !tbaa !5
  %1164 = load i32, ptr %52, align 4, !tbaa !5
  %1165 = icmp slt i32 %1163, %1164
  br i1 %1165, label %1166, label %1217

1166:                                             ; preds = %1162
  store i32 0, ptr %55, align 4, !tbaa !5
  br label %1167

1167:                                             ; preds = %1191, %1166
  %1168 = load i32, ptr %55, align 4, !tbaa !5
  %1169 = load i32, ptr %51, align 4, !tbaa !5
  %1170 = icmp slt i32 %1168, %1169
  br i1 %1170, label %1171, label %1194

1171:                                             ; preds = %1167
  call void @llvm.lifetime.start.p0(i64 4, ptr %56) #8
  %1172 = load i32, ptr %54, align 4, !tbaa !5
  %1173 = load i32, ptr %53, align 4, !tbaa !5
  %1174 = mul nsw i32 %1172, %1173
  %1175 = load i32, ptr %55, align 4, !tbaa !5
  %1176 = add nsw i32 %1174, %1175
  store i32 %1176, ptr %56, align 4, !tbaa !5
  %1177 = load double, ptr %50, align 8, !tbaa !15
  %1178 = load i32, ptr %54, align 4, !tbaa !5
  %1179 = sitofp i32 %1178 to double
  %1180 = load i32, ptr %51, align 4, !tbaa !5
  %1181 = sitofp i32 %1180 to double
  %1182 = call double @llvm.fmuladd.f64(double %1179, double %1181, double 1.000000e+00)
  %1183 = load i32, ptr %55, align 4, !tbaa !5
  %1184 = sitofp i32 %1183 to double
  %1185 = fadd double %1182, %1184
  %1186 = fmul double %1177, %1185
  %1187 = getelementptr inbounds [4096 x double], ptr %45, i64 0, i64 0
  %1188 = load i32, ptr %56, align 4, !tbaa !5
  %1189 = sext i32 %1188 to i64
  %1190 = getelementptr inbounds double, ptr %1187, i64 %1189
  store double %1186, ptr %1190, align 8, !tbaa !15
  call void @llvm.lifetime.end.p0(i64 4, ptr %56) #8
  br label %1191

1191:                                             ; preds = %1171
  %1192 = load i32, ptr %55, align 4, !tbaa !5
  %1193 = add nsw i32 %1192, 1
  store i32 %1193, ptr %55, align 4, !tbaa !5
  br label %1167, !llvm.loop !32

1194:                                             ; preds = %1167
  br label %1195

1195:                                             ; preds = %1210, %1194
  %1196 = load i32, ptr %55, align 4, !tbaa !5
  %1197 = load i32, ptr %53, align 4, !tbaa !5
  %1198 = icmp slt i32 %1196, %1197
  br i1 %1198, label %1199, label %1213

1199:                                             ; preds = %1195
  call void @llvm.lifetime.start.p0(i64 4, ptr %57) #8
  %1200 = load i32, ptr %54, align 4, !tbaa !5
  %1201 = load i32, ptr %53, align 4, !tbaa !5
  %1202 = mul nsw i32 %1200, %1201
  %1203 = load i32, ptr %55, align 4, !tbaa !5
  %1204 = add nsw i32 %1202, %1203
  store i32 %1204, ptr %57, align 4, !tbaa !5
  %1205 = load double, ptr %49, align 8, !tbaa !15
  %1206 = getelementptr inbounds [4096 x double], ptr %45, i64 0, i64 0
  %1207 = load i32, ptr %57, align 4, !tbaa !5
  %1208 = sext i32 %1207 to i64
  %1209 = getelementptr inbounds double, ptr %1206, i64 %1208
  store double %1205, ptr %1209, align 8, !tbaa !15
  call void @llvm.lifetime.end.p0(i64 4, ptr %57) #8
  br label %1210

1210:                                             ; preds = %1199
  %1211 = load i32, ptr %55, align 4, !tbaa !5
  %1212 = add nsw i32 %1211, 1
  store i32 %1212, ptr %55, align 4, !tbaa !5
  br label %1195, !llvm.loop !33

1213:                                             ; preds = %1195
  br label %1214

1214:                                             ; preds = %1213
  %1215 = load i32, ptr %54, align 4, !tbaa !5
  %1216 = add nsw i32 %1215, 1
  store i32 %1216, ptr %54, align 4, !tbaa !5
  br label %1162, !llvm.loop !34

1217:                                             ; preds = %1162
  br label %1270

1218:                                             ; preds = %1153
  call void @llvm.lifetime.start.p0(i64 4, ptr %58) #8
  %1219 = load i32, ptr %52, align 4, !tbaa !5
  %1220 = load i32, ptr %53, align 4, !tbaa !5
  %1221 = mul nsw i32 %1219, %1220
  store i32 %1221, ptr %58, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %59) #8
  %1222 = load i32, ptr %58, align 4, !tbaa !5
  %1223 = add nsw i32 %1222, 1
  %1224 = sdiv i32 %1223, 2
  %1225 = sitofp i32 %1224 to double
  store double %1225, ptr %59, align 8, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 8, ptr %60) #8
  %1226 = load double, ptr %59, align 8, !tbaa !15
  %1227 = fdiv double 1.000000e+00, %1226
  store double %1227, ptr %60, align 8, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 8, ptr %61) #8
  %1228 = load i32, ptr %58, align 4, !tbaa !5
  %1229 = sext i32 %1228 to i64
  %1230 = call i64 @libxsmm_coprime2(i64 noundef %1229)
  store i64 %1230, ptr %61, align 8, !tbaa !13
  store i32 0, ptr %54, align 4, !tbaa !5
  br label %1231

1231:                                             ; preds = %1266, %1218
  %1232 = load i32, ptr %54, align 4, !tbaa !5
  %1233 = load i32, ptr %52, align 4, !tbaa !5
  %1234 = icmp slt i32 %1232, %1233
  br i1 %1234, label %1235, label %1269

1235:                                             ; preds = %1231
  store i32 0, ptr %55, align 4, !tbaa !5
  br label %1236

1236:                                             ; preds = %1262, %1235
  %1237 = load i32, ptr %55, align 4, !tbaa !5
  %1238 = load i32, ptr %53, align 4, !tbaa !5
  %1239 = icmp slt i32 %1237, %1238
  br i1 %1239, label %1240, label %1265

1240:                                             ; preds = %1236
  call void @llvm.lifetime.start.p0(i64 4, ptr %62) #8
  %1241 = load i32, ptr %54, align 4, !tbaa !5
  %1242 = load i32, ptr %53, align 4, !tbaa !5
  %1243 = mul nsw i32 %1241, %1242
  %1244 = load i32, ptr %55, align 4, !tbaa !5
  %1245 = add nsw i32 %1243, %1244
  store i32 %1245, ptr %62, align 4, !tbaa !5
  %1246 = load double, ptr %60, align 8, !tbaa !15
  %1247 = load i64, ptr %61, align 8, !tbaa !13
  %1248 = load i32, ptr %62, align 4, !tbaa !5
  %1249 = sext i32 %1248 to i64
  %1250 = mul i64 %1247, %1249
  %1251 = load i32, ptr %58, align 4, !tbaa !5
  %1252 = sext i32 %1251 to i64
  %1253 = urem i64 %1250, %1252
  %1254 = uitofp i64 %1253 to double
  %1255 = load double, ptr %59, align 8, !tbaa !15
  %1256 = fsub double %1254, %1255
  %1257 = fmul double %1246, %1256
  %1258 = getelementptr inbounds [4096 x double], ptr %45, i64 0, i64 0
  %1259 = load i32, ptr %62, align 4, !tbaa !5
  %1260 = sext i32 %1259 to i64
  %1261 = getelementptr inbounds double, ptr %1258, i64 %1260
  store double %1257, ptr %1261, align 8, !tbaa !15
  call void @llvm.lifetime.end.p0(i64 4, ptr %62) #8
  br label %1262

1262:                                             ; preds = %1240
  %1263 = load i32, ptr %55, align 4, !tbaa !5
  %1264 = add nsw i32 %1263, 1
  store i32 %1264, ptr %55, align 4, !tbaa !5
  br label %1236, !llvm.loop !35

1265:                                             ; preds = %1236
  br label %1266

1266:                                             ; preds = %1265
  %1267 = load i32, ptr %54, align 4, !tbaa !5
  %1268 = add nsw i32 %1267, 1
  store i32 %1268, ptr %54, align 4, !tbaa !5
  br label %1231, !llvm.loop !36

1269:                                             ; preds = %1231
  call void @llvm.lifetime.end.p0(i64 8, ptr %61) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %60) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %59) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %58) #8
  br label %1270

1270:                                             ; preds = %1269, %1217
  call void @llvm.lifetime.end.p0(i64 4, ptr %55) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %54) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %53) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %52) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %51) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #8
  br label %1271

1271:                                             ; preds = %1270
  br label %1272

1272:                                             ; preds = %1271
  br label %1273

1273:                                             ; preds = %1272
  call void @llvm.lifetime.start.p0(i64 8, ptr %63) #8
  store double 0.000000e+00, ptr %63, align 8, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 8, ptr %64) #8
  %1274 = load double, ptr %63, align 8, !tbaa !15
  %1275 = call double @llvm.fmuladd.f64(double %1274, double 1.000000e+00, double 1.000000e+00)
  store double %1275, ptr %64, align 8, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %65) #8
  %1276 = load i32, ptr %15, align 4, !tbaa !5
  store i32 %1276, ptr %65, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %66) #8
  %1277 = load i32, ptr %15, align 4, !tbaa !5
  store i32 %1277, ptr %66, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %67) #8
  %1278 = load i32, ptr %15, align 4, !tbaa !5
  store i32 %1278, ptr %67, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %68) #8
  store i32 0, ptr %68, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %69) #8
  store i32 0, ptr %69, align 4, !tbaa !5
  %1279 = load double, ptr %63, align 8, !tbaa !15
  %1280 = fcmp une double 0.000000e+00, %1279
  br i1 %1280, label %1281, label %1338

1281:                                             ; preds = %1273
  store i32 0, ptr %68, align 4, !tbaa !5
  br label %1282

1282:                                             ; preds = %1334, %1281
  %1283 = load i32, ptr %68, align 4, !tbaa !5
  %1284 = load i32, ptr %66, align 4, !tbaa !5
  %1285 = icmp slt i32 %1283, %1284
  br i1 %1285, label %1286, label %1337

1286:                                             ; preds = %1282
  store i32 0, ptr %69, align 4, !tbaa !5
  br label %1287

1287:                                             ; preds = %1311, %1286
  %1288 = load i32, ptr %69, align 4, !tbaa !5
  %1289 = load i32, ptr %65, align 4, !tbaa !5
  %1290 = icmp slt i32 %1288, %1289
  br i1 %1290, label %1291, label %1314

1291:                                             ; preds = %1287
  call void @llvm.lifetime.start.p0(i64 4, ptr %70) #8
  %1292 = load i32, ptr %68, align 4, !tbaa !5
  %1293 = load i32, ptr %67, align 4, !tbaa !5
  %1294 = mul nsw i32 %1292, %1293
  %1295 = load i32, ptr %69, align 4, !tbaa !5
  %1296 = add nsw i32 %1294, %1295
  store i32 %1296, ptr %70, align 4, !tbaa !5
  %1297 = load double, ptr %64, align 8, !tbaa !15
  %1298 = load i32, ptr %68, align 4, !tbaa !5
  %1299 = sitofp i32 %1298 to double
  %1300 = load i32, ptr %65, align 4, !tbaa !5
  %1301 = sitofp i32 %1300 to double
  %1302 = call double @llvm.fmuladd.f64(double %1299, double %1301, double 1.000000e+00)
  %1303 = load i32, ptr %69, align 4, !tbaa !5
  %1304 = sitofp i32 %1303 to double
  %1305 = fadd double %1302, %1304
  %1306 = fmul double %1297, %1305
  %1307 = getelementptr inbounds [4096 x double], ptr %46, i64 0, i64 0
  %1308 = load i32, ptr %70, align 4, !tbaa !5
  %1309 = sext i32 %1308 to i64
  %1310 = getelementptr inbounds double, ptr %1307, i64 %1309
  store double %1306, ptr %1310, align 8, !tbaa !15
  call void @llvm.lifetime.end.p0(i64 4, ptr %70) #8
  br label %1311

1311:                                             ; preds = %1291
  %1312 = load i32, ptr %69, align 4, !tbaa !5
  %1313 = add nsw i32 %1312, 1
  store i32 %1313, ptr %69, align 4, !tbaa !5
  br label %1287, !llvm.loop !37

1314:                                             ; preds = %1287
  br label %1315

1315:                                             ; preds = %1330, %1314
  %1316 = load i32, ptr %69, align 4, !tbaa !5
  %1317 = load i32, ptr %67, align 4, !tbaa !5
  %1318 = icmp slt i32 %1316, %1317
  br i1 %1318, label %1319, label %1333

1319:                                             ; preds = %1315
  call void @llvm.lifetime.start.p0(i64 4, ptr %71) #8
  %1320 = load i32, ptr %68, align 4, !tbaa !5
  %1321 = load i32, ptr %67, align 4, !tbaa !5
  %1322 = mul nsw i32 %1320, %1321
  %1323 = load i32, ptr %69, align 4, !tbaa !5
  %1324 = add nsw i32 %1322, %1323
  store i32 %1324, ptr %71, align 4, !tbaa !5
  %1325 = load double, ptr %63, align 8, !tbaa !15
  %1326 = getelementptr inbounds [4096 x double], ptr %46, i64 0, i64 0
  %1327 = load i32, ptr %71, align 4, !tbaa !5
  %1328 = sext i32 %1327 to i64
  %1329 = getelementptr inbounds double, ptr %1326, i64 %1328
  store double %1325, ptr %1329, align 8, !tbaa !15
  call void @llvm.lifetime.end.p0(i64 4, ptr %71) #8
  br label %1330

1330:                                             ; preds = %1319
  %1331 = load i32, ptr %69, align 4, !tbaa !5
  %1332 = add nsw i32 %1331, 1
  store i32 %1332, ptr %69, align 4, !tbaa !5
  br label %1315, !llvm.loop !38

1333:                                             ; preds = %1315
  br label %1334

1334:                                             ; preds = %1333
  %1335 = load i32, ptr %68, align 4, !tbaa !5
  %1336 = add nsw i32 %1335, 1
  store i32 %1336, ptr %68, align 4, !tbaa !5
  br label %1282, !llvm.loop !39

1337:                                             ; preds = %1282
  br label %1390

1338:                                             ; preds = %1273
  call void @llvm.lifetime.start.p0(i64 4, ptr %72) #8
  %1339 = load i32, ptr %66, align 4, !tbaa !5
  %1340 = load i32, ptr %67, align 4, !tbaa !5
  %1341 = mul nsw i32 %1339, %1340
  store i32 %1341, ptr %72, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %73) #8
  %1342 = load i32, ptr %72, align 4, !tbaa !5
  %1343 = add nsw i32 %1342, 1
  %1344 = sdiv i32 %1343, 2
  %1345 = sitofp i32 %1344 to double
  store double %1345, ptr %73, align 8, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 8, ptr %74) #8
  %1346 = load double, ptr %73, align 8, !tbaa !15
  %1347 = fdiv double 1.000000e+00, %1346
  store double %1347, ptr %74, align 8, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 8, ptr %75) #8
  %1348 = load i32, ptr %72, align 4, !tbaa !5
  %1349 = sext i32 %1348 to i64
  %1350 = call i64 @libxsmm_coprime2(i64 noundef %1349)
  store i64 %1350, ptr %75, align 8, !tbaa !13
  store i32 0, ptr %68, align 4, !tbaa !5
  br label %1351

1351:                                             ; preds = %1386, %1338
  %1352 = load i32, ptr %68, align 4, !tbaa !5
  %1353 = load i32, ptr %66, align 4, !tbaa !5
  %1354 = icmp slt i32 %1352, %1353
  br i1 %1354, label %1355, label %1389

1355:                                             ; preds = %1351
  store i32 0, ptr %69, align 4, !tbaa !5
  br label %1356

1356:                                             ; preds = %1382, %1355
  %1357 = load i32, ptr %69, align 4, !tbaa !5
  %1358 = load i32, ptr %67, align 4, !tbaa !5
  %1359 = icmp slt i32 %1357, %1358
  br i1 %1359, label %1360, label %1385

1360:                                             ; preds = %1356
  call void @llvm.lifetime.start.p0(i64 4, ptr %76) #8
  %1361 = load i32, ptr %68, align 4, !tbaa !5
  %1362 = load i32, ptr %67, align 4, !tbaa !5
  %1363 = mul nsw i32 %1361, %1362
  %1364 = load i32, ptr %69, align 4, !tbaa !5
  %1365 = add nsw i32 %1363, %1364
  store i32 %1365, ptr %76, align 4, !tbaa !5
  %1366 = load double, ptr %74, align 8, !tbaa !15
  %1367 = load i64, ptr %75, align 8, !tbaa !13
  %1368 = load i32, ptr %76, align 4, !tbaa !5
  %1369 = sext i32 %1368 to i64
  %1370 = mul i64 %1367, %1369
  %1371 = load i32, ptr %72, align 4, !tbaa !5
  %1372 = sext i32 %1371 to i64
  %1373 = urem i64 %1370, %1372
  %1374 = uitofp i64 %1373 to double
  %1375 = load double, ptr %73, align 8, !tbaa !15
  %1376 = fsub double %1374, %1375
  %1377 = fmul double %1366, %1376
  %1378 = getelementptr inbounds [4096 x double], ptr %46, i64 0, i64 0
  %1379 = load i32, ptr %76, align 4, !tbaa !5
  %1380 = sext i32 %1379 to i64
  %1381 = getelementptr inbounds double, ptr %1378, i64 %1380
  store double %1377, ptr %1381, align 8, !tbaa !15
  call void @llvm.lifetime.end.p0(i64 4, ptr %76) #8
  br label %1382

1382:                                             ; preds = %1360
  %1383 = load i32, ptr %69, align 4, !tbaa !5
  %1384 = add nsw i32 %1383, 1
  store i32 %1384, ptr %69, align 4, !tbaa !5
  br label %1356, !llvm.loop !40

1385:                                             ; preds = %1356
  br label %1386

1386:                                             ; preds = %1385
  %1387 = load i32, ptr %68, align 4, !tbaa !5
  %1388 = add nsw i32 %1387, 1
  store i32 %1388, ptr %68, align 4, !tbaa !5
  br label %1351, !llvm.loop !41

1389:                                             ; preds = %1351
  call void @llvm.lifetime.end.p0(i64 8, ptr %75) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %74) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %73) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %72) #8
  br label %1390

1390:                                             ; preds = %1389, %1337
  call void @llvm.lifetime.end.p0(i64 4, ptr %69) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %68) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %67) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %66) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %65) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %64) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %63) #8
  br label %1391

1391:                                             ; preds = %1390
  br label %1392

1392:                                             ; preds = %1391
  br label %1393

1393:                                             ; preds = %1392
  call void @llvm.lifetime.start.p0(i64 8, ptr %77) #8
  store double 0.000000e+00, ptr %77, align 8, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 8, ptr %78) #8
  %1394 = load double, ptr %77, align 8, !tbaa !15
  %1395 = call double @llvm.fmuladd.f64(double %1394, double 1.000000e+00, double 1.000000e+00)
  store double %1395, ptr %78, align 8, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %79) #8
  %1396 = load i32, ptr %15, align 4, !tbaa !5
  store i32 %1396, ptr %79, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %80) #8
  %1397 = load i32, ptr %15, align 4, !tbaa !5
  store i32 %1397, ptr %80, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %81) #8
  %1398 = load i32, ptr %15, align 4, !tbaa !5
  store i32 %1398, ptr %81, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %82) #8
  store i32 0, ptr %82, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %83) #8
  store i32 0, ptr %83, align 4, !tbaa !5
  %1399 = load double, ptr %77, align 8, !tbaa !15
  %1400 = fcmp une double 0.000000e+00, %1399
  br i1 %1400, label %1401, label %1458

1401:                                             ; preds = %1393
  store i32 0, ptr %82, align 4, !tbaa !5
  br label %1402

1402:                                             ; preds = %1454, %1401
  %1403 = load i32, ptr %82, align 4, !tbaa !5
  %1404 = load i32, ptr %80, align 4, !tbaa !5
  %1405 = icmp slt i32 %1403, %1404
  br i1 %1405, label %1406, label %1457

1406:                                             ; preds = %1402
  store i32 0, ptr %83, align 4, !tbaa !5
  br label %1407

1407:                                             ; preds = %1431, %1406
  %1408 = load i32, ptr %83, align 4, !tbaa !5
  %1409 = load i32, ptr %79, align 4, !tbaa !5
  %1410 = icmp slt i32 %1408, %1409
  br i1 %1410, label %1411, label %1434

1411:                                             ; preds = %1407
  call void @llvm.lifetime.start.p0(i64 4, ptr %84) #8
  %1412 = load i32, ptr %82, align 4, !tbaa !5
  %1413 = load i32, ptr %81, align 4, !tbaa !5
  %1414 = mul nsw i32 %1412, %1413
  %1415 = load i32, ptr %83, align 4, !tbaa !5
  %1416 = add nsw i32 %1414, %1415
  store i32 %1416, ptr %84, align 4, !tbaa !5
  %1417 = load double, ptr %78, align 8, !tbaa !15
  %1418 = load i32, ptr %82, align 4, !tbaa !5
  %1419 = sitofp i32 %1418 to double
  %1420 = load i32, ptr %79, align 4, !tbaa !5
  %1421 = sitofp i32 %1420 to double
  %1422 = call double @llvm.fmuladd.f64(double %1419, double %1421, double 1.000000e+00)
  %1423 = load i32, ptr %83, align 4, !tbaa !5
  %1424 = sitofp i32 %1423 to double
  %1425 = fadd double %1422, %1424
  %1426 = fmul double %1417, %1425
  %1427 = getelementptr inbounds [4096 x double], ptr %47, i64 0, i64 0
  %1428 = load i32, ptr %84, align 4, !tbaa !5
  %1429 = sext i32 %1428 to i64
  %1430 = getelementptr inbounds double, ptr %1427, i64 %1429
  store double %1426, ptr %1430, align 8, !tbaa !15
  call void @llvm.lifetime.end.p0(i64 4, ptr %84) #8
  br label %1431

1431:                                             ; preds = %1411
  %1432 = load i32, ptr %83, align 4, !tbaa !5
  %1433 = add nsw i32 %1432, 1
  store i32 %1433, ptr %83, align 4, !tbaa !5
  br label %1407, !llvm.loop !42

1434:                                             ; preds = %1407
  br label %1435

1435:                                             ; preds = %1450, %1434
  %1436 = load i32, ptr %83, align 4, !tbaa !5
  %1437 = load i32, ptr %81, align 4, !tbaa !5
  %1438 = icmp slt i32 %1436, %1437
  br i1 %1438, label %1439, label %1453

1439:                                             ; preds = %1435
  call void @llvm.lifetime.start.p0(i64 4, ptr %85) #8
  %1440 = load i32, ptr %82, align 4, !tbaa !5
  %1441 = load i32, ptr %81, align 4, !tbaa !5
  %1442 = mul nsw i32 %1440, %1441
  %1443 = load i32, ptr %83, align 4, !tbaa !5
  %1444 = add nsw i32 %1442, %1443
  store i32 %1444, ptr %85, align 4, !tbaa !5
  %1445 = load double, ptr %77, align 8, !tbaa !15
  %1446 = getelementptr inbounds [4096 x double], ptr %47, i64 0, i64 0
  %1447 = load i32, ptr %85, align 4, !tbaa !5
  %1448 = sext i32 %1447 to i64
  %1449 = getelementptr inbounds double, ptr %1446, i64 %1448
  store double %1445, ptr %1449, align 8, !tbaa !15
  call void @llvm.lifetime.end.p0(i64 4, ptr %85) #8
  br label %1450

1450:                                             ; preds = %1439
  %1451 = load i32, ptr %83, align 4, !tbaa !5
  %1452 = add nsw i32 %1451, 1
  store i32 %1452, ptr %83, align 4, !tbaa !5
  br label %1435, !llvm.loop !43

1453:                                             ; preds = %1435
  br label %1454

1454:                                             ; preds = %1453
  %1455 = load i32, ptr %82, align 4, !tbaa !5
  %1456 = add nsw i32 %1455, 1
  store i32 %1456, ptr %82, align 4, !tbaa !5
  br label %1402, !llvm.loop !44

1457:                                             ; preds = %1402
  br label %1510

1458:                                             ; preds = %1393
  call void @llvm.lifetime.start.p0(i64 4, ptr %86) #8
  %1459 = load i32, ptr %80, align 4, !tbaa !5
  %1460 = load i32, ptr %81, align 4, !tbaa !5
  %1461 = mul nsw i32 %1459, %1460
  store i32 %1461, ptr %86, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %87) #8
  %1462 = load i32, ptr %86, align 4, !tbaa !5
  %1463 = add nsw i32 %1462, 1
  %1464 = sdiv i32 %1463, 2
  %1465 = sitofp i32 %1464 to double
  store double %1465, ptr %87, align 8, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 8, ptr %88) #8
  %1466 = load double, ptr %87, align 8, !tbaa !15
  %1467 = fdiv double 1.000000e+00, %1466
  store double %1467, ptr %88, align 8, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 8, ptr %89) #8
  %1468 = load i32, ptr %86, align 4, !tbaa !5
  %1469 = sext i32 %1468 to i64
  %1470 = call i64 @libxsmm_coprime2(i64 noundef %1469)
  store i64 %1470, ptr %89, align 8, !tbaa !13
  store i32 0, ptr %82, align 4, !tbaa !5
  br label %1471

1471:                                             ; preds = %1506, %1458
  %1472 = load i32, ptr %82, align 4, !tbaa !5
  %1473 = load i32, ptr %80, align 4, !tbaa !5
  %1474 = icmp slt i32 %1472, %1473
  br i1 %1474, label %1475, label %1509

1475:                                             ; preds = %1471
  store i32 0, ptr %83, align 4, !tbaa !5
  br label %1476

1476:                                             ; preds = %1502, %1475
  %1477 = load i32, ptr %83, align 4, !tbaa !5
  %1478 = load i32, ptr %81, align 4, !tbaa !5
  %1479 = icmp slt i32 %1477, %1478
  br i1 %1479, label %1480, label %1505

1480:                                             ; preds = %1476
  call void @llvm.lifetime.start.p0(i64 4, ptr %90) #8
  %1481 = load i32, ptr %82, align 4, !tbaa !5
  %1482 = load i32, ptr %81, align 4, !tbaa !5
  %1483 = mul nsw i32 %1481, %1482
  %1484 = load i32, ptr %83, align 4, !tbaa !5
  %1485 = add nsw i32 %1483, %1484
  store i32 %1485, ptr %90, align 4, !tbaa !5
  %1486 = load double, ptr %88, align 8, !tbaa !15
  %1487 = load i64, ptr %89, align 8, !tbaa !13
  %1488 = load i32, ptr %90, align 4, !tbaa !5
  %1489 = sext i32 %1488 to i64
  %1490 = mul i64 %1487, %1489
  %1491 = load i32, ptr %86, align 4, !tbaa !5
  %1492 = sext i32 %1491 to i64
  %1493 = urem i64 %1490, %1492
  %1494 = uitofp i64 %1493 to double
  %1495 = load double, ptr %87, align 8, !tbaa !15
  %1496 = fsub double %1494, %1495
  %1497 = fmul double %1486, %1496
  %1498 = getelementptr inbounds [4096 x double], ptr %47, i64 0, i64 0
  %1499 = load i32, ptr %90, align 4, !tbaa !5
  %1500 = sext i32 %1499 to i64
  %1501 = getelementptr inbounds double, ptr %1498, i64 %1500
  store double %1497, ptr %1501, align 8, !tbaa !15
  call void @llvm.lifetime.end.p0(i64 4, ptr %90) #8
  br label %1502

1502:                                             ; preds = %1480
  %1503 = load i32, ptr %83, align 4, !tbaa !5
  %1504 = add nsw i32 %1503, 1
  store i32 %1504, ptr %83, align 4, !tbaa !5
  br label %1476, !llvm.loop !45

1505:                                             ; preds = %1476
  br label %1506

1506:                                             ; preds = %1505
  %1507 = load i32, ptr %82, align 4, !tbaa !5
  %1508 = add nsw i32 %1507, 1
  store i32 %1508, ptr %82, align 4, !tbaa !5
  br label %1471, !llvm.loop !46

1509:                                             ; preds = %1471
  call void @llvm.lifetime.end.p0(i64 8, ptr %89) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %88) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %87) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %86) #8
  br label %1510

1510:                                             ; preds = %1509, %1457
  call void @llvm.lifetime.end.p0(i64 4, ptr %83) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %82) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %81) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %80) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %79) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %78) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %77) #8
  br label %1511

1511:                                             ; preds = %1510
  br label %1512

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

1513:                                             ; preds = %1684, %1512
  %1514 = load i32, ptr %28, align 4, !tbaa !5
  %1515 = load i32, ptr %10, align 4, !tbaa !5
  %1516 = icmp slt i32 %1514, %1515
  br i1 %1516, label %1517, label %1687

1517:                                             ; preds = %1513
  call void @llvm.lifetime.start.p0(i64 4, ptr %91) #8
  %1518 = load i64, ptr %24, align 8, !tbaa !13
  %1519 = load i32, ptr %28, align 4, !tbaa !5
  %1520 = sext i32 %1519 to i64
  %1521 = mul i64 %1518, %1520
  %1522 = load i32, ptr %10, align 4, !tbaa !5
  %1523 = sext i32 %1522 to i64
  %1524 = urem i64 %1521, %1523
  %1525 = trunc i64 %1524 to i32
  store i32 %1525, ptr %91, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 192, ptr %92) #8
  call void @llvm.lifetime.start.p0(i64 40, ptr %93) #8
  %1526 = load ptr, ptr %23, align 8, !tbaa !9
  %1527 = load i32, ptr %91, align 4, !tbaa !5
  %1528 = sext i32 %1527 to i64
  %1529 = getelementptr inbounds %struct.triplet, ptr %1526, i64 %1528
  %1530 = getelementptr inbounds %struct.triplet, ptr %1529, i32 0, i32 0
  %1531 = load i32, ptr %1530, align 4, !tbaa !18
  %1532 = load ptr, ptr %23, align 8, !tbaa !9
  %1533 = load i32, ptr %91, align 4, !tbaa !5
  %1534 = sext i32 %1533 to i64
  %1535 = getelementptr inbounds %struct.triplet, ptr %1532, i64 %1534
  %1536 = getelementptr inbounds %struct.triplet, ptr %1535, i32 0, i32 1
  %1537 = load i32, ptr %1536, align 4, !tbaa !20
  %1538 = load ptr, ptr %23, align 8, !tbaa !9
  %1539 = load i32, ptr %91, align 4, !tbaa !5
  %1540 = sext i32 %1539 to i64
  %1541 = getelementptr inbounds %struct.triplet, ptr %1538, i64 %1540
  %1542 = getelementptr inbounds %struct.triplet, ptr %1541, i32 0, i32 2
  %1543 = load i32, ptr %1542, align 4, !tbaa !21
  %1544 = load ptr, ptr %23, align 8, !tbaa !9
  %1545 = load i32, ptr %91, align 4, !tbaa !5
  %1546 = sext i32 %1545 to i64
  %1547 = getelementptr inbounds %struct.triplet, ptr %1544, i64 %1546
  %1548 = getelementptr inbounds %struct.triplet, ptr %1547, i32 0, i32 0
  %1549 = load i32, ptr %1548, align 4, !tbaa !18
  %1550 = load ptr, ptr %23, align 8, !tbaa !9
  %1551 = load i32, ptr %91, align 4, !tbaa !5
  %1552 = sext i32 %1551 to i64
  %1553 = getelementptr inbounds %struct.triplet, ptr %1550, i64 %1552
  %1554 = getelementptr inbounds %struct.triplet, ptr %1553, i32 0, i32 2
  %1555 = load i32, ptr %1554, align 4, !tbaa !21
  %1556 = load ptr, ptr %23, align 8, !tbaa !9
  %1557 = load i32, ptr %91, align 4, !tbaa !5
  %1558 = sext i32 %1557 to i64
  %1559 = getelementptr inbounds %struct.triplet, ptr %1556, i64 %1558
  %1560 = getelementptr inbounds %struct.triplet, ptr %1559, i32 0, i32 0
  %1561 = load i32, ptr %1560, align 4, !tbaa !18
  call void @libxsmm_create_gemm_shape(ptr dead_on_unwind writable sret(%struct.libxsmm_gemm_shape) align 4 %93, i32 noundef %1531, i32 noundef %1537, i32 noundef %1543, i32 noundef %1549, i32 noundef %1555, i32 noundef %1561, i32 noundef 0, i32 noundef 0, i32 noundef 0, i32 noundef 0)
  call void @llvm.lifetime.start.p0(i64 8, ptr %94) #8
  %1562 = call ptr @libxsmm_dispatch_gemm(ptr noundef byval(%struct.libxsmm_gemm_shape) align 8 %93, i32 noundef 0, i32 noundef -1)
  store ptr %1562, ptr %94, align 8, !tbaa !9
  %1563 = load ptr, ptr %94, align 8, !tbaa !9
  %1564 = icmp ne ptr null, %1563
  br i1 %1564, label %1565, label %1654

1565:                                             ; preds = %1517
  call void @llvm.lifetime.start.p0(i64 176, ptr %95) #8
  %1566 = getelementptr inbounds [4096 x double], ptr %45, i64 0, i64 0
  %1567 = getelementptr inbounds %struct.libxsmm_gemm_param, ptr %95, i32 0, i32 1
  %1568 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %1567, i32 0, i32 0
  store ptr %1566, ptr %1568, align 8, !tbaa !47
  %1569 = getelementptr inbounds [4096 x double], ptr %46, i64 0, i64 0
  %1570 = getelementptr inbounds %struct.libxsmm_gemm_param, ptr %95, i32 0, i32 2
  %1571 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %1570, i32 0, i32 0
  store ptr %1569, ptr %1571, align 8, !tbaa !51
  %1572 = getelementptr inbounds [4096 x double], ptr %47, i64 0, i64 0
  %1573 = getelementptr inbounds %struct.libxsmm_gemm_param, ptr %95, i32 0, i32 3
  %1574 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %1573, i32 0, i32 0
  store ptr %1572, ptr %1574, align 8, !tbaa !52
  %1575 = getelementptr inbounds [4096 x double], ptr %45, i64 0, i64 0
  %1576 = load ptr, ptr %23, align 8, !tbaa !9
  %1577 = load i32, ptr %91, align 4, !tbaa !5
  %1578 = sext i32 %1577 to i64
  %1579 = getelementptr inbounds %struct.triplet, ptr %1576, i64 %1578
  %1580 = getelementptr inbounds %struct.triplet, ptr %1579, i32 0, i32 0
  %1581 = load i32, ptr %1580, align 4, !tbaa !18
  %1582 = load ptr, ptr %23, align 8, !tbaa !9
  %1583 = load i32, ptr %91, align 4, !tbaa !5
  %1584 = sext i32 %1583 to i64
  %1585 = getelementptr inbounds %struct.triplet, ptr %1582, i64 %1584
  %1586 = getelementptr inbounds %struct.triplet, ptr %1585, i32 0, i32 2
  %1587 = load i32, ptr %1586, align 4, !tbaa !21
  %1588 = mul nsw i32 %1581, %1587
  %1589 = sext i32 %1588 to i64
  %1590 = getelementptr inbounds double, ptr %1575, i64 %1589
  %1591 = getelementptr inbounds %struct.libxsmm_gemm_param, ptr %95, i32 0, i32 1
  %1592 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %1591, i32 0, i32 5
  store ptr %1590, ptr %1592, align 8, !tbaa !53
  %1593 = getelementptr inbounds [4096 x double], ptr %46, i64 0, i64 0
  %1594 = load ptr, ptr %23, align 8, !tbaa !9
  %1595 = load i32, ptr %91, align 4, !tbaa !5
  %1596 = sext i32 %1595 to i64
  %1597 = getelementptr inbounds %struct.triplet, ptr %1594, i64 %1596
  %1598 = getelementptr inbounds %struct.triplet, ptr %1597, i32 0, i32 2
  %1599 = load i32, ptr %1598, align 4, !tbaa !21
  %1600 = load ptr, ptr %23, align 8, !tbaa !9
  %1601 = load i32, ptr %91, align 4, !tbaa !5
  %1602 = sext i32 %1601 to i64
  %1603 = getelementptr inbounds %struct.triplet, ptr %1600, i64 %1602
  %1604 = getelementptr inbounds %struct.triplet, ptr %1603, i32 0, i32 1
  %1605 = load i32, ptr %1604, align 4, !tbaa !20
  %1606 = mul nsw i32 %1599, %1605
  %1607 = sext i32 %1606 to i64
  %1608 = getelementptr inbounds double, ptr %1593, i64 %1607
  %1609 = getelementptr inbounds %struct.libxsmm_gemm_param, ptr %95, i32 0, i32 2
  %1610 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %1609, i32 0, i32 5
  store ptr %1608, ptr %1610, align 8, !tbaa !54
  %1611 = getelementptr inbounds [4096 x double], ptr %47, i64 0, i64 0
  %1612 = load ptr, ptr %23, align 8, !tbaa !9
  %1613 = load i32, ptr %91, align 4, !tbaa !5
  %1614 = sext i32 %1613 to i64
  %1615 = getelementptr inbounds %struct.triplet, ptr %1612, i64 %1614
  %1616 = getelementptr inbounds %struct.triplet, ptr %1615, i32 0, i32 0
  %1617 = load i32, ptr %1616, align 4, !tbaa !18
  %1618 = load ptr, ptr %23, align 8, !tbaa !9
  %1619 = load i32, ptr %91, align 4, !tbaa !5
  %1620 = sext i32 %1619 to i64
  %1621 = getelementptr inbounds %struct.triplet, ptr %1618, i64 %1620
  %1622 = getelementptr inbounds %struct.triplet, ptr %1621, i32 0, i32 1
  %1623 = load i32, ptr %1622, align 4, !tbaa !20
  %1624 = mul nsw i32 %1617, %1623
  %1625 = sext i32 %1624 to i64
  %1626 = getelementptr inbounds double, ptr %1611, i64 %1625
  %1627 = getelementptr inbounds %struct.libxsmm_gemm_param, ptr %95, i32 0, i32 3
  %1628 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %1627, i32 0, i32 5
  store ptr %1626, ptr %1628, align 8, !tbaa !55
  %1629 = load ptr, ptr %94, align 8, !tbaa !9
  call void %1629(ptr noundef %95)
  %1630 = load ptr, ptr %23, align 8, !tbaa !9
  %1631 = load i32, ptr %91, align 4, !tbaa !5
  %1632 = sext i32 %1631 to i64
  %1633 = getelementptr inbounds %struct.triplet, ptr %1630, i64 %1632
  %1634 = getelementptr inbounds %struct.triplet, ptr %1633, i32 0, i32 0
  %1635 = load i32, ptr %1634, align 4, !tbaa !18
  %1636 = load ptr, ptr %23, align 8, !tbaa !9
  %1637 = load i32, ptr %91, align 4, !tbaa !5
  %1638 = sext i32 %1637 to i64
  %1639 = getelementptr inbounds %struct.triplet, ptr %1636, i64 %1638
  %1640 = getelementptr inbounds %struct.triplet, ptr %1639, i32 0, i32 1
  %1641 = load i32, ptr %1640, align 4, !tbaa !20
  %1642 = getelementptr inbounds [4096 x double], ptr %47, i64 0, i64 0
  %1643 = load ptr, ptr %23, align 8, !tbaa !9
  %1644 = load i32, ptr %91, align 4, !tbaa !5
  %1645 = sext i32 %1644 to i64
  %1646 = getelementptr inbounds %struct.triplet, ptr %1643, i64 %1645
  %1647 = getelementptr inbounds %struct.triplet, ptr %1646, i32 0, i32 0
  %1648 = load ptr, ptr %23, align 8, !tbaa !9
  %1649 = load i32, ptr %91, align 4, !tbaa !5
  %1650 = sext i32 %1649 to i64
  %1651 = getelementptr inbounds %struct.triplet, ptr %1648, i64 %1650
  %1652 = getelementptr inbounds %struct.triplet, ptr %1651, i32 0, i32 0
  %1653 = call i32 @libxsmm_matdiff(ptr noundef %92, i32 noundef 0, i32 noundef %1635, i32 noundef %1641, ptr noundef null, ptr noundef %1642, ptr noundef %1647, ptr noundef %1652)
  store i32 %1653, ptr %27, align 4, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 176, ptr %95) #8
  br label %1655

1654:                                             ; preds = %1517
  store i32 1, ptr %27, align 4, !tbaa !5
  br label %1655

1655:                                             ; preds = %1654, %1565
  %1656 = load i32, ptr %27, align 4, !tbaa !5
  %1657 = icmp eq i32 0, %1656
  br i1 %1657, label %1658, label %1659

1658:                                             ; preds = %1655
  call void @libxsmm_matdiff_reduce(ptr noundef %48, ptr noundef %92)
  br label %1683

1659:                                             ; preds = %1655
  %1660 = load ptr, ptr %23, align 8, !tbaa !9
  %1661 = load i32, ptr %91, align 4, !tbaa !5
  %1662 = sext i32 %1661 to i64
  %1663 = getelementptr inbounds %struct.triplet, ptr %1660, i64 %1662
  %1664 = getelementptr inbounds %struct.triplet, ptr %1663, i32 0, i32 0
  %1665 = load i32, ptr %1664, align 4, !tbaa !18
  %1666 = load ptr, ptr %23, align 8, !tbaa !9
  %1667 = load i32, ptr %91, align 4, !tbaa !5
  %1668 = sext i32 %1667 to i64
  %1669 = getelementptr inbounds %struct.triplet, ptr %1666, i64 %1668
  %1670 = getelementptr inbounds %struct.triplet, ptr %1669, i32 0, i32 1
  %1671 = load i32, ptr %1670, align 4, !tbaa !20
  %1672 = load ptr, ptr %23, align 8, !tbaa !9
  %1673 = load i32, ptr %91, align 4, !tbaa !5
  %1674 = sext i32 %1673 to i64
  %1675 = getelementptr inbounds %struct.triplet, ptr %1672, i64 %1674
  %1676 = getelementptr inbounds %struct.triplet, ptr %1675, i32 0, i32 2
  %1677 = load i32, ptr %1676, align 4, !tbaa !21
  %1678 = load ptr, ptr %94, align 8, !tbaa !9
  %1679 = ptrtoint ptr %1678 to i64
  %1680 = call i32 (ptr, ...) @printf(ptr noundef @.str.4, i32 noundef %1665, i32 noundef %1671, i32 noundef %1677, i64 noundef %1679)
  %1681 = load i32, ptr %10, align 4, !tbaa !5
  %1682 = add nsw i32 %1681, 1
  store i32 %1682, ptr %28, align 4, !tbaa !5
  br label %1683

1683:                                             ; preds = %1659, %1658
  call void @llvm.lifetime.end.p0(i64 8, ptr %94) #8
  call void @llvm.lifetime.end.p0(i64 40, ptr %93) #8
  call void @llvm.lifetime.end.p0(i64 192, ptr %92) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %91) #8
  br label %1684

1684:                                             ; preds = %1683
  %1685 = load i32, ptr %28, align 4, !tbaa !5
  %1686 = add nsw i32 %1685, 1
  store i32 %1686, ptr %28, align 4, !tbaa !5
  br label %1513, !llvm.loop !56

1687:                                             ; preds = %1513
  %1688 = load i32, ptr %28, align 4, !tbaa !5
  %1689 = load i32, ptr %10, align 4, !tbaa !5
  %1690 = icmp sle i32 %1688, %1689
  br i1 %1690, label %1691, label %1695

1691:                                             ; preds = %1687
  %1692 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %48, i32 0, i32 15
  %1693 = load double, ptr %1692, align 8, !tbaa !57
  %1694 = call i32 (ptr, ...) @printf(ptr noundef @.str.5, double noundef %1693)
  br label %1697

1695:                                             ; preds = %1687
  %1696 = call i32 (ptr, ...) @printf(ptr noundef @.str.6)
  br label %1697

1697:                                             ; preds = %1695, %1691
  call void @llvm.lifetime.end.p0(i64 192, ptr %48) #8
  call void @llvm.lifetime.end.p0(i64 32768, ptr %47) #8
  call void @llvm.lifetime.end.p0(i64 32768, ptr %46) #8
  call void @llvm.lifetime.end.p0(i64 32768, ptr %45) #8
  %1698 = load ptr, ptr %23, align 8, !tbaa !9
  call void @free(ptr noundef %1698) #8
  br label %1700

1699:                                             ; preds = %713
  store i32 1, ptr %27, align 4, !tbaa !5
  br label %1700

1700:                                             ; preds = %1699, %1697
  %1701 = load i64, ptr %19, align 8, !tbaa !11
  %1702 = load i32, ptr %10, align 4, !tbaa !5
  %1703 = sext i32 %1702 to i64
  %1704 = load i32, ptr %13, align 4, !tbaa !5
  %1705 = sext i32 %1704 to i64
  %1706 = mul i64 %1703, %1705
  %1707 = add i64 %1701, %1706
  %1708 = sub i64 %1707, 1
  %1709 = load i32, ptr %10, align 4, !tbaa !5
  %1710 = sext i32 %1709 to i64
  %1711 = load i32, ptr %13, align 4, !tbaa !5
  %1712 = sext i32 %1711 to i64
  %1713 = mul i64 %1710, %1712
  %1714 = udiv i64 %1708, %1713
  store i64 %1714, ptr %19, align 8, !tbaa !11
  %1715 = load i64, ptr %21, align 8, !tbaa !11
  %1716 = load i32, ptr %10, align 4, !tbaa !5
  %1717 = sext i32 %1716 to i64
  %1718 = load i32, ptr %13, align 4, !tbaa !5
  %1719 = sext i32 %1718 to i64
  %1720 = mul i64 %1717, %1719
  %1721 = add i64 %1715, %1720
  %1722 = sub i64 %1721, 1
  %1723 = load i32, ptr %10, align 4, !tbaa !5
  %1724 = sext i32 %1723 to i64
  %1725 = load i32, ptr %13, align 4, !tbaa !5
  %1726 = sext i32 %1725 to i64
  %1727 = mul i64 %1724, %1726
  %1728 = udiv i64 %1722, %1727
  store i64 %1728, ptr %21, align 8, !tbaa !11
  %1729 = load i64, ptr %22, align 8, !tbaa !11
  %1730 = load i32, ptr %10, align 4, !tbaa !5
  %1731 = sext i32 %1730 to i64
  %1732 = load i32, ptr %13, align 4, !tbaa !5
  %1733 = sext i32 %1732 to i64
  %1734 = mul i64 %1731, %1733
  %1735 = add i64 %1729, %1734
  %1736 = sub i64 %1735, 1
  %1737 = load i32, ptr %10, align 4, !tbaa !5
  %1738 = sext i32 %1737 to i64
  %1739 = load i32, ptr %13, align 4, !tbaa !5
  %1740 = sext i32 %1739 to i64
  %1741 = mul i64 %1738, %1740
  %1742 = udiv i64 %1736, %1741
  store i64 %1742, ptr %22, align 8, !tbaa !11
  %1743 = load i64, ptr %20, align 8, !tbaa !11
  %1744 = load i32, ptr %10, align 4, !tbaa !5
  %1745 = sext i32 %1744 to i64
  %1746 = sub i64 %1745, 1
  %1747 = add i64 %1743, %1746
  %1748 = load i32, ptr %10, align 4, !tbaa !5
  %1749 = sext i32 %1748 to i64
  %1750 = udiv i64 %1747, %1749
  store i64 %1750, ptr %20, align 8, !tbaa !11
  %1751 = load i64, ptr %19, align 8, !tbaa !11
  %1752 = icmp ult i64 0, %1751
  br i1 %1752, label %1753, label %1817

1753:                                             ; preds = %1700
  %1754 = load i64, ptr %21, align 8, !tbaa !11
  %1755 = icmp ult i64 0, %1754
  br i1 %1755, label %1756, label %1817

1756:                                             ; preds = %1753
  %1757 = load i64, ptr %22, align 8, !tbaa !11
  %1758 = icmp ult i64 0, %1757
  br i1 %1758, label %1759, label %1817

1759:                                             ; preds = %1756
  %1760 = load i64, ptr %20, align 8, !tbaa !11
  %1761 = icmp ult i64 0, %1760
  br i1 %1761, label %1762, label %1817

1762:                                             ; preds = %1759
  call void @llvm.lifetime.start.p0(i64 8, ptr %96) #8
  %1763 = load i64, ptr %19, align 8, !tbaa !11
  %1764 = call double @libxsmm_timer_duration(i64 noundef 0, i64 noundef %1763)
  %1765 = fmul double 1.000000e+09, %1764
  store double %1765, ptr %96, align 8, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 8, ptr %97) #8
  %1766 = load i64, ptr %20, align 8, !tbaa !11
  %1767 = call double @libxsmm_timer_duration(i64 noundef 0, i64 noundef %1766)
  %1768 = fmul double 1.000000e+09, %1767
  store double %1768, ptr %97, align 8, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 8, ptr %98) #8
  %1769 = load i64, ptr %21, align 8, !tbaa !11
  %1770 = call double @libxsmm_timer_duration(i64 noundef 0, i64 noundef %1769)
  %1771 = fmul double 1.000000e+09, %1770
  store double %1771, ptr %98, align 8, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 8, ptr %99) #8
  %1772 = load i64, ptr %22, align 8, !tbaa !11
  %1773 = call double @libxsmm_timer_duration(i64 noundef 0, i64 noundef %1772)
  %1774 = fmul double 1.000000e+09, %1773
  store double %1774, ptr %99, align 8, !tbaa !15
  %1775 = load double, ptr %96, align 8, !tbaa !15
  %1776 = load double, ptr %96, align 8, !tbaa !15
  %1777 = fdiv double 1.000000e+03, %1776
  %1778 = load i64, ptr %19, align 8, !tbaa !11
  %1779 = call i64 @libxsmm_timer_ncycles(i64 noundef 0, i64 noundef %1778)
  %1780 = call i32 (ptr, ...) @printf(ptr noundef @.str.7, double noundef %1775, double noundef %1777, i64 noundef %1779)
  %1781 = load double, ptr %99, align 8, !tbaa !15
  %1782 = load double, ptr %99, align 8, !tbaa !15
  %1783 = fdiv double 1.000000e+03, %1782
  %1784 = load i64, ptr %22, align 8, !tbaa !11
  %1785 = call i64 @libxsmm_timer_ncycles(i64 noundef 0, i64 noundef %1784)
  %1786 = call i32 (ptr, ...) @printf(ptr noundef @.str.8, double noundef %1781, double noundef %1783, i64 noundef %1785)
  %1787 = load double, ptr %98, align 8, !tbaa !15
  %1788 = load double, ptr %98, align 8, !tbaa !15
  %1789 = fdiv double 1.000000e+03, %1788
  %1790 = load i64, ptr %21, align 8, !tbaa !11
  %1791 = call i64 @libxsmm_timer_ncycles(i64 noundef 0, i64 noundef %1790)
  %1792 = call i32 (ptr, ...) @printf(ptr noundef @.str.9, double noundef %1787, double noundef %1789, i64 noundef %1791)
  %1793 = load double, ptr %97, align 8, !tbaa !15
  %1794 = fcmp olt double 1.000000e+06, %1793
  br i1 %1794, label %1795, label %1801

1795:                                             ; preds = %1762
  %1796 = load double, ptr %97, align 8, !tbaa !15
  %1797 = fmul double 0x3EB0C6F7A0B5ED8D, %1796
  %1798 = load double, ptr %97, align 8, !tbaa !15
  %1799 = fdiv double 1.000000e+09, %1798
  %1800 = call i32 (ptr, ...) @printf(ptr noundef @.str.10, double noundef %1797, double noundef %1799)
  br label %1816

1801:                                             ; preds = %1762
  %1802 = load double, ptr %97, align 8, !tbaa !15
  %1803 = fcmp olt double 1.000000e+03, %1802
  br i1 %1803, label %1804, label %1810

1804:                                             ; preds = %1801
  %1805 = load double, ptr %97, align 8, !tbaa !15
  %1806 = fmul double 1.000000e-03, %1805
  %1807 = load double, ptr %97, align 8, !tbaa !15
  %1808 = fdiv double 1.000000e+06, %1807
  %1809 = call i32 (ptr, ...) @printf(ptr noundef @.str.11, double noundef %1806, double noundef %1808)
  br label %1815

1810:                                             ; preds = %1801
  %1811 = load double, ptr %97, align 8, !tbaa !15
  %1812 = load double, ptr %97, align 8, !tbaa !15
  %1813 = fdiv double 1.000000e+03, %1812
  %1814 = call i32 (ptr, ...) @printf(ptr noundef @.str.12, double noundef %1811, double noundef %1813)
  br label %1815

1815:                                             ; preds = %1810, %1804
  br label %1816

1816:                                             ; preds = %1815, %1795
  call void @llvm.lifetime.end.p0(i64 8, ptr %99) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %98) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %97) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %96) #8
  br label %1817

1817:                                             ; preds = %1816, %1759, %1756, %1753, %1700
  %1818 = call i32 (ptr, ...) @printf(ptr noundef @.str.13)
  %1819 = load i32, ptr %27, align 4, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %31) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %30) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #8
  ret i32 %1819
}

; 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

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

declare i64 @libxsmm_coprime2(i64 noundef) #4

declare i32 @libxsmm_get_target_archid() #4

; Function Attrs: nounwind
declare i32 @fprintf(ptr noundef, ptr noundef, ...) #5

; Function Attrs: nounwind
declare i32 @rand() #5

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

; Function Attrs: inlinehint nounwind uwtable
declare hidden void @unique(ptr noundef, ptr noundef) #6

declare i32 @printf(ptr noundef, ...) #4

declare void @libxsmm_init() #4

declare i64 @libxsmm_timer_tick() #4

; Function Attrs: inlinehint nounwind uwtable
declare hidden i64 @libxsmm_timer_ncycles(i64 noundef, i64 noundef) #6

declare void @libxsmm_create_gemm_shape(ptr dead_on_unwind writable sret(%struct.libxsmm_gemm_shape) align 4, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef) #4

declare ptr @libxsmm_dispatch_gemm(ptr noundef byval(%struct.libxsmm_gemm_shape) align 8, i32 noundef, i32 noundef) #4

declare void @libxsmm_matdiff_clear(ptr noundef) #4

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

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

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

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

declare double @libxsmm_timer_duration(i64 noundef, i64 noundef) #4

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

!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 = !{!"long long", !7, i64 0}
!13 = !{!14, !14, i64 0}
!14 = !{!"long", !7, i64 0}
!15 = !{!16, !16, i64 0}
!16 = !{!"double", !7, i64 0}
!17 = !{!7, !7, i64 0}
!18 = !{!19, !6, i64 0}
!19 = !{!"triplet", !6, i64 0, !6, i64 4, !6, i64 8}
!20 = !{!19, !6, i64 4}
!21 = !{!19, !6, i64 8}
!22 = distinct !{!22, !23}
!23 = !{!"llvm.loop.mustprogress"}
!24 = distinct !{!24, !23}
!25 = distinct !{!25, !23}
!26 = distinct !{!26, !23}
!27 = distinct !{!27, !23}
!28 = distinct !{!28, !23}
!29 = distinct !{!29, !23}
!30 = distinct !{!30, !23}
!31 = distinct !{!31, !23}
!32 = distinct !{!32, !23}
!33 = distinct !{!33, !23}
!34 = distinct !{!34, !23}
!35 = distinct !{!35, !23}
!36 = distinct !{!36, !23}
!37 = distinct !{!37, !23}
!38 = distinct !{!38, !23}
!39 = distinct !{!39, !23}
!40 = distinct !{!40, !23}
!41 = distinct !{!41, !23}
!42 = distinct !{!42, !23}
!43 = distinct !{!43, !23}
!44 = distinct !{!44, !23}
!45 = distinct !{!45, !23}
!46 = distinct !{!46, !23}
!47 = !{!48, !10, i64 32}
!48 = !{!"libxsmm_gemm_param", !49, i64 0, !50, i64 32, !50, i64 80, !50, i64 128}
!49 = !{!"libxsmm_matrix_op_arg", !10, i64 0, !10, i64 8, !10, i64 16, !10, i64 24}
!50 = !{!"libxsmm_matrix_arg", !10, i64 0, !10, i64 8, !10, i64 16, !10, i64 24, !10, i64 32, !10, i64 40}
!51 = !{!48, !10, i64 80}
!52 = !{!48, !10, i64 128}
!53 = !{!48, !10, i64 72}
!54 = !{!48, !10, i64 120}
!55 = !{!48, !10, i64 168}
!56 = distinct !{!56, !23}
!57 = !{!58, !16, i64 120}
!58 = !{!"libxsmm_matdiff_info", !16, i64 0, !16, i64 8, !16, i64 16, !16, i64 24, !16, i64 32, !16, i64 40, !16, i64 48, !16, i64 56, !16, i64 64, !16, i64 72, !16, i64 80, !16, i64 88, !16, i64 96, !16, i64 104, !16, i64 112, !16, i64 120, !16, i64 128, !16, i64 136, !16, i64 144, !16, i64 152, !16, i64 160, !16, i64 168, !6, i64 176, !6, i64 180, !6, i64 184, !6, i64 188}


; 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_gemm_shape = type { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 }
%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 }
%struct.libxsmm_gemm_param = type { %struct.libxsmm_matrix_op_arg, %struct.libxsmm_matrix_arg, %struct.libxsmm_matrix_arg, %struct.libxsmm_matrix_arg }
%struct.libxsmm_matrix_op_arg = type { ptr, ptr, ptr, ptr }
%struct.libxsmm_matrix_arg = type { ptr, ptr, ptr, ptr, ptr, ptr }
%struct.triplet = type { i32, i32, i32 }

@stderr = external local_unnamed_addr global ptr, align 8
@.str = external hidden unnamed_addr constant [53 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [63 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [1 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [63 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [62 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [55 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [42 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [43 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [43 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [10 x i8], align 1

; 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 %struct.libxsmm_gemm_shape, align 8
  %5 = alloca %struct.libxsmm_gemm_shape, align 8
  %6 = alloca %struct.libxsmm_gemm_shape, align 8
  %7 = alloca %struct.libxsmm_gemm_shape, align 8
  %8 = alloca [4096 x double], align 16
  %9 = alloca [4096 x double], align 16
  %10 = alloca [4096 x double], align 16
  %11 = alloca %struct.libxsmm_matdiff_info, align 8
  %12 = alloca %struct.libxsmm_matdiff_info, align 8
  %13 = alloca %struct.libxsmm_gemm_shape, align 8
  %14 = alloca %struct.libxsmm_gemm_param, align 8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %3) #10
  %15 = icmp slt i32 %0, 2
  br i1 %15, label %34, label %16

16:                                               ; preds = %2
  %17 = getelementptr inbounds i8, ptr %1, i64 8
  %18 = load ptr, ptr %17, align 8, !tbaa !5
  %19 = tail call i32 @atoi(ptr nocapture noundef %18) #11
  %20 = icmp eq i32 %19, 1
  %21 = icmp sgt i32 %19, 0
  %spec.select573 = select i1 %21, i32 %19, i32 10000
  %22 = select i1 %20, i32 2, i32 %spec.select573
  store i32 %22, ptr %3, align 4, !tbaa !9
  %.not750 = icmp eq i32 %0, 2
  br i1 %.not750, label %.thread626, label %23

23:                                               ; preds = %16
  %24 = getelementptr inbounds i8, ptr %1, i64 16
  %25 = load ptr, ptr %24, align 8, !tbaa !5
  %26 = tail call i32 @atoi(ptr nocapture noundef %25) #11
  %or.cond746.not = icmp eq i32 %26, 1
  br i1 %or.cond746.not, label %.thread632, label %.thread626.thread

.thread626:                                       ; preds = %16
  %spec.select = tail call i32 @llvm.smin.i32(i32 %22, i32 4)
  br label %.thread632

.thread626.thread:                                ; preds = %23
  %27 = icmp sgt i32 %26, 0
  %spec.select575 = select i1 %27, i32 %26, i32 4
  %.not859 = icmp sgt i32 %spec.select575, %22
  %28 = getelementptr inbounds i8, ptr %1, i64 16
  %29 = load ptr, ptr %28, align 8, !tbaa !5
  %30 = tail call i32 @atoi(ptr nocapture noundef %29) #11
  %31 = icmp sgt i32 %30, 0
  %spec.select577 = select i1 %31, i32 %30, i32 4
  br i1 %.not859, label %32, label %.thread632

32:                                               ; preds = %.thread626.thread
  %spec.select875 = tail call i32 @llvm.smin.i32(i32 %spec.select577, i32 %22)
  br label %.thread632

.thread632:                                       ; preds = %32, %.thread626, %.thread626.thread, %23
  %33 = phi i32 [ 1, %23 ], [ %spec.select577, %.thread626.thread ], [ %spec.select, %.thread626 ], [ %spec.select875, %32 ]
  %switch = icmp ult i32 %0, 5
  br i1 %switch, label %.thread734, label %.thread652

34:                                               ; preds = %2
  store i32 10000, ptr %3, align 4, !tbaa !9
  br label %.thread734

.thread652:                                       ; preds = %.thread632
  %35 = getelementptr inbounds i8, ptr %1, i64 32
  %36 = load ptr, ptr %35, align 8, !tbaa !5
  %37 = tail call i32 @atoi(ptr nocapture noundef %36) #11
  %38 = icmp sgt i32 %37, 0
  br i1 %38, label %39, label %43

39:                                               ; preds = %.thread652
  %40 = getelementptr inbounds i8, ptr %1, i64 32
  %41 = load ptr, ptr %40, align 8, !tbaa !5
  %42 = tail call i32 @atoi(ptr nocapture noundef %41) #11
  br label %43

43:                                               ; preds = %39, %.thread652
  %44 = phi i32 [ 1, %.thread652 ], [ %42, %39 ]
  %.not = icmp eq i32 %0, 5
  br i1 %.not, label %.thread734, label %.critedge

.critedge:                                        ; preds = %43
  %45 = getelementptr inbounds i8, ptr %1, i64 40
  %46 = load ptr, ptr %45, align 8, !tbaa !5
  %47 = tail call i32 @atoi(ptr nocapture noundef %46) #11
  %spec.select585 = tail call i32 @llvm.smax.i32(i32 %47, i32 1)
  %.not858 = icmp eq i32 %0, 6
  br i1 %.not858, label %.thread734, label %48

48:                                               ; preds = %.critedge
  %49 = getelementptr inbounds i8, ptr %1, i64 48
  %50 = load ptr, ptr %49, align 8, !tbaa !5
  %51 = tail call i32 @atoi(ptr nocapture noundef %50) #11
  %or.cond747.not = icmp eq i32 %51, 1
  br i1 %or.cond747.not, label %53, label %.thread669

.thread669:                                       ; preds = %48
  %or.cond748 = icmp slt i32 %51, 65
  br i1 %or.cond748, label %.thread691, label %.thread867

.thread691:                                       ; preds = %.thread669
  %52 = icmp sgt i32 %51, 0
  %spec.select588 = select i1 %52, i32 %51, i32 64
  br label %53

53:                                               ; preds = %48, %.thread691
  %54 = phi i32 [ %spec.select588, %.thread691 ], [ 1, %48 ]
  %55 = icmp ult i32 %0, 8
  br i1 %55, label %.thread719, label %57

.thread867:                                       ; preds = %.thread669
  %56 = icmp ult i32 %0, 8
  br i1 %56, label %.thread734, label %57

57:                                               ; preds = %.thread867, %53
  %58 = phi i32 [ 64, %.thread867 ], [ %54, %53 ]
  %59 = getelementptr inbounds i8, ptr %1, i64 56
  %60 = load ptr, ptr %59, align 8, !tbaa !5
  %61 = tail call i32 @atoi(ptr nocapture noundef %60) #11
  %or.cond749.not = icmp eq i32 %61, 1
  br i1 %or.cond749.not, label %.thread734, label %.thread719.thread

.thread719:                                       ; preds = %53
  %spec.select877 = tail call i32 @llvm.smin.i32(i32 %54, i32 4)
  br label %.thread734

.thread719.thread:                                ; preds = %57
  %62 = icmp sgt i32 %61, 0
  %spec.select598 = select i1 %62, i32 %61, i32 4
  %.not564864 = icmp sgt i32 %spec.select598, %58
  %63 = getelementptr inbounds i8, ptr %1, i64 56
  %64 = load ptr, ptr %63, align 8, !tbaa !5
  %65 = tail call i32 @atoi(ptr nocapture noundef %64) #11
  %66 = icmp sgt i32 %65, 0
  %spec.select600 = select i1 %66, i32 %65, i32 4
  br i1 %.not564864, label %67, label %.thread734

67:                                               ; preds = %.thread719.thread
  %spec.select878 = tail call i32 @llvm.smin.i32(i32 %spec.select600, i32 %58)
  br label %.thread734

.thread734:                                       ; preds = %.thread632, %67, %.thread719, %.thread719.thread, %.thread867, %34, %57, %43, %.critedge
  %68 = phi i32 [ %44, %43 ], [ %44, %.critedge ], [ %44, %57 ], [ 1, %34 ], [ %44, %.thread867 ], [ %44, %.thread719.thread ], [ %44, %.thread719 ], [ %44, %67 ], [ 1, %.thread632 ]
  %69 = phi i32 [ %33, %43 ], [ %33, %.critedge ], [ %33, %57 ], [ 4, %34 ], [ %33, %.thread867 ], [ %33, %.thread719.thread ], [ %33, %.thread719 ], [ %33, %67 ], [ %33, %.thread632 ]
  %70 = phi i32 [ %22, %43 ], [ %22, %.critedge ], [ %22, %57 ], [ 10000, %34 ], [ %22, %.thread867 ], [ %22, %.thread719.thread ], [ %22, %.thread719 ], [ %22, %67 ], [ %22, %.thread632 ]
  %71 = phi i32 [ 1, %43 ], [ %spec.select585, %.critedge ], [ %spec.select585, %57 ], [ 1, %34 ], [ %spec.select585, %.thread867 ], [ %spec.select585, %.thread719.thread ], [ %spec.select585, %.thread719 ], [ %spec.select585, %67 ], [ 1, %.thread632 ]
  %72 = phi i32 [ 64, %43 ], [ 64, %.critedge ], [ %58, %57 ], [ 64, %34 ], [ 64, %.thread867 ], [ %58, %.thread719.thread ], [ %54, %.thread719 ], [ %58, %67 ], [ 64, %.thread632 ]
  %73 = phi i32 [ 4, %43 ], [ 4, %.critedge ], [ 1, %57 ], [ 4, %34 ], [ 4, %.thread867 ], [ %spec.select600, %.thread719.thread ], [ %spec.select877, %.thread719 ], [ %spec.select878, %67 ], [ 4, %.thread632 ]
  %74 = sub nsw i32 %72, %73
  %75 = add nsw i32 %74, 1
  %76 = zext nneg i32 %70 to i64
  %77 = mul nuw nsw i64 %76, 12
  %78 = tail call noalias ptr @malloc(i64 noundef %77) #12
  %79 = sext i32 %70 to i64
  %80 = tail call i64 @libxsmm_coprime2(i64 noundef %79) #10
  %81 = tail call i32 @libxsmm_get_target_archid() #10
  %82 = icmp slt i32 %81, 1002
  br i1 %82, label %83, label %86

83:                                               ; preds = %.thread734
  %84 = load ptr, ptr @stderr, align 8, !tbaa !5
  %85 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %84, ptr noundef nonnull @.str) #13
  br label %86

86:                                               ; preds = %83, %.thread734
  %.not565 = icmp eq ptr %78, null
  br i1 %.not565, label %349, label %.lr.ph

.lr.ph:                                           ; preds = %86
  %87 = icmp sgt i32 %74, 0
  %.not569 = icmp eq i32 %71, 1
  %wide.trip.count = zext nneg i32 %70 to i64
  br label %88

88:                                               ; preds = %.lr.ph, %120
  %indvars.iv = phi i64 [ 0, %.lr.ph ], [ %indvars.iv.next, %120 ]
  %89 = tail call i32 @rand() #10
  %90 = tail call i32 @rand() #10
  %91 = tail call i32 @rand() #10
  br i1 %87, label %95, label %92

92:                                               ; preds = %88
  %93 = getelementptr inbounds %struct.triplet, ptr %78, i64 %indvars.iv
  store i32 %73, ptr %93, align 4, !tbaa !11
  %94 = getelementptr inbounds i8, ptr %93, i64 4
  store i32 %73, ptr %94, align 4, !tbaa !13
  br label %104

95:                                               ; preds = %88
  %96 = srem i32 %89, %75
  %97 = add nsw i32 %96, %73
  %98 = getelementptr inbounds %struct.triplet, ptr %78, i64 %indvars.iv
  store i32 %97, ptr %98, align 4, !tbaa !11
  %99 = srem i32 %90, %75
  %100 = add nsw i32 %99, %73
  %101 = getelementptr inbounds i8, ptr %98, i64 4
  store i32 %100, ptr %101, align 4, !tbaa !13
  %102 = srem i32 %91, %75
  %103 = add nsw i32 %102, %73
  br label %104

104:                                              ; preds = %92, %95
  %105 = phi ptr [ %101, %95 ], [ %94, %92 ]
  %106 = phi i32 [ %100, %95 ], [ %73, %92 ]
  %107 = phi i32 [ %97, %95 ], [ %73, %92 ]
  %108 = phi ptr [ %98, %95 ], [ %93, %92 ]
  %109 = phi i32 [ %103, %95 ], [ %73, %92 ]
  %.fr571 = freeze i32 %109
  %110 = getelementptr inbounds %struct.triplet, ptr %78, i64 %indvars.iv, i32 2
  store i32 %.fr571, ptr %110, align 4, !tbaa !14
  br i1 %.not569, label %120, label %111

111:                                              ; preds = %104
  %.fr = freeze i32 %107
  %112 = srem i32 %.fr, %71
  %113 = sub nsw i32 %.fr, %112
  %. = tail call i32 @llvm.smax.i32(i32 %113, i32 %73)
  store i32 %., ptr %108, align 4, !tbaa !11
  %.fr570 = freeze i32 %106
  %114 = srem i32 %.fr570, %71
  %115 = sub nsw i32 %.fr570, %114
  %116 = tail call i32 @llvm.smax.i32(i32 %115, i32 %73)
  store i32 %116, ptr %105, align 4, !tbaa !13
  %117 = srem i32 %.fr571, %71
  %118 = sub nsw i32 %.fr571, %117
  %119 = tail call i32 @llvm.smax.i32(i32 %118, i32 %73)
  store i32 %119, ptr %110, align 4, !tbaa !14
  br label %120

120:                                              ; preds = %111, %104
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, %wide.trip.count
  br i1 %exitcond.not, label %._crit_edge, label %88, !llvm.loop !15

._crit_edge:                                      ; preds = %120
  call void @unique(ptr noundef nonnull %78, ptr noundef nonnull %3)
  %121 = load i32, ptr %3, align 4, !tbaa !9
  %122 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.1, i32 noundef %121, i32 noundef %69, i32 noundef 1, ptr noundef nonnull @.str.2)
  call void @libxsmm_init() #10
  %123 = call i64 @libxsmm_timer_tick() #10
  %124 = icmp sgt i32 %68, 0
  %125 = load i32, ptr %3, align 4
  %126 = icmp sgt i32 %125, 0
  %or.cond880 = select i1 %124, i1 %126, i1 false
  br i1 %or.cond880, label %.preheader758, label %._crit_edge765

.preheader758:                                    ; preds = %._crit_edge, %._crit_edge763
  %127 = phi i32 [ %132, %._crit_edge763 ], [ %125, %._crit_edge ]
  %.0493764 = phi i32 [ %133, %._crit_edge763 ], [ 0, %._crit_edge ]
  %128 = icmp sgt i32 %127, 0
  br i1 %128, label %.lr.ph762, label %._crit_edge763

.lr.ph762:                                        ; preds = %.preheader758, %.lr.ph762
  %.1491761 = phi i32 [ %129, %.lr.ph762 ], [ 0, %.preheader758 ]
  call void @libxsmm_init() #10
  %129 = add nuw nsw i32 %.1491761, 1
  %130 = load i32, ptr %3, align 4, !tbaa !9
  %131 = icmp slt i32 %129, %130
  br i1 %131, label %.lr.ph762, label %._crit_edge763, !llvm.loop !17

._crit_edge763:                                   ; preds = %.lr.ph762, %.preheader758
  %132 = phi i32 [ %127, %.preheader758 ], [ %130, %.lr.ph762 ]
  %133 = add nuw nsw i32 %.0493764, 1
  %exitcond812.not = icmp eq i32 %133, %68
  br i1 %exitcond812.not, label %._crit_edge765, label %.preheader758, !llvm.loop !18

._crit_edge765:                                   ; preds = %._crit_edge763, %._crit_edge
  %134 = call i64 @libxsmm_timer_tick() #10
  %135 = call i64 @libxsmm_timer_ncycles(i64 noundef %123, i64 noundef %134)
  %136 = call i64 @libxsmm_timer_tick() #10
  %137 = icmp sgt i32 %69, 0
  br i1 %137, label %.lr.ph768.preheader, label %._crit_edge769

.lr.ph768.preheader:                              ; preds = %._crit_edge765
  %wide.trip.count816 = zext nneg i32 %69 to i64
  br label %.lr.ph768

.lr.ph768:                                        ; preds = %.lr.ph768.preheader, %.lr.ph768
  %indvars.iv813 = phi i64 [ 0, %.lr.ph768.preheader ], [ %indvars.iv.next814, %.lr.ph768 ]
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %4) #10
  %138 = getelementptr inbounds %struct.triplet, ptr %78, i64 %indvars.iv813
  %139 = load i32, ptr %138, align 4, !tbaa !11
  %140 = getelementptr inbounds i8, ptr %138, i64 4
  %141 = load i32, ptr %140, align 4, !tbaa !13
  %142 = getelementptr inbounds i8, ptr %138, i64 8
  %143 = load i32, ptr %142, align 4, !tbaa !14
  call void @libxsmm_create_gemm_shape(ptr dead_on_unwind nonnull writable sret(%struct.libxsmm_gemm_shape) align 4 %4, i32 noundef %139, i32 noundef %141, i32 noundef %143, i32 noundef %139, i32 noundef %143, i32 noundef %139, i32 noundef 0, i32 noundef 0, i32 noundef 0, i32 noundef 0) #10
  %144 = call ptr @libxsmm_dispatch_gemm(ptr noundef nonnull byval(%struct.libxsmm_gemm_shape) align 8 %4, i32 noundef 0, i32 noundef -1) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %4) #10
  %indvars.iv.next814 = add nuw nsw i64 %indvars.iv813, 1
  %exitcond817.not = icmp eq i64 %indvars.iv.next814, %wide.trip.count816
  br i1 %exitcond817.not, label %._crit_edge769, label %.lr.ph768, !llvm.loop !20

._crit_edge769:                                   ; preds = %.lr.ph768, %._crit_edge765
  %145 = call i64 @libxsmm_timer_tick() #10
  %146 = call i64 @libxsmm_timer_ncycles(i64 noundef %136, i64 noundef %145)
  br i1 %124, label %.lr.ph777, label %._crit_edge778

.lr.ph777:                                        ; preds = %._crit_edge769, %._crit_edge773
  %.0486775 = phi i64 [ %164, %._crit_edge773 ], [ 0, %._crit_edge769 ]
  %.1494774 = phi i32 [ %165, %._crit_edge773 ], [ 0, %._crit_edge769 ]
  %147 = call i64 @libxsmm_timer_tick() #10
  %148 = load i32, ptr %3, align 4, !tbaa !9
  %149 = icmp sgt i32 %148, 0
  br i1 %149, label %.lr.ph772, label %._crit_edge773

.lr.ph772:                                        ; preds = %.lr.ph777, %.lr.ph772
  %.3770 = phi i32 [ %159, %.lr.ph772 ], [ 0, %.lr.ph777 ]
  %150 = srem i32 %.3770, %69
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %5) #10
  %151 = zext nneg i32 %150 to i64
  %152 = getelementptr inbounds %struct.triplet, ptr %78, i64 %151
  %153 = load i32, ptr %152, align 4, !tbaa !11
  %154 = getelementptr inbounds i8, ptr %152, i64 4
  %155 = load i32, ptr %154, align 4, !tbaa !13
  %156 = getelementptr inbounds i8, ptr %152, i64 8
  %157 = load i32, ptr %156, align 4, !tbaa !14
  call void @libxsmm_create_gemm_shape(ptr dead_on_unwind nonnull writable sret(%struct.libxsmm_gemm_shape) align 4 %5, i32 noundef %153, i32 noundef %155, i32 noundef %157, i32 noundef %153, i32 noundef %157, i32 noundef %153, i32 noundef 0, i32 noundef 0, i32 noundef 0, i32 noundef 0) #10
  %158 = call ptr @libxsmm_dispatch_gemm(ptr noundef nonnull byval(%struct.libxsmm_gemm_shape) align 8 %5, i32 noundef 0, i32 noundef -1) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %5) #10
  %159 = add nuw nsw i32 %.3770, 1
  %160 = load i32, ptr %3, align 4, !tbaa !9
  %161 = icmp slt i32 %159, %160
  br i1 %161, label %.lr.ph772, label %._crit_edge773, !llvm.loop !21

._crit_edge773:                                   ; preds = %.lr.ph772, %.lr.ph777
  %162 = call i64 @libxsmm_timer_tick() #10
  %163 = call i64 @libxsmm_timer_ncycles(i64 noundef %147, i64 noundef %162)
  %164 = add i64 %163, %.0486775
  %165 = add nuw nsw i32 %.1494774, 1
  %exitcond818.not = icmp eq i32 %165, %68
  br i1 %exitcond818.not, label %._crit_edge778, label %.lr.ph777, !llvm.loop !22

._crit_edge778:                                   ; preds = %._crit_edge773, %._crit_edge769
  %.0486.lcssa = phi i64 [ 0, %._crit_edge769 ], [ %164, %._crit_edge773 ]
  %166 = call i64 @libxsmm_timer_tick() #10
  %167 = load i32, ptr %3, align 4, !tbaa !9
  %168 = icmp slt i32 %69, %167
  br i1 %168, label %.lr.ph781.preheader, label %._crit_edge782

.lr.ph781.preheader:                              ; preds = %._crit_edge778
  %169 = sext i32 %69 to i64
  br label %.lr.ph781

.lr.ph781:                                        ; preds = %.lr.ph781.preheader, %.lr.ph781
  %indvars.iv819 = phi i64 [ %169, %.lr.ph781.preheader ], [ %indvars.iv.next820, %.lr.ph781 ]
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %6) #10
  %170 = getelementptr inbounds %struct.triplet, ptr %78, i64 %indvars.iv819
  %171 = load i32, ptr %170, align 4, !tbaa !11
  %172 = getelementptr inbounds i8, ptr %170, i64 4
  %173 = load i32, ptr %172, align 4, !tbaa !13
  %174 = getelementptr inbounds i8, ptr %170, i64 8
  %175 = load i32, ptr %174, align 4, !tbaa !14
  call void @libxsmm_create_gemm_shape(ptr dead_on_unwind nonnull writable sret(%struct.libxsmm_gemm_shape) align 4 %6, i32 noundef %171, i32 noundef %173, i32 noundef %175, i32 noundef %171, i32 noundef %175, i32 noundef %171, i32 noundef 0, i32 noundef 0, i32 noundef 0, i32 noundef 0) #10
  %176 = call ptr @libxsmm_dispatch_gemm(ptr noundef nonnull byval(%struct.libxsmm_gemm_shape) align 8 %6, i32 noundef 0, i32 noundef -1) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %6) #10
  %indvars.iv.next820 = add nsw i64 %indvars.iv819, 1
  %177 = load i32, ptr %3, align 4, !tbaa !9
  %178 = sext i32 %177 to i64
  %179 = icmp slt i64 %indvars.iv.next820, %178
  br i1 %179, label %.lr.ph781, label %._crit_edge782, !llvm.loop !23

._crit_edge782:                                   ; preds = %.lr.ph781, %._crit_edge778
  %180 = call i64 @libxsmm_timer_tick() #10
  %181 = call i64 @libxsmm_timer_ncycles(i64 noundef %166, i64 noundef %180)
  %182 = add i64 %181, %146
  br i1 %124, label %.lr.ph790, label %._crit_edge791

.lr.ph790:                                        ; preds = %._crit_edge782, %._crit_edge786
  %.0485788 = phi i64 [ %203, %._crit_edge786 ], [ 0, %._crit_edge782 ]
  %.2495787 = phi i32 [ %204, %._crit_edge786 ], [ 0, %._crit_edge782 ]
  %183 = call i64 @libxsmm_timer_tick() #10
  %184 = load i32, ptr %3, align 4, !tbaa !9
  %185 = icmp sgt i32 %184, 0
  br i1 %185, label %.lr.ph785, label %._crit_edge786

.lr.ph785:                                        ; preds = %.lr.ph790, %.lr.ph785
  %indvars.iv822 = phi i64 [ %indvars.iv.next823, %.lr.ph785 ], [ 0, %.lr.ph790 ]
  %186 = phi i32 [ %198, %.lr.ph785 ], [ %184, %.lr.ph790 ]
  %187 = mul i64 %80, %indvars.iv822
  %188 = sext i32 %186 to i64
  %189 = urem i64 %187, %188
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %7) #10
  %sext568 = shl i64 %189, 32
  %190 = ashr exact i64 %sext568, 32
  %191 = getelementptr inbounds %struct.triplet, ptr %78, i64 %190
  %192 = load i32, ptr %191, align 4, !tbaa !11
  %193 = getelementptr inbounds i8, ptr %191, i64 4
  %194 = load i32, ptr %193, align 4, !tbaa !13
  %195 = getelementptr inbounds i8, ptr %191, i64 8
  %196 = load i32, ptr %195, align 4, !tbaa !14
  call void @libxsmm_create_gemm_shape(ptr dead_on_unwind nonnull writable sret(%struct.libxsmm_gemm_shape) align 4 %7, i32 noundef %192, i32 noundef %194, i32 noundef %196, i32 noundef %192, i32 noundef %196, i32 noundef %192, i32 noundef 0, i32 noundef 0, i32 noundef 0, i32 noundef 0) #10
  %197 = call ptr @libxsmm_dispatch_gemm(ptr noundef nonnull byval(%struct.libxsmm_gemm_shape) align 8 %7, i32 noundef 0, i32 noundef -1) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %7) #10
  %indvars.iv.next823 = add nuw nsw i64 %indvars.iv822, 1
  %198 = load i32, ptr %3, align 4, !tbaa !9
  %199 = sext i32 %198 to i64
  %200 = icmp slt i64 %indvars.iv.next823, %199
  br i1 %200, label %.lr.ph785, label %._crit_edge786, !llvm.loop !24

._crit_edge786:                                   ; preds = %.lr.ph785, %.lr.ph790
  %201 = call i64 @libxsmm_timer_tick() #10
  %202 = call i64 @libxsmm_timer_ncycles(i64 noundef %183, i64 noundef %201)
  %203 = add i64 %202, %.0485788
  %204 = add nuw nsw i32 %.2495787, 1
  %exitcond825.not = icmp eq i32 %204, %68
  br i1 %exitcond825.not, label %._crit_edge791, label %.lr.ph790, !llvm.loop !25

._crit_edge791:                                   ; preds = %._crit_edge786, %._crit_edge782
  %.0485.lcssa = phi i64 [ 0, %._crit_edge782 ], [ %203, %._crit_edge786 ]
  call void @llvm.lifetime.start.p0(i64 32768, ptr nonnull %8) #10
  call void @llvm.lifetime.start.p0(i64 32768, ptr nonnull %9) #10
  call void @llvm.lifetime.start.p0(i64 32768, ptr nonnull %10) #10
  call void @llvm.lifetime.start.p0(i64 192, ptr nonnull %11) #10
  call void @libxsmm_matdiff_clear(ptr noundef nonnull %11) #10
  %205 = mul nuw nsw i32 %72, %72
  %206 = add nuw nsw i32 %205, 1
  %207 = lshr i32 %206, 1
  %208 = uitofp nneg i32 %207 to double
  %209 = fdiv double 1.000000e+00, %208
  %210 = zext nneg i32 %205 to i64
  %211 = call i64 @libxsmm_coprime2(i64 noundef %210) #10
  %smax = call i32 @llvm.smax.i32(i32 %72, i32 1)
  %212 = zext i32 %72 to i64
  %wide.trip.count834 = zext nneg i32 %smax to i64
  %213 = add nsw i64 %wide.trip.count834, -1
  %xtraiter = and i64 %wide.trip.count834, 1
  %214 = icmp eq i64 %213, 0
  %unroll_iter = and i64 %wide.trip.count834, 2147483646
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br label %.preheader757

.preheader757:                                    ; preds = %._crit_edge791, %237
  %indvars.iv831 = phi i64 [ 0, %._crit_edge791 ], [ %indvars.iv.next832, %237 ]
  %215 = mul nuw nsw i64 %indvars.iv831, %212
  br i1 %214, label %.unr-lcssa, label %.preheader757.new

.preheader757.new:                                ; preds = %.preheader757, %.preheader757.new
  %indvars.iv826 = phi i64 [ %indvars.iv.next827.1, %.preheader757.new ], [ 0, %.preheader757 ]
  %niter = phi i64 [ %niter.next.1, %.preheader757.new ], [ 0, %.preheader757 ]
  %216 = add nuw nsw i64 %indvars.iv826, %215
  %217 = mul i64 %211, %216
  %218 = urem i64 %217, %210
  %219 = uitofp nneg i64 %218 to double
  %220 = fsub double %219, %208
  %221 = fmul double %209, %220
  %222 = getelementptr inbounds double, ptr %8, i64 %216
  store double %221, ptr %222, align 8, !tbaa !26
  %indvars.iv.next827 = or disjoint i64 %indvars.iv826, 1
  %223 = add nuw nsw i64 %indvars.iv.next827, %215
  %224 = mul i64 %211, %223
  %225 = urem i64 %224, %210
  %226 = uitofp nneg i64 %225 to double
  %227 = fsub double %226, %208
  %228 = fmul double %209, %227
  %229 = getelementptr inbounds double, ptr %8, i64 %223
  store double %228, ptr %229, align 8, !tbaa !26
  %indvars.iv.next827.1 = add nuw nsw i64 %indvars.iv826, 2
  %niter.next.1 = add i64 %niter, 2
  %niter.ncmp.1 = icmp eq i64 %niter.next.1, %unroll_iter
  br i1 %niter.ncmp.1, label %.unr-lcssa, label %.preheader757.new, !llvm.loop !28

.unr-lcssa:                                       ; preds = %.preheader757.new, %.preheader757
  %indvars.iv826.unr = phi i64 [ 0, %.preheader757 ], [ %indvars.iv.next827.1, %.preheader757.new ]
  br i1 %lcmp.mod.not, label %237, label %.epilog-lcssa

.epilog-lcssa:                                    ; preds = %.unr-lcssa
  %230 = add nuw nsw i64 %indvars.iv826.unr, %215
  %231 = mul i64 %211, %230
  %232 = urem i64 %231, %210
  %233 = uitofp nneg i64 %232 to double
  %234 = fsub double %233, %208
  %235 = fmul double %209, %234
  %236 = getelementptr inbounds double, ptr %8, i64 %230
  store double %235, ptr %236, align 8, !tbaa !26
  br label %237

237:                                              ; preds = %.unr-lcssa, %.epilog-lcssa
  %indvars.iv.next832 = add nuw nsw i64 %indvars.iv831, 1
  %exitcond835.not = icmp eq i64 %indvars.iv.next832, %wide.trip.count834
  br i1 %exitcond835.not, label %238, label %.preheader757, !llvm.loop !29

238:                                              ; preds = %237
  %239 = call i64 @libxsmm_coprime2(i64 noundef %210) #10
  %xtraiter893 = and i64 %wide.trip.count834, 1
  %240 = icmp eq i64 %213, 0
  %unroll_iter896 = and i64 %wide.trip.count834, 2147483646
  %lcmp.mod894.not = icmp eq i64 %xtraiter893, 0
  br label %.preheader756

.preheader756:                                    ; preds = %238, %263
  %indvars.iv841 = phi i64 [ 0, %238 ], [ %indvars.iv.next842, %263 ]
  %241 = mul nuw nsw i64 %indvars.iv841, %212
  br i1 %240, label %.unr-lcssa891, label %.preheader756.new

.preheader756.new:                                ; preds = %.preheader756, %.preheader756.new
  %indvars.iv836 = phi i64 [ %indvars.iv.next837.1, %.preheader756.new ], [ 0, %.preheader756 ]
  %niter897 = phi i64 [ %niter897.next.1, %.preheader756.new ], [ 0, %.preheader756 ]
  %242 = add nuw nsw i64 %indvars.iv836, %241
  %243 = mul i64 %239, %242
  %244 = urem i64 %243, %210
  %245 = uitofp nneg i64 %244 to double
  %246 = fsub double %245, %208
  %247 = fmul double %209, %246
  %248 = getelementptr inbounds double, ptr %9, i64 %242
  store double %247, ptr %248, align 8, !tbaa !26
  %indvars.iv.next837 = or disjoint i64 %indvars.iv836, 1
  %249 = add nuw nsw i64 %indvars.iv.next837, %241
  %250 = mul i64 %239, %249
  %251 = urem i64 %250, %210
  %252 = uitofp nneg i64 %251 to double
  %253 = fsub double %252, %208
  %254 = fmul double %209, %253
  %255 = getelementptr inbounds double, ptr %9, i64 %249
  store double %254, ptr %255, align 8, !tbaa !26
  %indvars.iv.next837.1 = add nuw nsw i64 %indvars.iv836, 2
  %niter897.next.1 = add i64 %niter897, 2
  %niter897.ncmp.1 = icmp eq i64 %niter897.next.1, %unroll_iter896
  br i1 %niter897.ncmp.1, label %.unr-lcssa891, label %.preheader756.new, !llvm.loop !30

.unr-lcssa891:                                    ; preds = %.preheader756.new, %.preheader756
  %indvars.iv836.unr = phi i64 [ 0, %.preheader756 ], [ %indvars.iv.next837.1, %.preheader756.new ]
  br i1 %lcmp.mod894.not, label %263, label %.epilog-lcssa895

.epilog-lcssa895:                                 ; preds = %.unr-lcssa891
  %256 = add nuw nsw i64 %indvars.iv836.unr, %241
  %257 = mul i64 %239, %256
  %258 = urem i64 %257, %210
  %259 = uitofp nneg i64 %258 to double
  %260 = fsub double %259, %208
  %261 = fmul double %209, %260
  %262 = getelementptr inbounds double, ptr %9, i64 %256
  store double %261, ptr %262, align 8, !tbaa !26
  br label %263

263:                                              ; preds = %.unr-lcssa891, %.epilog-lcssa895
  %indvars.iv.next842 = add nuw nsw i64 %indvars.iv841, 1
  %exitcond845.not = icmp eq i64 %indvars.iv.next842, %wide.trip.count834
  br i1 %exitcond845.not, label %264, label %.preheader756, !llvm.loop !31

264:                                              ; preds = %263
  %265 = call i64 @libxsmm_coprime2(i64 noundef %210) #10
  %xtraiter900 = and i64 %wide.trip.count834, 1
  %266 = icmp eq i64 %213, 0
  %unroll_iter903 = and i64 %wide.trip.count834, 2147483646
  %lcmp.mod901.not = icmp eq i64 %xtraiter900, 0
  br label %.preheader755

.preheader755:                                    ; preds = %264, %297
  %indvars.iv851 = phi i64 [ 0, %264 ], [ %indvars.iv.next852, %297 ]
  %267 = mul nuw nsw i64 %indvars.iv851, %212
  br i1 %266, label %.unr-lcssa898, label %.preheader755.new

.preheader:                                       ; preds = %297
  %268 = load i32, ptr %3, align 4, !tbaa !9
  %269 = icmp sgt i32 %268, 0
  br i1 %269, label %.lr.ph800, label %._crit_edge801

.lr.ph800:                                        ; preds = %.preheader
  %270 = getelementptr inbounds i8, ptr %14, i64 32
  %271 = getelementptr inbounds i8, ptr %14, i64 80
  %272 = getelementptr inbounds i8, ptr %14, i64 128
  %273 = getelementptr inbounds i8, ptr %14, i64 72
  %274 = getelementptr inbounds i8, ptr %14, i64 120
  %275 = getelementptr inbounds i8, ptr %14, i64 168
  br label %298

.preheader755.new:                                ; preds = %.preheader755, %.preheader755.new
  %indvars.iv846 = phi i64 [ %indvars.iv.next847.1, %.preheader755.new ], [ 0, %.preheader755 ]
  %niter904 = phi i64 [ %niter904.next.1, %.preheader755.new ], [ 0, %.preheader755 ]
  %276 = add nuw nsw i64 %indvars.iv846, %267
  %277 = mul i64 %265, %276
  %278 = urem i64 %277, %210
  %279 = uitofp nneg i64 %278 to double
  %280 = fsub double %279, %208
  %281 = fmul double %209, %280
  %282 = getelementptr inbounds double, ptr %10, i64 %276
  store double %281, ptr %282, align 8, !tbaa !26
  %indvars.iv.next847 = or disjoint i64 %indvars.iv846, 1
  %283 = add nuw nsw i64 %indvars.iv.next847, %267
  %284 = mul i64 %265, %283
  %285 = urem i64 %284, %210
  %286 = uitofp nneg i64 %285 to double
  %287 = fsub double %286, %208
  %288 = fmul double %209, %287
  %289 = getelementptr inbounds double, ptr %10, i64 %283
  store double %288, ptr %289, align 8, !tbaa !26
  %indvars.iv.next847.1 = add nuw nsw i64 %indvars.iv846, 2
  %niter904.next.1 = add i64 %niter904, 2
  %niter904.ncmp.1 = icmp eq i64 %niter904.next.1, %unroll_iter903
  br i1 %niter904.ncmp.1, label %.unr-lcssa898, label %.preheader755.new, !llvm.loop !32

.unr-lcssa898:                                    ; preds = %.preheader755.new, %.preheader755
  %indvars.iv846.unr = phi i64 [ 0, %.preheader755 ], [ %indvars.iv.next847.1, %.preheader755.new ]
  br i1 %lcmp.mod901.not, label %297, label %.epilog-lcssa902

.epilog-lcssa902:                                 ; preds = %.unr-lcssa898
  %290 = add nuw nsw i64 %indvars.iv846.unr, %267
  %291 = mul i64 %265, %290
  %292 = urem i64 %291, %210
  %293 = uitofp nneg i64 %292 to double
  %294 = fsub double %293, %208
  %295 = fmul double %209, %294
  %296 = getelementptr inbounds double, ptr %10, i64 %290
  store double %295, ptr %296, align 8, !tbaa !26
  br label %297

297:                                              ; preds = %.unr-lcssa898, %.epilog-lcssa902
  %indvars.iv.next852 = add nuw nsw i64 %indvars.iv851, 1
  %exitcond855.not = icmp eq i64 %indvars.iv.next852, %wide.trip.count834
  br i1 %exitcond855.not, label %.preheader, label %.preheader755, !llvm.loop !33

298:                                              ; preds = %.lr.ph800, %337
  %299 = phi i32 [ %268, %.lr.ph800 ], [ %338, %337 ]
  %.6799 = phi i32 [ 0, %.lr.ph800 ], [ %339, %337 ]
  %300 = sext i32 %.6799 to i64
  %301 = mul i64 %80, %300
  %302 = sext i32 %299 to i64
  %303 = urem i64 %301, %302
  call void @llvm.lifetime.start.p0(i64 192, ptr nonnull %12) #10
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %13) #10
  %sext = shl i64 %303, 32
  %304 = ashr exact i64 %sext, 32
  %305 = getelementptr inbounds %struct.triplet, ptr %78, i64 %304
  %306 = load i32, ptr %305, align 4, !tbaa !11
  %307 = getelementptr inbounds i8, ptr %305, i64 4
  %308 = load i32, ptr %307, align 4, !tbaa !13
  %309 = getelementptr inbounds i8, ptr %305, i64 8
  %310 = load i32, ptr %309, align 4, !tbaa !14
  call void @libxsmm_create_gemm_shape(ptr dead_on_unwind nonnull writable sret(%struct.libxsmm_gemm_shape) align 4 %13, i32 noundef %306, i32 noundef %308, i32 noundef %310, i32 noundef %306, i32 noundef %310, i32 noundef %306, i32 noundef 0, i32 noundef 0, i32 noundef 0, i32 noundef 0) #10
  %311 = call ptr @libxsmm_dispatch_gemm(ptr noundef nonnull byval(%struct.libxsmm_gemm_shape) align 8 %13, i32 noundef 0, i32 noundef -1) #10
  %.not567 = icmp eq ptr %311, null
  br i1 %.not567, label %.thread742, label %312

312:                                              ; preds = %298
  call void @llvm.lifetime.start.p0(i64 176, ptr nonnull %14) #10
  store ptr %8, ptr %270, align 8, !tbaa !34
  store ptr %9, ptr %271, align 8, !tbaa !38
  store ptr %10, ptr %272, align 8, !tbaa !39
  %313 = load i32, ptr %305, align 4, !tbaa !11
  %314 = load i32, ptr %309, align 4, !tbaa !14
  %315 = mul nsw i32 %314, %313
  %316 = sext i32 %315 to i64
  %317 = getelementptr inbounds double, ptr %8, i64 %316
  store ptr %317, ptr %273, align 8, !tbaa !40
  %318 = load i32, ptr %307, align 4, !tbaa !13
  %319 = mul nsw i32 %318, %314
  %320 = sext i32 %319 to i64
  %321 = getelementptr inbounds double, ptr %9, i64 %320
  store ptr %321, ptr %274, align 8, !tbaa !41
  %322 = mul nsw i32 %318, %313
  %323 = sext i32 %322 to i64
  %324 = getelementptr inbounds double, ptr %10, i64 %323
  store ptr %324, ptr %275, align 8, !tbaa !42
  call void %311(ptr noundef nonnull %14) #10
  %325 = load i32, ptr %305, align 4, !tbaa !11
  %326 = load i32, ptr %307, align 4, !tbaa !13
  %327 = call i32 @libxsmm_matdiff(ptr noundef nonnull %12, i32 noundef 0, i32 noundef %325, i32 noundef %326, ptr noundef null, ptr noundef nonnull %10, ptr noundef nonnull %305, ptr noundef nonnull %305) #10
  call void @llvm.lifetime.end.p0(i64 176, ptr nonnull %14) #10
  %328 = icmp eq i32 %327, 0
  br i1 %328, label %329, label %.thread742

329:                                              ; preds = %312
  call void @libxsmm_matdiff_reduce(ptr noundef nonnull %11, ptr noundef nonnull %12) #10
  %.pre = load i32, ptr %3, align 4, !tbaa !9
  br label %337

.thread742:                                       ; preds = %298, %312
  %.1489745 = phi i32 [ %327, %312 ], [ 1, %298 ]
  %330 = load i32, ptr %305, align 4, !tbaa !11
  %331 = load i32, ptr %307, align 4, !tbaa !13
  %332 = load i32, ptr %309, align 4, !tbaa !14
  %333 = ptrtoint ptr %311 to i64
  %334 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.4, i32 noundef %330, i32 noundef %331, i32 noundef %332, i64 noundef %333)
  %335 = load i32, ptr %3, align 4, !tbaa !9
  %336 = add nsw i32 %335, 1
  br label %337

337:                                              ; preds = %.thread742, %329
  %338 = phi i32 [ %.pre, %329 ], [ %335, %.thread742 ]
  %.1489744 = phi i32 [ 0, %329 ], [ %.1489745, %.thread742 ]
  %.7 = phi i32 [ %.6799, %329 ], [ %336, %.thread742 ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %13) #10
  call void @llvm.lifetime.end.p0(i64 192, ptr nonnull %12) #10
  %339 = add nsw i32 %.7, 1
  %340 = icmp slt i32 %339, %338
  br i1 %340, label %298, label %._crit_edge801, !llvm.loop !43

._crit_edge801:                                   ; preds = %337, %.preheader
  %.6.lcssa = phi i32 [ 0, %.preheader ], [ %339, %337 ]
  %.0488.lcssa = phi i32 [ 0, %.preheader ], [ %.1489744, %337 ]
  %.lcssa = phi i32 [ %268, %.preheader ], [ %338, %337 ]
  %.not566 = icmp sgt i32 %.6.lcssa, %.lcssa
  br i1 %.not566, label %345, label %341

341:                                              ; preds = %._crit_edge801
  %342 = getelementptr inbounds i8, ptr %11, i64 120
  %343 = load double, ptr %342, align 8, !tbaa !44
  %344 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.5, double noundef %343)
  br label %347

345:                                              ; preds = %._crit_edge801
  %346 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.6)
  br label %347

347:                                              ; preds = %345, %341
  call void @llvm.lifetime.end.p0(i64 192, ptr nonnull %11) #10
  call void @llvm.lifetime.end.p0(i64 32768, ptr nonnull %10) #10
  call void @llvm.lifetime.end.p0(i64 32768, ptr nonnull %9) #10
  call void @llvm.lifetime.end.p0(i64 32768, ptr nonnull %8) #10
  call void @free(ptr noundef %78) #10
  %348 = add i64 %182, -1
  %.pre856 = load i32, ptr %3, align 4, !tbaa !9
  br label %349

349:                                              ; preds = %86, %347
  %350 = phi i32 [ %.pre856, %347 ], [ %70, %86 ]
  %.2 = phi i32 [ %.0488.lcssa, %347 ], [ 1, %86 ]
  %.1487 = phi i64 [ %.0486.lcssa, %347 ], [ 0, %86 ]
  %.1 = phi i64 [ %.0485.lcssa, %347 ], [ 0, %86 ]
  %.0484 = phi i64 [ %348, %347 ], [ -1, %86 ]
  %.0 = phi i64 [ %135, %347 ], [ 0, %86 ]
  %351 = sext i32 %350 to i64
  %352 = sext i32 %68 to i64
  %353 = mul nsw i64 %351, %352
  %354 = add nsw i64 %353, -1
  %355 = add i64 %354, %.0
  %356 = add i64 %354, %.1
  %357 = add i64 %354, %.1487
  %358 = add i64 %.0484, %351
  %359 = icmp ule i64 %353, %355
  %360 = icmp ule i64 %353, %356
  %or.cond = select i1 %359, i1 %360, i1 false
  %361 = icmp ule i64 %353, %357
  %or.cond3 = select i1 %or.cond, i1 %361, i1 false
  %362 = icmp uge i64 %358, %351
  %or.cond5 = select i1 %or.cond3, i1 %362, i1 false
  br i1 %or.cond5, label %363, label %399

363:                                              ; preds = %349
  %364 = udiv i64 %358, %351
  %365 = udiv i64 %357, %353
  %366 = udiv i64 %356, %353
  %367 = udiv i64 %355, %353
  %368 = call double @libxsmm_timer_duration(i64 noundef 0, i64 noundef %367) #10
  %369 = fmul double %368, 1.000000e+09
  %370 = call double @libxsmm_timer_duration(i64 noundef 0, i64 noundef %364) #10
  %371 = fmul double %370, 1.000000e+09
  %372 = call double @libxsmm_timer_duration(i64 noundef 0, i64 noundef %366) #10
  %373 = fmul double %372, 1.000000e+09
  %374 = call double @libxsmm_timer_duration(i64 noundef 0, i64 noundef %365) #10
  %375 = fmul double %374, 1.000000e+09
  %376 = fdiv double 1.000000e+03, %369
  %377 = call i64 @libxsmm_timer_ncycles(i64 noundef 0, i64 noundef %367)
  %378 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.7, double noundef %369, double noundef %376, i64 noundef %377)
  %379 = fdiv double 1.000000e+03, %375
  %380 = call i64 @libxsmm_timer_ncycles(i64 noundef 0, i64 noundef %365)
  %381 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.8, double noundef %375, double noundef %379, i64 noundef %380)
  %382 = fdiv double 1.000000e+03, %373
  %383 = call i64 @libxsmm_timer_ncycles(i64 noundef 0, i64 noundef %366)
  %384 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.9, double noundef %373, double noundef %382, i64 noundef %383)
  %385 = fcmp ogt double %371, 1.000000e+06
  br i1 %385, label %386, label %390

386:                                              ; preds = %363
  %387 = fmul double %371, 0x3EB0C6F7A0B5ED8D
  %388 = fdiv double 1.000000e+09, %371
  %389 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.10, double noundef %387, double noundef %388)
  br label %399

390:                                              ; preds = %363
  %391 = fcmp ogt double %371, 1.000000e+03
  br i1 %391, label %392, label %396

392:                                              ; preds = %390
  %393 = fmul double %371, 1.000000e-03
  %394 = fdiv double 1.000000e+06, %371
  %395 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.11, double noundef %393, double noundef %394)
  br label %399

396:                                              ; preds = %390
  %397 = fdiv double 1.000000e+03, %371
  %398 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.12, double noundef %371, double noundef %397)
  br label %399

399:                                              ; preds = %386, %396, %392, %349
  %400 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.13)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %3) #10
  ret i32 %.2
}

; 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

; Function Attrs: mustprogress nofree nounwind willreturn allockind("alloc,uninitialized") allocsize(0) memory(inaccessiblemem: readwrite)
declare noalias noundef ptr @malloc(i64 noundef) local_unnamed_addr #3

declare i64 @libxsmm_coprime2(i64 noundef) local_unnamed_addr #4

declare i32 @libxsmm_get_target_archid() local_unnamed_addr #4

; Function Attrs: nofree nounwind
declare noundef i32 @fprintf(ptr nocapture noundef, ptr nocapture noundef readonly, ...) local_unnamed_addr #5

; Function Attrs: nounwind
declare i32 @rand() local_unnamed_addr #6

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

; Function Attrs: inlinehint nounwind uwtable
declare hidden void @unique(ptr noundef, ptr noundef) local_unnamed_addr #7

; Function Attrs: nofree nounwind
declare noundef i32 @printf(ptr nocapture noundef readonly, ...) local_unnamed_addr #5

declare void @libxsmm_init() local_unnamed_addr #4

declare i64 @libxsmm_timer_tick() local_unnamed_addr #4

; Function Attrs: inlinehint nounwind uwtable
declare hidden i64 @libxsmm_timer_ncycles(i64 noundef, i64 noundef) local_unnamed_addr #7

declare void @libxsmm_create_gemm_shape(ptr dead_on_unwind writable sret(%struct.libxsmm_gemm_shape) align 4, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #4

declare ptr @libxsmm_dispatch_gemm(ptr noundef byval(%struct.libxsmm_gemm_shape) align 8, i32 noundef, i32 noundef) local_unnamed_addr #4

declare void @libxsmm_matdiff_clear(ptr noundef) local_unnamed_addr #4

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

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

; Function Attrs: mustprogress nounwind willreturn allockind("free") memory(argmem: readwrite, inaccessiblemem: readwrite)
declare void @free(ptr allocptr nocapture noundef) local_unnamed_addr #8

declare double @libxsmm_timer_duration(i64 noundef, i64 noundef) local_unnamed_addr #4

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

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

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 = { mustprogress nofree nounwind willreturn allockind("alloc,uninitialized") allocsize(0) memory(inaccessiblemem: readwrite) "alloc-family"="malloc" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { nofree nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #7 = { inlinehint 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 #8 = { mustprogress nounwind willreturn allockind("free") memory(argmem: readwrite, inaccessiblemem: readwrite) "alloc-family"="malloc" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #9 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #10 = { nounwind }
attributes #11 = { nounwind willreturn memory(read) }
attributes #12 = { nounwind allocsize(0) }
attributes #13 = { cold nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"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, !10, i64 0}
!12 = !{!"triplet", !10, i64 0, !10, i64 4, !10, i64 8}
!13 = !{!12, !10, i64 4}
!14 = !{!12, !10, i64 8}
!15 = distinct !{!15, !16}
!16 = !{!"llvm.loop.mustprogress"}
!17 = distinct !{!17, !16}
!18 = distinct !{!18, !16, !19}
!19 = !{!"llvm.loop.unswitch.partial.disable"}
!20 = distinct !{!20, !16}
!21 = distinct !{!21, !16}
!22 = distinct !{!22, !16}
!23 = distinct !{!23, !16}
!24 = distinct !{!24, !16}
!25 = distinct !{!25, !16}
!26 = !{!27, !27, i64 0}
!27 = !{!"double", !7, i64 0}
!28 = distinct !{!28, !16}
!29 = distinct !{!29, !16}
!30 = distinct !{!30, !16}
!31 = distinct !{!31, !16}
!32 = distinct !{!32, !16}
!33 = distinct !{!33, !16}
!34 = !{!35, !6, i64 32}
!35 = !{!"libxsmm_gemm_param", !36, i64 0, !37, i64 32, !37, i64 80, !37, i64 128}
!36 = !{!"libxsmm_matrix_op_arg", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24}
!37 = !{!"libxsmm_matrix_arg", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40}
!38 = !{!35, !6, i64 80}
!39 = !{!35, !6, i64 128}
!40 = !{!35, !6, i64 72}
!41 = !{!35, !6, i64 120}
!42 = !{!35, !6, i64 168}
!43 = distinct !{!43, !16}
!44 = !{!45, !27, i64 120}
!45 = !{!"libxsmm_matdiff_info", !27, i64 0, !27, i64 8, !27, i64 16, !27, i64 24, !27, i64 32, !27, i64 40, !27, i64 48, !27, i64 56, !27, i64 64, !27, i64 72, !27, i64 80, !27, i64 88, !27, i64 96, !27, i64 104, !27, i64 112, !27, i64 120, !27, i64 128, !27, i64 136, !27, i64 144, !27, i64 152, !27, i64 160, !27, i64 168, !10, i64 176, !10, i64 180, !10, i64 184, !10, i64 188}


; Effective O3 passes: ADCEPass,ConstraintEliminationPass,CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LICMPass,LoopRotatePass,LoopSimplifyCFGPass,LoopSimplifyPass,LoopUnrollPass,PostOrderFunctionAttrsPass,ReassociatePass,SCCPPass,SROAPass,SimpleLoopUnswitchPass,SimplifyCFGPass,TailCallElimPass