; LLVM IR from libxsmm/libxsmm :: samples/cp2k (cp2k-dbcsr)

; 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.raii = type { ptr, ptr, ptr }
%struct.raii_expect = type { ptr }
%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 }
%class.libxsmm_mmfunction = type { ptr }

@_ZTISt9exception = external constant ptr
@_ZTIPKc = external constant ptr
@.str = external hidden unnamed_addr constant [38 x i8], align 1
@__const.main.ops = external hidden unnamed_addr constant [6 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [6 x i8], align 1
@stdout = external global ptr, align 8
@.str.2 = external hidden unnamed_addr constant [53 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [10 x i8], align 1
@stderr = external global ptr, align 8
@.str.14 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [34 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [11 x i8], align 1

; Function Attrs: mustprogress norecurse uwtable
define dso_local noundef i32 @main(i32 noundef %0, ptr noundef %1) #0 personality ptr @__gxx_personality_v0 {
  %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 i8, align 1
  %14 = alloca i8, align 1
  %15 = alloca double, align 8
  %16 = alloca double, align 8
  %17 = alloca i32, align 4
  %18 = alloca ptr, align 8
  %19 = alloca i32, align 4
  %20 = alloca i32, align 4
  %21 = alloca i32, align 4
  %22 = alloca i32, align 4
  %23 = alloca i32, align 4
  %24 = alloca i32, align 4
  %25 = alloca i64, align 8
  %26 = alloca double, align 8
  %27 = alloca double, align 8
  %28 = alloca [6 x i8], align 1
  %29 = alloca ptr, align 8
  %30 = alloca double, align 8
  %31 = alloca %struct.raii, align 8
  %32 = alloca ptr, align 8
  %33 = alloca ptr, align 8
  %34 = alloca ptr, align 8
  %35 = alloca i32, align 4
  %36 = alloca double, align 8
  %37 = alloca double, align 8
  %38 = alloca i32, align 4
  %39 = alloca i32, align 4
  %40 = alloca i32, align 4
  %41 = alloca i32, align 4
  %42 = alloca i32, align 4
  %43 = alloca i32, align 4
  %44 = alloca i32, align 4
  %45 = alloca i32, align 4
  %46 = alloca double, align 8
  %47 = alloca double, align 8
  %48 = alloca i64, align 8
  %49 = alloca i32, align 4
  %50 = alloca double, align 8
  %51 = alloca double, align 8
  %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 i32, align 4
  %60 = alloca double, align 8
  %61 = alloca double, align 8
  %62 = alloca i64, align 8
  %63 = alloca i32, align 4
  %64 = alloca %struct.raii_expect, align 8
  %65 = alloca ptr, align 8
  %66 = alloca %struct.libxsmm_matdiff_info, align 8
  %67 = alloca %struct.libxsmm_matdiff_info, align 8
  %68 = alloca double, align 8
  %69 = alloca %class.libxsmm_mmfunction, align 8
  %70 = alloca i32, align 4
  %71 = alloca i32, align 4
  %72 = alloca [4096 x double], align 16
  %73 = alloca ptr, align 8
  %74 = alloca ptr, align 8
  %75 = alloca i32, align 4
  %76 = alloca ptr, align 8
  %77 = alloca ptr, align 8
  %78 = alloca i64, align 8
  %79 = alloca i32, align 4
  %80 = alloca [4096 x double], align 16
  %81 = alloca ptr, align 8
  %82 = alloca ptr, align 8
  %83 = alloca i32, align 4
  %84 = alloca ptr, align 8
  %85 = alloca ptr, align 8
  %86 = alloca double, align 8
  %87 = alloca i64, align 8
  %88 = alloca i32, align 4
  %89 = alloca [4096 x double], align 16
  %90 = alloca ptr, align 8
  %91 = alloca ptr, align 8
  %92 = alloca i32, align 4
  %93 = alloca ptr, align 8
  %94 = alloca ptr, align 8
  %95 = alloca i8, align 1
  %96 = alloca i8, align 1
  %97 = alloca i32, align 4
  %98 = alloca i32, align 4
  %99 = alloca i32, align 4
  %100 = alloca i32, align 4
  %101 = alloca i32, align 4
  %102 = alloca i32, align 4
  %103 = alloca double, align 8
  %104 = alloca double, align 8
  %105 = alloca i32, align 4
  %106 = alloca i32, align 4
  %107 = alloca i32, align 4
  %108 = alloca double, align 8
  %109 = alloca i64, align 8
  %110 = alloca i32, align 4
  %111 = alloca [4096 x double], align 16
  %112 = alloca ptr, align 8
  %113 = alloca ptr, align 8
  %114 = alloca i32, align 4
  %115 = alloca ptr, align 8
  %116 = alloca ptr, align 8
  %117 = alloca double, align 8
  %118 = alloca i64, align 8
  %119 = alloca i32, align 4
  %120 = alloca [4096 x double], align 16
  %121 = alloca ptr, align 8
  %122 = alloca ptr, align 8
  %123 = alloca i32, align 4
  %124 = alloca ptr, align 8
  %125 = alloca ptr, align 8
  %126 = alloca double, align 8
  %127 = alloca double, align 8
  %128 = alloca ptr, align 8
  %129 = alloca ptr, 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) #14
  store i32 0, ptr %6, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #14
  %130 = load i32, ptr %4, align 4, !tbaa !5
  %131 = icmp slt i32 1, %130
  br i1 %131, label %132, label %137

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

137:                                              ; preds = %2
  br label %138

138:                                              ; preds = %137, %132
  %139 = phi i32 [ %136, %132 ], [ 23, %137 ]
  store i32 %139, ptr %7, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #14
  %140 = load i32, ptr %7, align 4, !tbaa !5
  %141 = mul nsw i32 3, %140
  %142 = load i32, ptr %7, align 4, !tbaa !5
  %143 = mul nsw i32 %141, %142
  %144 = sext i32 %143 to i64
  %145 = mul i64 %144, 8
  %146 = udiv i64 1073741824, %145
  %147 = trunc i64 %146 to i32
  store i32 %147, ptr %8, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #14
  %148 = load i32, ptr %4, align 4, !tbaa !5
  %149 = icmp slt i32 2, %148
  br i1 %149, label %150, label %198

150:                                              ; preds = %138
  %151 = load ptr, ptr %5, align 8, !tbaa !9
  %152 = getelementptr inbounds ptr, ptr %151, i64 2
  %153 = load ptr, ptr %152, align 8, !tbaa !9
  %154 = call i32 @atoi(ptr noundef %153) #15
  %155 = icmp slt i32 0, %154
  br i1 %155, label %156, label %161

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

161:                                              ; preds = %150
  %162 = load ptr, ptr %5, align 8, !tbaa !9
  %163 = getelementptr inbounds ptr, ptr %162, i64 2
  %164 = load ptr, ptr %163, align 8, !tbaa !9
  %165 = load i8, ptr %164, align 1, !tbaa !11
  %166 = sext i8 %165 to i32
  %167 = icmp eq i32 43, %166
  br i1 %167, label %168, label %176

168:                                              ; preds = %161
  %169 = load i32, ptr %8, align 4, !tbaa !5
  %170 = load ptr, ptr %5, align 8, !tbaa !9
  %171 = getelementptr inbounds ptr, ptr %170, i64 2
  %172 = load ptr, ptr %171, align 8, !tbaa !9
  %173 = call i64 @strlen(ptr noundef %172) #15
  %174 = trunc i64 %173 to i32
  %175 = shl i32 %169, %174
  br label %194

176:                                              ; preds = %161
  %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 = load i8, ptr %179, align 1, !tbaa !11
  %181 = sext i8 %180 to i32
  %182 = icmp eq i32 45, %181
  br i1 %182, label %183, label %191

183:                                              ; preds = %176
  %184 = load i32, ptr %8, align 4, !tbaa !5
  %185 = load ptr, ptr %5, align 8, !tbaa !9
  %186 = getelementptr inbounds ptr, ptr %185, i64 2
  %187 = load ptr, ptr %186, align 8, !tbaa !9
  %188 = call i64 @strlen(ptr noundef %187) #15
  %189 = trunc i64 %188 to i32
  %190 = ashr i32 %184, %189
  br label %192

191:                                              ; preds = %176
  br label %192

192:                                              ; preds = %191, %183
  %193 = phi i32 [ %190, %183 ], [ 0, %191 ]
  br label %194

194:                                              ; preds = %192, %168
  %195 = phi i32 [ %175, %168 ], [ %193, %192 ]
  br label %196

196:                                              ; preds = %194, %156
  %197 = phi i32 [ %160, %156 ], [ %195, %194 ]
  br label %199

198:                                              ; preds = %138
  br label %199

199:                                              ; preds = %198, %196
  %200 = phi i32 [ %197, %196 ], [ 0, %198 ]
  store i32 %200, ptr %9, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #14
  %201 = load i32, ptr %4, align 4, !tbaa !5
  %202 = icmp slt i32 3, %201
  br i1 %202, label %203, label %249

203:                                              ; preds = %199
  %204 = load ptr, ptr %5, align 8, !tbaa !9
  %205 = getelementptr inbounds ptr, ptr %204, i64 3
  %206 = load ptr, ptr %205, align 8, !tbaa !9
  %207 = call i32 @atoi(ptr noundef %206) #15
  %208 = icmp slt i32 0, %207
  br i1 %208, label %209, label %214

209:                                              ; preds = %203
  %210 = load ptr, ptr %5, align 8, !tbaa !9
  %211 = getelementptr inbounds ptr, ptr %210, i64 3
  %212 = load ptr, ptr %211, align 8, !tbaa !9
  %213 = call i32 @atoi(ptr noundef %212) #15
  br label %247

214:                                              ; preds = %203
  %215 = load ptr, ptr %5, align 8, !tbaa !9
  %216 = getelementptr inbounds ptr, ptr %215, i64 3
  %217 = load ptr, ptr %216, align 8, !tbaa !9
  %218 = load i8, ptr %217, align 1, !tbaa !11
  %219 = sext i8 %218 to i32
  %220 = icmp eq i32 43, %219
  br i1 %220, label %221, label %228

221:                                              ; preds = %214
  %222 = load ptr, ptr %5, align 8, !tbaa !9
  %223 = getelementptr inbounds ptr, ptr %222, i64 3
  %224 = load ptr, ptr %223, align 8, !tbaa !9
  %225 = call i64 @strlen(ptr noundef %224) #15
  %226 = trunc i64 %225 to i32
  %227 = shl i32 160, %226
  br label %245

228:                                              ; preds = %214
  %229 = load ptr, ptr %5, align 8, !tbaa !9
  %230 = getelementptr inbounds ptr, ptr %229, i64 3
  %231 = load ptr, ptr %230, align 8, !tbaa !9
  %232 = load i8, ptr %231, align 1, !tbaa !11
  %233 = sext i8 %232 to i32
  %234 = icmp eq i32 45, %233
  br i1 %234, label %235, label %242

235:                                              ; preds = %228
  %236 = load ptr, ptr %5, align 8, !tbaa !9
  %237 = getelementptr inbounds ptr, ptr %236, i64 3
  %238 = load ptr, ptr %237, align 8, !tbaa !9
  %239 = call i64 @strlen(ptr noundef %238) #15
  %240 = trunc i64 %239 to i32
  %241 = ashr i32 160, %240
  br label %243

242:                                              ; preds = %228
  br label %243

243:                                              ; preds = %242, %235
  %244 = phi i32 [ %241, %235 ], [ -1, %242 ]
  br label %245

245:                                              ; preds = %243, %221
  %246 = phi i32 [ %227, %221 ], [ %244, %243 ]
  br label %247

247:                                              ; preds = %245, %209
  %248 = phi i32 [ %213, %209 ], [ %246, %245 ]
  br label %250

249:                                              ; preds = %199
  br label %250

250:                                              ; preds = %249, %247
  %251 = phi i32 [ %248, %247 ], [ -1, %249 ]
  store i32 %251, ptr %10, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #14
  %252 = load i32, ptr %4, align 4, !tbaa !5
  %253 = icmp slt i32 5, %252
  br i1 %253, label %254, label %259

254:                                              ; preds = %250
  %255 = load ptr, ptr %5, align 8, !tbaa !9
  %256 = getelementptr inbounds ptr, ptr %255, i64 5
  %257 = load ptr, ptr %256, align 8, !tbaa !9
  %258 = call i32 @atoi(ptr noundef %257) #15
  br label %261

259:                                              ; preds = %250
  %260 = load i32, ptr %7, align 4, !tbaa !5
  br label %261

261:                                              ; preds = %259, %254
  %262 = phi i32 [ %258, %254 ], [ %260, %259 ]
  store i32 %262, ptr %11, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #14
  %263 = load i32, ptr %4, align 4, !tbaa !5
  %264 = icmp slt i32 4, %263
  br i1 %264, label %265, label %270

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

270:                                              ; preds = %261
  %271 = load i32, ptr %11, align 4, !tbaa !5
  br label %272

272:                                              ; preds = %270, %265
  %273 = phi i32 [ %269, %265 ], [ %271, %270 ]
  store i32 %273, ptr %12, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr %13) #14
  store i8 78, ptr %13, align 1, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 1, ptr %14) #14
  store i8 78, ptr %14, align 1, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #14
  store double 1.000000e+00, ptr %15, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #14
  store double 1.000000e+00, ptr %16, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #14
  %274 = load i32, ptr %7, align 4, !tbaa !5
  %275 = load i32, ptr %12, align 4, !tbaa !5
  %276 = mul nsw i32 %274, %275
  store i32 %276, ptr %17, align 4, !tbaa !5
  %277 = load i32, ptr %17, align 4, !tbaa !5
  %278 = icmp slt i32 4096, %277
  br i1 %278, label %279, label %285

279:                                              ; preds = %272
  %280 = call ptr @__cxa_allocate_exception(i64 8) #14
  store ptr @.str, ptr %280, align 16, !tbaa !9
  invoke void @__cxa_throw(ptr %280, ptr @_ZTIPKc, ptr null) #16
          to label %1577 unwind label %281

281:                                              ; preds = %279
  %282 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %283 = extractvalue { ptr, i32 } %282, 0
  store ptr %283, ptr %18, align 8
  %284 = extractvalue { ptr, i32 } %282, 1
  store i32 %284, ptr %19, align 4
  br label %1545

285:                                              ; preds = %272
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #14
  %286 = load i32, ptr %7, align 4, !tbaa !5
  %287 = load i32, ptr %11, align 4, !tbaa !5
  %288 = mul nsw i32 %286, %287
  store i32 %288, ptr %20, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #14
  %289 = load i32, ptr %11, align 4, !tbaa !5
  %290 = load i32, ptr %12, align 4, !tbaa !5
  %291 = mul nsw i32 %289, %290
  store i32 %291, ptr %21, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #14
  store i32 8, ptr %22, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #14
  %292 = load i32, ptr %9, align 4, !tbaa !5
  %293 = icmp slt i32 0, %292
  br i1 %293, label %294, label %297

294:                                              ; preds = %285
  %295 = load i32, ptr %9, align 4, !tbaa !5
  %296 = sext i32 %295 to i64
  br label %304

297:                                              ; preds = %285
  %298 = load i32, ptr %20, align 4, !tbaa !5
  %299 = load i32, ptr %21, align 4, !tbaa !5
  %300 = add nsw i32 %298, %299
  %301 = sext i32 %300 to i64
  %302 = mul i64 %301, 8
  %303 = udiv i64 2147483648, %302
  br label %304

304:                                              ; preds = %297, %294
  %305 = phi i64 [ %296, %294 ], [ %303, %297 ]
  %306 = trunc i64 %305 to i32
  store i32 %306, ptr %23, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #14
  %307 = load i32, ptr %10, align 4, !tbaa !5
  %308 = icmp slt i32 0, %307
  br i1 %308, label %309, label %311

309:                                              ; preds = %304
  %310 = load i32, ptr %10, align 4, !tbaa !5
  br label %318

311:                                              ; preds = %304
  %312 = load i32, ptr %23, align 4, !tbaa !5
  %313 = mul nsw i32 %312, 160
  %314 = sdiv i32 %313, 240
  %315 = sext i32 %314 to i64
  %316 = invoke i32 @libxsmm_isqrt_u64(i64 noundef %315)
          to label %317 unwind label %429

317:                                              ; preds = %311
  br label %318

318:                                              ; preds = %317, %309
  %319 = phi i32 [ %310, %309 ], [ %316, %317 ]
  store i32 %319, ptr %24, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #14
  %320 = load i32, ptr %23, align 4, !tbaa !5
  %321 = load i32, ptr %20, align 4, !tbaa !5
  %322 = load i32, ptr %21, align 4, !tbaa !5
  %323 = add nsw i32 %321, %322
  %324 = mul nsw i32 %320, %323
  %325 = load i32, ptr %23, align 4, !tbaa !5
  %326 = load i32, ptr %24, align 4, !tbaa !5
  %327 = sub nsw i32 %326, 1
  %328 = add nsw i32 %325, %327
  %329 = load i32, ptr %24, align 4, !tbaa !5
  %330 = sdiv i32 %328, %329
  %331 = load i32, ptr %17, align 4, !tbaa !5
  %332 = mul nsw i32 %330, %331
  %333 = mul nsw i32 %332, 2
  %334 = add nsw i32 %324, %333
  %335 = sext i32 %334 to i64
  %336 = mul i64 %335, 8
  store i64 %336, ptr %25, align 8, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #14
  %337 = load i32, ptr %23, align 4, !tbaa !5
  %338 = sitofp i32 %337 to double
  %339 = fmul double 2.000000e+00, %338
  %340 = load i32, ptr %7, align 4, !tbaa !5
  %341 = sitofp i32 %340 to double
  %342 = fmul double %339, %341
  %343 = load i32, ptr %12, align 4, !tbaa !5
  %344 = sitofp i32 %343 to double
  %345 = fmul double %342, %344
  %346 = load i32, ptr %11, align 4, !tbaa !5
  %347 = sitofp i32 %346 to double
  %348 = fmul double %345, %347
  %349 = fmul double %348, 1.000000e-09
  store double %349, ptr %26, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #14
  %350 = load i32, ptr %23, align 4, !tbaa !5
  %351 = sitofp i32 %350 to double
  %352 = fdiv double 1.000000e+00, %351
  store double %352, ptr %27, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 6, ptr %28) #14
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %28, ptr align 1 @__const.main.ops, i64 6, i1 false)
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #14
  %353 = call ptr @getenv(ptr noundef @.str.1) #14
  store ptr %353, ptr %29, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #14
  %354 = load ptr, ptr %29, align 8, !tbaa !9
  %355 = icmp eq ptr null, %354
  br i1 %355, label %356, label %357

356:                                              ; preds = %318
  br label %360

357:                                              ; preds = %318
  %358 = load ptr, ptr %29, align 8, !tbaa !9
  %359 = call double @atof(ptr noundef %358) #15
  br label %360

360:                                              ; preds = %357, %356
  %361 = phi double [ 0.000000e+00, %356 ], [ %359, %357 ]
  %362 = fcmp ole double 0.000000e+00, %361
  br i1 %362, label %363, label %372

363:                                              ; preds = %360
  %364 = load ptr, ptr %29, align 8, !tbaa !9
  %365 = icmp eq ptr null, %364
  br i1 %365, label %366, label %367

366:                                              ; preds = %363
  br label %370

367:                                              ; preds = %363
  %368 = load ptr, ptr %29, align 8, !tbaa !9
  %369 = call double @atof(ptr noundef %368) #15
  br label %370

370:                                              ; preds = %367, %366
  %371 = phi double [ 0.000000e+00, %366 ], [ %369, %367 ]
  br label %382

372:                                              ; preds = %360
  %373 = load ptr, ptr %29, align 8, !tbaa !9
  %374 = icmp eq ptr null, %373
  br i1 %374, label %375, label %376

375:                                              ; preds = %372
  br label %379

376:                                              ; preds = %372
  %377 = load ptr, ptr %29, align 8, !tbaa !9
  %378 = call double @atof(ptr noundef %377) #15
  br label %379

379:                                              ; preds = %376, %375
  %380 = phi double [ 0.000000e+00, %375 ], [ %378, %376 ]
  %381 = fneg double %380
  br label %382

382:                                              ; preds = %379, %370
  %383 = phi double [ %371, %370 ], [ %381, %379 ]
  store double %383, ptr %30, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 24, ptr %31) #14
  %384 = load i32, ptr %23, align 4, !tbaa !5
  %385 = load i32, ptr %20, align 4, !tbaa !5
  %386 = mul nsw i32 %384, %385
  %387 = add nsw i32 %386, 8
  %388 = sub nsw i32 %387, 1
  %389 = load i32, ptr %23, align 4, !tbaa !5
  %390 = load i32, ptr %21, align 4, !tbaa !5
  %391 = mul nsw i32 %389, %390
  %392 = add nsw i32 %391, 8
  %393 = sub nsw i32 %392, 1
  %394 = load i32, ptr %17, align 4, !tbaa !5
  invoke void @_ZZ4mainEN4raiiC2Eiii(ptr noundef nonnull align 8 dereferenceable(24) %31, i32 noundef %388, i32 noundef %393, i32 noundef %394)
          to label %395 unwind label %433

395:                                              ; preds = %382
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #14
  %396 = getelementptr inbounds %struct.raii, ptr %31, i32 0, i32 0
  %397 = load ptr, ptr %396, align 8, !tbaa !16
  %398 = getelementptr inbounds %struct.raii, ptr %31, i32 0, i32 0
  %399 = load ptr, ptr %398, align 8, !tbaa !16
  %400 = ptrtoint ptr %399 to i64
  %401 = add i64 %400, 63
  %402 = and i64 %401, -64
  %403 = getelementptr inbounds %struct.raii, ptr %31, i32 0, i32 0
  %404 = load ptr, ptr %403, align 8, !tbaa !16
  %405 = ptrtoint ptr %404 to i64
  %406 = sub i64 %402, %405
  %407 = udiv i64 %406, 8
  %408 = getelementptr inbounds double, ptr %397, i64 %407
  store ptr %408, ptr %32, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #14
  %409 = getelementptr inbounds %struct.raii, ptr %31, i32 0, i32 1
  %410 = load ptr, ptr %409, align 8, !tbaa !18
  %411 = getelementptr inbounds %struct.raii, ptr %31, i32 0, i32 1
  %412 = load ptr, ptr %411, align 8, !tbaa !18
  %413 = ptrtoint ptr %412 to i64
  %414 = add i64 %413, 63
  %415 = and i64 %414, -64
  %416 = getelementptr inbounds %struct.raii, ptr %31, i32 0, i32 1
  %417 = load ptr, ptr %416, align 8, !tbaa !18
  %418 = ptrtoint ptr %417 to i64
  %419 = sub i64 %415, %418
  %420 = udiv i64 %419, 8
  %421 = getelementptr inbounds double, ptr %410, i64 %420
  store ptr %421, ptr %33, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #14
  %422 = getelementptr inbounds %struct.raii, ptr %31, i32 0, i32 2
  %423 = load ptr, ptr %422, align 8, !tbaa !19
  store ptr %423, ptr %34, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #14
  store i32 0, ptr %35, align 4, !tbaa !5
  br label %424

424:                                              ; preds = %730, %395
  %425 = load i32, ptr %35, align 4, !tbaa !5
  %426 = load i32, ptr %23, align 4, !tbaa !5
  %427 = icmp slt i32 %425, %426
  br i1 %427, label %437, label %428

428:                                              ; preds = %424
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #14
  br label %734

429:                                              ; preds = %311
  %430 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %431 = extractvalue { ptr, i32 } %430, 0
  store ptr %431, ptr %18, align 8
  %432 = extractvalue { ptr, i32 } %430, 1
  store i32 %432, ptr %19, align 4
  br label %1544

433:                                              ; preds = %382
  %434 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %435 = extractvalue { ptr, i32 } %434, 0
  store ptr %435, ptr %18, align 8
  %436 = extractvalue { ptr, i32 } %434, 1
  store i32 %436, ptr %19, align 4
  br label %1543

437:                                              ; preds = %424
  br label %438

438:                                              ; preds = %437
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #14
  %439 = load i32, ptr %35, align 4, !tbaa !5
  %440 = add nsw i32 42, %439
  %441 = sitofp i32 %440 to double
  store double %441, ptr %36, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #14
  %442 = load double, ptr %36, align 8, !tbaa !12
  %443 = load double, ptr %27, align 8, !tbaa !12
  %444 = load double, ptr %27, align 8, !tbaa !12
  %445 = call double @llvm.fmuladd.f64(double %442, double %443, double %444)
  store double %445, ptr %37, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 4, ptr %38) #14
  %446 = load i32, ptr %7, align 4, !tbaa !5
  store i32 %446, ptr %38, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %39) #14
  %447 = load i32, ptr %11, align 4, !tbaa !5
  store i32 %447, ptr %39, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %40) #14
  %448 = load i32, ptr %7, align 4, !tbaa !5
  store i32 %448, ptr %40, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %41) #14
  store i32 0, ptr %41, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %42) #14
  store i32 0, ptr %42, align 4, !tbaa !5
  %449 = load double, ptr %36, align 8, !tbaa !12
  %450 = fcmp une double 0.000000e+00, %449
  br i1 %450, label %451, label %518

451:                                              ; preds = %438
  store i32 0, ptr %41, align 4, !tbaa !5
  br label %452

452:                                              ; preds = %514, %451
  %453 = load i32, ptr %41, align 4, !tbaa !5
  %454 = load i32, ptr %39, align 4, !tbaa !5
  %455 = icmp slt i32 %453, %454
  br i1 %455, label %456, label %517

456:                                              ; preds = %452
  store i32 0, ptr %42, align 4, !tbaa !5
  br label %457

457:                                              ; preds = %486, %456
  %458 = load i32, ptr %42, align 4, !tbaa !5
  %459 = load i32, ptr %38, align 4, !tbaa !5
  %460 = icmp slt i32 %458, %459
  br i1 %460, label %461, label %489

461:                                              ; preds = %457
  call void @llvm.lifetime.start.p0(i64 4, ptr %43) #14
  %462 = load i32, ptr %41, align 4, !tbaa !5
  %463 = load i32, ptr %40, align 4, !tbaa !5
  %464 = mul nsw i32 %462, %463
  %465 = load i32, ptr %42, align 4, !tbaa !5
  %466 = add nsw i32 %464, %465
  store i32 %466, ptr %43, align 4, !tbaa !5
  %467 = load double, ptr %37, align 8, !tbaa !12
  %468 = load i32, ptr %41, align 4, !tbaa !5
  %469 = sitofp i32 %468 to double
  %470 = load i32, ptr %38, align 4, !tbaa !5
  %471 = sitofp i32 %470 to double
  %472 = call double @llvm.fmuladd.f64(double %469, double %471, double 1.000000e+00)
  %473 = load i32, ptr %42, align 4, !tbaa !5
  %474 = sitofp i32 %473 to double
  %475 = fadd double %472, %474
  %476 = fmul double %467, %475
  %477 = load ptr, ptr %32, align 8, !tbaa !9
  %478 = load i32, ptr %35, align 4, !tbaa !5
  %479 = load i32, ptr %20, align 4, !tbaa !5
  %480 = mul nsw i32 %478, %479
  %481 = sext i32 %480 to i64
  %482 = getelementptr inbounds double, ptr %477, i64 %481
  %483 = load i32, ptr %43, align 4, !tbaa !5
  %484 = sext i32 %483 to i64
  %485 = getelementptr inbounds double, ptr %482, i64 %484
  store double %476, ptr %485, align 8, !tbaa !12
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #14
  br label %486

486:                                              ; preds = %461
  %487 = load i32, ptr %42, align 4, !tbaa !5
  %488 = add nsw i32 %487, 1
  store i32 %488, ptr %42, align 4, !tbaa !5
  br label %457, !llvm.loop !20

489:                                              ; preds = %457
  br label %490

490:                                              ; preds = %510, %489
  %491 = load i32, ptr %42, align 4, !tbaa !5
  %492 = load i32, ptr %40, align 4, !tbaa !5
  %493 = icmp slt i32 %491, %492
  br i1 %493, label %494, label %513

494:                                              ; preds = %490
  call void @llvm.lifetime.start.p0(i64 4, ptr %44) #14
  %495 = load i32, ptr %41, align 4, !tbaa !5
  %496 = load i32, ptr %40, align 4, !tbaa !5
  %497 = mul nsw i32 %495, %496
  %498 = load i32, ptr %42, align 4, !tbaa !5
  %499 = add nsw i32 %497, %498
  store i32 %499, ptr %44, align 4, !tbaa !5
  %500 = load double, ptr %36, align 8, !tbaa !12
  %501 = load ptr, ptr %32, align 8, !tbaa !9
  %502 = load i32, ptr %35, align 4, !tbaa !5
  %503 = load i32, ptr %20, align 4, !tbaa !5
  %504 = mul nsw i32 %502, %503
  %505 = sext i32 %504 to i64
  %506 = getelementptr inbounds double, ptr %501, i64 %505
  %507 = load i32, ptr %44, align 4, !tbaa !5
  %508 = sext i32 %507 to i64
  %509 = getelementptr inbounds double, ptr %506, i64 %508
  store double %500, ptr %509, align 8, !tbaa !12
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #14
  br label %510

510:                                              ; preds = %494
  %511 = load i32, ptr %42, align 4, !tbaa !5
  %512 = add nsw i32 %511, 1
  store i32 %512, ptr %42, align 4, !tbaa !5
  br label %490, !llvm.loop !22

513:                                              ; preds = %490
  br label %514

514:                                              ; preds = %513
  %515 = load i32, ptr %41, align 4, !tbaa !5
  %516 = add nsw i32 %515, 1
  store i32 %516, ptr %41, align 4, !tbaa !5
  br label %452, !llvm.loop !23

517:                                              ; preds = %452
  br label %581

518:                                              ; preds = %438
  call void @llvm.lifetime.start.p0(i64 4, ptr %45) #14
  %519 = load i32, ptr %39, align 4, !tbaa !5
  %520 = load i32, ptr %40, align 4, !tbaa !5
  %521 = mul nsw i32 %519, %520
  store i32 %521, ptr %45, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %46) #14
  %522 = load i32, ptr %45, align 4, !tbaa !5
  %523 = add nsw i32 %522, 1
  %524 = sdiv i32 %523, 2
  %525 = sitofp i32 %524 to double
  store double %525, ptr %46, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 8, ptr %47) #14
  %526 = load double, ptr %27, align 8, !tbaa !12
  %527 = load double, ptr %46, align 8, !tbaa !12
  %528 = fdiv double %526, %527
  store double %528, ptr %47, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 8, ptr %48) #14
  %529 = load i32, ptr %45, align 4, !tbaa !5
  %530 = sext i32 %529 to i64
  %531 = invoke i64 @libxsmm_coprime2(i64 noundef %530)
          to label %532 unwind label %572

532:                                              ; preds = %518
  store i64 %531, ptr %48, align 8, !tbaa !14
  store i32 0, ptr %41, align 4, !tbaa !5
  br label %533

533:                                              ; preds = %577, %532
  %534 = load i32, ptr %41, align 4, !tbaa !5
  %535 = load i32, ptr %39, align 4, !tbaa !5
  %536 = icmp slt i32 %534, %535
  br i1 %536, label %537, label %580

537:                                              ; preds = %533
  store i32 0, ptr %42, align 4, !tbaa !5
  br label %538

538:                                              ; preds = %569, %537
  %539 = load i32, ptr %42, align 4, !tbaa !5
  %540 = load i32, ptr %40, align 4, !tbaa !5
  %541 = icmp slt i32 %539, %540
  br i1 %541, label %542, label %576

542:                                              ; preds = %538
  call void @llvm.lifetime.start.p0(i64 4, ptr %49) #14
  %543 = load i32, ptr %41, align 4, !tbaa !5
  %544 = load i32, ptr %40, align 4, !tbaa !5
  %545 = mul nsw i32 %543, %544
  %546 = load i32, ptr %42, align 4, !tbaa !5
  %547 = add nsw i32 %545, %546
  store i32 %547, ptr %49, align 4, !tbaa !5
  %548 = load double, ptr %47, align 8, !tbaa !12
  %549 = load i64, ptr %48, align 8, !tbaa !14
  %550 = load i32, ptr %49, align 4, !tbaa !5
  %551 = sext i32 %550 to i64
  %552 = mul i64 %549, %551
  %553 = load i32, ptr %45, align 4, !tbaa !5
  %554 = sext i32 %553 to i64
  %555 = urem i64 %552, %554
  %556 = uitofp i64 %555 to double
  %557 = load double, ptr %46, align 8, !tbaa !12
  %558 = fsub double %556, %557
  %559 = fmul double %548, %558
  %560 = load ptr, ptr %32, align 8, !tbaa !9
  %561 = load i32, ptr %35, align 4, !tbaa !5
  %562 = load i32, ptr %20, align 4, !tbaa !5
  %563 = mul nsw i32 %561, %562
  %564 = sext i32 %563 to i64
  %565 = getelementptr inbounds double, ptr %560, i64 %564
  %566 = load i32, ptr %49, align 4, !tbaa !5
  %567 = sext i32 %566 to i64
  %568 = getelementptr inbounds double, ptr %565, i64 %567
  store double %559, ptr %568, align 8, !tbaa !12
  call void @llvm.lifetime.end.p0(i64 4, ptr %49) #14
  br label %569

569:                                              ; preds = %542
  %570 = load i32, ptr %42, align 4, !tbaa !5
  %571 = add nsw i32 %570, 1
  store i32 %571, ptr %42, align 4, !tbaa !5
  br label %538, !llvm.loop !24

572:                                              ; preds = %518
  %573 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %574 = extractvalue { ptr, i32 } %573, 0
  store ptr %574, ptr %18, align 8
  %575 = extractvalue { ptr, i32 } %573, 1
  store i32 %575, ptr %19, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #14
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #14
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #14
  call void @llvm.lifetime.end.p0(i64 4, ptr %45) #14
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #14
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #14
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #14
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #14
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #14
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #14
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #14
  br label %733

576:                                              ; preds = %538
  br label %577

577:                                              ; preds = %576
  %578 = load i32, ptr %41, align 4, !tbaa !5
  %579 = add nsw i32 %578, 1
  store i32 %579, ptr %41, align 4, !tbaa !5
  br label %533, !llvm.loop !25

580:                                              ; preds = %533
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #14
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #14
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #14
  call void @llvm.lifetime.end.p0(i64 4, ptr %45) #14
  br label %581

581:                                              ; preds = %580, %517
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #14
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #14
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #14
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #14
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #14
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #14
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #14
  br label %582

582:                                              ; preds = %581
  br label %583

583:                                              ; preds = %582
  br label %584

584:                                              ; preds = %583
  call void @llvm.lifetime.start.p0(i64 8, ptr %50) #14
  %585 = load i32, ptr %35, align 4, !tbaa !5
  %586 = add nsw i32 24, %585
  %587 = sitofp i32 %586 to double
  store double %587, ptr %50, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 8, ptr %51) #14
  %588 = load double, ptr %50, align 8, !tbaa !12
  %589 = load double, ptr %27, align 8, !tbaa !12
  %590 = load double, ptr %27, align 8, !tbaa !12
  %591 = call double @llvm.fmuladd.f64(double %588, double %589, double %590)
  store double %591, ptr %51, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 4, ptr %52) #14
  %592 = load i32, ptr %11, align 4, !tbaa !5
  store i32 %592, ptr %52, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %53) #14
  %593 = load i32, ptr %12, align 4, !tbaa !5
  store i32 %593, ptr %53, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %54) #14
  %594 = load i32, ptr %11, align 4, !tbaa !5
  store i32 %594, ptr %54, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %55) #14
  store i32 0, ptr %55, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %56) #14
  store i32 0, ptr %56, align 4, !tbaa !5
  %595 = load double, ptr %50, align 8, !tbaa !12
  %596 = fcmp une double 0.000000e+00, %595
  br i1 %596, label %597, label %664

597:                                              ; preds = %584
  store i32 0, ptr %55, align 4, !tbaa !5
  br label %598

598:                                              ; preds = %660, %597
  %599 = load i32, ptr %55, align 4, !tbaa !5
  %600 = load i32, ptr %53, align 4, !tbaa !5
  %601 = icmp slt i32 %599, %600
  br i1 %601, label %602, label %663

602:                                              ; preds = %598
  store i32 0, ptr %56, align 4, !tbaa !5
  br label %603

603:                                              ; preds = %632, %602
  %604 = load i32, ptr %56, align 4, !tbaa !5
  %605 = load i32, ptr %52, align 4, !tbaa !5
  %606 = icmp slt i32 %604, %605
  br i1 %606, label %607, label %635

607:                                              ; preds = %603
  call void @llvm.lifetime.start.p0(i64 4, ptr %57) #14
  %608 = load i32, ptr %55, align 4, !tbaa !5
  %609 = load i32, ptr %54, align 4, !tbaa !5
  %610 = mul nsw i32 %608, %609
  %611 = load i32, ptr %56, align 4, !tbaa !5
  %612 = add nsw i32 %610, %611
  store i32 %612, ptr %57, align 4, !tbaa !5
  %613 = load double, ptr %51, align 8, !tbaa !12
  %614 = load i32, ptr %55, align 4, !tbaa !5
  %615 = sitofp i32 %614 to double
  %616 = load i32, ptr %52, align 4, !tbaa !5
  %617 = sitofp i32 %616 to double
  %618 = call double @llvm.fmuladd.f64(double %615, double %617, double 1.000000e+00)
  %619 = load i32, ptr %56, align 4, !tbaa !5
  %620 = sitofp i32 %619 to double
  %621 = fadd double %618, %620
  %622 = fmul double %613, %621
  %623 = load ptr, ptr %33, align 8, !tbaa !9
  %624 = load i32, ptr %35, align 4, !tbaa !5
  %625 = load i32, ptr %21, align 4, !tbaa !5
  %626 = mul nsw i32 %624, %625
  %627 = sext i32 %626 to i64
  %628 = getelementptr inbounds double, ptr %623, i64 %627
  %629 = load i32, ptr %57, align 4, !tbaa !5
  %630 = sext i32 %629 to i64
  %631 = getelementptr inbounds double, ptr %628, i64 %630
  store double %622, ptr %631, align 8, !tbaa !12
  call void @llvm.lifetime.end.p0(i64 4, ptr %57) #14
  br label %632

632:                                              ; preds = %607
  %633 = load i32, ptr %56, align 4, !tbaa !5
  %634 = add nsw i32 %633, 1
  store i32 %634, ptr %56, align 4, !tbaa !5
  br label %603, !llvm.loop !26

635:                                              ; preds = %603
  br label %636

636:                                              ; preds = %656, %635
  %637 = load i32, ptr %56, align 4, !tbaa !5
  %638 = load i32, ptr %54, align 4, !tbaa !5
  %639 = icmp slt i32 %637, %638
  br i1 %639, label %640, label %659

640:                                              ; preds = %636
  call void @llvm.lifetime.start.p0(i64 4, ptr %58) #14
  %641 = load i32, ptr %55, align 4, !tbaa !5
  %642 = load i32, ptr %54, align 4, !tbaa !5
  %643 = mul nsw i32 %641, %642
  %644 = load i32, ptr %56, align 4, !tbaa !5
  %645 = add nsw i32 %643, %644
  store i32 %645, ptr %58, align 4, !tbaa !5
  %646 = load double, ptr %50, align 8, !tbaa !12
  %647 = load ptr, ptr %33, align 8, !tbaa !9
  %648 = load i32, ptr %35, align 4, !tbaa !5
  %649 = load i32, ptr %21, align 4, !tbaa !5
  %650 = mul nsw i32 %648, %649
  %651 = sext i32 %650 to i64
  %652 = getelementptr inbounds double, ptr %647, i64 %651
  %653 = load i32, ptr %58, align 4, !tbaa !5
  %654 = sext i32 %653 to i64
  %655 = getelementptr inbounds double, ptr %652, i64 %654
  store double %646, ptr %655, align 8, !tbaa !12
  call void @llvm.lifetime.end.p0(i64 4, ptr %58) #14
  br label %656

656:                                              ; preds = %640
  %657 = load i32, ptr %56, align 4, !tbaa !5
  %658 = add nsw i32 %657, 1
  store i32 %658, ptr %56, align 4, !tbaa !5
  br label %636, !llvm.loop !27

659:                                              ; preds = %636
  br label %660

660:                                              ; preds = %659
  %661 = load i32, ptr %55, align 4, !tbaa !5
  %662 = add nsw i32 %661, 1
  store i32 %662, ptr %55, align 4, !tbaa !5
  br label %598, !llvm.loop !28

663:                                              ; preds = %598
  br label %727

664:                                              ; preds = %584
  call void @llvm.lifetime.start.p0(i64 4, ptr %59) #14
  %665 = load i32, ptr %53, align 4, !tbaa !5
  %666 = load i32, ptr %54, align 4, !tbaa !5
  %667 = mul nsw i32 %665, %666
  store i32 %667, ptr %59, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %60) #14
  %668 = load i32, ptr %59, align 4, !tbaa !5
  %669 = add nsw i32 %668, 1
  %670 = sdiv i32 %669, 2
  %671 = sitofp i32 %670 to double
  store double %671, ptr %60, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 8, ptr %61) #14
  %672 = load double, ptr %27, align 8, !tbaa !12
  %673 = load double, ptr %60, align 8, !tbaa !12
  %674 = fdiv double %672, %673
  store double %674, ptr %61, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 8, ptr %62) #14
  %675 = load i32, ptr %59, align 4, !tbaa !5
  %676 = sext i32 %675 to i64
  %677 = invoke i64 @libxsmm_coprime2(i64 noundef %676)
          to label %678 unwind label %718

678:                                              ; preds = %664
  store i64 %677, ptr %62, align 8, !tbaa !14
  store i32 0, ptr %55, align 4, !tbaa !5
  br label %679

679:                                              ; preds = %723, %678
  %680 = load i32, ptr %55, align 4, !tbaa !5
  %681 = load i32, ptr %53, align 4, !tbaa !5
  %682 = icmp slt i32 %680, %681
  br i1 %682, label %683, label %726

683:                                              ; preds = %679
  store i32 0, ptr %56, align 4, !tbaa !5
  br label %684

684:                                              ; preds = %715, %683
  %685 = load i32, ptr %56, align 4, !tbaa !5
  %686 = load i32, ptr %54, align 4, !tbaa !5
  %687 = icmp slt i32 %685, %686
  br i1 %687, label %688, label %722

688:                                              ; preds = %684
  call void @llvm.lifetime.start.p0(i64 4, ptr %63) #14
  %689 = load i32, ptr %55, align 4, !tbaa !5
  %690 = load i32, ptr %54, align 4, !tbaa !5
  %691 = mul nsw i32 %689, %690
  %692 = load i32, ptr %56, align 4, !tbaa !5
  %693 = add nsw i32 %691, %692
  store i32 %693, ptr %63, align 4, !tbaa !5
  %694 = load double, ptr %61, align 8, !tbaa !12
  %695 = load i64, ptr %62, align 8, !tbaa !14
  %696 = load i32, ptr %63, align 4, !tbaa !5
  %697 = sext i32 %696 to i64
  %698 = mul i64 %695, %697
  %699 = load i32, ptr %59, align 4, !tbaa !5
  %700 = sext i32 %699 to i64
  %701 = urem i64 %698, %700
  %702 = uitofp i64 %701 to double
  %703 = load double, ptr %60, align 8, !tbaa !12
  %704 = fsub double %702, %703
  %705 = fmul double %694, %704
  %706 = load ptr, ptr %33, align 8, !tbaa !9
  %707 = load i32, ptr %35, align 4, !tbaa !5
  %708 = load i32, ptr %21, align 4, !tbaa !5
  %709 = mul nsw i32 %707, %708
  %710 = sext i32 %709 to i64
  %711 = getelementptr inbounds double, ptr %706, i64 %710
  %712 = load i32, ptr %63, align 4, !tbaa !5
  %713 = sext i32 %712 to i64
  %714 = getelementptr inbounds double, ptr %711, i64 %713
  store double %705, ptr %714, align 8, !tbaa !12
  call void @llvm.lifetime.end.p0(i64 4, ptr %63) #14
  br label %715

715:                                              ; preds = %688
  %716 = load i32, ptr %56, align 4, !tbaa !5
  %717 = add nsw i32 %716, 1
  store i32 %717, ptr %56, align 4, !tbaa !5
  br label %684, !llvm.loop !29

718:                                              ; preds = %664
  %719 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %720 = extractvalue { ptr, i32 } %719, 0
  store ptr %720, ptr %18, align 8
  %721 = extractvalue { ptr, i32 } %719, 1
  store i32 %721, ptr %19, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %62) #14
  call void @llvm.lifetime.end.p0(i64 8, ptr %61) #14
  call void @llvm.lifetime.end.p0(i64 8, ptr %60) #14
  call void @llvm.lifetime.end.p0(i64 4, ptr %59) #14
  call void @llvm.lifetime.end.p0(i64 4, ptr %56) #14
  call void @llvm.lifetime.end.p0(i64 4, ptr %55) #14
  call void @llvm.lifetime.end.p0(i64 4, ptr %54) #14
  call void @llvm.lifetime.end.p0(i64 4, ptr %53) #14
  call void @llvm.lifetime.end.p0(i64 4, ptr %52) #14
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #14
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #14
  br label %733

722:                                              ; preds = %684
  br label %723

723:                                              ; preds = %722
  %724 = load i32, ptr %55, align 4, !tbaa !5
  %725 = add nsw i32 %724, 1
  store i32 %725, ptr %55, align 4, !tbaa !5
  br label %679, !llvm.loop !30

726:                                              ; preds = %679
  call void @llvm.lifetime.end.p0(i64 8, ptr %62) #14
  call void @llvm.lifetime.end.p0(i64 8, ptr %61) #14
  call void @llvm.lifetime.end.p0(i64 8, ptr %60) #14
  call void @llvm.lifetime.end.p0(i64 4, ptr %59) #14
  br label %727

727:                                              ; preds = %726, %663
  call void @llvm.lifetime.end.p0(i64 4, ptr %56) #14
  call void @llvm.lifetime.end.p0(i64 4, ptr %55) #14
  call void @llvm.lifetime.end.p0(i64 4, ptr %54) #14
  call void @llvm.lifetime.end.p0(i64 4, ptr %53) #14
  call void @llvm.lifetime.end.p0(i64 4, ptr %52) #14
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #14
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #14
  br label %728

728:                                              ; preds = %727
  br label %729

729:                                              ; preds = %728
  br label %730

730:                                              ; preds = %729
  %731 = load i32, ptr %35, align 4, !tbaa !5
  %732 = add nsw i32 %731, 1
  store i32 %732, ptr %35, align 4, !tbaa !5
  br label %424, !llvm.loop !31

733:                                              ; preds = %718, %572
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #14
  br label %1542

734:                                              ; preds = %428
  invoke void @libxsmm_init()
          to label %735 unwind label %788

735:                                              ; preds = %734
  %736 = load ptr, ptr @stdout, align 8, !tbaa !9
  %737 = load i32, ptr %7, align 4, !tbaa !5
  %738 = sext i32 %737 to i64
  %739 = load i32, ptr %12, align 4, !tbaa !5
  %740 = sext i32 %739 to i64
  %741 = load i32, ptr %11, align 4, !tbaa !5
  %742 = sext i32 %741 to i64
  %743 = load i32, ptr %23, align 4, !tbaa !5
  %744 = sext i32 %743 to i64
  %745 = load i32, ptr %23, align 4, !tbaa !5
  %746 = load i32, ptr %20, align 4, !tbaa !5
  %747 = load i32, ptr %21, align 4, !tbaa !5
  %748 = add nsw i32 %746, %747
  %749 = mul nsw i32 %745, %748
  %750 = sext i32 %749 to i64
  %751 = mul i64 %750, 8
  %752 = uitofp i64 %751 to double
  %753 = fmul double 1.000000e+00, %752
  %754 = fdiv double %753, 0x4130000000000000
  %755 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %736, ptr noundef @.str.2, i64 noundef %738, i64 noundef %740, i64 noundef %742, i64 noundef %744, double noundef %754, ptr noundef @.str.3) #14
  call void @llvm.lifetime.start.p0(i64 8, ptr %64) #14
  %756 = load double, ptr %30, align 8, !tbaa !12
  %757 = fcmp oeq double 0.000000e+00, %756
  br i1 %757, label %758, label %759

758:                                              ; preds = %735
  br label %761

759:                                              ; preds = %735
  %760 = load i32, ptr %17, align 4, !tbaa !5
  br label %761

761:                                              ; preds = %759, %758
  %762 = phi i32 [ 0, %758 ], [ %760, %759 ]
  invoke void @_ZZ4mainEN11raii_expectC2Ei(ptr noundef nonnull align 8 dereferenceable(8) %64, i32 noundef %762)
          to label %763 unwind label %792

763:                                              ; preds = %761
  call void @llvm.lifetime.start.p0(i64 8, ptr %65) #14
  %764 = getelementptr inbounds %struct.raii_expect, ptr %64, i32 0, i32 0
  %765 = load ptr, ptr %764, align 8, !tbaa !32
  %766 = icmp eq ptr null, %765
  br i1 %766, label %767, label %769

767:                                              ; preds = %763
  %768 = load ptr, ptr %34, align 8, !tbaa !9
  br label %772

769:                                              ; preds = %763
  %770 = getelementptr inbounds %struct.raii_expect, ptr %64, i32 0, i32 0
  %771 = load ptr, ptr %770, align 8, !tbaa !32
  br label %772

772:                                              ; preds = %769, %767
  %773 = phi ptr [ %768, %767 ], [ %771, %769 ]
  store ptr %773, ptr %65, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 192, ptr %66) #14
  call void @llvm.lifetime.start.p0(i64 192, ptr %67) #14
  call void @llvm.lifetime.start.p0(i64 8, ptr %68) #14
  store double 0.000000e+00, ptr %68, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 8, ptr %69) #14
  %774 = load i32, ptr %7, align 4, !tbaa !5
  %775 = load i32, ptr %12, align 4, !tbaa !5
  %776 = load i32, ptr %11, align 4, !tbaa !5
  invoke void @_ZN18libxsmm_mmfunctionIddLin1EEC2Eiiiii(ptr noundef nonnull align 8 dereferenceable(8) %69, i32 noundef 0, i32 noundef %774, i32 noundef %775, i32 noundef %776, i32 noundef -1)
          to label %777 unwind label %796

777:                                              ; preds = %772
  invoke void @libxsmm_matdiff_clear(ptr noundef %67)
          to label %778 unwind label %796

778:                                              ; preds = %777
  %779 = load ptr, ptr %65, align 8, !tbaa !9
  %780 = load i32, ptr %17, align 4, !tbaa !5
  %781 = invoke noundef ptr @_ZSt6fill_nIPdidET_S1_T0_RKT1_(ptr noundef %779, i32 noundef %780, ptr noundef nonnull align 8 dereferenceable(8) %68)
          to label %782 unwind label %796

782:                                              ; preds = %778
  call void @llvm.lifetime.start.p0(i64 4, ptr %70) #14
  store i32 0, ptr %70, align 4, !tbaa !5
  br label %783

783:                                              ; preds = %860, %782
  %784 = load i32, ptr %70, align 4, !tbaa !5
  %785 = load i32, ptr %23, align 4, !tbaa !5
  %786 = icmp slt i32 %784, %785
  br i1 %786, label %800, label %787

787:                                              ; preds = %783
  store i32 39, ptr %71, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %70) #14
  br label %869

788:                                              ; preds = %734
  %789 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %790 = extractvalue { ptr, i32 } %789, 0
  store ptr %790, ptr %18, align 8
  %791 = extractvalue { ptr, i32 } %789, 1
  store i32 %791, ptr %19, align 4
  br label %1542

792:                                              ; preds = %761
  %793 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %794 = extractvalue { ptr, i32 } %793, 0
  store ptr %794, ptr %18, align 8
  %795 = extractvalue { ptr, i32 } %793, 1
  store i32 %795, ptr %19, align 4
  br label %1541

796:                                              ; preds = %1519, %1367, %1363, %1219, %1011, %869, %778, %777, %772
  %797 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %798 = extractvalue { ptr, i32 } %797, 0
  store ptr %798, ptr %18, align 8
  %799 = extractvalue { ptr, i32 } %797, 1
  store i32 %799, ptr %19, align 4
  br label %1540

800:                                              ; preds = %783
  call void @llvm.lifetime.start.p0(i64 32768, ptr %72) #14
  call void @llvm.memset.p0.i64(ptr align 16 %72, i8 0, i64 32768, i1 false)
  call void @llvm.lifetime.start.p0(i64 8, ptr %73) #14
  %801 = load ptr, ptr %32, align 8, !tbaa !9
  %802 = load i32, ptr %70, align 4, !tbaa !5
  %803 = load i32, ptr %20, align 4, !tbaa !5
  %804 = mul nsw i32 %802, %803
  %805 = sext i32 %804 to i64
  %806 = getelementptr inbounds double, ptr %801, i64 %805
  store ptr %806, ptr %73, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %74) #14
  %807 = load ptr, ptr %33, align 8, !tbaa !9
  %808 = load i32, ptr %70, align 4, !tbaa !5
  %809 = load i32, ptr %21, align 4, !tbaa !5
  %810 = mul nsw i32 %808, %809
  %811 = sext i32 %810 to i64
  %812 = getelementptr inbounds double, ptr %807, i64 %811
  store ptr %812, ptr %74, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %75) #14
  store i32 0, ptr %75, align 4, !tbaa !5
  br label %813

813:                                              ; preds = %847, %800
  %814 = load i32, ptr %75, align 4, !tbaa !5
  %815 = load i32, ptr %24, align 4, !tbaa !5
  %816 = load i32, ptr %23, align 4, !tbaa !5
  %817 = load i32, ptr %70, align 4, !tbaa !5
  %818 = sub nsw i32 %816, %817
  %819 = icmp slt i32 %815, %818
  br i1 %819, label %820, label %822

820:                                              ; preds = %813
  %821 = load i32, ptr %24, align 4, !tbaa !5
  br label %826

822:                                              ; preds = %813
  %823 = load i32, ptr %23, align 4, !tbaa !5
  %824 = load i32, ptr %70, align 4, !tbaa !5
  %825 = sub nsw i32 %823, %824
  br label %826

826:                                              ; preds = %822, %820
  %827 = phi i32 [ %821, %820 ], [ %825, %822 ]
  %828 = icmp slt i32 %814, %827
  br i1 %828, label %830, label %829

829:                                              ; preds = %826
  store i32 42, ptr %71, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %75) #14
  br label %854

830:                                              ; preds = %826
  call void @llvm.lifetime.start.p0(i64 8, ptr %76) #14
  %831 = load ptr, ptr %73, align 8, !tbaa !9
  %832 = load i32, ptr %20, align 4, !tbaa !5
  %833 = sext i32 %832 to i64
  %834 = getelementptr inbounds double, ptr %831, i64 %833
  store ptr %834, ptr %76, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %77) #14
  %835 = load ptr, ptr %74, align 8, !tbaa !9
  %836 = load i32, ptr %21, align 4, !tbaa !5
  %837 = sext i32 %836 to i64
  %838 = getelementptr inbounds double, ptr %835, i64 %837
  store ptr %838, ptr %77, align 8, !tbaa !9
  %839 = invoke ptr @libxsmm_original_dgemm()
          to label %840 unwind label %850

840:                                              ; preds = %830
  %841 = load ptr, ptr %73, align 8, !tbaa !9
  %842 = load ptr, ptr %74, align 8, !tbaa !9
  %843 = getelementptr inbounds [4096 x double], ptr %72, i64 0, i64 0
  invoke void %839(ptr noundef %13, ptr noundef %14, ptr noundef %7, ptr noundef %12, ptr noundef %11, ptr noundef %15, ptr noundef %841, ptr noundef %7, ptr noundef %842, ptr noundef %11, ptr noundef %16, ptr noundef %843, ptr noundef %7)
          to label %844 unwind label %850

844:                                              ; preds = %840
  %845 = load ptr, ptr %76, align 8, !tbaa !9
  store ptr %845, ptr %73, align 8, !tbaa !9
  %846 = load ptr, ptr %77, align 8, !tbaa !9
  store ptr %846, ptr %74, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %77) #14
  call void @llvm.lifetime.end.p0(i64 8, ptr %76) #14
  br label %847

847:                                              ; preds = %844
  %848 = load i32, ptr %75, align 4, !tbaa !5
  %849 = add nsw i32 %848, 1
  store i32 %849, ptr %75, align 4, !tbaa !5
  br label %813, !llvm.loop !34

850:                                              ; preds = %840, %830
  %851 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %852 = extractvalue { ptr, i32 } %851, 0
  store ptr %852, ptr %18, align 8
  %853 = extractvalue { ptr, i32 } %851, 1
  store i32 %853, ptr %19, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %77) #14
  call void @llvm.lifetime.end.p0(i64 8, ptr %76) #14
  call void @llvm.lifetime.end.p0(i64 4, ptr %75) #14
  br label %868

854:                                              ; preds = %829
  %855 = load ptr, ptr %65, align 8, !tbaa !9
  %856 = getelementptr inbounds [4096 x double], ptr %72, i64 0, i64 0
  %857 = load i32, ptr %7, align 4, !tbaa !5
  %858 = load i32, ptr %12, align 4, !tbaa !5
  invoke void @_Z3addIdEvPT_PKS0_iii(ptr noundef %855, ptr noundef %856, i32 noundef %857, i32 noundef %858, i32 noundef 0)
          to label %859 unwind label %864

859:                                              ; preds = %854
  call void @llvm.lifetime.end.p0(i64 8, ptr %74) #14
  call void @llvm.lifetime.end.p0(i64 8, ptr %73) #14
  call void @llvm.lifetime.end.p0(i64 32768, ptr %72) #14
  br label %860

860:                                              ; preds = %859
  %861 = load i32, ptr %24, align 4, !tbaa !5
  %862 = load i32, ptr %70, align 4, !tbaa !5
  %863 = add nsw i32 %862, %861
  store i32 %863, ptr %70, align 4, !tbaa !5
  br label %783, !llvm.loop !35

864:                                              ; preds = %854
  %865 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %866 = extractvalue { ptr, i32 } %865, 0
  store ptr %866, ptr %18, align 8
  %867 = extractvalue { ptr, i32 } %865, 1
  store i32 %867, ptr %19, align 4
  br label %868

868:                                              ; preds = %864, %850
  call void @llvm.lifetime.end.p0(i64 8, ptr %74) #14
  call void @llvm.lifetime.end.p0(i64 8, ptr %73) #14
  call void @llvm.lifetime.end.p0(i64 32768, ptr %72) #14
  call void @llvm.lifetime.end.p0(i64 4, ptr %70) #14
  br label %1540

869:                                              ; preds = %787
  %870 = load ptr, ptr @stdout, align 8, !tbaa !9
  %871 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %870, ptr noundef @.str.4) #14
  %872 = load ptr, ptr %34, align 8, !tbaa !9
  %873 = load i32, ptr %17, align 4, !tbaa !5
  %874 = invoke noundef ptr @_ZSt6fill_nIPdidET_S1_T0_RKT1_(ptr noundef %872, i32 noundef %873, ptr noundef nonnull align 8 dereferenceable(8) %68)
          to label %875 unwind label %796

875:                                              ; preds = %869
  call void @llvm.lifetime.start.p0(i64 8, ptr %78) #14
  %876 = invoke i64 @libxsmm_timer_tick()
          to label %877 unwind label %883

877:                                              ; preds = %875
  store i64 %876, ptr %78, align 8, !tbaa !36
  call void @llvm.lifetime.start.p0(i64 4, ptr %79) #14
  store i32 0, ptr %79, align 4, !tbaa !5
  br label %878

878:                                              ; preds = %947, %877
  %879 = load i32, ptr %79, align 4, !tbaa !5
  %880 = load i32, ptr %23, align 4, !tbaa !5
  %881 = icmp slt i32 %879, %880
  br i1 %881, label %887, label %882

882:                                              ; preds = %878
  store i32 45, ptr %71, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %79) #14
  br label %956

883:                                              ; preds = %875
  %884 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %885 = extractvalue { ptr, i32 } %884, 0
  store ptr %885, ptr %18, align 8
  %886 = extractvalue { ptr, i32 } %884, 1
  store i32 %886, ptr %19, align 4
  br label %1025

887:                                              ; preds = %878
  call void @llvm.lifetime.start.p0(i64 32768, ptr %80) #14
  call void @llvm.memset.p0.i64(ptr align 16 %80, i8 0, i64 32768, i1 false)
  call void @llvm.lifetime.start.p0(i64 8, ptr %81) #14
  %888 = load ptr, ptr %32, align 8, !tbaa !9
  %889 = load i32, ptr %79, align 4, !tbaa !5
  %890 = load i32, ptr %20, align 4, !tbaa !5
  %891 = mul nsw i32 %889, %890
  %892 = sext i32 %891 to i64
  %893 = getelementptr inbounds double, ptr %888, i64 %892
  store ptr %893, ptr %81, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %82) #14
  %894 = load ptr, ptr %33, align 8, !tbaa !9
  %895 = load i32, ptr %79, align 4, !tbaa !5
  %896 = load i32, ptr %21, align 4, !tbaa !5
  %897 = mul nsw i32 %895, %896
  %898 = sext i32 %897 to i64
  %899 = getelementptr inbounds double, ptr %894, i64 %898
  store ptr %899, ptr %82, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %83) #14
  store i32 0, ptr %83, align 4, !tbaa !5
  br label %900

900:                                              ; preds = %934, %887
  %901 = load i32, ptr %83, align 4, !tbaa !5
  %902 = load i32, ptr %24, align 4, !tbaa !5
  %903 = load i32, ptr %23, align 4, !tbaa !5
  %904 = load i32, ptr %79, align 4, !tbaa !5
  %905 = sub nsw i32 %903, %904
  %906 = icmp slt i32 %902, %905
  br i1 %906, label %907, label %909

907:                                              ; preds = %900
  %908 = load i32, ptr %24, align 4, !tbaa !5
  br label %913

909:                                              ; preds = %900
  %910 = load i32, ptr %23, align 4, !tbaa !5
  %911 = load i32, ptr %79, align 4, !tbaa !5
  %912 = sub nsw i32 %910, %911
  br label %913

913:                                              ; preds = %909, %907
  %914 = phi i32 [ %908, %907 ], [ %912, %909 ]
  %915 = icmp slt i32 %901, %914
  br i1 %915, label %917, label %916

916:                                              ; preds = %913
  store i32 48, ptr %71, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %83) #14
  br label %941

917:                                              ; preds = %913
  call void @llvm.lifetime.start.p0(i64 8, ptr %84) #14
  %918 = load ptr, ptr %81, align 8, !tbaa !9
  %919 = load i32, ptr %20, align 4, !tbaa !5
  %920 = sext i32 %919 to i64
  %921 = getelementptr inbounds double, ptr %918, i64 %920
  store ptr %921, ptr %84, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %85) #14
  %922 = load ptr, ptr %82, align 8, !tbaa !9
  %923 = load i32, ptr %21, align 4, !tbaa !5
  %924 = sext i32 %923 to i64
  %925 = getelementptr inbounds double, ptr %922, i64 %924
  store ptr %925, ptr %85, align 8, !tbaa !9
  %926 = invoke ptr @libxsmm_original_dgemm()
          to label %927 unwind label %937

927:                                              ; preds = %917
  %928 = load ptr, ptr %81, align 8, !tbaa !9
  %929 = load ptr, ptr %82, align 8, !tbaa !9
  %930 = getelementptr inbounds [4096 x double], ptr %80, i64 0, i64 0
  invoke void %926(ptr noundef %13, ptr noundef %14, ptr noundef %7, ptr noundef %12, ptr noundef %11, ptr noundef %15, ptr noundef %928, ptr noundef %7, ptr noundef %929, ptr noundef %11, ptr noundef %16, ptr noundef %930, ptr noundef %7)
          to label %931 unwind label %937

931:                                              ; preds = %927
  %932 = load ptr, ptr %84, align 8, !tbaa !9
  store ptr %932, ptr %81, align 8, !tbaa !9
  %933 = load ptr, ptr %85, align 8, !tbaa !9
  store ptr %933, ptr %82, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %85) #14
  call void @llvm.lifetime.end.p0(i64 8, ptr %84) #14
  br label %934

934:                                              ; preds = %931
  %935 = load i32, ptr %83, align 4, !tbaa !5
  %936 = add nsw i32 %935, 1
  store i32 %936, ptr %83, align 4, !tbaa !5
  br label %900, !llvm.loop !38

937:                                              ; preds = %927, %917
  %938 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %939 = extractvalue { ptr, i32 } %938, 0
  store ptr %939, ptr %18, align 8
  %940 = extractvalue { ptr, i32 } %938, 1
  store i32 %940, ptr %19, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %85) #14
  call void @llvm.lifetime.end.p0(i64 8, ptr %84) #14
  call void @llvm.lifetime.end.p0(i64 4, ptr %83) #14
  br label %955

941:                                              ; preds = %916
  %942 = load ptr, ptr %34, align 8, !tbaa !9
  %943 = getelementptr inbounds [4096 x double], ptr %80, i64 0, i64 0
  %944 = load i32, ptr %7, align 4, !tbaa !5
  %945 = load i32, ptr %12, align 4, !tbaa !5
  invoke void @_Z3addIdEvPT_PKS0_iii(ptr noundef %942, ptr noundef %943, i32 noundef %944, i32 noundef %945, i32 noundef 0)
          to label %946 unwind label %951

946:                                              ; preds = %941
  call void @llvm.lifetime.end.p0(i64 8, ptr %82) #14
  call void @llvm.lifetime.end.p0(i64 8, ptr %81) #14
  call void @llvm.lifetime.end.p0(i64 32768, ptr %80) #14
  br label %947

947:                                              ; preds = %946
  %948 = load i32, ptr %24, align 4, !tbaa !5
  %949 = load i32, ptr %79, align 4, !tbaa !5
  %950 = add nsw i32 %949, %948
  store i32 %950, ptr %79, align 4, !tbaa !5
  br label %878, !llvm.loop !39

951:                                              ; preds = %941
  %952 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %953 = extractvalue { ptr, i32 } %952, 0
  store ptr %953, ptr %18, align 8
  %954 = extractvalue { ptr, i32 } %952, 1
  store i32 %954, ptr %19, align 4
  br label %955

955:                                              ; preds = %951, %937
  call void @llvm.lifetime.end.p0(i64 8, ptr %82) #14
  call void @llvm.lifetime.end.p0(i64 8, ptr %81) #14
  call void @llvm.lifetime.end.p0(i64 32768, ptr %80) #14
  call void @llvm.lifetime.end.p0(i64 4, ptr %79) #14
  br label %1025

956:                                              ; preds = %882
  call void @llvm.lifetime.start.p0(i64 8, ptr %86) #14
  %957 = load i64, ptr %78, align 8, !tbaa !36
  %958 = invoke i64 @libxsmm_timer_tick()
          to label %959 unwind label %984

959:                                              ; preds = %956
  %960 = invoke double @libxsmm_timer_duration(i64 noundef %957, i64 noundef %958)
          to label %961 unwind label %984

961:                                              ; preds = %959
  store double %960, ptr %86, align 8, !tbaa !12
  %962 = load double, ptr %86, align 8, !tbaa !12
  %963 = fcmp olt double 0.000000e+00, %962
  br i1 %963, label %964, label %988

964:                                              ; preds = %961
  %965 = load ptr, ptr @stdout, align 8, !tbaa !9
  %966 = load double, ptr %26, align 8, !tbaa !12
  %967 = load double, ptr %86, align 8, !tbaa !12
  %968 = fdiv double %966, %967
  %969 = getelementptr inbounds [6 x i8], ptr %28, i64 0, i64 0
  %970 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %965, ptr noundef @.str.5, double noundef %968, ptr noundef %969) #14
  %971 = load ptr, ptr @stdout, align 8, !tbaa !9
  %972 = load i64, ptr %25, align 8, !tbaa !14
  %973 = uitofp i64 %972 to double
  %974 = load double, ptr %86, align 8, !tbaa !12
  %975 = fmul double %974, 0x41D0000000000000
  %976 = fdiv double %973, %975
  %977 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %971, ptr noundef @.str.6, double noundef %976) #14
  %978 = load ptr, ptr @stdout, align 8, !tbaa !9
  %979 = load i32, ptr %23, align 4, !tbaa !5
  %980 = sitofp i32 %979 to double
  %981 = load double, ptr %86, align 8, !tbaa !12
  %982 = fdiv double %980, %981
  %983 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %978, ptr noundef @.str.7, double noundef %982) #14
  br label %988

984:                                              ; preds = %1003, %995, %959, %956
  %985 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %986 = extractvalue { ptr, i32 } %985, 0
  store ptr %986, ptr %18, align 8
  %987 = extractvalue { ptr, i32 } %985, 1
  store i32 %987, ptr %19, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %86) #14
  br label %1025

988:                                              ; preds = %964, %961
  %989 = load ptr, ptr @stdout, align 8, !tbaa !9
  %990 = load double, ptr %86, align 8, !tbaa !12
  %991 = fmul double 1.000000e+03, %990
  %992 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %989, ptr noundef @.str.8, double noundef %991) #14
  %993 = load double, ptr %30, align 8, !tbaa !12
  %994 = fcmp oeq double 0.000000e+00, %993
  br i1 %994, label %1011, label %995

995:                                              ; preds = %988
  %996 = load i32, ptr %7, align 4, !tbaa !5
  %997 = load i32, ptr %12, align 4, !tbaa !5
  %998 = load ptr, ptr %65, align 8, !tbaa !9
  %999 = load ptr, ptr %34, align 8, !tbaa !9
  %1000 = invoke i32 @libxsmm_matdiff(ptr noundef %66, i32 noundef 0, i32 noundef %996, i32 noundef %997, ptr noundef %998, ptr noundef %999, ptr noundef null, ptr noundef null)
          to label %1001 unwind label %984

1001:                                             ; preds = %995
  %1002 = icmp eq i32 0, %1000
  br i1 %1002, label %1003, label %1011

1003:                                             ; preds = %1001
  %1004 = load ptr, ptr @stdout, align 8, !tbaa !9
  %1005 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %66, i32 0, i32 7
  %1006 = load double, ptr %1005, align 8, !tbaa !40
  %1007 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %66, i32 0, i32 5
  %1008 = load double, ptr %1007, align 8, !tbaa !42
  %1009 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %1004, ptr noundef @.str.9, double noundef %1006, double noundef %1008) #14
  invoke void @libxsmm_matdiff_reduce(ptr noundef %67, ptr noundef %66)
          to label %1010 unwind label %984

1010:                                             ; preds = %1003
  br label %1011

1011:                                             ; preds = %1010, %1001, %988
  call void @llvm.lifetime.end.p0(i64 8, ptr %86) #14
  call void @llvm.lifetime.end.p0(i64 8, ptr %78) #14
  %1012 = load ptr, ptr @stdout, align 8, !tbaa !9
  %1013 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %1012, ptr noundef @.str.10) #14
  %1014 = load ptr, ptr %34, align 8, !tbaa !9
  %1015 = load i32, ptr %17, align 4, !tbaa !5
  %1016 = invoke noundef ptr @_ZSt6fill_nIPdidET_S1_T0_RKT1_(ptr noundef %1014, i32 noundef %1015, ptr noundef nonnull align 8 dereferenceable(8) %68)
          to label %1017 unwind label %796

1017:                                             ; preds = %1011
  call void @llvm.lifetime.start.p0(i64 8, ptr %87) #14
  %1018 = invoke i64 @libxsmm_timer_tick()
          to label %1019 unwind label %1026

1019:                                             ; preds = %1017
  store i64 %1018, ptr %87, align 8, !tbaa !36
  call void @llvm.lifetime.start.p0(i64 4, ptr %88) #14
  store i32 0, ptr %88, align 4, !tbaa !5
  br label %1020

1020:                                             ; preds = %1156, %1019
  %1021 = load i32, ptr %88, align 4, !tbaa !5
  %1022 = load i32, ptr %23, align 4, !tbaa !5
  %1023 = icmp slt i32 %1021, %1022
  br i1 %1023, label %1030, label %1024

1024:                                             ; preds = %1020
  store i32 51, ptr %71, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %88) #14
  br label %1164

1025:                                             ; preds = %984, %955, %883
  call void @llvm.lifetime.end.p0(i64 8, ptr %78) #14
  br label %1540

1026:                                             ; preds = %1017
  %1027 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %1028 = extractvalue { ptr, i32 } %1027, 0
  store ptr %1028, ptr %18, align 8
  %1029 = extractvalue { ptr, i32 } %1027, 1
  store i32 %1029, ptr %19, align 4
  br label %1233

1030:                                             ; preds = %1020
  call void @llvm.lifetime.start.p0(i64 32768, ptr %89) #14
  call void @llvm.memset.p0.i64(ptr align 16 %89, i8 0, i64 32768, i1 false)
  call void @llvm.lifetime.start.p0(i64 8, ptr %90) #14
  %1031 = load ptr, ptr %32, align 8, !tbaa !9
  %1032 = load i32, ptr %88, align 4, !tbaa !5
  %1033 = load i32, ptr %20, align 4, !tbaa !5
  %1034 = mul nsw i32 %1032, %1033
  %1035 = sext i32 %1034 to i64
  %1036 = getelementptr inbounds double, ptr %1031, i64 %1035
  store ptr %1036, ptr %90, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %91) #14
  %1037 = load ptr, ptr %33, align 8, !tbaa !9
  %1038 = load i32, ptr %88, align 4, !tbaa !5
  %1039 = load i32, ptr %21, align 4, !tbaa !5
  %1040 = mul nsw i32 %1038, %1039
  %1041 = sext i32 %1040 to i64
  %1042 = getelementptr inbounds double, ptr %1037, i64 %1041
  store ptr %1042, ptr %91, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %92) #14
  store i32 0, ptr %92, align 4, !tbaa !5
  br label %1043

1043:                                             ; preds = %1147, %1030
  %1044 = load i32, ptr %92, align 4, !tbaa !5
  %1045 = load i32, ptr %24, align 4, !tbaa !5
  %1046 = load i32, ptr %23, align 4, !tbaa !5
  %1047 = load i32, ptr %88, align 4, !tbaa !5
  %1048 = sub nsw i32 %1046, %1047
  %1049 = icmp slt i32 %1045, %1048
  br i1 %1049, label %1050, label %1052

1050:                                             ; preds = %1043
  %1051 = load i32, ptr %24, align 4, !tbaa !5
  br label %1056

1052:                                             ; preds = %1043
  %1053 = load i32, ptr %23, align 4, !tbaa !5
  %1054 = load i32, ptr %88, align 4, !tbaa !5
  %1055 = sub nsw i32 %1053, %1054
  br label %1056

1056:                                             ; preds = %1052, %1050
  %1057 = phi i32 [ %1051, %1050 ], [ %1055, %1052 ]
  %1058 = icmp slt i32 %1044, %1057
  br i1 %1058, label %1060, label %1059

1059:                                             ; preds = %1056
  store i32 54, ptr %71, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %92) #14
  br label %1150

1060:                                             ; preds = %1056
  call void @llvm.lifetime.start.p0(i64 8, ptr %93) #14
  %1061 = load ptr, ptr %90, align 8, !tbaa !9
  %1062 = load i32, ptr %20, align 4, !tbaa !5
  %1063 = sext i32 %1062 to i64
  %1064 = getelementptr inbounds double, ptr %1061, i64 %1063
  store ptr %1064, ptr %93, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %94) #14
  %1065 = load ptr, ptr %91, align 8, !tbaa !9
  %1066 = load i32, ptr %21, align 4, !tbaa !5
  %1067 = sext i32 %1066 to i64
  %1068 = getelementptr inbounds double, ptr %1065, i64 %1067
  store ptr %1068, ptr %94, align 8, !tbaa !9
  br label %1069

1069:                                             ; preds = %1060
  call void @llvm.lifetime.start.p0(i64 1, ptr %95) #14
  store i8 78, ptr %95, align 1, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 1, ptr %96) #14
  store i8 78, ptr %96, align 1, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %97) #14
  %1070 = load i32, ptr %7, align 4, !tbaa !5
  store i32 %1070, ptr %97, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %98) #14
  %1071 = load i32, ptr %11, align 4, !tbaa !5
  store i32 %1071, ptr %98, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %99) #14
  %1072 = load i32, ptr %12, align 4, !tbaa !5
  store i32 %1072, ptr %99, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %100) #14
  %1073 = load i32, ptr %7, align 4, !tbaa !5
  store i32 %1073, ptr %100, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %101) #14
  %1074 = load i32, ptr %11, align 4, !tbaa !5
  store i32 %1074, ptr %101, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %102) #14
  %1075 = load i32, ptr %7, align 4, !tbaa !5
  store i32 %1075, ptr %102, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %103) #14
  %1076 = load double, ptr %15, align 8, !tbaa !12
  store double %1076, ptr %103, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 8, ptr %104) #14
  %1077 = load double, ptr %16, align 8, !tbaa !12
  store double %1077, ptr %104, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 4, ptr %105) #14
  call void @llvm.lifetime.start.p0(i64 4, ptr %106) #14
  store i32 0, ptr %106, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %107) #14
  store i32 0, ptr %106, align 4, !tbaa !5
  br label %1078

1078:                                             ; preds = %1139, %1069
  %1079 = load i32, ptr %106, align 4, !tbaa !5
  %1080 = load i32, ptr %97, align 4, !tbaa !5
  %1081 = icmp slt i32 %1079, %1080
  br i1 %1081, label %1082, label %1142

1082:                                             ; preds = %1078
  store i32 0, ptr %107, align 4, !tbaa !5
  br label %1083

1083:                                             ; preds = %1135, %1082
  %1084 = load i32, ptr %107, align 4, !tbaa !5
  %1085 = load i32, ptr %98, align 4, !tbaa !5
  %1086 = icmp slt i32 %1084, %1085
  br i1 %1086, label %1087, label %1138

1087:                                             ; preds = %1083
  store i32 0, ptr %105, align 4, !tbaa !5
  br label %1088

1088:                                             ; preds = %1131, %1087
  %1089 = load i32, ptr %105, align 4, !tbaa !5
  %1090 = load i32, ptr %99, align 4, !tbaa !5
  %1091 = icmp slt i32 %1089, %1090
  br i1 %1091, label %1092, label %1134

1092:                                             ; preds = %1088
  %1093 = load ptr, ptr %91, align 8, !tbaa !9
  %1094 = load i32, ptr %105, align 4, !tbaa !5
  %1095 = load i32, ptr %101, align 4, !tbaa !5
  %1096 = mul nsw i32 %1094, %1095
  %1097 = load i32, ptr %107, align 4, !tbaa !5
  %1098 = add nsw i32 %1096, %1097
  %1099 = sext i32 %1098 to i64
  %1100 = getelementptr inbounds double, ptr %1093, i64 %1099
  %1101 = load double, ptr %1100, align 8, !tbaa !12
  %1102 = load ptr, ptr %90, align 8, !tbaa !9
  %1103 = load i32, ptr %107, align 4, !tbaa !5
  %1104 = load i32, ptr %100, align 4, !tbaa !5
  %1105 = mul nsw i32 %1103, %1104
  %1106 = load i32, ptr %106, align 4, !tbaa !5
  %1107 = add nsw i32 %1105, %1106
  %1108 = sext i32 %1107 to i64
  %1109 = getelementptr inbounds double, ptr %1102, i64 %1108
  %1110 = load double, ptr %1109, align 8, !tbaa !12
  %1111 = fmul double %1110, 1.000000e+00
  %1112 = getelementptr inbounds [4096 x double], ptr %89, i64 0, i64 0
  %1113 = load i32, ptr %105, align 4, !tbaa !5
  %1114 = load i32, ptr %102, align 4, !tbaa !5
  %1115 = mul nsw i32 %1113, %1114
  %1116 = load i32, ptr %106, align 4, !tbaa !5
  %1117 = add nsw i32 %1115, %1116
  %1118 = sext i32 %1117 to i64
  %1119 = getelementptr inbounds double, ptr %1112, i64 %1118
  %1120 = load double, ptr %1119, align 8, !tbaa !12
  %1121 = fmul double %1120, 1.000000e+00
  %1122 = call double @llvm.fmuladd.f64(double %1101, double %1111, double %1121)
  %1123 = getelementptr inbounds [4096 x double], ptr %89, i64 0, i64 0
  %1124 = load i32, ptr %105, align 4, !tbaa !5
  %1125 = load i32, ptr %102, align 4, !tbaa !5
  %1126 = mul nsw i32 %1124, %1125
  %1127 = load i32, ptr %106, align 4, !tbaa !5
  %1128 = add nsw i32 %1126, %1127
  %1129 = sext i32 %1128 to i64
  %1130 = getelementptr inbounds double, ptr %1123, i64 %1129
  store double %1122, ptr %1130, align 8, !tbaa !12
  br label %1131

1131:                                             ; preds = %1092
  %1132 = load i32, ptr %105, align 4, !tbaa !5
  %1133 = add nsw i32 %1132, 1
  store i32 %1133, ptr %105, align 4, !tbaa !5
  br label %1088, !llvm.loop !43

1134:                                             ; preds = %1088
  br label %1135

1135:                                             ; preds = %1134
  %1136 = load i32, ptr %107, align 4, !tbaa !5
  %1137 = add nsw i32 %1136, 1
  store i32 %1137, ptr %107, align 4, !tbaa !5
  br label %1083, !llvm.loop !44

1138:                                             ; preds = %1083
  br label %1139

1139:                                             ; preds = %1138
  %1140 = load i32, ptr %106, align 4, !tbaa !5
  %1141 = add nsw i32 %1140, 1
  store i32 %1141, ptr %106, align 4, !tbaa !5
  br label %1078, !llvm.loop !45

1142:                                             ; preds = %1078
  call void @llvm.lifetime.end.p0(i64 4, ptr %107) #14
  call void @llvm.lifetime.end.p0(i64 4, ptr %106) #14
  call void @llvm.lifetime.end.p0(i64 4, ptr %105) #14
  call void @llvm.lifetime.end.p0(i64 8, ptr %104) #14
  call void @llvm.lifetime.end.p0(i64 8, ptr %103) #14
  call void @llvm.lifetime.end.p0(i64 4, ptr %102) #14
  call void @llvm.lifetime.end.p0(i64 4, ptr %101) #14
  call void @llvm.lifetime.end.p0(i64 4, ptr %100) #14
  call void @llvm.lifetime.end.p0(i64 4, ptr %99) #14
  call void @llvm.lifetime.end.p0(i64 4, ptr %98) #14
  call void @llvm.lifetime.end.p0(i64 4, ptr %97) #14
  call void @llvm.lifetime.end.p0(i64 1, ptr %96) #14
  call void @llvm.lifetime.end.p0(i64 1, ptr %95) #14
  br label %1143

1143:                                             ; preds = %1142
  br label %1144

1144:                                             ; preds = %1143
  %1145 = load ptr, ptr %93, align 8, !tbaa !9
  store ptr %1145, ptr %90, align 8, !tbaa !9
  %1146 = load ptr, ptr %94, align 8, !tbaa !9
  store ptr %1146, ptr %91, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %94) #14
  call void @llvm.lifetime.end.p0(i64 8, ptr %93) #14
  br label %1147

1147:                                             ; preds = %1144
  %1148 = load i32, ptr %92, align 4, !tbaa !5
  %1149 = add nsw i32 %1148, 1
  store i32 %1149, ptr %92, align 4, !tbaa !5
  br label %1043, !llvm.loop !46

1150:                                             ; preds = %1059
  %1151 = load ptr, ptr %34, align 8, !tbaa !9
  %1152 = getelementptr inbounds [4096 x double], ptr %89, i64 0, i64 0
  %1153 = load i32, ptr %7, align 4, !tbaa !5
  %1154 = load i32, ptr %12, align 4, !tbaa !5
  invoke void @_Z3addIdEvPT_PKS0_iii(ptr noundef %1151, ptr noundef %1152, i32 noundef %1153, i32 noundef %1154, i32 noundef 0)
          to label %1155 unwind label %1160

1155:                                             ; preds = %1150
  call void @llvm.lifetime.end.p0(i64 8, ptr %91) #14
  call void @llvm.lifetime.end.p0(i64 8, ptr %90) #14
  call void @llvm.lifetime.end.p0(i64 32768, ptr %89) #14
  br label %1156

1156:                                             ; preds = %1155
  %1157 = load i32, ptr %24, align 4, !tbaa !5
  %1158 = load i32, ptr %88, align 4, !tbaa !5
  %1159 = add nsw i32 %1158, %1157
  store i32 %1159, ptr %88, align 4, !tbaa !5
  br label %1020, !llvm.loop !47

1160:                                             ; preds = %1150
  %1161 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %1162 = extractvalue { ptr, i32 } %1161, 0
  store ptr %1162, ptr %18, align 8
  %1163 = extractvalue { ptr, i32 } %1161, 1
  store i32 %1163, ptr %19, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %91) #14
  call void @llvm.lifetime.end.p0(i64 8, ptr %90) #14
  call void @llvm.lifetime.end.p0(i64 32768, ptr %89) #14
  call void @llvm.lifetime.end.p0(i64 4, ptr %88) #14
  br label %1233

1164:                                             ; preds = %1024
  call void @llvm.lifetime.start.p0(i64 8, ptr %108) #14
  %1165 = load i64, ptr %87, align 8, !tbaa !36
  %1166 = invoke i64 @libxsmm_timer_tick()
          to label %1167 unwind label %1192

1167:                                             ; preds = %1164
  %1168 = invoke double @libxsmm_timer_duration(i64 noundef %1165, i64 noundef %1166)
          to label %1169 unwind label %1192

1169:                                             ; preds = %1167
  store double %1168, ptr %108, align 8, !tbaa !12
  %1170 = load double, ptr %108, align 8, !tbaa !12
  %1171 = fcmp olt double 0.000000e+00, %1170
  br i1 %1171, label %1172, label %1196

1172:                                             ; preds = %1169
  %1173 = load ptr, ptr @stdout, align 8, !tbaa !9
  %1174 = load double, ptr %26, align 8, !tbaa !12
  %1175 = load double, ptr %108, align 8, !tbaa !12
  %1176 = fdiv double %1174, %1175
  %1177 = getelementptr inbounds [6 x i8], ptr %28, i64 0, i64 0
  %1178 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %1173, ptr noundef @.str.5, double noundef %1176, ptr noundef %1177) #14
  %1179 = load ptr, ptr @stdout, align 8, !tbaa !9
  %1180 = load i64, ptr %25, align 8, !tbaa !14
  %1181 = uitofp i64 %1180 to double
  %1182 = load double, ptr %108, align 8, !tbaa !12
  %1183 = fmul double %1182, 0x41D0000000000000
  %1184 = fdiv double %1181, %1183
  %1185 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %1179, ptr noundef @.str.6, double noundef %1184) #14
  %1186 = load ptr, ptr @stdout, align 8, !tbaa !9
  %1187 = load i32, ptr %23, align 4, !tbaa !5
  %1188 = sitofp i32 %1187 to double
  %1189 = load double, ptr %108, align 8, !tbaa !12
  %1190 = fdiv double %1188, %1189
  %1191 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %1186, ptr noundef @.str.7, double noundef %1190) #14
  br label %1196

1192:                                             ; preds = %1211, %1203, %1167, %1164
  %1193 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %1194 = extractvalue { ptr, i32 } %1193, 0
  store ptr %1194, ptr %18, align 8
  %1195 = extractvalue { ptr, i32 } %1193, 1
  store i32 %1195, ptr %19, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %108) #14
  br label %1233

1196:                                             ; preds = %1172, %1169
  %1197 = load ptr, ptr @stdout, align 8, !tbaa !9
  %1198 = load double, ptr %108, align 8, !tbaa !12
  %1199 = fmul double 1.000000e+03, %1198
  %1200 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %1197, ptr noundef @.str.8, double noundef %1199) #14
  %1201 = load double, ptr %30, align 8, !tbaa !12
  %1202 = fcmp oeq double 0.000000e+00, %1201
  br i1 %1202, label %1219, label %1203

1203:                                             ; preds = %1196
  %1204 = load i32, ptr %7, align 4, !tbaa !5
  %1205 = load i32, ptr %12, align 4, !tbaa !5
  %1206 = load ptr, ptr %65, align 8, !tbaa !9
  %1207 = load ptr, ptr %34, align 8, !tbaa !9
  %1208 = invoke i32 @libxsmm_matdiff(ptr noundef %66, i32 noundef 0, i32 noundef %1204, i32 noundef %1205, ptr noundef %1206, ptr noundef %1207, ptr noundef null, ptr noundef null)
          to label %1209 unwind label %1192

1209:                                             ; preds = %1203
  %1210 = icmp eq i32 0, %1208
  br i1 %1210, label %1211, label %1219

1211:                                             ; preds = %1209
  %1212 = load ptr, ptr @stdout, align 8, !tbaa !9
  %1213 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %66, i32 0, i32 7
  %1214 = load double, ptr %1213, align 8, !tbaa !40
  %1215 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %66, i32 0, i32 5
  %1216 = load double, ptr %1215, align 8, !tbaa !42
  %1217 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %1212, ptr noundef @.str.9, double noundef %1214, double noundef %1216) #14
  invoke void @libxsmm_matdiff_reduce(ptr noundef %67, ptr noundef %66)
          to label %1218 unwind label %1192

1218:                                             ; preds = %1211
  br label %1219

1219:                                             ; preds = %1218, %1209, %1196
  call void @llvm.lifetime.end.p0(i64 8, ptr %108) #14
  call void @llvm.lifetime.end.p0(i64 8, ptr %87) #14
  %1220 = load ptr, ptr @stdout, align 8, !tbaa !9
  %1221 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %1220, ptr noundef @.str.11) #14
  %1222 = load ptr, ptr %34, align 8, !tbaa !9
  %1223 = load i32, ptr %17, align 4, !tbaa !5
  %1224 = invoke noundef ptr @_ZSt6fill_nIPdidET_S1_T0_RKT1_(ptr noundef %1222, i32 noundef %1223, ptr noundef nonnull align 8 dereferenceable(8) %68)
          to label %1225 unwind label %796

1225:                                             ; preds = %1219
  call void @llvm.lifetime.start.p0(i64 8, ptr %109) #14
  %1226 = invoke i64 @libxsmm_timer_tick()
          to label %1227 unwind label %1234

1227:                                             ; preds = %1225
  store i64 %1226, ptr %109, align 8, !tbaa !36
  call void @llvm.lifetime.start.p0(i64 4, ptr %110) #14
  store i32 0, ptr %110, align 4, !tbaa !5
  br label %1228

1228:                                             ; preds = %1299, %1227
  %1229 = load i32, ptr %110, align 4, !tbaa !5
  %1230 = load i32, ptr %23, align 4, !tbaa !5
  %1231 = icmp slt i32 %1229, %1230
  br i1 %1231, label %1238, label %1232

1232:                                             ; preds = %1228
  store i32 68, ptr %71, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %110) #14
  br label %1308

1233:                                             ; preds = %1192, %1160, %1026
  call void @llvm.lifetime.end.p0(i64 8, ptr %87) #14
  br label %1540

1234:                                             ; preds = %1225
  %1235 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %1236 = extractvalue { ptr, i32 } %1235, 0
  store ptr %1236, ptr %18, align 8
  %1237 = extractvalue { ptr, i32 } %1235, 1
  store i32 %1237, ptr %19, align 4
  br label %1381

1238:                                             ; preds = %1228
  call void @llvm.lifetime.start.p0(i64 32768, ptr %111) #14
  call void @llvm.memset.p0.i64(ptr align 16 %111, i8 0, i64 32768, i1 false)
  call void @llvm.lifetime.start.p0(i64 8, ptr %112) #14
  %1239 = load ptr, ptr %32, align 8, !tbaa !9
  %1240 = load i32, ptr %110, align 4, !tbaa !5
  %1241 = load i32, ptr %20, align 4, !tbaa !5
  %1242 = mul nsw i32 %1240, %1241
  %1243 = sext i32 %1242 to i64
  %1244 = getelementptr inbounds double, ptr %1239, i64 %1243
  store ptr %1244, ptr %112, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %113) #14
  %1245 = load ptr, ptr %33, align 8, !tbaa !9
  %1246 = load i32, ptr %110, align 4, !tbaa !5
  %1247 = load i32, ptr %21, align 4, !tbaa !5
  %1248 = mul nsw i32 %1246, %1247
  %1249 = sext i32 %1248 to i64
  %1250 = getelementptr inbounds double, ptr %1245, i64 %1249
  store ptr %1250, ptr %113, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %114) #14
  store i32 0, ptr %114, align 4, !tbaa !5
  br label %1251

1251:                                             ; preds = %1286, %1238
  %1252 = load i32, ptr %114, align 4, !tbaa !5
  %1253 = load i32, ptr %24, align 4, !tbaa !5
  %1254 = load i32, ptr %23, align 4, !tbaa !5
  %1255 = load i32, ptr %110, align 4, !tbaa !5
  %1256 = sub nsw i32 %1254, %1255
  %1257 = icmp slt i32 %1253, %1256
  br i1 %1257, label %1258, label %1260

1258:                                             ; preds = %1251
  %1259 = load i32, ptr %24, align 4, !tbaa !5
  br label %1264

1260:                                             ; preds = %1251
  %1261 = load i32, ptr %23, align 4, !tbaa !5
  %1262 = load i32, ptr %110, align 4, !tbaa !5
  %1263 = sub nsw i32 %1261, %1262
  br label %1264

1264:                                             ; preds = %1260, %1258
  %1265 = phi i32 [ %1259, %1258 ], [ %1263, %1260 ]
  %1266 = icmp slt i32 %1252, %1265
  br i1 %1266, label %1268, label %1267

1267:                                             ; preds = %1264
  store i32 71, ptr %71, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %114) #14
  br label %1293

1268:                                             ; preds = %1264
  call void @llvm.lifetime.start.p0(i64 8, ptr %115) #14
  %1269 = load ptr, ptr %112, align 8, !tbaa !9
  %1270 = load i32, ptr %20, align 4, !tbaa !5
  %1271 = sext i32 %1270 to i64
  %1272 = getelementptr inbounds double, ptr %1269, i64 %1271
  store ptr %1272, ptr %115, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %116) #14
  %1273 = load ptr, ptr %113, align 8, !tbaa !9
  %1274 = load i32, ptr %21, align 4, !tbaa !5
  %1275 = sext i32 %1274 to i64
  %1276 = getelementptr inbounds double, ptr %1273, i64 %1275
  store ptr %1276, ptr %116, align 8, !tbaa !9
  %1277 = load i32, ptr %7, align 4, !tbaa !5
  %1278 = load i32, ptr %12, align 4, !tbaa !5
  %1279 = load i32, ptr %11, align 4, !tbaa !5
  %1280 = load ptr, ptr %112, align 8, !tbaa !9
  %1281 = load ptr, ptr %113, align 8, !tbaa !9
  %1282 = getelementptr inbounds [4096 x double], ptr %111, i64 0, i64 0
  invoke void @_Z12libxsmm_gemmPKcS0_iiiPKdS2_PKiS2_S4_S2_PdS4_(ptr noundef %13, ptr noundef %14, i32 noundef %1277, i32 noundef %1278, i32 noundef %1279, ptr noundef %15, ptr noundef %1280, ptr noundef %7, ptr noundef %1281, ptr noundef %11, ptr noundef %16, ptr noundef %1282, ptr noundef %7)
          to label %1283 unwind label %1289

1283:                                             ; preds = %1268
  %1284 = load ptr, ptr %115, align 8, !tbaa !9
  store ptr %1284, ptr %112, align 8, !tbaa !9
  %1285 = load ptr, ptr %116, align 8, !tbaa !9
  store ptr %1285, ptr %113, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %116) #14
  call void @llvm.lifetime.end.p0(i64 8, ptr %115) #14
  br label %1286

1286:                                             ; preds = %1283
  %1287 = load i32, ptr %114, align 4, !tbaa !5
  %1288 = add nsw i32 %1287, 1
  store i32 %1288, ptr %114, align 4, !tbaa !5
  br label %1251, !llvm.loop !48

1289:                                             ; preds = %1268
  %1290 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %1291 = extractvalue { ptr, i32 } %1290, 0
  store ptr %1291, ptr %18, align 8
  %1292 = extractvalue { ptr, i32 } %1290, 1
  store i32 %1292, ptr %19, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %116) #14
  call void @llvm.lifetime.end.p0(i64 8, ptr %115) #14
  call void @llvm.lifetime.end.p0(i64 4, ptr %114) #14
  br label %1307

1293:                                             ; preds = %1267
  %1294 = load ptr, ptr %34, align 8, !tbaa !9
  %1295 = getelementptr inbounds [4096 x double], ptr %111, i64 0, i64 0
  %1296 = load i32, ptr %7, align 4, !tbaa !5
  %1297 = load i32, ptr %12, align 4, !tbaa !5
  invoke void @_Z3addIdEvPT_PKS0_iii(ptr noundef %1294, ptr noundef %1295, i32 noundef %1296, i32 noundef %1297, i32 noundef 0)
          to label %1298 unwind label %1303

1298:                                             ; preds = %1293
  call void @llvm.lifetime.end.p0(i64 8, ptr %113) #14
  call void @llvm.lifetime.end.p0(i64 8, ptr %112) #14
  call void @llvm.lifetime.end.p0(i64 32768, ptr %111) #14
  br label %1299

1299:                                             ; preds = %1298
  %1300 = load i32, ptr %24, align 4, !tbaa !5
  %1301 = load i32, ptr %110, align 4, !tbaa !5
  %1302 = add nsw i32 %1301, %1300
  store i32 %1302, ptr %110, align 4, !tbaa !5
  br label %1228, !llvm.loop !49

1303:                                             ; preds = %1293
  %1304 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %1305 = extractvalue { ptr, i32 } %1304, 0
  store ptr %1305, ptr %18, align 8
  %1306 = extractvalue { ptr, i32 } %1304, 1
  store i32 %1306, ptr %19, align 4
  br label %1307

1307:                                             ; preds = %1303, %1289
  call void @llvm.lifetime.end.p0(i64 8, ptr %113) #14
  call void @llvm.lifetime.end.p0(i64 8, ptr %112) #14
  call void @llvm.lifetime.end.p0(i64 32768, ptr %111) #14
  call void @llvm.lifetime.end.p0(i64 4, ptr %110) #14
  br label %1381

1308:                                             ; preds = %1232
  call void @llvm.lifetime.start.p0(i64 8, ptr %117) #14
  %1309 = load i64, ptr %109, align 8, !tbaa !36
  %1310 = invoke i64 @libxsmm_timer_tick()
          to label %1311 unwind label %1336

1311:                                             ; preds = %1308
  %1312 = invoke double @libxsmm_timer_duration(i64 noundef %1309, i64 noundef %1310)
          to label %1313 unwind label %1336

1313:                                             ; preds = %1311
  store double %1312, ptr %117, align 8, !tbaa !12
  %1314 = load double, ptr %117, align 8, !tbaa !12
  %1315 = fcmp olt double 0.000000e+00, %1314
  br i1 %1315, label %1316, label %1340

1316:                                             ; preds = %1313
  %1317 = load ptr, ptr @stdout, align 8, !tbaa !9
  %1318 = load double, ptr %26, align 8, !tbaa !12
  %1319 = load double, ptr %117, align 8, !tbaa !12
  %1320 = fdiv double %1318, %1319
  %1321 = getelementptr inbounds [6 x i8], ptr %28, i64 0, i64 0
  %1322 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %1317, ptr noundef @.str.5, double noundef %1320, ptr noundef %1321) #14
  %1323 = load ptr, ptr @stdout, align 8, !tbaa !9
  %1324 = load i64, ptr %25, align 8, !tbaa !14
  %1325 = uitofp i64 %1324 to double
  %1326 = load double, ptr %117, align 8, !tbaa !12
  %1327 = fmul double %1326, 0x41D0000000000000
  %1328 = fdiv double %1325, %1327
  %1329 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %1323, ptr noundef @.str.6, double noundef %1328) #14
  %1330 = load ptr, ptr @stdout, align 8, !tbaa !9
  %1331 = load i32, ptr %23, align 4, !tbaa !5
  %1332 = sitofp i32 %1331 to double
  %1333 = load double, ptr %117, align 8, !tbaa !12
  %1334 = fdiv double %1332, %1333
  %1335 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %1330, ptr noundef @.str.7, double noundef %1334) #14
  br label %1340

1336:                                             ; preds = %1355, %1347, %1311, %1308
  %1337 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %1338 = extractvalue { ptr, i32 } %1337, 0
  store ptr %1338, ptr %18, align 8
  %1339 = extractvalue { ptr, i32 } %1337, 1
  store i32 %1339, ptr %19, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %117) #14
  br label %1381

1340:                                             ; preds = %1316, %1313
  %1341 = load ptr, ptr @stdout, align 8, !tbaa !9
  %1342 = load double, ptr %117, align 8, !tbaa !12
  %1343 = fmul double 1.000000e+03, %1342
  %1344 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %1341, ptr noundef @.str.8, double noundef %1343) #14
  %1345 = load double, ptr %30, align 8, !tbaa !12
  %1346 = fcmp oeq double 0.000000e+00, %1345
  br i1 %1346, label %1363, label %1347

1347:                                             ; preds = %1340
  %1348 = load i32, ptr %7, align 4, !tbaa !5
  %1349 = load i32, ptr %12, align 4, !tbaa !5
  %1350 = load ptr, ptr %65, align 8, !tbaa !9
  %1351 = load ptr, ptr %34, align 8, !tbaa !9
  %1352 = invoke i32 @libxsmm_matdiff(ptr noundef %66, i32 noundef 0, i32 noundef %1348, i32 noundef %1349, ptr noundef %1350, ptr noundef %1351, ptr noundef null, ptr noundef null)
          to label %1353 unwind label %1336

1353:                                             ; preds = %1347
  %1354 = icmp eq i32 0, %1352
  br i1 %1354, label %1355, label %1363

1355:                                             ; preds = %1353
  %1356 = load ptr, ptr @stdout, align 8, !tbaa !9
  %1357 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %66, i32 0, i32 7
  %1358 = load double, ptr %1357, align 8, !tbaa !40
  %1359 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %66, i32 0, i32 5
  %1360 = load double, ptr %1359, align 8, !tbaa !42
  %1361 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %1356, ptr noundef @.str.9, double noundef %1358, double noundef %1360) #14
  invoke void @libxsmm_matdiff_reduce(ptr noundef %67, ptr noundef %66)
          to label %1362 unwind label %1336

1362:                                             ; preds = %1355
  br label %1363

1363:                                             ; preds = %1362, %1353, %1340
  call void @llvm.lifetime.end.p0(i64 8, ptr %117) #14
  call void @llvm.lifetime.end.p0(i64 8, ptr %109) #14
  %1364 = invoke noundef ptr @_ZNK18libxsmm_mmfunctionIddLin1EEcvPKvEv(ptr noundef nonnull align 8 dereferenceable(8) %69)
          to label %1365 unwind label %796

1365:                                             ; preds = %1363
  %1366 = icmp ne ptr %1364, null
  br i1 %1366, label %1367, label %1519

1367:                                             ; preds = %1365
  %1368 = load ptr, ptr @stdout, align 8, !tbaa !9
  %1369 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %1368, ptr noundef @.str.12) #14
  %1370 = load ptr, ptr %34, align 8, !tbaa !9
  %1371 = load i32, ptr %17, align 4, !tbaa !5
  %1372 = invoke noundef ptr @_ZSt6fill_nIPdidET_S1_T0_RKT1_(ptr noundef %1370, i32 noundef %1371, ptr noundef nonnull align 8 dereferenceable(8) %68)
          to label %1373 unwind label %796

1373:                                             ; preds = %1367
  call void @llvm.lifetime.start.p0(i64 8, ptr %118) #14
  %1374 = invoke i64 @libxsmm_timer_tick()
          to label %1375 unwind label %1382

1375:                                             ; preds = %1373
  store i64 %1374, ptr %118, align 8, !tbaa !36
  call void @llvm.lifetime.start.p0(i64 4, ptr %119) #14
  store i32 0, ptr %119, align 4, !tbaa !5
  br label %1376

1376:                                             ; preds = %1453, %1375
  %1377 = load i32, ptr %119, align 4, !tbaa !5
  %1378 = load i32, ptr %23, align 4, !tbaa !5
  %1379 = icmp slt i32 %1377, %1378
  br i1 %1379, label %1386, label %1380

1380:                                             ; preds = %1376
  store i32 74, ptr %71, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %119) #14
  br label %1462

1381:                                             ; preds = %1336, %1307, %1234
  call void @llvm.lifetime.end.p0(i64 8, ptr %109) #14
  br label %1540

1382:                                             ; preds = %1373
  %1383 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %1384 = extractvalue { ptr, i32 } %1383, 0
  store ptr %1384, ptr %18, align 8
  %1385 = extractvalue { ptr, i32 } %1383, 1
  store i32 %1385, ptr %19, align 4
  br label %1518

1386:                                             ; preds = %1376
  call void @llvm.lifetime.start.p0(i64 32768, ptr %120) #14
  call void @llvm.memset.p0.i64(ptr align 16 %120, i8 0, i64 32768, i1 false)
  call void @llvm.lifetime.start.p0(i64 8, ptr %121) #14
  %1387 = load ptr, ptr %32, align 8, !tbaa !9
  %1388 = load i32, ptr %119, align 4, !tbaa !5
  %1389 = load i32, ptr %20, align 4, !tbaa !5
  %1390 = mul nsw i32 %1388, %1389
  %1391 = sext i32 %1390 to i64
  %1392 = getelementptr inbounds double, ptr %1387, i64 %1391
  store ptr %1392, ptr %121, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %122) #14
  %1393 = load ptr, ptr %33, align 8, !tbaa !9
  %1394 = load i32, ptr %119, align 4, !tbaa !5
  %1395 = load i32, ptr %21, align 4, !tbaa !5
  %1396 = mul nsw i32 %1394, %1395
  %1397 = sext i32 %1396 to i64
  %1398 = getelementptr inbounds double, ptr %1393, i64 %1397
  store ptr %1398, ptr %122, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %123) #14
  store i32 0, ptr %123, align 4, !tbaa !5
  br label %1399

1399:                                             ; preds = %1440, %1386
  %1400 = load i32, ptr %123, align 4, !tbaa !5
  %1401 = load i32, ptr %24, align 4, !tbaa !5
  %1402 = load i32, ptr %23, align 4, !tbaa !5
  %1403 = load i32, ptr %119, align 4, !tbaa !5
  %1404 = sub nsw i32 %1402, %1403
  %1405 = icmp slt i32 %1401, %1404
  br i1 %1405, label %1406, label %1408

1406:                                             ; preds = %1399
  %1407 = load i32, ptr %24, align 4, !tbaa !5
  br label %1412

1408:                                             ; preds = %1399
  %1409 = load i32, ptr %23, align 4, !tbaa !5
  %1410 = load i32, ptr %119, align 4, !tbaa !5
  %1411 = sub nsw i32 %1409, %1410
  br label %1412

1412:                                             ; preds = %1408, %1406
  %1413 = phi i32 [ %1407, %1406 ], [ %1411, %1408 ]
  %1414 = icmp slt i32 %1400, %1413
  br i1 %1414, label %1416, label %1415

1415:                                             ; preds = %1412
  store i32 77, ptr %71, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %123) #14
  br label %1447

1416:                                             ; preds = %1412
  call void @llvm.lifetime.start.p0(i64 8, ptr %124) #14
  %1417 = load ptr, ptr %121, align 8, !tbaa !9
  %1418 = load i32, ptr %20, align 4, !tbaa !5
  %1419 = sext i32 %1418 to i64
  %1420 = getelementptr inbounds double, ptr %1417, i64 %1419
  store ptr %1420, ptr %124, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %125) #14
  %1421 = load ptr, ptr %122, align 8, !tbaa !9
  %1422 = load i32, ptr %21, align 4, !tbaa !5
  %1423 = sext i32 %1422 to i64
  %1424 = getelementptr inbounds double, ptr %1421, i64 %1423
  store ptr %1424, ptr %125, align 8, !tbaa !9
  %1425 = load ptr, ptr %121, align 8, !tbaa !9
  %1426 = load ptr, ptr %122, align 8, !tbaa !9
  %1427 = getelementptr inbounds [4096 x double], ptr %120, i64 0, i64 0
  %1428 = load ptr, ptr %124, align 8, !tbaa !9
  %1429 = load i32, ptr %20, align 4, !tbaa !5
  %1430 = sext i32 %1429 to i64
  %1431 = getelementptr inbounds double, ptr %1428, i64 %1430
  %1432 = load ptr, ptr %125, align 8, !tbaa !9
  %1433 = load i32, ptr %21, align 4, !tbaa !5
  %1434 = sext i32 %1433 to i64
  %1435 = getelementptr inbounds double, ptr %1432, i64 %1434
  %1436 = getelementptr inbounds [4096 x double], ptr %120, i64 0, i64 0
  invoke void @_ZNK18libxsmm_mmfunctionIddLin1EEclEPKdS2_PdS2_S2_S2_(ptr noundef nonnull align 8 dereferenceable(8) %69, ptr noundef %1425, ptr noundef %1426, ptr noundef %1427, ptr noundef %1431, ptr noundef %1435, ptr noundef %1436)
          to label %1437 unwind label %1443

1437:                                             ; preds = %1416
  %1438 = load ptr, ptr %124, align 8, !tbaa !9
  store ptr %1438, ptr %121, align 8, !tbaa !9
  %1439 = load ptr, ptr %125, align 8, !tbaa !9
  store ptr %1439, ptr %122, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %125) #14
  call void @llvm.lifetime.end.p0(i64 8, ptr %124) #14
  br label %1440

1440:                                             ; preds = %1437
  %1441 = load i32, ptr %123, align 4, !tbaa !5
  %1442 = add nsw i32 %1441, 1
  store i32 %1442, ptr %123, align 4, !tbaa !5
  br label %1399, !llvm.loop !50

1443:                                             ; preds = %1416
  %1444 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %1445 = extractvalue { ptr, i32 } %1444, 0
  store ptr %1445, ptr %18, align 8
  %1446 = extractvalue { ptr, i32 } %1444, 1
  store i32 %1446, ptr %19, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %125) #14
  call void @llvm.lifetime.end.p0(i64 8, ptr %124) #14
  call void @llvm.lifetime.end.p0(i64 4, ptr %123) #14
  br label %1461

1447:                                             ; preds = %1415
  %1448 = load ptr, ptr %34, align 8, !tbaa !9
  %1449 = getelementptr inbounds [4096 x double], ptr %120, i64 0, i64 0
  %1450 = load i32, ptr %7, align 4, !tbaa !5
  %1451 = load i32, ptr %12, align 4, !tbaa !5
  invoke void @_Z3addIdEvPT_PKS0_iii(ptr noundef %1448, ptr noundef %1449, i32 noundef %1450, i32 noundef %1451, i32 noundef 0)
          to label %1452 unwind label %1457

1452:                                             ; preds = %1447
  call void @llvm.lifetime.end.p0(i64 8, ptr %122) #14
  call void @llvm.lifetime.end.p0(i64 8, ptr %121) #14
  call void @llvm.lifetime.end.p0(i64 32768, ptr %120) #14
  br label %1453

1453:                                             ; preds = %1452
  %1454 = load i32, ptr %24, align 4, !tbaa !5
  %1455 = load i32, ptr %119, align 4, !tbaa !5
  %1456 = add nsw i32 %1455, %1454
  store i32 %1456, ptr %119, align 4, !tbaa !5
  br label %1376, !llvm.loop !51

1457:                                             ; preds = %1447
  %1458 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %1459 = extractvalue { ptr, i32 } %1458, 0
  store ptr %1459, ptr %18, align 8
  %1460 = extractvalue { ptr, i32 } %1458, 1
  store i32 %1460, ptr %19, align 4
  br label %1461

1461:                                             ; preds = %1457, %1443
  call void @llvm.lifetime.end.p0(i64 8, ptr %122) #14
  call void @llvm.lifetime.end.p0(i64 8, ptr %121) #14
  call void @llvm.lifetime.end.p0(i64 32768, ptr %120) #14
  call void @llvm.lifetime.end.p0(i64 4, ptr %119) #14
  br label %1518

1462:                                             ; preds = %1380
  call void @llvm.lifetime.start.p0(i64 8, ptr %126) #14
  %1463 = load i64, ptr %118, align 8, !tbaa !36
  %1464 = invoke i64 @libxsmm_timer_tick()
          to label %1465 unwind label %1490

1465:                                             ; preds = %1462
  %1466 = invoke double @libxsmm_timer_duration(i64 noundef %1463, i64 noundef %1464)
          to label %1467 unwind label %1490

1467:                                             ; preds = %1465
  store double %1466, ptr %126, align 8, !tbaa !12
  %1468 = load double, ptr %126, align 8, !tbaa !12
  %1469 = fcmp olt double 0.000000e+00, %1468
  br i1 %1469, label %1470, label %1494

1470:                                             ; preds = %1467
  %1471 = load ptr, ptr @stdout, align 8, !tbaa !9
  %1472 = load double, ptr %26, align 8, !tbaa !12
  %1473 = load double, ptr %126, align 8, !tbaa !12
  %1474 = fdiv double %1472, %1473
  %1475 = getelementptr inbounds [6 x i8], ptr %28, i64 0, i64 0
  %1476 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %1471, ptr noundef @.str.5, double noundef %1474, ptr noundef %1475) #14
  %1477 = load ptr, ptr @stdout, align 8, !tbaa !9
  %1478 = load i64, ptr %25, align 8, !tbaa !14
  %1479 = uitofp i64 %1478 to double
  %1480 = load double, ptr %126, align 8, !tbaa !12
  %1481 = fmul double %1480, 0x41D0000000000000
  %1482 = fdiv double %1479, %1481
  %1483 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %1477, ptr noundef @.str.6, double noundef %1482) #14
  %1484 = load ptr, ptr @stdout, align 8, !tbaa !9
  %1485 = load i32, ptr %23, align 4, !tbaa !5
  %1486 = sitofp i32 %1485 to double
  %1487 = load double, ptr %126, align 8, !tbaa !12
  %1488 = fdiv double %1486, %1487
  %1489 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %1484, ptr noundef @.str.7, double noundef %1488) #14
  br label %1494

1490:                                             ; preds = %1509, %1501, %1465, %1462
  %1491 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %1492 = extractvalue { ptr, i32 } %1491, 0
  store ptr %1492, ptr %18, align 8
  %1493 = extractvalue { ptr, i32 } %1491, 1
  store i32 %1493, ptr %19, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %126) #14
  br label %1518

1494:                                             ; preds = %1470, %1467
  %1495 = load ptr, ptr @stdout, align 8, !tbaa !9
  %1496 = load double, ptr %126, align 8, !tbaa !12
  %1497 = fmul double 1.000000e+03, %1496
  %1498 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %1495, ptr noundef @.str.8, double noundef %1497) #14
  %1499 = load double, ptr %30, align 8, !tbaa !12
  %1500 = fcmp oeq double 0.000000e+00, %1499
  br i1 %1500, label %1517, label %1501

1501:                                             ; preds = %1494
  %1502 = load i32, ptr %7, align 4, !tbaa !5
  %1503 = load i32, ptr %12, align 4, !tbaa !5
  %1504 = load ptr, ptr %65, align 8, !tbaa !9
  %1505 = load ptr, ptr %34, align 8, !tbaa !9
  %1506 = invoke i32 @libxsmm_matdiff(ptr noundef %66, i32 noundef 0, i32 noundef %1502, i32 noundef %1503, ptr noundef %1504, ptr noundef %1505, ptr noundef null, ptr noundef null)
          to label %1507 unwind label %1490

1507:                                             ; preds = %1501
  %1508 = icmp eq i32 0, %1506
  br i1 %1508, label %1509, label %1517

1509:                                             ; preds = %1507
  %1510 = load ptr, ptr @stdout, align 8, !tbaa !9
  %1511 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %66, i32 0, i32 7
  %1512 = load double, ptr %1511, align 8, !tbaa !40
  %1513 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %66, i32 0, i32 5
  %1514 = load double, ptr %1513, align 8, !tbaa !42
  %1515 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %1510, ptr noundef @.str.9, double noundef %1512, double noundef %1514) #14
  invoke void @libxsmm_matdiff_reduce(ptr noundef %67, ptr noundef %66)
          to label %1516 unwind label %1490

1516:                                             ; preds = %1509
  br label %1517

1517:                                             ; preds = %1516, %1507, %1494
  call void @llvm.lifetime.end.p0(i64 8, ptr %126) #14
  call void @llvm.lifetime.end.p0(i64 8, ptr %118) #14
  br label %1519

1518:                                             ; preds = %1490, %1461, %1382
  call void @llvm.lifetime.end.p0(i64 8, ptr %118) #14
  br label %1540

1519:                                             ; preds = %1517, %1365
  invoke void @libxsmm_finalize()
          to label %1520 unwind label %796

1520:                                             ; preds = %1519
  %1521 = load ptr, ptr @stdout, align 8, !tbaa !9
  %1522 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %1521, ptr noundef @.str.13) #14
  %1523 = load double, ptr %30, align 8, !tbaa !12
  %1524 = fcmp oeq double 0.000000e+00, %1523
  br i1 %1524, label %1539, label %1525

1525:                                             ; preds = %1520
  call void @llvm.lifetime.start.p0(i64 8, ptr %127) #14
  %1526 = invoke double @libxsmm_matdiff_epsilon(ptr noundef %67)
          to label %1527 unwind label %1534

1527:                                             ; preds = %1525
  store double %1526, ptr %127, align 8, !tbaa !12
  %1528 = load double, ptr %127, align 8, !tbaa !12
  %1529 = fcmp olt double 1.000000e-03, %1528
  br i1 %1529, label %1530, label %1538

1530:                                             ; preds = %1527
  %1531 = load ptr, ptr @stderr, align 8, !tbaa !9
  %1532 = load double, ptr %127, align 8, !tbaa !12
  %1533 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %1531, ptr noundef @.str.14, double noundef %1532) #14
  store i32 1, ptr %6, align 4, !tbaa !5
  br label %1538

1534:                                             ; preds = %1525
  %1535 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %1536 = extractvalue { ptr, i32 } %1535, 0
  store ptr %1536, ptr %18, align 8
  %1537 = extractvalue { ptr, i32 } %1535, 1
  store i32 %1537, ptr %19, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %127) #14
  br label %1540

1538:                                             ; preds = %1530, %1527
  call void @llvm.lifetime.end.p0(i64 8, ptr %127) #14
  br label %1539

1539:                                             ; preds = %1538, %1520
  call void @llvm.lifetime.end.p0(i64 8, ptr %69) #14
  call void @llvm.lifetime.end.p0(i64 8, ptr %68) #14
  call void @llvm.lifetime.end.p0(i64 192, ptr %67) #14
  call void @llvm.lifetime.end.p0(i64 192, ptr %66) #14
  call void @llvm.lifetime.end.p0(i64 8, ptr %65) #14
  call void @_ZZ4mainEN11raii_expectD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %64) #14
  call void @llvm.lifetime.end.p0(i64 8, ptr %64) #14
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #14
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #14
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #14
  call void @_ZZ4mainEN4raiiD2Ev(ptr noundef nonnull align 8 dereferenceable(24) %31) #14
  call void @llvm.lifetime.end.p0(i64 24, ptr %31) #14
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #14
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #14
  call void @llvm.lifetime.end.p0(i64 6, ptr %28) #14
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #14
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #14
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #14
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #14
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #14
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #14
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #14
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #14
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #14
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #14
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #14
  call void @llvm.lifetime.end.p0(i64 1, ptr %14) #14
  call void @llvm.lifetime.end.p0(i64 1, ptr %13) #14
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #14
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #14
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #14
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #14
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #14
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #14
  br label %1560

1540:                                             ; preds = %1534, %1518, %1381, %1233, %1025, %868, %796
  call void @llvm.lifetime.end.p0(i64 8, ptr %69) #14
  call void @llvm.lifetime.end.p0(i64 8, ptr %68) #14
  call void @llvm.lifetime.end.p0(i64 192, ptr %67) #14
  call void @llvm.lifetime.end.p0(i64 192, ptr %66) #14
  call void @llvm.lifetime.end.p0(i64 8, ptr %65) #14
  call void @_ZZ4mainEN11raii_expectD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %64) #14
  br label %1541

1541:                                             ; preds = %1540, %792
  call void @llvm.lifetime.end.p0(i64 8, ptr %64) #14
  br label %1542

1542:                                             ; preds = %1541, %788, %733
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #14
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #14
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #14
  call void @_ZZ4mainEN4raiiD2Ev(ptr noundef nonnull align 8 dereferenceable(24) %31) #14
  br label %1543

1543:                                             ; preds = %1542, %433
  call void @llvm.lifetime.end.p0(i64 24, ptr %31) #14
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #14
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #14
  call void @llvm.lifetime.end.p0(i64 6, ptr %28) #14
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #14
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #14
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #14
  br label %1544

1544:                                             ; preds = %1543, %429
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #14
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #14
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #14
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #14
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #14
  br label %1545

1545:                                             ; preds = %1544, %281
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #14
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #14
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #14
  call void @llvm.lifetime.end.p0(i64 1, ptr %14) #14
  call void @llvm.lifetime.end.p0(i64 1, ptr %13) #14
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #14
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #14
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #14
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #14
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #14
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #14
  br label %1546

1546:                                             ; preds = %1545
  %1547 = load i32, ptr %19, align 4
  %1548 = call i32 @llvm.eh.typeid.for.p0(ptr @_ZTISt9exception) #14
  %1549 = icmp eq i32 %1547, %1548
  br i1 %1549, label %1550, label %1563

1550:                                             ; preds = %1546
  call void @llvm.lifetime.start.p0(i64 8, ptr %129) #14
  %1551 = load ptr, ptr %18, align 8
  %1552 = call ptr @__cxa_begin_catch(ptr %1551) #14
  store ptr %1552, ptr %129, align 8
  %1553 = load ptr, ptr @stderr, align 8, !tbaa !9
  %1554 = load ptr, ptr %129, align 8, !tbaa !9
  %1555 = load ptr, ptr %1554, align 8, !tbaa !52
  %1556 = getelementptr inbounds ptr, ptr %1555, i64 2
  %1557 = load ptr, ptr %1556, align 8
  %1558 = call noundef ptr %1557(ptr noundef nonnull align 8 dereferenceable(8) %1554) #14
  %1559 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %1553, ptr noundef @.str.16, ptr noundef %1558) #14
  store i32 1, ptr %6, align 4, !tbaa !5
  call void @__cxa_end_catch()
  call void @llvm.lifetime.end.p0(i64 8, ptr %129) #14
  br label %1560

1560:                                             ; preds = %1572, %1566, %1550, %1539
  %1561 = load i32, ptr %6, align 4, !tbaa !5
  store i32 %1561, ptr %3, align 4
  store i32 1, ptr %71, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #14
  %1562 = load i32, ptr %3, align 4
  ret i32 %1562

1563:                                             ; preds = %1546
  %1564 = call i32 @llvm.eh.typeid.for.p0(ptr @_ZTIPKc) #14
  %1565 = icmp eq i32 %1547, %1564
  br i1 %1565, label %1566, label %1572

1566:                                             ; preds = %1563
  call void @llvm.lifetime.start.p0(i64 8, ptr %128) #14
  %1567 = load ptr, ptr %18, align 8
  %1568 = call ptr @__cxa_begin_catch(ptr %1567) #14
  store ptr %1568, ptr %128, align 8
  %1569 = load ptr, ptr @stderr, align 8, !tbaa !9
  %1570 = load ptr, ptr %128, align 8, !tbaa !9
  %1571 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %1569, ptr noundef @.str.16, ptr noundef %1570) #14
  store i32 1, ptr %6, align 4, !tbaa !5
  call void @__cxa_end_catch() #14
  call void @llvm.lifetime.end.p0(i64 8, ptr %128) #14
  br label %1560

1572:                                             ; preds = %1563
  %1573 = load ptr, ptr %18, align 8
  %1574 = call ptr @__cxa_begin_catch(ptr %1573) #14
  %1575 = load ptr, ptr @stderr, align 8, !tbaa !9
  %1576 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %1575, ptr noundef @.str.15) #14
  store i32 1, ptr %6, align 4, !tbaa !5
  call void @__cxa_end_catch()
  br label %1560

1577:                                             ; preds = %279
  unreachable
}

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

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

; Function Attrs: nounwind willreturn memory(read)
declare i64 @strlen(ptr noundef) #3

declare ptr @__cxa_allocate_exception(i64)

declare void @__cxa_throw(ptr, ptr, ptr)

declare i32 @__gxx_personality_v0(...)

declare i32 @libxsmm_isqrt_u64(i64 noundef) #4

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

; Function Attrs: nounwind
declare ptr @getenv(ptr noundef) #6

; Function Attrs: inlinehint mustprogress nounwind willreturn memory(read) uwtable
declare double @atof(ptr noundef nonnull) #2

; Function Attrs: mustprogress uwtable
declare hidden void @_ZZ4mainEN4raiiC2Eiii(ptr noundef nonnull align 8 dereferenceable(24), i32 noundef, i32 noundef, i32 noundef) unnamed_addr #7 align 2

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

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

declare i64 @libxsmm_coprime2(i64 noundef) #4

declare void @libxsmm_init() #4

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

; Function Attrs: mustprogress uwtable
declare hidden void @_ZZ4mainEN11raii_expectC2Ei(ptr noundef nonnull align 8 dereferenceable(8), i32 noundef) unnamed_addr #7 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN18libxsmm_mmfunctionIddLin1EEC2Eiiiii(ptr noundef nonnull align 8 dereferenceable(8), i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef) unnamed_addr #7 align 2

declare void @libxsmm_matdiff_clear(ptr noundef) #4

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef ptr @_ZSt6fill_nIPdidET_S1_T0_RKT1_(ptr noundef, i32 noundef, ptr noundef nonnull align 8 dereferenceable(8)) #9

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #10

declare ptr @libxsmm_original_dgemm() #4

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_Z3addIdEvPT_PKS0_iii(ptr noalias noundef, ptr noalias noundef, i32 noundef, i32 noundef, i32 noundef) #11

declare i64 @libxsmm_timer_tick() #4

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

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: inlinehint mustprogress uwtable
declare dso_local void @_Z12libxsmm_gemmPKcS0_iiiPKdS2_PKiS2_S4_S2_PdS4_(ptr noundef, ptr noundef, i32 noundef, i32 noundef, i32 noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) #9

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZNK18libxsmm_mmfunctionIddLin1EEcvPKvEv(ptr noundef nonnull align 8 dereferenceable(8)) #12 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNK18libxsmm_mmfunctionIddLin1EEclEPKdS2_PdS2_S2_S2_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) #7 align 2

declare void @libxsmm_finalize() #4

declare double @libxsmm_matdiff_epsilon(ptr noundef) #4

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @_ZZ4mainEN11raii_expectD2Ev(ptr noundef nonnull align 8 dereferenceable(8)) unnamed_addr #12 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @_ZZ4mainEN4raiiD2Ev(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #12 align 2

; Function Attrs: nounwind memory(none)
declare i32 @llvm.eh.typeid.for.p0(ptr) #13

declare ptr @__cxa_begin_catch(ptr)

declare void @__cxa_end_catch()

attributes #0 = { mustprogress norecurse 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 mustprogress 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 willreturn memory(read) "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #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 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
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 = { mustprogress 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 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #9 = { inlinehint mustprogress 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 #10 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #11 = { inlinehint mustprogress 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 #12 = { mustprogress 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 #13 = { nounwind memory(none) }
attributes #14 = { nounwind }
attributes #15 = { nounwind willreturn memory(read) }
attributes #16 = { noreturn }

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


; 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.raii = type { ptr, ptr, ptr }
%struct.raii_expect = type { ptr }
%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 }
%class.libxsmm_mmfunction = type { ptr }

@_ZTISt9exception = external constant ptr
@_ZTIPKc = external constant ptr
@.str = external hidden unnamed_addr constant [38 x i8], align 1
@__const.main.ops = external hidden unnamed_addr constant [6 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [6 x i8], align 1
@stdout = external local_unnamed_addr global ptr, align 8
@.str.2 = external hidden unnamed_addr constant [53 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [10 x i8], align 1
@stderr = external local_unnamed_addr global ptr, align 8
@.str.14 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [34 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [11 x i8], align 1

; Function Attrs: mustprogress norecurse uwtable
define dso_local noundef range(i32 0, 2) i32 @main(i32 noundef %0, ptr nocapture noundef readonly %1) local_unnamed_addr #0 personality ptr @__gxx_personality_v0 {
  %3 = alloca i32, align 4
  %4 = alloca i32, align 4
  %5 = alloca i32, align 4
  %6 = alloca i8, align 1
  %7 = alloca i8, align 1
  %8 = alloca double, align 8
  %9 = alloca double, align 8
  %10 = alloca [6 x i8], align 1
  %11 = alloca %struct.raii, align 8
  %12 = alloca %struct.raii_expect, align 8
  %13 = alloca %struct.libxsmm_matdiff_info, align 8
  %14 = alloca %struct.libxsmm_matdiff_info, align 8
  %15 = alloca double, align 8
  %16 = alloca %class.libxsmm_mmfunction, align 8
  %17 = alloca [4096 x double], align 16
  %18 = alloca [4096 x double], align 16
  %19 = alloca [4096 x double], align 16
  %20 = alloca [4096 x double], align 16
  %21 = alloca [4096 x double], align 16
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %3) #16
  %22 = icmp sgt i32 %0, 1
  br i1 %22, label %23, label %27

23:                                               ; preds = %2
  %24 = getelementptr inbounds i8, ptr %1, i64 8
  %25 = load ptr, ptr %24, align 8, !tbaa !5
  %26 = tail call i32 @atoi(ptr nocapture noundef %25) #17
  br label %27

27:                                               ; preds = %2, %23
  %28 = phi i32 [ %26, %23 ], [ 23, %2 ]
  store i32 %28, ptr %3, align 4, !tbaa !9
  %29 = mul nsw i32 %28, 3
  %30 = mul nsw i32 %29, %28
  %31 = sext i32 %30 to i64
  %32 = shl nsw i64 %31, 3
  %33 = udiv i64 1073741824, %32
  %34 = trunc nuw nsw i64 %33 to i32
  %35 = icmp sgt i32 %0, 2
  br i1 %35, label %36, label %.thread488

36:                                               ; preds = %27
  %37 = getelementptr inbounds i8, ptr %1, i64 16
  %38 = load ptr, ptr %37, align 8, !tbaa !5
  %39 = tail call i32 @atoi(ptr nocapture noundef %38) #17
  %40 = icmp sgt i32 %39, 0
  br i1 %40, label %51, label %41

41:                                               ; preds = %36
  %42 = load i8, ptr %38, align 1, !tbaa !11
  switch i8 %42, label %51 [
    i8 43, label %43
    i8 45, label %47
  ]

43:                                               ; preds = %41
  %44 = tail call i64 @strlen(ptr noundef nonnull dereferenceable(1) %38) #17
  %45 = trunc i64 %44 to i32
  %46 = shl i32 %34, %45
  br label %51

47:                                               ; preds = %41
  %48 = tail call i64 @strlen(ptr noundef nonnull dereferenceable(1) %38) #17
  %49 = trunc i64 %48 to i32
  %50 = lshr i32 %34, %49
  br label %51

51:                                               ; preds = %41, %36, %47, %43
  %52 = phi i32 [ %46, %43 ], [ %50, %47 ], [ %39, %36 ], [ 0, %41 ]
  %.not491 = icmp eq i32 %0, 3
  br i1 %.not491, label %.thread488, label %53

53:                                               ; preds = %51
  %54 = getelementptr inbounds i8, ptr %1, i64 24
  %55 = load ptr, ptr %54, align 8, !tbaa !5
  %56 = tail call i32 @atoi(ptr nocapture noundef %55) #17
  %57 = icmp sgt i32 %56, 0
  br i1 %57, label %68, label %58

58:                                               ; preds = %53
  %59 = load i8, ptr %55, align 1, !tbaa !11
  switch i8 %59, label %68 [
    i8 43, label %60
    i8 45, label %64
  ]

60:                                               ; preds = %58
  %61 = tail call i64 @strlen(ptr noundef nonnull dereferenceable(1) %55) #17
  %62 = trunc i64 %61 to i32
  %63 = shl i32 160, %62
  br label %68

64:                                               ; preds = %58
  %65 = tail call i64 @strlen(ptr noundef nonnull dereferenceable(1) %55) #17
  %66 = trunc i64 %65 to i32
  %67 = lshr i32 160, %66
  br label %68

.thread488:                                       ; preds = %27, %51
  %.ph = phi i32 [ %52, %51 ], [ 0, %27 ]
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %4) #16
  store i32 %28, ptr %4, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %5) #16
  br label %81

68:                                               ; preds = %58, %53, %64, %60
  %69 = phi i32 [ %63, %60 ], [ %67, %64 ], [ %56, %53 ], [ -1, %58 ]
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %4) #16
  %70 = icmp ugt i32 %0, 5
  br i1 %70, label %.thread487, label %74

.thread487:                                       ; preds = %68
  %71 = getelementptr inbounds i8, ptr %1, i64 40
  %72 = load ptr, ptr %71, align 8, !tbaa !5
  %73 = tail call i32 @atoi(ptr nocapture noundef %72) #17
  store i32 %73, ptr %4, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %5) #16
  br label %76

74:                                               ; preds = %68
  store i32 %28, ptr %4, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %5) #16
  %75 = icmp eq i32 %0, 5
  br i1 %75, label %76, label %81

76:                                               ; preds = %.thread487, %74
  %77 = phi i32 [ %73, %.thread487 ], [ %28, %74 ]
  %78 = getelementptr inbounds i8, ptr %1, i64 32
  %79 = load ptr, ptr %78, align 8, !tbaa !5
  %80 = tail call i32 @atoi(ptr nocapture noundef %79) #17
  br label %81

81:                                               ; preds = %74, %.thread488, %76
  %82 = phi i32 [ %77, %76 ], [ %28, %.thread488 ], [ %28, %74 ]
  %83 = phi i32 [ %52, %76 ], [ %.ph, %.thread488 ], [ %52, %74 ]
  %84 = phi i32 [ %69, %76 ], [ -1, %.thread488 ], [ %69, %74 ]
  %85 = phi i32 [ %80, %76 ], [ %28, %.thread488 ], [ %28, %74 ]
  store i32 %85, ptr %5, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %6) #16
  store i8 78, ptr %6, align 1, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %7) #16
  store i8 78, ptr %7, align 1, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %8) #16
  store double 1.000000e+00, ptr %8, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %9) #16
  store double 1.000000e+00, ptr %9, align 8, !tbaa !12
  %86 = mul nsw i32 %85, %28
  %87 = icmp sgt i32 %86, 4096
  br i1 %87, label %88, label %92

88:                                               ; preds = %81
  %89 = tail call ptr @__cxa_allocate_exception(i64 8) #16
  store ptr @.str, ptr %89, align 16, !tbaa !5
  invoke void @__cxa_throw(ptr nonnull %89, ptr nonnull @_ZTIPKc, ptr null) #18
          to label %661 unwind label %90

90:                                               ; preds = %88
  %91 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  br label %640

92:                                               ; preds = %81
  %93 = mul i32 %82, %28
  %94 = mul i32 %85, %82
  %95 = icmp sgt i32 %83, 0
  br i1 %95, label %96, label %98

96:                                               ; preds = %92
  %97 = zext nneg i32 %83 to i64
  br label %103

98:                                               ; preds = %92
  %99 = add nsw i32 %94, %93
  %100 = sext i32 %99 to i64
  %101 = shl nsw i64 %100, 3
  %102 = udiv i64 2147483648, %101
  br label %103

103:                                              ; preds = %98, %96
  %104 = phi i64 [ %97, %96 ], [ %102, %98 ]
  %105 = trunc nuw i64 %104 to i32
  %106 = icmp sgt i32 %84, 0
  br i1 %106, label %112, label %107

107:                                              ; preds = %103
  %108 = mul nsw i32 %105, 160
  %109 = sdiv i32 %108, 240
  %110 = sext i32 %109 to i64
  %111 = invoke i32 @libxsmm_isqrt_u64(i64 noundef %110)
          to label %._crit_edge668 unwind label %179

._crit_edge668:                                   ; preds = %107
  %.pre = load i32, ptr %3, align 4, !tbaa !9
  %.pre669 = load i32, ptr %5, align 4, !tbaa !9
  %.pre670 = load i32, ptr %4, align 4, !tbaa !9
  br label %112

112:                                              ; preds = %._crit_edge668, %103
  %113 = phi i32 [ %.pre670, %._crit_edge668 ], [ %82, %103 ]
  %114 = phi i32 [ %.pre669, %._crit_edge668 ], [ %85, %103 ]
  %115 = phi i32 [ %.pre, %._crit_edge668 ], [ %28, %103 ]
  %116 = phi i32 [ %111, %._crit_edge668 ], [ %84, %103 ]
  %117 = add nsw i32 %94, %93
  %118 = mul nsw i32 %117, %105
  %119 = add i32 %105, -1
  %120 = add i32 %119, %116
  %121 = sdiv i32 %120, %116
  %122 = shl i32 %86, 1
  %123 = mul i32 %122, %121
  %124 = add nsw i32 %123, %118
  %125 = sext i32 %124 to i64
  %126 = shl nsw i64 %125, 3
  %127 = sitofp i32 %105 to double
  %128 = fmul double %127, 2.000000e+00
  %129 = sitofp i32 %115 to double
  %130 = fmul double %128, %129
  %131 = sitofp i32 %114 to double
  %132 = fmul double %130, %131
  %133 = sitofp i32 %113 to double
  %134 = fmul double %132, %133
  %135 = fmul double %134, 1.000000e-09
  %136 = fdiv double 1.000000e+00, %127
  call void @llvm.lifetime.start.p0(i64 6, ptr nonnull %10) #16
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(6) %10, ptr noundef nonnull align 1 dereferenceable(6) @__const.main.ops, i64 6, i1 false)
  %137 = tail call ptr @getenv(ptr noundef nonnull @.str.1) #16
  %138 = icmp eq ptr %137, null
  br i1 %138, label %.thread490, label %139

139:                                              ; preds = %112
  %140 = tail call double @atof(ptr noundef %137) #17
  %141 = fcmp ult double %140, 0.000000e+00
  br i1 %141, label %142, label %.thread490

142:                                              ; preds = %139
  %143 = fneg double %140
  br label %.thread490

.thread490:                                       ; preds = %139, %112, %142
  %144 = phi double [ %143, %142 ], [ 0.000000e+00, %112 ], [ %140, %139 ]
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %11) #16
  %145 = mul nsw i32 %93, %105
  %146 = add nsw i32 %145, 7
  %147 = mul nsw i32 %94, %105
  %148 = add nsw i32 %147, 7
  invoke void @_ZZ4mainEN4raiiC2Eiii(ptr noundef nonnull align 8 dereferenceable(24) %11, i32 noundef %146, i32 noundef %148, i32 noundef %86)
          to label %149 unwind label %181

149:                                              ; preds = %.thread490
  %150 = load ptr, ptr %11, align 8, !tbaa !14
  %151 = ptrtoint ptr %150 to i64
  %152 = add i64 %151, 63
  %153 = and i64 %152, -64
  %154 = sub i64 %153, %151
  %155 = lshr i64 %154, 3
  %156 = getelementptr inbounds double, ptr %150, i64 %155
  %157 = getelementptr inbounds i8, ptr %11, i64 8
  %158 = load ptr, ptr %157, align 8, !tbaa !16
  %159 = ptrtoint ptr %158 to i64
  %160 = add i64 %159, 63
  %161 = and i64 %160, -64
  %162 = sub i64 %161, %159
  %163 = lshr i64 %162, 3
  %164 = getelementptr inbounds double, ptr %158, i64 %163
  %165 = getelementptr inbounds i8, ptr %11, i64 16
  %166 = load ptr, ptr %165, align 8, !tbaa !17
  %167 = icmp sgt i32 %105, 0
  br i1 %167, label %.lr.ph522, label %._crit_edge523

.lr.ph522:                                        ; preds = %149
  %168 = load i32, ptr %3, align 4, !tbaa !9
  %169 = load i32, ptr %4, align 4, !tbaa !9
  %170 = icmp sgt i32 %169, 0
  %171 = icmp sgt i32 %168, 0
  %172 = sitofp i32 %168 to double
  %173 = load i32, ptr %5, align 4, !tbaa !9
  %174 = icmp sgt i32 %173, 0
  %175 = sitofp i32 %169 to double
  %176 = zext i32 %168 to i64
  %177 = sext i32 %93 to i64
  %178 = sext i32 %94 to i64
  %wide.trip.count597 = zext i32 %169 to i64
  %wide.trip.count612 = zext nneg i32 %173 to i64
  %wide.trip.count602 = zext nneg i32 %169 to i64
  %min.iters.check690 = icmp ult i32 %168, 4
  %n.vec693 = and i64 %176, 2147483644
  %cmp.n706 = icmp eq i64 %n.vec693, %176
  %min.iters.check = icmp ult i32 %169, 4
  %n.vec = and i64 %wide.trip.count597, 2147483644
  %cmp.n = icmp eq i64 %n.vec, %wide.trip.count597
  br label %183

._crit_edge523:                                   ; preds = %._crit_edge519, %149
  invoke void @libxsmm_init()
          to label %232 unwind label %264

179:                                              ; preds = %107
  %180 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  br label %640

181:                                              ; preds = %.thread490
  %182 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  br label %639

183:                                              ; preds = %.lr.ph522, %._crit_edge519
  %indvars.iv614 = phi i64 [ 0, %.lr.ph522 ], [ %indvars.iv.next615, %._crit_edge519 ]
  %184 = trunc i64 %indvars.iv614 to i32
  %185 = add i32 %184, 42
  %186 = uitofp nneg i32 %185 to double
  %187 = call double @llvm.fmuladd.f64(double %186, double %136, double %136)
  br i1 %170, label %.preheader504.lr.ph, label %._crit_edge509

.preheader504.lr.ph:                              ; preds = %183
  %188 = mul nsw i64 %indvars.iv614, %177
  %189 = getelementptr inbounds double, ptr %156, i64 %188
  br i1 %171, label %.preheader504.us.preheader, label %._crit_edge509

.preheader504.us.preheader:                       ; preds = %.preheader504.lr.ph
  %broadcast.splatinsert703 = insertelement <2 x double> poison, double %187, i64 0
  %broadcast.splat704 = shufflevector <2 x double> %broadcast.splatinsert703, <2 x double> poison, <2 x i32> zeroinitializer
  br label %.preheader504.us

.preheader504.us:                                 ; preds = %.preheader504.us.preheader, %._crit_edge.us
  %indvars.iv594 = phi i64 [ %indvars.iv.next595, %._crit_edge.us ], [ 0, %.preheader504.us.preheader ]
  %190 = mul nuw nsw i64 %indvars.iv594, %176
  %191 = trunc nuw nsw i64 %indvars.iv594 to i32
  %192 = uitofp nneg i32 %191 to double
  %193 = call double @llvm.fmuladd.f64(double %192, double %172, double 1.000000e+00)
  %invariant.gep = getelementptr inbounds double, ptr %189, i64 %190
  br i1 %min.iters.check690, label %scalar.ph689.preheader, label %vector.ph691

scalar.ph689.preheader:                           ; preds = %middle.block688, %.preheader504.us
  %indvars.iv.ph = phi i64 [ 0, %.preheader504.us ], [ %n.vec693, %middle.block688 ]
  br label %scalar.ph689

vector.ph691:                                     ; preds = %.preheader504.us
  %broadcast.splatinsert701 = insertelement <2 x double> poison, double %193, i64 0
  %broadcast.splat702 = shufflevector <2 x double> %broadcast.splatinsert701, <2 x double> poison, <2 x i32> zeroinitializer
  br label %vector.body695

vector.body695:                                   ; preds = %vector.body695, %vector.ph691
  %index696 = phi i64 [ 0, %vector.ph691 ], [ %index.next705, %vector.body695 ]
  %vec.ind697 = phi <2 x i32> [ <i32 0, i32 1>, %vector.ph691 ], [ %vec.ind.next700, %vector.body695 ]
  %step.add698 = add <2 x i32> %vec.ind697, <i32 2, i32 2>
  %194 = uitofp <2 x i32> %vec.ind697 to <2 x double>
  %195 = uitofp <2 x i32> %step.add698 to <2 x double>
  %196 = fadd <2 x double> %broadcast.splat702, %194
  %197 = fadd <2 x double> %broadcast.splat702, %195
  %198 = fmul <2 x double> %broadcast.splat704, %196
  %199 = fmul <2 x double> %broadcast.splat704, %197
  %200 = getelementptr inbounds double, ptr %invariant.gep, i64 %index696
  %201 = getelementptr inbounds i8, ptr %200, i64 16
  store <2 x double> %198, ptr %200, align 8, !tbaa !12
  store <2 x double> %199, ptr %201, align 8, !tbaa !12
  %index.next705 = add nuw i64 %index696, 4
  %vec.ind.next700 = add <2 x i32> %vec.ind697, <i32 4, i32 4>
  %202 = icmp eq i64 %index.next705, %n.vec693
  br i1 %202, label %middle.block688, label %vector.body695, !llvm.loop !18

middle.block688:                                  ; preds = %vector.body695
  br i1 %cmp.n706, label %._crit_edge.us, label %scalar.ph689.preheader

._crit_edge.us:                                   ; preds = %scalar.ph689, %middle.block688
  %indvars.iv.next595 = add nuw nsw i64 %indvars.iv594, 1
  %exitcond598.not = icmp eq i64 %indvars.iv.next595, %wide.trip.count597
  br i1 %exitcond598.not, label %._crit_edge509, label %.preheader504.us, !llvm.loop !22

scalar.ph689:                                     ; preds = %scalar.ph689.preheader, %scalar.ph689
  %indvars.iv = phi i64 [ %indvars.iv.next, %scalar.ph689 ], [ %indvars.iv.ph, %scalar.ph689.preheader ]
  %203 = trunc nuw nsw i64 %indvars.iv to i32
  %204 = uitofp nneg i32 %203 to double
  %205 = fadd double %193, %204
  %206 = fmul double %187, %205
  %gep = getelementptr inbounds double, ptr %invariant.gep, i64 %indvars.iv
  store double %206, ptr %gep, align 8, !tbaa !12
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, %176
  br i1 %exitcond.not, label %._crit_edge.us, label %scalar.ph689, !llvm.loop !23

._crit_edge509:                                   ; preds = %._crit_edge.us, %.preheader504.lr.ph, %183
  %207 = trunc i64 %indvars.iv614 to i32
  %208 = add i32 %207, 24
  %209 = uitofp nneg i32 %208 to double
  %210 = call double @llvm.fmuladd.f64(double %209, double %136, double %136)
  br i1 %174, label %.preheader502.lr.ph, label %._crit_edge519

.preheader502.lr.ph:                              ; preds = %._crit_edge509
  %211 = mul nsw i64 %indvars.iv614, %178
  %212 = getelementptr inbounds double, ptr %164, i64 %211
  %broadcast.splatinsert686 = insertelement <2 x double> poison, double %210, i64 0
  %broadcast.splat687 = shufflevector <2 x double> %broadcast.splatinsert686, <2 x double> poison, <2 x i32> zeroinitializer
  br label %.preheader502

.preheader502:                                    ; preds = %.preheader502.lr.ph, %._crit_edge
  %indvars.iv609 = phi i64 [ 0, %.preheader502.lr.ph ], [ %indvars.iv.next610, %._crit_edge ]
  br i1 %170, label %.lr.ph, label %._crit_edge

.lr.ph:                                           ; preds = %.preheader502
  %213 = trunc nuw nsw i64 %indvars.iv609 to i32
  %214 = uitofp nneg i32 %213 to double
  %215 = call double @llvm.fmuladd.f64(double %214, double %175, double 1.000000e+00)
  %216 = trunc i64 %indvars.iv609 to i32
  %217 = mul i32 %169, %216
  %218 = zext i32 %217 to i64
  %invariant.gep677 = getelementptr inbounds double, ptr %212, i64 %218
  br i1 %min.iters.check, label %scalar.ph.preheader, label %vector.ph

vector.ph:                                        ; preds = %.lr.ph
  %broadcast.splatinsert = insertelement <2 x double> poison, double %215, i64 0
  %broadcast.splat = shufflevector <2 x double> %broadcast.splatinsert, <2 x double> poison, <2 x i32> zeroinitializer
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %vec.ind = phi <2 x i32> [ <i32 0, i32 1>, %vector.ph ], [ %vec.ind.next, %vector.body ]
  %step.add = add <2 x i32> %vec.ind, <i32 2, i32 2>
  %219 = uitofp <2 x i32> %vec.ind to <2 x double>
  %220 = uitofp <2 x i32> %step.add to <2 x double>
  %221 = fadd <2 x double> %broadcast.splat, %219
  %222 = fadd <2 x double> %broadcast.splat, %220
  %223 = fmul <2 x double> %broadcast.splat687, %221
  %224 = fmul <2 x double> %broadcast.splat687, %222
  %225 = getelementptr inbounds double, ptr %invariant.gep677, i64 %index
  %226 = getelementptr inbounds i8, ptr %225, i64 16
  store <2 x double> %223, ptr %225, align 8, !tbaa !12
  store <2 x double> %224, ptr %226, align 8, !tbaa !12
  %index.next = add nuw i64 %index, 4
  %vec.ind.next = add <2 x i32> %vec.ind, <i32 4, i32 4>
  %227 = icmp eq i64 %index.next, %n.vec
  br i1 %227, label %middle.block, label %vector.body, !llvm.loop !24

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

scalar.ph.preheader:                              ; preds = %middle.block, %.lr.ph
  %indvars.iv599.ph = phi i64 [ 0, %.lr.ph ], [ %n.vec, %middle.block ]
  br label %scalar.ph

scalar.ph:                                        ; preds = %scalar.ph.preheader, %scalar.ph
  %indvars.iv599 = phi i64 [ %indvars.iv.next600, %scalar.ph ], [ %indvars.iv599.ph, %scalar.ph.preheader ]
  %228 = trunc nuw nsw i64 %indvars.iv599 to i32
  %229 = uitofp nneg i32 %228 to double
  %230 = fadd double %215, %229
  %231 = fmul double %210, %230
  %gep678 = getelementptr inbounds double, ptr %invariant.gep677, i64 %indvars.iv599
  store double %231, ptr %gep678, align 8, !tbaa !12
  %indvars.iv.next600 = add nuw nsw i64 %indvars.iv599, 1
  %exitcond603.not = icmp eq i64 %indvars.iv.next600, %wide.trip.count602
  br i1 %exitcond603.not, label %._crit_edge, label %scalar.ph, !llvm.loop !25

._crit_edge:                                      ; preds = %scalar.ph, %middle.block, %.preheader502
  %indvars.iv.next610 = add nuw nsw i64 %indvars.iv609, 1
  %exitcond613.not = icmp eq i64 %indvars.iv.next610, %wide.trip.count612
  br i1 %exitcond613.not, label %._crit_edge519, label %.preheader502, !llvm.loop !26

._crit_edge519:                                   ; preds = %._crit_edge, %._crit_edge509
  %indvars.iv.next615 = add nuw nsw i64 %indvars.iv614, 1
  %exitcond618.not = icmp eq i64 %indvars.iv.next615, %104
  br i1 %exitcond618.not, label %._crit_edge523, label %183, !llvm.loop !27

232:                                              ; preds = %._crit_edge523
  %233 = load ptr, ptr @stdout, align 8, !tbaa !5
  %234 = load i32, ptr %3, align 4, !tbaa !9
  %235 = sext i32 %234 to i64
  %236 = load i32, ptr %5, align 4, !tbaa !9
  %237 = sext i32 %236 to i64
  %238 = load i32, ptr %4, align 4, !tbaa !9
  %239 = sext i32 %238 to i64
  %sext = shl nuw i64 %104, 32
  %240 = ashr exact i64 %sext, 32
  %241 = sext i32 %118 to i64
  %242 = shl nsw i64 %241, 3
  %243 = uitofp i64 %242 to double
  %244 = fmul double %243, 0x3EB0000000000000
  %245 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %233, ptr noundef nonnull @.str.2, i64 noundef %235, i64 noundef %237, i64 noundef %239, i64 noundef %240, double noundef %244, ptr noundef nonnull @.str.3) #16
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %12) #16
  %246 = fcmp oeq double %144, 0.000000e+00
  %247 = select i1 %246, i32 0, i32 %86
  invoke void @_ZZ4mainEN11raii_expectC2Ei(ptr noundef nonnull align 8 dereferenceable(8) %12, i32 noundef %247)
          to label %248 unwind label %266

248:                                              ; preds = %232
  %249 = load ptr, ptr %12, align 8
  %250 = icmp eq ptr %249, null
  %251 = select i1 %250, ptr %166, ptr %249
  call void @llvm.lifetime.start.p0(i64 192, ptr nonnull %13) #16
  call void @llvm.lifetime.start.p0(i64 192, ptr nonnull %14) #16
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %15) #16
  store double 0.000000e+00, ptr %15, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %16) #16
  %252 = load i32, ptr %3, align 4, !tbaa !9
  %253 = load i32, ptr %5, align 4, !tbaa !9
  %254 = load i32, ptr %4, align 4, !tbaa !9
  invoke void @_ZN18libxsmm_mmfunctionIddLin1EEC2Eiiiii(ptr noundef nonnull align 8 dereferenceable(8) %16, i32 noundef 0, i32 noundef %252, i32 noundef %253, i32 noundef %254, i32 noundef -1)
          to label %255 unwind label %268

255:                                              ; preds = %248
  invoke void @libxsmm_matdiff_clear(ptr noundef nonnull %14)
          to label %256 unwind label %268

256:                                              ; preds = %255
  %257 = invoke noundef ptr @_ZSt6fill_nIPdidET_S1_T0_RKT1_(ptr noundef %251, i32 noundef %86, ptr noundef nonnull align 8 dereferenceable(8) %15)
          to label %.preheader500 unwind label %268

.preheader500:                                    ; preds = %256
  br i1 %167, label %.lr.ph531, label %._crit_edge532

.lr.ph531:                                        ; preds = %.preheader500
  %258 = sext i32 %93 to i64
  %259 = sext i32 %94 to i64
  %260 = sext i32 %116 to i64
  br label %270

._crit_edge532:                                   ; preds = %._crit_edge529, %.preheader500
  %261 = load ptr, ptr @stdout, align 8, !tbaa !5
  %262 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %261, ptr noundef nonnull @.str.4) #16
  %263 = invoke noundef ptr @_ZSt6fill_nIPdidET_S1_T0_RKT1_(ptr noundef %166, i32 noundef %86, ptr noundef nonnull align 8 dereferenceable(8) %15)
          to label %290 unwind label %268

264:                                              ; preds = %._crit_edge523
  %265 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  br label %638

266:                                              ; preds = %232
  %267 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  br label %637

268:                                              ; preds = %622, %555, %485, %353, %._crit_edge532, %256, %255, %248
  %269 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  br label %636

270:                                              ; preds = %.lr.ph531, %._crit_edge529
  %indvars.iv622 = phi i64 [ 0, %.lr.ph531 ], [ %indvars.iv.next623, %._crit_edge529 ]
  %indvars.iv619 = phi i32 [ %105, %.lr.ph531 ], [ %indvars.iv.next620, %._crit_edge529 ]
  %smin = call i32 @llvm.smin.i32(i32 %116, i32 %indvars.iv619)
  call void @llvm.lifetime.start.p0(i64 32768, ptr nonnull %17) #16
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 16 dereferenceable(32768) %17, i8 0, i64 32768, i1 false)
  %271 = sub nsw i64 %104, %indvars.iv622
  %272 = trunc nsw i64 %271 to i32
  %273 = call i32 @llvm.smin.i32(i32 %116, i32 %272)
  %274 = icmp sgt i32 %273, 0
  br i1 %274, label %.lr.ph528.preheader, label %._crit_edge529

.lr.ph528.preheader:                              ; preds = %270
  %275 = mul nsw i64 %indvars.iv622, %259
  %276 = getelementptr inbounds double, ptr %164, i64 %275
  %277 = mul nsw i64 %indvars.iv622, %258
  %278 = getelementptr inbounds double, ptr %156, i64 %277
  br label %.lr.ph528

._crit_edge529:                                   ; preds = %286, %270
  %279 = load i32, ptr %3, align 4, !tbaa !9
  %280 = load i32, ptr %5, align 4, !tbaa !9
  call void @_Z3addIdEvPT_PKS0_iii(ptr noundef %251, ptr noundef nonnull %17, i32 noundef %279, i32 noundef %280, i32 noundef 0)
  call void @llvm.lifetime.end.p0(i64 32768, ptr nonnull %17) #16
  %indvars.iv.next623 = add nsw i64 %indvars.iv622, %260
  %281 = icmp slt i64 %indvars.iv.next623, %104
  %indvars.iv.next620 = sub i32 %indvars.iv619, %116
  br i1 %281, label %270, label %._crit_edge532, !llvm.loop !28

.lr.ph528:                                        ; preds = %.lr.ph528.preheader, %286
  %.0436526 = phi ptr [ %282, %286 ], [ %278, %.lr.ph528.preheader ]
  %.0440525 = phi ptr [ %283, %286 ], [ %276, %.lr.ph528.preheader ]
  %.0441524 = phi i32 [ %287, %286 ], [ 0, %.lr.ph528.preheader ]
  %282 = getelementptr inbounds double, ptr %.0436526, i64 %258
  %283 = getelementptr inbounds double, ptr %.0440525, i64 %259
  %284 = invoke ptr @libxsmm_original_dgemm()
          to label %285 unwind label %288

285:                                              ; preds = %.lr.ph528
  invoke void %284(ptr noundef nonnull %6, ptr noundef nonnull %7, ptr noundef nonnull %3, ptr noundef nonnull %5, ptr noundef nonnull %4, ptr noundef nonnull %8, ptr noundef %.0436526, ptr noundef nonnull %3, ptr noundef %.0440525, ptr noundef nonnull %4, ptr noundef nonnull %9, ptr noundef nonnull %17, ptr noundef nonnull %3)
          to label %286 unwind label %288

286:                                              ; preds = %285
  %287 = add nuw nsw i32 %.0441524, 1
  %exitcond621.not = icmp eq i32 %287, %smin
  br i1 %exitcond621.not, label %._crit_edge529, label %.lr.ph528, !llvm.loop !29

288:                                              ; preds = %285, %.lr.ph528
  %289 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  call void @llvm.lifetime.end.p0(i64 32768, ptr nonnull %17) #16
  br label %636

290:                                              ; preds = %._crit_edge532
  %291 = invoke i64 @libxsmm_timer_tick()
          to label %.preheader499 unwind label %296

.preheader499:                                    ; preds = %290
  br i1 %167, label %.lr.ph540, label %._crit_edge541

.lr.ph540:                                        ; preds = %.preheader499
  %292 = sext i32 %93 to i64
  %293 = sext i32 %94 to i64
  %294 = sext i32 %116 to i64
  br label %298

._crit_edge541:                                   ; preds = %._crit_edge538, %.preheader499
  %295 = invoke i64 @libxsmm_timer_tick()
          to label %318 unwind label %334

296:                                              ; preds = %290
  %297 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  br label %636

298:                                              ; preds = %.lr.ph540, %._crit_edge538
  %indvars.iv629 = phi i64 [ 0, %.lr.ph540 ], [ %indvars.iv.next630, %._crit_edge538 ]
  %indvars.iv625 = phi i32 [ %105, %.lr.ph540 ], [ %indvars.iv.next626, %._crit_edge538 ]
  %smin627 = call i32 @llvm.smin.i32(i32 %116, i32 %indvars.iv625)
  call void @llvm.lifetime.start.p0(i64 32768, ptr nonnull %18) #16
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 16 dereferenceable(32768) %18, i8 0, i64 32768, i1 false)
  %299 = sub nsw i64 %104, %indvars.iv629
  %300 = trunc nsw i64 %299 to i32
  %301 = call i32 @llvm.smin.i32(i32 %116, i32 %300)
  %302 = icmp sgt i32 %301, 0
  br i1 %302, label %.lr.ph537.preheader, label %._crit_edge538

.lr.ph537.preheader:                              ; preds = %298
  %303 = mul nsw i64 %indvars.iv629, %293
  %304 = getelementptr inbounds double, ptr %164, i64 %303
  %305 = mul nsw i64 %indvars.iv629, %292
  %306 = getelementptr inbounds double, ptr %156, i64 %305
  br label %.lr.ph537

._crit_edge538:                                   ; preds = %314, %298
  %307 = load i32, ptr %3, align 4, !tbaa !9
  %308 = load i32, ptr %5, align 4, !tbaa !9
  call void @_Z3addIdEvPT_PKS0_iii(ptr noundef %166, ptr noundef nonnull %18, i32 noundef %307, i32 noundef %308, i32 noundef 0)
  call void @llvm.lifetime.end.p0(i64 32768, ptr nonnull %18) #16
  %indvars.iv.next630 = add nsw i64 %indvars.iv629, %294
  %309 = icmp slt i64 %indvars.iv.next630, %104
  %indvars.iv.next626 = sub i32 %indvars.iv625, %116
  br i1 %309, label %298, label %._crit_edge541, !llvm.loop !30

.lr.ph537:                                        ; preds = %.lr.ph537.preheader, %314
  %.0443535 = phi ptr [ %310, %314 ], [ %306, %.lr.ph537.preheader ]
  %.0444534 = phi ptr [ %311, %314 ], [ %304, %.lr.ph537.preheader ]
  %.0445533 = phi i32 [ %315, %314 ], [ 0, %.lr.ph537.preheader ]
  %310 = getelementptr inbounds double, ptr %.0443535, i64 %292
  %311 = getelementptr inbounds double, ptr %.0444534, i64 %293
  %312 = invoke ptr @libxsmm_original_dgemm()
          to label %313 unwind label %316

313:                                              ; preds = %.lr.ph537
  invoke void %312(ptr noundef nonnull %6, ptr noundef nonnull %7, ptr noundef nonnull %3, ptr noundef nonnull %5, ptr noundef nonnull %4, ptr noundef nonnull %8, ptr noundef %.0443535, ptr noundef nonnull %3, ptr noundef %.0444534, ptr noundef nonnull %4, ptr noundef nonnull %9, ptr noundef nonnull %18, ptr noundef nonnull %3)
          to label %314 unwind label %316

314:                                              ; preds = %313
  %315 = add nuw nsw i32 %.0445533, 1
  %exitcond628.not = icmp eq i32 %315, %smin627
  br i1 %exitcond628.not, label %._crit_edge538, label %.lr.ph537, !llvm.loop !31

316:                                              ; preds = %313, %.lr.ph537
  %317 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  call void @llvm.lifetime.end.p0(i64 32768, ptr nonnull %18) #16
  br label %636

318:                                              ; preds = %._crit_edge541
  %319 = invoke double @libxsmm_timer_duration(i64 noundef %291, i64 noundef %295)
          to label %320 unwind label %334

320:                                              ; preds = %318
  %321 = fcmp ogt double %319, 0.000000e+00
  br i1 %321, label %322, label %336

322:                                              ; preds = %320
  %323 = load ptr, ptr @stdout, align 8, !tbaa !5
  %324 = fdiv double %135, %319
  %325 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %323, ptr noundef nonnull @.str.5, double noundef %324, ptr noundef nonnull %10) #16
  %326 = load ptr, ptr @stdout, align 8, !tbaa !5
  %327 = uitofp i64 %126 to double
  %328 = fmul double %319, 0x41D0000000000000
  %329 = fdiv double %327, %328
  %330 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %326, ptr noundef nonnull @.str.6, double noundef %329) #16
  %331 = load ptr, ptr @stdout, align 8, !tbaa !5
  %332 = fdiv double %127, %319
  %333 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %331, ptr noundef nonnull @.str.7, double noundef %332) #16
  br label %336

334:                                              ; preds = %346, %340, %318, %._crit_edge541
  %335 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  br label %636

336:                                              ; preds = %322, %320
  %337 = load ptr, ptr @stdout, align 8, !tbaa !5
  %338 = fmul double %319, 1.000000e+03
  %339 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %337, ptr noundef nonnull @.str.8, double noundef %338) #16
  br i1 %246, label %353, label %340

340:                                              ; preds = %336
  %341 = load i32, ptr %3, align 4, !tbaa !9
  %342 = load i32, ptr %5, align 4, !tbaa !9
  %343 = invoke i32 @libxsmm_matdiff(ptr noundef nonnull %13, i32 noundef 0, i32 noundef %341, i32 noundef %342, ptr noundef %251, ptr noundef %166, ptr noundef null, ptr noundef null)
          to label %344 unwind label %334

344:                                              ; preds = %340
  %345 = icmp eq i32 %343, 0
  br i1 %345, label %346, label %353

346:                                              ; preds = %344
  %347 = load ptr, ptr @stdout, align 8, !tbaa !5
  %348 = getelementptr inbounds i8, ptr %13, i64 56
  %349 = load double, ptr %348, align 8, !tbaa !32
  %350 = getelementptr inbounds i8, ptr %13, i64 40
  %351 = load double, ptr %350, align 8, !tbaa !34
  %352 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %347, ptr noundef nonnull @.str.9, double noundef %349, double noundef %351) #16
  invoke void @libxsmm_matdiff_reduce(ptr noundef nonnull %14, ptr noundef nonnull %13)
          to label %353 unwind label %334

353:                                              ; preds = %346, %344, %336
  %354 = load ptr, ptr @stdout, align 8, !tbaa !5
  %355 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %354, ptr noundef nonnull @.str.10) #16
  %356 = invoke noundef ptr @_ZSt6fill_nIPdidET_S1_T0_RKT1_(ptr noundef %166, i32 noundef %86, ptr noundef nonnull align 8 dereferenceable(8) %15)
          to label %357 unwind label %268

357:                                              ; preds = %353
  %358 = invoke i64 @libxsmm_timer_tick()
          to label %.preheader498 unwind label %373

.preheader498:                                    ; preds = %357
  br i1 %167, label %.lr.ph569, label %._crit_edge570

.lr.ph569:                                        ; preds = %.preheader498
  %359 = sext i32 %93 to i64
  %360 = sext i32 %94 to i64
  %361 = sext i32 %116 to i64
  %362 = and i64 %162, -8
  %363 = mul nsw i64 %361, %360
  %364 = shl i64 %363, 3
  %365 = shl nsw i64 %360, 3
  %366 = and i64 %154, -8
  %367 = mul nsw i64 %361, %359
  %368 = shl i64 %367, 3
  %369 = shl nsw i64 %359, 3
  %370 = getelementptr i8, ptr %158, i64 %362
  %371 = getelementptr i8, ptr %370, i64 -8
  br label %375

._crit_edge570:                                   ; preds = %._crit_edge559, %.preheader498
  %372 = invoke i64 @libxsmm_timer_tick()
          to label %450 unwind label %466

373:                                              ; preds = %357
  %374 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  br label %636

375:                                              ; preds = %.lr.ph569, %._crit_edge559
  %indvar = phi i64 [ 0, %.lr.ph569 ], [ %indvar.next, %._crit_edge559 ]
  %indvars.iv651 = phi i64 [ 0, %.lr.ph569 ], [ %indvars.iv.next652, %._crit_edge559 ]
  %indvars.iv647 = phi i32 [ %105, %.lr.ph569 ], [ %indvars.iv.next648, %._crit_edge559 ]
  %376 = mul i64 %364, %indvar
  %377 = mul i64 %368, %indvar
  %378 = add i64 %366, %377
  %smin649 = call i32 @llvm.smin.i32(i32 %116, i32 %indvars.iv647)
  call void @llvm.lifetime.start.p0(i64 32768, ptr nonnull %19) #16
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 16 dereferenceable(32768) %19, i8 0, i64 32768, i1 false)
  %379 = mul nsw i64 %indvars.iv651, %359
  %380 = getelementptr inbounds double, ptr %156, i64 %379
  %381 = mul nsw i64 %indvars.iv651, %360
  %382 = getelementptr inbounds double, ptr %164, i64 %381
  %383 = sub nsw i64 %104, %indvars.iv651
  %384 = trunc nsw i64 %383 to i32
  %385 = call i32 @llvm.smin.i32(i32 %116, i32 %384)
  %386 = icmp sgt i32 %385, 0
  %.pre671 = load i32, ptr %3, align 4, !tbaa !9
  %.pre672 = load i32, ptr %5, align 4, !tbaa !9
  br i1 %386, label %.lr.ph558, label %._crit_edge559

.lr.ph558:                                        ; preds = %375
  %387 = load i32, ptr %4, align 4, !tbaa !9
  %388 = icmp slt i32 %.pre671, 1
  %389 = icmp slt i32 %.pre672, 1
  %390 = icmp slt i32 %387, 1
  %or.cond.not684 = select i1 %388, i1 true, i1 %390
  %brmerge = select i1 %or.cond.not684, i1 true, i1 %389
  br i1 %brmerge, label %._crit_edge559, label %.preheader497.lr.ph.us.us.us.preheader

.preheader497.lr.ph.us.us.us.preheader:           ; preds = %.lr.ph558
  %391 = zext nneg i32 %387 to i64
  %392 = zext nneg i32 %.pre671 to i64
  %wide.trip.count635 = zext nneg i32 %.pre672 to i64
  %393 = shl nuw nsw i64 %wide.trip.count635, 3
  %394 = shl nuw nsw i64 %391, 3
  %395 = getelementptr i8, ptr %371, i64 %376
  %396 = getelementptr i8, ptr %395, i64 %393
  %397 = getelementptr i8, ptr %396, i64 %394
  %398 = getelementptr i8, ptr %19, i64 %393
  %399 = getelementptr i8, ptr %150, i64 %378
  %400 = getelementptr i8, ptr %150, i64 %378
  %401 = getelementptr i8, ptr %400, i64 %394
  %min.iters.check719 = icmp ult i32 %.pre672, 6
  %ident.check = icmp ne i32 %.pre671, 1
  %ident.check707 = icmp ne i32 %387, 1
  %402 = or i1 %ident.check, %ident.check707
  %n.vec722 = and i64 %wide.trip.count635, 2147483644
  %cmp.n734 = icmp eq i64 %n.vec722, %wide.trip.count635
  %xtraiter = and i64 %wide.trip.count635, 1
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  %403 = add nsw i64 %wide.trip.count635, -1
  br label %.preheader497.lr.ph.us.us.us

.preheader497.lr.ph.us.us.us:                     ; preds = %.preheader497.lr.ph.us.us.us.preheader, %._crit_edge549.split.us.split.us.us.us.us
  %indvar709 = phi i64 [ 0, %.preheader497.lr.ph.us.us.us.preheader ], [ %indvar.next710, %._crit_edge549.split.us.split.us.us.us.us ]
  %.0447556.us.us.us = phi ptr [ %380, %.preheader497.lr.ph.us.us.us.preheader ], [ %406, %._crit_edge549.split.us.split.us.us.us.us ]
  %.0448555.us.us.us = phi ptr [ %382, %.preheader497.lr.ph.us.us.us.preheader ], [ %447, %._crit_edge549.split.us.split.us.us.us.us ]
  %.0449554.us.us.us = phi i32 [ 0, %.preheader497.lr.ph.us.us.us.preheader ], [ %448, %._crit_edge549.split.us.split.us.us.us.us ]
  %404 = mul i64 %365, %indvar709
  %scevgep711 = getelementptr i8, ptr %397, i64 %404
  %405 = mul i64 %369, %indvar709
  %406 = getelementptr inbounds double, ptr %.0447556.us.us.us, i64 %359
  %407 = getelementptr i8, ptr %399, i64 %405
  %408 = getelementptr i8, ptr %401, i64 %405
  %bound0714 = icmp ult ptr %19, %408
  %bound1715 = icmp ult ptr %407, %398
  %found.conflict716 = and i1 %bound0714, %bound1715
  br label %.preheader497.us.us.us.us.us

.preheader497.us.us.us.us.us:                     ; preds = %._crit_edge546.split.us.us.us.us.us.us, %.preheader497.lr.ph.us.us.us
  %indvars.iv642 = phi i64 [ %indvars.iv.next643, %._crit_edge546.split.us.us.us.us.us.us ], [ 0, %.preheader497.lr.ph.us.us.us ]
  %409 = shl nuw nsw i64 %indvars.iv642, 3
  %scevgep = getelementptr i8, ptr %19, i64 %409
  %scevgep708 = getelementptr i8, ptr %398, i64 %409
  %invariant.gep679 = getelementptr inbounds double, ptr %19, i64 %indvars.iv642
  %bound0 = icmp ult ptr %scevgep, %scevgep711
  %bound1 = icmp ult ptr %.0448555.us.us.us, %scevgep708
  %found.conflict = and i1 %bound0, %bound1
  %conflict.rdx = or i1 %found.conflict, %found.conflict716
  br label %.preheader496.us.us.us.us.us.us

.preheader496.us.us.us.us.us.us:                  ; preds = %._crit_edge544.us.us.us.us.us.us, %.preheader497.us.us.us.us.us
  %indvars.iv637 = phi i64 [ %indvars.iv.next638, %._crit_edge544.us.us.us.us.us.us ], [ 0, %.preheader497.us.us.us.us.us ]
  %410 = mul nuw nsw i64 %indvars.iv637, %392
  %411 = add nuw nsw i64 %410, %indvars.iv642
  %412 = getelementptr inbounds double, ptr %.0447556.us.us.us, i64 %411
  %brmerge735 = select i1 %min.iters.check719, i1 true, i1 %402
  %brmerge736 = select i1 %brmerge735, i1 true, i1 %conflict.rdx
  br i1 %brmerge736, label %scalar.ph718.preheader, label %vector.ph720

vector.ph720:                                     ; preds = %.preheader496.us.us.us.us.us.us
  %413 = load double, ptr %412, align 8, !tbaa !12, !alias.scope !35
  %broadcast.splatinsert731 = insertelement <2 x double> poison, double %413, i64 0
  %broadcast.splat732 = shufflevector <2 x double> %broadcast.splatinsert731, <2 x double> poison, <2 x i32> zeroinitializer
  br label %vector.body724

vector.body724:                                   ; preds = %vector.body724, %vector.ph720
  %index725 = phi i64 [ 0, %vector.ph720 ], [ %index.next733, %vector.body724 ]
  %414 = add nuw nsw i64 %index725, %indvars.iv637
  %415 = getelementptr inbounds double, ptr %.0448555.us.us.us, i64 %414
  %416 = getelementptr inbounds i8, ptr %415, i64 16
  %wide.load = load <2 x double>, ptr %415, align 8, !tbaa !12, !alias.scope !38
  %wide.load726 = load <2 x double>, ptr %416, align 8, !tbaa !12, !alias.scope !38
  %417 = getelementptr inbounds double, ptr %invariant.gep679, i64 %index725
  %418 = getelementptr inbounds i8, ptr %417, i64 16
  %wide.load727 = load <2 x double>, ptr %417, align 8, !tbaa !12, !alias.scope !40, !noalias !42
  %wide.load728 = load <2 x double>, ptr %418, align 8, !tbaa !12, !alias.scope !40, !noalias !42
  %419 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %wide.load, <2 x double> %broadcast.splat732, <2 x double> %wide.load727)
  %420 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %wide.load726, <2 x double> %broadcast.splat732, <2 x double> %wide.load728)
  store <2 x double> %419, ptr %417, align 8, !tbaa !12, !alias.scope !40, !noalias !42
  store <2 x double> %420, ptr %418, align 8, !tbaa !12, !alias.scope !40, !noalias !42
  %index.next733 = add nuw i64 %index725, 4
  %421 = icmp eq i64 %index.next733, %n.vec722
  br i1 %421, label %middle.block717, label %vector.body724, !llvm.loop !43

middle.block717:                                  ; preds = %vector.body724
  br i1 %cmp.n734, label %._crit_edge544.us.us.us.us.us.us, label %scalar.ph718.preheader

scalar.ph718.preheader:                           ; preds = %.preheader496.us.us.us.us.us.us, %middle.block717
  %indvars.iv632.ph = phi i64 [ 0, %.preheader496.us.us.us.us.us.us ], [ %n.vec722, %middle.block717 ]
  br i1 %lcmp.mod.not, label %scalar.ph718.prol.loopexit, label %scalar.ph718.prol

scalar.ph718.prol:                                ; preds = %scalar.ph718.preheader
  %422 = mul nuw nsw i64 %indvars.iv632.ph, %391
  %423 = add nuw nsw i64 %422, %indvars.iv637
  %424 = getelementptr inbounds double, ptr %.0448555.us.us.us, i64 %423
  %425 = load double, ptr %424, align 8, !tbaa !12
  %426 = load double, ptr %412, align 8, !tbaa !12
  %427 = mul nuw nsw i64 %indvars.iv632.ph, %392
  %gep680.prol = getelementptr inbounds double, ptr %invariant.gep679, i64 %427
  %428 = load double, ptr %gep680.prol, align 8, !tbaa !12
  %429 = call double @llvm.fmuladd.f64(double %425, double %426, double %428)
  store double %429, ptr %gep680.prol, align 8, !tbaa !12
  %indvars.iv.next633.prol = or disjoint i64 %indvars.iv632.ph, 1
  br label %scalar.ph718.prol.loopexit

scalar.ph718.prol.loopexit:                       ; preds = %scalar.ph718.prol, %scalar.ph718.preheader
  %indvars.iv632.unr = phi i64 [ %indvars.iv632.ph, %scalar.ph718.preheader ], [ %indvars.iv.next633.prol, %scalar.ph718.prol ]
  %430 = icmp eq i64 %indvars.iv632.ph, %403
  br i1 %430, label %._crit_edge544.us.us.us.us.us.us, label %scalar.ph718

scalar.ph718:                                     ; preds = %scalar.ph718.prol.loopexit, %scalar.ph718
  %indvars.iv632 = phi i64 [ %indvars.iv.next633.1, %scalar.ph718 ], [ %indvars.iv632.unr, %scalar.ph718.prol.loopexit ]
  %431 = mul nuw nsw i64 %indvars.iv632, %391
  %432 = add nuw nsw i64 %431, %indvars.iv637
  %433 = getelementptr inbounds double, ptr %.0448555.us.us.us, i64 %432
  %434 = load double, ptr %433, align 8, !tbaa !12
  %435 = load double, ptr %412, align 8, !tbaa !12
  %436 = mul nuw nsw i64 %indvars.iv632, %392
  %gep680 = getelementptr inbounds double, ptr %invariant.gep679, i64 %436
  %437 = load double, ptr %gep680, align 8, !tbaa !12
  %438 = call double @llvm.fmuladd.f64(double %434, double %435, double %437)
  store double %438, ptr %gep680, align 8, !tbaa !12
  %indvars.iv.next633 = add nuw nsw i64 %indvars.iv632, 1
  %439 = mul nuw nsw i64 %indvars.iv.next633, %391
  %440 = add nuw nsw i64 %439, %indvars.iv637
  %441 = getelementptr inbounds double, ptr %.0448555.us.us.us, i64 %440
  %442 = load double, ptr %441, align 8, !tbaa !12
  %443 = load double, ptr %412, align 8, !tbaa !12
  %444 = mul nuw nsw i64 %indvars.iv.next633, %392
  %gep680.1 = getelementptr inbounds double, ptr %invariant.gep679, i64 %444
  %445 = load double, ptr %gep680.1, align 8, !tbaa !12
  %446 = call double @llvm.fmuladd.f64(double %442, double %443, double %445)
  store double %446, ptr %gep680.1, align 8, !tbaa !12
  %indvars.iv.next633.1 = add nuw nsw i64 %indvars.iv632, 2
  %exitcond636.not.1 = icmp eq i64 %indvars.iv.next633.1, %wide.trip.count635
  br i1 %exitcond636.not.1, label %._crit_edge544.us.us.us.us.us.us, label %scalar.ph718, !llvm.loop !44

._crit_edge544.us.us.us.us.us.us:                 ; preds = %scalar.ph718.prol.loopexit, %scalar.ph718, %middle.block717
  %indvars.iv.next638 = add nuw nsw i64 %indvars.iv637, 1
  %exitcond641.not = icmp eq i64 %indvars.iv.next638, %391
  br i1 %exitcond641.not, label %._crit_edge546.split.us.us.us.us.us.us, label %.preheader496.us.us.us.us.us.us, !llvm.loop !45

._crit_edge546.split.us.us.us.us.us.us:           ; preds = %._crit_edge544.us.us.us.us.us.us
  %indvars.iv.next643 = add nuw nsw i64 %indvars.iv642, 1
  %exitcond646.not = icmp eq i64 %indvars.iv.next643, %392
  br i1 %exitcond646.not, label %._crit_edge549.split.us.split.us.us.us.us, label %.preheader497.us.us.us.us.us, !llvm.loop !46

._crit_edge549.split.us.split.us.us.us.us:        ; preds = %._crit_edge546.split.us.us.us.us.us.us
  %447 = getelementptr inbounds double, ptr %.0448555.us.us.us, i64 %360
  %448 = add nuw nsw i32 %.0449554.us.us.us, 1
  %exitcond650.not = icmp eq i32 %448, %smin649
  %indvar.next710 = add i64 %indvar709, 1
  br i1 %exitcond650.not, label %._crit_edge559, label %.preheader497.lr.ph.us.us.us, !llvm.loop !47

._crit_edge559:                                   ; preds = %._crit_edge549.split.us.split.us.us.us.us, %.lr.ph558, %375
  call void @_Z3addIdEvPT_PKS0_iii(ptr noundef %166, ptr noundef nonnull %19, i32 noundef %.pre671, i32 noundef %.pre672, i32 noundef 0)
  call void @llvm.lifetime.end.p0(i64 32768, ptr nonnull %19) #16
  %indvars.iv.next652 = add nsw i64 %indvars.iv651, %361
  %449 = icmp slt i64 %indvars.iv.next652, %104
  %indvars.iv.next648 = sub i32 %indvars.iv647, %116
  %indvar.next = add i64 %indvar, 1
  br i1 %449, label %375, label %._crit_edge570, !llvm.loop !48

450:                                              ; preds = %._crit_edge570
  %451 = invoke double @libxsmm_timer_duration(i64 noundef %358, i64 noundef %372)
          to label %452 unwind label %466

452:                                              ; preds = %450
  %453 = fcmp ogt double %451, 0.000000e+00
  br i1 %453, label %454, label %468

454:                                              ; preds = %452
  %455 = load ptr, ptr @stdout, align 8, !tbaa !5
  %456 = fdiv double %135, %451
  %457 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %455, ptr noundef nonnull @.str.5, double noundef %456, ptr noundef nonnull %10) #16
  %458 = load ptr, ptr @stdout, align 8, !tbaa !5
  %459 = uitofp i64 %126 to double
  %460 = fmul double %451, 0x41D0000000000000
  %461 = fdiv double %459, %460
  %462 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %458, ptr noundef nonnull @.str.6, double noundef %461) #16
  %463 = load ptr, ptr @stdout, align 8, !tbaa !5
  %464 = fdiv double %127, %451
  %465 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %463, ptr noundef nonnull @.str.7, double noundef %464) #16
  br label %468

466:                                              ; preds = %478, %472, %450, %._crit_edge570
  %467 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  br label %636

468:                                              ; preds = %454, %452
  %469 = load ptr, ptr @stdout, align 8, !tbaa !5
  %470 = fmul double %451, 1.000000e+03
  %471 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %469, ptr noundef nonnull @.str.8, double noundef %470) #16
  br i1 %246, label %485, label %472

472:                                              ; preds = %468
  %473 = load i32, ptr %3, align 4, !tbaa !9
  %474 = load i32, ptr %5, align 4, !tbaa !9
  %475 = invoke i32 @libxsmm_matdiff(ptr noundef nonnull %13, i32 noundef 0, i32 noundef %473, i32 noundef %474, ptr noundef %251, ptr noundef %166, ptr noundef null, ptr noundef null)
          to label %476 unwind label %466

476:                                              ; preds = %472
  %477 = icmp eq i32 %475, 0
  br i1 %477, label %478, label %485

478:                                              ; preds = %476
  %479 = load ptr, ptr @stdout, align 8, !tbaa !5
  %480 = getelementptr inbounds i8, ptr %13, i64 56
  %481 = load double, ptr %480, align 8, !tbaa !32
  %482 = getelementptr inbounds i8, ptr %13, i64 40
  %483 = load double, ptr %482, align 8, !tbaa !34
  %484 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %479, ptr noundef nonnull @.str.9, double noundef %481, double noundef %483) #16
  invoke void @libxsmm_matdiff_reduce(ptr noundef nonnull %14, ptr noundef nonnull %13)
          to label %485 unwind label %466

485:                                              ; preds = %478, %476, %468
  %486 = load ptr, ptr @stdout, align 8, !tbaa !5
  %487 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %486, ptr noundef nonnull @.str.11) #16
  %488 = invoke noundef ptr @_ZSt6fill_nIPdidET_S1_T0_RKT1_(ptr noundef %166, i32 noundef %86, ptr noundef nonnull align 8 dereferenceable(8) %15)
          to label %489 unwind label %268

489:                                              ; preds = %485
  %490 = invoke i64 @libxsmm_timer_tick()
          to label %.preheader495 unwind label %495

.preheader495:                                    ; preds = %489
  br i1 %167, label %.lr.ph578, label %._crit_edge579

.lr.ph578:                                        ; preds = %.preheader495
  %491 = sext i32 %94 to i64
  %492 = sext i32 %93 to i64
  %493 = sext i32 %116 to i64
  br label %497

._crit_edge579:                                   ; preds = %._crit_edge576, %.preheader495
  %494 = invoke i64 @libxsmm_timer_tick()
          to label %518 unwind label %534

495:                                              ; preds = %489
  %496 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  br label %636

497:                                              ; preds = %.lr.ph578, %._crit_edge576
  %indvars.iv658 = phi i64 [ 0, %.lr.ph578 ], [ %indvars.iv.next659, %._crit_edge576 ]
  %indvars.iv654 = phi i32 [ %105, %.lr.ph578 ], [ %indvars.iv.next655, %._crit_edge576 ]
  %smin656 = call i32 @llvm.smin.i32(i32 %116, i32 %indvars.iv654)
  call void @llvm.lifetime.start.p0(i64 32768, ptr nonnull %20) #16
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 16 dereferenceable(32768) %20, i8 0, i64 32768, i1 false)
  %498 = sub nsw i64 %104, %indvars.iv658
  %499 = trunc nsw i64 %498 to i32
  %500 = call i32 @llvm.smin.i32(i32 %116, i32 %499)
  %501 = icmp sgt i32 %500, 0
  br i1 %501, label %.lr.ph575.preheader, label %._crit_edge576

.lr.ph575.preheader:                              ; preds = %497
  %502 = mul nsw i64 %indvars.iv658, %491
  %503 = getelementptr inbounds double, ptr %164, i64 %502
  %504 = mul nsw i64 %indvars.iv658, %492
  %505 = getelementptr inbounds double, ptr %156, i64 %504
  br label %.lr.ph575

._crit_edge576:                                   ; preds = %512, %497
  %506 = load i32, ptr %3, align 4, !tbaa !9
  %507 = load i32, ptr %5, align 4, !tbaa !9
  call void @_Z3addIdEvPT_PKS0_iii(ptr noundef %166, ptr noundef nonnull %20, i32 noundef %506, i32 noundef %507, i32 noundef 0)
  call void @llvm.lifetime.end.p0(i64 32768, ptr nonnull %20) #16
  %indvars.iv.next659 = add nsw i64 %indvars.iv658, %493
  %508 = icmp slt i64 %indvars.iv.next659, %104
  %indvars.iv.next655 = sub i32 %indvars.iv654, %116
  br i1 %508, label %497, label %._crit_edge579, !llvm.loop !49

.lr.ph575:                                        ; preds = %.lr.ph575.preheader, %512
  %.0432573 = phi i32 [ %515, %512 ], [ 0, %.lr.ph575.preheader ]
  %.0433572 = phi ptr [ %513, %512 ], [ %503, %.lr.ph575.preheader ]
  %.0434571 = phi ptr [ %514, %512 ], [ %505, %.lr.ph575.preheader ]
  %509 = load i32, ptr %3, align 4, !tbaa !9
  %510 = load i32, ptr %5, align 4, !tbaa !9
  %511 = load i32, ptr %4, align 4, !tbaa !9
  invoke void @_Z12libxsmm_gemmPKcS0_iiiPKdS2_PKiS2_S4_S2_PdS4_(ptr noundef nonnull %6, ptr noundef nonnull %7, i32 noundef %509, i32 noundef %510, i32 noundef %511, ptr noundef nonnull %8, ptr noundef %.0434571, ptr noundef nonnull %3, ptr noundef %.0433572, ptr noundef nonnull %4, ptr noundef nonnull %9, ptr noundef nonnull %20, ptr noundef nonnull %3)
          to label %512 unwind label %516

512:                                              ; preds = %.lr.ph575
  %513 = getelementptr inbounds double, ptr %.0433572, i64 %491
  %514 = getelementptr inbounds double, ptr %.0434571, i64 %492
  %515 = add nuw nsw i32 %.0432573, 1
  %exitcond657.not = icmp eq i32 %515, %smin656
  br i1 %exitcond657.not, label %._crit_edge576, label %.lr.ph575, !llvm.loop !50

516:                                              ; preds = %.lr.ph575
  %517 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  call void @llvm.lifetime.end.p0(i64 32768, ptr nonnull %20) #16
  br label %636

518:                                              ; preds = %._crit_edge579
  %519 = invoke double @libxsmm_timer_duration(i64 noundef %490, i64 noundef %494)
          to label %520 unwind label %534

520:                                              ; preds = %518
  %521 = fcmp ogt double %519, 0.000000e+00
  br i1 %521, label %522, label %536

522:                                              ; preds = %520
  %523 = load ptr, ptr @stdout, align 8, !tbaa !5
  %524 = fdiv double %135, %519
  %525 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %523, ptr noundef nonnull @.str.5, double noundef %524, ptr noundef nonnull %10) #16
  %526 = load ptr, ptr @stdout, align 8, !tbaa !5
  %527 = uitofp i64 %126 to double
  %528 = fmul double %519, 0x41D0000000000000
  %529 = fdiv double %527, %528
  %530 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %526, ptr noundef nonnull @.str.6, double noundef %529) #16
  %531 = load ptr, ptr @stdout, align 8, !tbaa !5
  %532 = fdiv double %127, %519
  %533 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %531, ptr noundef nonnull @.str.7, double noundef %532) #16
  br label %536

534:                                              ; preds = %546, %540, %518, %._crit_edge579
  %535 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  br label %636

536:                                              ; preds = %522, %520
  %537 = load ptr, ptr @stdout, align 8, !tbaa !5
  %538 = fmul double %519, 1.000000e+03
  %539 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %537, ptr noundef nonnull @.str.8, double noundef %538) #16
  br i1 %246, label %553, label %540

540:                                              ; preds = %536
  %541 = load i32, ptr %3, align 4, !tbaa !9
  %542 = load i32, ptr %5, align 4, !tbaa !9
  %543 = invoke i32 @libxsmm_matdiff(ptr noundef nonnull %13, i32 noundef 0, i32 noundef %541, i32 noundef %542, ptr noundef %251, ptr noundef %166, ptr noundef null, ptr noundef null)
          to label %544 unwind label %534

544:                                              ; preds = %540
  %545 = icmp eq i32 %543, 0
  br i1 %545, label %546, label %553

546:                                              ; preds = %544
  %547 = load ptr, ptr @stdout, align 8, !tbaa !5
  %548 = getelementptr inbounds i8, ptr %13, i64 56
  %549 = load double, ptr %548, align 8, !tbaa !32
  %550 = getelementptr inbounds i8, ptr %13, i64 40
  %551 = load double, ptr %550, align 8, !tbaa !34
  %552 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %547, ptr noundef nonnull @.str.9, double noundef %549, double noundef %551) #16
  invoke void @libxsmm_matdiff_reduce(ptr noundef nonnull %14, ptr noundef nonnull %13)
          to label %553 unwind label %534

553:                                              ; preds = %546, %544, %536
  %554 = call noundef ptr @_ZNK18libxsmm_mmfunctionIddLin1EEcvPKvEv(ptr noundef nonnull align 8 dereferenceable(8) %16)
  %.not = icmp eq ptr %554, null
  br i1 %.not, label %622, label %555

555:                                              ; preds = %553
  %556 = load ptr, ptr @stdout, align 8, !tbaa !5
  %557 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %556, ptr noundef nonnull @.str.12) #16
  %558 = invoke noundef ptr @_ZSt6fill_nIPdidET_S1_T0_RKT1_(ptr noundef %166, i32 noundef %86, ptr noundef nonnull align 8 dereferenceable(8) %15)
          to label %559 unwind label %268

559:                                              ; preds = %555
  %560 = invoke i64 @libxsmm_timer_tick()
          to label %.preheader unwind label %565

.preheader:                                       ; preds = %559
  br i1 %167, label %.lr.ph587, label %._crit_edge588

.lr.ph587:                                        ; preds = %.preheader
  %561 = sext i32 %93 to i64
  %562 = sext i32 %94 to i64
  %563 = sext i32 %116 to i64
  br label %567

._crit_edge588:                                   ; preds = %._crit_edge585, %.preheader
  %564 = invoke i64 @libxsmm_timer_tick()
          to label %587 unwind label %603

565:                                              ; preds = %559
  %566 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  br label %636

567:                                              ; preds = %.lr.ph587, %._crit_edge585
  %indvars.iv665 = phi i64 [ 0, %.lr.ph587 ], [ %indvars.iv.next666, %._crit_edge585 ]
  %indvars.iv661 = phi i32 [ %105, %.lr.ph587 ], [ %indvars.iv.next662, %._crit_edge585 ]
  %smin663 = call i32 @llvm.smin.i32(i32 %116, i32 %indvars.iv661)
  call void @llvm.lifetime.start.p0(i64 32768, ptr nonnull %21) #16
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 16 dereferenceable(32768) %21, i8 0, i64 32768, i1 false)
  %568 = sub nsw i64 %104, %indvars.iv665
  %569 = trunc nsw i64 %568 to i32
  %570 = call i32 @llvm.smin.i32(i32 %116, i32 %569)
  %571 = icmp sgt i32 %570, 0
  br i1 %571, label %.lr.ph584.preheader, label %._crit_edge585

.lr.ph584.preheader:                              ; preds = %567
  %572 = mul nsw i64 %indvars.iv665, %562
  %573 = getelementptr inbounds double, ptr %164, i64 %572
  %574 = mul nsw i64 %indvars.iv665, %561
  %575 = getelementptr inbounds double, ptr %156, i64 %574
  br label %.lr.ph584

._crit_edge585:                                   ; preds = %583, %567
  %576 = load i32, ptr %3, align 4, !tbaa !9
  %577 = load i32, ptr %5, align 4, !tbaa !9
  call void @_Z3addIdEvPT_PKS0_iii(ptr noundef %166, ptr noundef nonnull %21, i32 noundef %576, i32 noundef %577, i32 noundef 0)
  call void @llvm.lifetime.end.p0(i64 32768, ptr nonnull %21) #16
  %indvars.iv.next666 = add nsw i64 %indvars.iv665, %563
  %578 = icmp slt i64 %indvars.iv.next666, %104
  %indvars.iv.next662 = sub i32 %indvars.iv661, %116
  br i1 %578, label %567, label %._crit_edge588, !llvm.loop !51

.lr.ph584:                                        ; preds = %.lr.ph584.preheader, %583
  %.0419582 = phi i32 [ %584, %583 ], [ 0, %.lr.ph584.preheader ]
  %.0420581 = phi ptr [ %580, %583 ], [ %573, %.lr.ph584.preheader ]
  %.0421580 = phi ptr [ %579, %583 ], [ %575, %.lr.ph584.preheader ]
  %579 = getelementptr inbounds double, ptr %.0421580, i64 %561
  %580 = getelementptr inbounds double, ptr %.0420581, i64 %562
  %581 = getelementptr inbounds double, ptr %579, i64 %561
  %582 = getelementptr inbounds double, ptr %580, i64 %562
  invoke void @_ZNK18libxsmm_mmfunctionIddLin1EEclEPKdS2_PdS2_S2_S2_(ptr noundef nonnull align 8 dereferenceable(8) %16, ptr noundef %.0421580, ptr noundef %.0420581, ptr noundef nonnull %21, ptr noundef %581, ptr noundef %582, ptr noundef nonnull %21)
          to label %583 unwind label %585

583:                                              ; preds = %.lr.ph584
  %584 = add nuw nsw i32 %.0419582, 1
  %exitcond664.not = icmp eq i32 %584, %smin663
  br i1 %exitcond664.not, label %._crit_edge585, label %.lr.ph584, !llvm.loop !52

585:                                              ; preds = %.lr.ph584
  %586 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  call void @llvm.lifetime.end.p0(i64 32768, ptr nonnull %21) #16
  br label %636

587:                                              ; preds = %._crit_edge588
  %588 = invoke double @libxsmm_timer_duration(i64 noundef %560, i64 noundef %564)
          to label %589 unwind label %603

589:                                              ; preds = %587
  %590 = fcmp ogt double %588, 0.000000e+00
  br i1 %590, label %591, label %605

591:                                              ; preds = %589
  %592 = load ptr, ptr @stdout, align 8, !tbaa !5
  %593 = fdiv double %135, %588
  %594 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %592, ptr noundef nonnull @.str.5, double noundef %593, ptr noundef nonnull %10) #16
  %595 = load ptr, ptr @stdout, align 8, !tbaa !5
  %596 = uitofp i64 %126 to double
  %597 = fmul double %588, 0x41D0000000000000
  %598 = fdiv double %596, %597
  %599 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %595, ptr noundef nonnull @.str.6, double noundef %598) #16
  %600 = load ptr, ptr @stdout, align 8, !tbaa !5
  %601 = fdiv double %127, %588
  %602 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %600, ptr noundef nonnull @.str.7, double noundef %601) #16
  br label %605

603:                                              ; preds = %615, %609, %587, %._crit_edge588
  %604 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  br label %636

605:                                              ; preds = %591, %589
  %606 = load ptr, ptr @stdout, align 8, !tbaa !5
  %607 = fmul double %588, 1.000000e+03
  %608 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %606, ptr noundef nonnull @.str.8, double noundef %607) #16
  br i1 %246, label %622, label %609

609:                                              ; preds = %605
  %610 = load i32, ptr %3, align 4, !tbaa !9
  %611 = load i32, ptr %5, align 4, !tbaa !9
  %612 = invoke i32 @libxsmm_matdiff(ptr noundef nonnull %13, i32 noundef 0, i32 noundef %610, i32 noundef %611, ptr noundef %251, ptr noundef %166, ptr noundef null, ptr noundef null)
          to label %613 unwind label %603

613:                                              ; preds = %609
  %614 = icmp eq i32 %612, 0
  br i1 %614, label %615, label %622

615:                                              ; preds = %613
  %616 = load ptr, ptr @stdout, align 8, !tbaa !5
  %617 = getelementptr inbounds i8, ptr %13, i64 56
  %618 = load double, ptr %617, align 8, !tbaa !32
  %619 = getelementptr inbounds i8, ptr %13, i64 40
  %620 = load double, ptr %619, align 8, !tbaa !34
  %621 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %616, ptr noundef nonnull @.str.9, double noundef %618, double noundef %620) #16
  invoke void @libxsmm_matdiff_reduce(ptr noundef nonnull %14, ptr noundef nonnull %13)
          to label %622 unwind label %603

622:                                              ; preds = %605, %613, %615, %553
  invoke void @libxsmm_finalize()
          to label %623 unwind label %268

623:                                              ; preds = %622
  %624 = load ptr, ptr @stdout, align 8, !tbaa !5
  %625 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %624, ptr noundef nonnull @.str.13) #16
  br i1 %246, label %635, label %626

626:                                              ; preds = %623
  %627 = invoke double @libxsmm_matdiff_epsilon(ptr noundef nonnull %14)
          to label %628 unwind label %633

628:                                              ; preds = %626
  %629 = fcmp ogt double %627, 1.000000e-03
  br i1 %629, label %630, label %635

630:                                              ; preds = %628
  %631 = load ptr, ptr @stderr, align 8, !tbaa !5
  %632 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %631, ptr noundef nonnull @.str.14, double noundef %627) #19
  br label %635

633:                                              ; preds = %626
  %634 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  br label %636

635:                                              ; preds = %628, %630, %623
  %.1 = phi i32 [ 0, %623 ], [ 1, %630 ], [ 0, %628 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %16) #16
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %15) #16
  call void @llvm.lifetime.end.p0(i64 192, ptr nonnull %14) #16
  call void @llvm.lifetime.end.p0(i64 192, ptr nonnull %13) #16
  call void @_ZZ4mainEN11raii_expectD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %12) #16
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %12) #16
  call void @_ZZ4mainEN4raiiD2Ev(ptr noundef nonnull align 8 dereferenceable(24) %11) #16
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %11) #16
  call void @llvm.lifetime.end.p0(i64 6, ptr nonnull %10) #16
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %9) #16
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #16
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %7) #16
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %6) #16
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %5) #16
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %4) #16
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %3) #16
  br label %651

636:                                              ; preds = %565, %585, %603, %495, %516, %534, %373, %466, %296, %316, %334, %633, %288, %268
  %.pn483 = phi { ptr, i32 } [ %289, %288 ], [ %634, %633 ], [ %269, %268 ], [ %317, %316 ], [ %335, %334 ], [ %297, %296 ], [ %467, %466 ], [ %374, %373 ], [ %517, %516 ], [ %535, %534 ], [ %496, %495 ], [ %586, %585 ], [ %604, %603 ], [ %566, %565 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %16) #16
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %15) #16
  call void @llvm.lifetime.end.p0(i64 192, ptr nonnull %14) #16
  call void @llvm.lifetime.end.p0(i64 192, ptr nonnull %13) #16
  call void @_ZZ4mainEN11raii_expectD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %12) #16
  br label %637

637:                                              ; preds = %636, %266
  %.pn483.pn = phi { ptr, i32 } [ %.pn483, %636 ], [ %267, %266 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %12) #16
  br label %638

638:                                              ; preds = %637, %264
  %.pn483.pn.pn = phi { ptr, i32 } [ %.pn483.pn, %637 ], [ %265, %264 ]
  call void @_ZZ4mainEN4raiiD2Ev(ptr noundef nonnull align 8 dereferenceable(24) %11) #16
  br label %639

639:                                              ; preds = %638, %181
  %.pn483.pn.pn.pn = phi { ptr, i32 } [ %.pn483.pn.pn, %638 ], [ %182, %181 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %11) #16
  call void @llvm.lifetime.end.p0(i64 6, ptr nonnull %10) #16
  br label %640

640:                                              ; preds = %179, %639, %90
  %.pn = phi { ptr, i32 } [ %91, %90 ], [ %.pn483.pn.pn.pn, %639 ], [ %180, %179 ]
  %.10 = extractvalue { ptr, i32 } %.pn, 0
  %.10415 = extractvalue { ptr, i32 } %.pn, 1
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %9) #16
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #16
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %7) #16
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %6) #16
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %5) #16
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %4) #16
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %3) #16
  %641 = call i32 @llvm.eh.typeid.for.p0(ptr nonnull @_ZTISt9exception) #16
  %642 = icmp eq i32 %.10415, %641
  br i1 %642, label %643, label %652

643:                                              ; preds = %640
  %644 = call ptr @__cxa_begin_catch(ptr %.10) #16
  %645 = load ptr, ptr @stderr, align 8, !tbaa !5
  %646 = load ptr, ptr %644, align 8, !tbaa !53
  %647 = getelementptr inbounds i8, ptr %646, i64 16
  %648 = load ptr, ptr %647, align 8
  %649 = call noundef ptr %648(ptr noundef nonnull align 8 dereferenceable(8) %644) #16
  %650 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %645, ptr noundef nonnull @.str.16, ptr noundef %649) #19
  call void @__cxa_end_catch()
  br label %651

651:                                              ; preds = %659, %657, %643, %635
  %.2 = phi i32 [ 1, %643 ], [ 1, %657 ], [ 1, %659 ], [ %.1, %635 ]
  ret i32 %.2

652:                                              ; preds = %640
  %653 = call i32 @llvm.eh.typeid.for.p0(ptr nonnull @_ZTIPKc) #16
  %654 = icmp eq i32 %.10415, %653
  %655 = call ptr @__cxa_begin_catch(ptr %.10) #16
  %656 = load ptr, ptr @stderr, align 8, !tbaa !5
  br i1 %654, label %657, label %659

657:                                              ; preds = %652
  %658 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %656, ptr noundef nonnull @.str.16, ptr noundef %655) #19
  call void @__cxa_end_catch() #16
  br label %651

659:                                              ; preds = %652
  %660 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %656, ptr noundef nonnull @.str.15) #19
  call void @__cxa_end_catch()
  br label %651

661:                                              ; preds = %88
  unreachable
}

; 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 memory(argmem: read)
declare i64 @strlen(ptr nocapture noundef) local_unnamed_addr #3

declare ptr @__cxa_allocate_exception(i64) local_unnamed_addr

declare void @__cxa_throw(ptr, ptr, ptr) local_unnamed_addr

declare i32 @__gxx_personality_v0(...)

declare i32 @libxsmm_isqrt_u64(i64 noundef) local_unnamed_addr #4

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

; Function Attrs: nofree nounwind memory(read)
declare noundef ptr @getenv(ptr nocapture noundef) local_unnamed_addr #6

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

; Function Attrs: mustprogress uwtable
declare hidden void @_ZZ4mainEN4raiiC2Eiii(ptr noundef nonnull align 8 dereferenceable(24), i32 noundef, i32 noundef, i32 noundef) unnamed_addr #7 align 2

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

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

declare void @libxsmm_init() local_unnamed_addr #4

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

; Function Attrs: mustprogress uwtable
declare hidden void @_ZZ4mainEN11raii_expectC2Ei(ptr noundef nonnull align 8 dereferenceable(8), i32 noundef) unnamed_addr #7 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN18libxsmm_mmfunctionIddLin1EEC2Eiiiii(ptr noundef nonnull align 8 dereferenceable(8), i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef) unnamed_addr #7 align 2

declare void @libxsmm_matdiff_clear(ptr noundef) local_unnamed_addr #4

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef ptr @_ZSt6fill_nIPdidET_S1_T0_RKT1_(ptr noundef, i32 noundef, ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #10

; Function Attrs: mustprogress nocallback nofree nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #11

declare ptr @libxsmm_original_dgemm() local_unnamed_addr #4

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_Z3addIdEvPT_PKS0_iii(ptr noalias noundef, ptr noalias noundef, i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #12

declare i64 @libxsmm_timer_tick() local_unnamed_addr #4

declare double @libxsmm_timer_duration(i64 noundef, i64 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: inlinehint mustprogress uwtable
declare dso_local void @_Z12libxsmm_gemmPKcS0_iiiPKdS2_PKiS2_S4_S2_PdS4_(ptr noundef, ptr noundef, i32 noundef, i32 noundef, i32 noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #10

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZNK18libxsmm_mmfunctionIddLin1EEcvPKvEv(ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #13 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNK18libxsmm_mmfunctionIddLin1EEclEPKdS2_PdS2_S2_S2_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #7 align 2

declare void @libxsmm_finalize() local_unnamed_addr #4

declare double @libxsmm_matdiff_epsilon(ptr noundef) local_unnamed_addr #4

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @_ZZ4mainEN11raii_expectD2Ev(ptr noundef nonnull align 8 dereferenceable(8)) unnamed_addr #13 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @_ZZ4mainEN4raiiD2Ev(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #13 align 2

; Function Attrs: nofree nosync nounwind memory(none)
declare i32 @llvm.eh.typeid.for.p0(ptr) #14

declare ptr @__cxa_begin_catch(ptr) local_unnamed_addr

declare void @__cxa_end_catch() local_unnamed_addr

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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare <2 x double> @llvm.fmuladd.v2f64(<2 x double>, <2 x double>, <2 x double>) #15

attributes #0 = { mustprogress norecurse 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 memory(argmem: read) "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #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 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #6 = { nofree nounwind memory(read) "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #7 = { mustprogress 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 nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #9 = { 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 #10 = { inlinehint mustprogress 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 #11 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #12 = { inlinehint mustprogress 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 #13 = { mustprogress 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 #14 = { nofree nosync nounwind memory(none) }
attributes #15 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #16 = { nounwind }
attributes #17 = { nounwind willreturn memory(read) }
attributes #18 = { noreturn }
attributes #19 = { 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++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!7, !7, i64 0}
!12 = !{!13, !13, i64 0}
!13 = !{!"double", !7, i64 0}
!14 = !{!15, !6, i64 0}
!15 = !{!"_ZTSZ4mainE4raii", !6, i64 0, !6, i64 8, !6, i64 16}
!16 = !{!15, !6, i64 8}
!17 = !{!15, !6, i64 16}
!18 = distinct !{!18, !19, !20, !21}
!19 = !{!"llvm.loop.mustprogress"}
!20 = !{!"llvm.loop.isvectorized", i32 1}
!21 = !{!"llvm.loop.unroll.runtime.disable"}
!22 = distinct !{!22, !19}
!23 = distinct !{!23, !19, !21, !20}
!24 = distinct !{!24, !19, !20, !21}
!25 = distinct !{!25, !19, !21, !20}
!26 = distinct !{!26, !19}
!27 = distinct !{!27, !19}
!28 = distinct !{!28, !19}
!29 = distinct !{!29, !19}
!30 = distinct !{!30, !19}
!31 = distinct !{!31, !19}
!32 = !{!33, !13, i64 56}
!33 = !{!"_ZTS20libxsmm_matdiff_info", !13, i64 0, !13, i64 8, !13, i64 16, !13, i64 24, !13, i64 32, !13, i64 40, !13, i64 48, !13, i64 56, !13, i64 64, !13, i64 72, !13, i64 80, !13, i64 88, !13, i64 96, !13, i64 104, !13, i64 112, !13, i64 120, !13, i64 128, !13, i64 136, !13, i64 144, !13, i64 152, !13, i64 160, !13, i64 168, !10, i64 176, !10, i64 180, !10, i64 184, !10, i64 188}
!34 = !{!33, !13, i64 40}
!35 = !{!36}
!36 = distinct !{!36, !37}
!37 = distinct !{!37, !"LVerDomain"}
!38 = !{!39}
!39 = distinct !{!39, !37}
!40 = !{!41}
!41 = distinct !{!41, !37}
!42 = !{!39, !36}
!43 = distinct !{!43, !19, !20, !21}
!44 = distinct !{!44, !19, !20}
!45 = distinct !{!45, !19}
!46 = distinct !{!46, !19}
!47 = distinct !{!47, !19}
!48 = distinct !{!48, !19}
!49 = distinct !{!49, !19}
!50 = distinct !{!50, !19}
!51 = distinct !{!51, !19}
!52 = distinct !{!52, !19}
!53 = !{!54, !54, i64 0}
!54 = !{!"vtable pointer", !8, i64 0}


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