; LLVM IR from libxsmm/libxsmm :: samples/utilities/smmbench (specialized)

; 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, ptr, i64, i64 }
%class.libxsmm_mmfunction = type { ptr }
%"class.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<const double *, std::allocator<const double *>>::_Vector_impl" }
%"struct.std::_Vector_base<const double *, std::allocator<const double *>>::_Vector_impl" = type { %"struct.std::_Vector_base<const double *, std::allocator<const double *>>::_Vector_impl_data" }
%"struct.std::_Vector_base<const double *, std::allocator<const double *>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::allocator" = type { i8 }
%"class.std::vector.0" = type { %"struct.std::_Vector_base.1" }
%"struct.std::_Vector_base.1" = type { %"struct.std::_Vector_base<double *, std::allocator<double *>>::_Vector_impl" }
%"struct.std::_Vector_base<double *, std::allocator<double *>>::_Vector_impl" = type { %"struct.std::_Vector_base<double *, std::allocator<double *>>::_Vector_impl_data" }
%"struct.std::_Vector_base<double *, std::allocator<double *>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::allocator.2" = type { i8 }
%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 }

@_ZTISt9exception = external constant ptr
@_ZTIPKc = external constant ptr
@__const.main.ops = external hidden unnamed_addr constant [6 x i8], align 1
@.str = external hidden unnamed_addr constant [6 x i8], align 1
@stdout = external global ptr, align 8
@.str.1 = external hidden unnamed_addr constant [69 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [25 x i8], align 1
@stderr = external global ptr, align 8
@.str.11 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [34 x i8], align 1
@.str.23 = 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 i32, align 4
  %14 = alloca i32, align 4
  %15 = alloca i32, align 4
  %16 = alloca i8, align 1
  %17 = alloca i8, align 1
  %18 = alloca double, align 8
  %19 = alloca double, align 8
  %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 i32, align 4
  %26 = alloca i64, align 8
  %27 = alloca double, align 8
  %28 = alloca [6 x i8], align 1
  %29 = alloca double, align 8
  %30 = alloca ptr, align 8
  %31 = alloca i32, align 4
  %32 = alloca %struct.raii, align 8
  %33 = alloca ptr, align 8
  %34 = alloca i32, align 4
  %35 = alloca ptr, align 8
  %36 = alloca ptr, align 8
  %37 = alloca ptr, align 8
  %38 = alloca ptr, align 8
  %39 = alloca i32, align 4
  %40 = alloca double, align 8
  %41 = alloca double, align 8
  %42 = alloca i32, align 4
  %43 = alloca i32, align 4
  %44 = alloca i32, align 4
  %45 = alloca i32, align 4
  %46 = alloca i32, align 4
  %47 = alloca i32, align 4
  %48 = alloca i32, align 4
  %49 = alloca i32, align 4
  %50 = alloca double, align 8
  %51 = alloca double, align 8
  %52 = alloca i64, align 8
  %53 = alloca i32, align 4
  %54 = alloca double, align 8
  %55 = alloca double, align 8
  %56 = alloca i32, align 4
  %57 = alloca i32, align 4
  %58 = alloca i32, align 4
  %59 = alloca i32, align 4
  %60 = alloca i32, align 4
  %61 = alloca i32, align 4
  %62 = alloca i32, align 4
  %63 = alloca i32, align 4
  %64 = alloca double, align 8
  %65 = alloca double, align 8
  %66 = alloca i64, align 8
  %67 = alloca i32, align 4
  %68 = alloca double, align 8
  %69 = alloca double, align 8
  %70 = alloca i32, align 4
  %71 = alloca i32, align 4
  %72 = alloca i32, align 4
  %73 = alloca i32, align 4
  %74 = alloca i32, align 4
  %75 = alloca i32, align 4
  %76 = alloca i32, align 4
  %77 = alloca i32, align 4
  %78 = alloca double, align 8
  %79 = alloca double, align 8
  %80 = alloca i64, align 8
  %81 = alloca i32, align 4
  %82 = alloca double, align 8
  %83 = alloca double, align 8
  %84 = alloca i32, align 4
  %85 = alloca i32, align 4
  %86 = alloca i32, align 4
  %87 = alloca i32, align 4
  %88 = alloca i32, align 4
  %89 = alloca i32, align 4
  %90 = alloca i32, align 4
  %91 = alloca i32, align 4
  %92 = alloca double, align 8
  %93 = alloca double, align 8
  %94 = alloca i64, align 8
  %95 = alloca i32, align 4
  %96 = alloca %class.libxsmm_mmfunction, align 8
  %97 = alloca %"class.std::vector", align 8
  %98 = alloca %"class.std::allocator", align 1
  %99 = alloca %"class.std::vector", align 8
  %100 = alloca %"class.std::allocator", align 1
  %101 = alloca %"class.std::vector.0", align 8
  %102 = alloca %"class.std::allocator.2", align 1
  %103 = alloca ptr, align 8
  %104 = alloca ptr, align 8
  %105 = alloca ptr, align 8
  %106 = alloca i64, align 8
  %107 = alloca i32, align 4
  %108 = alloca i32, align 4
  %109 = alloca i32, align 4
  %110 = alloca ptr, align 8
  %111 = alloca ptr, align 8
  %112 = alloca ptr, align 8
  %113 = alloca i64, align 8
  %114 = alloca double, align 8
  %115 = alloca i32, align 4
  %116 = alloca i32, align 4
  %117 = alloca i64, align 8
  %118 = alloca i32, align 4
  %119 = alloca i64, align 8
  %120 = alloca double, align 8
  %121 = alloca %struct.libxsmm_matdiff_info, align 8
  %122 = alloca i32, align 4
  %123 = alloca ptr, align 8
  %124 = alloca ptr, align 8
  %125 = alloca %struct.libxsmm_matdiff_info, align 8
  %126 = alloca i64, align 8
  %127 = alloca i32, align 4
  %128 = alloca i32, align 4
  %129 = alloca ptr, align 8
  %130 = alloca ptr, align 8
  %131 = alloca i64, align 8
  %132 = alloca double, align 8
  %133 = alloca i32, align 4
  %134 = alloca i32, align 4
  %135 = alloca i64, align 8
  %136 = alloca i32, align 4
  %137 = alloca i64, align 8
  %138 = alloca double, align 8
  %139 = alloca %struct.libxsmm_matdiff_info, align 8
  %140 = alloca i32, align 4
  %141 = alloca ptr, align 8
  %142 = alloca ptr, align 8
  %143 = alloca %struct.libxsmm_matdiff_info, align 8
  %144 = alloca i64, align 8
  %145 = alloca i32, align 4
  %146 = alloca i32, align 4
  %147 = alloca ptr, align 8
  %148 = alloca ptr, align 8
  %149 = alloca i64, align 8
  %150 = alloca double, align 8
  %151 = alloca i32, align 4
  %152 = alloca i32, align 4
  %153 = alloca i64, align 8
  %154 = alloca i32, align 4
  %155 = alloca i64, align 8
  %156 = alloca double, align 8
  %157 = alloca %struct.libxsmm_matdiff_info, align 8
  %158 = alloca i32, align 4
  %159 = alloca ptr, align 8
  %160 = alloca ptr, align 8
  %161 = alloca %struct.libxsmm_matdiff_info, align 8
  %162 = alloca i64, align 8
  %163 = alloca i32, align 4
  %164 = alloca i32, align 4
  %165 = alloca i32, align 4
  %166 = alloca ptr, align 8
  %167 = alloca ptr, align 8
  %168 = alloca i64, align 8
  %169 = alloca double, align 8
  %170 = alloca i32, align 4
  %171 = alloca i32, align 4
  %172 = alloca i64, align 8
  %173 = alloca i32, align 4
  %174 = alloca i64, align 8
  %175 = alloca double, align 8
  %176 = alloca %struct.libxsmm_matdiff_info, align 8
  %177 = alloca i64, align 8
  %178 = alloca i32, align 4
  %179 = alloca i32, align 4
  %180 = alloca i32, align 4
  %181 = alloca i64, align 8
  %182 = alloca double, align 8
  %183 = alloca i32, align 4
  %184 = alloca i32, align 4
  %185 = alloca i64, align 8
  %186 = alloca i32, align 4
  %187 = alloca i64, align 8
  %188 = alloca double, align 8
  %189 = alloca %struct.libxsmm_matdiff_info, align 8
  %190 = alloca ptr, align 8
  %191 = 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) #11
  store i32 0, ptr %6, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #11
  %192 = load i32, ptr %4, align 4, !tbaa !5
  %193 = icmp slt i32 1, %192
  br i1 %193, label %194, label %199

194:                                              ; preds = %2
  %195 = load ptr, ptr %5, align 8, !tbaa !9
  %196 = getelementptr inbounds ptr, ptr %195, i64 1
  %197 = load ptr, ptr %196, align 8, !tbaa !9
  %198 = call i32 @atoi(ptr noundef %197) #12
  br label %200

199:                                              ; preds = %2
  br label %200

200:                                              ; preds = %199, %194
  %201 = phi i32 [ %198, %194 ], [ 0, %199 ]
  store i32 %201, ptr %7, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #11
  %202 = load i32, ptr %4, align 4, !tbaa !5
  %203 = icmp slt i32 2, %202
  br i1 %203, label %204, label %209

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

209:                                              ; preds = %200
  br label %210

210:                                              ; preds = %209, %204
  %211 = phi i32 [ %208, %204 ], [ 23, %209 ]
  store i32 %211, ptr %8, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #11
  %212 = load i32, ptr %4, align 4, !tbaa !5
  %213 = icmp slt i32 4, %212
  br i1 %213, label %214, label %219

214:                                              ; preds = %210
  %215 = load ptr, ptr %5, align 8, !tbaa !9
  %216 = getelementptr inbounds ptr, ptr %215, i64 4
  %217 = load ptr, ptr %216, align 8, !tbaa !9
  %218 = call i32 @atoi(ptr noundef %217) #12
  br label %221

219:                                              ; preds = %210
  %220 = load i32, ptr %8, align 4, !tbaa !5
  br label %221

221:                                              ; preds = %219, %214
  %222 = phi i32 [ %218, %214 ], [ %220, %219 ]
  store i32 %222, ptr %9, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #11
  %223 = load i32, ptr %4, align 4, !tbaa !5
  %224 = icmp slt i32 3, %223
  br i1 %224, label %225, label %230

225:                                              ; preds = %221
  %226 = load ptr, ptr %5, align 8, !tbaa !9
  %227 = getelementptr inbounds ptr, ptr %226, i64 3
  %228 = load ptr, ptr %227, align 8, !tbaa !9
  %229 = call i32 @atoi(ptr noundef %228) #12
  br label %232

230:                                              ; preds = %221
  %231 = load i32, ptr %9, align 4, !tbaa !5
  br label %232

232:                                              ; preds = %230, %225
  %233 = phi i32 [ %229, %225 ], [ %231, %230 ]
  store i32 %233, ptr %10, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #11
  %234 = load i32, ptr %4, align 4, !tbaa !5
  %235 = icmp slt i32 5, %234
  br i1 %235, label %236, label %241

236:                                              ; preds = %232
  %237 = load ptr, ptr %5, align 8, !tbaa !9
  %238 = getelementptr inbounds ptr, ptr %237, i64 5
  %239 = load ptr, ptr %238, align 8, !tbaa !9
  %240 = call i32 @atoi(ptr noundef %239) #12
  br label %242

241:                                              ; preds = %232
  br label %242

242:                                              ; preds = %241, %236
  %243 = phi i32 [ %240, %236 ], [ 0, %241 ]
  store i32 %243, ptr %11, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #11
  %244 = load i32, ptr %4, align 4, !tbaa !5
  %245 = icmp slt i32 6, %244
  br i1 %245, label %246, label %257

246:                                              ; preds = %242
  %247 = load ptr, ptr %5, align 8, !tbaa !9
  %248 = getelementptr inbounds ptr, ptr %247, i64 6
  %249 = load ptr, ptr %248, align 8, !tbaa !9
  %250 = call i32 @atoi(ptr noundef %249) #12
  %251 = icmp slt i32 0, %250
  br i1 %251, label %252, label %257

252:                                              ; preds = %246
  %253 = load ptr, ptr %5, align 8, !tbaa !9
  %254 = getelementptr inbounds ptr, ptr %253, i64 6
  %255 = load ptr, ptr %254, align 8, !tbaa !9
  %256 = call i32 @atoi(ptr noundef %255) #12
  br label %262

257:                                              ; preds = %246, %242
  %258 = load i32, ptr %11, align 4, !tbaa !5
  %259 = icmp sge i32 0, %258
  %260 = zext i1 %259 to i64
  %261 = select i1 %259, i32 13, i32 1
  br label %262

262:                                              ; preds = %257, %252
  %263 = phi i32 [ %256, %252 ], [ %261, %257 ]
  store i32 %263, ptr %12, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #11
  %264 = load i32, ptr %8, align 4, !tbaa !5
  store i32 %264, ptr %13, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #11
  %265 = load i32, ptr %9, align 4, !tbaa !5
  store i32 %265, ptr %14, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #11
  %266 = load i32, ptr %8, align 4, !tbaa !5
  store i32 %266, ptr %15, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr %16) #11
  store i8 78, ptr %16, align 1, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 1, ptr %17) #11
  store i8 78, ptr %17, align 1, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #11
  store double 1.000000e+00, ptr %18, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #11
  store double 1.000000e+00, ptr %19, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #11
  %267 = load i32, ptr %13, align 4, !tbaa !5
  %268 = load i32, ptr %9, align 4, !tbaa !5
  %269 = mul nsw i32 %267, %268
  store i32 %269, ptr %20, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #11
  %270 = load i32, ptr %14, align 4, !tbaa !5
  %271 = load i32, ptr %10, align 4, !tbaa !5
  %272 = mul nsw i32 %270, %271
  store i32 %272, ptr %21, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #11
  %273 = load i32, ptr %15, align 4, !tbaa !5
  %274 = load i32, ptr %10, align 4, !tbaa !5
  %275 = mul nsw i32 %273, %274
  store i32 %275, ptr %22, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #11
  %276 = load i32, ptr %20, align 4, !tbaa !5
  %277 = sext i32 %276 to i64
  %278 = load i32, ptr %21, align 4, !tbaa !5
  %279 = sext i32 %278 to i64
  %280 = add i64 %277, %279
  %281 = mul i64 %280, 8
  %282 = load i32, ptr %22, align 4, !tbaa !5
  %283 = sext i32 %282 to i64
  %284 = mul i64 %283, 8
  %285 = add i64 %281, %284
  %286 = udiv i64 2147483648, %285
  %287 = trunc i64 %286 to i32
  store i32 %287, ptr %23, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #11
  %288 = load i32, ptr %11, align 4, !tbaa !5
  %289 = icmp slt i32 0, %288
  br i1 %289, label %290, label %292

290:                                              ; preds = %262
  %291 = load i32, ptr %11, align 4, !tbaa !5
  br label %294

292:                                              ; preds = %262
  %293 = load i32, ptr %23, align 4, !tbaa !5
  br label %294

294:                                              ; preds = %292, %290
  %295 = phi i32 [ %291, %290 ], [ %293, %292 ]
  %296 = load i32, ptr %23, align 4, !tbaa !5
  %297 = icmp slt i32 %295, %296
  br i1 %297, label %298, label %307

298:                                              ; preds = %294
  %299 = load i32, ptr %11, align 4, !tbaa !5
  %300 = icmp slt i32 0, %299
  br i1 %300, label %301, label %303

301:                                              ; preds = %298
  %302 = load i32, ptr %11, align 4, !tbaa !5
  br label %305

303:                                              ; preds = %298
  %304 = load i32, ptr %23, align 4, !tbaa !5
  br label %305

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

307:                                              ; preds = %294
  %308 = load i32, ptr %23, align 4, !tbaa !5
  br label %309

309:                                              ; preds = %307, %305
  %310 = phi i32 [ %306, %305 ], [ %308, %307 ]
  store i32 %310, ptr %24, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #11
  store i32 8, ptr %25, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #11
  %311 = load i32, ptr %20, align 4, !tbaa !5
  %312 = sext i32 %311 to i64
  %313 = load i32, ptr %21, align 4, !tbaa !5
  %314 = sext i32 %313 to i64
  %315 = add i64 %312, %314
  %316 = mul i64 %315, 8
  %317 = load i32, ptr %22, align 4, !tbaa !5
  %318 = sext i32 %317 to i64
  %319 = mul i64 8, %318
  %320 = mul i64 %319, 2
  %321 = add i64 %316, %320
  store i64 %321, ptr %26, align 8, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #11
  %322 = load i32, ptr %24, align 4, !tbaa !5
  %323 = sitofp i32 %322 to double
  %324 = fmul double 2.000000e-09, %323
  %325 = load i32, ptr %8, align 4, !tbaa !5
  %326 = sitofp i32 %325 to double
  %327 = fmul double %324, %326
  %328 = load i32, ptr %10, align 4, !tbaa !5
  %329 = sitofp i32 %328 to double
  %330 = fmul double %327, %329
  %331 = load i32, ptr %9, align 4, !tbaa !5
  %332 = sitofp i32 %331 to double
  %333 = fmul double %330, %332
  store double %333, ptr %27, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 6, ptr %28) #11
  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) #11
  %334 = load i32, ptr %24, align 4, !tbaa !5
  %335 = sitofp i32 %334 to double
  %336 = fdiv double 1.000000e+00, %335
  store double %336, ptr %29, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #11
  %337 = call ptr @getenv(ptr noundef @.str) #11
  store ptr %337, ptr %30, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #11
  %338 = load ptr, ptr %30, align 8, !tbaa !9
  %339 = icmp eq ptr null, %338
  br i1 %339, label %340, label %341

340:                                              ; preds = %309
  br label %344

341:                                              ; preds = %309
  %342 = load ptr, ptr %30, align 8, !tbaa !9
  %343 = call i32 @atoi(ptr noundef %342) #12
  br label %344

344:                                              ; preds = %341, %340
  %345 = phi i32 [ 0, %340 ], [ %343, %341 ]
  store i32 %345, ptr %31, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 48, ptr %32) #11
  %346 = load i32, ptr %24, align 4, !tbaa !5
  %347 = load i32, ptr %20, align 4, !tbaa !5
  %348 = mul nsw i32 %346, %347
  %349 = add nsw i32 %348, 8
  %350 = sub nsw i32 %349, 1
  %351 = load i32, ptr %24, align 4, !tbaa !5
  %352 = load i32, ptr %21, align 4, !tbaa !5
  %353 = mul nsw i32 %351, %352
  %354 = add nsw i32 %353, 8
  %355 = sub nsw i32 %354, 1
  %356 = load i32, ptr %24, align 4, !tbaa !5
  %357 = load i32, ptr %22, align 4, !tbaa !5
  %358 = mul nsw i32 %356, %357
  %359 = add nsw i32 %358, 8
  %360 = sub nsw i32 %359, 1
  %361 = load i32, ptr %24, align 4, !tbaa !5
  invoke void @_ZZ4mainEN4raiiC2Eiiii(ptr noundef nonnull align 8 dereferenceable(48) %32, i32 noundef %350, i32 noundef %355, i32 noundef %360, i32 noundef %361)
          to label %362 unwind label %420

362:                                              ; preds = %344
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #11
  %363 = getelementptr inbounds %struct.raii, ptr %32, i32 0, i32 0
  %364 = load ptr, ptr %363, align 8, !tbaa !16
  %365 = getelementptr inbounds %struct.raii, ptr %32, i32 0, i32 0
  %366 = load ptr, ptr %365, align 8, !tbaa !16
  %367 = ptrtoint ptr %366 to i64
  %368 = add i64 %367, 63
  %369 = and i64 %368, -64
  %370 = getelementptr inbounds %struct.raii, ptr %32, i32 0, i32 0
  %371 = load ptr, ptr %370, align 8, !tbaa !16
  %372 = ptrtoint ptr %371 to i64
  %373 = sub i64 %369, %372
  %374 = udiv i64 %373, 8
  %375 = getelementptr inbounds double, ptr %364, i64 %374
  store ptr %375, ptr %35, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #11
  %376 = getelementptr inbounds %struct.raii, ptr %32, i32 0, i32 1
  %377 = load ptr, ptr %376, align 8, !tbaa !18
  %378 = getelementptr inbounds %struct.raii, ptr %32, i32 0, i32 1
  %379 = load ptr, ptr %378, align 8, !tbaa !18
  %380 = ptrtoint ptr %379 to i64
  %381 = add i64 %380, 63
  %382 = and i64 %381, -64
  %383 = getelementptr inbounds %struct.raii, ptr %32, i32 0, i32 1
  %384 = load ptr, ptr %383, align 8, !tbaa !18
  %385 = ptrtoint ptr %384 to i64
  %386 = sub i64 %382, %385
  %387 = udiv i64 %386, 8
  %388 = getelementptr inbounds double, ptr %377, i64 %387
  store ptr %388, ptr %36, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #11
  %389 = getelementptr inbounds %struct.raii, ptr %32, i32 0, i32 2
  %390 = load ptr, ptr %389, align 8, !tbaa !19
  %391 = getelementptr inbounds %struct.raii, ptr %32, i32 0, i32 2
  %392 = load ptr, ptr %391, align 8, !tbaa !19
  %393 = ptrtoint ptr %392 to i64
  %394 = add i64 %393, 63
  %395 = and i64 %394, -64
  %396 = getelementptr inbounds %struct.raii, ptr %32, i32 0, i32 2
  %397 = load ptr, ptr %396, align 8, !tbaa !19
  %398 = ptrtoint ptr %397 to i64
  %399 = sub i64 %395, %398
  %400 = udiv i64 %399, 8
  %401 = getelementptr inbounds double, ptr %390, i64 %400
  store ptr %401, ptr %37, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #11
  %402 = getelementptr inbounds %struct.raii, ptr %32, i32 0, i32 3
  %403 = load ptr, ptr %402, align 8, !tbaa !20
  %404 = getelementptr inbounds %struct.raii, ptr %32, i32 0, i32 3
  %405 = load ptr, ptr %404, align 8, !tbaa !20
  %406 = ptrtoint ptr %405 to i64
  %407 = add i64 %406, 63
  %408 = and i64 %407, -64
  %409 = getelementptr inbounds %struct.raii, ptr %32, i32 0, i32 3
  %410 = load ptr, ptr %409, align 8, !tbaa !20
  %411 = ptrtoint ptr %410 to i64
  %412 = sub i64 %408, %411
  %413 = udiv i64 %412, 8
  %414 = getelementptr inbounds double, ptr %403, i64 %413
  store ptr %414, ptr %38, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %39) #11
  store i32 0, ptr %39, align 4, !tbaa !5
  br label %415

415:                                              ; preds = %1075, %362
  %416 = load i32, ptr %39, align 4, !tbaa !5
  %417 = load i32, ptr %24, align 4, !tbaa !5
  %418 = icmp slt i32 %416, %417
  br i1 %418, label %424, label %419

419:                                              ; preds = %415
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #11
  br label %1079

420:                                              ; preds = %344
  %421 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %422 = extractvalue { ptr, i32 } %421, 0
  store ptr %422, ptr %33, align 8
  %423 = extractvalue { ptr, i32 } %421, 1
  store i32 %423, ptr %34, align 4
  br label %2788

424:                                              ; preds = %415
  br label %425

425:                                              ; preds = %424
  call void @llvm.lifetime.start.p0(i64 8, ptr %40) #11
  %426 = load i32, ptr %39, align 4, !tbaa !5
  %427 = invoke noundef i32 @_ZZ4mainENK4raii7shuffleEi(ptr noundef nonnull align 8 dereferenceable(48) %32, i32 noundef %426)
          to label %428 unwind label %481

428:                                              ; preds = %425
  %429 = add nsw i32 42, %427
  %430 = sitofp i32 %429 to double
  store double %430, ptr %40, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 8, ptr %41) #11
  %431 = load double, ptr %40, align 8, !tbaa !12
  %432 = load double, ptr %29, align 8, !tbaa !12
  %433 = load double, ptr %29, align 8, !tbaa !12
  %434 = call double @llvm.fmuladd.f64(double %431, double %432, double %433)
  store double %434, ptr %41, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 4, ptr %42) #11
  %435 = load i32, ptr %8, align 4, !tbaa !5
  store i32 %435, ptr %42, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %43) #11
  %436 = load i32, ptr %9, align 4, !tbaa !5
  store i32 %436, ptr %43, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %44) #11
  %437 = load i32, ptr %13, align 4, !tbaa !5
  store i32 %437, ptr %44, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %45) #11
  store i32 0, ptr %45, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %46) #11
  store i32 0, ptr %46, align 4, !tbaa !5
  %438 = load double, ptr %40, align 8, !tbaa !12
  %439 = fcmp une double 0.000000e+00, %438
  br i1 %439, label %440, label %525

440:                                              ; preds = %428
  store i32 0, ptr %45, align 4, !tbaa !5
  br label %441

441:                                              ; preds = %521, %440
  %442 = load i32, ptr %45, align 4, !tbaa !5
  %443 = load i32, ptr %43, align 4, !tbaa !5
  %444 = icmp slt i32 %442, %443
  br i1 %444, label %445, label %524

445:                                              ; preds = %441
  store i32 0, ptr %46, align 4, !tbaa !5
  br label %446

446:                                              ; preds = %478, %445
  %447 = load i32, ptr %46, align 4, !tbaa !5
  %448 = load i32, ptr %42, align 4, !tbaa !5
  %449 = icmp slt i32 %447, %448
  br i1 %449, label %450, label %489

450:                                              ; preds = %446
  call void @llvm.lifetime.start.p0(i64 4, ptr %47) #11
  %451 = load i32, ptr %45, align 4, !tbaa !5
  %452 = load i32, ptr %44, align 4, !tbaa !5
  %453 = mul nsw i32 %451, %452
  %454 = load i32, ptr %46, align 4, !tbaa !5
  %455 = add nsw i32 %453, %454
  store i32 %455, ptr %47, align 4, !tbaa !5
  %456 = load double, ptr %41, align 8, !tbaa !12
  %457 = load i32, ptr %45, align 4, !tbaa !5
  %458 = sitofp i32 %457 to double
  %459 = load i32, ptr %42, align 4, !tbaa !5
  %460 = sitofp i32 %459 to double
  %461 = call double @llvm.fmuladd.f64(double %458, double %460, double 1.000000e+00)
  %462 = load i32, ptr %46, align 4, !tbaa !5
  %463 = sitofp i32 %462 to double
  %464 = fadd double %461, %463
  %465 = fmul double %456, %464
  %466 = load ptr, ptr %35, align 8, !tbaa !9
  %467 = load i32, ptr %20, align 4, !tbaa !5
  %468 = sext i32 %467 to i64
  %469 = load i32, ptr %39, align 4, !tbaa !5
  %470 = invoke noundef i32 @_ZZ4mainENK4raii7shuffleEi(ptr noundef nonnull align 8 dereferenceable(48) %32, i32 noundef %469)
          to label %471 unwind label %485

471:                                              ; preds = %450
  %472 = sext i32 %470 to i64
  %473 = mul i64 %468, %472
  %474 = getelementptr inbounds double, ptr %466, i64 %473
  %475 = load i32, ptr %47, align 4, !tbaa !5
  %476 = sext i32 %475 to i64
  %477 = getelementptr inbounds double, ptr %474, i64 %476
  store double %465, ptr %477, align 8, !tbaa !12
  call void @llvm.lifetime.end.p0(i64 4, ptr %47) #11
  br label %478

478:                                              ; preds = %471
  %479 = load i32, ptr %46, align 4, !tbaa !5
  %480 = add nsw i32 %479, 1
  store i32 %480, ptr %46, align 4, !tbaa !5
  br label %446, !llvm.loop !21

481:                                              ; preds = %425
  %482 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %483 = extractvalue { ptr, i32 } %482, 0
  store ptr %483, ptr %33, align 8
  %484 = extractvalue { ptr, i32 } %482, 1
  store i32 %484, ptr %34, align 4
  br label %656

485:                                              ; preds = %450
  %486 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %487 = extractvalue { ptr, i32 } %486, 0
  store ptr %487, ptr %33, align 8
  %488 = extractvalue { ptr, i32 } %486, 1
  store i32 %488, ptr %34, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %47) #11
  br label %655

489:                                              ; preds = %446
  br label %490

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

494:                                              ; preds = %490
  call void @llvm.lifetime.start.p0(i64 4, ptr %48) #11
  %495 = load i32, ptr %45, align 4, !tbaa !5
  %496 = load i32, ptr %44, align 4, !tbaa !5
  %497 = mul nsw i32 %495, %496
  %498 = load i32, ptr %46, align 4, !tbaa !5
  %499 = add nsw i32 %497, %498
  store i32 %499, ptr %48, align 4, !tbaa !5
  %500 = load double, ptr %40, align 8, !tbaa !12
  %501 = load ptr, ptr %35, align 8, !tbaa !9
  %502 = load i32, ptr %20, align 4, !tbaa !5
  %503 = sext i32 %502 to i64
  %504 = load i32, ptr %39, align 4, !tbaa !5
  %505 = invoke noundef i32 @_ZZ4mainENK4raii7shuffleEi(ptr noundef nonnull align 8 dereferenceable(48) %32, i32 noundef %504)
          to label %506 unwind label %516

506:                                              ; preds = %494
  %507 = sext i32 %505 to i64
  %508 = mul i64 %503, %507
  %509 = getelementptr inbounds double, ptr %501, i64 %508
  %510 = load i32, ptr %48, align 4, !tbaa !5
  %511 = sext i32 %510 to i64
  %512 = getelementptr inbounds double, ptr %509, i64 %511
  store double %500, ptr %512, align 8, !tbaa !12
  call void @llvm.lifetime.end.p0(i64 4, ptr %48) #11
  br label %513

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

516:                                              ; preds = %494
  %517 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %518 = extractvalue { ptr, i32 } %517, 0
  store ptr %518, ptr %33, align 8
  %519 = extractvalue { ptr, i32 } %517, 1
  store i32 %519, ptr %34, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %48) #11
  br label %655

520:                                              ; preds = %490
  br label %521

521:                                              ; preds = %520
  %522 = load i32, ptr %45, align 4, !tbaa !5
  %523 = add nsw i32 %522, 1
  store i32 %523, ptr %45, align 4, !tbaa !5
  br label %441, !llvm.loop !24

524:                                              ; preds = %441
  br label %596

525:                                              ; preds = %428
  call void @llvm.lifetime.start.p0(i64 4, ptr %49) #11
  %526 = load i32, ptr %43, align 4, !tbaa !5
  %527 = load i32, ptr %44, align 4, !tbaa !5
  %528 = mul nsw i32 %526, %527
  store i32 %528, ptr %49, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %50) #11
  %529 = load i32, ptr %49, align 4, !tbaa !5
  %530 = add nsw i32 %529, 1
  %531 = sdiv i32 %530, 2
  %532 = sitofp i32 %531 to double
  store double %532, ptr %50, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 8, ptr %51) #11
  %533 = load double, ptr %29, align 8, !tbaa !12
  %534 = load double, ptr %50, align 8, !tbaa !12
  %535 = fdiv double %533, %534
  store double %535, ptr %51, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 8, ptr %52) #11
  %536 = load i32, ptr %49, align 4, !tbaa !5
  %537 = sext i32 %536 to i64
  %538 = invoke i64 @libxsmm_coprime2(i64 noundef %537)
          to label %539 unwind label %582

539:                                              ; preds = %525
  store i64 %538, ptr %52, align 8, !tbaa !14
  store i32 0, ptr %45, align 4, !tbaa !5
  br label %540

540:                                              ; preds = %591, %539
  %541 = load i32, ptr %45, align 4, !tbaa !5
  %542 = load i32, ptr %43, align 4, !tbaa !5
  %543 = icmp slt i32 %541, %542
  br i1 %543, label %544, label %594

544:                                              ; preds = %540
  store i32 0, ptr %46, align 4, !tbaa !5
  br label %545

545:                                              ; preds = %579, %544
  %546 = load i32, ptr %46, align 4, !tbaa !5
  %547 = load i32, ptr %44, align 4, !tbaa !5
  %548 = icmp slt i32 %546, %547
  br i1 %548, label %549, label %590

549:                                              ; preds = %545
  call void @llvm.lifetime.start.p0(i64 4, ptr %53) #11
  %550 = load i32, ptr %45, align 4, !tbaa !5
  %551 = load i32, ptr %44, align 4, !tbaa !5
  %552 = mul nsw i32 %550, %551
  %553 = load i32, ptr %46, align 4, !tbaa !5
  %554 = add nsw i32 %552, %553
  store i32 %554, ptr %53, align 4, !tbaa !5
  %555 = load double, ptr %51, align 8, !tbaa !12
  %556 = load i64, ptr %52, align 8, !tbaa !14
  %557 = load i32, ptr %53, align 4, !tbaa !5
  %558 = sext i32 %557 to i64
  %559 = mul i64 %556, %558
  %560 = load i32, ptr %49, align 4, !tbaa !5
  %561 = sext i32 %560 to i64
  %562 = urem i64 %559, %561
  %563 = uitofp i64 %562 to double
  %564 = load double, ptr %50, align 8, !tbaa !12
  %565 = fsub double %563, %564
  %566 = fmul double %555, %565
  %567 = load ptr, ptr %35, align 8, !tbaa !9
  %568 = load i32, ptr %20, align 4, !tbaa !5
  %569 = sext i32 %568 to i64
  %570 = load i32, ptr %39, align 4, !tbaa !5
  %571 = invoke noundef i32 @_ZZ4mainENK4raii7shuffleEi(ptr noundef nonnull align 8 dereferenceable(48) %32, i32 noundef %570)
          to label %572 unwind label %586

572:                                              ; preds = %549
  %573 = sext i32 %571 to i64
  %574 = mul i64 %569, %573
  %575 = getelementptr inbounds double, ptr %567, i64 %574
  %576 = load i32, ptr %53, align 4, !tbaa !5
  %577 = sext i32 %576 to i64
  %578 = getelementptr inbounds double, ptr %575, i64 %577
  store double %566, ptr %578, align 8, !tbaa !12
  call void @llvm.lifetime.end.p0(i64 4, ptr %53) #11
  br label %579

579:                                              ; preds = %572
  %580 = load i32, ptr %46, align 4, !tbaa !5
  %581 = add nsw i32 %580, 1
  store i32 %581, ptr %46, align 4, !tbaa !5
  br label %545, !llvm.loop !25

582:                                              ; preds = %525
  %583 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %584 = extractvalue { ptr, i32 } %583, 0
  store ptr %584, ptr %33, align 8
  %585 = extractvalue { ptr, i32 } %583, 1
  store i32 %585, ptr %34, align 4
  br label %595

586:                                              ; preds = %549
  %587 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %588 = extractvalue { ptr, i32 } %587, 0
  store ptr %588, ptr %33, align 8
  %589 = extractvalue { ptr, i32 } %587, 1
  store i32 %589, ptr %34, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %53) #11
  br label %595

590:                                              ; preds = %545
  br label %591

591:                                              ; preds = %590
  %592 = load i32, ptr %45, align 4, !tbaa !5
  %593 = add nsw i32 %592, 1
  store i32 %593, ptr %45, align 4, !tbaa !5
  br label %540, !llvm.loop !26

594:                                              ; preds = %540
  call void @llvm.lifetime.end.p0(i64 8, ptr %52) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %49) #11
  br label %596

595:                                              ; preds = %586, %582
  call void @llvm.lifetime.end.p0(i64 8, ptr %52) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %49) #11
  br label %655

596:                                              ; preds = %594, %524
  call void @llvm.lifetime.end.p0(i64 4, ptr %46) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %45) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #11
  br label %597

597:                                              ; preds = %596
  br label %598

598:                                              ; preds = %597
  br label %599

599:                                              ; preds = %598
  call void @llvm.lifetime.start.p0(i64 8, ptr %54) #11
  %600 = load i32, ptr %39, align 4, !tbaa !5
  %601 = invoke noundef i32 @_ZZ4mainENK4raii7shuffleEi(ptr noundef nonnull align 8 dereferenceable(48) %32, i32 noundef %600)
          to label %602 unwind label %657

602:                                              ; preds = %599
  %603 = add nsw i32 24, %601
  %604 = sitofp i32 %603 to double
  store double %604, ptr %54, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 8, ptr %55) #11
  %605 = load double, ptr %54, align 8, !tbaa !12
  %606 = load double, ptr %29, align 8, !tbaa !12
  %607 = load double, ptr %29, align 8, !tbaa !12
  %608 = call double @llvm.fmuladd.f64(double %605, double %606, double %607)
  store double %608, ptr %55, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 4, ptr %56) #11
  %609 = load i32, ptr %9, align 4, !tbaa !5
  store i32 %609, ptr %56, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %57) #11
  %610 = load i32, ptr %10, align 4, !tbaa !5
  store i32 %610, ptr %57, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %58) #11
  %611 = load i32, ptr %14, align 4, !tbaa !5
  store i32 %611, ptr %58, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %59) #11
  store i32 0, ptr %59, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %60) #11
  store i32 0, ptr %60, align 4, !tbaa !5
  %612 = load double, ptr %54, align 8, !tbaa !12
  %613 = fcmp une double 0.000000e+00, %612
  br i1 %613, label %614, label %701

614:                                              ; preds = %602
  store i32 0, ptr %59, align 4, !tbaa !5
  br label %615

615:                                              ; preds = %697, %614
  %616 = load i32, ptr %59, align 4, !tbaa !5
  %617 = load i32, ptr %57, align 4, !tbaa !5
  %618 = icmp slt i32 %616, %617
  br i1 %618, label %619, label %700

619:                                              ; preds = %615
  store i32 0, ptr %60, align 4, !tbaa !5
  br label %620

620:                                              ; preds = %652, %619
  %621 = load i32, ptr %60, align 4, !tbaa !5
  %622 = load i32, ptr %56, align 4, !tbaa !5
  %623 = icmp slt i32 %621, %622
  br i1 %623, label %624, label %665

624:                                              ; preds = %620
  call void @llvm.lifetime.start.p0(i64 4, ptr %61) #11
  %625 = load i32, ptr %59, align 4, !tbaa !5
  %626 = load i32, ptr %58, align 4, !tbaa !5
  %627 = mul nsw i32 %625, %626
  %628 = load i32, ptr %60, align 4, !tbaa !5
  %629 = add nsw i32 %627, %628
  store i32 %629, ptr %61, align 4, !tbaa !5
  %630 = load double, ptr %55, align 8, !tbaa !12
  %631 = load i32, ptr %59, align 4, !tbaa !5
  %632 = sitofp i32 %631 to double
  %633 = load i32, ptr %56, align 4, !tbaa !5
  %634 = sitofp i32 %633 to double
  %635 = call double @llvm.fmuladd.f64(double %632, double %634, double 1.000000e+00)
  %636 = load i32, ptr %60, align 4, !tbaa !5
  %637 = sitofp i32 %636 to double
  %638 = fadd double %635, %637
  %639 = fmul double %630, %638
  %640 = load ptr, ptr %36, align 8, !tbaa !9
  %641 = load i32, ptr %21, align 4, !tbaa !5
  %642 = sext i32 %641 to i64
  %643 = load i32, ptr %39, align 4, !tbaa !5
  %644 = invoke noundef i32 @_ZZ4mainENK4raii7shuffleEi(ptr noundef nonnull align 8 dereferenceable(48) %32, i32 noundef %643)
          to label %645 unwind label %661

645:                                              ; preds = %624
  %646 = sext i32 %644 to i64
  %647 = mul i64 %642, %646
  %648 = getelementptr inbounds double, ptr %640, i64 %647
  %649 = load i32, ptr %61, align 4, !tbaa !5
  %650 = sext i32 %649 to i64
  %651 = getelementptr inbounds double, ptr %648, i64 %650
  store double %639, ptr %651, align 8, !tbaa !12
  call void @llvm.lifetime.end.p0(i64 4, ptr %61) #11
  br label %652

652:                                              ; preds = %645
  %653 = load i32, ptr %60, align 4, !tbaa !5
  %654 = add nsw i32 %653, 1
  store i32 %654, ptr %60, align 4, !tbaa !5
  br label %620, !llvm.loop !27

655:                                              ; preds = %595, %516, %485
  call void @llvm.lifetime.end.p0(i64 4, ptr %46) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %45) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #11
  br label %656

656:                                              ; preds = %655, %481
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #11
  br label %1078

657:                                              ; preds = %599
  %658 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %659 = extractvalue { ptr, i32 } %658, 0
  store ptr %659, ptr %33, align 8
  %660 = extractvalue { ptr, i32 } %658, 1
  store i32 %660, ptr %34, align 4
  br label %828

661:                                              ; preds = %624
  %662 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %663 = extractvalue { ptr, i32 } %662, 0
  store ptr %663, ptr %33, align 8
  %664 = extractvalue { ptr, i32 } %662, 1
  store i32 %664, ptr %34, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %61) #11
  br label %827

665:                                              ; preds = %620
  br label %666

666:                                              ; preds = %689, %665
  %667 = load i32, ptr %60, align 4, !tbaa !5
  %668 = load i32, ptr %58, align 4, !tbaa !5
  %669 = icmp slt i32 %667, %668
  br i1 %669, label %670, label %696

670:                                              ; preds = %666
  call void @llvm.lifetime.start.p0(i64 4, ptr %62) #11
  %671 = load i32, ptr %59, align 4, !tbaa !5
  %672 = load i32, ptr %58, align 4, !tbaa !5
  %673 = mul nsw i32 %671, %672
  %674 = load i32, ptr %60, align 4, !tbaa !5
  %675 = add nsw i32 %673, %674
  store i32 %675, ptr %62, align 4, !tbaa !5
  %676 = load double, ptr %54, align 8, !tbaa !12
  %677 = load ptr, ptr %36, align 8, !tbaa !9
  %678 = load i32, ptr %21, align 4, !tbaa !5
  %679 = sext i32 %678 to i64
  %680 = load i32, ptr %39, align 4, !tbaa !5
  %681 = invoke noundef i32 @_ZZ4mainENK4raii7shuffleEi(ptr noundef nonnull align 8 dereferenceable(48) %32, i32 noundef %680)
          to label %682 unwind label %692

682:                                              ; preds = %670
  %683 = sext i32 %681 to i64
  %684 = mul i64 %679, %683
  %685 = getelementptr inbounds double, ptr %677, i64 %684
  %686 = load i32, ptr %62, align 4, !tbaa !5
  %687 = sext i32 %686 to i64
  %688 = getelementptr inbounds double, ptr %685, i64 %687
  store double %676, ptr %688, align 8, !tbaa !12
  call void @llvm.lifetime.end.p0(i64 4, ptr %62) #11
  br label %689

689:                                              ; preds = %682
  %690 = load i32, ptr %60, align 4, !tbaa !5
  %691 = add nsw i32 %690, 1
  store i32 %691, ptr %60, align 4, !tbaa !5
  br label %666, !llvm.loop !28

692:                                              ; preds = %670
  %693 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %694 = extractvalue { ptr, i32 } %693, 0
  store ptr %694, ptr %33, align 8
  %695 = extractvalue { ptr, i32 } %693, 1
  store i32 %695, ptr %34, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %62) #11
  br label %827

696:                                              ; preds = %666
  br label %697

697:                                              ; preds = %696
  %698 = load i32, ptr %59, align 4, !tbaa !5
  %699 = add nsw i32 %698, 1
  store i32 %699, ptr %59, align 4, !tbaa !5
  br label %615, !llvm.loop !29

700:                                              ; preds = %615
  br label %772

701:                                              ; preds = %602
  call void @llvm.lifetime.start.p0(i64 4, ptr %63) #11
  %702 = load i32, ptr %57, align 4, !tbaa !5
  %703 = load i32, ptr %58, align 4, !tbaa !5
  %704 = mul nsw i32 %702, %703
  store i32 %704, ptr %63, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %64) #11
  %705 = load i32, ptr %63, align 4, !tbaa !5
  %706 = add nsw i32 %705, 1
  %707 = sdiv i32 %706, 2
  %708 = sitofp i32 %707 to double
  store double %708, ptr %64, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 8, ptr %65) #11
  %709 = load double, ptr %29, align 8, !tbaa !12
  %710 = load double, ptr %64, align 8, !tbaa !12
  %711 = fdiv double %709, %710
  store double %711, ptr %65, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 8, ptr %66) #11
  %712 = load i32, ptr %63, align 4, !tbaa !5
  %713 = sext i32 %712 to i64
  %714 = invoke i64 @libxsmm_coprime2(i64 noundef %713)
          to label %715 unwind label %758

715:                                              ; preds = %701
  store i64 %714, ptr %66, align 8, !tbaa !14
  store i32 0, ptr %59, align 4, !tbaa !5
  br label %716

716:                                              ; preds = %767, %715
  %717 = load i32, ptr %59, align 4, !tbaa !5
  %718 = load i32, ptr %57, align 4, !tbaa !5
  %719 = icmp slt i32 %717, %718
  br i1 %719, label %720, label %770

720:                                              ; preds = %716
  store i32 0, ptr %60, align 4, !tbaa !5
  br label %721

721:                                              ; preds = %755, %720
  %722 = load i32, ptr %60, align 4, !tbaa !5
  %723 = load i32, ptr %58, align 4, !tbaa !5
  %724 = icmp slt i32 %722, %723
  br i1 %724, label %725, label %766

725:                                              ; preds = %721
  call void @llvm.lifetime.start.p0(i64 4, ptr %67) #11
  %726 = load i32, ptr %59, align 4, !tbaa !5
  %727 = load i32, ptr %58, align 4, !tbaa !5
  %728 = mul nsw i32 %726, %727
  %729 = load i32, ptr %60, align 4, !tbaa !5
  %730 = add nsw i32 %728, %729
  store i32 %730, ptr %67, align 4, !tbaa !5
  %731 = load double, ptr %65, align 8, !tbaa !12
  %732 = load i64, ptr %66, align 8, !tbaa !14
  %733 = load i32, ptr %67, align 4, !tbaa !5
  %734 = sext i32 %733 to i64
  %735 = mul i64 %732, %734
  %736 = load i32, ptr %63, align 4, !tbaa !5
  %737 = sext i32 %736 to i64
  %738 = urem i64 %735, %737
  %739 = uitofp i64 %738 to double
  %740 = load double, ptr %64, align 8, !tbaa !12
  %741 = fsub double %739, %740
  %742 = fmul double %731, %741
  %743 = load ptr, ptr %36, align 8, !tbaa !9
  %744 = load i32, ptr %21, align 4, !tbaa !5
  %745 = sext i32 %744 to i64
  %746 = load i32, ptr %39, align 4, !tbaa !5
  %747 = invoke noundef i32 @_ZZ4mainENK4raii7shuffleEi(ptr noundef nonnull align 8 dereferenceable(48) %32, i32 noundef %746)
          to label %748 unwind label %762

748:                                              ; preds = %725
  %749 = sext i32 %747 to i64
  %750 = mul i64 %745, %749
  %751 = getelementptr inbounds double, ptr %743, i64 %750
  %752 = load i32, ptr %67, align 4, !tbaa !5
  %753 = sext i32 %752 to i64
  %754 = getelementptr inbounds double, ptr %751, i64 %753
  store double %742, ptr %754, align 8, !tbaa !12
  call void @llvm.lifetime.end.p0(i64 4, ptr %67) #11
  br label %755

755:                                              ; preds = %748
  %756 = load i32, ptr %60, align 4, !tbaa !5
  %757 = add nsw i32 %756, 1
  store i32 %757, ptr %60, align 4, !tbaa !5
  br label %721, !llvm.loop !30

758:                                              ; preds = %701
  %759 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %760 = extractvalue { ptr, i32 } %759, 0
  store ptr %760, ptr %33, align 8
  %761 = extractvalue { ptr, i32 } %759, 1
  store i32 %761, ptr %34, align 4
  br label %771

762:                                              ; preds = %725
  %763 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %764 = extractvalue { ptr, i32 } %763, 0
  store ptr %764, ptr %33, align 8
  %765 = extractvalue { ptr, i32 } %763, 1
  store i32 %765, ptr %34, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %67) #11
  br label %771

766:                                              ; preds = %721
  br label %767

767:                                              ; preds = %766
  %768 = load i32, ptr %59, align 4, !tbaa !5
  %769 = add nsw i32 %768, 1
  store i32 %769, ptr %59, align 4, !tbaa !5
  br label %716, !llvm.loop !31

770:                                              ; preds = %716
  call void @llvm.lifetime.end.p0(i64 8, ptr %66) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %65) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %64) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %63) #11
  br label %772

771:                                              ; preds = %762, %758
  call void @llvm.lifetime.end.p0(i64 8, ptr %66) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %65) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %64) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %63) #11
  br label %827

772:                                              ; preds = %770, %700
  call void @llvm.lifetime.end.p0(i64 4, ptr %60) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %59) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %58) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %57) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %56) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %55) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %54) #11
  br label %773

773:                                              ; preds = %772
  br label %774

774:                                              ; preds = %773
  br label %775

775:                                              ; preds = %774
  call void @llvm.lifetime.start.p0(i64 8, ptr %68) #11
  %776 = load i32, ptr %39, align 4, !tbaa !5
  %777 = add nsw i32 22, %776
  %778 = sitofp i32 %777 to double
  store double %778, ptr %68, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 8, ptr %69) #11
  %779 = load double, ptr %68, align 8, !tbaa !12
  %780 = load double, ptr %29, align 8, !tbaa !12
  %781 = load double, ptr %29, align 8, !tbaa !12
  %782 = call double @llvm.fmuladd.f64(double %779, double %780, double %781)
  store double %782, ptr %69, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 4, ptr %70) #11
  %783 = load i32, ptr %8, align 4, !tbaa !5
  store i32 %783, ptr %70, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %71) #11
  %784 = load i32, ptr %10, align 4, !tbaa !5
  store i32 %784, ptr %71, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %72) #11
  %785 = load i32, ptr %15, align 4, !tbaa !5
  store i32 %785, ptr %72, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %73) #11
  store i32 0, ptr %73, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %74) #11
  store i32 0, ptr %74, align 4, !tbaa !5
  %786 = load double, ptr %68, align 8, !tbaa !12
  %787 = fcmp une double 0.000000e+00, %786
  br i1 %787, label %788, label %859

788:                                              ; preds = %775
  store i32 0, ptr %73, align 4, !tbaa !5
  br label %789

789:                                              ; preds = %855, %788
  %790 = load i32, ptr %73, align 4, !tbaa !5
  %791 = load i32, ptr %71, align 4, !tbaa !5
  %792 = icmp slt i32 %790, %791
  br i1 %792, label %793, label %858

793:                                              ; preds = %789
  store i32 0, ptr %74, align 4, !tbaa !5
  br label %794

794:                                              ; preds = %824, %793
  %795 = load i32, ptr %74, align 4, !tbaa !5
  %796 = load i32, ptr %70, align 4, !tbaa !5
  %797 = icmp slt i32 %795, %796
  br i1 %797, label %798, label %829

798:                                              ; preds = %794
  call void @llvm.lifetime.start.p0(i64 4, ptr %75) #11
  %799 = load i32, ptr %73, align 4, !tbaa !5
  %800 = load i32, ptr %72, align 4, !tbaa !5
  %801 = mul nsw i32 %799, %800
  %802 = load i32, ptr %74, align 4, !tbaa !5
  %803 = add nsw i32 %801, %802
  store i32 %803, ptr %75, align 4, !tbaa !5
  %804 = load double, ptr %69, align 8, !tbaa !12
  %805 = load i32, ptr %73, align 4, !tbaa !5
  %806 = sitofp i32 %805 to double
  %807 = load i32, ptr %70, align 4, !tbaa !5
  %808 = sitofp i32 %807 to double
  %809 = call double @llvm.fmuladd.f64(double %806, double %808, double 1.000000e+00)
  %810 = load i32, ptr %74, align 4, !tbaa !5
  %811 = sitofp i32 %810 to double
  %812 = fadd double %809, %811
  %813 = fmul double %804, %812
  %814 = load ptr, ptr %37, align 8, !tbaa !9
  %815 = load i32, ptr %22, align 4, !tbaa !5
  %816 = sext i32 %815 to i64
  %817 = load i32, ptr %39, align 4, !tbaa !5
  %818 = sext i32 %817 to i64
  %819 = mul i64 %816, %818
  %820 = getelementptr inbounds double, ptr %814, i64 %819
  %821 = load i32, ptr %75, align 4, !tbaa !5
  %822 = sext i32 %821 to i64
  %823 = getelementptr inbounds double, ptr %820, i64 %822
  store double %813, ptr %823, align 8, !tbaa !12
  call void @llvm.lifetime.end.p0(i64 4, ptr %75) #11
  br label %824

824:                                              ; preds = %798
  %825 = load i32, ptr %74, align 4, !tbaa !5
  %826 = add nsw i32 %825, 1
  store i32 %826, ptr %74, align 4, !tbaa !5
  br label %794, !llvm.loop !32

827:                                              ; preds = %771, %692, %661
  call void @llvm.lifetime.end.p0(i64 4, ptr %60) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %59) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %58) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %57) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %56) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %55) #11
  br label %828

828:                                              ; preds = %827, %657
  call void @llvm.lifetime.end.p0(i64 8, ptr %54) #11
  br label %1078

829:                                              ; preds = %794
  br label %830

830:                                              ; preds = %851, %829
  %831 = load i32, ptr %74, align 4, !tbaa !5
  %832 = load i32, ptr %72, align 4, !tbaa !5
  %833 = icmp slt i32 %831, %832
  br i1 %833, label %834, label %854

834:                                              ; preds = %830
  call void @llvm.lifetime.start.p0(i64 4, ptr %76) #11
  %835 = load i32, ptr %73, align 4, !tbaa !5
  %836 = load i32, ptr %72, align 4, !tbaa !5
  %837 = mul nsw i32 %835, %836
  %838 = load i32, ptr %74, align 4, !tbaa !5
  %839 = add nsw i32 %837, %838
  store i32 %839, ptr %76, align 4, !tbaa !5
  %840 = load double, ptr %68, align 8, !tbaa !12
  %841 = load ptr, ptr %37, align 8, !tbaa !9
  %842 = load i32, ptr %22, align 4, !tbaa !5
  %843 = sext i32 %842 to i64
  %844 = load i32, ptr %39, align 4, !tbaa !5
  %845 = sext i32 %844 to i64
  %846 = mul i64 %843, %845
  %847 = getelementptr inbounds double, ptr %841, i64 %846
  %848 = load i32, ptr %76, align 4, !tbaa !5
  %849 = sext i32 %848 to i64
  %850 = getelementptr inbounds double, ptr %847, i64 %849
  store double %840, ptr %850, align 8, !tbaa !12
  call void @llvm.lifetime.end.p0(i64 4, ptr %76) #11
  br label %851

851:                                              ; preds = %834
  %852 = load i32, ptr %74, align 4, !tbaa !5
  %853 = add nsw i32 %852, 1
  store i32 %853, ptr %74, align 4, !tbaa !5
  br label %830, !llvm.loop !33

854:                                              ; preds = %830
  br label %855

855:                                              ; preds = %854
  %856 = load i32, ptr %73, align 4, !tbaa !5
  %857 = add nsw i32 %856, 1
  store i32 %857, ptr %73, align 4, !tbaa !5
  br label %789, !llvm.loop !34

858:                                              ; preds = %789
  br label %923

859:                                              ; preds = %775
  call void @llvm.lifetime.start.p0(i64 4, ptr %77) #11
  %860 = load i32, ptr %71, align 4, !tbaa !5
  %861 = load i32, ptr %72, align 4, !tbaa !5
  %862 = mul nsw i32 %860, %861
  store i32 %862, ptr %77, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %78) #11
  %863 = load i32, ptr %77, align 4, !tbaa !5
  %864 = add nsw i32 %863, 1
  %865 = sdiv i32 %864, 2
  %866 = sitofp i32 %865 to double
  store double %866, ptr %78, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 8, ptr %79) #11
  %867 = load double, ptr %29, align 8, !tbaa !12
  %868 = load double, ptr %78, align 8, !tbaa !12
  %869 = fdiv double %867, %868
  store double %869, ptr %79, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 8, ptr %80) #11
  %870 = load i32, ptr %77, align 4, !tbaa !5
  %871 = sext i32 %870 to i64
  %872 = invoke i64 @libxsmm_coprime2(i64 noundef %871)
          to label %873 unwind label %914

873:                                              ; preds = %859
  store i64 %872, ptr %80, align 8, !tbaa !14
  store i32 0, ptr %73, align 4, !tbaa !5
  br label %874

874:                                              ; preds = %919, %873
  %875 = load i32, ptr %73, align 4, !tbaa !5
  %876 = load i32, ptr %71, align 4, !tbaa !5
  %877 = icmp slt i32 %875, %876
  br i1 %877, label %878, label %922

878:                                              ; preds = %874
  store i32 0, ptr %74, align 4, !tbaa !5
  br label %879

879:                                              ; preds = %911, %878
  %880 = load i32, ptr %74, align 4, !tbaa !5
  %881 = load i32, ptr %72, align 4, !tbaa !5
  %882 = icmp slt i32 %880, %881
  br i1 %882, label %883, label %918

883:                                              ; preds = %879
  call void @llvm.lifetime.start.p0(i64 4, ptr %81) #11
  %884 = load i32, ptr %73, align 4, !tbaa !5
  %885 = load i32, ptr %72, align 4, !tbaa !5
  %886 = mul nsw i32 %884, %885
  %887 = load i32, ptr %74, align 4, !tbaa !5
  %888 = add nsw i32 %886, %887
  store i32 %888, ptr %81, align 4, !tbaa !5
  %889 = load double, ptr %79, align 8, !tbaa !12
  %890 = load i64, ptr %80, align 8, !tbaa !14
  %891 = load i32, ptr %81, align 4, !tbaa !5
  %892 = sext i32 %891 to i64
  %893 = mul i64 %890, %892
  %894 = load i32, ptr %77, align 4, !tbaa !5
  %895 = sext i32 %894 to i64
  %896 = urem i64 %893, %895
  %897 = uitofp i64 %896 to double
  %898 = load double, ptr %78, align 8, !tbaa !12
  %899 = fsub double %897, %898
  %900 = fmul double %889, %899
  %901 = load ptr, ptr %37, align 8, !tbaa !9
  %902 = load i32, ptr %22, align 4, !tbaa !5
  %903 = sext i32 %902 to i64
  %904 = load i32, ptr %39, align 4, !tbaa !5
  %905 = sext i32 %904 to i64
  %906 = mul i64 %903, %905
  %907 = getelementptr inbounds double, ptr %901, i64 %906
  %908 = load i32, ptr %81, align 4, !tbaa !5
  %909 = sext i32 %908 to i64
  %910 = getelementptr inbounds double, ptr %907, i64 %909
  store double %900, ptr %910, align 8, !tbaa !12
  call void @llvm.lifetime.end.p0(i64 4, ptr %81) #11
  br label %911

911:                                              ; preds = %883
  %912 = load i32, ptr %74, align 4, !tbaa !5
  %913 = add nsw i32 %912, 1
  store i32 %913, ptr %74, align 4, !tbaa !5
  br label %879, !llvm.loop !35

914:                                              ; preds = %859
  %915 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %916 = extractvalue { ptr, i32 } %915, 0
  store ptr %916, ptr %33, align 8
  %917 = extractvalue { ptr, i32 } %915, 1
  store i32 %917, ptr %34, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %80) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %79) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %78) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %77) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %74) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %73) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %72) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %71) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %70) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %69) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %68) #11
  br label %1078

918:                                              ; preds = %879
  br label %919

919:                                              ; preds = %918
  %920 = load i32, ptr %73, align 4, !tbaa !5
  %921 = add nsw i32 %920, 1
  store i32 %921, ptr %73, align 4, !tbaa !5
  br label %874, !llvm.loop !36

922:                                              ; preds = %874
  call void @llvm.lifetime.end.p0(i64 8, ptr %80) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %79) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %78) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %77) #11
  br label %923

923:                                              ; preds = %922, %858
  call void @llvm.lifetime.end.p0(i64 4, ptr %74) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %73) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %72) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %71) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %70) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %69) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %68) #11
  br label %924

924:                                              ; preds = %923
  br label %925

925:                                              ; preds = %924
  br label %926

926:                                              ; preds = %925
  call void @llvm.lifetime.start.p0(i64 8, ptr %82) #11
  %927 = load i32, ptr %39, align 4, !tbaa !5
  %928 = add nsw i32 22, %927
  %929 = sitofp i32 %928 to double
  store double %929, ptr %82, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 8, ptr %83) #11
  %930 = load double, ptr %82, align 8, !tbaa !12
  %931 = load double, ptr %29, align 8, !tbaa !12
  %932 = load double, ptr %29, align 8, !tbaa !12
  %933 = call double @llvm.fmuladd.f64(double %930, double %931, double %932)
  store double %933, ptr %83, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 4, ptr %84) #11
  %934 = load i32, ptr %8, align 4, !tbaa !5
  store i32 %934, ptr %84, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %85) #11
  %935 = load i32, ptr %10, align 4, !tbaa !5
  store i32 %935, ptr %85, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %86) #11
  %936 = load i32, ptr %15, align 4, !tbaa !5
  store i32 %936, ptr %86, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %87) #11
  store i32 0, ptr %87, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %88) #11
  store i32 0, ptr %88, align 4, !tbaa !5
  %937 = load double, ptr %82, align 8, !tbaa !12
  %938 = fcmp une double 0.000000e+00, %937
  br i1 %938, label %939, label %1008

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

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

944:                                              ; preds = %940
  store i32 0, ptr %88, align 4, !tbaa !5
  br label %945

945:                                              ; preds = %975, %944
  %946 = load i32, ptr %88, align 4, !tbaa !5
  %947 = load i32, ptr %84, align 4, !tbaa !5
  %948 = icmp slt i32 %946, %947
  br i1 %948, label %949, label %978

949:                                              ; preds = %945
  call void @llvm.lifetime.start.p0(i64 4, ptr %89) #11
  %950 = load i32, ptr %87, align 4, !tbaa !5
  %951 = load i32, ptr %86, align 4, !tbaa !5
  %952 = mul nsw i32 %950, %951
  %953 = load i32, ptr %88, align 4, !tbaa !5
  %954 = add nsw i32 %952, %953
  store i32 %954, ptr %89, align 4, !tbaa !5
  %955 = load double, ptr %83, align 8, !tbaa !12
  %956 = load i32, ptr %87, align 4, !tbaa !5
  %957 = sitofp i32 %956 to double
  %958 = load i32, ptr %84, align 4, !tbaa !5
  %959 = sitofp i32 %958 to double
  %960 = call double @llvm.fmuladd.f64(double %957, double %959, double 1.000000e+00)
  %961 = load i32, ptr %88, align 4, !tbaa !5
  %962 = sitofp i32 %961 to double
  %963 = fadd double %960, %962
  %964 = fmul double %955, %963
  %965 = load ptr, ptr %38, align 8, !tbaa !9
  %966 = load i32, ptr %22, align 4, !tbaa !5
  %967 = sext i32 %966 to i64
  %968 = load i32, ptr %39, align 4, !tbaa !5
  %969 = sext i32 %968 to i64
  %970 = mul i64 %967, %969
  %971 = getelementptr inbounds double, ptr %965, i64 %970
  %972 = load i32, ptr %89, align 4, !tbaa !5
  %973 = sext i32 %972 to i64
  %974 = getelementptr inbounds double, ptr %971, i64 %973
  store double %964, ptr %974, align 8, !tbaa !12
  call void @llvm.lifetime.end.p0(i64 4, ptr %89) #11
  br label %975

975:                                              ; preds = %949
  %976 = load i32, ptr %88, align 4, !tbaa !5
  %977 = add nsw i32 %976, 1
  store i32 %977, ptr %88, align 4, !tbaa !5
  br label %945, !llvm.loop !37

978:                                              ; preds = %945
  br label %979

979:                                              ; preds = %1000, %978
  %980 = load i32, ptr %88, align 4, !tbaa !5
  %981 = load i32, ptr %86, align 4, !tbaa !5
  %982 = icmp slt i32 %980, %981
  br i1 %982, label %983, label %1003

983:                                              ; preds = %979
  call void @llvm.lifetime.start.p0(i64 4, ptr %90) #11
  %984 = load i32, ptr %87, align 4, !tbaa !5
  %985 = load i32, ptr %86, align 4, !tbaa !5
  %986 = mul nsw i32 %984, %985
  %987 = load i32, ptr %88, align 4, !tbaa !5
  %988 = add nsw i32 %986, %987
  store i32 %988, ptr %90, align 4, !tbaa !5
  %989 = load double, ptr %82, align 8, !tbaa !12
  %990 = load ptr, ptr %38, align 8, !tbaa !9
  %991 = load i32, ptr %22, align 4, !tbaa !5
  %992 = sext i32 %991 to i64
  %993 = load i32, ptr %39, align 4, !tbaa !5
  %994 = sext i32 %993 to i64
  %995 = mul i64 %992, %994
  %996 = getelementptr inbounds double, ptr %990, i64 %995
  %997 = load i32, ptr %90, align 4, !tbaa !5
  %998 = sext i32 %997 to i64
  %999 = getelementptr inbounds double, ptr %996, i64 %998
  store double %989, ptr %999, align 8, !tbaa !12
  call void @llvm.lifetime.end.p0(i64 4, ptr %90) #11
  br label %1000

1000:                                             ; preds = %983
  %1001 = load i32, ptr %88, align 4, !tbaa !5
  %1002 = add nsw i32 %1001, 1
  store i32 %1002, ptr %88, align 4, !tbaa !5
  br label %979, !llvm.loop !38

1003:                                             ; preds = %979
  br label %1004

1004:                                             ; preds = %1003
  %1005 = load i32, ptr %87, align 4, !tbaa !5
  %1006 = add nsw i32 %1005, 1
  store i32 %1006, ptr %87, align 4, !tbaa !5
  br label %940, !llvm.loop !39

1007:                                             ; preds = %940
  br label %1072

1008:                                             ; preds = %926
  call void @llvm.lifetime.start.p0(i64 4, ptr %91) #11
  %1009 = load i32, ptr %85, align 4, !tbaa !5
  %1010 = load i32, ptr %86, align 4, !tbaa !5
  %1011 = mul nsw i32 %1009, %1010
  store i32 %1011, ptr %91, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %92) #11
  %1012 = load i32, ptr %91, align 4, !tbaa !5
  %1013 = add nsw i32 %1012, 1
  %1014 = sdiv i32 %1013, 2
  %1015 = sitofp i32 %1014 to double
  store double %1015, ptr %92, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 8, ptr %93) #11
  %1016 = load double, ptr %29, align 8, !tbaa !12
  %1017 = load double, ptr %92, align 8, !tbaa !12
  %1018 = fdiv double %1016, %1017
  store double %1018, ptr %93, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 8, ptr %94) #11
  %1019 = load i32, ptr %91, align 4, !tbaa !5
  %1020 = sext i32 %1019 to i64
  %1021 = invoke i64 @libxsmm_coprime2(i64 noundef %1020)
          to label %1022 unwind label %1063

1022:                                             ; preds = %1008
  store i64 %1021, ptr %94, align 8, !tbaa !14
  store i32 0, ptr %87, align 4, !tbaa !5
  br label %1023

1023:                                             ; preds = %1068, %1022
  %1024 = load i32, ptr %87, align 4, !tbaa !5
  %1025 = load i32, ptr %85, align 4, !tbaa !5
  %1026 = icmp slt i32 %1024, %1025
  br i1 %1026, label %1027, label %1071

1027:                                             ; preds = %1023
  store i32 0, ptr %88, align 4, !tbaa !5
  br label %1028

1028:                                             ; preds = %1060, %1027
  %1029 = load i32, ptr %88, align 4, !tbaa !5
  %1030 = load i32, ptr %86, align 4, !tbaa !5
  %1031 = icmp slt i32 %1029, %1030
  br i1 %1031, label %1032, label %1067

1032:                                             ; preds = %1028
  call void @llvm.lifetime.start.p0(i64 4, ptr %95) #11
  %1033 = load i32, ptr %87, align 4, !tbaa !5
  %1034 = load i32, ptr %86, align 4, !tbaa !5
  %1035 = mul nsw i32 %1033, %1034
  %1036 = load i32, ptr %88, align 4, !tbaa !5
  %1037 = add nsw i32 %1035, %1036
  store i32 %1037, ptr %95, align 4, !tbaa !5
  %1038 = load double, ptr %93, align 8, !tbaa !12
  %1039 = load i64, ptr %94, align 8, !tbaa !14
  %1040 = load i32, ptr %95, align 4, !tbaa !5
  %1041 = sext i32 %1040 to i64
  %1042 = mul i64 %1039, %1041
  %1043 = load i32, ptr %91, align 4, !tbaa !5
  %1044 = sext i32 %1043 to i64
  %1045 = urem i64 %1042, %1044
  %1046 = uitofp i64 %1045 to double
  %1047 = load double, ptr %92, align 8, !tbaa !12
  %1048 = fsub double %1046, %1047
  %1049 = fmul double %1038, %1048
  %1050 = load ptr, ptr %38, align 8, !tbaa !9
  %1051 = load i32, ptr %22, align 4, !tbaa !5
  %1052 = sext i32 %1051 to i64
  %1053 = load i32, ptr %39, align 4, !tbaa !5
  %1054 = sext i32 %1053 to i64
  %1055 = mul i64 %1052, %1054
  %1056 = getelementptr inbounds double, ptr %1050, i64 %1055
  %1057 = load i32, ptr %95, align 4, !tbaa !5
  %1058 = sext i32 %1057 to i64
  %1059 = getelementptr inbounds double, ptr %1056, i64 %1058
  store double %1049, ptr %1059, align 8, !tbaa !12
  call void @llvm.lifetime.end.p0(i64 4, ptr %95) #11
  br label %1060

1060:                                             ; preds = %1032
  %1061 = load i32, ptr %88, align 4, !tbaa !5
  %1062 = add nsw i32 %1061, 1
  store i32 %1062, ptr %88, align 4, !tbaa !5
  br label %1028, !llvm.loop !40

1063:                                             ; preds = %1008
  %1064 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %1065 = extractvalue { ptr, i32 } %1064, 0
  store ptr %1065, ptr %33, align 8
  %1066 = extractvalue { ptr, i32 } %1064, 1
  store i32 %1066, ptr %34, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %94) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %93) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %92) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %91) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %88) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %87) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %86) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %85) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %84) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %83) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %82) #11
  br label %1078

1067:                                             ; preds = %1028
  br label %1068

1068:                                             ; preds = %1067
  %1069 = load i32, ptr %87, align 4, !tbaa !5
  %1070 = add nsw i32 %1069, 1
  store i32 %1070, ptr %87, align 4, !tbaa !5
  br label %1023, !llvm.loop !41

1071:                                             ; preds = %1023
  call void @llvm.lifetime.end.p0(i64 8, ptr %94) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %93) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %92) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %91) #11
  br label %1072

1072:                                             ; preds = %1071, %1007
  call void @llvm.lifetime.end.p0(i64 4, ptr %88) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %87) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %86) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %85) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %84) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %83) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %82) #11
  br label %1073

1073:                                             ; preds = %1072
  br label %1074

1074:                                             ; preds = %1073
  br label %1075

1075:                                             ; preds = %1074
  %1076 = load i32, ptr %39, align 4, !tbaa !5
  %1077 = add nsw i32 %1076, 1
  store i32 %1077, ptr %39, align 4, !tbaa !5
  br label %415, !llvm.loop !42

1078:                                             ; preds = %1063, %914, %828, %656
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #11
  br label %2787

1079:                                             ; preds = %419
  invoke void @libxsmm_init()
          to label %1080 unwind label %1119

1080:                                             ; preds = %1079
  %1081 = load ptr, ptr @stdout, align 8, !tbaa !9
  %1082 = load i32, ptr %8, align 4, !tbaa !5
  %1083 = sext i32 %1082 to i64
  %1084 = load i32, ptr %10, align 4, !tbaa !5
  %1085 = sext i32 %1084 to i64
  %1086 = load i32, ptr %9, align 4, !tbaa !5
  %1087 = sext i32 %1086 to i64
  %1088 = load i32, ptr %24, align 4, !tbaa !5
  %1089 = sext i32 %1088 to i64
  %1090 = load i32, ptr %24, align 4, !tbaa !5
  %1091 = sext i32 %1090 to i64
  %1092 = load i32, ptr %20, align 4, !tbaa !5
  %1093 = sext i32 %1092 to i64
  %1094 = load i32, ptr %21, align 4, !tbaa !5
  %1095 = sext i32 %1094 to i64
  %1096 = add i64 %1093, %1095
  %1097 = mul i64 %1096, 8
  %1098 = load i32, ptr %22, align 4, !tbaa !5
  %1099 = sext i32 %1098 to i64
  %1100 = mul i64 %1099, 8
  %1101 = add i64 %1097, %1100
  %1102 = mul i64 %1091, %1101
  %1103 = uitofp i64 %1102 to double
  %1104 = fmul double 1.000000e+00, %1103
  %1105 = fdiv double %1104, 0x4130000000000000
  %1106 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %1081, ptr noundef @.str.1, i64 noundef %1083, i64 noundef %1085, i64 noundef %1087, i64 noundef %1089, double noundef %1105, ptr noundef @.str.2, ptr noundef @.str.2) #11
  call void @llvm.lifetime.start.p0(i64 8, ptr %96) #11
  %1107 = load i32, ptr %8, align 4, !tbaa !5
  %1108 = load i32, ptr %10, align 4, !tbaa !5
  %1109 = load i32, ptr %9, align 4, !tbaa !5
  %1110 = load i32, ptr %13, align 4, !tbaa !5
  %1111 = load i32, ptr %14, align 4, !tbaa !5
  %1112 = load i32, ptr %15, align 4, !tbaa !5
  invoke void @_ZN18libxsmm_mmfunctionIddLin1EEC2Eiiiiiiiddi(ptr noundef nonnull align 8 dereferenceable(8) %96, i32 noundef 0, i32 noundef %1107, i32 noundef %1108, i32 noundef %1109, i32 noundef %1110, i32 noundef %1111, i32 noundef %1112, double noundef 1.000000e+00, double noundef 1.000000e+00, i32 noundef -1)
          to label %1113 unwind label %1123

1113:                                             ; preds = %1080
  %1114 = invoke noundef ptr @_ZNK18libxsmm_mmfunctionIddLin1EEcvPKvEv(ptr noundef nonnull align 8 dereferenceable(8) %96)
          to label %1115 unwind label %1123

1115:                                             ; preds = %1113
  %1116 = icmp ne ptr %1114, null
  br i1 %1116, label %1127, label %1117

1117:                                             ; preds = %1115
  %1118 = call ptr @__cxa_allocate_exception(i64 8) #11
  store ptr @.str.3, ptr %1118, align 16, !tbaa !9
  invoke void @__cxa_throw(ptr %1118, ptr @_ZTIPKc, ptr null) #13
          to label %2820 unwind label %1123

1119:                                             ; preds = %1079
  %1120 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %1121 = extractvalue { ptr, i32 } %1120, 0
  store ptr %1121, ptr %33, align 8
  %1122 = extractvalue { ptr, i32 } %1120, 1
  store i32 %1122, ptr %34, align 4
  br label %2787

1123:                                             ; preds = %1117, %1113, %1080
  %1124 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %1125 = extractvalue { ptr, i32 } %1124, 0
  store ptr %1125, ptr %33, align 8
  %1126 = extractvalue { ptr, i32 } %1124, 1
  store i32 %1126, ptr %34, align 4
  br label %2786

1127:                                             ; preds = %1115
  call void @llvm.lifetime.start.p0(i64 24, ptr %97) #11
  %1128 = load i32, ptr %24, align 4, !tbaa !5
  %1129 = sext i32 %1128 to i64
  call void @llvm.lifetime.start.p0(i64 1, ptr %98) #11
  call void @_ZNSaIPKdEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %98) #11
  invoke void @_ZNSt6vectorIPKdSaIS1_EEC2EmRKS2_(ptr noundef nonnull align 8 dereferenceable(24) %97, i64 noundef %1129, ptr noundef nonnull align 1 dereferenceable(1) %98)
          to label %1130 unwind label %1141

1130:                                             ; preds = %1127
  call void @_ZNSt15__new_allocatorIPKdED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %98) #11
  call void @llvm.lifetime.end.p0(i64 1, ptr %98) #11
  call void @llvm.lifetime.start.p0(i64 24, ptr %99) #11
  %1131 = load i32, ptr %24, align 4, !tbaa !5
  %1132 = sext i32 %1131 to i64
  call void @llvm.lifetime.start.p0(i64 1, ptr %100) #11
  call void @_ZNSaIPKdEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %100) #11
  invoke void @_ZNSt6vectorIPKdSaIS1_EEC2EmRKS2_(ptr noundef nonnull align 8 dereferenceable(24) %99, i64 noundef %1132, ptr noundef nonnull align 1 dereferenceable(1) %100)
          to label %1133 unwind label %1145

1133:                                             ; preds = %1130
  call void @_ZNSt15__new_allocatorIPKdED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %100) #11
  call void @llvm.lifetime.end.p0(i64 1, ptr %100) #11
  call void @llvm.lifetime.start.p0(i64 24, ptr %101) #11
  %1134 = load i32, ptr %24, align 4, !tbaa !5
  %1135 = sext i32 %1134 to i64
  call void @llvm.lifetime.start.p0(i64 1, ptr %102) #11
  call void @_ZNSaIPdEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %102) #11
  invoke void @_ZNSt6vectorIPdSaIS0_EEC2EmRKS1_(ptr noundef nonnull align 8 dereferenceable(24) %101, i64 noundef %1135, ptr noundef nonnull align 1 dereferenceable(1) %102)
          to label %1136 unwind label %1149

1136:                                             ; preds = %1133
  call void @_ZNSt15__new_allocatorIPdED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %102) #11
  call void @llvm.lifetime.end.p0(i64 1, ptr %102) #11
  call void @llvm.lifetime.start.p0(i64 8, ptr %103) #11
  %1137 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIPKdSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %97, i64 noundef 0) #11
  store ptr %1137, ptr %103, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %104) #11
  %1138 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIPKdSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %99, i64 noundef 0) #11
  store ptr %1138, ptr %104, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %105) #11
  %1139 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIPdSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %101, i64 noundef 0) #11
  store ptr %1139, ptr %105, align 8, !tbaa !9
  %1140 = load i32, ptr %7, align 4, !tbaa !5
  switch i32 %1140, label %2772 [
    i32 0, label %1153
    i32 1, label %1289
    i32 2, label %1509
    i32 3, label %1635
    i32 4, label %1851
    i32 5, label %1977
    i32 6, label %2193
    i32 7, label %2325
    i32 8, label %2519
    i32 9, label %2613
  ]

1141:                                             ; preds = %1127
  %1142 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %1143 = extractvalue { ptr, i32 } %1142, 0
  store ptr %1143, ptr %33, align 8
  %1144 = extractvalue { ptr, i32 } %1142, 1
  store i32 %1144, ptr %34, align 4
  call void @_ZNSt15__new_allocatorIPKdED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %98) #11
  call void @llvm.lifetime.end.p0(i64 1, ptr %98) #11
  br label %2785

1145:                                             ; preds = %1130
  %1146 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %1147 = extractvalue { ptr, i32 } %1146, 0
  store ptr %1147, ptr %33, align 8
  %1148 = extractvalue { ptr, i32 } %1146, 1
  store i32 %1148, ptr %34, align 4
  call void @_ZNSt15__new_allocatorIPKdED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %100) #11
  call void @llvm.lifetime.end.p0(i64 1, ptr %100) #11
  br label %2784

1149:                                             ; preds = %1133
  %1150 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %1151 = extractvalue { ptr, i32 } %1150, 0
  store ptr %1151, ptr %33, align 8
  %1152 = extractvalue { ptr, i32 } %1150, 1
  store i32 %1152, ptr %34, align 4
  call void @_ZNSt15__new_allocatorIPdED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %102) #11
  call void @llvm.lifetime.end.p0(i64 1, ptr %102) #11
  br label %2783

1153:                                             ; preds = %1136
  %1154 = load ptr, ptr @stdout, align 8, !tbaa !9
  %1155 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %1154, ptr noundef @.str.4) #11
  call void @llvm.lifetime.start.p0(i64 8, ptr %106) #11
  %1156 = invoke i64 @libxsmm_timer_tick()
          to label %1157 unwind label %1163

1157:                                             ; preds = %1153
  store i64 %1156, ptr %106, align 8, !tbaa !43
  call void @llvm.lifetime.start.p0(i64 4, ptr %107) #11
  store i32 0, ptr %107, align 4, !tbaa !5
  br label %1158

1158:                                             ; preds = %1221, %1157
  %1159 = load i32, ptr %107, align 4, !tbaa !5
  %1160 = load i32, ptr %12, align 4, !tbaa !5
  %1161 = icmp slt i32 %1159, %1160
  br i1 %1161, label %1167, label %1162

1162:                                             ; preds = %1158
  store i32 74, ptr %108, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %107) #11
  br label %1224

1163:                                             ; preds = %1153
  %1164 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %1165 = extractvalue { ptr, i32 } %1164, 0
  store ptr %1165, ptr %33, align 8
  %1166 = extractvalue { ptr, i32 } %1164, 1
  store i32 %1166, ptr %34, align 4
  br label %1298

1167:                                             ; preds = %1158
  call void @llvm.lifetime.start.p0(i64 4, ptr %109) #11
  store i32 0, ptr %109, align 4, !tbaa !5
  br label %1168

1168:                                             ; preds = %1203, %1167
  %1169 = load i32, ptr %109, align 4, !tbaa !5
  %1170 = load i32, ptr %24, align 4, !tbaa !5
  %1171 = icmp slt i32 %1169, %1170
  br i1 %1171, label %1173, label %1172

1172:                                             ; preds = %1168
  store i32 77, ptr %108, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %109) #11
  br label %1220

1173:                                             ; preds = %1168
  call void @llvm.lifetime.start.p0(i64 8, ptr %110) #11
  %1174 = load ptr, ptr %35, align 8, !tbaa !9
  %1175 = load i32, ptr %20, align 4, !tbaa !5
  %1176 = sext i32 %1175 to i64
  %1177 = load i32, ptr %109, align 4, !tbaa !5
  %1178 = invoke noundef i32 @_ZZ4mainENK4raii7shuffleEi(ptr noundef nonnull align 8 dereferenceable(48) %32, i32 noundef %1177)
          to label %1179 unwind label %1206

1179:                                             ; preds = %1173
  %1180 = sext i32 %1178 to i64
  %1181 = mul i64 %1176, %1180
  %1182 = getelementptr inbounds double, ptr %1174, i64 %1181
  store ptr %1182, ptr %110, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %111) #11
  %1183 = load ptr, ptr %36, align 8, !tbaa !9
  %1184 = load i32, ptr %21, align 4, !tbaa !5
  %1185 = sext i32 %1184 to i64
  %1186 = load i32, ptr %109, align 4, !tbaa !5
  %1187 = invoke noundef i32 @_ZZ4mainENK4raii7shuffleEi(ptr noundef nonnull align 8 dereferenceable(48) %32, i32 noundef %1186)
          to label %1188 unwind label %1210

1188:                                             ; preds = %1179
  %1189 = sext i32 %1187 to i64
  %1190 = mul i64 %1185, %1189
  %1191 = getelementptr inbounds double, ptr %1183, i64 %1190
  store ptr %1191, ptr %111, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %112) #11
  %1192 = load ptr, ptr %37, align 8, !tbaa !9
  %1193 = load i32, ptr %22, align 4, !tbaa !5
  %1194 = sext i32 %1193 to i64
  %1195 = load i32, ptr %109, align 4, !tbaa !5
  %1196 = sext i32 %1195 to i64
  %1197 = mul i64 %1194, %1196
  %1198 = getelementptr inbounds double, ptr %1192, i64 %1197
  store ptr %1198, ptr %112, align 8, !tbaa !9
  %1199 = load ptr, ptr %110, align 8, !tbaa !9
  %1200 = load ptr, ptr %111, align 8, !tbaa !9
  %1201 = load ptr, ptr %112, align 8, !tbaa !9
  invoke void @_ZNK18libxsmm_mmfunctionIddLin1EEclEPKdS2_Pd(ptr noundef nonnull align 8 dereferenceable(8) %96, ptr noundef %1199, ptr noundef %1200, ptr noundef %1201)
          to label %1202 unwind label %1214

1202:                                             ; preds = %1188
  call void @llvm.lifetime.end.p0(i64 8, ptr %112) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %111) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %110) #11
  br label %1203

1203:                                             ; preds = %1202
  %1204 = load i32, ptr %109, align 4, !tbaa !5
  %1205 = add nsw i32 %1204, 1
  store i32 %1205, ptr %109, align 4, !tbaa !5
  br label %1168, !llvm.loop !45

1206:                                             ; preds = %1173
  %1207 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %1208 = extractvalue { ptr, i32 } %1207, 0
  store ptr %1208, ptr %33, align 8
  %1209 = extractvalue { ptr, i32 } %1207, 1
  store i32 %1209, ptr %34, align 4
  br label %1219

1210:                                             ; preds = %1179
  %1211 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %1212 = extractvalue { ptr, i32 } %1211, 0
  store ptr %1212, ptr %33, align 8
  %1213 = extractvalue { ptr, i32 } %1211, 1
  store i32 %1213, ptr %34, align 4
  br label %1218

1214:                                             ; preds = %1188
  %1215 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %1216 = extractvalue { ptr, i32 } %1215, 0
  store ptr %1216, ptr %33, align 8
  %1217 = extractvalue { ptr, i32 } %1215, 1
  store i32 %1217, ptr %34, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %112) #11
  br label %1218

1218:                                             ; preds = %1214, %1210
  call void @llvm.lifetime.end.p0(i64 8, ptr %111) #11
  br label %1219

1219:                                             ; preds = %1218, %1206
  call void @llvm.lifetime.end.p0(i64 8, ptr %110) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %109) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %107) #11
  br label %1298

1220:                                             ; preds = %1172
  br label %1221

1221:                                             ; preds = %1220
  %1222 = load i32, ptr %107, align 4, !tbaa !5
  %1223 = add nsw i32 %1222, 1
  store i32 %1223, ptr %107, align 4, !tbaa !5
  br label %1158, !llvm.loop !46

1224:                                             ; preds = %1162
  call void @llvm.lifetime.start.p0(i64 8, ptr %113) #11
  %1225 = load i64, ptr %106, align 8, !tbaa !43
  %1226 = invoke i64 @libxsmm_timer_tick()
          to label %1227 unwind label %1276

1227:                                             ; preds = %1224
  %1228 = invoke noundef i64 @_Z21libxsmm_timer_ncyclesyy(i64 noundef %1225, i64 noundef %1226)
          to label %1229 unwind label %1276

1229:                                             ; preds = %1227
  store i64 %1228, ptr %113, align 8, !tbaa !43
  call void @llvm.lifetime.start.p0(i64 8, ptr %114) #11
  %1230 = load i64, ptr %113, align 8, !tbaa !43
  %1231 = invoke double @libxsmm_timer_duration(i64 noundef 0, i64 noundef %1230)
          to label %1232 unwind label %1280

1232:                                             ; preds = %1229
  %1233 = load i32, ptr %12, align 4, !tbaa !5
  %1234 = sitofp i32 %1233 to double
  %1235 = fdiv double %1231, %1234
  store double %1235, ptr %114, align 8, !tbaa !12
  %1236 = load double, ptr %114, align 8, !tbaa !12
  %1237 = fcmp olt double 0.000000e+00, %1236
  br i1 %1237, label %1238, label %1284

1238:                                             ; preds = %1232
  %1239 = load i64, ptr %113, align 8, !tbaa !43
  %1240 = icmp ne i64 0, %1239
  br i1 %1240, label %1241, label %1284

1241:                                             ; preds = %1238
  %1242 = load ptr, ptr @stdout, align 8, !tbaa !9
  %1243 = load i32, ptr %9, align 4, !tbaa !5
  %1244 = sitofp i32 %1243 to double
  %1245 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %1244, double -1.000000e+00)
  %1246 = load i32, ptr %24, align 4, !tbaa !5
  %1247 = sitofp i32 %1246 to double
  %1248 = load i32, ptr %8, align 4, !tbaa !5
  %1249 = sitofp i32 %1248 to double
  %1250 = fmul double %1247, %1249
  %1251 = load i32, ptr %10, align 4, !tbaa !5
  %1252 = sitofp i32 %1251 to double
  %1253 = fmul double %1250, %1252
  %1254 = fmul double %1245, %1253
  %1255 = load i64, ptr %113, align 8, !tbaa !43
  %1256 = uitofp i64 %1255 to double
  %1257 = fdiv double %1254, %1256
  %1258 = getelementptr inbounds [6 x i8], ptr %28, i64 0, i64 0
  %1259 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %1242, ptr noundef @.str.5, double noundef %1257, ptr noundef %1258) #11
  %1260 = load ptr, ptr @stdout, align 8, !tbaa !9
  %1261 = load double, ptr %27, align 8, !tbaa !12
  %1262 = load double, ptr %114, align 8, !tbaa !12
  %1263 = fdiv double %1261, %1262
  %1264 = getelementptr inbounds [6 x i8], ptr %28, i64 0, i64 0
  %1265 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %1260, ptr noundef @.str.6, double noundef %1263, ptr noundef %1264) #11
  %1266 = load ptr, ptr @stdout, align 8, !tbaa !9
  %1267 = load i32, ptr %24, align 4, !tbaa !5
  %1268 = sext i32 %1267 to i64
  %1269 = load i64, ptr %26, align 8, !tbaa !14
  %1270 = mul i64 %1268, %1269
  %1271 = uitofp i64 %1270 to double
  %1272 = load double, ptr %114, align 8, !tbaa !12
  %1273 = fmul double %1272, 0x41D0000000000000
  %1274 = fdiv double %1271, %1273
  %1275 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %1266, ptr noundef @.str.7, double noundef %1274) #11
  br label %1284

1276:                                             ; preds = %1227, %1224
  %1277 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %1278 = extractvalue { ptr, i32 } %1277, 0
  store ptr %1278, ptr %33, align 8
  %1279 = extractvalue { ptr, i32 } %1277, 1
  store i32 %1279, ptr %34, align 4
  br label %1297

1280:                                             ; preds = %1229
  %1281 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %1282 = extractvalue { ptr, i32 } %1281, 0
  store ptr %1282, ptr %33, align 8
  %1283 = extractvalue { ptr, i32 } %1281, 1
  store i32 %1283, ptr %34, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %114) #11
  br label %1297

1284:                                             ; preds = %1241, %1238, %1232
  %1285 = load ptr, ptr @stdout, align 8, !tbaa !9
  %1286 = load double, ptr %114, align 8, !tbaa !12
  %1287 = fmul double 1.000000e+03, %1286
  %1288 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %1285, ptr noundef @.str.8, double noundef %1287) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %114) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %113) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %106) #11
  br label %1289

1289:                                             ; preds = %1284, %1136
  %1290 = load ptr, ptr @stdout, align 8, !tbaa !9
  %1291 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %1290, ptr noundef @.str.9) #11
  call void @llvm.lifetime.start.p0(i64 4, ptr %115) #11
  store i32 0, ptr %115, align 4, !tbaa !5
  br label %1292

1292:                                             ; preds = %1337, %1289
  %1293 = load i32, ptr %115, align 4, !tbaa !5
  %1294 = load i32, ptr %24, align 4, !tbaa !5
  %1295 = icmp slt i32 %1293, %1294
  br i1 %1295, label %1299, label %1296

1296:                                             ; preds = %1292
  store i32 80, ptr %108, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %115) #11
  br label %1344

1297:                                             ; preds = %1280, %1276
  call void @llvm.lifetime.end.p0(i64 8, ptr %113) #11
  br label %1298

1298:                                             ; preds = %1297, %1219, %1163
  call void @llvm.lifetime.end.p0(i64 8, ptr %106) #11
  br label %2782

1299:                                             ; preds = %1292
  %1300 = load ptr, ptr %35, align 8, !tbaa !9
  %1301 = load i32, ptr %20, align 4, !tbaa !5
  %1302 = sext i32 %1301 to i64
  %1303 = load i32, ptr %115, align 4, !tbaa !5
  %1304 = invoke noundef i32 @_ZZ4mainENK4raii7shuffleEi(ptr noundef nonnull align 8 dereferenceable(48) %32, i32 noundef %1303)
          to label %1305 unwind label %1340

1305:                                             ; preds = %1299
  %1306 = sext i32 %1304 to i64
  %1307 = mul i64 %1302, %1306
  %1308 = getelementptr inbounds double, ptr %1300, i64 %1307
  %1309 = load ptr, ptr %103, align 8, !tbaa !9
  %1310 = load i32, ptr %115, align 4, !tbaa !5
  %1311 = sext i32 %1310 to i64
  %1312 = getelementptr inbounds ptr, ptr %1309, i64 %1311
  store ptr %1308, ptr %1312, align 8, !tbaa !9
  %1313 = load ptr, ptr %36, align 8, !tbaa !9
  %1314 = load i32, ptr %21, align 4, !tbaa !5
  %1315 = sext i32 %1314 to i64
  %1316 = load i32, ptr %115, align 4, !tbaa !5
  %1317 = invoke noundef i32 @_ZZ4mainENK4raii7shuffleEi(ptr noundef nonnull align 8 dereferenceable(48) %32, i32 noundef %1316)
          to label %1318 unwind label %1340

1318:                                             ; preds = %1305
  %1319 = sext i32 %1317 to i64
  %1320 = mul i64 %1315, %1319
  %1321 = getelementptr inbounds double, ptr %1313, i64 %1320
  %1322 = load ptr, ptr %104, align 8, !tbaa !9
  %1323 = load i32, ptr %115, align 4, !tbaa !5
  %1324 = sext i32 %1323 to i64
  %1325 = getelementptr inbounds ptr, ptr %1322, i64 %1324
  store ptr %1321, ptr %1325, align 8, !tbaa !9
  %1326 = load ptr, ptr %38, align 8, !tbaa !9
  %1327 = load i32, ptr %22, align 4, !tbaa !5
  %1328 = sext i32 %1327 to i64
  %1329 = load i32, ptr %115, align 4, !tbaa !5
  %1330 = sext i32 %1329 to i64
  %1331 = mul i64 %1328, %1330
  %1332 = getelementptr inbounds double, ptr %1326, i64 %1331
  %1333 = load ptr, ptr %105, align 8, !tbaa !9
  %1334 = load i32, ptr %115, align 4, !tbaa !5
  %1335 = sext i32 %1334 to i64
  %1336 = getelementptr inbounds ptr, ptr %1333, i64 %1335
  store ptr %1332, ptr %1336, align 8, !tbaa !9
  br label %1337

1337:                                             ; preds = %1318
  %1338 = load i32, ptr %115, align 4, !tbaa !5
  %1339 = add nsw i32 %1338, 1
  store i32 %1339, ptr %115, align 4, !tbaa !5
  br label %1292, !llvm.loop !47

1340:                                             ; preds = %1305, %1299
  %1341 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %1342 = extractvalue { ptr, i32 } %1341, 0
  store ptr %1342, ptr %33, align 8
  %1343 = extractvalue { ptr, i32 } %1341, 1
  store i32 %1343, ptr %34, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %115) #11
  br label %2782

1344:                                             ; preds = %1296
  call void @llvm.lifetime.start.p0(i64 4, ptr %116) #11
  store i32 8, ptr %116, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %117) #11
  %1345 = invoke i64 @libxsmm_timer_tick()
          to label %1346 unwind label %1352

1346:                                             ; preds = %1344
  store i64 %1345, ptr %117, align 8, !tbaa !43
  call void @llvm.lifetime.start.p0(i64 4, ptr %118) #11
  store i32 0, ptr %118, align 4, !tbaa !5
  br label %1347

1347:                                             ; preds = %1368, %1346
  %1348 = load i32, ptr %118, align 4, !tbaa !5
  %1349 = load i32, ptr %12, align 4, !tbaa !5
  %1350 = icmp slt i32 %1348, %1349
  br i1 %1350, label %1356, label %1351

1351:                                             ; preds = %1347
  store i32 83, ptr %108, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %118) #11
  br label %1375

1352:                                             ; preds = %1344
  %1353 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %1354 = extractvalue { ptr, i32 } %1353, 0
  store ptr %1354, ptr %33, align 8
  %1355 = extractvalue { ptr, i32 } %1353, 1
  store i32 %1355, ptr %34, align 4
  br label %1508

1356:                                             ; preds = %1347
  %1357 = load i32, ptr %8, align 4, !tbaa !5
  %1358 = load i32, ptr %10, align 4, !tbaa !5
  %1359 = load i32, ptr %9, align 4, !tbaa !5
  %1360 = load ptr, ptr %103, align 8, !tbaa !9
  %1361 = getelementptr inbounds ptr, ptr %1360, i64 0
  %1362 = load ptr, ptr %104, align 8, !tbaa !9
  %1363 = getelementptr inbounds ptr, ptr %1362, i64 0
  %1364 = load ptr, ptr %105, align 8, !tbaa !9
  %1365 = getelementptr inbounds ptr, ptr %1364, i64 0
  %1366 = load i32, ptr %24, align 4, !tbaa !5
  invoke void @libxsmm_gemm_batch(i32 noundef 0, i32 noundef 0, ptr noundef %16, ptr noundef %17, i32 noundef %1357, i32 noundef %1358, i32 noundef %1359, ptr noundef %18, ptr noundef %1361, ptr noundef %13, ptr noundef %116, ptr noundef %1363, ptr noundef %14, ptr noundef %116, ptr noundef %19, ptr noundef %1365, ptr noundef %15, ptr noundef %116, i32 noundef 0, i32 noundef 0, i32 noundef %1366, i32 noundef 0)
          to label %1367 unwind label %1371

1367:                                             ; preds = %1356
  br label %1368

1368:                                             ; preds = %1367
  %1369 = load i32, ptr %118, align 4, !tbaa !5
  %1370 = add nsw i32 %1369, 1
  store i32 %1370, ptr %118, align 4, !tbaa !5
  br label %1347, !llvm.loop !48

1371:                                             ; preds = %1356
  %1372 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %1373 = extractvalue { ptr, i32 } %1372, 0
  store ptr %1373, ptr %33, align 8
  %1374 = extractvalue { ptr, i32 } %1372, 1
  store i32 %1374, ptr %34, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %118) #11
  br label %1508

1375:                                             ; preds = %1351
  call void @llvm.lifetime.start.p0(i64 8, ptr %119) #11
  %1376 = load i64, ptr %117, align 8, !tbaa !43
  %1377 = invoke i64 @libxsmm_timer_tick()
          to label %1378 unwind label %1427

1378:                                             ; preds = %1375
  %1379 = invoke noundef i64 @_Z21libxsmm_timer_ncyclesyy(i64 noundef %1376, i64 noundef %1377)
          to label %1380 unwind label %1427

1380:                                             ; preds = %1378
  store i64 %1379, ptr %119, align 8, !tbaa !43
  call void @llvm.lifetime.start.p0(i64 8, ptr %120) #11
  %1381 = load i64, ptr %119, align 8, !tbaa !43
  %1382 = invoke double @libxsmm_timer_duration(i64 noundef 0, i64 noundef %1381)
          to label %1383 unwind label %1431

1383:                                             ; preds = %1380
  %1384 = load i32, ptr %12, align 4, !tbaa !5
  %1385 = sitofp i32 %1384 to double
  %1386 = fdiv double %1382, %1385
  store double %1386, ptr %120, align 8, !tbaa !12
  %1387 = load double, ptr %120, align 8, !tbaa !12
  %1388 = fcmp olt double 0.000000e+00, %1387
  br i1 %1388, label %1389, label %1435

1389:                                             ; preds = %1383
  %1390 = load i64, ptr %119, align 8, !tbaa !43
  %1391 = icmp ne i64 0, %1390
  br i1 %1391, label %1392, label %1435

1392:                                             ; preds = %1389
  %1393 = load ptr, ptr @stdout, align 8, !tbaa !9
  %1394 = load i32, ptr %9, align 4, !tbaa !5
  %1395 = sitofp i32 %1394 to double
  %1396 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %1395, double -1.000000e+00)
  %1397 = load i32, ptr %24, align 4, !tbaa !5
  %1398 = sitofp i32 %1397 to double
  %1399 = load i32, ptr %8, align 4, !tbaa !5
  %1400 = sitofp i32 %1399 to double
  %1401 = fmul double %1398, %1400
  %1402 = load i32, ptr %10, align 4, !tbaa !5
  %1403 = sitofp i32 %1402 to double
  %1404 = fmul double %1401, %1403
  %1405 = fmul double %1396, %1404
  %1406 = load i64, ptr %119, align 8, !tbaa !43
  %1407 = uitofp i64 %1406 to double
  %1408 = fdiv double %1405, %1407
  %1409 = getelementptr inbounds [6 x i8], ptr %28, i64 0, i64 0
  %1410 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %1393, ptr noundef @.str.5, double noundef %1408, ptr noundef %1409) #11
  %1411 = load ptr, ptr @stdout, align 8, !tbaa !9
  %1412 = load double, ptr %27, align 8, !tbaa !12
  %1413 = load double, ptr %120, align 8, !tbaa !12
  %1414 = fdiv double %1412, %1413
  %1415 = getelementptr inbounds [6 x i8], ptr %28, i64 0, i64 0
  %1416 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %1411, ptr noundef @.str.6, double noundef %1414, ptr noundef %1415) #11
  %1417 = load ptr, ptr @stdout, align 8, !tbaa !9
  %1418 = load i32, ptr %24, align 4, !tbaa !5
  %1419 = sext i32 %1418 to i64
  %1420 = load i64, ptr %26, align 8, !tbaa !14
  %1421 = mul i64 %1419, %1420
  %1422 = uitofp i64 %1421 to double
  %1423 = load double, ptr %120, align 8, !tbaa !12
  %1424 = fmul double %1423, 0x41D0000000000000
  %1425 = fdiv double %1422, %1424
  %1426 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %1417, ptr noundef @.str.7, double noundef %1425) #11
  br label %1435

1427:                                             ; preds = %1378, %1375
  %1428 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %1429 = extractvalue { ptr, i32 } %1428, 0
  store ptr %1429, ptr %33, align 8
  %1430 = extractvalue { ptr, i32 } %1428, 1
  store i32 %1430, ptr %34, align 4
  br label %1507

1431:                                             ; preds = %1380
  %1432 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %1433 = extractvalue { ptr, i32 } %1432, 0
  store ptr %1433, ptr %33, align 8
  %1434 = extractvalue { ptr, i32 } %1432, 1
  store i32 %1434, ptr %34, align 4
  br label %1506

1435:                                             ; preds = %1392, %1389, %1383
  %1436 = load ptr, ptr @stdout, align 8, !tbaa !9
  %1437 = load double, ptr %120, align 8, !tbaa !12
  %1438 = fmul double 1.000000e+03, %1437
  %1439 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %1436, ptr noundef @.str.8, double noundef %1438) #11
  %1440 = load i32, ptr %7, align 4, !tbaa !5
  %1441 = and i32 %1440, 1
  %1442 = icmp eq i32 0, %1441
  br i1 %1442, label %1443, label %1505

1443:                                             ; preds = %1435
  %1444 = load i32, ptr %31, align 4, !tbaa !5
  %1445 = icmp ne i32 0, %1444
  br i1 %1445, label %1446, label %1505

1446:                                             ; preds = %1443
  call void @llvm.lifetime.start.p0(i64 192, ptr %121) #11
  invoke void @libxsmm_matdiff_clear(ptr noundef %121)
          to label %1447 unwind label %1453

1447:                                             ; preds = %1446
  call void @llvm.lifetime.start.p0(i64 4, ptr %122) #11
  store i32 0, ptr %122, align 4, !tbaa !5
  br label %1448

1448:                                             ; preds = %1485, %1447
  %1449 = load i32, ptr %122, align 4, !tbaa !5
  %1450 = load i32, ptr %24, align 4, !tbaa !5
  %1451 = icmp slt i32 %1449, %1450
  br i1 %1451, label %1457, label %1452

1452:                                             ; preds = %1448
  store i32 86, ptr %108, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %122) #11
  br label %1488

1453:                                             ; preds = %1446
  %1454 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %1455 = extractvalue { ptr, i32 } %1454, 0
  store ptr %1455, ptr %33, align 8
  %1456 = extractvalue { ptr, i32 } %1454, 1
  store i32 %1456, ptr %34, align 4
  br label %1504

1457:                                             ; preds = %1448
  call void @llvm.lifetime.start.p0(i64 8, ptr %123) #11
  %1458 = load ptr, ptr %37, align 8, !tbaa !9
  %1459 = load i32, ptr %22, align 4, !tbaa !5
  %1460 = sext i32 %1459 to i64
  %1461 = load i32, ptr %122, align 4, !tbaa !5
  %1462 = sext i32 %1461 to i64
  %1463 = mul i64 %1460, %1462
  %1464 = getelementptr inbounds double, ptr %1458, i64 %1463
  store ptr %1464, ptr %123, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %124) #11
  %1465 = load ptr, ptr %105, align 8, !tbaa !9
  %1466 = load i32, ptr %122, align 4, !tbaa !5
  %1467 = sext i32 %1466 to i64
  %1468 = getelementptr inbounds ptr, ptr %1465, i64 %1467
  %1469 = load ptr, ptr %1468, align 8, !tbaa !9
  store ptr %1469, ptr %124, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 192, ptr %125) #11
  %1470 = load i32, ptr %8, align 4, !tbaa !5
  %1471 = load i32, ptr %10, align 4, !tbaa !5
  %1472 = load ptr, ptr %123, align 8, !tbaa !9
  %1473 = load ptr, ptr %124, align 8, !tbaa !9
  %1474 = invoke i32 @libxsmm_matdiff(ptr noundef %125, i32 noundef 0, i32 noundef %1470, i32 noundef %1471, ptr noundef %1472, ptr noundef %1473, ptr noundef %15, ptr noundef %15)
          to label %1475 unwind label %1480

1475:                                             ; preds = %1457
  store i32 %1474, ptr %6, align 4, !tbaa !5
  %1476 = load i32, ptr %6, align 4, !tbaa !5
  %1477 = icmp eq i32 0, %1476
  br i1 %1477, label %1478, label %1484

1478:                                             ; preds = %1475
  invoke void @libxsmm_matdiff_reduce(ptr noundef %121, ptr noundef %125)
          to label %1479 unwind label %1480

1479:                                             ; preds = %1478
  br label %1484

1480:                                             ; preds = %1478, %1457
  %1481 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %1482 = extractvalue { ptr, i32 } %1481, 0
  store ptr %1482, ptr %33, align 8
  %1483 = extractvalue { ptr, i32 } %1481, 1
  store i32 %1483, ptr %34, align 4
  call void @llvm.lifetime.end.p0(i64 192, ptr %125) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %124) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %123) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %122) #11
  br label %1504

1484:                                             ; preds = %1479, %1475
  call void @llvm.lifetime.end.p0(i64 192, ptr %125) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %124) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %123) #11
  br label %1485

1485:                                             ; preds = %1484
  %1486 = load i32, ptr %122, align 4, !tbaa !5
  %1487 = add nsw i32 %1486, 1
  store i32 %1487, ptr %122, align 4, !tbaa !5
  br label %1448, !llvm.loop !49

1488:                                             ; preds = %1452
  %1489 = load ptr, ptr @stdout, align 8, !tbaa !9
  %1490 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %121, i32 0, i32 7
  %1491 = load double, ptr %1490, align 8, !tbaa !50
  %1492 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %121, i32 0, i32 5
  %1493 = load double, ptr %1492, align 8, !tbaa !52
  %1494 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %1489, ptr noundef @.str.10, double noundef %1491, double noundef %1493) #11
  %1495 = load i32, ptr %31, align 4, !tbaa !5
  %1496 = sitofp i32 %1495 to double
  %1497 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %121, i32 0, i32 8
  %1498 = load double, ptr %1497, align 8, !tbaa !53
  %1499 = fcmp olt double %1496, %1498
  br i1 %1499, label %1500, label %1503

1500:                                             ; preds = %1488
  %1501 = load ptr, ptr @stderr, align 8, !tbaa !9
  %1502 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %1501, ptr noundef @.str.11) #11
  store i32 1, ptr %6, align 4, !tbaa !5
  br label %1503

1503:                                             ; preds = %1500, %1488
  call void @llvm.lifetime.end.p0(i64 192, ptr %121) #11
  br label %1505

1504:                                             ; preds = %1480, %1453
  call void @llvm.lifetime.end.p0(i64 192, ptr %121) #11
  br label %1506

1505:                                             ; preds = %1503, %1443, %1435
  call void @llvm.lifetime.end.p0(i64 8, ptr %120) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %119) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %117) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %116) #11
  br label %2778

1506:                                             ; preds = %1504, %1431
  call void @llvm.lifetime.end.p0(i64 8, ptr %120) #11
  br label %1507

1507:                                             ; preds = %1506, %1427
  call void @llvm.lifetime.end.p0(i64 8, ptr %119) #11
  br label %1508

1508:                                             ; preds = %1507, %1371, %1352
  call void @llvm.lifetime.end.p0(i64 8, ptr %117) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %116) #11
  br label %2782

1509:                                             ; preds = %1136
  %1510 = load ptr, ptr @stdout, align 8, !tbaa !9
  %1511 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %1510, ptr noundef @.str.12) #11
  call void @llvm.lifetime.start.p0(i64 8, ptr %126) #11
  %1512 = invoke i64 @libxsmm_timer_tick()
          to label %1513 unwind label %1519

1513:                                             ; preds = %1509
  store i64 %1512, ptr %126, align 8, !tbaa !43
  call void @llvm.lifetime.start.p0(i64 4, ptr %127) #11
  store i32 0, ptr %127, align 4, !tbaa !5
  br label %1514

1514:                                             ; preds = %1563, %1513
  %1515 = load i32, ptr %127, align 4, !tbaa !5
  %1516 = load i32, ptr %12, align 4, !tbaa !5
  %1517 = icmp slt i32 %1515, %1516
  br i1 %1517, label %1523, label %1518

1518:                                             ; preds = %1514
  store i32 89, ptr %108, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %127) #11
  br label %1566

1519:                                             ; preds = %1509
  %1520 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %1521 = extractvalue { ptr, i32 } %1520, 0
  store ptr %1521, ptr %33, align 8
  %1522 = extractvalue { ptr, i32 } %1520, 1
  store i32 %1522, ptr %34, align 4
  br label %1644

1523:                                             ; preds = %1514
  call void @llvm.lifetime.start.p0(i64 4, ptr %128) #11
  store i32 0, ptr %128, align 4, !tbaa !5
  br label %1524

1524:                                             ; preds = %1550, %1523
  %1525 = load i32, ptr %128, align 4, !tbaa !5
  %1526 = load i32, ptr %24, align 4, !tbaa !5
  %1527 = icmp slt i32 %1525, %1526
  br i1 %1527, label %1529, label %1528

1528:                                             ; preds = %1524
  store i32 92, ptr %108, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %128) #11
  br label %1562

1529:                                             ; preds = %1524
  call void @llvm.lifetime.start.p0(i64 8, ptr %129) #11
  %1530 = load ptr, ptr %35, align 8, !tbaa !9
  %1531 = load i32, ptr %20, align 4, !tbaa !5
  %1532 = sext i32 %1531 to i64
  %1533 = load i32, ptr %128, align 4, !tbaa !5
  %1534 = invoke noundef i32 @_ZZ4mainENK4raii7shuffleEi(ptr noundef nonnull align 8 dereferenceable(48) %32, i32 noundef %1533)
          to label %1535 unwind label %1553

1535:                                             ; preds = %1529
  %1536 = sext i32 %1534 to i64
  %1537 = mul i64 %1532, %1536
  %1538 = getelementptr inbounds double, ptr %1530, i64 %1537
  store ptr %1538, ptr %129, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %130) #11
  %1539 = load ptr, ptr %37, align 8, !tbaa !9
  %1540 = load i32, ptr %22, align 4, !tbaa !5
  %1541 = sext i32 %1540 to i64
  %1542 = load i32, ptr %128, align 4, !tbaa !5
  %1543 = sext i32 %1542 to i64
  %1544 = mul i64 %1541, %1543
  %1545 = getelementptr inbounds double, ptr %1539, i64 %1544
  store ptr %1545, ptr %130, align 8, !tbaa !9
  %1546 = load ptr, ptr %129, align 8, !tbaa !9
  %1547 = load ptr, ptr %36, align 8, !tbaa !9
  %1548 = load ptr, ptr %130, align 8, !tbaa !9
  invoke void @_ZNK18libxsmm_mmfunctionIddLin1EEclEPKdS2_Pd(ptr noundef nonnull align 8 dereferenceable(8) %96, ptr noundef %1546, ptr noundef %1547, ptr noundef %1548)
          to label %1549 unwind label %1557

1549:                                             ; preds = %1535
  call void @llvm.lifetime.end.p0(i64 8, ptr %130) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %129) #11
  br label %1550

1550:                                             ; preds = %1549
  %1551 = load i32, ptr %128, align 4, !tbaa !5
  %1552 = add nsw i32 %1551, 1
  store i32 %1552, ptr %128, align 4, !tbaa !5
  br label %1524, !llvm.loop !54

1553:                                             ; preds = %1529
  %1554 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %1555 = extractvalue { ptr, i32 } %1554, 0
  store ptr %1555, ptr %33, align 8
  %1556 = extractvalue { ptr, i32 } %1554, 1
  store i32 %1556, ptr %34, align 4
  br label %1561

1557:                                             ; preds = %1535
  %1558 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %1559 = extractvalue { ptr, i32 } %1558, 0
  store ptr %1559, ptr %33, align 8
  %1560 = extractvalue { ptr, i32 } %1558, 1
  store i32 %1560, ptr %34, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %130) #11
  br label %1561

1561:                                             ; preds = %1557, %1553
  call void @llvm.lifetime.end.p0(i64 8, ptr %129) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %128) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %127) #11
  br label %1644

1562:                                             ; preds = %1528
  br label %1563

1563:                                             ; preds = %1562
  %1564 = load i32, ptr %127, align 4, !tbaa !5
  %1565 = add nsw i32 %1564, 1
  store i32 %1565, ptr %127, align 4, !tbaa !5
  br label %1514, !llvm.loop !55

1566:                                             ; preds = %1518
  call void @llvm.lifetime.start.p0(i64 8, ptr %131) #11
  %1567 = load i64, ptr %126, align 8, !tbaa !43
  %1568 = invoke i64 @libxsmm_timer_tick()
          to label %1569 unwind label %1622

1569:                                             ; preds = %1566
  %1570 = invoke noundef i64 @_Z21libxsmm_timer_ncyclesyy(i64 noundef %1567, i64 noundef %1568)
          to label %1571 unwind label %1622

1571:                                             ; preds = %1569
  store i64 %1570, ptr %131, align 8, !tbaa !43
  call void @llvm.lifetime.start.p0(i64 8, ptr %132) #11
  %1572 = load i64, ptr %131, align 8, !tbaa !43
  %1573 = invoke double @libxsmm_timer_duration(i64 noundef 0, i64 noundef %1572)
          to label %1574 unwind label %1626

1574:                                             ; preds = %1571
  %1575 = load i32, ptr %12, align 4, !tbaa !5
  %1576 = sitofp i32 %1575 to double
  %1577 = fdiv double %1573, %1576
  store double %1577, ptr %132, align 8, !tbaa !12
  %1578 = load double, ptr %132, align 8, !tbaa !12
  %1579 = fcmp olt double 0.000000e+00, %1578
  br i1 %1579, label %1580, label %1630

1580:                                             ; preds = %1574
  %1581 = load i64, ptr %131, align 8, !tbaa !43
  %1582 = icmp ne i64 0, %1581
  br i1 %1582, label %1583, label %1630

1583:                                             ; preds = %1580
  %1584 = load ptr, ptr @stdout, align 8, !tbaa !9
  %1585 = load i32, ptr %9, align 4, !tbaa !5
  %1586 = sitofp i32 %1585 to double
  %1587 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %1586, double -1.000000e+00)
  %1588 = load i32, ptr %24, align 4, !tbaa !5
  %1589 = sitofp i32 %1588 to double
  %1590 = load i32, ptr %8, align 4, !tbaa !5
  %1591 = sitofp i32 %1590 to double
  %1592 = fmul double %1589, %1591
  %1593 = load i32, ptr %10, align 4, !tbaa !5
  %1594 = sitofp i32 %1593 to double
  %1595 = fmul double %1592, %1594
  %1596 = fmul double %1587, %1595
  %1597 = load i64, ptr %131, align 8, !tbaa !43
  %1598 = uitofp i64 %1597 to double
  %1599 = fdiv double %1596, %1598
  %1600 = getelementptr inbounds [6 x i8], ptr %28, i64 0, i64 0
  %1601 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %1584, ptr noundef @.str.5, double noundef %1599, ptr noundef %1600) #11
  %1602 = load ptr, ptr @stdout, align 8, !tbaa !9
  %1603 = load double, ptr %27, align 8, !tbaa !12
  %1604 = load double, ptr %132, align 8, !tbaa !12
  %1605 = fdiv double %1603, %1604
  %1606 = getelementptr inbounds [6 x i8], ptr %28, i64 0, i64 0
  %1607 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %1602, ptr noundef @.str.6, double noundef %1605, ptr noundef %1606) #11
  %1608 = load ptr, ptr @stdout, align 8, !tbaa !9
  %1609 = load i32, ptr %24, align 4, !tbaa !5
  %1610 = sext i32 %1609 to i64
  %1611 = load i64, ptr %26, align 8, !tbaa !14
  %1612 = load i32, ptr %21, align 4, !tbaa !5
  %1613 = sext i32 %1612 to i64
  %1614 = mul i64 %1613, 8
  %1615 = sub i64 %1611, %1614
  %1616 = mul i64 %1610, %1615
  %1617 = uitofp i64 %1616 to double
  %1618 = load double, ptr %132, align 8, !tbaa !12
  %1619 = fmul double %1618, 0x41D0000000000000
  %1620 = fdiv double %1617, %1619
  %1621 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %1608, ptr noundef @.str.7, double noundef %1620) #11
  br label %1630

1622:                                             ; preds = %1569, %1566
  %1623 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %1624 = extractvalue { ptr, i32 } %1623, 0
  store ptr %1624, ptr %33, align 8
  %1625 = extractvalue { ptr, i32 } %1623, 1
  store i32 %1625, ptr %34, align 4
  br label %1643

1626:                                             ; preds = %1571
  %1627 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %1628 = extractvalue { ptr, i32 } %1627, 0
  store ptr %1628, ptr %33, align 8
  %1629 = extractvalue { ptr, i32 } %1627, 1
  store i32 %1629, ptr %34, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %132) #11
  br label %1643

1630:                                             ; preds = %1583, %1580, %1574
  %1631 = load ptr, ptr @stdout, align 8, !tbaa !9
  %1632 = load double, ptr %132, align 8, !tbaa !12
  %1633 = fmul double 1.000000e+03, %1632
  %1634 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %1631, ptr noundef @.str.8, double noundef %1633) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %132) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %131) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %126) #11
  br label %1635

1635:                                             ; preds = %1630, %1136
  %1636 = load ptr, ptr @stdout, align 8, !tbaa !9
  %1637 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %1636, ptr noundef @.str.13) #11
  call void @llvm.lifetime.start.p0(i64 4, ptr %133) #11
  store i32 0, ptr %133, align 4, !tbaa !5
  br label %1638

1638:                                             ; preds = %1675, %1635
  %1639 = load i32, ptr %133, align 4, !tbaa !5
  %1640 = load i32, ptr %24, align 4, !tbaa !5
  %1641 = icmp slt i32 %1639, %1640
  br i1 %1641, label %1645, label %1642

1642:                                             ; preds = %1638
  store i32 95, ptr %108, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %133) #11
  br label %1682

1643:                                             ; preds = %1626, %1622
  call void @llvm.lifetime.end.p0(i64 8, ptr %131) #11
  br label %1644

1644:                                             ; preds = %1643, %1561, %1519
  call void @llvm.lifetime.end.p0(i64 8, ptr %126) #11
  br label %2782

1645:                                             ; preds = %1638
  %1646 = load ptr, ptr %35, align 8, !tbaa !9
  %1647 = load i32, ptr %20, align 4, !tbaa !5
  %1648 = sext i32 %1647 to i64
  %1649 = load i32, ptr %133, align 4, !tbaa !5
  %1650 = invoke noundef i32 @_ZZ4mainENK4raii7shuffleEi(ptr noundef nonnull align 8 dereferenceable(48) %32, i32 noundef %1649)
          to label %1651 unwind label %1678

1651:                                             ; preds = %1645
  %1652 = sext i32 %1650 to i64
  %1653 = mul i64 %1648, %1652
  %1654 = getelementptr inbounds double, ptr %1646, i64 %1653
  %1655 = load ptr, ptr %103, align 8, !tbaa !9
  %1656 = load i32, ptr %133, align 4, !tbaa !5
  %1657 = sext i32 %1656 to i64
  %1658 = getelementptr inbounds ptr, ptr %1655, i64 %1657
  store ptr %1654, ptr %1658, align 8, !tbaa !9
  %1659 = load ptr, ptr %36, align 8, !tbaa !9
  %1660 = load ptr, ptr %104, align 8, !tbaa !9
  %1661 = load i32, ptr %133, align 4, !tbaa !5
  %1662 = sext i32 %1661 to i64
  %1663 = getelementptr inbounds ptr, ptr %1660, i64 %1662
  store ptr %1659, ptr %1663, align 8, !tbaa !9
  %1664 = load ptr, ptr %38, align 8, !tbaa !9
  %1665 = load i32, ptr %22, align 4, !tbaa !5
  %1666 = sext i32 %1665 to i64
  %1667 = load i32, ptr %133, align 4, !tbaa !5
  %1668 = sext i32 %1667 to i64
  %1669 = mul i64 %1666, %1668
  %1670 = getelementptr inbounds double, ptr %1664, i64 %1669
  %1671 = load ptr, ptr %105, align 8, !tbaa !9
  %1672 = load i32, ptr %133, align 4, !tbaa !5
  %1673 = sext i32 %1672 to i64
  %1674 = getelementptr inbounds ptr, ptr %1671, i64 %1673
  store ptr %1670, ptr %1674, align 8, !tbaa !9
  br label %1675

1675:                                             ; preds = %1651
  %1676 = load i32, ptr %133, align 4, !tbaa !5
  %1677 = add nsw i32 %1676, 1
  store i32 %1677, ptr %133, align 4, !tbaa !5
  br label %1638, !llvm.loop !56

1678:                                             ; preds = %1645
  %1679 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %1680 = extractvalue { ptr, i32 } %1679, 0
  store ptr %1680, ptr %33, align 8
  %1681 = extractvalue { ptr, i32 } %1679, 1
  store i32 %1681, ptr %34, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %133) #11
  br label %2782

1682:                                             ; preds = %1642
  call void @llvm.lifetime.start.p0(i64 4, ptr %134) #11
  store i32 8, ptr %134, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %135) #11
  %1683 = invoke i64 @libxsmm_timer_tick()
          to label %1684 unwind label %1690

1684:                                             ; preds = %1682
  store i64 %1683, ptr %135, align 8, !tbaa !43
  call void @llvm.lifetime.start.p0(i64 4, ptr %136) #11
  store i32 0, ptr %136, align 4, !tbaa !5
  br label %1685

1685:                                             ; preds = %1706, %1684
  %1686 = load i32, ptr %136, align 4, !tbaa !5
  %1687 = load i32, ptr %12, align 4, !tbaa !5
  %1688 = icmp slt i32 %1686, %1687
  br i1 %1688, label %1694, label %1689

1689:                                             ; preds = %1685
  store i32 98, ptr %108, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %136) #11
  br label %1713

1690:                                             ; preds = %1682
  %1691 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %1692 = extractvalue { ptr, i32 } %1691, 0
  store ptr %1692, ptr %33, align 8
  %1693 = extractvalue { ptr, i32 } %1691, 1
  store i32 %1693, ptr %34, align 4
  br label %1850

1694:                                             ; preds = %1685
  %1695 = load i32, ptr %8, align 4, !tbaa !5
  %1696 = load i32, ptr %10, align 4, !tbaa !5
  %1697 = load i32, ptr %9, align 4, !tbaa !5
  %1698 = load ptr, ptr %103, align 8, !tbaa !9
  %1699 = getelementptr inbounds ptr, ptr %1698, i64 0
  %1700 = load ptr, ptr %104, align 8, !tbaa !9
  %1701 = getelementptr inbounds ptr, ptr %1700, i64 0
  %1702 = load ptr, ptr %105, align 8, !tbaa !9
  %1703 = getelementptr inbounds ptr, ptr %1702, i64 0
  %1704 = load i32, ptr %24, align 4, !tbaa !5
  invoke void @libxsmm_gemm_batch(i32 noundef 0, i32 noundef 0, ptr noundef %16, ptr noundef %17, i32 noundef %1695, i32 noundef %1696, i32 noundef %1697, ptr noundef %18, ptr noundef %1699, ptr noundef %13, ptr noundef %134, ptr noundef %1701, ptr noundef %14, ptr noundef %134, ptr noundef %19, ptr noundef %1703, ptr noundef %15, ptr noundef %134, i32 noundef 0, i32 noundef 0, i32 noundef %1704, i32 noundef 0)
          to label %1705 unwind label %1709

1705:                                             ; preds = %1694
  br label %1706

1706:                                             ; preds = %1705
  %1707 = load i32, ptr %136, align 4, !tbaa !5
  %1708 = add nsw i32 %1707, 1
  store i32 %1708, ptr %136, align 4, !tbaa !5
  br label %1685, !llvm.loop !57

1709:                                             ; preds = %1694
  %1710 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %1711 = extractvalue { ptr, i32 } %1710, 0
  store ptr %1711, ptr %33, align 8
  %1712 = extractvalue { ptr, i32 } %1710, 1
  store i32 %1712, ptr %34, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %136) #11
  br label %1850

1713:                                             ; preds = %1689
  call void @llvm.lifetime.start.p0(i64 8, ptr %137) #11
  %1714 = load i64, ptr %135, align 8, !tbaa !43
  %1715 = invoke i64 @libxsmm_timer_tick()
          to label %1716 unwind label %1769

1716:                                             ; preds = %1713
  %1717 = invoke noundef i64 @_Z21libxsmm_timer_ncyclesyy(i64 noundef %1714, i64 noundef %1715)
          to label %1718 unwind label %1769

1718:                                             ; preds = %1716
  store i64 %1717, ptr %137, align 8, !tbaa !43
  call void @llvm.lifetime.start.p0(i64 8, ptr %138) #11
  %1719 = load i64, ptr %137, align 8, !tbaa !43
  %1720 = invoke double @libxsmm_timer_duration(i64 noundef 0, i64 noundef %1719)
          to label %1721 unwind label %1773

1721:                                             ; preds = %1718
  %1722 = load i32, ptr %12, align 4, !tbaa !5
  %1723 = sitofp i32 %1722 to double
  %1724 = fdiv double %1720, %1723
  store double %1724, ptr %138, align 8, !tbaa !12
  %1725 = load double, ptr %138, align 8, !tbaa !12
  %1726 = fcmp olt double 0.000000e+00, %1725
  br i1 %1726, label %1727, label %1777

1727:                                             ; preds = %1721
  %1728 = load i64, ptr %137, align 8, !tbaa !43
  %1729 = icmp ne i64 0, %1728
  br i1 %1729, label %1730, label %1777

1730:                                             ; preds = %1727
  %1731 = load ptr, ptr @stdout, align 8, !tbaa !9
  %1732 = load i32, ptr %9, align 4, !tbaa !5
  %1733 = sitofp i32 %1732 to double
  %1734 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %1733, double -1.000000e+00)
  %1735 = load i32, ptr %24, align 4, !tbaa !5
  %1736 = sitofp i32 %1735 to double
  %1737 = load i32, ptr %8, align 4, !tbaa !5
  %1738 = sitofp i32 %1737 to double
  %1739 = fmul double %1736, %1738
  %1740 = load i32, ptr %10, align 4, !tbaa !5
  %1741 = sitofp i32 %1740 to double
  %1742 = fmul double %1739, %1741
  %1743 = fmul double %1734, %1742
  %1744 = load i64, ptr %137, align 8, !tbaa !43
  %1745 = uitofp i64 %1744 to double
  %1746 = fdiv double %1743, %1745
  %1747 = getelementptr inbounds [6 x i8], ptr %28, i64 0, i64 0
  %1748 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %1731, ptr noundef @.str.5, double noundef %1746, ptr noundef %1747) #11
  %1749 = load ptr, ptr @stdout, align 8, !tbaa !9
  %1750 = load double, ptr %27, align 8, !tbaa !12
  %1751 = load double, ptr %138, align 8, !tbaa !12
  %1752 = fdiv double %1750, %1751
  %1753 = getelementptr inbounds [6 x i8], ptr %28, i64 0, i64 0
  %1754 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %1749, ptr noundef @.str.6, double noundef %1752, ptr noundef %1753) #11
  %1755 = load ptr, ptr @stdout, align 8, !tbaa !9
  %1756 = load i32, ptr %24, align 4, !tbaa !5
  %1757 = sext i32 %1756 to i64
  %1758 = load i64, ptr %26, align 8, !tbaa !14
  %1759 = load i32, ptr %21, align 4, !tbaa !5
  %1760 = sext i32 %1759 to i64
  %1761 = mul i64 %1760, 8
  %1762 = sub i64 %1758, %1761
  %1763 = mul i64 %1757, %1762
  %1764 = uitofp i64 %1763 to double
  %1765 = load double, ptr %138, align 8, !tbaa !12
  %1766 = fmul double %1765, 0x41D0000000000000
  %1767 = fdiv double %1764, %1766
  %1768 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %1755, ptr noundef @.str.7, double noundef %1767) #11
  br label %1777

1769:                                             ; preds = %1716, %1713
  %1770 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %1771 = extractvalue { ptr, i32 } %1770, 0
  store ptr %1771, ptr %33, align 8
  %1772 = extractvalue { ptr, i32 } %1770, 1
  store i32 %1772, ptr %34, align 4
  br label %1849

1773:                                             ; preds = %1718
  %1774 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %1775 = extractvalue { ptr, i32 } %1774, 0
  store ptr %1775, ptr %33, align 8
  %1776 = extractvalue { ptr, i32 } %1774, 1
  store i32 %1776, ptr %34, align 4
  br label %1848

1777:                                             ; preds = %1730, %1727, %1721
  %1778 = load ptr, ptr @stdout, align 8, !tbaa !9
  %1779 = load double, ptr %138, align 8, !tbaa !12
  %1780 = fmul double 1.000000e+03, %1779
  %1781 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %1778, ptr noundef @.str.8, double noundef %1780) #11
  %1782 = load i32, ptr %7, align 4, !tbaa !5
  %1783 = and i32 %1782, 1
  %1784 = icmp eq i32 0, %1783
  br i1 %1784, label %1785, label %1847

1785:                                             ; preds = %1777
  %1786 = load i32, ptr %31, align 4, !tbaa !5
  %1787 = icmp ne i32 0, %1786
  br i1 %1787, label %1788, label %1847

1788:                                             ; preds = %1785
  call void @llvm.lifetime.start.p0(i64 192, ptr %139) #11
  invoke void @libxsmm_matdiff_clear(ptr noundef %139)
          to label %1789 unwind label %1795

1789:                                             ; preds = %1788
  call void @llvm.lifetime.start.p0(i64 4, ptr %140) #11
  store i32 0, ptr %140, align 4, !tbaa !5
  br label %1790

1790:                                             ; preds = %1827, %1789
  %1791 = load i32, ptr %140, align 4, !tbaa !5
  %1792 = load i32, ptr %24, align 4, !tbaa !5
  %1793 = icmp slt i32 %1791, %1792
  br i1 %1793, label %1799, label %1794

1794:                                             ; preds = %1790
  store i32 101, ptr %108, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %140) #11
  br label %1830

1795:                                             ; preds = %1788
  %1796 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %1797 = extractvalue { ptr, i32 } %1796, 0
  store ptr %1797, ptr %33, align 8
  %1798 = extractvalue { ptr, i32 } %1796, 1
  store i32 %1798, ptr %34, align 4
  br label %1846

1799:                                             ; preds = %1790
  call void @llvm.lifetime.start.p0(i64 8, ptr %141) #11
  %1800 = load ptr, ptr %37, align 8, !tbaa !9
  %1801 = load i32, ptr %22, align 4, !tbaa !5
  %1802 = sext i32 %1801 to i64
  %1803 = load i32, ptr %140, align 4, !tbaa !5
  %1804 = sext i32 %1803 to i64
  %1805 = mul i64 %1802, %1804
  %1806 = getelementptr inbounds double, ptr %1800, i64 %1805
  store ptr %1806, ptr %141, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %142) #11
  %1807 = load ptr, ptr %105, align 8, !tbaa !9
  %1808 = load i32, ptr %140, align 4, !tbaa !5
  %1809 = sext i32 %1808 to i64
  %1810 = getelementptr inbounds ptr, ptr %1807, i64 %1809
  %1811 = load ptr, ptr %1810, align 8, !tbaa !9
  store ptr %1811, ptr %142, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 192, ptr %143) #11
  %1812 = load i32, ptr %8, align 4, !tbaa !5
  %1813 = load i32, ptr %10, align 4, !tbaa !5
  %1814 = load ptr, ptr %141, align 8, !tbaa !9
  %1815 = load ptr, ptr %142, align 8, !tbaa !9
  %1816 = invoke i32 @libxsmm_matdiff(ptr noundef %143, i32 noundef 0, i32 noundef %1812, i32 noundef %1813, ptr noundef %1814, ptr noundef %1815, ptr noundef %15, ptr noundef %15)
          to label %1817 unwind label %1822

1817:                                             ; preds = %1799
  store i32 %1816, ptr %6, align 4, !tbaa !5
  %1818 = load i32, ptr %6, align 4, !tbaa !5
  %1819 = icmp eq i32 0, %1818
  br i1 %1819, label %1820, label %1826

1820:                                             ; preds = %1817
  invoke void @libxsmm_matdiff_reduce(ptr noundef %139, ptr noundef %143)
          to label %1821 unwind label %1822

1821:                                             ; preds = %1820
  br label %1826

1822:                                             ; preds = %1820, %1799
  %1823 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %1824 = extractvalue { ptr, i32 } %1823, 0
  store ptr %1824, ptr %33, align 8
  %1825 = extractvalue { ptr, i32 } %1823, 1
  store i32 %1825, ptr %34, align 4
  call void @llvm.lifetime.end.p0(i64 192, ptr %143) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %142) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %141) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %140) #11
  br label %1846

1826:                                             ; preds = %1821, %1817
  call void @llvm.lifetime.end.p0(i64 192, ptr %143) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %142) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %141) #11
  br label %1827

1827:                                             ; preds = %1826
  %1828 = load i32, ptr %140, align 4, !tbaa !5
  %1829 = add nsw i32 %1828, 1
  store i32 %1829, ptr %140, align 4, !tbaa !5
  br label %1790, !llvm.loop !58

1830:                                             ; preds = %1794
  %1831 = load ptr, ptr @stdout, align 8, !tbaa !9
  %1832 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %139, i32 0, i32 7
  %1833 = load double, ptr %1832, align 8, !tbaa !50
  %1834 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %139, i32 0, i32 5
  %1835 = load double, ptr %1834, align 8, !tbaa !52
  %1836 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %1831, ptr noundef @.str.10, double noundef %1833, double noundef %1835) #11
  %1837 = load i32, ptr %31, align 4, !tbaa !5
  %1838 = sitofp i32 %1837 to double
  %1839 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %139, i32 0, i32 8
  %1840 = load double, ptr %1839, align 8, !tbaa !53
  %1841 = fcmp olt double %1838, %1840
  br i1 %1841, label %1842, label %1845

1842:                                             ; preds = %1830
  %1843 = load ptr, ptr @stderr, align 8, !tbaa !9
  %1844 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %1843, ptr noundef @.str.11) #11
  store i32 1, ptr %6, align 4, !tbaa !5
  br label %1845

1845:                                             ; preds = %1842, %1830
  call void @llvm.lifetime.end.p0(i64 192, ptr %139) #11
  br label %1847

1846:                                             ; preds = %1822, %1795
  call void @llvm.lifetime.end.p0(i64 192, ptr %139) #11
  br label %1848

1847:                                             ; preds = %1845, %1785, %1777
  call void @llvm.lifetime.end.p0(i64 8, ptr %138) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %137) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %135) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %134) #11
  br label %2778

1848:                                             ; preds = %1846, %1773
  call void @llvm.lifetime.end.p0(i64 8, ptr %138) #11
  br label %1849

1849:                                             ; preds = %1848, %1769
  call void @llvm.lifetime.end.p0(i64 8, ptr %137) #11
  br label %1850

1850:                                             ; preds = %1849, %1709, %1690
  call void @llvm.lifetime.end.p0(i64 8, ptr %135) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %134) #11
  br label %2782

1851:                                             ; preds = %1136
  %1852 = load ptr, ptr @stdout, align 8, !tbaa !9
  %1853 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %1852, ptr noundef @.str.14) #11
  call void @llvm.lifetime.start.p0(i64 8, ptr %144) #11
  %1854 = invoke i64 @libxsmm_timer_tick()
          to label %1855 unwind label %1861

1855:                                             ; preds = %1851
  store i64 %1854, ptr %144, align 8, !tbaa !43
  call void @llvm.lifetime.start.p0(i64 4, ptr %145) #11
  store i32 0, ptr %145, align 4, !tbaa !5
  br label %1856

1856:                                             ; preds = %1905, %1855
  %1857 = load i32, ptr %145, align 4, !tbaa !5
  %1858 = load i32, ptr %12, align 4, !tbaa !5
  %1859 = icmp slt i32 %1857, %1858
  br i1 %1859, label %1865, label %1860

1860:                                             ; preds = %1856
  store i32 104, ptr %108, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %145) #11
  br label %1908

1861:                                             ; preds = %1851
  %1862 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %1863 = extractvalue { ptr, i32 } %1862, 0
  store ptr %1863, ptr %33, align 8
  %1864 = extractvalue { ptr, i32 } %1862, 1
  store i32 %1864, ptr %34, align 4
  br label %1986

1865:                                             ; preds = %1856
  call void @llvm.lifetime.start.p0(i64 4, ptr %146) #11
  store i32 0, ptr %146, align 4, !tbaa !5
  br label %1866

1866:                                             ; preds = %1892, %1865
  %1867 = load i32, ptr %146, align 4, !tbaa !5
  %1868 = load i32, ptr %24, align 4, !tbaa !5
  %1869 = icmp slt i32 %1867, %1868
  br i1 %1869, label %1871, label %1870

1870:                                             ; preds = %1866
  store i32 107, ptr %108, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %146) #11
  br label %1904

1871:                                             ; preds = %1866
  call void @llvm.lifetime.start.p0(i64 8, ptr %147) #11
  %1872 = load ptr, ptr %36, align 8, !tbaa !9
  %1873 = load i32, ptr %21, align 4, !tbaa !5
  %1874 = sext i32 %1873 to i64
  %1875 = load i32, ptr %146, align 4, !tbaa !5
  %1876 = invoke noundef i32 @_ZZ4mainENK4raii7shuffleEi(ptr noundef nonnull align 8 dereferenceable(48) %32, i32 noundef %1875)
          to label %1877 unwind label %1895

1877:                                             ; preds = %1871
  %1878 = sext i32 %1876 to i64
  %1879 = mul i64 %1874, %1878
  %1880 = getelementptr inbounds double, ptr %1872, i64 %1879
  store ptr %1880, ptr %147, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %148) #11
  %1881 = load ptr, ptr %37, align 8, !tbaa !9
  %1882 = load i32, ptr %22, align 4, !tbaa !5
  %1883 = sext i32 %1882 to i64
  %1884 = load i32, ptr %146, align 4, !tbaa !5
  %1885 = sext i32 %1884 to i64
  %1886 = mul i64 %1883, %1885
  %1887 = getelementptr inbounds double, ptr %1881, i64 %1886
  store ptr %1887, ptr %148, align 8, !tbaa !9
  %1888 = load ptr, ptr %35, align 8, !tbaa !9
  %1889 = load ptr, ptr %147, align 8, !tbaa !9
  %1890 = load ptr, ptr %148, align 8, !tbaa !9
  invoke void @_ZNK18libxsmm_mmfunctionIddLin1EEclEPKdS2_Pd(ptr noundef nonnull align 8 dereferenceable(8) %96, ptr noundef %1888, ptr noundef %1889, ptr noundef %1890)
          to label %1891 unwind label %1899

1891:                                             ; preds = %1877
  call void @llvm.lifetime.end.p0(i64 8, ptr %148) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %147) #11
  br label %1892

1892:                                             ; preds = %1891
  %1893 = load i32, ptr %146, align 4, !tbaa !5
  %1894 = add nsw i32 %1893, 1
  store i32 %1894, ptr %146, align 4, !tbaa !5
  br label %1866, !llvm.loop !59

1895:                                             ; preds = %1871
  %1896 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %1897 = extractvalue { ptr, i32 } %1896, 0
  store ptr %1897, ptr %33, align 8
  %1898 = extractvalue { ptr, i32 } %1896, 1
  store i32 %1898, ptr %34, align 4
  br label %1903

1899:                                             ; preds = %1877
  %1900 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %1901 = extractvalue { ptr, i32 } %1900, 0
  store ptr %1901, ptr %33, align 8
  %1902 = extractvalue { ptr, i32 } %1900, 1
  store i32 %1902, ptr %34, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %148) #11
  br label %1903

1903:                                             ; preds = %1899, %1895
  call void @llvm.lifetime.end.p0(i64 8, ptr %147) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %146) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %145) #11
  br label %1986

1904:                                             ; preds = %1870
  br label %1905

1905:                                             ; preds = %1904
  %1906 = load i32, ptr %145, align 4, !tbaa !5
  %1907 = add nsw i32 %1906, 1
  store i32 %1907, ptr %145, align 4, !tbaa !5
  br label %1856, !llvm.loop !60

1908:                                             ; preds = %1860
  call void @llvm.lifetime.start.p0(i64 8, ptr %149) #11
  %1909 = load i64, ptr %144, align 8, !tbaa !43
  %1910 = invoke i64 @libxsmm_timer_tick()
          to label %1911 unwind label %1964

1911:                                             ; preds = %1908
  %1912 = invoke noundef i64 @_Z21libxsmm_timer_ncyclesyy(i64 noundef %1909, i64 noundef %1910)
          to label %1913 unwind label %1964

1913:                                             ; preds = %1911
  store i64 %1912, ptr %149, align 8, !tbaa !43
  call void @llvm.lifetime.start.p0(i64 8, ptr %150) #11
  %1914 = load i64, ptr %149, align 8, !tbaa !43
  %1915 = invoke double @libxsmm_timer_duration(i64 noundef 0, i64 noundef %1914)
          to label %1916 unwind label %1968

1916:                                             ; preds = %1913
  %1917 = load i32, ptr %12, align 4, !tbaa !5
  %1918 = sitofp i32 %1917 to double
  %1919 = fdiv double %1915, %1918
  store double %1919, ptr %150, align 8, !tbaa !12
  %1920 = load double, ptr %150, align 8, !tbaa !12
  %1921 = fcmp olt double 0.000000e+00, %1920
  br i1 %1921, label %1922, label %1972

1922:                                             ; preds = %1916
  %1923 = load i64, ptr %149, align 8, !tbaa !43
  %1924 = icmp ne i64 0, %1923
  br i1 %1924, label %1925, label %1972

1925:                                             ; preds = %1922
  %1926 = load ptr, ptr @stdout, align 8, !tbaa !9
  %1927 = load i32, ptr %9, align 4, !tbaa !5
  %1928 = sitofp i32 %1927 to double
  %1929 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %1928, double -1.000000e+00)
  %1930 = load i32, ptr %24, align 4, !tbaa !5
  %1931 = sitofp i32 %1930 to double
  %1932 = load i32, ptr %8, align 4, !tbaa !5
  %1933 = sitofp i32 %1932 to double
  %1934 = fmul double %1931, %1933
  %1935 = load i32, ptr %10, align 4, !tbaa !5
  %1936 = sitofp i32 %1935 to double
  %1937 = fmul double %1934, %1936
  %1938 = fmul double %1929, %1937
  %1939 = load i64, ptr %149, align 8, !tbaa !43
  %1940 = uitofp i64 %1939 to double
  %1941 = fdiv double %1938, %1940
  %1942 = getelementptr inbounds [6 x i8], ptr %28, i64 0, i64 0
  %1943 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %1926, ptr noundef @.str.5, double noundef %1941, ptr noundef %1942) #11
  %1944 = load ptr, ptr @stdout, align 8, !tbaa !9
  %1945 = load double, ptr %27, align 8, !tbaa !12
  %1946 = load double, ptr %150, align 8, !tbaa !12
  %1947 = fdiv double %1945, %1946
  %1948 = getelementptr inbounds [6 x i8], ptr %28, i64 0, i64 0
  %1949 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %1944, ptr noundef @.str.6, double noundef %1947, ptr noundef %1948) #11
  %1950 = load ptr, ptr @stdout, align 8, !tbaa !9
  %1951 = load i32, ptr %24, align 4, !tbaa !5
  %1952 = sext i32 %1951 to i64
  %1953 = load i64, ptr %26, align 8, !tbaa !14
  %1954 = load i32, ptr %20, align 4, !tbaa !5
  %1955 = sext i32 %1954 to i64
  %1956 = mul i64 %1955, 8
  %1957 = sub i64 %1953, %1956
  %1958 = mul i64 %1952, %1957
  %1959 = uitofp i64 %1958 to double
  %1960 = load double, ptr %150, align 8, !tbaa !12
  %1961 = fmul double %1960, 0x41D0000000000000
  %1962 = fdiv double %1959, %1961
  %1963 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %1950, ptr noundef @.str.7, double noundef %1962) #11
  br label %1972

1964:                                             ; preds = %1911, %1908
  %1965 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %1966 = extractvalue { ptr, i32 } %1965, 0
  store ptr %1966, ptr %33, align 8
  %1967 = extractvalue { ptr, i32 } %1965, 1
  store i32 %1967, ptr %34, align 4
  br label %1985

1968:                                             ; preds = %1913
  %1969 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %1970 = extractvalue { ptr, i32 } %1969, 0
  store ptr %1970, ptr %33, align 8
  %1971 = extractvalue { ptr, i32 } %1969, 1
  store i32 %1971, ptr %34, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %150) #11
  br label %1985

1972:                                             ; preds = %1925, %1922, %1916
  %1973 = load ptr, ptr @stdout, align 8, !tbaa !9
  %1974 = load double, ptr %150, align 8, !tbaa !12
  %1975 = fmul double 1.000000e+03, %1974
  %1976 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %1973, ptr noundef @.str.8, double noundef %1975) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %150) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %149) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %144) #11
  br label %1977

1977:                                             ; preds = %1972, %1136
  %1978 = load ptr, ptr @stdout, align 8, !tbaa !9
  %1979 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %1978, ptr noundef @.str.15) #11
  call void @llvm.lifetime.start.p0(i64 4, ptr %151) #11
  store i32 0, ptr %151, align 4, !tbaa !5
  br label %1980

1980:                                             ; preds = %2017, %1977
  %1981 = load i32, ptr %151, align 4, !tbaa !5
  %1982 = load i32, ptr %24, align 4, !tbaa !5
  %1983 = icmp slt i32 %1981, %1982
  br i1 %1983, label %1987, label %1984

1984:                                             ; preds = %1980
  store i32 110, ptr %108, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %151) #11
  br label %2024

1985:                                             ; preds = %1968, %1964
  call void @llvm.lifetime.end.p0(i64 8, ptr %149) #11
  br label %1986

1986:                                             ; preds = %1985, %1903, %1861
  call void @llvm.lifetime.end.p0(i64 8, ptr %144) #11
  br label %2782

1987:                                             ; preds = %1980
  %1988 = load ptr, ptr %35, align 8, !tbaa !9
  %1989 = load ptr, ptr %103, align 8, !tbaa !9
  %1990 = load i32, ptr %151, align 4, !tbaa !5
  %1991 = sext i32 %1990 to i64
  %1992 = getelementptr inbounds ptr, ptr %1989, i64 %1991
  store ptr %1988, ptr %1992, align 8, !tbaa !9
  %1993 = load ptr, ptr %36, align 8, !tbaa !9
  %1994 = load i32, ptr %21, align 4, !tbaa !5
  %1995 = sext i32 %1994 to i64
  %1996 = load i32, ptr %151, align 4, !tbaa !5
  %1997 = invoke noundef i32 @_ZZ4mainENK4raii7shuffleEi(ptr noundef nonnull align 8 dereferenceable(48) %32, i32 noundef %1996)
          to label %1998 unwind label %2020

1998:                                             ; preds = %1987
  %1999 = sext i32 %1997 to i64
  %2000 = mul i64 %1995, %1999
  %2001 = getelementptr inbounds double, ptr %1993, i64 %2000
  %2002 = load ptr, ptr %104, align 8, !tbaa !9
  %2003 = load i32, ptr %151, align 4, !tbaa !5
  %2004 = sext i32 %2003 to i64
  %2005 = getelementptr inbounds ptr, ptr %2002, i64 %2004
  store ptr %2001, ptr %2005, align 8, !tbaa !9
  %2006 = load ptr, ptr %38, align 8, !tbaa !9
  %2007 = load i32, ptr %22, align 4, !tbaa !5
  %2008 = sext i32 %2007 to i64
  %2009 = load i32, ptr %151, align 4, !tbaa !5
  %2010 = sext i32 %2009 to i64
  %2011 = mul i64 %2008, %2010
  %2012 = getelementptr inbounds double, ptr %2006, i64 %2011
  %2013 = load ptr, ptr %105, align 8, !tbaa !9
  %2014 = load i32, ptr %151, align 4, !tbaa !5
  %2015 = sext i32 %2014 to i64
  %2016 = getelementptr inbounds ptr, ptr %2013, i64 %2015
  store ptr %2012, ptr %2016, align 8, !tbaa !9
  br label %2017

2017:                                             ; preds = %1998
  %2018 = load i32, ptr %151, align 4, !tbaa !5
  %2019 = add nsw i32 %2018, 1
  store i32 %2019, ptr %151, align 4, !tbaa !5
  br label %1980, !llvm.loop !61

2020:                                             ; preds = %1987
  %2021 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %2022 = extractvalue { ptr, i32 } %2021, 0
  store ptr %2022, ptr %33, align 8
  %2023 = extractvalue { ptr, i32 } %2021, 1
  store i32 %2023, ptr %34, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %151) #11
  br label %2782

2024:                                             ; preds = %1984
  call void @llvm.lifetime.start.p0(i64 4, ptr %152) #11
  store i32 8, ptr %152, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %153) #11
  %2025 = invoke i64 @libxsmm_timer_tick()
          to label %2026 unwind label %2032

2026:                                             ; preds = %2024
  store i64 %2025, ptr %153, align 8, !tbaa !43
  call void @llvm.lifetime.start.p0(i64 4, ptr %154) #11
  store i32 0, ptr %154, align 4, !tbaa !5
  br label %2027

2027:                                             ; preds = %2048, %2026
  %2028 = load i32, ptr %154, align 4, !tbaa !5
  %2029 = load i32, ptr %12, align 4, !tbaa !5
  %2030 = icmp slt i32 %2028, %2029
  br i1 %2030, label %2036, label %2031

2031:                                             ; preds = %2027
  store i32 113, ptr %108, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %154) #11
  br label %2055

2032:                                             ; preds = %2024
  %2033 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %2034 = extractvalue { ptr, i32 } %2033, 0
  store ptr %2034, ptr %33, align 8
  %2035 = extractvalue { ptr, i32 } %2033, 1
  store i32 %2035, ptr %34, align 4
  br label %2192

2036:                                             ; preds = %2027
  %2037 = load i32, ptr %8, align 4, !tbaa !5
  %2038 = load i32, ptr %10, align 4, !tbaa !5
  %2039 = load i32, ptr %9, align 4, !tbaa !5
  %2040 = load ptr, ptr %103, align 8, !tbaa !9
  %2041 = getelementptr inbounds ptr, ptr %2040, i64 0
  %2042 = load ptr, ptr %104, align 8, !tbaa !9
  %2043 = getelementptr inbounds ptr, ptr %2042, i64 0
  %2044 = load ptr, ptr %105, align 8, !tbaa !9
  %2045 = getelementptr inbounds ptr, ptr %2044, i64 0
  %2046 = load i32, ptr %24, align 4, !tbaa !5
  invoke void @libxsmm_gemm_batch(i32 noundef 0, i32 noundef 0, ptr noundef %16, ptr noundef %17, i32 noundef %2037, i32 noundef %2038, i32 noundef %2039, ptr noundef %18, ptr noundef %2041, ptr noundef %13, ptr noundef %152, ptr noundef %2043, ptr noundef %14, ptr noundef %152, ptr noundef %19, ptr noundef %2045, ptr noundef %15, ptr noundef %152, i32 noundef 0, i32 noundef 0, i32 noundef %2046, i32 noundef 0)
          to label %2047 unwind label %2051

2047:                                             ; preds = %2036
  br label %2048

2048:                                             ; preds = %2047
  %2049 = load i32, ptr %154, align 4, !tbaa !5
  %2050 = add nsw i32 %2049, 1
  store i32 %2050, ptr %154, align 4, !tbaa !5
  br label %2027, !llvm.loop !62

2051:                                             ; preds = %2036
  %2052 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %2053 = extractvalue { ptr, i32 } %2052, 0
  store ptr %2053, ptr %33, align 8
  %2054 = extractvalue { ptr, i32 } %2052, 1
  store i32 %2054, ptr %34, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %154) #11
  br label %2192

2055:                                             ; preds = %2031
  call void @llvm.lifetime.start.p0(i64 8, ptr %155) #11
  %2056 = load i64, ptr %153, align 8, !tbaa !43
  %2057 = invoke i64 @libxsmm_timer_tick()
          to label %2058 unwind label %2111

2058:                                             ; preds = %2055
  %2059 = invoke noundef i64 @_Z21libxsmm_timer_ncyclesyy(i64 noundef %2056, i64 noundef %2057)
          to label %2060 unwind label %2111

2060:                                             ; preds = %2058
  store i64 %2059, ptr %155, align 8, !tbaa !43
  call void @llvm.lifetime.start.p0(i64 8, ptr %156) #11
  %2061 = load i64, ptr %155, align 8, !tbaa !43
  %2062 = invoke double @libxsmm_timer_duration(i64 noundef 0, i64 noundef %2061)
          to label %2063 unwind label %2115

2063:                                             ; preds = %2060
  %2064 = load i32, ptr %12, align 4, !tbaa !5
  %2065 = sitofp i32 %2064 to double
  %2066 = fdiv double %2062, %2065
  store double %2066, ptr %156, align 8, !tbaa !12
  %2067 = load double, ptr %156, align 8, !tbaa !12
  %2068 = fcmp olt double 0.000000e+00, %2067
  br i1 %2068, label %2069, label %2119

2069:                                             ; preds = %2063
  %2070 = load i64, ptr %155, align 8, !tbaa !43
  %2071 = icmp ne i64 0, %2070
  br i1 %2071, label %2072, label %2119

2072:                                             ; preds = %2069
  %2073 = load ptr, ptr @stdout, align 8, !tbaa !9
  %2074 = load i32, ptr %9, align 4, !tbaa !5
  %2075 = sitofp i32 %2074 to double
  %2076 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %2075, double -1.000000e+00)
  %2077 = load i32, ptr %24, align 4, !tbaa !5
  %2078 = sitofp i32 %2077 to double
  %2079 = load i32, ptr %8, align 4, !tbaa !5
  %2080 = sitofp i32 %2079 to double
  %2081 = fmul double %2078, %2080
  %2082 = load i32, ptr %10, align 4, !tbaa !5
  %2083 = sitofp i32 %2082 to double
  %2084 = fmul double %2081, %2083
  %2085 = fmul double %2076, %2084
  %2086 = load i64, ptr %155, align 8, !tbaa !43
  %2087 = uitofp i64 %2086 to double
  %2088 = fdiv double %2085, %2087
  %2089 = getelementptr inbounds [6 x i8], ptr %28, i64 0, i64 0
  %2090 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %2073, ptr noundef @.str.5, double noundef %2088, ptr noundef %2089) #11
  %2091 = load ptr, ptr @stdout, align 8, !tbaa !9
  %2092 = load double, ptr %27, align 8, !tbaa !12
  %2093 = load double, ptr %156, align 8, !tbaa !12
  %2094 = fdiv double %2092, %2093
  %2095 = getelementptr inbounds [6 x i8], ptr %28, i64 0, i64 0
  %2096 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %2091, ptr noundef @.str.6, double noundef %2094, ptr noundef %2095) #11
  %2097 = load ptr, ptr @stdout, align 8, !tbaa !9
  %2098 = load i32, ptr %24, align 4, !tbaa !5
  %2099 = sext i32 %2098 to i64
  %2100 = load i64, ptr %26, align 8, !tbaa !14
  %2101 = load i32, ptr %20, align 4, !tbaa !5
  %2102 = sext i32 %2101 to i64
  %2103 = mul i64 %2102, 8
  %2104 = sub i64 %2100, %2103
  %2105 = mul i64 %2099, %2104
  %2106 = uitofp i64 %2105 to double
  %2107 = load double, ptr %156, align 8, !tbaa !12
  %2108 = fmul double %2107, 0x41D0000000000000
  %2109 = fdiv double %2106, %2108
  %2110 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %2097, ptr noundef @.str.7, double noundef %2109) #11
  br label %2119

2111:                                             ; preds = %2058, %2055
  %2112 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %2113 = extractvalue { ptr, i32 } %2112, 0
  store ptr %2113, ptr %33, align 8
  %2114 = extractvalue { ptr, i32 } %2112, 1
  store i32 %2114, ptr %34, align 4
  br label %2191

2115:                                             ; preds = %2060
  %2116 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %2117 = extractvalue { ptr, i32 } %2116, 0
  store ptr %2117, ptr %33, align 8
  %2118 = extractvalue { ptr, i32 } %2116, 1
  store i32 %2118, ptr %34, align 4
  br label %2190

2119:                                             ; preds = %2072, %2069, %2063
  %2120 = load ptr, ptr @stdout, align 8, !tbaa !9
  %2121 = load double, ptr %156, align 8, !tbaa !12
  %2122 = fmul double 1.000000e+03, %2121
  %2123 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %2120, ptr noundef @.str.8, double noundef %2122) #11
  %2124 = load i32, ptr %7, align 4, !tbaa !5
  %2125 = and i32 %2124, 1
  %2126 = icmp eq i32 0, %2125
  br i1 %2126, label %2127, label %2189

2127:                                             ; preds = %2119
  %2128 = load i32, ptr %31, align 4, !tbaa !5
  %2129 = icmp ne i32 0, %2128
  br i1 %2129, label %2130, label %2189

2130:                                             ; preds = %2127
  call void @llvm.lifetime.start.p0(i64 192, ptr %157) #11
  invoke void @libxsmm_matdiff_clear(ptr noundef %157)
          to label %2131 unwind label %2137

2131:                                             ; preds = %2130
  call void @llvm.lifetime.start.p0(i64 4, ptr %158) #11
  store i32 0, ptr %158, align 4, !tbaa !5
  br label %2132

2132:                                             ; preds = %2169, %2131
  %2133 = load i32, ptr %158, align 4, !tbaa !5
  %2134 = load i32, ptr %24, align 4, !tbaa !5
  %2135 = icmp slt i32 %2133, %2134
  br i1 %2135, label %2141, label %2136

2136:                                             ; preds = %2132
  store i32 116, ptr %108, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %158) #11
  br label %2172

2137:                                             ; preds = %2130
  %2138 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %2139 = extractvalue { ptr, i32 } %2138, 0
  store ptr %2139, ptr %33, align 8
  %2140 = extractvalue { ptr, i32 } %2138, 1
  store i32 %2140, ptr %34, align 4
  br label %2188

2141:                                             ; preds = %2132
  call void @llvm.lifetime.start.p0(i64 8, ptr %159) #11
  %2142 = load ptr, ptr %37, align 8, !tbaa !9
  %2143 = load i32, ptr %22, align 4, !tbaa !5
  %2144 = sext i32 %2143 to i64
  %2145 = load i32, ptr %158, align 4, !tbaa !5
  %2146 = sext i32 %2145 to i64
  %2147 = mul i64 %2144, %2146
  %2148 = getelementptr inbounds double, ptr %2142, i64 %2147
  store ptr %2148, ptr %159, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %160) #11
  %2149 = load ptr, ptr %105, align 8, !tbaa !9
  %2150 = load i32, ptr %158, align 4, !tbaa !5
  %2151 = sext i32 %2150 to i64
  %2152 = getelementptr inbounds ptr, ptr %2149, i64 %2151
  %2153 = load ptr, ptr %2152, align 8, !tbaa !9
  store ptr %2153, ptr %160, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 192, ptr %161) #11
  %2154 = load i32, ptr %8, align 4, !tbaa !5
  %2155 = load i32, ptr %10, align 4, !tbaa !5
  %2156 = load ptr, ptr %159, align 8, !tbaa !9
  %2157 = load ptr, ptr %160, align 8, !tbaa !9
  %2158 = invoke i32 @libxsmm_matdiff(ptr noundef %161, i32 noundef 0, i32 noundef %2154, i32 noundef %2155, ptr noundef %2156, ptr noundef %2157, ptr noundef %15, ptr noundef %15)
          to label %2159 unwind label %2164

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

2162:                                             ; preds = %2159
  invoke void @libxsmm_matdiff_reduce(ptr noundef %157, ptr noundef %161)
          to label %2163 unwind label %2164

2163:                                             ; preds = %2162
  br label %2168

2164:                                             ; preds = %2162, %2141
  %2165 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %2166 = extractvalue { ptr, i32 } %2165, 0
  store ptr %2166, ptr %33, align 8
  %2167 = extractvalue { ptr, i32 } %2165, 1
  store i32 %2167, ptr %34, align 4
  call void @llvm.lifetime.end.p0(i64 192, ptr %161) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %160) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %159) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %158) #11
  br label %2188

2168:                                             ; preds = %2163, %2159
  call void @llvm.lifetime.end.p0(i64 192, ptr %161) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %160) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %159) #11
  br label %2169

2169:                                             ; preds = %2168
  %2170 = load i32, ptr %158, align 4, !tbaa !5
  %2171 = add nsw i32 %2170, 1
  store i32 %2171, ptr %158, align 4, !tbaa !5
  br label %2132, !llvm.loop !63

2172:                                             ; preds = %2136
  %2173 = load ptr, ptr @stdout, align 8, !tbaa !9
  %2174 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %157, i32 0, i32 7
  %2175 = load double, ptr %2174, align 8, !tbaa !50
  %2176 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %157, i32 0, i32 5
  %2177 = load double, ptr %2176, align 8, !tbaa !52
  %2178 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %2173, ptr noundef @.str.10, double noundef %2175, double noundef %2177) #11
  %2179 = load i32, ptr %31, align 4, !tbaa !5
  %2180 = sitofp i32 %2179 to double
  %2181 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %157, i32 0, i32 8
  %2182 = load double, ptr %2181, align 8, !tbaa !53
  %2183 = fcmp olt double %2180, %2182
  br i1 %2183, label %2184, label %2187

2184:                                             ; preds = %2172
  %2185 = load ptr, ptr @stderr, align 8, !tbaa !9
  %2186 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %2185, ptr noundef @.str.11) #11
  store i32 1, ptr %6, align 4, !tbaa !5
  br label %2187

2187:                                             ; preds = %2184, %2172
  call void @llvm.lifetime.end.p0(i64 192, ptr %157) #11
  br label %2189

2188:                                             ; preds = %2164, %2137
  call void @llvm.lifetime.end.p0(i64 192, ptr %157) #11
  br label %2190

2189:                                             ; preds = %2187, %2127, %2119
  call void @llvm.lifetime.end.p0(i64 8, ptr %156) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %155) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %153) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %152) #11
  br label %2778

2190:                                             ; preds = %2188, %2115
  call void @llvm.lifetime.end.p0(i64 8, ptr %156) #11
  br label %2191

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

2192:                                             ; preds = %2191, %2051, %2032
  call void @llvm.lifetime.end.p0(i64 8, ptr %153) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %152) #11
  br label %2782

2193:                                             ; preds = %1136
  %2194 = load ptr, ptr @stdout, align 8, !tbaa !9
  %2195 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %2194, ptr noundef @.str.16) #11
  call void @llvm.lifetime.start.p0(i64 8, ptr %162) #11
  %2196 = invoke i64 @libxsmm_timer_tick()
          to label %2197 unwind label %2203

2197:                                             ; preds = %2193
  store i64 %2196, ptr %162, align 8, !tbaa !43
  call void @llvm.lifetime.start.p0(i64 4, ptr %163) #11
  store i32 0, ptr %163, align 4, !tbaa !5
  br label %2198

2198:                                             ; preds = %2252, %2197
  %2199 = load i32, ptr %163, align 4, !tbaa !5
  %2200 = load i32, ptr %12, align 4, !tbaa !5
  %2201 = icmp slt i32 %2199, %2200
  br i1 %2201, label %2207, label %2202

2202:                                             ; preds = %2198
  store i32 119, ptr %108, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %163) #11
  br label %2255

2203:                                             ; preds = %2193
  %2204 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %2205 = extractvalue { ptr, i32 } %2204, 0
  store ptr %2205, ptr %33, align 8
  %2206 = extractvalue { ptr, i32 } %2204, 1
  store i32 %2206, ptr %34, align 4
  br label %2334

2207:                                             ; preds = %2198
  call void @llvm.lifetime.start.p0(i64 4, ptr %164) #11
  store i32 0, ptr %164, align 4, !tbaa !5
  br label %2208

2208:                                             ; preds = %2239, %2207
  %2209 = load i32, ptr %164, align 4, !tbaa !5
  %2210 = load i32, ptr %24, align 4, !tbaa !5
  %2211 = icmp slt i32 %2209, %2210
  br i1 %2211, label %2213, label %2212

2212:                                             ; preds = %2208
  store i32 122, ptr %108, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %164) #11
  br label %2251

2213:                                             ; preds = %2208
  call void @llvm.lifetime.start.p0(i64 4, ptr %165) #11
  store i32 0, ptr %165, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %166) #11
  %2214 = load ptr, ptr %35, align 8, !tbaa !9
  %2215 = load i32, ptr %20, align 4, !tbaa !5
  %2216 = sext i32 %2215 to i64
  %2217 = load i32, ptr %164, align 4, !tbaa !5
  %2218 = invoke noundef i32 @_ZZ4mainENK4raii7shuffleEi(ptr noundef nonnull align 8 dereferenceable(48) %32, i32 noundef %2217)
          to label %2219 unwind label %2242

2219:                                             ; preds = %2213
  %2220 = sext i32 %2218 to i64
  %2221 = mul i64 %2216, %2220
  %2222 = getelementptr inbounds double, ptr %2214, i64 %2221
  store ptr %2222, ptr %166, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %167) #11
  %2223 = load ptr, ptr %36, align 8, !tbaa !9
  %2224 = load i32, ptr %21, align 4, !tbaa !5
  %2225 = sext i32 %2224 to i64
  %2226 = load i32, ptr %164, align 4, !tbaa !5
  %2227 = invoke noundef i32 @_ZZ4mainENK4raii7shuffleEi(ptr noundef nonnull align 8 dereferenceable(48) %32, i32 noundef %2226)
          to label %2228 unwind label %2246

2228:                                             ; preds = %2219
  %2229 = sext i32 %2227 to i64
  %2230 = mul i64 %2225, %2229
  %2231 = getelementptr inbounds double, ptr %2223, i64 %2230
  store ptr %2231, ptr %167, align 8, !tbaa !9
  %2232 = load ptr, ptr %166, align 8, !tbaa !9
  %2233 = load ptr, ptr %167, align 8, !tbaa !9
  %2234 = load ptr, ptr %37, align 8, !tbaa !9
  %2235 = load i32, ptr %165, align 4, !tbaa !5
  %2236 = sext i32 %2235 to i64
  %2237 = getelementptr inbounds double, ptr %2234, i64 %2236
  invoke void @_ZNK18libxsmm_mmfunctionIddLin1EEclEPKdS2_Pd(ptr noundef nonnull align 8 dereferenceable(8) %96, ptr noundef %2232, ptr noundef %2233, ptr noundef %2237)
          to label %2238 unwind label %2246

2238:                                             ; preds = %2228
  call void @llvm.lifetime.end.p0(i64 8, ptr %167) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %166) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %165) #11
  br label %2239

2239:                                             ; preds = %2238
  %2240 = load i32, ptr %164, align 4, !tbaa !5
  %2241 = add nsw i32 %2240, 1
  store i32 %2241, ptr %164, align 4, !tbaa !5
  br label %2208, !llvm.loop !64

2242:                                             ; preds = %2213
  %2243 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %2244 = extractvalue { ptr, i32 } %2243, 0
  store ptr %2244, ptr %33, align 8
  %2245 = extractvalue { ptr, i32 } %2243, 1
  store i32 %2245, ptr %34, align 4
  br label %2250

2246:                                             ; preds = %2228, %2219
  %2247 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %2248 = extractvalue { ptr, i32 } %2247, 0
  store ptr %2248, ptr %33, align 8
  %2249 = extractvalue { ptr, i32 } %2247, 1
  store i32 %2249, ptr %34, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %167) #11
  br label %2250

2250:                                             ; preds = %2246, %2242
  call void @llvm.lifetime.end.p0(i64 8, ptr %166) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %165) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %164) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %163) #11
  br label %2334

2251:                                             ; preds = %2212
  br label %2252

2252:                                             ; preds = %2251
  %2253 = load i32, ptr %163, align 4, !tbaa !5
  %2254 = add nsw i32 %2253, 1
  store i32 %2254, ptr %163, align 4, !tbaa !5
  br label %2198, !llvm.loop !65

2255:                                             ; preds = %2202
  call void @llvm.lifetime.start.p0(i64 8, ptr %168) #11
  %2256 = load i64, ptr %162, align 8, !tbaa !43
  %2257 = invoke i64 @libxsmm_timer_tick()
          to label %2258 unwind label %2312

2258:                                             ; preds = %2255
  %2259 = invoke noundef i64 @_Z21libxsmm_timer_ncyclesyy(i64 noundef %2256, i64 noundef %2257)
          to label %2260 unwind label %2312

2260:                                             ; preds = %2258
  store i64 %2259, ptr %168, align 8, !tbaa !43
  call void @llvm.lifetime.start.p0(i64 8, ptr %169) #11
  %2261 = load i64, ptr %168, align 8, !tbaa !43
  %2262 = invoke double @libxsmm_timer_duration(i64 noundef 0, i64 noundef %2261)
          to label %2263 unwind label %2316

2263:                                             ; preds = %2260
  %2264 = load i32, ptr %12, align 4, !tbaa !5
  %2265 = sitofp i32 %2264 to double
  %2266 = fdiv double %2262, %2265
  store double %2266, ptr %169, align 8, !tbaa !12
  %2267 = load double, ptr %169, align 8, !tbaa !12
  %2268 = fcmp olt double 0.000000e+00, %2267
  br i1 %2268, label %2269, label %2320

2269:                                             ; preds = %2263
  %2270 = load i64, ptr %168, align 8, !tbaa !43
  %2271 = icmp ne i64 0, %2270
  br i1 %2271, label %2272, label %2320

2272:                                             ; preds = %2269
  %2273 = load ptr, ptr @stdout, align 8, !tbaa !9
  %2274 = load i32, ptr %9, align 4, !tbaa !5
  %2275 = sitofp i32 %2274 to double
  %2276 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %2275, double -1.000000e+00)
  %2277 = load i32, ptr %24, align 4, !tbaa !5
  %2278 = sitofp i32 %2277 to double
  %2279 = load i32, ptr %8, align 4, !tbaa !5
  %2280 = sitofp i32 %2279 to double
  %2281 = fmul double %2278, %2280
  %2282 = load i32, ptr %10, align 4, !tbaa !5
  %2283 = sitofp i32 %2282 to double
  %2284 = fmul double %2281, %2283
  %2285 = fmul double %2276, %2284
  %2286 = load i64, ptr %168, align 8, !tbaa !43
  %2287 = uitofp i64 %2286 to double
  %2288 = fdiv double %2285, %2287
  %2289 = getelementptr inbounds [6 x i8], ptr %28, i64 0, i64 0
  %2290 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %2273, ptr noundef @.str.5, double noundef %2288, ptr noundef %2289) #11
  %2291 = load ptr, ptr @stdout, align 8, !tbaa !9
  %2292 = load double, ptr %27, align 8, !tbaa !12
  %2293 = load double, ptr %169, align 8, !tbaa !12
  %2294 = fdiv double %2292, %2293
  %2295 = getelementptr inbounds [6 x i8], ptr %28, i64 0, i64 0
  %2296 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %2291, ptr noundef @.str.6, double noundef %2294, ptr noundef %2295) #11
  %2297 = load ptr, ptr @stdout, align 8, !tbaa !9
  %2298 = load i32, ptr %24, align 4, !tbaa !5
  %2299 = sext i32 %2298 to i64
  %2300 = load i64, ptr %26, align 8, !tbaa !14
  %2301 = load i32, ptr %22, align 4, !tbaa !5
  %2302 = sext i32 %2301 to i64
  %2303 = mul i64 8, %2302
  %2304 = mul i64 %2303, 2
  %2305 = sub i64 %2300, %2304
  %2306 = mul i64 %2299, %2305
  %2307 = uitofp i64 %2306 to double
  %2308 = load double, ptr %169, align 8, !tbaa !12
  %2309 = fmul double %2308, 0x41D0000000000000
  %2310 = fdiv double %2307, %2309
  %2311 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %2297, ptr noundef @.str.7, double noundef %2310) #11
  br label %2320

2312:                                             ; preds = %2258, %2255
  %2313 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %2314 = extractvalue { ptr, i32 } %2313, 0
  store ptr %2314, ptr %33, align 8
  %2315 = extractvalue { ptr, i32 } %2313, 1
  store i32 %2315, ptr %34, align 4
  br label %2333

2316:                                             ; preds = %2260
  %2317 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %2318 = extractvalue { ptr, i32 } %2317, 0
  store ptr %2318, ptr %33, align 8
  %2319 = extractvalue { ptr, i32 } %2317, 1
  store i32 %2319, ptr %34, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %169) #11
  br label %2333

2320:                                             ; preds = %2272, %2269, %2263
  %2321 = load ptr, ptr @stdout, align 8, !tbaa !9
  %2322 = load double, ptr %169, align 8, !tbaa !12
  %2323 = fmul double 1.000000e+03, %2322
  %2324 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %2321, ptr noundef @.str.8, double noundef %2323) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %169) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %168) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %162) #11
  br label %2325

2325:                                             ; preds = %2320, %1136
  %2326 = load ptr, ptr @stdout, align 8, !tbaa !9
  %2327 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %2326, ptr noundef @.str.17) #11
  call void @llvm.lifetime.start.p0(i64 4, ptr %170) #11
  store i32 0, ptr %170, align 4, !tbaa !5
  br label %2328

2328:                                             ; preds = %2367, %2325
  %2329 = load i32, ptr %170, align 4, !tbaa !5
  %2330 = load i32, ptr %24, align 4, !tbaa !5
  %2331 = icmp slt i32 %2329, %2330
  br i1 %2331, label %2335, label %2332

2332:                                             ; preds = %2328
  store i32 125, ptr %108, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %170) #11
  br label %2374

2333:                                             ; preds = %2316, %2312
  call void @llvm.lifetime.end.p0(i64 8, ptr %168) #11
  br label %2334

2334:                                             ; preds = %2333, %2250, %2203
  call void @llvm.lifetime.end.p0(i64 8, ptr %162) #11
  br label %2782

2335:                                             ; preds = %2328
  %2336 = load ptr, ptr %35, align 8, !tbaa !9
  %2337 = load i32, ptr %20, align 4, !tbaa !5
  %2338 = sext i32 %2337 to i64
  %2339 = load i32, ptr %170, align 4, !tbaa !5
  %2340 = invoke noundef i32 @_ZZ4mainENK4raii7shuffleEi(ptr noundef nonnull align 8 dereferenceable(48) %32, i32 noundef %2339)
          to label %2341 unwind label %2370

2341:                                             ; preds = %2335
  %2342 = sext i32 %2340 to i64
  %2343 = mul i64 %2338, %2342
  %2344 = getelementptr inbounds double, ptr %2336, i64 %2343
  %2345 = load ptr, ptr %103, align 8, !tbaa !9
  %2346 = load i32, ptr %170, align 4, !tbaa !5
  %2347 = sext i32 %2346 to i64
  %2348 = getelementptr inbounds ptr, ptr %2345, i64 %2347
  store ptr %2344, ptr %2348, align 8, !tbaa !9
  %2349 = load ptr, ptr %36, align 8, !tbaa !9
  %2350 = load i32, ptr %21, align 4, !tbaa !5
  %2351 = sext i32 %2350 to i64
  %2352 = load i32, ptr %170, align 4, !tbaa !5
  %2353 = invoke noundef i32 @_ZZ4mainENK4raii7shuffleEi(ptr noundef nonnull align 8 dereferenceable(48) %32, i32 noundef %2352)
          to label %2354 unwind label %2370

2354:                                             ; preds = %2341
  %2355 = sext i32 %2353 to i64
  %2356 = mul i64 %2351, %2355
  %2357 = getelementptr inbounds double, ptr %2349, i64 %2356
  %2358 = load ptr, ptr %104, align 8, !tbaa !9
  %2359 = load i32, ptr %170, align 4, !tbaa !5
  %2360 = sext i32 %2359 to i64
  %2361 = getelementptr inbounds ptr, ptr %2358, i64 %2360
  store ptr %2357, ptr %2361, align 8, !tbaa !9
  %2362 = load ptr, ptr %38, align 8, !tbaa !9
  %2363 = load ptr, ptr %105, align 8, !tbaa !9
  %2364 = load i32, ptr %170, align 4, !tbaa !5
  %2365 = sext i32 %2364 to i64
  %2366 = getelementptr inbounds ptr, ptr %2363, i64 %2365
  store ptr %2362, ptr %2366, align 8, !tbaa !9
  br label %2367

2367:                                             ; preds = %2354
  %2368 = load i32, ptr %170, align 4, !tbaa !5
  %2369 = add nsw i32 %2368, 1
  store i32 %2369, ptr %170, align 4, !tbaa !5
  br label %2328, !llvm.loop !66

2370:                                             ; preds = %2341, %2335
  %2371 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %2372 = extractvalue { ptr, i32 } %2371, 0
  store ptr %2372, ptr %33, align 8
  %2373 = extractvalue { ptr, i32 } %2371, 1
  store i32 %2373, ptr %34, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %170) #11
  br label %2782

2374:                                             ; preds = %2332
  call void @llvm.lifetime.start.p0(i64 4, ptr %171) #11
  store i32 8, ptr %171, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %172) #11
  %2375 = invoke i64 @libxsmm_timer_tick()
          to label %2376 unwind label %2382

2376:                                             ; preds = %2374
  store i64 %2375, ptr %172, align 8, !tbaa !43
  call void @llvm.lifetime.start.p0(i64 4, ptr %173) #11
  store i32 0, ptr %173, align 4, !tbaa !5
  br label %2377

2377:                                             ; preds = %2406, %2376
  %2378 = load i32, ptr %173, align 4, !tbaa !5
  %2379 = load i32, ptr %12, align 4, !tbaa !5
  %2380 = icmp slt i32 %2378, %2379
  br i1 %2380, label %2386, label %2381

2381:                                             ; preds = %2377
  store i32 128, ptr %108, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %173) #11
  br label %2413

2382:                                             ; preds = %2374
  %2383 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %2384 = extractvalue { ptr, i32 } %2383, 0
  store ptr %2384, ptr %33, align 8
  %2385 = extractvalue { ptr, i32 } %2383, 1
  store i32 %2385, ptr %34, align 4
  br label %2518

2386:                                             ; preds = %2377
  %2387 = load i32, ptr %8, align 4, !tbaa !5
  %2388 = load i32, ptr %10, align 4, !tbaa !5
  %2389 = load i32, ptr %9, align 4, !tbaa !5
  %2390 = load ptr, ptr %103, align 8, !tbaa !9
  %2391 = getelementptr inbounds ptr, ptr %2390, i64 0
  %2392 = load ptr, ptr %104, align 8, !tbaa !9
  %2393 = getelementptr inbounds ptr, ptr %2392, i64 0
  %2394 = load ptr, ptr %105, align 8, !tbaa !9
  %2395 = getelementptr inbounds ptr, ptr %2394, i64 0
  %2396 = load i32, ptr %31, align 4, !tbaa !5
  %2397 = icmp eq i32 0, %2396
  br i1 %2397, label %2398, label %2401

2398:                                             ; preds = %2386
  %2399 = load i32, ptr %24, align 4, !tbaa !5
  %2400 = sub nsw i32 0, %2399
  br label %2403

2401:                                             ; preds = %2386
  %2402 = load i32, ptr %24, align 4, !tbaa !5
  br label %2403

2403:                                             ; preds = %2401, %2398
  %2404 = phi i32 [ %2400, %2398 ], [ %2402, %2401 ]
  invoke void @libxsmm_gemm_batch(i32 noundef 0, i32 noundef 0, ptr noundef %16, ptr noundef %17, i32 noundef %2387, i32 noundef %2388, i32 noundef %2389, ptr noundef %18, ptr noundef %2391, ptr noundef %13, ptr noundef %171, ptr noundef %2393, ptr noundef %14, ptr noundef %171, ptr noundef %19, ptr noundef %2395, ptr noundef %15, ptr noundef %171, i32 noundef 0, i32 noundef 0, i32 noundef %2404, i32 noundef 0)
          to label %2405 unwind label %2409

2405:                                             ; preds = %2403
  br label %2406

2406:                                             ; preds = %2405
  %2407 = load i32, ptr %173, align 4, !tbaa !5
  %2408 = add nsw i32 %2407, 1
  store i32 %2408, ptr %173, align 4, !tbaa !5
  br label %2377, !llvm.loop !67

2409:                                             ; preds = %2403
  %2410 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %2411 = extractvalue { ptr, i32 } %2410, 0
  store ptr %2411, ptr %33, align 8
  %2412 = extractvalue { ptr, i32 } %2410, 1
  store i32 %2412, ptr %34, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %173) #11
  br label %2518

2413:                                             ; preds = %2381
  call void @llvm.lifetime.start.p0(i64 8, ptr %174) #11
  %2414 = load i64, ptr %172, align 8, !tbaa !43
  %2415 = invoke i64 @libxsmm_timer_tick()
          to label %2416 unwind label %2470

2416:                                             ; preds = %2413
  %2417 = invoke noundef i64 @_Z21libxsmm_timer_ncyclesyy(i64 noundef %2414, i64 noundef %2415)
          to label %2418 unwind label %2470

2418:                                             ; preds = %2416
  store i64 %2417, ptr %174, align 8, !tbaa !43
  call void @llvm.lifetime.start.p0(i64 8, ptr %175) #11
  %2419 = load i64, ptr %174, align 8, !tbaa !43
  %2420 = invoke double @libxsmm_timer_duration(i64 noundef 0, i64 noundef %2419)
          to label %2421 unwind label %2474

2421:                                             ; preds = %2418
  %2422 = load i32, ptr %12, align 4, !tbaa !5
  %2423 = sitofp i32 %2422 to double
  %2424 = fdiv double %2420, %2423
  store double %2424, ptr %175, align 8, !tbaa !12
  %2425 = load double, ptr %175, align 8, !tbaa !12
  %2426 = fcmp olt double 0.000000e+00, %2425
  br i1 %2426, label %2427, label %2478

2427:                                             ; preds = %2421
  %2428 = load i64, ptr %174, align 8, !tbaa !43
  %2429 = icmp ne i64 0, %2428
  br i1 %2429, label %2430, label %2478

2430:                                             ; preds = %2427
  %2431 = load ptr, ptr @stdout, align 8, !tbaa !9
  %2432 = load i32, ptr %9, align 4, !tbaa !5
  %2433 = sitofp i32 %2432 to double
  %2434 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %2433, double -1.000000e+00)
  %2435 = load i32, ptr %24, align 4, !tbaa !5
  %2436 = sitofp i32 %2435 to double
  %2437 = load i32, ptr %8, align 4, !tbaa !5
  %2438 = sitofp i32 %2437 to double
  %2439 = fmul double %2436, %2438
  %2440 = load i32, ptr %10, align 4, !tbaa !5
  %2441 = sitofp i32 %2440 to double
  %2442 = fmul double %2439, %2441
  %2443 = fmul double %2434, %2442
  %2444 = load i64, ptr %174, align 8, !tbaa !43
  %2445 = uitofp i64 %2444 to double
  %2446 = fdiv double %2443, %2445
  %2447 = getelementptr inbounds [6 x i8], ptr %28, i64 0, i64 0
  %2448 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %2431, ptr noundef @.str.5, double noundef %2446, ptr noundef %2447) #11
  %2449 = load ptr, ptr @stdout, align 8, !tbaa !9
  %2450 = load double, ptr %27, align 8, !tbaa !12
  %2451 = load double, ptr %175, align 8, !tbaa !12
  %2452 = fdiv double %2450, %2451
  %2453 = getelementptr inbounds [6 x i8], ptr %28, i64 0, i64 0
  %2454 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %2449, ptr noundef @.str.6, double noundef %2452, ptr noundef %2453) #11
  %2455 = load ptr, ptr @stdout, align 8, !tbaa !9
  %2456 = load i32, ptr %24, align 4, !tbaa !5
  %2457 = sext i32 %2456 to i64
  %2458 = load i64, ptr %26, align 8, !tbaa !14
  %2459 = load i32, ptr %22, align 4, !tbaa !5
  %2460 = sext i32 %2459 to i64
  %2461 = mul i64 8, %2460
  %2462 = mul i64 %2461, 2
  %2463 = sub i64 %2458, %2462
  %2464 = mul i64 %2457, %2463
  %2465 = uitofp i64 %2464 to double
  %2466 = load double, ptr %175, align 8, !tbaa !12
  %2467 = fmul double %2466, 0x41D0000000000000
  %2468 = fdiv double %2465, %2467
  %2469 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %2455, ptr noundef @.str.7, double noundef %2468) #11
  br label %2478

2470:                                             ; preds = %2416, %2413
  %2471 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %2472 = extractvalue { ptr, i32 } %2471, 0
  store ptr %2472, ptr %33, align 8
  %2473 = extractvalue { ptr, i32 } %2471, 1
  store i32 %2473, ptr %34, align 4
  br label %2517

2474:                                             ; preds = %2418
  %2475 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %2476 = extractvalue { ptr, i32 } %2475, 0
  store ptr %2476, ptr %33, align 8
  %2477 = extractvalue { ptr, i32 } %2475, 1
  store i32 %2477, ptr %34, align 4
  br label %2516

2478:                                             ; preds = %2430, %2427, %2421
  %2479 = load ptr, ptr @stdout, align 8, !tbaa !9
  %2480 = load double, ptr %175, align 8, !tbaa !12
  %2481 = fmul double 1.000000e+03, %2480
  %2482 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %2479, ptr noundef @.str.8, double noundef %2481) #11
  %2483 = load i32, ptr %7, align 4, !tbaa !5
  %2484 = and i32 %2483, 1
  %2485 = icmp eq i32 0, %2484
  br i1 %2485, label %2486, label %2515

2486:                                             ; preds = %2478
  %2487 = load i32, ptr %31, align 4, !tbaa !5
  %2488 = icmp ne i32 0, %2487
  br i1 %2488, label %2489, label %2515

2489:                                             ; preds = %2486
  call void @llvm.lifetime.start.p0(i64 192, ptr %176) #11
  %2490 = load i32, ptr %8, align 4, !tbaa !5
  %2491 = load i32, ptr %10, align 4, !tbaa !5
  %2492 = load ptr, ptr %37, align 8, !tbaa !9
  %2493 = load ptr, ptr %38, align 8, !tbaa !9
  %2494 = invoke i32 @libxsmm_matdiff(ptr noundef %176, i32 noundef 0, i32 noundef %2490, i32 noundef %2491, ptr noundef %2492, ptr noundef %2493, ptr noundef %15, ptr noundef %15)
          to label %2495 unwind label %2510

2495:                                             ; preds = %2489
  store i32 %2494, ptr %6, align 4, !tbaa !5
  %2496 = load ptr, ptr @stdout, align 8, !tbaa !9
  %2497 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %176, i32 0, i32 7
  %2498 = load double, ptr %2497, align 8, !tbaa !50
  %2499 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %176, i32 0, i32 5
  %2500 = load double, ptr %2499, align 8, !tbaa !52
  %2501 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %2496, ptr noundef @.str.10, double noundef %2498, double noundef %2500) #11
  %2502 = load i32, ptr %31, align 4, !tbaa !5
  %2503 = sitofp i32 %2502 to double
  %2504 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %176, i32 0, i32 8
  %2505 = load double, ptr %2504, align 8, !tbaa !53
  %2506 = fcmp olt double %2503, %2505
  br i1 %2506, label %2507, label %2514

2507:                                             ; preds = %2495
  %2508 = load ptr, ptr @stderr, align 8, !tbaa !9
  %2509 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %2508, ptr noundef @.str.11) #11
  store i32 1, ptr %6, align 4, !tbaa !5
  br label %2514

2510:                                             ; preds = %2489
  %2511 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %2512 = extractvalue { ptr, i32 } %2511, 0
  store ptr %2512, ptr %33, align 8
  %2513 = extractvalue { ptr, i32 } %2511, 1
  store i32 %2513, ptr %34, align 4
  call void @llvm.lifetime.end.p0(i64 192, ptr %176) #11
  br label %2516

2514:                                             ; preds = %2507, %2495
  call void @llvm.lifetime.end.p0(i64 192, ptr %176) #11
  br label %2515

2515:                                             ; preds = %2514, %2486, %2478
  call void @llvm.lifetime.end.p0(i64 8, ptr %175) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %174) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %172) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %171) #11
  br label %2778

2516:                                             ; preds = %2510, %2474
  call void @llvm.lifetime.end.p0(i64 8, ptr %175) #11
  br label %2517

2517:                                             ; preds = %2516, %2470
  call void @llvm.lifetime.end.p0(i64 8, ptr %174) #11
  br label %2518

2518:                                             ; preds = %2517, %2409, %2382
  call void @llvm.lifetime.end.p0(i64 8, ptr %172) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %171) #11
  br label %2782

2519:                                             ; preds = %1136
  %2520 = load ptr, ptr @stdout, align 8, !tbaa !9
  %2521 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %2520, ptr noundef @.str.18) #11
  call void @llvm.lifetime.start.p0(i64 8, ptr %177) #11
  %2522 = invoke i64 @libxsmm_timer_tick()
          to label %2523 unwind label %2529

2523:                                             ; preds = %2519
  store i64 %2522, ptr %177, align 8, !tbaa !43
  call void @llvm.lifetime.start.p0(i64 4, ptr %178) #11
  store i32 0, ptr %178, align 4, !tbaa !5
  br label %2524

2524:                                             ; preds = %2555, %2523
  %2525 = load i32, ptr %178, align 4, !tbaa !5
  %2526 = load i32, ptr %12, align 4, !tbaa !5
  %2527 = icmp slt i32 %2525, %2526
  br i1 %2527, label %2533, label %2528

2528:                                             ; preds = %2524
  store i32 131, ptr %108, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %178) #11
  br label %2558

2529:                                             ; preds = %2519
  %2530 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %2531 = extractvalue { ptr, i32 } %2530, 0
  store ptr %2531, ptr %33, align 8
  %2532 = extractvalue { ptr, i32 } %2530, 1
  store i32 %2532, ptr %34, align 4
  br label %2622

2533:                                             ; preds = %2524
  call void @llvm.lifetime.start.p0(i64 4, ptr %179) #11
  store i32 0, ptr %179, align 4, !tbaa !5
  br label %2534

2534:                                             ; preds = %2547, %2533
  %2535 = load i32, ptr %179, align 4, !tbaa !5
  %2536 = load i32, ptr %24, align 4, !tbaa !5
  %2537 = icmp slt i32 %2535, %2536
  br i1 %2537, label %2539, label %2538

2538:                                             ; preds = %2534
  store i32 134, ptr %108, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %179) #11
  br label %2554

2539:                                             ; preds = %2534
  call void @llvm.lifetime.start.p0(i64 4, ptr %180) #11
  store i32 0, ptr %180, align 4, !tbaa !5
  %2540 = load ptr, ptr %35, align 8, !tbaa !9
  %2541 = load ptr, ptr %36, align 8, !tbaa !9
  %2542 = load ptr, ptr %37, align 8, !tbaa !9
  %2543 = load i32, ptr %180, align 4, !tbaa !5
  %2544 = sext i32 %2543 to i64
  %2545 = getelementptr inbounds double, ptr %2542, i64 %2544
  invoke void @_ZNK18libxsmm_mmfunctionIddLin1EEclEPKdS2_Pd(ptr noundef nonnull align 8 dereferenceable(8) %96, ptr noundef %2540, ptr noundef %2541, ptr noundef %2545)
          to label %2546 unwind label %2550

2546:                                             ; preds = %2539
  call void @llvm.lifetime.end.p0(i64 4, ptr %180) #11
  br label %2547

2547:                                             ; preds = %2546
  %2548 = load i32, ptr %179, align 4, !tbaa !5
  %2549 = add nsw i32 %2548, 1
  store i32 %2549, ptr %179, align 4, !tbaa !5
  br label %2534, !llvm.loop !68

2550:                                             ; preds = %2539
  %2551 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %2552 = extractvalue { ptr, i32 } %2551, 0
  store ptr %2552, ptr %33, align 8
  %2553 = extractvalue { ptr, i32 } %2551, 1
  store i32 %2553, ptr %34, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %180) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %179) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %178) #11
  br label %2622

2554:                                             ; preds = %2538
  br label %2555

2555:                                             ; preds = %2554
  %2556 = load i32, ptr %178, align 4, !tbaa !5
  %2557 = add nsw i32 %2556, 1
  store i32 %2557, ptr %178, align 4, !tbaa !5
  br label %2524, !llvm.loop !69

2558:                                             ; preds = %2528
  call void @llvm.lifetime.start.p0(i64 8, ptr %181) #11
  %2559 = load i64, ptr %177, align 8, !tbaa !43
  %2560 = invoke i64 @libxsmm_timer_tick()
          to label %2561 unwind label %2600

2561:                                             ; preds = %2558
  %2562 = invoke noundef i64 @_Z21libxsmm_timer_ncyclesyy(i64 noundef %2559, i64 noundef %2560)
          to label %2563 unwind label %2600

2563:                                             ; preds = %2561
  store i64 %2562, ptr %181, align 8, !tbaa !43
  call void @llvm.lifetime.start.p0(i64 8, ptr %182) #11
  %2564 = load i64, ptr %181, align 8, !tbaa !43
  %2565 = invoke double @libxsmm_timer_duration(i64 noundef 0, i64 noundef %2564)
          to label %2566 unwind label %2604

2566:                                             ; preds = %2563
  %2567 = load i32, ptr %12, align 4, !tbaa !5
  %2568 = sitofp i32 %2567 to double
  %2569 = fdiv double %2565, %2568
  store double %2569, ptr %182, align 8, !tbaa !12
  %2570 = load double, ptr %182, align 8, !tbaa !12
  %2571 = fcmp olt double 0.000000e+00, %2570
  br i1 %2571, label %2572, label %2608

2572:                                             ; preds = %2566
  %2573 = load i64, ptr %181, align 8, !tbaa !43
  %2574 = icmp ne i64 0, %2573
  br i1 %2574, label %2575, label %2608

2575:                                             ; preds = %2572
  %2576 = load ptr, ptr @stdout, align 8, !tbaa !9
  %2577 = load i32, ptr %9, align 4, !tbaa !5
  %2578 = sitofp i32 %2577 to double
  %2579 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %2578, double -1.000000e+00)
  %2580 = load i32, ptr %24, align 4, !tbaa !5
  %2581 = sitofp i32 %2580 to double
  %2582 = load i32, ptr %8, align 4, !tbaa !5
  %2583 = sitofp i32 %2582 to double
  %2584 = fmul double %2581, %2583
  %2585 = load i32, ptr %10, align 4, !tbaa !5
  %2586 = sitofp i32 %2585 to double
  %2587 = fmul double %2584, %2586
  %2588 = fmul double %2579, %2587
  %2589 = load i64, ptr %181, align 8, !tbaa !43
  %2590 = uitofp i64 %2589 to double
  %2591 = fdiv double %2588, %2590
  %2592 = getelementptr inbounds [6 x i8], ptr %28, i64 0, i64 0
  %2593 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %2576, ptr noundef @.str.5, double noundef %2591, ptr noundef %2592) #11
  %2594 = load ptr, ptr @stdout, align 8, !tbaa !9
  %2595 = load double, ptr %27, align 8, !tbaa !12
  %2596 = load double, ptr %182, align 8, !tbaa !12
  %2597 = fdiv double %2595, %2596
  %2598 = getelementptr inbounds [6 x i8], ptr %28, i64 0, i64 0
  %2599 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %2594, ptr noundef @.str.6, double noundef %2597, ptr noundef %2598) #11
  br label %2608

2600:                                             ; preds = %2561, %2558
  %2601 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %2602 = extractvalue { ptr, i32 } %2601, 0
  store ptr %2602, ptr %33, align 8
  %2603 = extractvalue { ptr, i32 } %2601, 1
  store i32 %2603, ptr %34, align 4
  br label %2621

2604:                                             ; preds = %2563
  %2605 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %2606 = extractvalue { ptr, i32 } %2605, 0
  store ptr %2606, ptr %33, align 8
  %2607 = extractvalue { ptr, i32 } %2605, 1
  store i32 %2607, ptr %34, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %182) #11
  br label %2621

2608:                                             ; preds = %2575, %2572, %2566
  %2609 = load ptr, ptr @stdout, align 8, !tbaa !9
  %2610 = load double, ptr %182, align 8, !tbaa !12
  %2611 = fmul double 1.000000e+03, %2610
  %2612 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %2609, ptr noundef @.str.8, double noundef %2611) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %182) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %181) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %177) #11
  br label %2613

2613:                                             ; preds = %2608, %1136
  %2614 = load ptr, ptr @stdout, align 8, !tbaa !9
  %2615 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %2614, ptr noundef @.str.19) #11
  call void @llvm.lifetime.start.p0(i64 4, ptr %183) #11
  store i32 0, ptr %183, align 4, !tbaa !5
  br label %2616

2616:                                             ; preds = %2639, %2613
  %2617 = load i32, ptr %183, align 4, !tbaa !5
  %2618 = load i32, ptr %24, align 4, !tbaa !5
  %2619 = icmp slt i32 %2617, %2618
  br i1 %2619, label %2623, label %2620

2620:                                             ; preds = %2616
  store i32 137, ptr %108, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %183) #11
  br label %2642

2621:                                             ; preds = %2604, %2600
  call void @llvm.lifetime.end.p0(i64 8, ptr %181) #11
  br label %2622

2622:                                             ; preds = %2621, %2550, %2529
  call void @llvm.lifetime.end.p0(i64 8, ptr %177) #11
  br label %2782

2623:                                             ; preds = %2616
  %2624 = load ptr, ptr %35, align 8, !tbaa !9
  %2625 = load ptr, ptr %103, align 8, !tbaa !9
  %2626 = load i32, ptr %183, align 4, !tbaa !5
  %2627 = sext i32 %2626 to i64
  %2628 = getelementptr inbounds ptr, ptr %2625, i64 %2627
  store ptr %2624, ptr %2628, align 8, !tbaa !9
  %2629 = load ptr, ptr %36, align 8, !tbaa !9
  %2630 = load ptr, ptr %104, align 8, !tbaa !9
  %2631 = load i32, ptr %183, align 4, !tbaa !5
  %2632 = sext i32 %2631 to i64
  %2633 = getelementptr inbounds ptr, ptr %2630, i64 %2632
  store ptr %2629, ptr %2633, align 8, !tbaa !9
  %2634 = load ptr, ptr %38, align 8, !tbaa !9
  %2635 = load ptr, ptr %105, align 8, !tbaa !9
  %2636 = load i32, ptr %183, align 4, !tbaa !5
  %2637 = sext i32 %2636 to i64
  %2638 = getelementptr inbounds ptr, ptr %2635, i64 %2637
  store ptr %2634, ptr %2638, align 8, !tbaa !9
  br label %2639

2639:                                             ; preds = %2623
  %2640 = load i32, ptr %183, align 4, !tbaa !5
  %2641 = add nsw i32 %2640, 1
  store i32 %2641, ptr %183, align 4, !tbaa !5
  br label %2616, !llvm.loop !70

2642:                                             ; preds = %2620
  call void @llvm.lifetime.start.p0(i64 4, ptr %184) #11
  store i32 8, ptr %184, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %185) #11
  %2643 = invoke i64 @libxsmm_timer_tick()
          to label %2644 unwind label %2650

2644:                                             ; preds = %2642
  store i64 %2643, ptr %185, align 8, !tbaa !43
  call void @llvm.lifetime.start.p0(i64 4, ptr %186) #11
  store i32 0, ptr %186, align 4, !tbaa !5
  br label %2645

2645:                                             ; preds = %2674, %2644
  %2646 = load i32, ptr %186, align 4, !tbaa !5
  %2647 = load i32, ptr %12, align 4, !tbaa !5
  %2648 = icmp slt i32 %2646, %2647
  br i1 %2648, label %2654, label %2649

2649:                                             ; preds = %2645
  store i32 140, ptr %108, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %186) #11
  br label %2681

2650:                                             ; preds = %2642
  %2651 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %2652 = extractvalue { ptr, i32 } %2651, 0
  store ptr %2652, ptr %33, align 8
  %2653 = extractvalue { ptr, i32 } %2651, 1
  store i32 %2653, ptr %34, align 4
  br label %2771

2654:                                             ; preds = %2645
  %2655 = load i32, ptr %8, align 4, !tbaa !5
  %2656 = load i32, ptr %10, align 4, !tbaa !5
  %2657 = load i32, ptr %9, align 4, !tbaa !5
  %2658 = load ptr, ptr %103, align 8, !tbaa !9
  %2659 = getelementptr inbounds ptr, ptr %2658, i64 0
  %2660 = load ptr, ptr %104, align 8, !tbaa !9
  %2661 = getelementptr inbounds ptr, ptr %2660, i64 0
  %2662 = load ptr, ptr %105, align 8, !tbaa !9
  %2663 = getelementptr inbounds ptr, ptr %2662, i64 0
  %2664 = load i32, ptr %31, align 4, !tbaa !5
  %2665 = icmp eq i32 0, %2664
  br i1 %2665, label %2666, label %2669

2666:                                             ; preds = %2654
  %2667 = load i32, ptr %24, align 4, !tbaa !5
  %2668 = sub nsw i32 0, %2667
  br label %2671

2669:                                             ; preds = %2654
  %2670 = load i32, ptr %24, align 4, !tbaa !5
  br label %2671

2671:                                             ; preds = %2669, %2666
  %2672 = phi i32 [ %2668, %2666 ], [ %2670, %2669 ]
  invoke void @libxsmm_gemm_batch(i32 noundef 0, i32 noundef 0, ptr noundef %16, ptr noundef %17, i32 noundef %2655, i32 noundef %2656, i32 noundef %2657, ptr noundef %18, ptr noundef %2659, ptr noundef %13, ptr noundef %184, ptr noundef %2661, ptr noundef %14, ptr noundef %184, ptr noundef %19, ptr noundef %2663, ptr noundef %15, ptr noundef %184, i32 noundef 0, i32 noundef 0, i32 noundef %2672, i32 noundef 0)
          to label %2673 unwind label %2677

2673:                                             ; preds = %2671
  br label %2674

2674:                                             ; preds = %2673
  %2675 = load i32, ptr %186, align 4, !tbaa !5
  %2676 = add nsw i32 %2675, 1
  store i32 %2676, ptr %186, align 4, !tbaa !5
  br label %2645, !llvm.loop !71

2677:                                             ; preds = %2671
  %2678 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %2679 = extractvalue { ptr, i32 } %2678, 0
  store ptr %2679, ptr %33, align 8
  %2680 = extractvalue { ptr, i32 } %2678, 1
  store i32 %2680, ptr %34, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %186) #11
  br label %2771

2681:                                             ; preds = %2649
  call void @llvm.lifetime.start.p0(i64 8, ptr %187) #11
  %2682 = load i64, ptr %185, align 8, !tbaa !43
  %2683 = invoke i64 @libxsmm_timer_tick()
          to label %2684 unwind label %2723

2684:                                             ; preds = %2681
  %2685 = invoke noundef i64 @_Z21libxsmm_timer_ncyclesyy(i64 noundef %2682, i64 noundef %2683)
          to label %2686 unwind label %2723

2686:                                             ; preds = %2684
  store i64 %2685, ptr %187, align 8, !tbaa !43
  call void @llvm.lifetime.start.p0(i64 8, ptr %188) #11
  %2687 = load i64, ptr %187, align 8, !tbaa !43
  %2688 = invoke double @libxsmm_timer_duration(i64 noundef 0, i64 noundef %2687)
          to label %2689 unwind label %2727

2689:                                             ; preds = %2686
  %2690 = load i32, ptr %12, align 4, !tbaa !5
  %2691 = sitofp i32 %2690 to double
  %2692 = fdiv double %2688, %2691
  store double %2692, ptr %188, align 8, !tbaa !12
  %2693 = load double, ptr %188, align 8, !tbaa !12
  %2694 = fcmp olt double 0.000000e+00, %2693
  br i1 %2694, label %2695, label %2731

2695:                                             ; preds = %2689
  %2696 = load i64, ptr %187, align 8, !tbaa !43
  %2697 = icmp ne i64 0, %2696
  br i1 %2697, label %2698, label %2731

2698:                                             ; preds = %2695
  %2699 = load ptr, ptr @stdout, align 8, !tbaa !9
  %2700 = load i32, ptr %9, align 4, !tbaa !5
  %2701 = sitofp i32 %2700 to double
  %2702 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %2701, double -1.000000e+00)
  %2703 = load i32, ptr %24, align 4, !tbaa !5
  %2704 = sitofp i32 %2703 to double
  %2705 = load i32, ptr %8, align 4, !tbaa !5
  %2706 = sitofp i32 %2705 to double
  %2707 = fmul double %2704, %2706
  %2708 = load i32, ptr %10, align 4, !tbaa !5
  %2709 = sitofp i32 %2708 to double
  %2710 = fmul double %2707, %2709
  %2711 = fmul double %2702, %2710
  %2712 = load i64, ptr %187, align 8, !tbaa !43
  %2713 = uitofp i64 %2712 to double
  %2714 = fdiv double %2711, %2713
  %2715 = getelementptr inbounds [6 x i8], ptr %28, i64 0, i64 0
  %2716 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %2699, ptr noundef @.str.5, double noundef %2714, ptr noundef %2715) #11
  %2717 = load ptr, ptr @stdout, align 8, !tbaa !9
  %2718 = load double, ptr %27, align 8, !tbaa !12
  %2719 = load double, ptr %188, align 8, !tbaa !12
  %2720 = fdiv double %2718, %2719
  %2721 = getelementptr inbounds [6 x i8], ptr %28, i64 0, i64 0
  %2722 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %2717, ptr noundef @.str.6, double noundef %2720, ptr noundef %2721) #11
  br label %2731

2723:                                             ; preds = %2684, %2681
  %2724 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %2725 = extractvalue { ptr, i32 } %2724, 0
  store ptr %2725, ptr %33, align 8
  %2726 = extractvalue { ptr, i32 } %2724, 1
  store i32 %2726, ptr %34, align 4
  br label %2770

2727:                                             ; preds = %2686
  %2728 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %2729 = extractvalue { ptr, i32 } %2728, 0
  store ptr %2729, ptr %33, align 8
  %2730 = extractvalue { ptr, i32 } %2728, 1
  store i32 %2730, ptr %34, align 4
  br label %2769

2731:                                             ; preds = %2698, %2695, %2689
  %2732 = load ptr, ptr @stdout, align 8, !tbaa !9
  %2733 = load double, ptr %188, align 8, !tbaa !12
  %2734 = fmul double 1.000000e+03, %2733
  %2735 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %2732, ptr noundef @.str.8, double noundef %2734) #11
  %2736 = load i32, ptr %7, align 4, !tbaa !5
  %2737 = and i32 %2736, 1
  %2738 = icmp eq i32 0, %2737
  br i1 %2738, label %2739, label %2768

2739:                                             ; preds = %2731
  %2740 = load i32, ptr %31, align 4, !tbaa !5
  %2741 = icmp ne i32 0, %2740
  br i1 %2741, label %2742, label %2768

2742:                                             ; preds = %2739
  call void @llvm.lifetime.start.p0(i64 192, ptr %189) #11
  %2743 = load i32, ptr %8, align 4, !tbaa !5
  %2744 = load i32, ptr %10, align 4, !tbaa !5
  %2745 = load ptr, ptr %37, align 8, !tbaa !9
  %2746 = load ptr, ptr %38, align 8, !tbaa !9
  %2747 = invoke i32 @libxsmm_matdiff(ptr noundef %189, i32 noundef 0, i32 noundef %2743, i32 noundef %2744, ptr noundef %2745, ptr noundef %2746, ptr noundef %15, ptr noundef %15)
          to label %2748 unwind label %2763

2748:                                             ; preds = %2742
  store i32 %2747, ptr %6, align 4, !tbaa !5
  %2749 = load ptr, ptr @stdout, align 8, !tbaa !9
  %2750 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %189, i32 0, i32 7
  %2751 = load double, ptr %2750, align 8, !tbaa !50
  %2752 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %189, i32 0, i32 5
  %2753 = load double, ptr %2752, align 8, !tbaa !52
  %2754 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %2749, ptr noundef @.str.10, double noundef %2751, double noundef %2753) #11
  %2755 = load i32, ptr %31, align 4, !tbaa !5
  %2756 = sitofp i32 %2755 to double
  %2757 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %189, i32 0, i32 8
  %2758 = load double, ptr %2757, align 8, !tbaa !53
  %2759 = fcmp olt double %2756, %2758
  br i1 %2759, label %2760, label %2767

2760:                                             ; preds = %2748
  %2761 = load ptr, ptr @stderr, align 8, !tbaa !9
  %2762 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %2761, ptr noundef @.str.11) #11
  store i32 1, ptr %6, align 4, !tbaa !5
  br label %2767

2763:                                             ; preds = %2742
  %2764 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %2765 = extractvalue { ptr, i32 } %2764, 0
  store ptr %2765, ptr %33, align 8
  %2766 = extractvalue { ptr, i32 } %2764, 1
  store i32 %2766, ptr %34, align 4
  call void @llvm.lifetime.end.p0(i64 192, ptr %189) #11
  br label %2769

2767:                                             ; preds = %2760, %2748
  call void @llvm.lifetime.end.p0(i64 192, ptr %189) #11
  br label %2768

2768:                                             ; preds = %2767, %2739, %2731
  call void @llvm.lifetime.end.p0(i64 8, ptr %188) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %187) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %185) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %184) #11
  br label %2778

2769:                                             ; preds = %2763, %2727
  call void @llvm.lifetime.end.p0(i64 8, ptr %188) #11
  br label %2770

2770:                                             ; preds = %2769, %2723
  call void @llvm.lifetime.end.p0(i64 8, ptr %187) #11
  br label %2771

2771:                                             ; preds = %2770, %2677, %2650
  call void @llvm.lifetime.end.p0(i64 8, ptr %185) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %184) #11
  br label %2782

2772:                                             ; preds = %1136
  %2773 = call ptr @__cxa_allocate_exception(i64 8) #11
  store ptr @.str.20, ptr %2773, align 16, !tbaa !9
  invoke void @__cxa_throw(ptr %2773, ptr @_ZTIPKc, ptr null) #13
          to label %2820 unwind label %2774

2774:                                             ; preds = %2778, %2772
  %2775 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %2776 = extractvalue { ptr, i32 } %2775, 0
  store ptr %2776, ptr %33, align 8
  %2777 = extractvalue { ptr, i32 } %2775, 1
  store i32 %2777, ptr %34, align 4
  br label %2782

2778:                                             ; preds = %2768, %2515, %2189, %1847, %1505
  invoke void @libxsmm_finalize()
          to label %2779 unwind label %2774

2779:                                             ; preds = %2778
  %2780 = load ptr, ptr @stdout, align 8, !tbaa !9
  %2781 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %2780, ptr noundef @.str.21) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %105) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %104) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %103) #11
  call void @_ZNSt6vectorIPdSaIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %101) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr %101) #11
  call void @_ZNSt6vectorIPKdSaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %99) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr %99) #11
  call void @_ZNSt6vectorIPKdSaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %97) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr %97) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %96) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #11
  call void @_ZZ4mainEN4raiiD2Ev(ptr noundef nonnull align 8 dereferenceable(48) %32) #11
  call void @llvm.lifetime.end.p0(i64 48, ptr %32) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #11
  call void @llvm.lifetime.end.p0(i64 6, ptr %28) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #11
  call void @llvm.lifetime.end.p0(i64 1, ptr %17) #11
  call void @llvm.lifetime.end.p0(i64 1, ptr %16) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #11
  br label %2803

2782:                                             ; preds = %2774, %2771, %2622, %2518, %2370, %2334, %2192, %2020, %1986, %1850, %1678, %1644, %1508, %1340, %1298
  call void @llvm.lifetime.end.p0(i64 8, ptr %105) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %104) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %103) #11
  call void @_ZNSt6vectorIPdSaIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %101) #11
  br label %2783

2783:                                             ; preds = %2782, %1149
  call void @llvm.lifetime.end.p0(i64 24, ptr %101) #11
  call void @_ZNSt6vectorIPKdSaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %99) #11
  br label %2784

2784:                                             ; preds = %2783, %1145
  call void @llvm.lifetime.end.p0(i64 24, ptr %99) #11
  call void @_ZNSt6vectorIPKdSaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %97) #11
  br label %2785

2785:                                             ; preds = %2784, %1141
  call void @llvm.lifetime.end.p0(i64 24, ptr %97) #11
  br label %2786

2786:                                             ; preds = %2785, %1123
  call void @llvm.lifetime.end.p0(i64 8, ptr %96) #11
  br label %2787

2787:                                             ; preds = %2786, %1119, %1078
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #11
  call void @_ZZ4mainEN4raiiD2Ev(ptr noundef nonnull align 8 dereferenceable(48) %32) #11
  br label %2788

2788:                                             ; preds = %2787, %420
  call void @llvm.lifetime.end.p0(i64 48, ptr %32) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #11
  call void @llvm.lifetime.end.p0(i64 6, ptr %28) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #11
  call void @llvm.lifetime.end.p0(i64 1, ptr %17) #11
  call void @llvm.lifetime.end.p0(i64 1, ptr %16) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #11
  br label %2789

2789:                                             ; preds = %2788
  %2790 = load i32, ptr %34, align 4
  %2791 = call i32 @llvm.eh.typeid.for.p0(ptr @_ZTISt9exception) #11
  %2792 = icmp eq i32 %2790, %2791
  br i1 %2792, label %2793, label %2806

2793:                                             ; preds = %2789
  call void @llvm.lifetime.start.p0(i64 8, ptr %191) #11
  %2794 = load ptr, ptr %33, align 8
  %2795 = call ptr @__cxa_begin_catch(ptr %2794) #11
  store ptr %2795, ptr %191, align 8
  %2796 = load ptr, ptr @stderr, align 8, !tbaa !9
  %2797 = load ptr, ptr %191, align 8, !tbaa !9
  %2798 = load ptr, ptr %2797, align 8, !tbaa !72
  %2799 = getelementptr inbounds ptr, ptr %2798, i64 2
  %2800 = load ptr, ptr %2799, align 8
  %2801 = call noundef ptr %2800(ptr noundef nonnull align 8 dereferenceable(8) %2797) #11
  %2802 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %2796, ptr noundef @.str.23, ptr noundef %2801) #11
  store i32 1, ptr %6, align 4, !tbaa !5
  call void @__cxa_end_catch()
  call void @llvm.lifetime.end.p0(i64 8, ptr %191) #11
  br label %2803

2803:                                             ; preds = %2815, %2809, %2793, %2779
  %2804 = load i32, ptr %6, align 4, !tbaa !5
  store i32 %2804, ptr %3, align 4
  store i32 1, ptr %108, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #11
  %2805 = load i32, ptr %3, align 4
  ret i32 %2805

2806:                                             ; preds = %2789
  %2807 = call i32 @llvm.eh.typeid.for.p0(ptr @_ZTIPKc) #11
  %2808 = icmp eq i32 %2790, %2807
  br i1 %2808, label %2809, label %2815

2809:                                             ; preds = %2806
  call void @llvm.lifetime.start.p0(i64 8, ptr %190) #11
  %2810 = load ptr, ptr %33, align 8
  %2811 = call ptr @__cxa_begin_catch(ptr %2810) #11
  store ptr %2811, ptr %190, align 8
  %2812 = load ptr, ptr @stderr, align 8, !tbaa !9
  %2813 = load ptr, ptr %190, align 8, !tbaa !9
  %2814 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %2812, ptr noundef @.str.23, ptr noundef %2813) #11
  store i32 1, ptr %6, align 4, !tbaa !5
  call void @__cxa_end_catch() #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %190) #11
  br label %2803

2815:                                             ; preds = %2806
  %2816 = load ptr, ptr %33, align 8
  %2817 = call ptr @__cxa_begin_catch(ptr %2816) #11
  %2818 = load ptr, ptr @stderr, align 8, !tbaa !9
  %2819 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %2818, ptr noundef @.str.22) #11
  store i32 1, ptr %6, align 4, !tbaa !5
  call void @__cxa_end_catch()
  br label %2803

2820:                                             ; preds = %2772, %1117
  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: 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) #3

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

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

declare i32 @__gxx_personality_v0(...)

; Function Attrs: mustprogress nounwind uwtable
declare hidden noundef i32 @_ZZ4mainENK4raii7shuffleEi(ptr noundef nonnull align 8 dereferenceable(48), i32 noundef) #6 align 2

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

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

declare i64 @libxsmm_coprime2(i64 noundef) #8

declare void @libxsmm_init() #8

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

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

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

declare ptr @__cxa_allocate_exception(i64)

declare void @__cxa_throw(ptr, ptr, ptr)

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSaIPKdEC2Ev(ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #6 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt6vectorIPKdSaIS1_EEC2EmRKS2_(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef, ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSaIPdEC2Ev(ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #6 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt6vectorIPdSaIS0_EEC2EmRKS1_(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef, ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIPKdSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef) #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIPdSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef) #6 align 2

declare i64 @libxsmm_timer_tick() #8

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef i64 @_Z21libxsmm_timer_ncyclesyy(i64 noundef, i64 noundef) #9

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

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

declare void @libxsmm_matdiff_clear(ptr noundef) #8

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

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

declare void @libxsmm_finalize() #8

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt6vectorIPdSaIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt6vectorIPKdSaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #6 align 2

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

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

declare ptr @__cxa_begin_catch(ptr)

declare void @__cxa_end_catch()

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt15__new_allocatorIPKdED2Ev(ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt15__new_allocatorIPdED2Ev(ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #6 align 2

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 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #4 = { nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { 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 #6 = { 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 #7 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #8 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #9 = { 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 #10 = { nounwind memory(none) }
attributes #11 = { nounwind }
attributes #12 = { nounwind willreturn memory(read) }
attributes #13 = { 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, !10, i64 24, !15, i64 32, !15, i64 40}
!18 = !{!17, !10, i64 8}
!19 = !{!17, !10, i64 16}
!20 = !{!17, !10, i64 24}
!21 = distinct !{!21, !22}
!22 = !{!"llvm.loop.mustprogress"}
!23 = distinct !{!23, !22}
!24 = distinct !{!24, !22}
!25 = distinct !{!25, !22}
!26 = distinct !{!26, !22}
!27 = distinct !{!27, !22}
!28 = distinct !{!28, !22}
!29 = distinct !{!29, !22}
!30 = distinct !{!30, !22}
!31 = distinct !{!31, !22}
!32 = distinct !{!32, !22}
!33 = distinct !{!33, !22}
!34 = distinct !{!34, !22}
!35 = distinct !{!35, !22}
!36 = distinct !{!36, !22}
!37 = distinct !{!37, !22}
!38 = distinct !{!38, !22}
!39 = distinct !{!39, !22}
!40 = distinct !{!40, !22}
!41 = distinct !{!41, !22}
!42 = distinct !{!42, !22}
!43 = !{!44, !44, i64 0}
!44 = !{!"long long", !7, i64 0}
!45 = distinct !{!45, !22}
!46 = distinct !{!46, !22}
!47 = distinct !{!47, !22}
!48 = distinct !{!48, !22}
!49 = distinct !{!49, !22}
!50 = !{!51, !13, i64 56}
!51 = !{!"_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}
!52 = !{!51, !13, i64 40}
!53 = !{!51, !13, i64 64}
!54 = distinct !{!54, !22}
!55 = distinct !{!55, !22}
!56 = distinct !{!56, !22}
!57 = distinct !{!57, !22}
!58 = distinct !{!58, !22}
!59 = distinct !{!59, !22}
!60 = distinct !{!60, !22}
!61 = distinct !{!61, !22}
!62 = distinct !{!62, !22}
!63 = distinct !{!63, !22}
!64 = distinct !{!64, !22}
!65 = distinct !{!65, !22}
!66 = distinct !{!66, !22}
!67 = distinct !{!67, !22}
!68 = distinct !{!68, !22}
!69 = distinct !{!69, !22}
!70 = distinct !{!70, !22}
!71 = distinct !{!71, !22}
!72 = !{!73, !73, i64 0}
!73 = !{!"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, ptr, i64, i64 }
%class.libxsmm_mmfunction = type { ptr }
%"class.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<const double *, std::allocator<const double *>>::_Vector_impl" }
%"struct.std::_Vector_base<const double *, std::allocator<const double *>>::_Vector_impl" = type { %"struct.std::_Vector_base<const double *, std::allocator<const double *>>::_Vector_impl_data" }
%"struct.std::_Vector_base<const double *, std::allocator<const double *>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::allocator" = type { i8 }
%"class.std::vector.0" = type { %"struct.std::_Vector_base.1" }
%"struct.std::_Vector_base.1" = type { %"struct.std::_Vector_base<double *, std::allocator<double *>>::_Vector_impl" }
%"struct.std::_Vector_base<double *, std::allocator<double *>>::_Vector_impl" = type { %"struct.std::_Vector_base<double *, std::allocator<double *>>::_Vector_impl_data" }
%"struct.std::_Vector_base<double *, std::allocator<double *>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::allocator.2" = type { i8 }
%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 }

@_ZTISt9exception = external constant ptr
@_ZTIPKc = external constant ptr
@__const.main.ops = external hidden unnamed_addr constant [6 x i8], align 1
@.str = external hidden unnamed_addr constant [6 x i8], align 1
@stdout = external local_unnamed_addr global ptr, align 8
@.str.1 = external hidden unnamed_addr constant [69 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [25 x i8], align 1
@stderr = external local_unnamed_addr global ptr, align 8
@.str.11 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [34 x i8], align 1
@.str.23 = 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 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 %class.libxsmm_mmfunction, align 8
  %13 = alloca %"class.std::vector", align 8
  %14 = alloca %"class.std::allocator", align 1
  %15 = alloca %"class.std::vector", align 8
  %16 = alloca %"class.std::allocator", align 1
  %17 = alloca %"class.std::vector.0", align 8
  %18 = alloca %"class.std::allocator.2", align 1
  %19 = alloca i32, align 4
  %20 = alloca %struct.libxsmm_matdiff_info, align 8
  %21 = alloca %struct.libxsmm_matdiff_info, align 8
  %22 = alloca i32, align 4
  %23 = alloca %struct.libxsmm_matdiff_info, align 8
  %24 = alloca %struct.libxsmm_matdiff_info, align 8
  %25 = alloca i32, align 4
  %26 = alloca %struct.libxsmm_matdiff_info, align 8
  %27 = alloca %struct.libxsmm_matdiff_info, align 8
  %28 = alloca i32, align 4
  %29 = alloca %struct.libxsmm_matdiff_info, align 8
  %30 = alloca i32, align 4
  %31 = alloca %struct.libxsmm_matdiff_info, align 8
  %32 = icmp sgt i32 %0, 1
  br i1 %32, label %33, label %.thread986

33:                                               ; preds = %2
  %34 = getelementptr inbounds i8, ptr %1, i64 8
  %35 = load ptr, ptr %34, align 8, !tbaa !5
  %36 = tail call i32 @atoi(ptr nocapture noundef %35) #13
  %.not990 = icmp eq i32 %0, 2
  br i1 %.not990, label %.thread986, label %37

37:                                               ; preds = %33
  %38 = getelementptr inbounds i8, ptr %1, i64 16
  %39 = load ptr, ptr %38, align 8, !tbaa !5
  %40 = tail call i32 @atoi(ptr nocapture noundef %39) #13
  %41 = icmp ugt i32 %0, 4
  br i1 %41, label %47, label %42

42:                                               ; preds = %37
  %43 = icmp eq i32 %0, 4
  br i1 %43, label %.thread979, label %.thread986

.thread979:                                       ; preds = %42
  %44 = getelementptr inbounds i8, ptr %1, i64 24
  %45 = load ptr, ptr %44, align 8, !tbaa !5
  %46 = tail call i32 @atoi(ptr nocapture noundef %45) #13
  br label %.thread986

47:                                               ; preds = %37
  %48 = getelementptr inbounds i8, ptr %1, i64 32
  %49 = load ptr, ptr %48, align 8, !tbaa !5
  %50 = tail call i32 @atoi(ptr nocapture noundef %49) #13
  %51 = getelementptr inbounds i8, ptr %1, i64 24
  %52 = load ptr, ptr %51, align 8, !tbaa !5
  %53 = tail call i32 @atoi(ptr nocapture noundef %52) #13
  %.not991 = icmp eq i32 %0, 5
  br i1 %.not991, label %.thread986, label %54

54:                                               ; preds = %47
  %55 = getelementptr inbounds i8, ptr %1, i64 40
  %56 = load ptr, ptr %55, align 8, !tbaa !5
  %57 = tail call i32 @atoi(ptr nocapture noundef %56) #13
  %.fr = freeze i32 %57
  %58 = icmp ugt i32 %0, 6
  br i1 %58, label %59, label %64

59:                                               ; preds = %54
  %60 = getelementptr inbounds i8, ptr %1, i64 48
  %61 = load ptr, ptr %60, align 8, !tbaa !5
  %62 = tail call i32 @atoi(ptr nocapture noundef %61) #13
  %63 = icmp sgt i32 %62, 0
  br i1 %63, label %.thread986, label %64

64:                                               ; preds = %59, %54
  %65 = icmp slt i32 %.fr, 1
  %spec.select = select i1 %65, i32 13, i32 1
  br label %.thread986

.thread986:                                       ; preds = %64, %.thread979, %47, %42, %2, %33, %59
  %66 = phi i32 [ %.fr, %59 ], [ 0, %33 ], [ 0, %2 ], [ 0, %42 ], [ 0, %47 ], [ 0, %.thread979 ], [ %.fr, %64 ]
  %67 = phi i32 [ %50, %59 ], [ 23, %33 ], [ 23, %2 ], [ %40, %42 ], [ %50, %47 ], [ %40, %.thread979 ], [ %50, %64 ]
  %68 = phi i32 [ %36, %59 ], [ %36, %33 ], [ 0, %2 ], [ %36, %42 ], [ %36, %47 ], [ %36, %.thread979 ], [ %36, %64 ]
  %69 = phi i32 [ %40, %59 ], [ 23, %33 ], [ 23, %2 ], [ %40, %42 ], [ %40, %47 ], [ %40, %.thread979 ], [ %40, %64 ]
  %70 = phi i32 [ %53, %59 ], [ 23, %33 ], [ 23, %2 ], [ %40, %42 ], [ %53, %47 ], [ %46, %.thread979 ], [ %53, %64 ]
  %71 = phi i32 [ %62, %59 ], [ 13, %33 ], [ 13, %2 ], [ 13, %42 ], [ 13, %47 ], [ 13, %.thread979 ], [ %spec.select, %64 ]
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %3) #14
  store i32 %69, ptr %3, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %4) #14
  store i32 %67, ptr %4, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %5) #14
  store i32 %69, ptr %5, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %6) #14
  store i8 78, ptr %6, align 1, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %7) #14
  store i8 78, ptr %7, align 1, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %8) #14
  store double 1.000000e+00, ptr %8, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %9) #14
  store double 1.000000e+00, ptr %9, align 8, !tbaa !12
  %72 = mul nsw i32 %69, %67
  %73 = mul nsw i32 %70, %67
  %74 = mul nsw i32 %70, %69
  %75 = sext i32 %72 to i64
  %76 = sext i32 %73 to i64
  %77 = add nsw i64 %76, %75
  %78 = shl nsw i64 %77, 3
  %79 = sext i32 %74 to i64
  %80 = add nsw i64 %77, %79
  %81 = shl nsw i64 %80, 3
  %82 = udiv i64 2147483648, %81
  %83 = trunc nuw i64 %82 to i32
  %84 = icmp sgt i32 %66, 0
  %spec.select1306 = select i1 %84, i32 %66, i32 %83
  %. = tail call i32 @llvm.smin.i32(i32 %spec.select1306, i32 %83)
  %85 = shl nsw i64 %79, 4
  %86 = add nsw i64 %78, %85
  %87 = sitofp i32 %. to double
  %88 = fmul double %87, 2.000000e-09
  %89 = sitofp i32 %69 to double
  %90 = fmul double %88, %89
  %91 = sitofp i32 %70 to double
  %92 = fmul double %90, %91
  %93 = sitofp i32 %67 to double
  %94 = fmul double %92, %93
  call void @llvm.lifetime.start.p0(i64 6, ptr nonnull %10) #14
  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)
  %95 = fdiv double 1.000000e+00, %87
  %96 = tail call ptr @getenv(ptr noundef nonnull @.str) #14
  %97 = icmp eq ptr %96, null
  br i1 %97, label %100, label %98

98:                                               ; preds = %.thread986
  %99 = tail call i32 @atoi(ptr nocapture noundef %96) #13
  br label %100

100:                                              ; preds = %.thread986, %98
  %101 = phi i32 [ %99, %98 ], [ 0, %.thread986 ]
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %11) #14
  %102 = mul nsw i32 %., %72
  %103 = add nsw i32 %102, 7
  %104 = mul nsw i32 %., %73
  %105 = add nsw i32 %104, 7
  %106 = mul nsw i32 %., %74
  %107 = add nsw i32 %106, 7
  invoke void @_ZZ4mainEN4raiiC2Eiiii(ptr noundef nonnull align 8 dereferenceable(48) %11, i32 noundef %103, i32 noundef %105, i32 noundef %107, i32 noundef %.)
          to label %108 unwind label %147

108:                                              ; preds = %100
  %109 = load ptr, ptr %11, align 8, !tbaa !14
  %110 = ptrtoint ptr %109 to i64
  %111 = add i64 %110, 63
  %112 = and i64 %111, -64
  %113 = sub i64 %112, %110
  %114 = lshr i64 %113, 3
  %115 = getelementptr inbounds double, ptr %109, i64 %114
  %116 = getelementptr inbounds i8, ptr %11, i64 8
  %117 = load ptr, ptr %116, align 8, !tbaa !17
  %118 = ptrtoint ptr %117 to i64
  %119 = add i64 %118, 63
  %120 = and i64 %119, -64
  %121 = sub i64 %120, %118
  %122 = lshr i64 %121, 3
  %123 = getelementptr inbounds double, ptr %117, i64 %122
  %124 = getelementptr inbounds i8, ptr %11, i64 16
  %125 = load ptr, ptr %124, align 8, !tbaa !18
  %126 = ptrtoint ptr %125 to i64
  %127 = add i64 %126, 63
  %128 = and i64 %127, -64
  %129 = sub i64 %128, %126
  %130 = lshr i64 %129, 3
  %131 = getelementptr inbounds double, ptr %125, i64 %130
  %132 = getelementptr inbounds i8, ptr %11, i64 24
  %133 = load ptr, ptr %132, align 8, !tbaa !19
  %134 = ptrtoint ptr %133 to i64
  %135 = add i64 %134, 63
  %136 = and i64 %135, -64
  %137 = sub i64 %136, %134
  %138 = lshr i64 %137, 3
  %139 = getelementptr inbounds double, ptr %133, i64 %138
  %140 = icmp sgt i32 %., 0
  br i1 %140, label %.lr.ph1070, label %._crit_edge1071

.lr.ph1070:                                       ; preds = %108
  %141 = icmp sgt i32 %67, 0
  %142 = icmp sgt i32 %69, 0
  %143 = icmp sgt i32 %70, 0
  %144 = zext nneg i32 %. to i64
  %wide.trip.count1171 = zext nneg i32 %67 to i64
  %wide.trip.count = zext i32 %69 to i64
  %wide.trip.count1181 = zext nneg i32 %67 to i64
  %wide.trip.count1196 = zext nneg i32 %70 to i64
  %wide.trip.count1186 = zext nneg i32 %67 to i64
  %wide.trip.count1206 = zext nneg i32 %70 to i64
  %wide.trip.count1221 = zext nneg i32 %70 to i64
  %wide.trip.count1211 = zext nneg i32 %69 to i64
  %wide.trip.count1236 = zext nneg i32 %70 to i64
  %wide.trip.count1226 = zext nneg i32 %69 to i64
  %smax = call i32 @llvm.smax.i32(i32 %69, i32 0)
  %145 = zext nneg i32 %smax to i64
  %smax1328 = call i32 @llvm.smax.i32(i32 %69, i32 0)
  %146 = zext nneg i32 %smax1328 to i64
  %min.iters.check1346 = icmp ult i32 %69, 4
  %n.vec1349 = and i64 %wide.trip.count, 2147483644
  %cmp.n1362 = icmp eq i64 %n.vec1349, %wide.trip.count
  %min.iters.check1314 = icmp ult i32 %69, 4
  %n.vec1317 = and i64 %wide.trip.count, 2147483644
  %cmp.n1327 = icmp eq i64 %n.vec1317, %wide.trip.count
  br label %149

._crit_edge1071:                                  ; preds = %._crit_edge1065, %108
  invoke void @libxsmm_init()
          to label %327 unwind label %344

147:                                              ; preds = %100
  %148 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  br label %1094

149:                                              ; preds = %.lr.ph1070, %._crit_edge1065
  %indvars.iv1238 = phi i64 [ 0, %.lr.ph1070 ], [ %indvars.iv.next1239, %._crit_edge1065 ]
  %150 = trunc nuw nsw i64 %indvars.iv1238 to i32
  %151 = call noundef i32 @_ZZ4mainENK4raii7shuffleEi(ptr noundef nonnull align 8 dereferenceable(48) %11, i32 noundef %150)
  %152 = add nsw i32 %151, 42
  %153 = sitofp i32 %152 to double
  %154 = call double @llvm.fmuladd.f64(double %153, double %95, double %95)
  %155 = load i32, ptr %3, align 4, !tbaa !9
  %.not968 = icmp eq i32 %152, 0
  br i1 %.not968, label %182, label %.preheader1027

.preheader1027:                                   ; preds = %149
  br i1 %141, label %.preheader1020.preheader, label %.loopexit1026

.preheader1020.preheader:                         ; preds = %.preheader1027
  %156 = sext i32 %155 to i64
  %wide.trip.count1166 = zext i32 %155 to i64
  br label %.preheader1020

.preheader1020:                                   ; preds = %.preheader1020.preheader, %._crit_edge
  %indvars.iv1168 = phi i64 [ 0, %.preheader1020.preheader ], [ %indvars.iv.next1169, %._crit_edge ]
  br i1 %142, label %.lr.ph, label %.preheader1019

.lr.ph:                                           ; preds = %.preheader1020
  %157 = mul nsw i64 %indvars.iv1168, %156
  %158 = trunc nuw nsw i64 %indvars.iv1168 to i32
  %159 = uitofp nneg i32 %158 to double
  %160 = call double @llvm.fmuladd.f64(double %159, double %89, double 1.000000e+00)
  br label %164

.preheader1019:                                   ; preds = %164, %.preheader1020
  %.0824.lcssa = phi i32 [ 0, %.preheader1020 ], [ %69, %164 ]
  %161 = icmp slt i32 %.0824.lcssa, %155
  br i1 %161, label %.lr.ph1034, label %._crit_edge

.lr.ph1034:                                       ; preds = %.preheader1019
  %162 = mul nsw i64 %indvars.iv1168, %156
  %163 = zext nneg i32 %.0824.lcssa to i64
  br label %175

164:                                              ; preds = %.lr.ph, %164
  %indvars.iv = phi i64 [ 0, %.lr.ph ], [ %indvars.iv.next, %164 ]
  %165 = trunc nuw nsw i64 %indvars.iv to i32
  %166 = uitofp nneg i32 %165 to double
  %167 = fadd double %160, %166
  %168 = fmul double %154, %167
  %169 = call noundef i32 @_ZZ4mainENK4raii7shuffleEi(ptr noundef nonnull align 8 dereferenceable(48) %11, i32 noundef %150)
  %170 = sext i32 %169 to i64
  %171 = mul nsw i64 %170, %75
  %172 = getelementptr inbounds double, ptr %115, i64 %171
  %173 = getelementptr double, ptr %172, i64 %indvars.iv
  %174 = getelementptr double, ptr %173, i64 %157
  store double %168, ptr %174, align 8, !tbaa !12
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, %wide.trip.count
  br i1 %exitcond.not, label %.preheader1019, label %164, !llvm.loop !20

175:                                              ; preds = %.lr.ph1034, %175
  %indvars.iv1163 = phi i64 [ %163, %.lr.ph1034 ], [ %indvars.iv.next1164, %175 ]
  %176 = call noundef i32 @_ZZ4mainENK4raii7shuffleEi(ptr noundef nonnull align 8 dereferenceable(48) %11, i32 noundef %150)
  %177 = sext i32 %176 to i64
  %178 = mul nsw i64 %177, %75
  %179 = getelementptr inbounds double, ptr %115, i64 %178
  %180 = getelementptr double, ptr %179, i64 %indvars.iv1163
  %181 = getelementptr double, ptr %180, i64 %162
  store double %153, ptr %181, align 8, !tbaa !12
  %indvars.iv.next1164 = add nuw nsw i64 %indvars.iv1163, 1
  %exitcond1167.not = icmp eq i64 %indvars.iv.next1164, %wide.trip.count1166
  br i1 %exitcond1167.not, label %._crit_edge, label %175, !llvm.loop !22

._crit_edge:                                      ; preds = %175, %.preheader1019
  %indvars.iv.next1169 = add nuw nsw i64 %indvars.iv1168, 1
  %exitcond1172.not = icmp eq i64 %indvars.iv.next1169, %wide.trip.count1171
  br i1 %exitcond1172.not, label %.loopexit1026, label %.preheader1020, !llvm.loop !23

182:                                              ; preds = %149
  %183 = mul nsw i32 %155, %67
  %184 = add nsw i32 %183, 1
  %185 = sdiv i32 %184, 2
  %186 = sitofp i32 %185 to double
  %187 = fdiv double %95, %186
  %188 = sext i32 %183 to i64
  %189 = invoke i64 @libxsmm_coprime2(i64 noundef %188)
          to label %.preheader1025 unwind label %205

.preheader1025:                                   ; preds = %182
  %190 = icmp sgt i32 %155, 0
  %or.cond1307 = select i1 %141, i1 %190, i1 false
  br i1 %or.cond1307, label %.preheader1018.us.preheader, label %.loopexit1026

.preheader1018.us.preheader:                      ; preds = %.preheader1025
  %191 = zext nneg i32 %155 to i64
  br label %.preheader1018.us

.preheader1018.us:                                ; preds = %.preheader1018.us.preheader, %._crit_edge1038.us
  %indvars.iv1178 = phi i64 [ 0, %.preheader1018.us.preheader ], [ %indvars.iv.next1179, %._crit_edge1038.us ]
  %192 = mul nuw nsw i64 %indvars.iv1178, %191
  br label %193

193:                                              ; preds = %.preheader1018.us, %193
  %indvars.iv1173 = phi i64 [ 0, %.preheader1018.us ], [ %indvars.iv.next1174, %193 ]
  %194 = add nuw nsw i64 %indvars.iv1173, %192
  %195 = mul i64 %189, %194
  %196 = urem i64 %195, %188
  %197 = uitofp i64 %196 to double
  %198 = fsub double %197, %186
  %199 = fmul double %187, %198
  %200 = call noundef i32 @_ZZ4mainENK4raii7shuffleEi(ptr noundef nonnull align 8 dereferenceable(48) %11, i32 noundef %150)
  %201 = sext i32 %200 to i64
  %202 = mul nsw i64 %201, %75
  %203 = getelementptr inbounds double, ptr %115, i64 %202
  %204 = getelementptr inbounds double, ptr %203, i64 %194
  store double %199, ptr %204, align 8, !tbaa !12
  %indvars.iv.next1174 = add nuw nsw i64 %indvars.iv1173, 1
  %exitcond1177.not = icmp eq i64 %indvars.iv.next1174, %191
  br i1 %exitcond1177.not, label %._crit_edge1038.us, label %193, !llvm.loop !24

._crit_edge1038.us:                               ; preds = %193
  %indvars.iv.next1179 = add nuw nsw i64 %indvars.iv1178, 1
  %exitcond1182.not = icmp eq i64 %indvars.iv.next1179, %wide.trip.count1181
  br i1 %exitcond1182.not, label %.loopexit1026, label %.preheader1018.us, !llvm.loop !25

205:                                              ; preds = %182
  %206 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  br label %1093

.loopexit1026:                                    ; preds = %._crit_edge, %._crit_edge1038.us, %.preheader1027, %.preheader1025
  %207 = call noundef i32 @_ZZ4mainENK4raii7shuffleEi(ptr noundef nonnull align 8 dereferenceable(48) %11, i32 noundef %150)
  %208 = add nsw i32 %207, 24
  %209 = sitofp i32 %208 to double
  %210 = call double @llvm.fmuladd.f64(double %209, double %95, double %95)
  %211 = load i32, ptr %4, align 4, !tbaa !9
  %.not969 = icmp eq i32 %208, 0
  br i1 %.not969, label %238, label %.preheader1023

.preheader1023:                                   ; preds = %.loopexit1026
  br i1 %143, label %.preheader1017.preheader, label %._crit_edge1065

.preheader1017.preheader:                         ; preds = %.preheader1023
  %212 = sext i32 %211 to i64
  %wide.trip.count1191 = zext i32 %211 to i64
  br label %.preheader1017

.preheader1017:                                   ; preds = %.preheader1017.preheader, %._crit_edge1045
  %indvars.iv1193 = phi i64 [ 0, %.preheader1017.preheader ], [ %indvars.iv.next1194, %._crit_edge1045 ]
  br i1 %141, label %.lr.ph1041, label %.preheader1016

.lr.ph1041:                                       ; preds = %.preheader1017
  %213 = mul nsw i64 %indvars.iv1193, %212
  %214 = trunc nuw nsw i64 %indvars.iv1193 to i32
  %215 = uitofp nneg i32 %214 to double
  %216 = call double @llvm.fmuladd.f64(double %215, double %93, double 1.000000e+00)
  br label %220

.preheader1016:                                   ; preds = %220, %.preheader1017
  %.0831.lcssa = phi i32 [ 0, %.preheader1017 ], [ %67, %220 ]
  %217 = icmp slt i32 %.0831.lcssa, %211
  br i1 %217, label %.lr.ph1044, label %._crit_edge1045

.lr.ph1044:                                       ; preds = %.preheader1016
  %218 = mul nsw i64 %indvars.iv1193, %212
  %219 = zext nneg i32 %.0831.lcssa to i64
  br label %231

220:                                              ; preds = %.lr.ph1041, %220
  %indvars.iv1183 = phi i64 [ 0, %.lr.ph1041 ], [ %indvars.iv.next1184, %220 ]
  %221 = trunc nuw nsw i64 %indvars.iv1183 to i32
  %222 = uitofp nneg i32 %221 to double
  %223 = fadd double %216, %222
  %224 = fmul double %210, %223
  %225 = call noundef i32 @_ZZ4mainENK4raii7shuffleEi(ptr noundef nonnull align 8 dereferenceable(48) %11, i32 noundef %150)
  %226 = sext i32 %225 to i64
  %227 = mul nsw i64 %226, %76
  %228 = getelementptr inbounds double, ptr %123, i64 %227
  %229 = getelementptr double, ptr %228, i64 %indvars.iv1183
  %230 = getelementptr double, ptr %229, i64 %213
  store double %224, ptr %230, align 8, !tbaa !12
  %indvars.iv.next1184 = add nuw nsw i64 %indvars.iv1183, 1
  %exitcond1187.not = icmp eq i64 %indvars.iv.next1184, %wide.trip.count1186
  br i1 %exitcond1187.not, label %.preheader1016, label %220, !llvm.loop !26

231:                                              ; preds = %.lr.ph1044, %231
  %indvars.iv1188 = phi i64 [ %219, %.lr.ph1044 ], [ %indvars.iv.next1189, %231 ]
  %232 = call noundef i32 @_ZZ4mainENK4raii7shuffleEi(ptr noundef nonnull align 8 dereferenceable(48) %11, i32 noundef %150)
  %233 = sext i32 %232 to i64
  %234 = mul nsw i64 %233, %76
  %235 = getelementptr inbounds double, ptr %123, i64 %234
  %236 = getelementptr double, ptr %235, i64 %indvars.iv1188
  %237 = getelementptr double, ptr %236, i64 %218
  store double %209, ptr %237, align 8, !tbaa !12
  %indvars.iv.next1189 = add nuw nsw i64 %indvars.iv1188, 1
  %exitcond1192.not = icmp eq i64 %indvars.iv.next1189, %wide.trip.count1191
  br i1 %exitcond1192.not, label %._crit_edge1045, label %231, !llvm.loop !27

._crit_edge1045:                                  ; preds = %231, %.preheader1016
  %indvars.iv.next1194 = add nuw nsw i64 %indvars.iv1193, 1
  %exitcond1197.not = icmp eq i64 %indvars.iv.next1194, %wide.trip.count1196
  br i1 %exitcond1197.not, label %.loopexit, label %.preheader1017, !llvm.loop !28

238:                                              ; preds = %.loopexit1026
  %239 = mul nsw i32 %211, %70
  %240 = add nsw i32 %239, 1
  %241 = sdiv i32 %240, 2
  %242 = sitofp i32 %241 to double
  %243 = fdiv double %95, %242
  %244 = sext i32 %239 to i64
  %245 = invoke i64 @libxsmm_coprime2(i64 noundef %244)
          to label %.preheader1022 unwind label %265

.preheader1022:                                   ; preds = %238
  br i1 %143, label %.preheader1015.lr.ph, label %._crit_edge1065

.preheader1015.lr.ph:                             ; preds = %.preheader1022
  %246 = icmp sgt i32 %211, 0
  br i1 %246, label %.preheader1015.us.preheader, label %.loopexit.thread1293

.loopexit.thread1293:                             ; preds = %.preheader1015.lr.ph
  %247 = trunc i64 %indvars.iv1238 to i32
  %248 = add i32 %247, 22
  %249 = uitofp nneg i32 %248 to double
  %250 = call double @llvm.fmuladd.f64(double %249, double %95, double %95)
  br label %.preheader1014.lr.ph

.preheader1015.us.preheader:                      ; preds = %.preheader1015.lr.ph
  %251 = zext nneg i32 %211 to i64
  br label %.preheader1015.us

.preheader1015.us:                                ; preds = %.preheader1015.us.preheader, %._crit_edge1049.us
  %indvars.iv1203 = phi i64 [ 0, %.preheader1015.us.preheader ], [ %indvars.iv.next1204, %._crit_edge1049.us ]
  %252 = mul nuw nsw i64 %indvars.iv1203, %251
  br label %253

253:                                              ; preds = %.preheader1015.us, %253
  %indvars.iv1198 = phi i64 [ 0, %.preheader1015.us ], [ %indvars.iv.next1199, %253 ]
  %254 = add nuw nsw i64 %indvars.iv1198, %252
  %255 = mul i64 %245, %254
  %256 = urem i64 %255, %244
  %257 = uitofp i64 %256 to double
  %258 = fsub double %257, %242
  %259 = fmul double %243, %258
  %260 = call noundef i32 @_ZZ4mainENK4raii7shuffleEi(ptr noundef nonnull align 8 dereferenceable(48) %11, i32 noundef %150)
  %261 = sext i32 %260 to i64
  %262 = mul nsw i64 %261, %76
  %263 = getelementptr inbounds double, ptr %123, i64 %262
  %264 = getelementptr inbounds double, ptr %263, i64 %254
  store double %259, ptr %264, align 8, !tbaa !12
  %indvars.iv.next1199 = add nuw nsw i64 %indvars.iv1198, 1
  %exitcond1202.not = icmp eq i64 %indvars.iv.next1199, %251
  br i1 %exitcond1202.not, label %._crit_edge1049.us, label %253, !llvm.loop !29

._crit_edge1049.us:                               ; preds = %253
  %indvars.iv.next1204 = add nuw nsw i64 %indvars.iv1203, 1
  %exitcond1207.not = icmp eq i64 %indvars.iv.next1204, %wide.trip.count1206
  br i1 %exitcond1207.not, label %.loopexit, label %.preheader1015.us, !llvm.loop !30

265:                                              ; preds = %238
  %266 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  br label %1093

.loopexit:                                        ; preds = %._crit_edge1045, %._crit_edge1049.us
  %267 = trunc i64 %indvars.iv1238 to i32
  %268 = add i32 %267, 22
  %269 = uitofp nneg i32 %268 to double
  %270 = call double @llvm.fmuladd.f64(double %269, double %95, double %95)
  br i1 %143, label %.preheader1014.lr.ph, label %._crit_edge1065

.preheader1014.lr.ph:                             ; preds = %.loopexit.thread1293, %.loopexit
  %271 = phi double [ %250, %.loopexit.thread1293 ], [ %270, %.loopexit ]
  %272 = phi double [ %249, %.loopexit.thread1293 ], [ %269, %.loopexit ]
  %273 = load i32, ptr %5, align 4, !tbaa !9
  %274 = mul nsw i64 %indvars.iv1238, %79
  %275 = getelementptr inbounds double, ptr %131, i64 %274
  %276 = sext i32 %273 to i64
  %wide.trip.count1216 = zext i32 %273 to i64
  %277 = sub nsw i64 %wide.trip.count1216, %146
  %broadcast.splatinsert1359 = insertelement <2 x double> poison, double %271, i64 0
  %broadcast.splat1360 = shufflevector <2 x double> %broadcast.splatinsert1359, <2 x double> poison, <2 x i32> zeroinitializer
  %min.iters.check1331 = icmp ult i64 %277, 4
  %n.vec1334 = and i64 %277, -4
  %broadcast.splatinsert1340 = insertelement <2 x double> poison, double %272, i64 0
  %broadcast.splat1341 = shufflevector <2 x double> %broadcast.splatinsert1340, <2 x double> poison, <2 x i32> zeroinitializer
  %cmp.n1343 = icmp eq i64 %277, %n.vec1334
  br label %.preheader1014

.preheader1021:                                   ; preds = %._crit_edge1056
  br i1 %143, label %.preheader1012.lr.ph, label %._crit_edge1065

.preheader1012.lr.ph:                             ; preds = %.preheader1021
  %278 = mul nsw i64 %indvars.iv1238, %79
  %279 = getelementptr inbounds double, ptr %139, i64 %278
  %280 = sext i32 %273 to i64
  %wide.trip.count1231 = zext i32 %273 to i64
  %281 = sub nsw i64 %wide.trip.count1216, %145
  %broadcast.splatinsert1324 = insertelement <2 x double> poison, double %271, i64 0
  %broadcast.splat1325 = shufflevector <2 x double> %broadcast.splatinsert1324, <2 x double> poison, <2 x i32> zeroinitializer
  %min.iters.check = icmp ult i64 %281, 4
  %n.vec = and i64 %281, -4
  %broadcast.splatinsert = insertelement <2 x double> poison, double %272, i64 0
  %broadcast.splat = shufflevector <2 x double> %broadcast.splatinsert, <2 x double> poison, <2 x i32> zeroinitializer
  %cmp.n = icmp eq i64 %281, %n.vec
  br label %.preheader1012

.preheader1014:                                   ; preds = %.preheader1014.lr.ph, %._crit_edge1056
  %indvars.iv1218 = phi i64 [ 0, %.preheader1014.lr.ph ], [ %indvars.iv.next1219, %._crit_edge1056 ]
  br i1 %142, label %.lr.ph1052, label %.preheader1013

.lr.ph1052:                                       ; preds = %.preheader1014
  %282 = mul nsw i64 %indvars.iv1218, %276
  %283 = trunc nuw nsw i64 %indvars.iv1218 to i32
  %284 = uitofp nneg i32 %283 to double
  %285 = call double @llvm.fmuladd.f64(double %284, double %89, double 1.000000e+00)
  %invariant.gep = getelementptr double, ptr %275, i64 %282
  br i1 %min.iters.check1346, label %scalar.ph1345.preheader, label %vector.ph1347

scalar.ph1345.preheader:                          ; preds = %middle.block1344, %.lr.ph1052
  %indvars.iv1208.ph = phi i64 [ 0, %.lr.ph1052 ], [ %n.vec1349, %middle.block1344 ]
  br label %scalar.ph1345

vector.ph1347:                                    ; preds = %.lr.ph1052
  %broadcast.splatinsert1357 = insertelement <2 x double> poison, double %285, i64 0
  %broadcast.splat1358 = shufflevector <2 x double> %broadcast.splatinsert1357, <2 x double> poison, <2 x i32> zeroinitializer
  br label %vector.body1351

vector.body1351:                                  ; preds = %vector.body1351, %vector.ph1347
  %index1352 = phi i64 [ 0, %vector.ph1347 ], [ %index.next1361, %vector.body1351 ]
  %vec.ind1353 = phi <2 x i32> [ <i32 0, i32 1>, %vector.ph1347 ], [ %vec.ind.next1356, %vector.body1351 ]
  %step.add1354 = add <2 x i32> %vec.ind1353, <i32 2, i32 2>
  %286 = uitofp <2 x i32> %vec.ind1353 to <2 x double>
  %287 = uitofp <2 x i32> %step.add1354 to <2 x double>
  %288 = fadd <2 x double> %broadcast.splat1358, %286
  %289 = fadd <2 x double> %broadcast.splat1358, %287
  %290 = fmul <2 x double> %broadcast.splat1360, %288
  %291 = fmul <2 x double> %broadcast.splat1360, %289
  %292 = getelementptr double, ptr %invariant.gep, i64 %index1352
  %293 = getelementptr i8, ptr %292, i64 16
  store <2 x double> %290, ptr %292, align 8, !tbaa !12
  store <2 x double> %291, ptr %293, align 8, !tbaa !12
  %index.next1361 = add nuw i64 %index1352, 4
  %vec.ind.next1356 = add <2 x i32> %vec.ind1353, <i32 4, i32 4>
  %294 = icmp eq i64 %index.next1361, %n.vec1349
  br i1 %294, label %middle.block1344, label %vector.body1351, !llvm.loop !31

middle.block1344:                                 ; preds = %vector.body1351
  br i1 %cmp.n1362, label %.preheader1013, label %scalar.ph1345.preheader

.preheader1013:                                   ; preds = %scalar.ph1345, %middle.block1344, %.preheader1014
  %.0836.lcssa = phi i32 [ 0, %.preheader1014 ], [ %69, %middle.block1344 ], [ %69, %scalar.ph1345 ]
  %295 = icmp slt i32 %.0836.lcssa, %273
  br i1 %295, label %.lr.ph1055, label %._crit_edge1056

.lr.ph1055:                                       ; preds = %.preheader1013
  %296 = mul nsw i64 %indvars.iv1218, %276
  %297 = zext nneg i32 %.0836.lcssa to i64
  %invariant.gep1300 = getelementptr double, ptr %275, i64 %296
  br i1 %min.iters.check1331, label %scalar.ph1330.preheader, label %vector.ph1332

scalar.ph1330.preheader:                          ; preds = %middle.block1329, %.lr.ph1055
  %indvars.iv1213.ph = phi i64 [ %297, %.lr.ph1055 ], [ %ind.end1335, %middle.block1329 ]
  br label %scalar.ph1330

vector.ph1332:                                    ; preds = %.lr.ph1055
  %ind.end1335 = add nsw i64 %n.vec1334, %297
  %invariant.gep1390 = getelementptr double, ptr %invariant.gep1300, i64 %297
  br label %vector.body1337

vector.body1337:                                  ; preds = %vector.body1337, %vector.ph1332
  %index1338 = phi i64 [ 0, %vector.ph1332 ], [ %index.next1342, %vector.body1337 ]
  %gep1391 = getelementptr double, ptr %invariant.gep1390, i64 %index1338
  %298 = getelementptr i8, ptr %gep1391, i64 16
  store <2 x double> %broadcast.splat1341, ptr %gep1391, align 8, !tbaa !12
  store <2 x double> %broadcast.splat1341, ptr %298, align 8, !tbaa !12
  %index.next1342 = add nuw i64 %index1338, 4
  %299 = icmp eq i64 %index.next1342, %n.vec1334
  br i1 %299, label %middle.block1329, label %vector.body1337, !llvm.loop !34

middle.block1329:                                 ; preds = %vector.body1337
  br i1 %cmp.n1343, label %._crit_edge1056, label %scalar.ph1330.preheader

scalar.ph1345:                                    ; preds = %scalar.ph1345.preheader, %scalar.ph1345
  %indvars.iv1208 = phi i64 [ %indvars.iv.next1209, %scalar.ph1345 ], [ %indvars.iv1208.ph, %scalar.ph1345.preheader ]
  %300 = trunc nuw nsw i64 %indvars.iv1208 to i32
  %301 = uitofp nneg i32 %300 to double
  %302 = fadd double %285, %301
  %303 = fmul double %271, %302
  %gep = getelementptr double, ptr %invariant.gep, i64 %indvars.iv1208
  store double %303, ptr %gep, align 8, !tbaa !12
  %indvars.iv.next1209 = add nuw nsw i64 %indvars.iv1208, 1
  %exitcond1212.not = icmp eq i64 %indvars.iv.next1209, %wide.trip.count1211
  br i1 %exitcond1212.not, label %.preheader1013, label %scalar.ph1345, !llvm.loop !35

scalar.ph1330:                                    ; preds = %scalar.ph1330.preheader, %scalar.ph1330
  %indvars.iv1213 = phi i64 [ %indvars.iv.next1214, %scalar.ph1330 ], [ %indvars.iv1213.ph, %scalar.ph1330.preheader ]
  %gep1301 = getelementptr double, ptr %invariant.gep1300, i64 %indvars.iv1213
  store double %272, ptr %gep1301, align 8, !tbaa !12
  %indvars.iv.next1214 = add nuw nsw i64 %indvars.iv1213, 1
  %exitcond1217.not = icmp eq i64 %indvars.iv.next1214, %wide.trip.count1216
  br i1 %exitcond1217.not, label %._crit_edge1056, label %scalar.ph1330, !llvm.loop !36

._crit_edge1056:                                  ; preds = %scalar.ph1330, %middle.block1329, %.preheader1013
  %indvars.iv.next1219 = add nuw nsw i64 %indvars.iv1218, 1
  %exitcond1222.not = icmp eq i64 %indvars.iv.next1219, %wide.trip.count1221
  br i1 %exitcond1222.not, label %.preheader1021, label %.preheader1014, !llvm.loop !37

.preheader1012:                                   ; preds = %.preheader1012.lr.ph, %._crit_edge1063
  %indvars.iv1233 = phi i64 [ 0, %.preheader1012.lr.ph ], [ %indvars.iv.next1234, %._crit_edge1063 ]
  br i1 %142, label %.lr.ph1059, label %.preheader1011

.lr.ph1059:                                       ; preds = %.preheader1012
  %304 = mul nsw i64 %indvars.iv1233, %280
  %305 = trunc nuw nsw i64 %indvars.iv1233 to i32
  %306 = uitofp nneg i32 %305 to double
  %307 = call double @llvm.fmuladd.f64(double %306, double %89, double 1.000000e+00)
  %invariant.gep1302 = getelementptr double, ptr %279, i64 %304
  br i1 %min.iters.check1314, label %scalar.ph1313.preheader, label %vector.ph1315

scalar.ph1313.preheader:                          ; preds = %middle.block1312, %.lr.ph1059
  %indvars.iv1223.ph = phi i64 [ 0, %.lr.ph1059 ], [ %n.vec1317, %middle.block1312 ]
  br label %scalar.ph1313

vector.ph1315:                                    ; preds = %.lr.ph1059
  %broadcast.splatinsert1322 = insertelement <2 x double> poison, double %307, i64 0
  %broadcast.splat1323 = shufflevector <2 x double> %broadcast.splatinsert1322, <2 x double> poison, <2 x i32> zeroinitializer
  br label %vector.body1319

vector.body1319:                                  ; preds = %vector.body1319, %vector.ph1315
  %index1320 = phi i64 [ 0, %vector.ph1315 ], [ %index.next1326, %vector.body1319 ]
  %vec.ind = phi <2 x i32> [ <i32 0, i32 1>, %vector.ph1315 ], [ %vec.ind.next, %vector.body1319 ]
  %step.add = add <2 x i32> %vec.ind, <i32 2, i32 2>
  %308 = uitofp <2 x i32> %vec.ind to <2 x double>
  %309 = uitofp <2 x i32> %step.add to <2 x double>
  %310 = fadd <2 x double> %broadcast.splat1323, %308
  %311 = fadd <2 x double> %broadcast.splat1323, %309
  %312 = fmul <2 x double> %broadcast.splat1325, %310
  %313 = fmul <2 x double> %broadcast.splat1325, %311
  %314 = getelementptr double, ptr %invariant.gep1302, i64 %index1320
  %315 = getelementptr i8, ptr %314, i64 16
  store <2 x double> %312, ptr %314, align 8, !tbaa !12
  store <2 x double> %313, ptr %315, align 8, !tbaa !12
  %index.next1326 = add nuw i64 %index1320, 4
  %vec.ind.next = add <2 x i32> %vec.ind, <i32 4, i32 4>
  %316 = icmp eq i64 %index.next1326, %n.vec1317
  br i1 %316, label %middle.block1312, label %vector.body1319, !llvm.loop !38

middle.block1312:                                 ; preds = %vector.body1319
  br i1 %cmp.n1327, label %.preheader1011, label %scalar.ph1313.preheader

.preheader1011:                                   ; preds = %scalar.ph1313, %middle.block1312, %.preheader1012
  %.0843.lcssa = phi i32 [ 0, %.preheader1012 ], [ %69, %middle.block1312 ], [ %69, %scalar.ph1313 ]
  %317 = icmp slt i32 %.0843.lcssa, %273
  br i1 %317, label %.lr.ph1062, label %._crit_edge1063

.lr.ph1062:                                       ; preds = %.preheader1011
  %318 = mul nsw i64 %indvars.iv1233, %280
  %319 = zext nneg i32 %.0843.lcssa to i64
  %invariant.gep1304 = getelementptr double, ptr %279, i64 %318
  br i1 %min.iters.check, label %scalar.ph.preheader, label %vector.ph

scalar.ph.preheader:                              ; preds = %middle.block, %.lr.ph1062
  %indvars.iv1228.ph = phi i64 [ %319, %.lr.ph1062 ], [ %ind.end, %middle.block ]
  br label %scalar.ph

vector.ph:                                        ; preds = %.lr.ph1062
  %ind.end = add nsw i64 %n.vec, %319
  %invariant.gep1392 = getelementptr double, ptr %invariant.gep1304, i64 %319
  br label %vector.body

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

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

scalar.ph1313:                                    ; preds = %scalar.ph1313.preheader, %scalar.ph1313
  %indvars.iv1223 = phi i64 [ %indvars.iv.next1224, %scalar.ph1313 ], [ %indvars.iv1223.ph, %scalar.ph1313.preheader ]
  %322 = trunc nuw nsw i64 %indvars.iv1223 to i32
  %323 = uitofp nneg i32 %322 to double
  %324 = fadd double %307, %323
  %325 = fmul double %271, %324
  %gep1303 = getelementptr double, ptr %invariant.gep1302, i64 %indvars.iv1223
  store double %325, ptr %gep1303, align 8, !tbaa !12
  %indvars.iv.next1224 = add nuw nsw i64 %indvars.iv1223, 1
  %exitcond1227.not = icmp eq i64 %indvars.iv.next1224, %wide.trip.count1226
  br i1 %exitcond1227.not, label %.preheader1011, label %scalar.ph1313, !llvm.loop !40

scalar.ph:                                        ; preds = %scalar.ph.preheader, %scalar.ph
  %indvars.iv1228 = phi i64 [ %indvars.iv.next1229, %scalar.ph ], [ %indvars.iv1228.ph, %scalar.ph.preheader ]
  %gep1305 = getelementptr double, ptr %invariant.gep1304, i64 %indvars.iv1228
  store double %272, ptr %gep1305, align 8, !tbaa !12
  %indvars.iv.next1229 = add nuw nsw i64 %indvars.iv1228, 1
  %exitcond1232.not = icmp eq i64 %indvars.iv.next1229, %wide.trip.count1231
  br i1 %exitcond1232.not, label %._crit_edge1063, label %scalar.ph, !llvm.loop !41

._crit_edge1063:                                  ; preds = %scalar.ph, %middle.block, %.preheader1011
  %indvars.iv.next1234 = add nuw nsw i64 %indvars.iv1233, 1
  %exitcond1237.not = icmp eq i64 %indvars.iv.next1234, %wide.trip.count1236
  br i1 %exitcond1237.not, label %._crit_edge1065, label %.preheader1012, !llvm.loop !42

._crit_edge1065:                                  ; preds = %._crit_edge1063, %.preheader1022, %.preheader1023, %.loopexit, %.preheader1021
  %indvars.iv.next1239 = add nuw nsw i64 %indvars.iv1238, 1
  %326 = icmp ult i64 %indvars.iv.next1239, %144
  br i1 %326, label %149, label %._crit_edge1071, !llvm.loop !43

327:                                              ; preds = %._crit_edge1071
  %328 = load ptr, ptr @stdout, align 8, !tbaa !5
  %329 = sext i32 %69 to i64
  %330 = sext i32 %70 to i64
  %331 = sext i32 %67 to i64
  %332 = sext i32 %. to i64
  %333 = mul i64 %81, %332
  %334 = uitofp i64 %333 to double
  %335 = fmul double %334, 0x3EB0000000000000
  %336 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %328, ptr noundef nonnull @.str.1, i64 noundef %329, i64 noundef %330, i64 noundef %331, i64 noundef %332, double noundef %335, ptr noundef nonnull @.str.2, ptr noundef nonnull @.str.2) #14
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %12) #14
  %337 = load i32, ptr %3, align 4, !tbaa !9
  %338 = load i32, ptr %4, align 4, !tbaa !9
  %339 = load i32, ptr %5, align 4, !tbaa !9
  invoke void @_ZN18libxsmm_mmfunctionIddLin1EEC2Eiiiiiiiddi(ptr noundef nonnull align 8 dereferenceable(8) %12, i32 noundef 0, i32 noundef %69, i32 noundef %70, i32 noundef %67, i32 noundef %337, i32 noundef %338, i32 noundef %339, double noundef 1.000000e+00, double noundef 1.000000e+00, i32 noundef -1)
          to label %340 unwind label %346

340:                                              ; preds = %327
  %341 = call noundef ptr @_ZNK18libxsmm_mmfunctionIddLin1EEcvPKvEv(ptr noundef nonnull align 8 dereferenceable(8) %12)
  %.not = icmp eq ptr %341, null
  br i1 %.not, label %342, label %348

342:                                              ; preds = %340
  %343 = call ptr @__cxa_allocate_exception(i64 8) #14
  store ptr @.str.3, ptr %343, align 16, !tbaa !5
  invoke void @__cxa_throw(ptr nonnull %343, ptr nonnull @_ZTIPKc, ptr null) #15
          to label %1115 unwind label %346

344:                                              ; preds = %._crit_edge1071
  %345 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  br label %1093

346:                                              ; preds = %342, %327
  %347 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  br label %1092

348:                                              ; preds = %340
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %13) #14
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %14) #14
  call void @_ZNSaIPKdEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %14) #14
  invoke void @_ZNSt6vectorIPKdSaIS1_EEC2EmRKS2_(ptr noundef nonnull align 8 dereferenceable(24) %13, i64 noundef %332, ptr noundef nonnull align 1 dereferenceable(1) %14)
          to label %349 unwind label %358

349:                                              ; preds = %348
  call void @_ZNSt15__new_allocatorIPKdED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %14) #14
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %14) #14
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %15) #14
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %16) #14
  call void @_ZNSaIPKdEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %16) #14
  invoke void @_ZNSt6vectorIPKdSaIS1_EEC2EmRKS2_(ptr noundef nonnull align 8 dereferenceable(24) %15, i64 noundef %332, ptr noundef nonnull align 1 dereferenceable(1) %16)
          to label %350 unwind label %360

350:                                              ; preds = %349
  call void @_ZNSt15__new_allocatorIPKdED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %16) #14
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %16) #14
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %17) #14
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %18) #14
  call void @_ZNSaIPdEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %18) #14
  invoke void @_ZNSt6vectorIPdSaIS0_EEC2EmRKS1_(ptr noundef nonnull align 8 dereferenceable(24) %17, i64 noundef %332, ptr noundef nonnull align 1 dereferenceable(1) %18)
          to label %351 unwind label %362

351:                                              ; preds = %350
  call void @_ZNSt15__new_allocatorIPdED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %18) #14
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %18) #14
  %352 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIPKdSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %13, i64 noundef 0) #14
  %353 = ptrtoint ptr %352 to i64
  %354 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIPKdSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %15, i64 noundef 0) #14
  %355 = ptrtoint ptr %354 to i64
  %356 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIPdSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %17, i64 noundef 0) #14
  %357 = ptrtoint ptr %356 to i64
  switch i32 %68, label %1080 [
    i32 0, label %364
    i32 1, label %421
    i32 2, label %517
    i32 3, label %572
    i32 4, label %666
    i32 5, label %721
    i32 6, label %815
    i32 7, label %870
    i32 8, label %957
    i32 9, label %998
  ]

358:                                              ; preds = %348
  %359 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  call void @_ZNSt15__new_allocatorIPKdED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %14) #14
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %14) #14
  br label %1091

360:                                              ; preds = %349
  %361 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  call void @_ZNSt15__new_allocatorIPKdED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %16) #14
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %16) #14
  br label %1090

362:                                              ; preds = %350
  %363 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  call void @_ZNSt15__new_allocatorIPdED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %18) #14
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %18) #14
  br label %1089

364:                                              ; preds = %351
  %365 = load ptr, ptr @stdout, align 8, !tbaa !5
  %366 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %365, ptr noundef nonnull @.str.4) #14
  %367 = invoke i64 @libxsmm_timer_tick()
          to label %.preheader996 unwind label %385

.preheader996:                                    ; preds = %364
  br i1 %140, label %.preheader995.us.preheader, label %.split1135.us

.preheader995.us.preheader:                       ; preds = %.preheader996
  %umax1283 = call i32 @llvm.umax.i32(i32 %71, i32 1)
  br label %.preheader995.us

.preheader995.us:                                 ; preds = %.preheader995.us.preheader, %._crit_edge1132.us
  %.08461133.us = phi i32 [ %382, %._crit_edge1132.us ], [ 0, %.preheader995.us.preheader ]
  br label %368

368:                                              ; preds = %.preheader995.us, %380
  %indvars.iv1280 = phi i64 [ 0, %.preheader995.us ], [ %indvars.iv.next1281, %380 ]
  %369 = trunc nuw nsw i64 %indvars.iv1280 to i32
  %370 = call noundef i32 @_ZZ4mainENK4raii7shuffleEi(ptr noundef nonnull align 8 dereferenceable(48) %11, i32 noundef %369)
  %371 = sext i32 %370 to i64
  %372 = mul nsw i64 %371, %75
  %373 = getelementptr inbounds double, ptr %115, i64 %372
  %374 = call noundef i32 @_ZZ4mainENK4raii7shuffleEi(ptr noundef nonnull align 8 dereferenceable(48) %11, i32 noundef %369)
  %375 = sext i32 %374 to i64
  %376 = mul nsw i64 %375, %76
  %377 = getelementptr inbounds double, ptr %123, i64 %376
  %378 = mul nsw i64 %indvars.iv1280, %79
  %379 = getelementptr inbounds double, ptr %131, i64 %378
  invoke void @_ZNK18libxsmm_mmfunctionIddLin1EEclEPKdS2_Pd(ptr noundef nonnull align 8 dereferenceable(8) %12, ptr noundef %373, ptr noundef %377, ptr noundef %379)
          to label %380 unwind label %.split1137.us

380:                                              ; preds = %368
  %indvars.iv.next1281 = add nuw nsw i64 %indvars.iv1280, 1
  %381 = icmp slt i64 %indvars.iv.next1281, %332
  br i1 %381, label %368, label %._crit_edge1132.us, !llvm.loop !44

._crit_edge1132.us:                               ; preds = %380
  %382 = add nuw nsw i32 %.08461133.us, 1
  %exitcond1284.not = icmp eq i32 %382, %umax1283
  br i1 %exitcond1284.not, label %.split1135.us, label %.preheader995.us, !llvm.loop !45

.split1137.us:                                    ; preds = %368
  %383 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  br label %1088

.split1135.us:                                    ; preds = %._crit_edge1132.us, %.preheader996
  %384 = invoke i64 @libxsmm_timer_tick()
          to label %387 unwind label %413

385:                                              ; preds = %364
  %386 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  br label %1088

387:                                              ; preds = %.split1135.us
  %388 = call noundef i64 @_Z21libxsmm_timer_ncyclesyy(i64 noundef %367, i64 noundef %384)
  %389 = invoke double @libxsmm_timer_duration(i64 noundef 0, i64 noundef %388)
          to label %390 unwind label %415

390:                                              ; preds = %387
  %391 = uitofp nneg i32 %71 to double
  %392 = fdiv double %389, %391
  %393 = fcmp ogt double %392, 0.000000e+00
  %394 = icmp ne i64 %388, 0
  %or.cond = and i1 %394, %393
  br i1 %or.cond, label %395, label %417

395:                                              ; preds = %390
  %396 = load ptr, ptr @stdout, align 8, !tbaa !5
  %397 = call double @llvm.fmuladd.f64(double %93, double 2.000000e+00, double -1.000000e+00)
  %398 = fmul double %89, %87
  %399 = fmul double %398, %91
  %400 = fmul double %397, %399
  %401 = uitofp i64 %388 to double
  %402 = fdiv double %400, %401
  %403 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %396, ptr noundef nonnull @.str.5, double noundef %402, ptr noundef nonnull %10) #14
  %404 = load ptr, ptr @stdout, align 8, !tbaa !5
  %405 = fdiv double %94, %392
  %406 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %404, ptr noundef nonnull @.str.6, double noundef %405, ptr noundef nonnull %10) #14
  %407 = load ptr, ptr @stdout, align 8, !tbaa !5
  %408 = mul i64 %86, %332
  %409 = uitofp i64 %408 to double
  %410 = fmul double %392, 0x41D0000000000000
  %411 = fdiv double %409, %410
  %412 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %407, ptr noundef nonnull @.str.7, double noundef %411) #14
  br label %417

413:                                              ; preds = %.split1135.us
  %414 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  br label %1088

415:                                              ; preds = %387
  %416 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  br label %1088

417:                                              ; preds = %395, %390
  %418 = load ptr, ptr @stdout, align 8, !tbaa !5
  %419 = fmul double %392, 1.000000e+03
  %420 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %418, ptr noundef nonnull @.str.8, double noundef %419) #14
  br label %421

421:                                              ; preds = %417, %351
  %422 = load ptr, ptr @stdout, align 8, !tbaa !5
  %423 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %422, ptr noundef nonnull @.str.9) #14
  br i1 %140, label %.lr.ph1140, label %._crit_edge1141

._crit_edge1141:                                  ; preds = %.lr.ph1140, %421
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %19) #14
  store i32 8, ptr %19, align 4, !tbaa !9
  %424 = invoke i64 @libxsmm_timer_tick()
          to label %.preheader994.preheader unwind label %442

.preheader994.preheader:                          ; preds = %._crit_edge1141
  %umax1288 = call i32 @llvm.umax.i32(i32 %71, i32 1)
  br label %.preheader994

.lr.ph1140:                                       ; preds = %421, %.lr.ph1140
  %indvars.iv1285 = phi i64 [ %indvars.iv.next1286, %.lr.ph1140 ], [ 0, %421 ]
  %425 = trunc nuw nsw i64 %indvars.iv1285 to i32
  %426 = call noundef i32 @_ZZ4mainENK4raii7shuffleEi(ptr noundef nonnull align 8 dereferenceable(48) %11, i32 noundef %425)
  %427 = sext i32 %426 to i64
  %428 = mul nsw i64 %427, %75
  %429 = getelementptr inbounds double, ptr %115, i64 %428
  %430 = getelementptr inbounds ptr, ptr %352, i64 %indvars.iv1285
  store ptr %429, ptr %430, align 8, !tbaa !5
  %431 = call noundef i32 @_ZZ4mainENK4raii7shuffleEi(ptr noundef nonnull align 8 dereferenceable(48) %11, i32 noundef %425)
  %432 = sext i32 %431 to i64
  %433 = mul nsw i64 %432, %76
  %434 = getelementptr inbounds double, ptr %123, i64 %433
  %435 = getelementptr inbounds ptr, ptr %354, i64 %indvars.iv1285
  store ptr %434, ptr %435, align 8, !tbaa !5
  %436 = mul nsw i64 %indvars.iv1285, %79
  %437 = getelementptr inbounds double, ptr %139, i64 %436
  %438 = getelementptr inbounds ptr, ptr %356, i64 %indvars.iv1285
  store ptr %437, ptr %438, align 8, !tbaa !5
  %indvars.iv.next1286 = add nuw nsw i64 %indvars.iv1285, 1
  %439 = icmp slt i64 %indvars.iv.next1286, %332
  br i1 %439, label %.lr.ph1140, label %._crit_edge1141, !llvm.loop !46

440:                                              ; preds = %444
  %441 = invoke i64 @libxsmm_timer_tick()
          to label %448 unwind label %474

442:                                              ; preds = %._crit_edge1141
  %443 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  br label %516

.preheader994:                                    ; preds = %.preheader994.preheader, %444
  %.08511142 = phi i32 [ %445, %444 ], [ 0, %.preheader994.preheader ]
  invoke void @libxsmm_gemm_batch(i32 noundef 0, i32 noundef 0, ptr noundef nonnull %6, ptr noundef nonnull %7, i32 noundef %69, i32 noundef %70, i32 noundef %67, ptr noundef nonnull %8, ptr noundef nonnull %352, ptr noundef nonnull %3, ptr noundef nonnull %19, ptr noundef nonnull %354, ptr noundef nonnull %4, ptr noundef nonnull %19, ptr noundef nonnull %9, ptr noundef nonnull %356, ptr noundef nonnull %5, ptr noundef nonnull %19, i32 noundef 0, i32 noundef 0, i32 noundef %., i32 noundef 0)
          to label %444 unwind label %446

444:                                              ; preds = %.preheader994
  %445 = add nuw nsw i32 %.08511142, 1
  %exitcond1289.not = icmp eq i32 %445, %umax1288
  br i1 %exitcond1289.not, label %440, label %.preheader994, !llvm.loop !47

446:                                              ; preds = %.preheader994
  %447 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  br label %516

448:                                              ; preds = %440
  %449 = call noundef i64 @_Z21libxsmm_timer_ncyclesyy(i64 noundef %424, i64 noundef %441)
  %450 = invoke double @libxsmm_timer_duration(i64 noundef 0, i64 noundef %449)
          to label %451 unwind label %476

451:                                              ; preds = %448
  %452 = uitofp nneg i32 %71 to double
  %453 = fdiv double %450, %452
  %454 = fcmp ogt double %453, 0.000000e+00
  %455 = icmp ne i64 %449, 0
  %or.cond3 = and i1 %455, %454
  br i1 %or.cond3, label %456, label %478

456:                                              ; preds = %451
  %457 = load ptr, ptr @stdout, align 8, !tbaa !5
  %458 = call double @llvm.fmuladd.f64(double %93, double 2.000000e+00, double -1.000000e+00)
  %459 = fmul double %89, %87
  %460 = fmul double %459, %91
  %461 = fmul double %458, %460
  %462 = uitofp i64 %449 to double
  %463 = fdiv double %461, %462
  %464 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %457, ptr noundef nonnull @.str.5, double noundef %463, ptr noundef nonnull %10) #14
  %465 = load ptr, ptr @stdout, align 8, !tbaa !5
  %466 = fdiv double %94, %453
  %467 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %465, ptr noundef nonnull @.str.6, double noundef %466, ptr noundef nonnull %10) #14
  %468 = load ptr, ptr @stdout, align 8, !tbaa !5
  %469 = mul i64 %86, %332
  %470 = uitofp i64 %469 to double
  %471 = fmul double %453, 0x41D0000000000000
  %472 = fdiv double %470, %471
  %473 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %468, ptr noundef nonnull @.str.7, double noundef %472) #14
  br label %478

474:                                              ; preds = %440
  %475 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  br label %516

476:                                              ; preds = %448
  %477 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  br label %516

478:                                              ; preds = %456, %451
  %479 = load ptr, ptr @stdout, align 8, !tbaa !5
  %480 = fmul double %453, 1.000000e+03
  %481 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %479, ptr noundef nonnull @.str.8, double noundef %480) #14
  %482 = and i32 %68, 1
  %483 = icmp eq i32 %482, 0
  %484 = icmp ne i32 %101, 0
  %or.cond5 = select i1 %483, i1 %484, i1 false
  br i1 %or.cond5, label %485, label %515

485:                                              ; preds = %478
  call void @llvm.lifetime.start.p0(i64 192, ptr nonnull %20) #14
  invoke void @libxsmm_matdiff_clear(ptr noundef nonnull %20)
          to label %.preheader unwind label %496

.preheader:                                       ; preds = %485
  br i1 %140, label %.lr.ph1144, label %._crit_edge1145

._crit_edge1145:                                  ; preds = %508, %.preheader
  %.0.lcssa = phi i32 [ 0, %.preheader ], [ %502, %508 ]
  %486 = load ptr, ptr @stdout, align 8, !tbaa !5
  %487 = getelementptr inbounds i8, ptr %20, i64 56
  %488 = load double, ptr %487, align 8, !tbaa !48
  %489 = getelementptr inbounds i8, ptr %20, i64 40
  %490 = load double, ptr %489, align 8, !tbaa !50
  %491 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %486, ptr noundef nonnull @.str.10, double noundef %488, double noundef %490) #14
  %492 = sitofp i32 %101 to double
  %493 = getelementptr inbounds i8, ptr %20, i64 64
  %494 = load double, ptr %493, align 8, !tbaa !51
  %495 = fcmp ogt double %494, %492
  br i1 %495, label %510, label %513

496:                                              ; preds = %485
  %497 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  br label %514

.lr.ph1144:                                       ; preds = %.preheader, %508
  %indvars.iv1290 = phi i64 [ %indvars.iv.next1291, %508 ], [ 0, %.preheader ]
  %498 = mul nsw i64 %indvars.iv1290, %79
  %499 = getelementptr inbounds double, ptr %131, i64 %498
  %500 = getelementptr inbounds ptr, ptr %356, i64 %indvars.iv1290
  %501 = load ptr, ptr %500, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 192, ptr nonnull %21) #14
  %502 = invoke i32 @libxsmm_matdiff(ptr noundef nonnull %21, i32 noundef 0, i32 noundef %69, i32 noundef %70, ptr noundef %499, ptr noundef %501, ptr noundef nonnull %5, ptr noundef nonnull %5)
          to label %503 unwind label %506

503:                                              ; preds = %.lr.ph1144
  %504 = icmp eq i32 %502, 0
  br i1 %504, label %505, label %508

505:                                              ; preds = %503
  invoke void @libxsmm_matdiff_reduce(ptr noundef nonnull %20, ptr noundef nonnull %21)
          to label %508 unwind label %506

506:                                              ; preds = %505, %.lr.ph1144
  %507 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  call void @llvm.lifetime.end.p0(i64 192, ptr nonnull %21) #14
  br label %514

508:                                              ; preds = %505, %503
  call void @llvm.lifetime.end.p0(i64 192, ptr nonnull %21) #14
  %indvars.iv.next1291 = add nuw nsw i64 %indvars.iv1290, 1
  %509 = icmp slt i64 %indvars.iv.next1291, %332
  br i1 %509, label %.lr.ph1144, label %._crit_edge1145, !llvm.loop !52

510:                                              ; preds = %._crit_edge1145
  %511 = load ptr, ptr @stderr, align 8, !tbaa !5
  %512 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %511, ptr noundef nonnull @.str.11) #16
  br label %513

513:                                              ; preds = %510, %._crit_edge1145
  %.1 = phi i32 [ 1, %510 ], [ %.0.lcssa, %._crit_edge1145 ]
  call void @llvm.lifetime.end.p0(i64 192, ptr nonnull %20) #14
  br label %515

514:                                              ; preds = %506, %496
  %.pn954 = phi { ptr, i32 } [ %507, %506 ], [ %497, %496 ]
  call void @llvm.lifetime.end.p0(i64 192, ptr nonnull %20) #14
  br label %516

515:                                              ; preds = %513, %478
  %.2 = phi i32 [ %.1, %513 ], [ 0, %478 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %19) #14
  br label %1084

516:                                              ; preds = %474, %514, %476, %446, %442
  %.pn958 = phi { ptr, i32 } [ %447, %446 ], [ %443, %442 ], [ %475, %474 ], [ %.pn954, %514 ], [ %477, %476 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %19) #14
  br label %1088

517:                                              ; preds = %351
  %518 = load ptr, ptr @stdout, align 8, !tbaa !5
  %519 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %518, ptr noundef nonnull @.str.12) #14
  %520 = invoke i64 @libxsmm_timer_tick()
          to label %.preheader1000 unwind label %534

.preheader1000:                                   ; preds = %517
  br i1 %140, label %.preheader999.us.preheader, label %.split1118.us

.preheader999.us.preheader:                       ; preds = %.preheader1000
  %umax1270 = call i32 @llvm.umax.i32(i32 %71, i32 1)
  br label %.preheader999.us

.preheader999.us:                                 ; preds = %.preheader999.us.preheader, %._crit_edge1115.us
  %.08531116.us = phi i32 [ %531, %._crit_edge1115.us ], [ 0, %.preheader999.us.preheader ]
  br label %521

521:                                              ; preds = %.preheader999.us, %529
  %indvars.iv1267 = phi i64 [ 0, %.preheader999.us ], [ %indvars.iv.next1268, %529 ]
  %522 = trunc nuw nsw i64 %indvars.iv1267 to i32
  %523 = call noundef i32 @_ZZ4mainENK4raii7shuffleEi(ptr noundef nonnull align 8 dereferenceable(48) %11, i32 noundef %522)
  %524 = sext i32 %523 to i64
  %525 = mul nsw i64 %524, %75
  %526 = getelementptr inbounds double, ptr %115, i64 %525
  %527 = mul nsw i64 %indvars.iv1267, %79
  %528 = getelementptr inbounds double, ptr %131, i64 %527
  invoke void @_ZNK18libxsmm_mmfunctionIddLin1EEclEPKdS2_Pd(ptr noundef nonnull align 8 dereferenceable(8) %12, ptr noundef %526, ptr noundef %123, ptr noundef %528)
          to label %529 unwind label %.split1120.us

529:                                              ; preds = %521
  %indvars.iv.next1268 = add nuw nsw i64 %indvars.iv1267, 1
  %530 = icmp slt i64 %indvars.iv.next1268, %332
  br i1 %530, label %521, label %._crit_edge1115.us, !llvm.loop !53

._crit_edge1115.us:                               ; preds = %529
  %531 = add nuw nsw i32 %.08531116.us, 1
  %exitcond1271.not = icmp eq i32 %531, %umax1270
  br i1 %exitcond1271.not, label %.split1118.us, label %.preheader999.us, !llvm.loop !54

.split1120.us:                                    ; preds = %521
  %532 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  br label %1088

.split1118.us:                                    ; preds = %._crit_edge1115.us, %.preheader1000
  %533 = invoke i64 @libxsmm_timer_tick()
          to label %536 unwind label %564

534:                                              ; preds = %517
  %535 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  br label %1088

536:                                              ; preds = %.split1118.us
  %537 = call noundef i64 @_Z21libxsmm_timer_ncyclesyy(i64 noundef %520, i64 noundef %533)
  %538 = invoke double @libxsmm_timer_duration(i64 noundef 0, i64 noundef %537)
          to label %539 unwind label %566

539:                                              ; preds = %536
  %540 = uitofp nneg i32 %71 to double
  %541 = fdiv double %538, %540
  %542 = fcmp ogt double %541, 0.000000e+00
  %543 = icmp ne i64 %537, 0
  %or.cond7 = and i1 %543, %542
  br i1 %or.cond7, label %544, label %568

544:                                              ; preds = %539
  %545 = load ptr, ptr @stdout, align 8, !tbaa !5
  %546 = call double @llvm.fmuladd.f64(double %93, double 2.000000e+00, double -1.000000e+00)
  %547 = fmul double %89, %87
  %548 = fmul double %547, %91
  %549 = fmul double %546, %548
  %550 = uitofp i64 %537 to double
  %551 = fdiv double %549, %550
  %552 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %545, ptr noundef nonnull @.str.5, double noundef %551, ptr noundef nonnull %10) #14
  %553 = load ptr, ptr @stdout, align 8, !tbaa !5
  %554 = fdiv double %94, %541
  %555 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %553, ptr noundef nonnull @.str.6, double noundef %554, ptr noundef nonnull %10) #14
  %556 = load ptr, ptr @stdout, align 8, !tbaa !5
  %557 = shl nsw i64 %76, 3
  %558 = sub nsw i64 %86, %557
  %559 = mul i64 %558, %332
  %560 = uitofp i64 %559 to double
  %561 = fmul double %541, 0x41D0000000000000
  %562 = fdiv double %560, %561
  %563 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %556, ptr noundef nonnull @.str.7, double noundef %562) #14
  br label %568

564:                                              ; preds = %.split1118.us
  %565 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  br label %1088

566:                                              ; preds = %536
  %567 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  br label %1088

568:                                              ; preds = %544, %539
  %569 = load ptr, ptr @stdout, align 8, !tbaa !5
  %570 = fmul double %541, 1.000000e+03
  %571 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %569, ptr noundef nonnull @.str.8, double noundef %570) #14
  br label %572

572:                                              ; preds = %568, %351
  %573 = load ptr, ptr @stdout, align 8, !tbaa !5
  %574 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %573, ptr noundef nonnull @.str.13) #14
  br i1 %140, label %.lr.ph1123, label %._crit_edge1124

._crit_edge1124:                                  ; preds = %.lr.ph1123, %572
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %22) #14
  store i32 8, ptr %22, align 4, !tbaa !9
  %575 = invoke i64 @libxsmm_timer_tick()
          to label %.preheader998.preheader unwind label %589

.preheader998.preheader:                          ; preds = %._crit_edge1124
  %umax1275 = call i32 @llvm.umax.i32(i32 %71, i32 1)
  br label %.preheader998

.lr.ph1123:                                       ; preds = %572, %.lr.ph1123
  %indvars.iv1272 = phi i64 [ %indvars.iv.next1273, %.lr.ph1123 ], [ 0, %572 ]
  %576 = trunc nuw nsw i64 %indvars.iv1272 to i32
  %577 = call noundef i32 @_ZZ4mainENK4raii7shuffleEi(ptr noundef nonnull align 8 dereferenceable(48) %11, i32 noundef %576)
  %578 = sext i32 %577 to i64
  %579 = mul nsw i64 %578, %75
  %580 = getelementptr inbounds double, ptr %115, i64 %579
  %581 = getelementptr inbounds ptr, ptr %352, i64 %indvars.iv1272
  store ptr %580, ptr %581, align 8, !tbaa !5
  %582 = getelementptr inbounds ptr, ptr %354, i64 %indvars.iv1272
  store ptr %123, ptr %582, align 8, !tbaa !5
  %583 = mul nsw i64 %indvars.iv1272, %79
  %584 = getelementptr inbounds double, ptr %139, i64 %583
  %585 = getelementptr inbounds ptr, ptr %356, i64 %indvars.iv1272
  store ptr %584, ptr %585, align 8, !tbaa !5
  %indvars.iv.next1273 = add nuw nsw i64 %indvars.iv1272, 1
  %586 = icmp slt i64 %indvars.iv.next1273, %332
  br i1 %586, label %.lr.ph1123, label %._crit_edge1124, !llvm.loop !55

587:                                              ; preds = %591
  %588 = invoke i64 @libxsmm_timer_tick()
          to label %595 unwind label %623

589:                                              ; preds = %._crit_edge1124
  %590 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  br label %665

.preheader998:                                    ; preds = %.preheader998.preheader, %591
  %.08581125 = phi i32 [ %592, %591 ], [ 0, %.preheader998.preheader ]
  invoke void @libxsmm_gemm_batch(i32 noundef 0, i32 noundef 0, ptr noundef nonnull %6, ptr noundef nonnull %7, i32 noundef %69, i32 noundef %70, i32 noundef %67, ptr noundef nonnull %8, ptr noundef nonnull %352, ptr noundef nonnull %3, ptr noundef nonnull %22, ptr noundef nonnull %354, ptr noundef nonnull %4, ptr noundef nonnull %22, ptr noundef nonnull %9, ptr noundef nonnull %356, ptr noundef nonnull %5, ptr noundef nonnull %22, i32 noundef 0, i32 noundef 0, i32 noundef %., i32 noundef 0)
          to label %591 unwind label %593

591:                                              ; preds = %.preheader998
  %592 = add nuw nsw i32 %.08581125, 1
  %exitcond1276.not = icmp eq i32 %592, %umax1275
  br i1 %exitcond1276.not, label %587, label %.preheader998, !llvm.loop !56

593:                                              ; preds = %.preheader998
  %594 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  br label %665

595:                                              ; preds = %587
  %596 = call noundef i64 @_Z21libxsmm_timer_ncyclesyy(i64 noundef %575, i64 noundef %588)
  %597 = invoke double @libxsmm_timer_duration(i64 noundef 0, i64 noundef %596)
          to label %598 unwind label %625

598:                                              ; preds = %595
  %599 = uitofp nneg i32 %71 to double
  %600 = fdiv double %597, %599
  %601 = fcmp ogt double %600, 0.000000e+00
  %602 = icmp ne i64 %596, 0
  %or.cond9 = and i1 %602, %601
  br i1 %or.cond9, label %603, label %627

603:                                              ; preds = %598
  %604 = load ptr, ptr @stdout, align 8, !tbaa !5
  %605 = call double @llvm.fmuladd.f64(double %93, double 2.000000e+00, double -1.000000e+00)
  %606 = fmul double %89, %87
  %607 = fmul double %606, %91
  %608 = fmul double %605, %607
  %609 = uitofp i64 %596 to double
  %610 = fdiv double %608, %609
  %611 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %604, ptr noundef nonnull @.str.5, double noundef %610, ptr noundef nonnull %10) #14
  %612 = load ptr, ptr @stdout, align 8, !tbaa !5
  %613 = fdiv double %94, %600
  %614 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %612, ptr noundef nonnull @.str.6, double noundef %613, ptr noundef nonnull %10) #14
  %615 = load ptr, ptr @stdout, align 8, !tbaa !5
  %616 = shl nsw i64 %76, 3
  %617 = sub nsw i64 %86, %616
  %618 = mul i64 %617, %332
  %619 = uitofp i64 %618 to double
  %620 = fmul double %600, 0x41D0000000000000
  %621 = fdiv double %619, %620
  %622 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %615, ptr noundef nonnull @.str.7, double noundef %621) #14
  br label %627

623:                                              ; preds = %587
  %624 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  br label %665

625:                                              ; preds = %595
  %626 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  br label %665

627:                                              ; preds = %603, %598
  %628 = load ptr, ptr @stdout, align 8, !tbaa !5
  %629 = fmul double %600, 1.000000e+03
  %630 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %628, ptr noundef nonnull @.str.8, double noundef %629) #14
  %631 = and i32 %68, 1
  %632 = icmp eq i32 %631, 0
  %633 = icmp ne i32 %101, 0
  %or.cond11 = select i1 %632, i1 %633, i1 false
  br i1 %or.cond11, label %634, label %664

634:                                              ; preds = %627
  call void @llvm.lifetime.start.p0(i64 192, ptr nonnull %23) #14
  invoke void @libxsmm_matdiff_clear(ptr noundef nonnull %23)
          to label %.preheader997 unwind label %645

.preheader997:                                    ; preds = %634
  br i1 %140, label %.lr.ph1127, label %._crit_edge1128

._crit_edge1128:                                  ; preds = %657, %.preheader997
  %.3.lcssa = phi i32 [ 0, %.preheader997 ], [ %651, %657 ]
  %635 = load ptr, ptr @stdout, align 8, !tbaa !5
  %636 = getelementptr inbounds i8, ptr %23, i64 56
  %637 = load double, ptr %636, align 8, !tbaa !48
  %638 = getelementptr inbounds i8, ptr %23, i64 40
  %639 = load double, ptr %638, align 8, !tbaa !50
  %640 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %635, ptr noundef nonnull @.str.10, double noundef %637, double noundef %639) #14
  %641 = sitofp i32 %101 to double
  %642 = getelementptr inbounds i8, ptr %23, i64 64
  %643 = load double, ptr %642, align 8, !tbaa !51
  %644 = fcmp ogt double %643, %641
  br i1 %644, label %659, label %662

645:                                              ; preds = %634
  %646 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  br label %663

.lr.ph1127:                                       ; preds = %.preheader997, %657
  %indvars.iv1277 = phi i64 [ %indvars.iv.next1278, %657 ], [ 0, %.preheader997 ]
  %647 = mul nsw i64 %indvars.iv1277, %79
  %648 = getelementptr inbounds double, ptr %131, i64 %647
  %649 = getelementptr inbounds ptr, ptr %356, i64 %indvars.iv1277
  %650 = load ptr, ptr %649, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 192, ptr nonnull %24) #14
  %651 = invoke i32 @libxsmm_matdiff(ptr noundef nonnull %24, i32 noundef 0, i32 noundef %69, i32 noundef %70, ptr noundef %648, ptr noundef %650, ptr noundef nonnull %5, ptr noundef nonnull %5)
          to label %652 unwind label %655

652:                                              ; preds = %.lr.ph1127
  %653 = icmp eq i32 %651, 0
  br i1 %653, label %654, label %657

654:                                              ; preds = %652
  invoke void @libxsmm_matdiff_reduce(ptr noundef nonnull %23, ptr noundef nonnull %24)
          to label %657 unwind label %655

655:                                              ; preds = %654, %.lr.ph1127
  %656 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  call void @llvm.lifetime.end.p0(i64 192, ptr nonnull %24) #14
  br label %663

657:                                              ; preds = %654, %652
  call void @llvm.lifetime.end.p0(i64 192, ptr nonnull %24) #14
  %indvars.iv.next1278 = add nuw nsw i64 %indvars.iv1277, 1
  %658 = icmp slt i64 %indvars.iv.next1278, %332
  br i1 %658, label %.lr.ph1127, label %._crit_edge1128, !llvm.loop !57

659:                                              ; preds = %._crit_edge1128
  %660 = load ptr, ptr @stderr, align 8, !tbaa !5
  %661 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %660, ptr noundef nonnull @.str.11) #16
  br label %662

662:                                              ; preds = %659, %._crit_edge1128
  %.4 = phi i32 [ 1, %659 ], [ %.3.lcssa, %._crit_edge1128 ]
  call void @llvm.lifetime.end.p0(i64 192, ptr nonnull %23) #14
  br label %664

663:                                              ; preds = %655, %645
  %.pn944 = phi { ptr, i32 } [ %656, %655 ], [ %646, %645 ]
  call void @llvm.lifetime.end.p0(i64 192, ptr nonnull %23) #14
  br label %665

664:                                              ; preds = %662, %627
  %.5 = phi i32 [ %.4, %662 ], [ 0, %627 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %22) #14
  br label %1084

665:                                              ; preds = %623, %663, %625, %593, %589
  %.pn948 = phi { ptr, i32 } [ %594, %593 ], [ %590, %589 ], [ %624, %623 ], [ %.pn944, %663 ], [ %626, %625 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %22) #14
  br label %1088

666:                                              ; preds = %351
  %667 = load ptr, ptr @stdout, align 8, !tbaa !5
  %668 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %667, ptr noundef nonnull @.str.14) #14
  %669 = invoke i64 @libxsmm_timer_tick()
          to label %.preheader1004 unwind label %683

.preheader1004:                                   ; preds = %666
  br i1 %140, label %.preheader1003.us.preheader, label %.split1101.us

.preheader1003.us.preheader:                      ; preds = %.preheader1004
  %umax1257 = call i32 @llvm.umax.i32(i32 %71, i32 1)
  br label %.preheader1003.us

.preheader1003.us:                                ; preds = %.preheader1003.us.preheader, %._crit_edge1098.us
  %.08611099.us = phi i32 [ %680, %._crit_edge1098.us ], [ 0, %.preheader1003.us.preheader ]
  br label %670

670:                                              ; preds = %.preheader1003.us, %678
  %indvars.iv1254 = phi i64 [ 0, %.preheader1003.us ], [ %indvars.iv.next1255, %678 ]
  %671 = trunc nuw nsw i64 %indvars.iv1254 to i32
  %672 = call noundef i32 @_ZZ4mainENK4raii7shuffleEi(ptr noundef nonnull align 8 dereferenceable(48) %11, i32 noundef %671)
  %673 = sext i32 %672 to i64
  %674 = mul nsw i64 %673, %76
  %675 = getelementptr inbounds double, ptr %123, i64 %674
  %676 = mul nsw i64 %indvars.iv1254, %79
  %677 = getelementptr inbounds double, ptr %131, i64 %676
  invoke void @_ZNK18libxsmm_mmfunctionIddLin1EEclEPKdS2_Pd(ptr noundef nonnull align 8 dereferenceable(8) %12, ptr noundef %115, ptr noundef %675, ptr noundef %677)
          to label %678 unwind label %.split1103.us

678:                                              ; preds = %670
  %indvars.iv.next1255 = add nuw nsw i64 %indvars.iv1254, 1
  %679 = icmp slt i64 %indvars.iv.next1255, %332
  br i1 %679, label %670, label %._crit_edge1098.us, !llvm.loop !58

._crit_edge1098.us:                               ; preds = %678
  %680 = add nuw nsw i32 %.08611099.us, 1
  %exitcond1258.not = icmp eq i32 %680, %umax1257
  br i1 %exitcond1258.not, label %.split1101.us, label %.preheader1003.us, !llvm.loop !59

.split1103.us:                                    ; preds = %670
  %681 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  br label %1088

.split1101.us:                                    ; preds = %._crit_edge1098.us, %.preheader1004
  %682 = invoke i64 @libxsmm_timer_tick()
          to label %685 unwind label %713

683:                                              ; preds = %666
  %684 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  br label %1088

685:                                              ; preds = %.split1101.us
  %686 = call noundef i64 @_Z21libxsmm_timer_ncyclesyy(i64 noundef %669, i64 noundef %682)
  %687 = invoke double @libxsmm_timer_duration(i64 noundef 0, i64 noundef %686)
          to label %688 unwind label %715

688:                                              ; preds = %685
  %689 = uitofp nneg i32 %71 to double
  %690 = fdiv double %687, %689
  %691 = fcmp ogt double %690, 0.000000e+00
  %692 = icmp ne i64 %686, 0
  %or.cond13 = and i1 %692, %691
  br i1 %or.cond13, label %693, label %717

693:                                              ; preds = %688
  %694 = load ptr, ptr @stdout, align 8, !tbaa !5
  %695 = call double @llvm.fmuladd.f64(double %93, double 2.000000e+00, double -1.000000e+00)
  %696 = fmul double %89, %87
  %697 = fmul double %696, %91
  %698 = fmul double %695, %697
  %699 = uitofp i64 %686 to double
  %700 = fdiv double %698, %699
  %701 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %694, ptr noundef nonnull @.str.5, double noundef %700, ptr noundef nonnull %10) #14
  %702 = load ptr, ptr @stdout, align 8, !tbaa !5
  %703 = fdiv double %94, %690
  %704 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %702, ptr noundef nonnull @.str.6, double noundef %703, ptr noundef nonnull %10) #14
  %705 = load ptr, ptr @stdout, align 8, !tbaa !5
  %706 = shl nsw i64 %75, 3
  %707 = sub nsw i64 %86, %706
  %708 = mul i64 %707, %332
  %709 = uitofp i64 %708 to double
  %710 = fmul double %690, 0x41D0000000000000
  %711 = fdiv double %709, %710
  %712 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %705, ptr noundef nonnull @.str.7, double noundef %711) #14
  br label %717

713:                                              ; preds = %.split1101.us
  %714 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  br label %1088

715:                                              ; preds = %685
  %716 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  br label %1088

717:                                              ; preds = %693, %688
  %718 = load ptr, ptr @stdout, align 8, !tbaa !5
  %719 = fmul double %690, 1.000000e+03
  %720 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %718, ptr noundef nonnull @.str.8, double noundef %719) #14
  br label %721

721:                                              ; preds = %717, %351
  %722 = load ptr, ptr @stdout, align 8, !tbaa !5
  %723 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %722, ptr noundef nonnull @.str.15) #14
  br i1 %140, label %.lr.ph1106, label %._crit_edge1107

._crit_edge1107:                                  ; preds = %.lr.ph1106, %721
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %25) #14
  store i32 8, ptr %25, align 4, !tbaa !9
  %724 = invoke i64 @libxsmm_timer_tick()
          to label %.preheader1002.preheader unwind label %738

.preheader1002.preheader:                         ; preds = %._crit_edge1107
  %umax1262 = call i32 @llvm.umax.i32(i32 %71, i32 1)
  br label %.preheader1002

.lr.ph1106:                                       ; preds = %721, %.lr.ph1106
  %indvars.iv1259 = phi i64 [ %indvars.iv.next1260, %.lr.ph1106 ], [ 0, %721 ]
  %725 = getelementptr inbounds ptr, ptr %352, i64 %indvars.iv1259
  store ptr %115, ptr %725, align 8, !tbaa !5
  %726 = trunc nuw nsw i64 %indvars.iv1259 to i32
  %727 = call noundef i32 @_ZZ4mainENK4raii7shuffleEi(ptr noundef nonnull align 8 dereferenceable(48) %11, i32 noundef %726)
  %728 = sext i32 %727 to i64
  %729 = mul nsw i64 %728, %76
  %730 = getelementptr inbounds double, ptr %123, i64 %729
  %731 = getelementptr inbounds ptr, ptr %354, i64 %indvars.iv1259
  store ptr %730, ptr %731, align 8, !tbaa !5
  %732 = mul nsw i64 %indvars.iv1259, %79
  %733 = getelementptr inbounds double, ptr %139, i64 %732
  %734 = getelementptr inbounds ptr, ptr %356, i64 %indvars.iv1259
  store ptr %733, ptr %734, align 8, !tbaa !5
  %indvars.iv.next1260 = add nuw nsw i64 %indvars.iv1259, 1
  %735 = icmp slt i64 %indvars.iv.next1260, %332
  br i1 %735, label %.lr.ph1106, label %._crit_edge1107, !llvm.loop !60

736:                                              ; preds = %740
  %737 = invoke i64 @libxsmm_timer_tick()
          to label %744 unwind label %772

738:                                              ; preds = %._crit_edge1107
  %739 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  br label %814

.preheader1002:                                   ; preds = %.preheader1002.preheader, %740
  %.08571108 = phi i32 [ %741, %740 ], [ 0, %.preheader1002.preheader ]
  invoke void @libxsmm_gemm_batch(i32 noundef 0, i32 noundef 0, ptr noundef nonnull %6, ptr noundef nonnull %7, i32 noundef %69, i32 noundef %70, i32 noundef %67, ptr noundef nonnull %8, ptr noundef nonnull %352, ptr noundef nonnull %3, ptr noundef nonnull %25, ptr noundef nonnull %354, ptr noundef nonnull %4, ptr noundef nonnull %25, ptr noundef nonnull %9, ptr noundef nonnull %356, ptr noundef nonnull %5, ptr noundef nonnull %25, i32 noundef 0, i32 noundef 0, i32 noundef %., i32 noundef 0)
          to label %740 unwind label %742

740:                                              ; preds = %.preheader1002
  %741 = add nuw nsw i32 %.08571108, 1
  %exitcond1263.not = icmp eq i32 %741, %umax1262
  br i1 %exitcond1263.not, label %736, label %.preheader1002, !llvm.loop !61

742:                                              ; preds = %.preheader1002
  %743 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  br label %814

744:                                              ; preds = %736
  %745 = call noundef i64 @_Z21libxsmm_timer_ncyclesyy(i64 noundef %724, i64 noundef %737)
  %746 = invoke double @libxsmm_timer_duration(i64 noundef 0, i64 noundef %745)
          to label %747 unwind label %774

747:                                              ; preds = %744
  %748 = uitofp nneg i32 %71 to double
  %749 = fdiv double %746, %748
  %750 = fcmp ogt double %749, 0.000000e+00
  %751 = icmp ne i64 %745, 0
  %or.cond15 = and i1 %751, %750
  br i1 %or.cond15, label %752, label %776

752:                                              ; preds = %747
  %753 = load ptr, ptr @stdout, align 8, !tbaa !5
  %754 = call double @llvm.fmuladd.f64(double %93, double 2.000000e+00, double -1.000000e+00)
  %755 = fmul double %89, %87
  %756 = fmul double %755, %91
  %757 = fmul double %754, %756
  %758 = uitofp i64 %745 to double
  %759 = fdiv double %757, %758
  %760 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %753, ptr noundef nonnull @.str.5, double noundef %759, ptr noundef nonnull %10) #14
  %761 = load ptr, ptr @stdout, align 8, !tbaa !5
  %762 = fdiv double %94, %749
  %763 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %761, ptr noundef nonnull @.str.6, double noundef %762, ptr noundef nonnull %10) #14
  %764 = load ptr, ptr @stdout, align 8, !tbaa !5
  %765 = shl nsw i64 %75, 3
  %766 = sub nsw i64 %86, %765
  %767 = mul i64 %766, %332
  %768 = uitofp i64 %767 to double
  %769 = fmul double %749, 0x41D0000000000000
  %770 = fdiv double %768, %769
  %771 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %764, ptr noundef nonnull @.str.7, double noundef %770) #14
  br label %776

772:                                              ; preds = %736
  %773 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  br label %814

774:                                              ; preds = %744
  %775 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  br label %814

776:                                              ; preds = %752, %747
  %777 = load ptr, ptr @stdout, align 8, !tbaa !5
  %778 = fmul double %749, 1.000000e+03
  %779 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %777, ptr noundef nonnull @.str.8, double noundef %778) #14
  %780 = and i32 %68, 1
  %781 = icmp eq i32 %780, 0
  %782 = icmp ne i32 %101, 0
  %or.cond17 = select i1 %781, i1 %782, i1 false
  br i1 %or.cond17, label %783, label %813

783:                                              ; preds = %776
  call void @llvm.lifetime.start.p0(i64 192, ptr nonnull %26) #14
  invoke void @libxsmm_matdiff_clear(ptr noundef nonnull %26)
          to label %.preheader1001 unwind label %794

.preheader1001:                                   ; preds = %783
  br i1 %140, label %.lr.ph1110, label %._crit_edge1111

._crit_edge1111:                                  ; preds = %806, %.preheader1001
  %.6.lcssa = phi i32 [ 0, %.preheader1001 ], [ %800, %806 ]
  %784 = load ptr, ptr @stdout, align 8, !tbaa !5
  %785 = getelementptr inbounds i8, ptr %26, i64 56
  %786 = load double, ptr %785, align 8, !tbaa !48
  %787 = getelementptr inbounds i8, ptr %26, i64 40
  %788 = load double, ptr %787, align 8, !tbaa !50
  %789 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %784, ptr noundef nonnull @.str.10, double noundef %786, double noundef %788) #14
  %790 = sitofp i32 %101 to double
  %791 = getelementptr inbounds i8, ptr %26, i64 64
  %792 = load double, ptr %791, align 8, !tbaa !51
  %793 = fcmp ogt double %792, %790
  br i1 %793, label %808, label %811

794:                                              ; preds = %783
  %795 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  br label %812

.lr.ph1110:                                       ; preds = %.preheader1001, %806
  %indvars.iv1264 = phi i64 [ %indvars.iv.next1265, %806 ], [ 0, %.preheader1001 ]
  %796 = mul nsw i64 %indvars.iv1264, %79
  %797 = getelementptr inbounds double, ptr %131, i64 %796
  %798 = getelementptr inbounds ptr, ptr %356, i64 %indvars.iv1264
  %799 = load ptr, ptr %798, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 192, ptr nonnull %27) #14
  %800 = invoke i32 @libxsmm_matdiff(ptr noundef nonnull %27, i32 noundef 0, i32 noundef %69, i32 noundef %70, ptr noundef %797, ptr noundef %799, ptr noundef nonnull %5, ptr noundef nonnull %5)
          to label %801 unwind label %804

801:                                              ; preds = %.lr.ph1110
  %802 = icmp eq i32 %800, 0
  br i1 %802, label %803, label %806

803:                                              ; preds = %801
  invoke void @libxsmm_matdiff_reduce(ptr noundef nonnull %26, ptr noundef nonnull %27)
          to label %806 unwind label %804

804:                                              ; preds = %803, %.lr.ph1110
  %805 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  call void @llvm.lifetime.end.p0(i64 192, ptr nonnull %27) #14
  br label %812

806:                                              ; preds = %803, %801
  call void @llvm.lifetime.end.p0(i64 192, ptr nonnull %27) #14
  %indvars.iv.next1265 = add nuw nsw i64 %indvars.iv1264, 1
  %807 = icmp slt i64 %indvars.iv.next1265, %332
  br i1 %807, label %.lr.ph1110, label %._crit_edge1111, !llvm.loop !62

808:                                              ; preds = %._crit_edge1111
  %809 = load ptr, ptr @stderr, align 8, !tbaa !5
  %810 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %809, ptr noundef nonnull @.str.11) #16
  br label %811

811:                                              ; preds = %808, %._crit_edge1111
  %.7 = phi i32 [ 1, %808 ], [ %.6.lcssa, %._crit_edge1111 ]
  call void @llvm.lifetime.end.p0(i64 192, ptr nonnull %26) #14
  br label %813

812:                                              ; preds = %804, %794
  %.pn934 = phi { ptr, i32 } [ %805, %804 ], [ %795, %794 ]
  call void @llvm.lifetime.end.p0(i64 192, ptr nonnull %26) #14
  br label %814

813:                                              ; preds = %811, %776
  %.8 = phi i32 [ %.7, %811 ], [ 0, %776 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %25) #14
  br label %1084

814:                                              ; preds = %772, %812, %774, %742, %738
  %.pn938 = phi { ptr, i32 } [ %743, %742 ], [ %739, %738 ], [ %773, %772 ], [ %.pn934, %812 ], [ %775, %774 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %25) #14
  br label %1088

815:                                              ; preds = %351
  %816 = load ptr, ptr @stdout, align 8, !tbaa !5
  %817 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %816, ptr noundef nonnull @.str.16) #14
  %818 = invoke i64 @libxsmm_timer_tick()
          to label %.preheader1007 unwind label %834

.preheader1007:                                   ; preds = %815
  br i1 %140, label %.preheader1006.us.preheader, label %.split1088.us

.preheader1006.us.preheader:                      ; preds = %.preheader1007
  %umax1247 = call i32 @llvm.umax.i32(i32 %71, i32 1)
  br label %.preheader1006.us

.preheader1006.us:                                ; preds = %.preheader1006.us.preheader, %._crit_edge1085.us
  %.08501086.us = phi i32 [ %831, %._crit_edge1085.us ], [ 0, %.preheader1006.us.preheader ]
  br label %819

819:                                              ; preds = %.preheader1006.us, %828
  %.08491083.us = phi i32 [ 0, %.preheader1006.us ], [ %829, %828 ]
  %820 = call noundef i32 @_ZZ4mainENK4raii7shuffleEi(ptr noundef nonnull align 8 dereferenceable(48) %11, i32 noundef %.08491083.us)
  %821 = sext i32 %820 to i64
  %822 = mul nsw i64 %821, %75
  %823 = getelementptr inbounds double, ptr %115, i64 %822
  %824 = call noundef i32 @_ZZ4mainENK4raii7shuffleEi(ptr noundef nonnull align 8 dereferenceable(48) %11, i32 noundef %.08491083.us)
  %825 = sext i32 %824 to i64
  %826 = mul nsw i64 %825, %76
  %827 = getelementptr inbounds double, ptr %123, i64 %826
  invoke void @_ZNK18libxsmm_mmfunctionIddLin1EEclEPKdS2_Pd(ptr noundef nonnull align 8 dereferenceable(8) %12, ptr noundef %823, ptr noundef %827, ptr noundef %131)
          to label %828 unwind label %.split1090.us

828:                                              ; preds = %819
  %829 = add nuw nsw i32 %.08491083.us, 1
  %830 = icmp slt i32 %829, %.
  br i1 %830, label %819, label %._crit_edge1085.us, !llvm.loop !63

._crit_edge1085.us:                               ; preds = %828
  %831 = add nuw nsw i32 %.08501086.us, 1
  %exitcond1248.not = icmp eq i32 %831, %umax1247
  br i1 %exitcond1248.not, label %.split1088.us, label %.preheader1006.us, !llvm.loop !64

.split1090.us:                                    ; preds = %819
  %832 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  br label %1088

.split1088.us:                                    ; preds = %._crit_edge1085.us, %.preheader1007
  %833 = invoke i64 @libxsmm_timer_tick()
          to label %836 unwind label %862

834:                                              ; preds = %815
  %835 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  br label %1088

836:                                              ; preds = %.split1088.us
  %837 = call noundef i64 @_Z21libxsmm_timer_ncyclesyy(i64 noundef %818, i64 noundef %833)
  %838 = invoke double @libxsmm_timer_duration(i64 noundef 0, i64 noundef %837)
          to label %839 unwind label %864

839:                                              ; preds = %836
  %840 = uitofp nneg i32 %71 to double
  %841 = fdiv double %838, %840
  %842 = fcmp ogt double %841, 0.000000e+00
  %843 = icmp ne i64 %837, 0
  %or.cond19 = and i1 %843, %842
  br i1 %or.cond19, label %844, label %866

844:                                              ; preds = %839
  %845 = load ptr, ptr @stdout, align 8, !tbaa !5
  %846 = call double @llvm.fmuladd.f64(double %93, double 2.000000e+00, double -1.000000e+00)
  %847 = fmul double %89, %87
  %848 = fmul double %847, %91
  %849 = fmul double %846, %848
  %850 = uitofp i64 %837 to double
  %851 = fdiv double %849, %850
  %852 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %845, ptr noundef nonnull @.str.5, double noundef %851, ptr noundef nonnull %10) #14
  %853 = load ptr, ptr @stdout, align 8, !tbaa !5
  %854 = fdiv double %94, %841
  %855 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %853, ptr noundef nonnull @.str.6, double noundef %854, ptr noundef nonnull %10) #14
  %856 = load ptr, ptr @stdout, align 8, !tbaa !5
  %857 = mul i64 %78, %332
  %858 = uitofp i64 %857 to double
  %859 = fmul double %841, 0x41D0000000000000
  %860 = fdiv double %858, %859
  %861 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %856, ptr noundef nonnull @.str.7, double noundef %860) #14
  br label %866

862:                                              ; preds = %.split1088.us
  %863 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  br label %1088

864:                                              ; preds = %836
  %865 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  br label %1088

866:                                              ; preds = %844, %839
  %867 = load ptr, ptr @stdout, align 8, !tbaa !5
  %868 = fmul double %841, 1.000000e+03
  %869 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %867, ptr noundef nonnull @.str.8, double noundef %868) #14
  br label %870

870:                                              ; preds = %866, %351
  %871 = load ptr, ptr @stdout, align 8, !tbaa !5
  %872 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %871, ptr noundef nonnull @.str.17) #14
  br i1 %140, label %.lr.ph1093, label %._crit_edge1094

._crit_edge1094:                                  ; preds = %.lr.ph1093, %870
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %28) #14
  store i32 8, ptr %28, align 4, !tbaa !9
  %873 = invoke i64 @libxsmm_timer_tick()
          to label %.preheader1005 unwind label %892

.preheader1005:                                   ; preds = %._crit_edge1094
  %874 = icmp eq i32 %101, 0
  %875 = sub nsw i32 0, %.
  %876 = select i1 %874, i32 %875, i32 %.
  %umax1252 = call i32 @llvm.umax.i32(i32 %71, i32 1)
  br label %894

.lr.ph1093:                                       ; preds = %870, %.lr.ph1093
  %indvars.iv1249 = phi i64 [ %indvars.iv.next1250, %.lr.ph1093 ], [ 0, %870 ]
  %877 = trunc nuw nsw i64 %indvars.iv1249 to i32
  %878 = call noundef i32 @_ZZ4mainENK4raii7shuffleEi(ptr noundef nonnull align 8 dereferenceable(48) %11, i32 noundef %877)
  %879 = sext i32 %878 to i64
  %880 = mul nsw i64 %879, %75
  %881 = getelementptr inbounds double, ptr %115, i64 %880
  %882 = getelementptr inbounds ptr, ptr %352, i64 %indvars.iv1249
  store ptr %881, ptr %882, align 8, !tbaa !5
  %883 = call noundef i32 @_ZZ4mainENK4raii7shuffleEi(ptr noundef nonnull align 8 dereferenceable(48) %11, i32 noundef %877)
  %884 = sext i32 %883 to i64
  %885 = mul nsw i64 %884, %76
  %886 = getelementptr inbounds double, ptr %123, i64 %885
  %887 = getelementptr inbounds ptr, ptr %354, i64 %indvars.iv1249
  store ptr %886, ptr %887, align 8, !tbaa !5
  %888 = getelementptr inbounds ptr, ptr %356, i64 %indvars.iv1249
  store ptr %139, ptr %888, align 8, !tbaa !5
  %indvars.iv.next1250 = add nuw nsw i64 %indvars.iv1249, 1
  %889 = icmp slt i64 %indvars.iv.next1250, %332
  br i1 %889, label %.lr.ph1093, label %._crit_edge1094, !llvm.loop !65

890:                                              ; preds = %895
  %891 = invoke i64 @libxsmm_timer_tick()
          to label %899 unwind label %925

892:                                              ; preds = %._crit_edge1094
  %893 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  br label %956

894:                                              ; preds = %.preheader1005, %895
  %.08391095 = phi i32 [ 0, %.preheader1005 ], [ %896, %895 ]
  invoke void @libxsmm_gemm_batch(i32 noundef 0, i32 noundef 0, ptr noundef nonnull %6, ptr noundef nonnull %7, i32 noundef %69, i32 noundef %70, i32 noundef %67, ptr noundef nonnull %8, ptr noundef nonnull %352, ptr noundef nonnull %3, ptr noundef nonnull %28, ptr noundef nonnull %354, ptr noundef nonnull %4, ptr noundef nonnull %28, ptr noundef nonnull %9, ptr noundef nonnull %356, ptr noundef nonnull %5, ptr noundef nonnull %28, i32 noundef 0, i32 noundef 0, i32 noundef %876, i32 noundef 0)
          to label %895 unwind label %897

895:                                              ; preds = %894
  %896 = add nuw nsw i32 %.08391095, 1
  %exitcond1253.not = icmp eq i32 %896, %umax1252
  br i1 %exitcond1253.not, label %890, label %894, !llvm.loop !66

897:                                              ; preds = %894
  %898 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  br label %956

899:                                              ; preds = %890
  %900 = call noundef i64 @_Z21libxsmm_timer_ncyclesyy(i64 noundef %873, i64 noundef %891)
  %901 = invoke double @libxsmm_timer_duration(i64 noundef 0, i64 noundef %900)
          to label %902 unwind label %927

902:                                              ; preds = %899
  %903 = uitofp nneg i32 %71 to double
  %904 = fdiv double %901, %903
  %905 = fcmp ogt double %904, 0.000000e+00
  %906 = icmp ne i64 %900, 0
  %or.cond21 = and i1 %906, %905
  br i1 %or.cond21, label %907, label %929

907:                                              ; preds = %902
  %908 = load ptr, ptr @stdout, align 8, !tbaa !5
  %909 = call double @llvm.fmuladd.f64(double %93, double 2.000000e+00, double -1.000000e+00)
  %910 = fmul double %89, %87
  %911 = fmul double %910, %91
  %912 = fmul double %909, %911
  %913 = uitofp i64 %900 to double
  %914 = fdiv double %912, %913
  %915 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %908, ptr noundef nonnull @.str.5, double noundef %914, ptr noundef nonnull %10) #14
  %916 = load ptr, ptr @stdout, align 8, !tbaa !5
  %917 = fdiv double %94, %904
  %918 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %916, ptr noundef nonnull @.str.6, double noundef %917, ptr noundef nonnull %10) #14
  %919 = load ptr, ptr @stdout, align 8, !tbaa !5
  %920 = mul i64 %78, %332
  %921 = uitofp i64 %920 to double
  %922 = fmul double %904, 0x41D0000000000000
  %923 = fdiv double %921, %922
  %924 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %919, ptr noundef nonnull @.str.7, double noundef %923) #14
  br label %929

925:                                              ; preds = %890
  %926 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  br label %956

927:                                              ; preds = %899
  %928 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  br label %956

929:                                              ; preds = %907, %902
  %930 = load ptr, ptr @stdout, align 8, !tbaa !5
  %931 = fmul double %904, 1.000000e+03
  %932 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %930, ptr noundef nonnull @.str.8, double noundef %931) #14
  %933 = and i32 %68, 1
  %934 = icmp eq i32 %933, 0
  %935 = icmp ne i32 %101, 0
  %or.cond23 = select i1 %934, i1 %935, i1 false
  br i1 %or.cond23, label %936, label %955

936:                                              ; preds = %929
  call void @llvm.lifetime.start.p0(i64 192, ptr nonnull %29) #14
  %937 = invoke i32 @libxsmm_matdiff(ptr noundef nonnull %29, i32 noundef 0, i32 noundef %69, i32 noundef %70, ptr noundef %131, ptr noundef %139, ptr noundef nonnull %5, ptr noundef nonnull %5)
          to label %938 unwind label %952

938:                                              ; preds = %936
  %939 = load ptr, ptr @stdout, align 8, !tbaa !5
  %940 = getelementptr inbounds i8, ptr %29, i64 56
  %941 = load double, ptr %940, align 8, !tbaa !48
  %942 = getelementptr inbounds i8, ptr %29, i64 40
  %943 = load double, ptr %942, align 8, !tbaa !50
  %944 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %939, ptr noundef nonnull @.str.10, double noundef %941, double noundef %943) #14
  %945 = sitofp i32 %101 to double
  %946 = getelementptr inbounds i8, ptr %29, i64 64
  %947 = load double, ptr %946, align 8, !tbaa !51
  %948 = fcmp ogt double %947, %945
  br i1 %948, label %949, label %954

949:                                              ; preds = %938
  %950 = load ptr, ptr @stderr, align 8, !tbaa !5
  %951 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %950, ptr noundef nonnull @.str.11) #16
  br label %954

952:                                              ; preds = %936
  %953 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  call void @llvm.lifetime.end.p0(i64 192, ptr nonnull %29) #14
  br label %956

954:                                              ; preds = %949, %938
  %.9 = phi i32 [ 1, %949 ], [ %937, %938 ]
  call void @llvm.lifetime.end.p0(i64 192, ptr nonnull %29) #14
  br label %955

955:                                              ; preds = %954, %929
  %.10 = phi i32 [ %.9, %954 ], [ 0, %929 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %28) #14
  br label %1084

956:                                              ; preds = %925, %952, %927, %897, %892
  %.pn928 = phi { ptr, i32 } [ %898, %897 ], [ %893, %892 ], [ %926, %925 ], [ %953, %952 ], [ %928, %927 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %28) #14
  br label %1088

957:                                              ; preds = %351
  %958 = load ptr, ptr @stdout, align 8, !tbaa !5
  %959 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %958, ptr noundef nonnull @.str.18) #14
  %960 = invoke i64 @libxsmm_timer_tick()
          to label %.preheader1010 unwind label %968

.preheader1010:                                   ; preds = %957
  br i1 %140, label %.preheader1009.us.preheader, label %.split.us

.preheader1009.us.preheader:                      ; preds = %.preheader1010
  %umax = call i32 @llvm.umax.i32(i32 %71, i32 1)
  br label %.preheader1009.us

.preheader1009.us:                                ; preds = %.preheader1009.us.preheader, %._crit_edge1074.us
  %.08301075.us = phi i32 [ %965, %._crit_edge1074.us ], [ 0, %.preheader1009.us.preheader ]
  br label %961

961:                                              ; preds = %.preheader1009.us, %962
  %.08291072.us = phi i32 [ 0, %.preheader1009.us ], [ %963, %962 ]
  invoke void @_ZNK18libxsmm_mmfunctionIddLin1EEclEPKdS2_Pd(ptr noundef nonnull align 8 dereferenceable(8) %12, ptr noundef %115, ptr noundef %123, ptr noundef %131)
          to label %962 unwind label %.split1077.us

962:                                              ; preds = %961
  %963 = add nuw nsw i32 %.08291072.us, 1
  %964 = icmp slt i32 %963, %.
  br i1 %964, label %961, label %._crit_edge1074.us, !llvm.loop !67

._crit_edge1074.us:                               ; preds = %962
  %965 = add nuw nsw i32 %.08301075.us, 1
  %exitcond1241.not = icmp eq i32 %965, %umax
  br i1 %exitcond1241.not, label %.split.us, label %.preheader1009.us, !llvm.loop !68

.split1077.us:                                    ; preds = %961
  %966 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  br label %1088

.split.us:                                        ; preds = %._crit_edge1074.us, %.preheader1010
  %967 = invoke i64 @libxsmm_timer_tick()
          to label %970 unwind label %990

968:                                              ; preds = %957
  %969 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  br label %1088

970:                                              ; preds = %.split.us
  %971 = call noundef i64 @_Z21libxsmm_timer_ncyclesyy(i64 noundef %960, i64 noundef %967)
  %972 = invoke double @libxsmm_timer_duration(i64 noundef 0, i64 noundef %971)
          to label %973 unwind label %992

973:                                              ; preds = %970
  %974 = uitofp nneg i32 %71 to double
  %975 = fdiv double %972, %974
  %976 = fcmp ogt double %975, 0.000000e+00
  %977 = icmp ne i64 %971, 0
  %or.cond25 = and i1 %977, %976
  br i1 %or.cond25, label %978, label %994

978:                                              ; preds = %973
  %979 = load ptr, ptr @stdout, align 8, !tbaa !5
  %980 = call double @llvm.fmuladd.f64(double %93, double 2.000000e+00, double -1.000000e+00)
  %981 = fmul double %89, %87
  %982 = fmul double %981, %91
  %983 = fmul double %980, %982
  %984 = uitofp i64 %971 to double
  %985 = fdiv double %983, %984
  %986 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %979, ptr noundef nonnull @.str.5, double noundef %985, ptr noundef nonnull %10) #14
  %987 = load ptr, ptr @stdout, align 8, !tbaa !5
  %988 = fdiv double %94, %975
  %989 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %987, ptr noundef nonnull @.str.6, double noundef %988, ptr noundef nonnull %10) #14
  br label %994

990:                                              ; preds = %.split.us
  %991 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  br label %1088

992:                                              ; preds = %970
  %993 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  br label %1088

994:                                              ; preds = %978, %973
  %995 = load ptr, ptr @stdout, align 8, !tbaa !5
  %996 = fmul double %975, 1.000000e+03
  %997 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %995, ptr noundef nonnull @.str.8, double noundef %996) #14
  br label %998

998:                                              ; preds = %994, %351
  %999 = load ptr, ptr @stdout, align 8, !tbaa !5
  %1000 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %999, ptr noundef nonnull @.str.19) #14
  br i1 %140, label %.lr.ph1080.preheader, label %._crit_edge1081

.lr.ph1080.preheader:                             ; preds = %998
  %min.iters.check1368 = icmp ult i32 %., 16
  br i1 %min.iters.check1368, label %.lr.ph1080.preheader1385, label %vector.memcheck

.lr.ph1080.preheader1385:                         ; preds = %middle.block1366, %vector.memcheck, %.lr.ph1080.preheader
  %indvars.iv1242.ph = phi i64 [ 0, %vector.memcheck ], [ 0, %.lr.ph1080.preheader ], [ %n.vec1371, %middle.block1366 ]
  br label %.lr.ph1080

vector.memcheck:                                  ; preds = %.lr.ph1080.preheader
  %1001 = sub i64 %355, %353
  %diff.check = icmp ult i64 %1001, 32
  %1002 = sub i64 %357, %353
  %diff.check1363 = icmp ult i64 %1002, 32
  %conflict.rdx = or i1 %diff.check, %diff.check1363
  %1003 = sub i64 %357, %355
  %diff.check1364 = icmp ult i64 %1003, 32
  %conflict.rdx1365 = or i1 %conflict.rdx, %diff.check1364
  br i1 %conflict.rdx1365, label %.lr.ph1080.preheader1385, label %vector.ph1369

vector.ph1369:                                    ; preds = %vector.memcheck
  %n.vec1371 = and i64 %332, 2147483644
  %broadcast.splatinsert1375 = insertelement <2 x ptr> poison, ptr %115, i64 0
  %broadcast.splat1376 = shufflevector <2 x ptr> %broadcast.splatinsert1375, <2 x ptr> poison, <2 x i32> zeroinitializer
  %broadcast.splatinsert1377 = insertelement <2 x ptr> poison, ptr %123, i64 0
  %broadcast.splat1378 = shufflevector <2 x ptr> %broadcast.splatinsert1377, <2 x ptr> poison, <2 x i32> zeroinitializer
  %broadcast.splatinsert1379 = insertelement <2 x ptr> poison, ptr %139, i64 0
  %broadcast.splat1380 = shufflevector <2 x ptr> %broadcast.splatinsert1379, <2 x ptr> poison, <2 x i32> zeroinitializer
  br label %vector.body1373

vector.body1373:                                  ; preds = %vector.body1373, %vector.ph1369
  %index1374 = phi i64 [ 0, %vector.ph1369 ], [ %index.next1381, %vector.body1373 ]
  %1004 = getelementptr inbounds ptr, ptr %352, i64 %index1374
  %1005 = getelementptr inbounds i8, ptr %1004, i64 16
  store <2 x ptr> %broadcast.splat1376, ptr %1004, align 8, !tbaa !5
  store <2 x ptr> %broadcast.splat1376, ptr %1005, align 8, !tbaa !5
  %1006 = getelementptr inbounds ptr, ptr %354, i64 %index1374
  %1007 = getelementptr inbounds i8, ptr %1006, i64 16
  store <2 x ptr> %broadcast.splat1378, ptr %1006, align 8, !tbaa !5
  store <2 x ptr> %broadcast.splat1378, ptr %1007, align 8, !tbaa !5
  %1008 = getelementptr inbounds ptr, ptr %356, i64 %index1374
  %1009 = getelementptr inbounds i8, ptr %1008, i64 16
  store <2 x ptr> %broadcast.splat1380, ptr %1008, align 8, !tbaa !5
  store <2 x ptr> %broadcast.splat1380, ptr %1009, align 8, !tbaa !5
  %index.next1381 = add nuw i64 %index1374, 4
  %1010 = icmp eq i64 %index.next1381, %n.vec1371
  br i1 %1010, label %middle.block1366, label %vector.body1373, !llvm.loop !69

middle.block1366:                                 ; preds = %vector.body1373
  %cmp.n1382 = icmp eq i64 %n.vec1371, %332
  br i1 %cmp.n1382, label %._crit_edge1081, label %.lr.ph1080.preheader1385

._crit_edge1081:                                  ; preds = %.lr.ph1080, %middle.block1366, %998
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %30) #14
  store i32 8, ptr %30, align 4, !tbaa !9
  %1011 = invoke i64 @libxsmm_timer_tick()
          to label %.preheader1008 unwind label %1021

.preheader1008:                                   ; preds = %._crit_edge1081
  %1012 = icmp eq i32 %101, 0
  %1013 = sub nsw i32 0, %.
  %1014 = select i1 %1012, i32 %1013, i32 %.
  %umax1245 = call i32 @llvm.umax.i32(i32 %71, i32 1)
  br label %1023

.lr.ph1080:                                       ; preds = %.lr.ph1080.preheader1385, %.lr.ph1080
  %indvars.iv1242 = phi i64 [ %indvars.iv.next1243, %.lr.ph1080 ], [ %indvars.iv1242.ph, %.lr.ph1080.preheader1385 ]
  %1015 = getelementptr inbounds ptr, ptr %352, i64 %indvars.iv1242
  store ptr %115, ptr %1015, align 8, !tbaa !5
  %1016 = getelementptr inbounds ptr, ptr %354, i64 %indvars.iv1242
  store ptr %123, ptr %1016, align 8, !tbaa !5
  %1017 = getelementptr inbounds ptr, ptr %356, i64 %indvars.iv1242
  store ptr %139, ptr %1017, align 8, !tbaa !5
  %indvars.iv.next1243 = add nuw nsw i64 %indvars.iv1242, 1
  %1018 = icmp slt i64 %indvars.iv.next1243, %332
  br i1 %1018, label %.lr.ph1080, label %._crit_edge1081, !llvm.loop !70

1019:                                             ; preds = %1024
  %1020 = invoke i64 @libxsmm_timer_tick()
          to label %1028 unwind label %1048

1021:                                             ; preds = %._crit_edge1081
  %1022 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  br label %1079

1023:                                             ; preds = %.preheader1008, %1024
  %.08191082 = phi i32 [ 0, %.preheader1008 ], [ %1025, %1024 ]
  invoke void @libxsmm_gemm_batch(i32 noundef 0, i32 noundef 0, ptr noundef nonnull %6, ptr noundef nonnull %7, i32 noundef %69, i32 noundef %70, i32 noundef %67, ptr noundef nonnull %8, ptr noundef nonnull %352, ptr noundef nonnull %3, ptr noundef nonnull %30, ptr noundef nonnull %354, ptr noundef nonnull %4, ptr noundef nonnull %30, ptr noundef nonnull %9, ptr noundef nonnull %356, ptr noundef nonnull %5, ptr noundef nonnull %30, i32 noundef 0, i32 noundef 0, i32 noundef %1014, i32 noundef 0)
          to label %1024 unwind label %1026

1024:                                             ; preds = %1023
  %1025 = add nuw nsw i32 %.08191082, 1
  %exitcond1246.not = icmp eq i32 %1025, %umax1245
  br i1 %exitcond1246.not, label %1019, label %1023, !llvm.loop !71

1026:                                             ; preds = %1023
  %1027 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  br label %1079

1028:                                             ; preds = %1019
  %1029 = call noundef i64 @_Z21libxsmm_timer_ncyclesyy(i64 noundef %1011, i64 noundef %1020)
  %1030 = invoke double @libxsmm_timer_duration(i64 noundef 0, i64 noundef %1029)
          to label %1031 unwind label %1050

1031:                                             ; preds = %1028
  %1032 = uitofp nneg i32 %71 to double
  %1033 = fdiv double %1030, %1032
  %1034 = fcmp ogt double %1033, 0.000000e+00
  %1035 = icmp ne i64 %1029, 0
  %or.cond27 = and i1 %1035, %1034
  br i1 %or.cond27, label %1036, label %1052

1036:                                             ; preds = %1031
  %1037 = load ptr, ptr @stdout, align 8, !tbaa !5
  %1038 = call double @llvm.fmuladd.f64(double %93, double 2.000000e+00, double -1.000000e+00)
  %1039 = fmul double %89, %87
  %1040 = fmul double %1039, %91
  %1041 = fmul double %1038, %1040
  %1042 = uitofp i64 %1029 to double
  %1043 = fdiv double %1041, %1042
  %1044 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %1037, ptr noundef nonnull @.str.5, double noundef %1043, ptr noundef nonnull %10) #14
  %1045 = load ptr, ptr @stdout, align 8, !tbaa !5
  %1046 = fdiv double %94, %1033
  %1047 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %1045, ptr noundef nonnull @.str.6, double noundef %1046, ptr noundef nonnull %10) #14
  br label %1052

1048:                                             ; preds = %1019
  %1049 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  br label %1079

1050:                                             ; preds = %1028
  %1051 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  br label %1079

1052:                                             ; preds = %1036, %1031
  %1053 = load ptr, ptr @stdout, align 8, !tbaa !5
  %1054 = fmul double %1033, 1.000000e+03
  %1055 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %1053, ptr noundef nonnull @.str.8, double noundef %1054) #14
  %1056 = and i32 %68, 1
  %1057 = icmp eq i32 %1056, 0
  %1058 = icmp ne i32 %101, 0
  %or.cond29 = select i1 %1057, i1 %1058, i1 false
  br i1 %or.cond29, label %1059, label %1078

1059:                                             ; preds = %1052
  call void @llvm.lifetime.start.p0(i64 192, ptr nonnull %31) #14
  %1060 = invoke i32 @libxsmm_matdiff(ptr noundef nonnull %31, i32 noundef 0, i32 noundef %69, i32 noundef %70, ptr noundef %131, ptr noundef %139, ptr noundef nonnull %5, ptr noundef nonnull %5)
          to label %1061 unwind label %1075

1061:                                             ; preds = %1059
  %1062 = load ptr, ptr @stdout, align 8, !tbaa !5
  %1063 = getelementptr inbounds i8, ptr %31, i64 56
  %1064 = load double, ptr %1063, align 8, !tbaa !48
  %1065 = getelementptr inbounds i8, ptr %31, i64 40
  %1066 = load double, ptr %1065, align 8, !tbaa !50
  %1067 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %1062, ptr noundef nonnull @.str.10, double noundef %1064, double noundef %1066) #14
  %1068 = sitofp i32 %101 to double
  %1069 = getelementptr inbounds i8, ptr %31, i64 64
  %1070 = load double, ptr %1069, align 8, !tbaa !51
  %1071 = fcmp ogt double %1070, %1068
  br i1 %1071, label %1072, label %1077

1072:                                             ; preds = %1061
  %1073 = load ptr, ptr @stderr, align 8, !tbaa !5
  %1074 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %1073, ptr noundef nonnull @.str.11) #16
  br label %1077

1075:                                             ; preds = %1059
  %1076 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  call void @llvm.lifetime.end.p0(i64 192, ptr nonnull %31) #14
  br label %1079

1077:                                             ; preds = %1072, %1061
  %.11 = phi i32 [ 1, %1072 ], [ %1060, %1061 ]
  call void @llvm.lifetime.end.p0(i64 192, ptr nonnull %31) #14
  br label %1078

1078:                                             ; preds = %1077, %1052
  %.12 = phi i32 [ %.11, %1077 ], [ 0, %1052 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %30) #14
  br label %1084

1079:                                             ; preds = %1048, %1075, %1050, %1026, %1021
  %.pn919 = phi { ptr, i32 } [ %1027, %1026 ], [ %1022, %1021 ], [ %1049, %1048 ], [ %1076, %1075 ], [ %1051, %1050 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %30) #14
  br label %1088

1080:                                             ; preds = %351
  %1081 = call ptr @__cxa_allocate_exception(i64 8) #14
  store ptr @.str.20, ptr %1081, align 16, !tbaa !5
  invoke void @__cxa_throw(ptr nonnull %1081, ptr nonnull @_ZTIPKc, ptr null) #15
          to label %1115 unwind label %1082

1082:                                             ; preds = %1084, %1080
  %1083 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  br label %1088

1084:                                             ; preds = %1078, %955, %813, %664, %515
  %.13 = phi i32 [ %.12, %1078 ], [ %.10, %955 ], [ %.8, %813 ], [ %.5, %664 ], [ %.2, %515 ]
  invoke void @libxsmm_finalize()
          to label %1085 unwind label %1082

1085:                                             ; preds = %1084
  %1086 = load ptr, ptr @stdout, align 8, !tbaa !5
  %1087 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %1086, ptr noundef nonnull @.str.21) #14
  call void @_ZNSt6vectorIPdSaIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %17) #14
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %17) #14
  call void @_ZNSt6vectorIPKdSaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %15) #14
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %15) #14
  call void @_ZNSt6vectorIPKdSaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %13) #14
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %13) #14
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %12) #14
  call void @_ZZ4mainEN4raiiD2Ev(ptr noundef nonnull align 8 dereferenceable(48) %11) #14
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %11) #14
  call void @llvm.lifetime.end.p0(i64 6, ptr nonnull %10) #14
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %9) #14
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #14
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %7) #14
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %6) #14
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %5) #14
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %4) #14
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %3) #14
  br label %1105

1088:                                             ; preds = %968, %.split1077.us, %992, %990, %834, %.split1090.us, %864, %862, %683, %.split1103.us, %715, %713, %534, %.split1120.us, %566, %564, %385, %.split1137.us, %415, %413, %1082, %1079, %956, %814, %665, %516
  %.pn962 = phi { ptr, i32 } [ %1083, %1082 ], [ %.pn919, %1079 ], [ %.pn928, %956 ], [ %.pn938, %814 ], [ %.pn948, %665 ], [ %.pn958, %516 ], [ %383, %.split1137.us ], [ %386, %385 ], [ %416, %415 ], [ %414, %413 ], [ %532, %.split1120.us ], [ %535, %534 ], [ %567, %566 ], [ %565, %564 ], [ %681, %.split1103.us ], [ %684, %683 ], [ %716, %715 ], [ %714, %713 ], [ %832, %.split1090.us ], [ %835, %834 ], [ %865, %864 ], [ %863, %862 ], [ %966, %.split1077.us ], [ %969, %968 ], [ %993, %992 ], [ %991, %990 ]
  call void @_ZNSt6vectorIPdSaIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %17) #14
  br label %1089

1089:                                             ; preds = %1088, %362
  %.pn962.pn = phi { ptr, i32 } [ %.pn962, %1088 ], [ %363, %362 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %17) #14
  call void @_ZNSt6vectorIPKdSaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %15) #14
  br label %1090

1090:                                             ; preds = %1089, %360
  %.pn962.pn.pn = phi { ptr, i32 } [ %.pn962.pn, %1089 ], [ %361, %360 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %15) #14
  call void @_ZNSt6vectorIPKdSaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %13) #14
  br label %1091

1091:                                             ; preds = %1090, %358
  %.pn962.pn.pn.pn = phi { ptr, i32 } [ %.pn962.pn.pn, %1090 ], [ %359, %358 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %13) #14
  br label %1092

1092:                                             ; preds = %1091, %346
  %.pn962.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn962.pn.pn.pn, %1091 ], [ %347, %346 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %12) #14
  br label %1093

1093:                                             ; preds = %205, %265, %1092, %344
  %.pn962.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn962.pn.pn.pn.pn, %1092 ], [ %345, %344 ], [ %266, %265 ], [ %206, %205 ]
  call void @_ZZ4mainEN4raiiD2Ev(ptr noundef nonnull align 8 dereferenceable(48) %11) #14
  br label %1094

1094:                                             ; preds = %1093, %147
  %.pn962.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn962.pn.pn.pn.pn.pn, %1093 ], [ %148, %147 ]
  %.35 = extractvalue { ptr, i32 } %.pn962.pn.pn.pn.pn.pn.pn, 0
  %.35818 = extractvalue { ptr, i32 } %.pn962.pn.pn.pn.pn.pn.pn, 1
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %11) #14
  call void @llvm.lifetime.end.p0(i64 6, ptr nonnull %10) #14
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %9) #14
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #14
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %7) #14
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %6) #14
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %5) #14
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %4) #14
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %3) #14
  %1095 = call i32 @llvm.eh.typeid.for.p0(ptr nonnull @_ZTISt9exception) #14
  %1096 = icmp eq i32 %.35818, %1095
  br i1 %1096, label %1097, label %1106

1097:                                             ; preds = %1094
  %1098 = call ptr @__cxa_begin_catch(ptr %.35) #14
  %1099 = load ptr, ptr @stderr, align 8, !tbaa !5
  %1100 = load ptr, ptr %1098, align 8, !tbaa !72
  %1101 = getelementptr inbounds i8, ptr %1100, i64 16
  %1102 = load ptr, ptr %1101, align 8
  %1103 = call noundef ptr %1102(ptr noundef nonnull align 8 dereferenceable(8) %1098) #14
  %1104 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %1099, ptr noundef nonnull @.str.23, ptr noundef %1103) #16
  call void @__cxa_end_catch()
  br label %1105

1105:                                             ; preds = %1113, %1111, %1097, %1085
  %.14 = phi i32 [ 1, %1097 ], [ 1, %1111 ], [ 1, %1113 ], [ %.13, %1085 ]
  ret i32 %.14

1106:                                             ; preds = %1094
  %1107 = call i32 @llvm.eh.typeid.for.p0(ptr nonnull @_ZTIPKc) #14
  %1108 = icmp eq i32 %.35818, %1107
  %1109 = call ptr @__cxa_begin_catch(ptr %.35) #14
  %1110 = load ptr, ptr @stderr, align 8, !tbaa !5
  br i1 %1108, label %1111, label %1113

1111:                                             ; preds = %1106
  %1112 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %1110, ptr noundef nonnull @.str.23, ptr noundef %1109) #16
  call void @__cxa_end_catch() #14
  br label %1105

1113:                                             ; preds = %1106
  %1114 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %1110, ptr noundef nonnull @.str.22) #16
  call void @__cxa_end_catch()
  br label %1105

1115:                                             ; preds = %1080, %342
  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 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) #3

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

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

declare i32 @__gxx_personality_v0(...)

; Function Attrs: mustprogress nounwind uwtable
declare hidden noundef i32 @_ZZ4mainENK4raii7shuffleEi(ptr noundef nonnull align 8 dereferenceable(48), i32 noundef) local_unnamed_addr #6 align 2

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

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

declare i64 @libxsmm_coprime2(i64 noundef) local_unnamed_addr #8

declare void @libxsmm_init() local_unnamed_addr #8

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

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

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

declare ptr @__cxa_allocate_exception(i64) local_unnamed_addr

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSaIPKdEC2Ev(ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #6 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt6vectorIPKdSaIS1_EEC2EmRKS2_(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef, ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSaIPdEC2Ev(ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #6 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt6vectorIPdSaIS0_EEC2EmRKS1_(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef, ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIPKdSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef) local_unnamed_addr #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIPdSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef) local_unnamed_addr #6 align 2

declare i64 @libxsmm_timer_tick() local_unnamed_addr #8

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef i64 @_Z21libxsmm_timer_ncyclesyy(i64 noundef, i64 noundef) local_unnamed_addr #10

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

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

declare void @libxsmm_matdiff_clear(ptr noundef) local_unnamed_addr #8

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

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

declare void @libxsmm_finalize() local_unnamed_addr #8

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt6vectorIPdSaIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt6vectorIPKdSaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #6 align 2

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

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

declare ptr @__cxa_begin_catch(ptr) local_unnamed_addr

declare void @__cxa_end_catch() local_unnamed_addr

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt15__new_allocatorIPKdED2Ev(ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt15__new_allocatorIPdED2Ev(ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #6 align 2

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

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

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

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 nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #4 = { 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 #5 = { 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 #6 = { 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 #7 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #8 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #9 = { 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 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 #11 = { nofree nosync nounwind memory(none) }
attributes #12 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #13 = { nounwind willreturn memory(read) }
attributes #14 = { nounwind }
attributes #15 = { noreturn }
attributes #16 = { 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, !6, i64 24, !16, i64 32, !16, i64 40}
!16 = !{!"long", !7, i64 0}
!17 = !{!15, !6, i64 8}
!18 = !{!15, !6, i64 16}
!19 = !{!15, !6, i64 24}
!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}
!32 = !{!"llvm.loop.isvectorized", i32 1}
!33 = !{!"llvm.loop.unroll.runtime.disable"}
!34 = distinct !{!34, !21, !32, !33}
!35 = distinct !{!35, !21, !33, !32}
!36 = distinct !{!36, !21, !33, !32}
!37 = distinct !{!37, !21}
!38 = distinct !{!38, !21, !32, !33}
!39 = distinct !{!39, !21, !32, !33}
!40 = distinct !{!40, !21, !33, !32}
!41 = distinct !{!41, !21, !33, !32}
!42 = distinct !{!42, !21}
!43 = distinct !{!43, !21}
!44 = distinct !{!44, !21}
!45 = distinct !{!45, !21}
!46 = distinct !{!46, !21}
!47 = distinct !{!47, !21}
!48 = !{!49, !13, i64 56}
!49 = !{!"_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}
!50 = !{!49, !13, i64 40}
!51 = !{!49, !13, i64 64}
!52 = distinct !{!52, !21}
!53 = distinct !{!53, !21}
!54 = distinct !{!54, !21}
!55 = distinct !{!55, !21}
!56 = distinct !{!56, !21}
!57 = distinct !{!57, !21}
!58 = distinct !{!58, !21}
!59 = distinct !{!59, !21}
!60 = distinct !{!60, !21}
!61 = distinct !{!61, !21}
!62 = distinct !{!62, !21}
!63 = distinct !{!63, !21}
!64 = distinct !{!64, !21}
!65 = distinct !{!65, !21}
!66 = distinct !{!66, !21}
!67 = distinct !{!67, !21}
!68 = distinct !{!68, !21}
!69 = distinct !{!69, !21, !32, !33}
!70 = distinct !{!70, !21, !32}
!71 = distinct !{!71, !21}
!72 = !{!73, !73, i64 0}
!73 = !{!"vtable pointer", !8, i64 0}


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