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

; 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, i64, i64 }
%class.libxsmm_mmfunction = type { ptr }
%struct.libxsmm_matdiff_info = type { double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, i32, i32, i32, i32 }

@_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 [20 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [10 x i8], align 1
@stderr = external global ptr, align 8
@.str.15 = external hidden unnamed_addr constant [34 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [11 x i8], align 1

; Function Attrs: mustprogress norecurse uwtable
define dso_local noundef i32 @main(i32 noundef %0, ptr noundef %1) #0 personality ptr @__gxx_personality_v0 {
  %3 = alloca i32, align 4
  %4 = alloca i32, align 4
  %5 = alloca ptr, align 8
  %6 = alloca i32, align 4
  %7 = alloca i32, align 4
  %8 = alloca i32, align 4
  %9 = alloca i32, align 4
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  %13 = alloca 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 i32, align 4
  %39 = alloca double, align 8
  %40 = alloca double, align 8
  %41 = alloca i32, align 4
  %42 = alloca i32, align 4
  %43 = alloca i32, align 4
  %44 = alloca i32, align 4
  %45 = alloca i32, align 4
  %46 = alloca i32, align 4
  %47 = alloca i32, align 4
  %48 = alloca i32, align 4
  %49 = alloca double, align 8
  %50 = alloca double, align 8
  %51 = alloca i64, align 8
  %52 = alloca i32, align 4
  %53 = alloca double, align 8
  %54 = alloca double, align 8
  %55 = alloca i32, align 4
  %56 = alloca i32, align 4
  %57 = alloca i32, align 4
  %58 = alloca i32, align 4
  %59 = alloca i32, align 4
  %60 = alloca i32, align 4
  %61 = alloca i32, align 4
  %62 = alloca i32, align 4
  %63 = alloca double, align 8
  %64 = alloca double, align 8
  %65 = alloca i64, align 8
  %66 = alloca i32, align 4
  %67 = alloca double, align 8
  %68 = alloca double, align 8
  %69 = alloca i32, align 4
  %70 = alloca i32, align 4
  %71 = alloca i32, align 4
  %72 = alloca i32, align 4
  %73 = alloca i32, align 4
  %74 = alloca i32, align 4
  %75 = alloca i32, align 4
  %76 = alloca i32, align 4
  %77 = alloca double, align 8
  %78 = alloca double, align 8
  %79 = alloca i64, align 8
  %80 = alloca i32, align 4
  %81 = alloca %class.libxsmm_mmfunction, align 8
  %82 = alloca i64, align 8
  %83 = alloca i32, align 4
  %84 = alloca i32, align 4
  %85 = alloca i32, align 4
  %86 = alloca i64, align 8
  %87 = alloca double, align 8
  %88 = alloca i64, align 8
  %89 = alloca i32, align 4
  %90 = alloca i32, align 4
  %91 = alloca i64, align 8
  %92 = alloca double, align 8
  %93 = alloca i64, align 8
  %94 = alloca i32, align 4
  %95 = alloca i32, align 4
  %96 = alloca i64, align 8
  %97 = alloca double, align 8
  %98 = alloca i64, align 8
  %99 = alloca i32, align 4
  %100 = alloca i32, align 4
  %101 = alloca i32, align 4
  %102 = alloca i64, align 8
  %103 = alloca double, align 8
  %104 = alloca i64, align 8
  %105 = alloca i32, align 4
  %106 = alloca i32, align 4
  %107 = alloca i32, align 4
  %108 = alloca i64, align 8
  %109 = alloca double, align 8
  %110 = alloca %struct.libxsmm_matdiff_info, align 8
  %111 = alloca ptr, align 8
  %112 = 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) #12
  store i32 0, ptr %6, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #12
  %113 = load i32, ptr %4, align 4, !tbaa !5
  %114 = icmp slt i32 1, %113
  br i1 %114, label %115, label %120

115:                                              ; preds = %2
  %116 = load ptr, ptr %5, align 8, !tbaa !9
  %117 = getelementptr inbounds ptr, ptr %116, i64 1
  %118 = load ptr, ptr %117, align 8, !tbaa !9
  %119 = call i32 @atoi(ptr noundef %118) #13
  br label %121

120:                                              ; preds = %2
  br label %121

121:                                              ; preds = %120, %115
  %122 = phi i32 [ %119, %115 ], [ 0, %120 ]
  store i32 %122, ptr %7, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #12
  %123 = load i32, ptr %4, align 4, !tbaa !5
  %124 = icmp slt i32 2, %123
  br i1 %124, label %125, label %130

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

130:                                              ; preds = %121
  br label %131

131:                                              ; preds = %130, %125
  %132 = phi i32 [ %129, %125 ], [ 23, %130 ]
  store i32 %132, ptr %8, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #12
  %133 = load i32, ptr %4, align 4, !tbaa !5
  %134 = icmp slt i32 4, %133
  br i1 %134, label %135, label %140

135:                                              ; preds = %131
  %136 = load ptr, ptr %5, align 8, !tbaa !9
  %137 = getelementptr inbounds ptr, ptr %136, i64 4
  %138 = load ptr, ptr %137, align 8, !tbaa !9
  %139 = call i32 @atoi(ptr noundef %138) #13
  br label %142

140:                                              ; preds = %131
  %141 = load i32, ptr %8, align 4, !tbaa !5
  br label %142

142:                                              ; preds = %140, %135
  %143 = phi i32 [ %139, %135 ], [ %141, %140 ]
  store i32 %143, ptr %9, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #12
  %144 = load i32, ptr %4, align 4, !tbaa !5
  %145 = icmp slt i32 3, %144
  br i1 %145, label %146, label %151

146:                                              ; preds = %142
  %147 = load ptr, ptr %5, align 8, !tbaa !9
  %148 = getelementptr inbounds ptr, ptr %147, i64 3
  %149 = load ptr, ptr %148, align 8, !tbaa !9
  %150 = call i32 @atoi(ptr noundef %149) #13
  br label %153

151:                                              ; preds = %142
  %152 = load i32, ptr %9, align 4, !tbaa !5
  br label %153

153:                                              ; preds = %151, %146
  %154 = phi i32 [ %150, %146 ], [ %152, %151 ]
  store i32 %154, ptr %10, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #12
  %155 = load i32, ptr %4, align 4, !tbaa !5
  %156 = icmp slt i32 5, %155
  br i1 %156, label %157, label %162

157:                                              ; preds = %153
  %158 = load ptr, ptr %5, align 8, !tbaa !9
  %159 = getelementptr inbounds ptr, ptr %158, i64 5
  %160 = load ptr, ptr %159, align 8, !tbaa !9
  %161 = call i32 @atoi(ptr noundef %160) #13
  br label %163

162:                                              ; preds = %153
  br label %163

163:                                              ; preds = %162, %157
  %164 = phi i32 [ %161, %157 ], [ 0, %162 ]
  store i32 %164, ptr %11, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #12
  %165 = load i32, ptr %4, align 4, !tbaa !5
  %166 = icmp slt i32 6, %165
  br i1 %166, label %167, label %178

167:                                              ; preds = %163
  %168 = load ptr, ptr %5, align 8, !tbaa !9
  %169 = getelementptr inbounds ptr, ptr %168, i64 6
  %170 = load ptr, ptr %169, align 8, !tbaa !9
  %171 = call i32 @atoi(ptr noundef %170) #13
  %172 = icmp slt i32 0, %171
  br i1 %172, label %173, label %178

173:                                              ; preds = %167
  %174 = load ptr, ptr %5, align 8, !tbaa !9
  %175 = getelementptr inbounds ptr, ptr %174, i64 6
  %176 = load ptr, ptr %175, align 8, !tbaa !9
  %177 = call i32 @atoi(ptr noundef %176) #13
  br label %183

178:                                              ; preds = %167, %163
  %179 = load i32, ptr %11, align 4, !tbaa !5
  %180 = icmp sge i32 0, %179
  %181 = zext i1 %180 to i64
  %182 = select i1 %180, i32 13, i32 1
  br label %183

183:                                              ; preds = %178, %173
  %184 = phi i32 [ %177, %173 ], [ %182, %178 ]
  store i32 %184, ptr %12, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #12
  %185 = load i32, ptr %8, align 4, !tbaa !5
  store i32 %185, ptr %13, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #12
  %186 = load i32, ptr %9, align 4, !tbaa !5
  store i32 %186, ptr %14, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #12
  %187 = load i32, ptr %8, align 4, !tbaa !5
  store i32 %187, ptr %15, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr %16) #12
  store i8 78, ptr %16, align 1, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 1, ptr %17) #12
  store i8 78, ptr %17, align 1, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #12
  store double 1.000000e+00, ptr %18, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #12
  store double 1.000000e+00, ptr %19, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #12
  %188 = load i32, ptr %13, align 4, !tbaa !5
  %189 = load i32, ptr %9, align 4, !tbaa !5
  %190 = mul nsw i32 %188, %189
  store i32 %190, ptr %20, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #12
  %191 = load i32, ptr %14, align 4, !tbaa !5
  %192 = load i32, ptr %10, align 4, !tbaa !5
  %193 = mul nsw i32 %191, %192
  store i32 %193, ptr %21, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #12
  %194 = load i32, ptr %15, align 4, !tbaa !5
  %195 = load i32, ptr %10, align 4, !tbaa !5
  %196 = mul nsw i32 %194, %195
  store i32 %196, ptr %22, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #12
  %197 = load i32, ptr %20, align 4, !tbaa !5
  %198 = sext i32 %197 to i64
  %199 = load i32, ptr %21, align 4, !tbaa !5
  %200 = sext i32 %199 to i64
  %201 = add i64 %198, %200
  %202 = mul i64 %201, 8
  %203 = load i32, ptr %22, align 4, !tbaa !5
  %204 = sext i32 %203 to i64
  %205 = mul i64 %204, 8
  %206 = add i64 %202, %205
  %207 = udiv i64 2147483648, %206
  %208 = trunc i64 %207 to i32
  store i32 %208, ptr %23, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #12
  %209 = load i32, ptr %11, align 4, !tbaa !5
  %210 = icmp slt i32 0, %209
  br i1 %210, label %211, label %213

211:                                              ; preds = %183
  %212 = load i32, ptr %11, align 4, !tbaa !5
  br label %215

213:                                              ; preds = %183
  %214 = load i32, ptr %23, align 4, !tbaa !5
  br label %215

215:                                              ; preds = %213, %211
  %216 = phi i32 [ %212, %211 ], [ %214, %213 ]
  %217 = load i32, ptr %23, align 4, !tbaa !5
  %218 = icmp slt i32 %216, %217
  br i1 %218, label %219, label %228

219:                                              ; preds = %215
  %220 = load i32, ptr %11, align 4, !tbaa !5
  %221 = icmp slt i32 0, %220
  br i1 %221, label %222, label %224

222:                                              ; preds = %219
  %223 = load i32, ptr %11, align 4, !tbaa !5
  br label %226

224:                                              ; preds = %219
  %225 = load i32, ptr %23, align 4, !tbaa !5
  br label %226

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

228:                                              ; preds = %215
  %229 = load i32, ptr %23, align 4, !tbaa !5
  br label %230

230:                                              ; preds = %228, %226
  %231 = phi i32 [ %227, %226 ], [ %229, %228 ]
  store i32 %231, ptr %24, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #12
  store i32 8, ptr %25, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #12
  %232 = load i32, ptr %20, align 4, !tbaa !5
  %233 = sext i32 %232 to i64
  %234 = load i32, ptr %21, align 4, !tbaa !5
  %235 = sext i32 %234 to i64
  %236 = add i64 %233, %235
  %237 = mul i64 %236, 8
  %238 = load i32, ptr %22, align 4, !tbaa !5
  %239 = sext i32 %238 to i64
  %240 = mul i64 8, %239
  %241 = mul i64 %240, 2
  %242 = add i64 %237, %241
  store i64 %242, ptr %26, align 8, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #12
  %243 = load i32, ptr %24, align 4, !tbaa !5
  %244 = sitofp i32 %243 to double
  %245 = fmul double 2.000000e-09, %244
  %246 = load i32, ptr %8, align 4, !tbaa !5
  %247 = sitofp i32 %246 to double
  %248 = fmul double %245, %247
  %249 = load i32, ptr %10, align 4, !tbaa !5
  %250 = sitofp i32 %249 to double
  %251 = fmul double %248, %250
  %252 = load i32, ptr %9, align 4, !tbaa !5
  %253 = sitofp i32 %252 to double
  %254 = fmul double %251, %253
  store double %254, ptr %27, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 6, ptr %28) #12
  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) #12
  %255 = load i32, ptr %24, align 4, !tbaa !5
  %256 = sitofp i32 %255 to double
  %257 = fdiv double 1.000000e+00, %256
  store double %257, ptr %29, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #12
  %258 = call ptr @getenv(ptr noundef @.str) #12
  store ptr %258, ptr %30, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #12
  %259 = load ptr, ptr %30, align 8, !tbaa !9
  %260 = icmp eq ptr null, %259
  br i1 %260, label %261, label %262

261:                                              ; preds = %230
  br label %265

262:                                              ; preds = %230
  %263 = load ptr, ptr %30, align 8, !tbaa !9
  %264 = call i32 @atoi(ptr noundef %263) #13
  br label %265

265:                                              ; preds = %262, %261
  %266 = phi i32 [ 0, %261 ], [ %264, %262 ]
  store i32 %266, ptr %31, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 40, ptr %32) #12
  %267 = load i32, ptr %24, align 4, !tbaa !5
  %268 = load i32, ptr %20, align 4, !tbaa !5
  %269 = mul nsw i32 %267, %268
  %270 = add nsw i32 %269, 8
  %271 = sub nsw i32 %270, 1
  %272 = load i32, ptr %24, align 4, !tbaa !5
  %273 = load i32, ptr %21, align 4, !tbaa !5
  %274 = mul nsw i32 %272, %273
  %275 = add nsw i32 %274, 8
  %276 = sub nsw i32 %275, 1
  %277 = load i32, ptr %24, align 4, !tbaa !5
  %278 = load i32, ptr %22, align 4, !tbaa !5
  %279 = mul nsw i32 %277, %278
  %280 = add nsw i32 %279, 8
  %281 = sub nsw i32 %280, 1
  %282 = load i32, ptr %24, align 4, !tbaa !5
  invoke void @_ZZ4mainEN4raiiC2Eiiii(ptr noundef nonnull align 8 dereferenceable(40) %32, i32 noundef %271, i32 noundef %276, i32 noundef %281, i32 noundef %282)
          to label %283 unwind label %328

283:                                              ; preds = %265
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #12
  %284 = getelementptr inbounds %struct.raii, ptr %32, i32 0, i32 0
  %285 = load ptr, ptr %284, align 8, !tbaa !16
  %286 = getelementptr inbounds %struct.raii, ptr %32, i32 0, i32 0
  %287 = load ptr, ptr %286, align 8, !tbaa !16
  %288 = ptrtoint ptr %287 to i64
  %289 = add i64 %288, 63
  %290 = and i64 %289, -64
  %291 = getelementptr inbounds %struct.raii, ptr %32, i32 0, i32 0
  %292 = load ptr, ptr %291, align 8, !tbaa !16
  %293 = ptrtoint ptr %292 to i64
  %294 = sub i64 %290, %293
  %295 = udiv i64 %294, 8
  %296 = getelementptr inbounds double, ptr %285, i64 %295
  store ptr %296, ptr %35, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #12
  %297 = getelementptr inbounds %struct.raii, ptr %32, i32 0, i32 1
  %298 = load ptr, ptr %297, align 8, !tbaa !18
  %299 = getelementptr inbounds %struct.raii, ptr %32, i32 0, i32 1
  %300 = load ptr, ptr %299, align 8, !tbaa !18
  %301 = ptrtoint ptr %300 to i64
  %302 = add i64 %301, 63
  %303 = and i64 %302, -64
  %304 = getelementptr inbounds %struct.raii, ptr %32, i32 0, i32 1
  %305 = load ptr, ptr %304, align 8, !tbaa !18
  %306 = ptrtoint ptr %305 to i64
  %307 = sub i64 %303, %306
  %308 = udiv i64 %307, 8
  %309 = getelementptr inbounds double, ptr %298, i64 %308
  store ptr %309, ptr %36, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #12
  %310 = getelementptr inbounds %struct.raii, ptr %32, i32 0, i32 2
  %311 = load ptr, ptr %310, align 8, !tbaa !19
  %312 = getelementptr inbounds %struct.raii, ptr %32, i32 0, i32 2
  %313 = load ptr, ptr %312, align 8, !tbaa !19
  %314 = ptrtoint ptr %313 to i64
  %315 = add i64 %314, 63
  %316 = and i64 %315, -64
  %317 = getelementptr inbounds %struct.raii, ptr %32, i32 0, i32 2
  %318 = load ptr, ptr %317, align 8, !tbaa !19
  %319 = ptrtoint ptr %318 to i64
  %320 = sub i64 %316, %319
  %321 = udiv i64 %320, 8
  %322 = getelementptr inbounds double, ptr %311, i64 %321
  store ptr %322, ptr %37, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %38) #12
  store i32 0, ptr %38, align 4, !tbaa !5
  br label %323

323:                                              ; preds = %834, %283
  %324 = load i32, ptr %38, align 4, !tbaa !5
  %325 = load i32, ptr %24, align 4, !tbaa !5
  %326 = icmp slt i32 %324, %325
  br i1 %326, label %332, label %327

327:                                              ; preds = %323
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #12
  br label %838

328:                                              ; preds = %265
  %329 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %330 = extractvalue { ptr, i32 } %329, 0
  store ptr %330, ptr %33, align 8
  %331 = extractvalue { ptr, i32 } %329, 1
  store i32 %331, ptr %34, align 4
  br label %1507

332:                                              ; preds = %323
  br label %333

333:                                              ; preds = %332
  call void @llvm.lifetime.start.p0(i64 8, ptr %39) #12
  %334 = load i32, ptr %38, align 4, !tbaa !5
  %335 = invoke noundef i32 @_ZZ4mainENK4raii7shuffleEi(ptr noundef nonnull align 8 dereferenceable(40) %32, i32 noundef %334)
          to label %336 unwind label %389

336:                                              ; preds = %333
  %337 = add nsw i32 42, %335
  %338 = sitofp i32 %337 to double
  store double %338, ptr %39, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 8, ptr %40) #12
  %339 = load double, ptr %39, align 8, !tbaa !12
  %340 = load double, ptr %29, align 8, !tbaa !12
  %341 = load double, ptr %29, align 8, !tbaa !12
  %342 = call double @llvm.fmuladd.f64(double %339, double %340, double %341)
  store double %342, ptr %40, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 4, ptr %41) #12
  %343 = load i32, ptr %8, align 4, !tbaa !5
  store i32 %343, ptr %41, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %42) #12
  %344 = load i32, ptr %9, align 4, !tbaa !5
  store i32 %344, ptr %42, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %43) #12
  %345 = load i32, ptr %13, align 4, !tbaa !5
  store i32 %345, ptr %43, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %44) #12
  store i32 0, ptr %44, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %45) #12
  store i32 0, ptr %45, align 4, !tbaa !5
  %346 = load double, ptr %39, align 8, !tbaa !12
  %347 = fcmp une double 0.000000e+00, %346
  br i1 %347, label %348, label %433

348:                                              ; preds = %336
  store i32 0, ptr %44, align 4, !tbaa !5
  br label %349

349:                                              ; preds = %429, %348
  %350 = load i32, ptr %44, align 4, !tbaa !5
  %351 = load i32, ptr %42, align 4, !tbaa !5
  %352 = icmp slt i32 %350, %351
  br i1 %352, label %353, label %432

353:                                              ; preds = %349
  store i32 0, ptr %45, align 4, !tbaa !5
  br label %354

354:                                              ; preds = %386, %353
  %355 = load i32, ptr %45, align 4, !tbaa !5
  %356 = load i32, ptr %41, align 4, !tbaa !5
  %357 = icmp slt i32 %355, %356
  br i1 %357, label %358, label %397

358:                                              ; preds = %354
  call void @llvm.lifetime.start.p0(i64 4, ptr %46) #12
  %359 = load i32, ptr %44, align 4, !tbaa !5
  %360 = load i32, ptr %43, align 4, !tbaa !5
  %361 = mul nsw i32 %359, %360
  %362 = load i32, ptr %45, align 4, !tbaa !5
  %363 = add nsw i32 %361, %362
  store i32 %363, ptr %46, align 4, !tbaa !5
  %364 = load double, ptr %40, align 8, !tbaa !12
  %365 = load i32, ptr %44, align 4, !tbaa !5
  %366 = sitofp i32 %365 to double
  %367 = load i32, ptr %41, align 4, !tbaa !5
  %368 = sitofp i32 %367 to double
  %369 = call double @llvm.fmuladd.f64(double %366, double %368, double 1.000000e+00)
  %370 = load i32, ptr %45, align 4, !tbaa !5
  %371 = sitofp i32 %370 to double
  %372 = fadd double %369, %371
  %373 = fmul double %364, %372
  %374 = load ptr, ptr %35, align 8, !tbaa !9
  %375 = load i32, ptr %20, align 4, !tbaa !5
  %376 = sext i32 %375 to i64
  %377 = load i32, ptr %38, align 4, !tbaa !5
  %378 = invoke noundef i32 @_ZZ4mainENK4raii7shuffleEi(ptr noundef nonnull align 8 dereferenceable(40) %32, i32 noundef %377)
          to label %379 unwind label %393

379:                                              ; preds = %358
  %380 = sext i32 %378 to i64
  %381 = mul i64 %376, %380
  %382 = getelementptr inbounds double, ptr %374, i64 %381
  %383 = load i32, ptr %46, align 4, !tbaa !5
  %384 = sext i32 %383 to i64
  %385 = getelementptr inbounds double, ptr %382, i64 %384
  store double %373, ptr %385, align 8, !tbaa !12
  call void @llvm.lifetime.end.p0(i64 4, ptr %46) #12
  br label %386

386:                                              ; preds = %379
  %387 = load i32, ptr %45, align 4, !tbaa !5
  %388 = add nsw i32 %387, 1
  store i32 %388, ptr %45, align 4, !tbaa !5
  br label %354, !llvm.loop !20

389:                                              ; preds = %333
  %390 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %391 = extractvalue { ptr, i32 } %390, 0
  store ptr %391, ptr %33, align 8
  %392 = extractvalue { ptr, i32 } %390, 1
  store i32 %392, ptr %34, align 4
  br label %564

393:                                              ; preds = %358
  %394 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %395 = extractvalue { ptr, i32 } %394, 0
  store ptr %395, ptr %33, align 8
  %396 = extractvalue { ptr, i32 } %394, 1
  store i32 %396, ptr %34, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %46) #12
  br label %563

397:                                              ; preds = %354
  br label %398

398:                                              ; preds = %421, %397
  %399 = load i32, ptr %45, align 4, !tbaa !5
  %400 = load i32, ptr %43, align 4, !tbaa !5
  %401 = icmp slt i32 %399, %400
  br i1 %401, label %402, label %428

402:                                              ; preds = %398
  call void @llvm.lifetime.start.p0(i64 4, ptr %47) #12
  %403 = load i32, ptr %44, align 4, !tbaa !5
  %404 = load i32, ptr %43, align 4, !tbaa !5
  %405 = mul nsw i32 %403, %404
  %406 = load i32, ptr %45, align 4, !tbaa !5
  %407 = add nsw i32 %405, %406
  store i32 %407, ptr %47, align 4, !tbaa !5
  %408 = load double, ptr %39, align 8, !tbaa !12
  %409 = load ptr, ptr %35, align 8, !tbaa !9
  %410 = load i32, ptr %20, align 4, !tbaa !5
  %411 = sext i32 %410 to i64
  %412 = load i32, ptr %38, align 4, !tbaa !5
  %413 = invoke noundef i32 @_ZZ4mainENK4raii7shuffleEi(ptr noundef nonnull align 8 dereferenceable(40) %32, i32 noundef %412)
          to label %414 unwind label %424

414:                                              ; preds = %402
  %415 = sext i32 %413 to i64
  %416 = mul i64 %411, %415
  %417 = getelementptr inbounds double, ptr %409, i64 %416
  %418 = load i32, ptr %47, align 4, !tbaa !5
  %419 = sext i32 %418 to i64
  %420 = getelementptr inbounds double, ptr %417, i64 %419
  store double %408, ptr %420, align 8, !tbaa !12
  call void @llvm.lifetime.end.p0(i64 4, ptr %47) #12
  br label %421

421:                                              ; preds = %414
  %422 = load i32, ptr %45, align 4, !tbaa !5
  %423 = add nsw i32 %422, 1
  store i32 %423, ptr %45, align 4, !tbaa !5
  br label %398, !llvm.loop !22

424:                                              ; preds = %402
  %425 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %426 = extractvalue { ptr, i32 } %425, 0
  store ptr %426, ptr %33, align 8
  %427 = extractvalue { ptr, i32 } %425, 1
  store i32 %427, ptr %34, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %47) #12
  br label %563

428:                                              ; preds = %398
  br label %429

429:                                              ; preds = %428
  %430 = load i32, ptr %44, align 4, !tbaa !5
  %431 = add nsw i32 %430, 1
  store i32 %431, ptr %44, align 4, !tbaa !5
  br label %349, !llvm.loop !23

432:                                              ; preds = %349
  br label %504

433:                                              ; preds = %336
  call void @llvm.lifetime.start.p0(i64 4, ptr %48) #12
  %434 = load i32, ptr %42, align 4, !tbaa !5
  %435 = load i32, ptr %43, align 4, !tbaa !5
  %436 = mul nsw i32 %434, %435
  store i32 %436, ptr %48, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %49) #12
  %437 = load i32, ptr %48, align 4, !tbaa !5
  %438 = add nsw i32 %437, 1
  %439 = sdiv i32 %438, 2
  %440 = sitofp i32 %439 to double
  store double %440, ptr %49, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 8, ptr %50) #12
  %441 = load double, ptr %29, align 8, !tbaa !12
  %442 = load double, ptr %49, align 8, !tbaa !12
  %443 = fdiv double %441, %442
  store double %443, ptr %50, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 8, ptr %51) #12
  %444 = load i32, ptr %48, align 4, !tbaa !5
  %445 = sext i32 %444 to i64
  %446 = invoke i64 @libxsmm_coprime2(i64 noundef %445)
          to label %447 unwind label %490

447:                                              ; preds = %433
  store i64 %446, ptr %51, align 8, !tbaa !14
  store i32 0, ptr %44, align 4, !tbaa !5
  br label %448

448:                                              ; preds = %499, %447
  %449 = load i32, ptr %44, align 4, !tbaa !5
  %450 = load i32, ptr %42, align 4, !tbaa !5
  %451 = icmp slt i32 %449, %450
  br i1 %451, label %452, label %502

452:                                              ; preds = %448
  store i32 0, ptr %45, align 4, !tbaa !5
  br label %453

453:                                              ; preds = %487, %452
  %454 = load i32, ptr %45, align 4, !tbaa !5
  %455 = load i32, ptr %43, align 4, !tbaa !5
  %456 = icmp slt i32 %454, %455
  br i1 %456, label %457, label %498

457:                                              ; preds = %453
  call void @llvm.lifetime.start.p0(i64 4, ptr %52) #12
  %458 = load i32, ptr %44, align 4, !tbaa !5
  %459 = load i32, ptr %43, align 4, !tbaa !5
  %460 = mul nsw i32 %458, %459
  %461 = load i32, ptr %45, align 4, !tbaa !5
  %462 = add nsw i32 %460, %461
  store i32 %462, ptr %52, align 4, !tbaa !5
  %463 = load double, ptr %50, align 8, !tbaa !12
  %464 = load i64, ptr %51, align 8, !tbaa !14
  %465 = load i32, ptr %52, align 4, !tbaa !5
  %466 = sext i32 %465 to i64
  %467 = mul i64 %464, %466
  %468 = load i32, ptr %48, align 4, !tbaa !5
  %469 = sext i32 %468 to i64
  %470 = urem i64 %467, %469
  %471 = uitofp i64 %470 to double
  %472 = load double, ptr %49, align 8, !tbaa !12
  %473 = fsub double %471, %472
  %474 = fmul double %463, %473
  %475 = load ptr, ptr %35, align 8, !tbaa !9
  %476 = load i32, ptr %20, align 4, !tbaa !5
  %477 = sext i32 %476 to i64
  %478 = load i32, ptr %38, align 4, !tbaa !5
  %479 = invoke noundef i32 @_ZZ4mainENK4raii7shuffleEi(ptr noundef nonnull align 8 dereferenceable(40) %32, i32 noundef %478)
          to label %480 unwind label %494

480:                                              ; preds = %457
  %481 = sext i32 %479 to i64
  %482 = mul i64 %477, %481
  %483 = getelementptr inbounds double, ptr %475, i64 %482
  %484 = load i32, ptr %52, align 4, !tbaa !5
  %485 = sext i32 %484 to i64
  %486 = getelementptr inbounds double, ptr %483, i64 %485
  store double %474, ptr %486, align 8, !tbaa !12
  call void @llvm.lifetime.end.p0(i64 4, ptr %52) #12
  br label %487

487:                                              ; preds = %480
  %488 = load i32, ptr %45, align 4, !tbaa !5
  %489 = add nsw i32 %488, 1
  store i32 %489, ptr %45, align 4, !tbaa !5
  br label %453, !llvm.loop !24

490:                                              ; preds = %433
  %491 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %492 = extractvalue { ptr, i32 } %491, 0
  store ptr %492, ptr %33, align 8
  %493 = extractvalue { ptr, i32 } %491, 1
  store i32 %493, ptr %34, align 4
  br label %503

494:                                              ; preds = %457
  %495 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %496 = extractvalue { ptr, i32 } %495, 0
  store ptr %496, ptr %33, align 8
  %497 = extractvalue { ptr, i32 } %495, 1
  store i32 %497, ptr %34, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %52) #12
  br label %503

498:                                              ; preds = %453
  br label %499

499:                                              ; preds = %498
  %500 = load i32, ptr %44, align 4, !tbaa !5
  %501 = add nsw i32 %500, 1
  store i32 %501, ptr %44, align 4, !tbaa !5
  br label %448, !llvm.loop !25

502:                                              ; preds = %448
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %48) #12
  br label %504

503:                                              ; preds = %494, %490
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %48) #12
  br label %563

504:                                              ; preds = %502, %432
  call void @llvm.lifetime.end.p0(i64 4, ptr %45) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #12
  br label %505

505:                                              ; preds = %504
  br label %506

506:                                              ; preds = %505
  br label %507

507:                                              ; preds = %506
  call void @llvm.lifetime.start.p0(i64 8, ptr %53) #12
  %508 = load i32, ptr %38, align 4, !tbaa !5
  %509 = invoke noundef i32 @_ZZ4mainENK4raii7shuffleEi(ptr noundef nonnull align 8 dereferenceable(40) %32, i32 noundef %508)
          to label %510 unwind label %565

510:                                              ; preds = %507
  %511 = add nsw i32 24, %509
  %512 = sitofp i32 %511 to double
  store double %512, ptr %53, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 8, ptr %54) #12
  %513 = load double, ptr %53, align 8, !tbaa !12
  %514 = load double, ptr %29, align 8, !tbaa !12
  %515 = load double, ptr %29, align 8, !tbaa !12
  %516 = call double @llvm.fmuladd.f64(double %513, double %514, double %515)
  store double %516, ptr %54, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 4, ptr %55) #12
  %517 = load i32, ptr %9, align 4, !tbaa !5
  store i32 %517, ptr %55, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %56) #12
  %518 = load i32, ptr %10, align 4, !tbaa !5
  store i32 %518, ptr %56, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %57) #12
  %519 = load i32, ptr %14, align 4, !tbaa !5
  store i32 %519, ptr %57, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %58) #12
  store i32 0, ptr %58, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %59) #12
  store i32 0, ptr %59, align 4, !tbaa !5
  %520 = load double, ptr %53, align 8, !tbaa !12
  %521 = fcmp une double 0.000000e+00, %520
  br i1 %521, label %522, label %609

522:                                              ; preds = %510
  store i32 0, ptr %58, align 4, !tbaa !5
  br label %523

523:                                              ; preds = %605, %522
  %524 = load i32, ptr %58, align 4, !tbaa !5
  %525 = load i32, ptr %56, align 4, !tbaa !5
  %526 = icmp slt i32 %524, %525
  br i1 %526, label %527, label %608

527:                                              ; preds = %523
  store i32 0, ptr %59, align 4, !tbaa !5
  br label %528

528:                                              ; preds = %560, %527
  %529 = load i32, ptr %59, align 4, !tbaa !5
  %530 = load i32, ptr %55, align 4, !tbaa !5
  %531 = icmp slt i32 %529, %530
  br i1 %531, label %532, label %573

532:                                              ; preds = %528
  call void @llvm.lifetime.start.p0(i64 4, ptr %60) #12
  %533 = load i32, ptr %58, align 4, !tbaa !5
  %534 = load i32, ptr %57, align 4, !tbaa !5
  %535 = mul nsw i32 %533, %534
  %536 = load i32, ptr %59, align 4, !tbaa !5
  %537 = add nsw i32 %535, %536
  store i32 %537, ptr %60, align 4, !tbaa !5
  %538 = load double, ptr %54, align 8, !tbaa !12
  %539 = load i32, ptr %58, align 4, !tbaa !5
  %540 = sitofp i32 %539 to double
  %541 = load i32, ptr %55, align 4, !tbaa !5
  %542 = sitofp i32 %541 to double
  %543 = call double @llvm.fmuladd.f64(double %540, double %542, double 1.000000e+00)
  %544 = load i32, ptr %59, align 4, !tbaa !5
  %545 = sitofp i32 %544 to double
  %546 = fadd double %543, %545
  %547 = fmul double %538, %546
  %548 = load ptr, ptr %36, align 8, !tbaa !9
  %549 = load i32, ptr %21, align 4, !tbaa !5
  %550 = sext i32 %549 to i64
  %551 = load i32, ptr %38, align 4, !tbaa !5
  %552 = invoke noundef i32 @_ZZ4mainENK4raii7shuffleEi(ptr noundef nonnull align 8 dereferenceable(40) %32, i32 noundef %551)
          to label %553 unwind label %569

553:                                              ; preds = %532
  %554 = sext i32 %552 to i64
  %555 = mul i64 %550, %554
  %556 = getelementptr inbounds double, ptr %548, i64 %555
  %557 = load i32, ptr %60, align 4, !tbaa !5
  %558 = sext i32 %557 to i64
  %559 = getelementptr inbounds double, ptr %556, i64 %558
  store double %547, ptr %559, align 8, !tbaa !12
  call void @llvm.lifetime.end.p0(i64 4, ptr %60) #12
  br label %560

560:                                              ; preds = %553
  %561 = load i32, ptr %59, align 4, !tbaa !5
  %562 = add nsw i32 %561, 1
  store i32 %562, ptr %59, align 4, !tbaa !5
  br label %528, !llvm.loop !26

563:                                              ; preds = %503, %424, %393
  call void @llvm.lifetime.end.p0(i64 4, ptr %45) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #12
  br label %564

564:                                              ; preds = %563, %389
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #12
  br label %837

565:                                              ; preds = %507
  %566 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %567 = extractvalue { ptr, i32 } %566, 0
  store ptr %567, ptr %33, align 8
  %568 = extractvalue { ptr, i32 } %566, 1
  store i32 %568, ptr %34, align 4
  br label %736

569:                                              ; preds = %532
  %570 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %571 = extractvalue { ptr, i32 } %570, 0
  store ptr %571, ptr %33, align 8
  %572 = extractvalue { ptr, i32 } %570, 1
  store i32 %572, ptr %34, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %60) #12
  br label %735

573:                                              ; preds = %528
  br label %574

574:                                              ; preds = %597, %573
  %575 = load i32, ptr %59, align 4, !tbaa !5
  %576 = load i32, ptr %57, align 4, !tbaa !5
  %577 = icmp slt i32 %575, %576
  br i1 %577, label %578, label %604

578:                                              ; preds = %574
  call void @llvm.lifetime.start.p0(i64 4, ptr %61) #12
  %579 = load i32, ptr %58, align 4, !tbaa !5
  %580 = load i32, ptr %57, align 4, !tbaa !5
  %581 = mul nsw i32 %579, %580
  %582 = load i32, ptr %59, align 4, !tbaa !5
  %583 = add nsw i32 %581, %582
  store i32 %583, ptr %61, align 4, !tbaa !5
  %584 = load double, ptr %53, align 8, !tbaa !12
  %585 = load ptr, ptr %36, align 8, !tbaa !9
  %586 = load i32, ptr %21, align 4, !tbaa !5
  %587 = sext i32 %586 to i64
  %588 = load i32, ptr %38, align 4, !tbaa !5
  %589 = invoke noundef i32 @_ZZ4mainENK4raii7shuffleEi(ptr noundef nonnull align 8 dereferenceable(40) %32, i32 noundef %588)
          to label %590 unwind label %600

590:                                              ; preds = %578
  %591 = sext i32 %589 to i64
  %592 = mul i64 %587, %591
  %593 = getelementptr inbounds double, ptr %585, i64 %592
  %594 = load i32, ptr %61, align 4, !tbaa !5
  %595 = sext i32 %594 to i64
  %596 = getelementptr inbounds double, ptr %593, i64 %595
  store double %584, ptr %596, align 8, !tbaa !12
  call void @llvm.lifetime.end.p0(i64 4, ptr %61) #12
  br label %597

597:                                              ; preds = %590
  %598 = load i32, ptr %59, align 4, !tbaa !5
  %599 = add nsw i32 %598, 1
  store i32 %599, ptr %59, align 4, !tbaa !5
  br label %574, !llvm.loop !27

600:                                              ; preds = %578
  %601 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %602 = extractvalue { ptr, i32 } %601, 0
  store ptr %602, ptr %33, align 8
  %603 = extractvalue { ptr, i32 } %601, 1
  store i32 %603, ptr %34, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %61) #12
  br label %735

604:                                              ; preds = %574
  br label %605

605:                                              ; preds = %604
  %606 = load i32, ptr %58, align 4, !tbaa !5
  %607 = add nsw i32 %606, 1
  store i32 %607, ptr %58, align 4, !tbaa !5
  br label %523, !llvm.loop !28

608:                                              ; preds = %523
  br label %680

609:                                              ; preds = %510
  call void @llvm.lifetime.start.p0(i64 4, ptr %62) #12
  %610 = load i32, ptr %56, align 4, !tbaa !5
  %611 = load i32, ptr %57, align 4, !tbaa !5
  %612 = mul nsw i32 %610, %611
  store i32 %612, ptr %62, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %63) #12
  %613 = load i32, ptr %62, align 4, !tbaa !5
  %614 = add nsw i32 %613, 1
  %615 = sdiv i32 %614, 2
  %616 = sitofp i32 %615 to double
  store double %616, ptr %63, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 8, ptr %64) #12
  %617 = load double, ptr %29, align 8, !tbaa !12
  %618 = load double, ptr %63, align 8, !tbaa !12
  %619 = fdiv double %617, %618
  store double %619, ptr %64, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 8, ptr %65) #12
  %620 = load i32, ptr %62, align 4, !tbaa !5
  %621 = sext i32 %620 to i64
  %622 = invoke i64 @libxsmm_coprime2(i64 noundef %621)
          to label %623 unwind label %666

623:                                              ; preds = %609
  store i64 %622, ptr %65, align 8, !tbaa !14
  store i32 0, ptr %58, align 4, !tbaa !5
  br label %624

624:                                              ; preds = %675, %623
  %625 = load i32, ptr %58, align 4, !tbaa !5
  %626 = load i32, ptr %56, align 4, !tbaa !5
  %627 = icmp slt i32 %625, %626
  br i1 %627, label %628, label %678

628:                                              ; preds = %624
  store i32 0, ptr %59, align 4, !tbaa !5
  br label %629

629:                                              ; preds = %663, %628
  %630 = load i32, ptr %59, align 4, !tbaa !5
  %631 = load i32, ptr %57, align 4, !tbaa !5
  %632 = icmp slt i32 %630, %631
  br i1 %632, label %633, label %674

633:                                              ; preds = %629
  call void @llvm.lifetime.start.p0(i64 4, ptr %66) #12
  %634 = load i32, ptr %58, align 4, !tbaa !5
  %635 = load i32, ptr %57, align 4, !tbaa !5
  %636 = mul nsw i32 %634, %635
  %637 = load i32, ptr %59, align 4, !tbaa !5
  %638 = add nsw i32 %636, %637
  store i32 %638, ptr %66, align 4, !tbaa !5
  %639 = load double, ptr %64, align 8, !tbaa !12
  %640 = load i64, ptr %65, align 8, !tbaa !14
  %641 = load i32, ptr %66, align 4, !tbaa !5
  %642 = sext i32 %641 to i64
  %643 = mul i64 %640, %642
  %644 = load i32, ptr %62, align 4, !tbaa !5
  %645 = sext i32 %644 to i64
  %646 = urem i64 %643, %645
  %647 = uitofp i64 %646 to double
  %648 = load double, ptr %63, align 8, !tbaa !12
  %649 = fsub double %647, %648
  %650 = fmul double %639, %649
  %651 = load ptr, ptr %36, align 8, !tbaa !9
  %652 = load i32, ptr %21, align 4, !tbaa !5
  %653 = sext i32 %652 to i64
  %654 = load i32, ptr %38, align 4, !tbaa !5
  %655 = invoke noundef i32 @_ZZ4mainENK4raii7shuffleEi(ptr noundef nonnull align 8 dereferenceable(40) %32, i32 noundef %654)
          to label %656 unwind label %670

656:                                              ; preds = %633
  %657 = sext i32 %655 to i64
  %658 = mul i64 %653, %657
  %659 = getelementptr inbounds double, ptr %651, i64 %658
  %660 = load i32, ptr %66, align 4, !tbaa !5
  %661 = sext i32 %660 to i64
  %662 = getelementptr inbounds double, ptr %659, i64 %661
  store double %650, ptr %662, align 8, !tbaa !12
  call void @llvm.lifetime.end.p0(i64 4, ptr %66) #12
  br label %663

663:                                              ; preds = %656
  %664 = load i32, ptr %59, align 4, !tbaa !5
  %665 = add nsw i32 %664, 1
  store i32 %665, ptr %59, align 4, !tbaa !5
  br label %629, !llvm.loop !29

666:                                              ; preds = %609
  %667 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %668 = extractvalue { ptr, i32 } %667, 0
  store ptr %668, ptr %33, align 8
  %669 = extractvalue { ptr, i32 } %667, 1
  store i32 %669, ptr %34, align 4
  br label %679

670:                                              ; preds = %633
  %671 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %672 = extractvalue { ptr, i32 } %671, 0
  store ptr %672, ptr %33, align 8
  %673 = extractvalue { ptr, i32 } %671, 1
  store i32 %673, ptr %34, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %66) #12
  br label %679

674:                                              ; preds = %629
  br label %675

675:                                              ; preds = %674
  %676 = load i32, ptr %58, align 4, !tbaa !5
  %677 = add nsw i32 %676, 1
  store i32 %677, ptr %58, align 4, !tbaa !5
  br label %624, !llvm.loop !30

678:                                              ; preds = %624
  call void @llvm.lifetime.end.p0(i64 8, ptr %65) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %64) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %63) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %62) #12
  br label %680

679:                                              ; preds = %670, %666
  call void @llvm.lifetime.end.p0(i64 8, ptr %65) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %64) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %63) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %62) #12
  br label %735

680:                                              ; preds = %678, %608
  call void @llvm.lifetime.end.p0(i64 4, ptr %59) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %58) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %57) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %56) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %55) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %54) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %53) #12
  br label %681

681:                                              ; preds = %680
  br label %682

682:                                              ; preds = %681
  br label %683

683:                                              ; preds = %682
  call void @llvm.lifetime.start.p0(i64 8, ptr %67) #12
  %684 = load i32, ptr %38, align 4, !tbaa !5
  %685 = add nsw i32 22, %684
  %686 = sitofp i32 %685 to double
  store double %686, ptr %67, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 8, ptr %68) #12
  %687 = load double, ptr %67, align 8, !tbaa !12
  %688 = load double, ptr %29, align 8, !tbaa !12
  %689 = load double, ptr %29, align 8, !tbaa !12
  %690 = call double @llvm.fmuladd.f64(double %687, double %688, double %689)
  store double %690, ptr %68, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 4, ptr %69) #12
  %691 = load i32, ptr %8, align 4, !tbaa !5
  store i32 %691, ptr %69, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %70) #12
  %692 = load i32, ptr %10, align 4, !tbaa !5
  store i32 %692, ptr %70, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %71) #12
  %693 = load i32, ptr %15, align 4, !tbaa !5
  store i32 %693, ptr %71, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %72) #12
  store i32 0, ptr %72, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %73) #12
  store i32 0, ptr %73, align 4, !tbaa !5
  %694 = load double, ptr %67, align 8, !tbaa !12
  %695 = fcmp une double 0.000000e+00, %694
  br i1 %695, label %696, label %767

696:                                              ; preds = %683
  store i32 0, ptr %72, align 4, !tbaa !5
  br label %697

697:                                              ; preds = %763, %696
  %698 = load i32, ptr %72, align 4, !tbaa !5
  %699 = load i32, ptr %70, align 4, !tbaa !5
  %700 = icmp slt i32 %698, %699
  br i1 %700, label %701, label %766

701:                                              ; preds = %697
  store i32 0, ptr %73, align 4, !tbaa !5
  br label %702

702:                                              ; preds = %732, %701
  %703 = load i32, ptr %73, align 4, !tbaa !5
  %704 = load i32, ptr %69, align 4, !tbaa !5
  %705 = icmp slt i32 %703, %704
  br i1 %705, label %706, label %737

706:                                              ; preds = %702
  call void @llvm.lifetime.start.p0(i64 4, ptr %74) #12
  %707 = load i32, ptr %72, align 4, !tbaa !5
  %708 = load i32, ptr %71, align 4, !tbaa !5
  %709 = mul nsw i32 %707, %708
  %710 = load i32, ptr %73, align 4, !tbaa !5
  %711 = add nsw i32 %709, %710
  store i32 %711, ptr %74, align 4, !tbaa !5
  %712 = load double, ptr %68, align 8, !tbaa !12
  %713 = load i32, ptr %72, align 4, !tbaa !5
  %714 = sitofp i32 %713 to double
  %715 = load i32, ptr %69, align 4, !tbaa !5
  %716 = sitofp i32 %715 to double
  %717 = call double @llvm.fmuladd.f64(double %714, double %716, double 1.000000e+00)
  %718 = load i32, ptr %73, align 4, !tbaa !5
  %719 = sitofp i32 %718 to double
  %720 = fadd double %717, %719
  %721 = fmul double %712, %720
  %722 = load ptr, ptr %37, align 8, !tbaa !9
  %723 = load i32, ptr %22, align 4, !tbaa !5
  %724 = sext i32 %723 to i64
  %725 = load i32, ptr %38, align 4, !tbaa !5
  %726 = sext i32 %725 to i64
  %727 = mul i64 %724, %726
  %728 = getelementptr inbounds double, ptr %722, i64 %727
  %729 = load i32, ptr %74, align 4, !tbaa !5
  %730 = sext i32 %729 to i64
  %731 = getelementptr inbounds double, ptr %728, i64 %730
  store double %721, ptr %731, align 8, !tbaa !12
  call void @llvm.lifetime.end.p0(i64 4, ptr %74) #12
  br label %732

732:                                              ; preds = %706
  %733 = load i32, ptr %73, align 4, !tbaa !5
  %734 = add nsw i32 %733, 1
  store i32 %734, ptr %73, align 4, !tbaa !5
  br label %702, !llvm.loop !31

735:                                              ; preds = %679, %600, %569
  call void @llvm.lifetime.end.p0(i64 4, ptr %59) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %58) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %57) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %56) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %55) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %54) #12
  br label %736

736:                                              ; preds = %735, %565
  call void @llvm.lifetime.end.p0(i64 8, ptr %53) #12
  br label %837

737:                                              ; preds = %702
  br label %738

738:                                              ; preds = %759, %737
  %739 = load i32, ptr %73, align 4, !tbaa !5
  %740 = load i32, ptr %71, align 4, !tbaa !5
  %741 = icmp slt i32 %739, %740
  br i1 %741, label %742, label %762

742:                                              ; preds = %738
  call void @llvm.lifetime.start.p0(i64 4, ptr %75) #12
  %743 = load i32, ptr %72, align 4, !tbaa !5
  %744 = load i32, ptr %71, align 4, !tbaa !5
  %745 = mul nsw i32 %743, %744
  %746 = load i32, ptr %73, align 4, !tbaa !5
  %747 = add nsw i32 %745, %746
  store i32 %747, ptr %75, align 4, !tbaa !5
  %748 = load double, ptr %67, align 8, !tbaa !12
  %749 = load ptr, ptr %37, align 8, !tbaa !9
  %750 = load i32, ptr %22, align 4, !tbaa !5
  %751 = sext i32 %750 to i64
  %752 = load i32, ptr %38, align 4, !tbaa !5
  %753 = sext i32 %752 to i64
  %754 = mul i64 %751, %753
  %755 = getelementptr inbounds double, ptr %749, i64 %754
  %756 = load i32, ptr %75, align 4, !tbaa !5
  %757 = sext i32 %756 to i64
  %758 = getelementptr inbounds double, ptr %755, i64 %757
  store double %748, ptr %758, align 8, !tbaa !12
  call void @llvm.lifetime.end.p0(i64 4, ptr %75) #12
  br label %759

759:                                              ; preds = %742
  %760 = load i32, ptr %73, align 4, !tbaa !5
  %761 = add nsw i32 %760, 1
  store i32 %761, ptr %73, align 4, !tbaa !5
  br label %738, !llvm.loop !32

762:                                              ; preds = %738
  br label %763

763:                                              ; preds = %762
  %764 = load i32, ptr %72, align 4, !tbaa !5
  %765 = add nsw i32 %764, 1
  store i32 %765, ptr %72, align 4, !tbaa !5
  br label %697, !llvm.loop !33

766:                                              ; preds = %697
  br label %831

767:                                              ; preds = %683
  call void @llvm.lifetime.start.p0(i64 4, ptr %76) #12
  %768 = load i32, ptr %70, align 4, !tbaa !5
  %769 = load i32, ptr %71, align 4, !tbaa !5
  %770 = mul nsw i32 %768, %769
  store i32 %770, ptr %76, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %77) #12
  %771 = load i32, ptr %76, align 4, !tbaa !5
  %772 = add nsw i32 %771, 1
  %773 = sdiv i32 %772, 2
  %774 = sitofp i32 %773 to double
  store double %774, ptr %77, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 8, ptr %78) #12
  %775 = load double, ptr %29, align 8, !tbaa !12
  %776 = load double, ptr %77, align 8, !tbaa !12
  %777 = fdiv double %775, %776
  store double %777, ptr %78, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 8, ptr %79) #12
  %778 = load i32, ptr %76, align 4, !tbaa !5
  %779 = sext i32 %778 to i64
  %780 = invoke i64 @libxsmm_coprime2(i64 noundef %779)
          to label %781 unwind label %822

781:                                              ; preds = %767
  store i64 %780, ptr %79, align 8, !tbaa !14
  store i32 0, ptr %72, align 4, !tbaa !5
  br label %782

782:                                              ; preds = %827, %781
  %783 = load i32, ptr %72, align 4, !tbaa !5
  %784 = load i32, ptr %70, align 4, !tbaa !5
  %785 = icmp slt i32 %783, %784
  br i1 %785, label %786, label %830

786:                                              ; preds = %782
  store i32 0, ptr %73, align 4, !tbaa !5
  br label %787

787:                                              ; preds = %819, %786
  %788 = load i32, ptr %73, align 4, !tbaa !5
  %789 = load i32, ptr %71, align 4, !tbaa !5
  %790 = icmp slt i32 %788, %789
  br i1 %790, label %791, label %826

791:                                              ; preds = %787
  call void @llvm.lifetime.start.p0(i64 4, ptr %80) #12
  %792 = load i32, ptr %72, align 4, !tbaa !5
  %793 = load i32, ptr %71, align 4, !tbaa !5
  %794 = mul nsw i32 %792, %793
  %795 = load i32, ptr %73, align 4, !tbaa !5
  %796 = add nsw i32 %794, %795
  store i32 %796, ptr %80, align 4, !tbaa !5
  %797 = load double, ptr %78, align 8, !tbaa !12
  %798 = load i64, ptr %79, align 8, !tbaa !14
  %799 = load i32, ptr %80, align 4, !tbaa !5
  %800 = sext i32 %799 to i64
  %801 = mul i64 %798, %800
  %802 = load i32, ptr %76, align 4, !tbaa !5
  %803 = sext i32 %802 to i64
  %804 = urem i64 %801, %803
  %805 = uitofp i64 %804 to double
  %806 = load double, ptr %77, align 8, !tbaa !12
  %807 = fsub double %805, %806
  %808 = fmul double %797, %807
  %809 = load ptr, ptr %37, align 8, !tbaa !9
  %810 = load i32, ptr %22, align 4, !tbaa !5
  %811 = sext i32 %810 to i64
  %812 = load i32, ptr %38, align 4, !tbaa !5
  %813 = sext i32 %812 to i64
  %814 = mul i64 %811, %813
  %815 = getelementptr inbounds double, ptr %809, i64 %814
  %816 = load i32, ptr %80, align 4, !tbaa !5
  %817 = sext i32 %816 to i64
  %818 = getelementptr inbounds double, ptr %815, i64 %817
  store double %808, ptr %818, align 8, !tbaa !12
  call void @llvm.lifetime.end.p0(i64 4, ptr %80) #12
  br label %819

819:                                              ; preds = %791
  %820 = load i32, ptr %73, align 4, !tbaa !5
  %821 = add nsw i32 %820, 1
  store i32 %821, ptr %73, align 4, !tbaa !5
  br label %787, !llvm.loop !34

822:                                              ; preds = %767
  %823 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %824 = extractvalue { ptr, i32 } %823, 0
  store ptr %824, ptr %33, align 8
  %825 = extractvalue { ptr, i32 } %823, 1
  store i32 %825, ptr %34, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %79) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %78) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %77) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %76) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %73) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %72) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %71) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %70) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %69) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %68) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %67) #12
  br label %837

826:                                              ; preds = %787
  br label %827

827:                                              ; preds = %826
  %828 = load i32, ptr %72, align 4, !tbaa !5
  %829 = add nsw i32 %828, 1
  store i32 %829, ptr %72, align 4, !tbaa !5
  br label %782, !llvm.loop !35

830:                                              ; preds = %782
  call void @llvm.lifetime.end.p0(i64 8, ptr %79) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %78) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %77) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %76) #12
  br label %831

831:                                              ; preds = %830, %766
  call void @llvm.lifetime.end.p0(i64 4, ptr %73) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %72) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %71) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %70) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %69) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %68) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %67) #12
  br label %832

832:                                              ; preds = %831
  br label %833

833:                                              ; preds = %832
  br label %834

834:                                              ; preds = %833
  %835 = load i32, ptr %38, align 4, !tbaa !5
  %836 = add nsw i32 %835, 1
  store i32 %836, ptr %38, align 4, !tbaa !5
  br label %323, !llvm.loop !36

837:                                              ; preds = %822, %736, %564
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #12
  br label %1506

838:                                              ; preds = %327
  invoke void @libxsmm_init()
          to label %839 unwind label %874

839:                                              ; preds = %838
  %840 = load ptr, ptr @stdout, align 8, !tbaa !9
  %841 = load i32, ptr %8, align 4, !tbaa !5
  %842 = sext i32 %841 to i64
  %843 = load i32, ptr %10, align 4, !tbaa !5
  %844 = sext i32 %843 to i64
  %845 = load i32, ptr %9, align 4, !tbaa !5
  %846 = sext i32 %845 to i64
  %847 = load i32, ptr %24, align 4, !tbaa !5
  %848 = sext i32 %847 to i64
  %849 = load i32, ptr %24, align 4, !tbaa !5
  %850 = sext i32 %849 to i64
  %851 = load i32, ptr %20, align 4, !tbaa !5
  %852 = sext i32 %851 to i64
  %853 = load i32, ptr %21, align 4, !tbaa !5
  %854 = sext i32 %853 to i64
  %855 = add i64 %852, %854
  %856 = mul i64 %855, 8
  %857 = load i32, ptr %22, align 4, !tbaa !5
  %858 = sext i32 %857 to i64
  %859 = mul i64 %858, 8
  %860 = add i64 %856, %859
  %861 = mul i64 %850, %860
  %862 = uitofp i64 %861 to double
  %863 = fmul double 1.000000e+00, %862
  %864 = fdiv double %863, 0x4130000000000000
  %865 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %840, ptr noundef @.str.1, i64 noundef %842, i64 noundef %844, i64 noundef %846, i64 noundef %848, double noundef %864, ptr noundef @.str.2, ptr noundef @.str.2) #12
  %866 = load i32, ptr %8, align 4, !tbaa !5
  %867 = load i32, ptr %10, align 4, !tbaa !5
  %868 = load i32, ptr %9, align 4, !tbaa !5
  %869 = load i32, ptr %13, align 4, !tbaa !5
  %870 = load i32, ptr %14, align 4, !tbaa !5
  %871 = load i32, ptr %15, align 4, !tbaa !5
  invoke void @_ZN18libxsmm_mmfunctionIddLin1EEC2Eiiiiiiiddi(ptr noundef nonnull align 8 dereferenceable(8) %81, i32 noundef 0, i32 noundef %866, i32 noundef %867, i32 noundef %868, i32 noundef %869, i32 noundef %870, i32 noundef %871, double noundef 1.000000e+00, double noundef 1.000000e+00, i32 noundef -1)
          to label %872 unwind label %874

872:                                              ; preds = %839
  %873 = load i32, ptr %7, align 4, !tbaa !5
  switch i32 %873, label %1479 [
    i32 0, label %878
    i32 1, label %1006
    i32 2, label %1130
    i32 3, label %1254
    i32 4, label %1382
  ]

874:                                              ; preds = %1502, %1479, %839, %838
  %875 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %876 = extractvalue { ptr, i32 } %875, 0
  store ptr %876, ptr %33, align 8
  %877 = extractvalue { ptr, i32 } %875, 1
  store i32 %877, ptr %34, align 4
  br label %1506

878:                                              ; preds = %872
  %879 = load ptr, ptr @stdout, align 8, !tbaa !9
  %880 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %879, ptr noundef @.str.3) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr %82) #12
  %881 = invoke i64 @libxsmm_timer_tick()
          to label %882 unwind label %888

882:                                              ; preds = %878
  store i64 %881, ptr %82, align 8, !tbaa !37
  call void @llvm.lifetime.start.p0(i64 4, ptr %83) #12
  store i32 0, ptr %83, align 4, !tbaa !5
  br label %883

883:                                              ; preds = %936, %882
  %884 = load i32, ptr %83, align 4, !tbaa !5
  %885 = load i32, ptr %12, align 4, !tbaa !5
  %886 = icmp slt i32 %884, %885
  br i1 %886, label %892, label %887

887:                                              ; preds = %883
  store i32 57, ptr %84, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %83) #12
  br label %939

888:                                              ; preds = %878
  %889 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %890 = extractvalue { ptr, i32 } %889, 0
  store ptr %890, ptr %33, align 8
  %891 = extractvalue { ptr, i32 } %889, 1
  store i32 %891, ptr %34, align 4
  br label %1005

892:                                              ; preds = %883
  call void @llvm.lifetime.start.p0(i64 4, ptr %85) #12
  store i32 0, ptr %85, align 4, !tbaa !5
  br label %893

893:                                              ; preds = %928, %892
  %894 = load i32, ptr %85, align 4, !tbaa !5
  %895 = load i32, ptr %24, align 4, !tbaa !5
  %896 = icmp slt i32 %894, %895
  br i1 %896, label %898, label %897

897:                                              ; preds = %893
  store i32 60, ptr %84, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %85) #12
  br label %935

898:                                              ; preds = %893
  %899 = load i32, ptr %8, align 4, !tbaa !5
  %900 = load i32, ptr %10, align 4, !tbaa !5
  %901 = load i32, ptr %9, align 4, !tbaa !5
  %902 = load ptr, ptr %35, align 8, !tbaa !9
  %903 = load i32, ptr %20, align 4, !tbaa !5
  %904 = sext i32 %903 to i64
  %905 = load i32, ptr %85, align 4, !tbaa !5
  %906 = invoke noundef i32 @_ZZ4mainENK4raii7shuffleEi(ptr noundef nonnull align 8 dereferenceable(40) %32, i32 noundef %905)
          to label %907 unwind label %931

907:                                              ; preds = %898
  %908 = sext i32 %906 to i64
  %909 = mul i64 %904, %908
  %910 = getelementptr inbounds double, ptr %902, i64 %909
  %911 = load ptr, ptr %36, align 8, !tbaa !9
  %912 = load i32, ptr %21, align 4, !tbaa !5
  %913 = sext i32 %912 to i64
  %914 = load i32, ptr %85, align 4, !tbaa !5
  %915 = invoke noundef i32 @_ZZ4mainENK4raii7shuffleEi(ptr noundef nonnull align 8 dereferenceable(40) %32, i32 noundef %914)
          to label %916 unwind label %931

916:                                              ; preds = %907
  %917 = sext i32 %915 to i64
  %918 = mul i64 %913, %917
  %919 = getelementptr inbounds double, ptr %911, i64 %918
  %920 = load ptr, ptr %37, align 8, !tbaa !9
  %921 = load i32, ptr %22, align 4, !tbaa !5
  %922 = sext i32 %921 to i64
  %923 = load i32, ptr %85, align 4, !tbaa !5
  %924 = sext i32 %923 to i64
  %925 = mul i64 %922, %924
  %926 = getelementptr inbounds double, ptr %920, i64 %925
  invoke void @_Z12libxsmm_gemmPKcS0_iiiPKdS2_PKiS2_S4_S2_PdS4_(ptr noundef %16, ptr noundef %17, i32 noundef %899, i32 noundef %900, i32 noundef %901, ptr noundef %18, ptr noundef %910, ptr noundef %13, ptr noundef %919, ptr noundef %14, ptr noundef %19, ptr noundef %926, ptr noundef %15)
          to label %927 unwind label %931

927:                                              ; preds = %916
  br label %928

928:                                              ; preds = %927
  %929 = load i32, ptr %85, align 4, !tbaa !5
  %930 = add nsw i32 %929, 1
  store i32 %930, ptr %85, align 4, !tbaa !5
  br label %893, !llvm.loop !39

931:                                              ; preds = %916, %907, %898
  %932 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %933 = extractvalue { ptr, i32 } %932, 0
  store ptr %933, ptr %33, align 8
  %934 = extractvalue { ptr, i32 } %932, 1
  store i32 %934, ptr %34, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %85) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %83) #12
  br label %1005

935:                                              ; preds = %897
  br label %936

936:                                              ; preds = %935
  %937 = load i32, ptr %83, align 4, !tbaa !5
  %938 = add nsw i32 %937, 1
  store i32 %938, ptr %83, align 4, !tbaa !5
  br label %883, !llvm.loop !40

939:                                              ; preds = %887
  call void @llvm.lifetime.start.p0(i64 8, ptr %86) #12
  %940 = load i64, ptr %82, align 8, !tbaa !37
  %941 = invoke i64 @libxsmm_timer_tick()
          to label %942 unwind label %991

942:                                              ; preds = %939
  %943 = invoke noundef i64 @_Z21libxsmm_timer_ncyclesyy(i64 noundef %940, i64 noundef %941)
          to label %944 unwind label %991

944:                                              ; preds = %942
  store i64 %943, ptr %86, align 8, !tbaa !37
  call void @llvm.lifetime.start.p0(i64 8, ptr %87) #12
  %945 = load i64, ptr %86, align 8, !tbaa !37
  %946 = invoke double @libxsmm_timer_duration(i64 noundef 0, i64 noundef %945)
          to label %947 unwind label %995

947:                                              ; preds = %944
  %948 = load i32, ptr %12, align 4, !tbaa !5
  %949 = sitofp i32 %948 to double
  %950 = fdiv double %946, %949
  store double %950, ptr %87, align 8, !tbaa !12
  %951 = load double, ptr %87, align 8, !tbaa !12
  %952 = fcmp olt double 0.000000e+00, %951
  br i1 %952, label %953, label %999

953:                                              ; preds = %947
  %954 = load i64, ptr %86, align 8, !tbaa !37
  %955 = icmp ne i64 0, %954
  br i1 %955, label %956, label %999

956:                                              ; preds = %953
  %957 = load ptr, ptr @stdout, align 8, !tbaa !9
  %958 = load i32, ptr %9, align 4, !tbaa !5
  %959 = sitofp i32 %958 to double
  %960 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %959, double -1.000000e+00)
  %961 = load i32, ptr %24, align 4, !tbaa !5
  %962 = sitofp i32 %961 to double
  %963 = load i32, ptr %8, align 4, !tbaa !5
  %964 = sitofp i32 %963 to double
  %965 = fmul double %962, %964
  %966 = load i32, ptr %10, align 4, !tbaa !5
  %967 = sitofp i32 %966 to double
  %968 = fmul double %965, %967
  %969 = fmul double %960, %968
  %970 = load i64, ptr %86, align 8, !tbaa !37
  %971 = uitofp i64 %970 to double
  %972 = fdiv double %969, %971
  %973 = getelementptr inbounds [6 x i8], ptr %28, i64 0, i64 0
  %974 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %957, ptr noundef @.str.4, double noundef %972, ptr noundef %973) #12
  %975 = load ptr, ptr @stdout, align 8, !tbaa !9
  %976 = load double, ptr %27, align 8, !tbaa !12
  %977 = load double, ptr %87, align 8, !tbaa !12
  %978 = fdiv double %976, %977
  %979 = getelementptr inbounds [6 x i8], ptr %28, i64 0, i64 0
  %980 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %975, ptr noundef @.str.5, double noundef %978, ptr noundef %979) #12
  %981 = load ptr, ptr @stdout, align 8, !tbaa !9
  %982 = load i32, ptr %24, align 4, !tbaa !5
  %983 = sext i32 %982 to i64
  %984 = load i64, ptr %26, align 8, !tbaa !14
  %985 = mul i64 %983, %984
  %986 = uitofp i64 %985 to double
  %987 = load double, ptr %87, align 8, !tbaa !12
  %988 = fmul double %987, 0x41D0000000000000
  %989 = fdiv double %986, %988
  %990 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %981, ptr noundef @.str.6, double noundef %989) #12
  br label %999

991:                                              ; preds = %942, %939
  %992 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %993 = extractvalue { ptr, i32 } %992, 0
  store ptr %993, ptr %33, align 8
  %994 = extractvalue { ptr, i32 } %992, 1
  store i32 %994, ptr %34, align 4
  br label %1004

995:                                              ; preds = %944
  %996 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %997 = extractvalue { ptr, i32 } %996, 0
  store ptr %997, ptr %33, align 8
  %998 = extractvalue { ptr, i32 } %996, 1
  store i32 %998, ptr %34, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %87) #12
  br label %1004

999:                                              ; preds = %956, %953, %947
  %1000 = load ptr, ptr @stdout, align 8, !tbaa !9
  %1001 = load double, ptr %87, align 8, !tbaa !12
  %1002 = fmul double 1.000000e+03, %1001
  %1003 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %1000, ptr noundef @.str.7, double noundef %1002) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %87) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %86) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %82) #12
  br label %1481

1004:                                             ; preds = %995, %991
  call void @llvm.lifetime.end.p0(i64 8, ptr %86) #12
  br label %1005

1005:                                             ; preds = %1004, %931, %888
  call void @llvm.lifetime.end.p0(i64 8, ptr %82) #12
  br label %1506

1006:                                             ; preds = %872
  %1007 = load ptr, ptr @stdout, align 8, !tbaa !9
  %1008 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %1007, ptr noundef @.str.8) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr %88) #12
  %1009 = invoke i64 @libxsmm_timer_tick()
          to label %1010 unwind label %1016

1010:                                             ; preds = %1006
  store i64 %1009, ptr %88, align 8, !tbaa !37
  call void @llvm.lifetime.start.p0(i64 4, ptr %89) #12
  store i32 0, ptr %89, align 4, !tbaa !5
  br label %1011

1011:                                             ; preds = %1056, %1010
  %1012 = load i32, ptr %89, align 4, !tbaa !5
  %1013 = load i32, ptr %12, align 4, !tbaa !5
  %1014 = icmp slt i32 %1012, %1013
  br i1 %1014, label %1020, label %1015

1015:                                             ; preds = %1011
  store i32 63, ptr %84, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %89) #12
  br label %1059

1016:                                             ; preds = %1006
  %1017 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %1018 = extractvalue { ptr, i32 } %1017, 0
  store ptr %1018, ptr %33, align 8
  %1019 = extractvalue { ptr, i32 } %1017, 1
  store i32 %1019, ptr %34, align 4
  br label %1129

1020:                                             ; preds = %1011
  call void @llvm.lifetime.start.p0(i64 4, ptr %90) #12
  store i32 0, ptr %90, align 4, !tbaa !5
  br label %1021

1021:                                             ; preds = %1048, %1020
  %1022 = load i32, ptr %90, align 4, !tbaa !5
  %1023 = load i32, ptr %24, align 4, !tbaa !5
  %1024 = icmp slt i32 %1022, %1023
  br i1 %1024, label %1026, label %1025

1025:                                             ; preds = %1021
  store i32 66, ptr %84, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %90) #12
  br label %1055

1026:                                             ; preds = %1021
  %1027 = load i32, ptr %8, align 4, !tbaa !5
  %1028 = load i32, ptr %10, align 4, !tbaa !5
  %1029 = load i32, ptr %9, align 4, !tbaa !5
  %1030 = load ptr, ptr %35, align 8, !tbaa !9
  %1031 = load i32, ptr %20, align 4, !tbaa !5
  %1032 = sext i32 %1031 to i64
  %1033 = load i32, ptr %90, align 4, !tbaa !5
  %1034 = invoke noundef i32 @_ZZ4mainENK4raii7shuffleEi(ptr noundef nonnull align 8 dereferenceable(40) %32, i32 noundef %1033)
          to label %1035 unwind label %1051

1035:                                             ; preds = %1026
  %1036 = sext i32 %1034 to i64
  %1037 = mul i64 %1032, %1036
  %1038 = getelementptr inbounds double, ptr %1030, i64 %1037
  %1039 = load ptr, ptr %36, align 8, !tbaa !9
  %1040 = load ptr, ptr %37, align 8, !tbaa !9
  %1041 = load i32, ptr %22, align 4, !tbaa !5
  %1042 = sext i32 %1041 to i64
  %1043 = load i32, ptr %90, align 4, !tbaa !5
  %1044 = sext i32 %1043 to i64
  %1045 = mul i64 %1042, %1044
  %1046 = getelementptr inbounds double, ptr %1040, i64 %1045
  invoke void @_Z12libxsmm_gemmPKcS0_iiiPKdS2_PKiS2_S4_S2_PdS4_(ptr noundef %16, ptr noundef %17, i32 noundef %1027, i32 noundef %1028, i32 noundef %1029, ptr noundef %18, ptr noundef %1038, ptr noundef %13, ptr noundef %1039, ptr noundef %14, ptr noundef %19, ptr noundef %1046, ptr noundef %15)
          to label %1047 unwind label %1051

1047:                                             ; preds = %1035
  br label %1048

1048:                                             ; preds = %1047
  %1049 = load i32, ptr %90, align 4, !tbaa !5
  %1050 = add nsw i32 %1049, 1
  store i32 %1050, ptr %90, align 4, !tbaa !5
  br label %1021, !llvm.loop !41

1051:                                             ; preds = %1035, %1026
  %1052 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %1053 = extractvalue { ptr, i32 } %1052, 0
  store ptr %1053, ptr %33, align 8
  %1054 = extractvalue { ptr, i32 } %1052, 1
  store i32 %1054, ptr %34, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %90) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %89) #12
  br label %1129

1055:                                             ; preds = %1025
  br label %1056

1056:                                             ; preds = %1055
  %1057 = load i32, ptr %89, align 4, !tbaa !5
  %1058 = add nsw i32 %1057, 1
  store i32 %1058, ptr %89, align 4, !tbaa !5
  br label %1011, !llvm.loop !42

1059:                                             ; preds = %1015
  call void @llvm.lifetime.start.p0(i64 8, ptr %91) #12
  %1060 = load i64, ptr %88, align 8, !tbaa !37
  %1061 = invoke i64 @libxsmm_timer_tick()
          to label %1062 unwind label %1115

1062:                                             ; preds = %1059
  %1063 = invoke noundef i64 @_Z21libxsmm_timer_ncyclesyy(i64 noundef %1060, i64 noundef %1061)
          to label %1064 unwind label %1115

1064:                                             ; preds = %1062
  store i64 %1063, ptr %91, align 8, !tbaa !37
  call void @llvm.lifetime.start.p0(i64 8, ptr %92) #12
  %1065 = load i64, ptr %91, align 8, !tbaa !37
  %1066 = invoke double @libxsmm_timer_duration(i64 noundef 0, i64 noundef %1065)
          to label %1067 unwind label %1119

1067:                                             ; preds = %1064
  %1068 = load i32, ptr %12, align 4, !tbaa !5
  %1069 = sitofp i32 %1068 to double
  %1070 = fdiv double %1066, %1069
  store double %1070, ptr %92, align 8, !tbaa !12
  %1071 = load double, ptr %92, align 8, !tbaa !12
  %1072 = fcmp olt double 0.000000e+00, %1071
  br i1 %1072, label %1073, label %1123

1073:                                             ; preds = %1067
  %1074 = load i64, ptr %91, align 8, !tbaa !37
  %1075 = icmp ne i64 0, %1074
  br i1 %1075, label %1076, label %1123

1076:                                             ; preds = %1073
  %1077 = load ptr, ptr @stdout, align 8, !tbaa !9
  %1078 = load i32, ptr %9, align 4, !tbaa !5
  %1079 = sitofp i32 %1078 to double
  %1080 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %1079, double -1.000000e+00)
  %1081 = load i32, ptr %24, align 4, !tbaa !5
  %1082 = sitofp i32 %1081 to double
  %1083 = load i32, ptr %8, align 4, !tbaa !5
  %1084 = sitofp i32 %1083 to double
  %1085 = fmul double %1082, %1084
  %1086 = load i32, ptr %10, align 4, !tbaa !5
  %1087 = sitofp i32 %1086 to double
  %1088 = fmul double %1085, %1087
  %1089 = fmul double %1080, %1088
  %1090 = load i64, ptr %91, align 8, !tbaa !37
  %1091 = uitofp i64 %1090 to double
  %1092 = fdiv double %1089, %1091
  %1093 = getelementptr inbounds [6 x i8], ptr %28, i64 0, i64 0
  %1094 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %1077, ptr noundef @.str.4, double noundef %1092, ptr noundef %1093) #12
  %1095 = load ptr, ptr @stdout, align 8, !tbaa !9
  %1096 = load double, ptr %27, align 8, !tbaa !12
  %1097 = load double, ptr %92, align 8, !tbaa !12
  %1098 = fdiv double %1096, %1097
  %1099 = getelementptr inbounds [6 x i8], ptr %28, i64 0, i64 0
  %1100 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %1095, ptr noundef @.str.5, double noundef %1098, ptr noundef %1099) #12
  %1101 = load ptr, ptr @stdout, align 8, !tbaa !9
  %1102 = load i32, ptr %24, align 4, !tbaa !5
  %1103 = sext i32 %1102 to i64
  %1104 = load i64, ptr %26, align 8, !tbaa !14
  %1105 = load i32, ptr %21, align 4, !tbaa !5
  %1106 = sext i32 %1105 to i64
  %1107 = mul i64 %1106, 8
  %1108 = sub i64 %1104, %1107
  %1109 = mul i64 %1103, %1108
  %1110 = uitofp i64 %1109 to double
  %1111 = load double, ptr %92, align 8, !tbaa !12
  %1112 = fmul double %1111, 0x41D0000000000000
  %1113 = fdiv double %1110, %1112
  %1114 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %1101, ptr noundef @.str.6, double noundef %1113) #12
  br label %1123

1115:                                             ; preds = %1062, %1059
  %1116 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %1117 = extractvalue { ptr, i32 } %1116, 0
  store ptr %1117, ptr %33, align 8
  %1118 = extractvalue { ptr, i32 } %1116, 1
  store i32 %1118, ptr %34, align 4
  br label %1128

1119:                                             ; preds = %1064
  %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
  call void @llvm.lifetime.end.p0(i64 8, ptr %92) #12
  br label %1128

1123:                                             ; preds = %1076, %1073, %1067
  %1124 = load ptr, ptr @stdout, align 8, !tbaa !9
  %1125 = load double, ptr %92, align 8, !tbaa !12
  %1126 = fmul double 1.000000e+03, %1125
  %1127 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %1124, ptr noundef @.str.7, double noundef %1126) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %92) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %91) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %88) #12
  br label %1481

1128:                                             ; preds = %1119, %1115
  call void @llvm.lifetime.end.p0(i64 8, ptr %91) #12
  br label %1129

1129:                                             ; preds = %1128, %1051, %1016
  call void @llvm.lifetime.end.p0(i64 8, ptr %88) #12
  br label %1506

1130:                                             ; preds = %872
  %1131 = load ptr, ptr @stdout, align 8, !tbaa !9
  %1132 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %1131, ptr noundef @.str.9) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr %93) #12
  %1133 = invoke i64 @libxsmm_timer_tick()
          to label %1134 unwind label %1140

1134:                                             ; preds = %1130
  store i64 %1133, ptr %93, align 8, !tbaa !37
  call void @llvm.lifetime.start.p0(i64 4, ptr %94) #12
  store i32 0, ptr %94, align 4, !tbaa !5
  br label %1135

1135:                                             ; preds = %1180, %1134
  %1136 = load i32, ptr %94, align 4, !tbaa !5
  %1137 = load i32, ptr %12, align 4, !tbaa !5
  %1138 = icmp slt i32 %1136, %1137
  br i1 %1138, label %1144, label %1139

1139:                                             ; preds = %1135
  store i32 69, ptr %84, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %94) #12
  br label %1183

1140:                                             ; preds = %1130
  %1141 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %1142 = extractvalue { ptr, i32 } %1141, 0
  store ptr %1142, ptr %33, align 8
  %1143 = extractvalue { ptr, i32 } %1141, 1
  store i32 %1143, ptr %34, align 4
  br label %1253

1144:                                             ; preds = %1135
  call void @llvm.lifetime.start.p0(i64 4, ptr %95) #12
  store i32 0, ptr %95, align 4, !tbaa !5
  br label %1145

1145:                                             ; preds = %1172, %1144
  %1146 = load i32, ptr %95, align 4, !tbaa !5
  %1147 = load i32, ptr %24, align 4, !tbaa !5
  %1148 = icmp slt i32 %1146, %1147
  br i1 %1148, label %1150, label %1149

1149:                                             ; preds = %1145
  store i32 72, ptr %84, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %95) #12
  br label %1179

1150:                                             ; preds = %1145
  %1151 = load i32, ptr %8, align 4, !tbaa !5
  %1152 = load i32, ptr %10, align 4, !tbaa !5
  %1153 = load i32, ptr %9, align 4, !tbaa !5
  %1154 = load ptr, ptr %35, align 8, !tbaa !9
  %1155 = load ptr, ptr %36, align 8, !tbaa !9
  %1156 = load i32, ptr %21, align 4, !tbaa !5
  %1157 = sext i32 %1156 to i64
  %1158 = load i32, ptr %95, align 4, !tbaa !5
  %1159 = invoke noundef i32 @_ZZ4mainENK4raii7shuffleEi(ptr noundef nonnull align 8 dereferenceable(40) %32, i32 noundef %1158)
          to label %1160 unwind label %1175

1160:                                             ; preds = %1150
  %1161 = sext i32 %1159 to i64
  %1162 = mul i64 %1157, %1161
  %1163 = getelementptr inbounds double, ptr %1155, i64 %1162
  %1164 = load ptr, ptr %37, align 8, !tbaa !9
  %1165 = load i32, ptr %22, align 4, !tbaa !5
  %1166 = sext i32 %1165 to i64
  %1167 = load i32, ptr %95, align 4, !tbaa !5
  %1168 = sext i32 %1167 to i64
  %1169 = mul i64 %1166, %1168
  %1170 = getelementptr inbounds double, ptr %1164, i64 %1169
  invoke void @_Z12libxsmm_gemmPKcS0_iiiPKdS2_PKiS2_S4_S2_PdS4_(ptr noundef %16, ptr noundef %17, i32 noundef %1151, i32 noundef %1152, i32 noundef %1153, ptr noundef %18, ptr noundef %1154, ptr noundef %13, ptr noundef %1163, ptr noundef %14, ptr noundef %19, ptr noundef %1170, ptr noundef %15)
          to label %1171 unwind label %1175

1171:                                             ; preds = %1160
  br label %1172

1172:                                             ; preds = %1171
  %1173 = load i32, ptr %95, align 4, !tbaa !5
  %1174 = add nsw i32 %1173, 1
  store i32 %1174, ptr %95, align 4, !tbaa !5
  br label %1145, !llvm.loop !43

1175:                                             ; preds = %1160, %1150
  %1176 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %1177 = extractvalue { ptr, i32 } %1176, 0
  store ptr %1177, ptr %33, align 8
  %1178 = extractvalue { ptr, i32 } %1176, 1
  store i32 %1178, ptr %34, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %95) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %94) #12
  br label %1253

1179:                                             ; preds = %1149
  br label %1180

1180:                                             ; preds = %1179
  %1181 = load i32, ptr %94, align 4, !tbaa !5
  %1182 = add nsw i32 %1181, 1
  store i32 %1182, ptr %94, align 4, !tbaa !5
  br label %1135, !llvm.loop !44

1183:                                             ; preds = %1139
  call void @llvm.lifetime.start.p0(i64 8, ptr %96) #12
  %1184 = load i64, ptr %93, align 8, !tbaa !37
  %1185 = invoke i64 @libxsmm_timer_tick()
          to label %1186 unwind label %1239

1186:                                             ; preds = %1183
  %1187 = invoke noundef i64 @_Z21libxsmm_timer_ncyclesyy(i64 noundef %1184, i64 noundef %1185)
          to label %1188 unwind label %1239

1188:                                             ; preds = %1186
  store i64 %1187, ptr %96, align 8, !tbaa !37
  call void @llvm.lifetime.start.p0(i64 8, ptr %97) #12
  %1189 = load i64, ptr %96, align 8, !tbaa !37
  %1190 = invoke double @libxsmm_timer_duration(i64 noundef 0, i64 noundef %1189)
          to label %1191 unwind label %1243

1191:                                             ; preds = %1188
  %1192 = load i32, ptr %12, align 4, !tbaa !5
  %1193 = sitofp i32 %1192 to double
  %1194 = fdiv double %1190, %1193
  store double %1194, ptr %97, align 8, !tbaa !12
  %1195 = load double, ptr %97, align 8, !tbaa !12
  %1196 = fcmp olt double 0.000000e+00, %1195
  br i1 %1196, label %1197, label %1247

1197:                                             ; preds = %1191
  %1198 = load i64, ptr %96, align 8, !tbaa !37
  %1199 = icmp ne i64 0, %1198
  br i1 %1199, label %1200, label %1247

1200:                                             ; preds = %1197
  %1201 = load ptr, ptr @stdout, align 8, !tbaa !9
  %1202 = load i32, ptr %9, align 4, !tbaa !5
  %1203 = sitofp i32 %1202 to double
  %1204 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %1203, double -1.000000e+00)
  %1205 = load i32, ptr %24, align 4, !tbaa !5
  %1206 = sitofp i32 %1205 to double
  %1207 = load i32, ptr %8, align 4, !tbaa !5
  %1208 = sitofp i32 %1207 to double
  %1209 = fmul double %1206, %1208
  %1210 = load i32, ptr %10, align 4, !tbaa !5
  %1211 = sitofp i32 %1210 to double
  %1212 = fmul double %1209, %1211
  %1213 = fmul double %1204, %1212
  %1214 = load i64, ptr %96, align 8, !tbaa !37
  %1215 = uitofp i64 %1214 to double
  %1216 = fdiv double %1213, %1215
  %1217 = getelementptr inbounds [6 x i8], ptr %28, i64 0, i64 0
  %1218 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %1201, ptr noundef @.str.4, double noundef %1216, ptr noundef %1217) #12
  %1219 = load ptr, ptr @stdout, align 8, !tbaa !9
  %1220 = load double, ptr %27, align 8, !tbaa !12
  %1221 = load double, ptr %97, align 8, !tbaa !12
  %1222 = fdiv double %1220, %1221
  %1223 = getelementptr inbounds [6 x i8], ptr %28, i64 0, i64 0
  %1224 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %1219, ptr noundef @.str.5, double noundef %1222, ptr noundef %1223) #12
  %1225 = load ptr, ptr @stdout, align 8, !tbaa !9
  %1226 = load i32, ptr %24, align 4, !tbaa !5
  %1227 = sext i32 %1226 to i64
  %1228 = load i64, ptr %26, align 8, !tbaa !14
  %1229 = load i32, ptr %20, align 4, !tbaa !5
  %1230 = sext i32 %1229 to i64
  %1231 = mul i64 %1230, 8
  %1232 = sub i64 %1228, %1231
  %1233 = mul i64 %1227, %1232
  %1234 = uitofp i64 %1233 to double
  %1235 = load double, ptr %97, align 8, !tbaa !12
  %1236 = fmul double %1235, 0x41D0000000000000
  %1237 = fdiv double %1234, %1236
  %1238 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %1225, ptr noundef @.str.6, double noundef %1237) #12
  br label %1247

1239:                                             ; preds = %1186, %1183
  %1240 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %1241 = extractvalue { ptr, i32 } %1240, 0
  store ptr %1241, ptr %33, align 8
  %1242 = extractvalue { ptr, i32 } %1240, 1
  store i32 %1242, ptr %34, align 4
  br label %1252

1243:                                             ; preds = %1188
  %1244 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %1245 = extractvalue { ptr, i32 } %1244, 0
  store ptr %1245, ptr %33, align 8
  %1246 = extractvalue { ptr, i32 } %1244, 1
  store i32 %1246, ptr %34, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %97) #12
  br label %1252

1247:                                             ; preds = %1200, %1197, %1191
  %1248 = load ptr, ptr @stdout, align 8, !tbaa !9
  %1249 = load double, ptr %97, align 8, !tbaa !12
  %1250 = fmul double 1.000000e+03, %1249
  %1251 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %1248, ptr noundef @.str.7, double noundef %1250) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %97) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %96) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %93) #12
  br label %1481

1252:                                             ; preds = %1243, %1239
  call void @llvm.lifetime.end.p0(i64 8, ptr %96) #12
  br label %1253

1253:                                             ; preds = %1252, %1175, %1140
  call void @llvm.lifetime.end.p0(i64 8, ptr %93) #12
  br label %1506

1254:                                             ; preds = %872
  %1255 = load ptr, ptr @stdout, align 8, !tbaa !9
  %1256 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %1255, ptr noundef @.str.10) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr %98) #12
  %1257 = invoke i64 @libxsmm_timer_tick()
          to label %1258 unwind label %1264

1258:                                             ; preds = %1254
  store i64 %1257, ptr %98, align 8, !tbaa !37
  call void @llvm.lifetime.start.p0(i64 4, ptr %99) #12
  store i32 0, ptr %99, align 4, !tbaa !5
  br label %1259

1259:                                             ; preds = %1307, %1258
  %1260 = load i32, ptr %99, align 4, !tbaa !5
  %1261 = load i32, ptr %12, align 4, !tbaa !5
  %1262 = icmp slt i32 %1260, %1261
  br i1 %1262, label %1268, label %1263

1263:                                             ; preds = %1259
  store i32 75, ptr %84, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %99) #12
  br label %1310

1264:                                             ; preds = %1254
  %1265 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %1266 = extractvalue { ptr, i32 } %1265, 0
  store ptr %1266, ptr %33, align 8
  %1267 = extractvalue { ptr, i32 } %1265, 1
  store i32 %1267, ptr %34, align 4
  br label %1381

1268:                                             ; preds = %1259
  call void @llvm.lifetime.start.p0(i64 4, ptr %100) #12
  store i32 0, ptr %100, align 4, !tbaa !5
  br label %1269

1269:                                             ; preds = %1299, %1268
  %1270 = load i32, ptr %100, align 4, !tbaa !5
  %1271 = load i32, ptr %24, align 4, !tbaa !5
  %1272 = icmp slt i32 %1270, %1271
  br i1 %1272, label %1274, label %1273

1273:                                             ; preds = %1269
  store i32 78, ptr %84, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %100) #12
  br label %1306

1274:                                             ; preds = %1269
  call void @llvm.lifetime.start.p0(i64 4, ptr %101) #12
  store i32 0, ptr %101, align 4, !tbaa !5
  %1275 = load i32, ptr %8, align 4, !tbaa !5
  %1276 = load i32, ptr %10, align 4, !tbaa !5
  %1277 = load i32, ptr %9, align 4, !tbaa !5
  %1278 = load ptr, ptr %35, align 8, !tbaa !9
  %1279 = load i32, ptr %20, align 4, !tbaa !5
  %1280 = sext i32 %1279 to i64
  %1281 = load i32, ptr %100, align 4, !tbaa !5
  %1282 = invoke noundef i32 @_ZZ4mainENK4raii7shuffleEi(ptr noundef nonnull align 8 dereferenceable(40) %32, i32 noundef %1281)
          to label %1283 unwind label %1302

1283:                                             ; preds = %1274
  %1284 = sext i32 %1282 to i64
  %1285 = mul i64 %1280, %1284
  %1286 = getelementptr inbounds double, ptr %1278, i64 %1285
  %1287 = load ptr, ptr %36, align 8, !tbaa !9
  %1288 = load i32, ptr %21, align 4, !tbaa !5
  %1289 = sext i32 %1288 to i64
  %1290 = load i32, ptr %100, align 4, !tbaa !5
  %1291 = invoke noundef i32 @_ZZ4mainENK4raii7shuffleEi(ptr noundef nonnull align 8 dereferenceable(40) %32, i32 noundef %1290)
          to label %1292 unwind label %1302

1292:                                             ; preds = %1283
  %1293 = sext i32 %1291 to i64
  %1294 = mul i64 %1289, %1293
  %1295 = getelementptr inbounds double, ptr %1287, i64 %1294
  %1296 = load ptr, ptr %37, align 8, !tbaa !9
  %1297 = getelementptr inbounds double, ptr %1296, i64 0
  invoke void @_Z12libxsmm_gemmPKcS0_iiiPKdS2_PKiS2_S4_S2_PdS4_(ptr noundef %16, ptr noundef %17, i32 noundef %1275, i32 noundef %1276, i32 noundef %1277, ptr noundef %18, ptr noundef %1286, ptr noundef %13, ptr noundef %1295, ptr noundef %14, ptr noundef %19, ptr noundef %1297, ptr noundef %15)
          to label %1298 unwind label %1302

1298:                                             ; preds = %1292
  call void @llvm.lifetime.end.p0(i64 4, ptr %101) #12
  br label %1299

1299:                                             ; preds = %1298
  %1300 = load i32, ptr %100, align 4, !tbaa !5
  %1301 = add nsw i32 %1300, 1
  store i32 %1301, ptr %100, align 4, !tbaa !5
  br label %1269, !llvm.loop !45

1302:                                             ; preds = %1292, %1283, %1274
  %1303 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %1304 = extractvalue { ptr, i32 } %1303, 0
  store ptr %1304, ptr %33, align 8
  %1305 = extractvalue { ptr, i32 } %1303, 1
  store i32 %1305, ptr %34, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %101) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %100) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %99) #12
  br label %1381

1306:                                             ; preds = %1273
  br label %1307

1307:                                             ; preds = %1306
  %1308 = load i32, ptr %99, align 4, !tbaa !5
  %1309 = add nsw i32 %1308, 1
  store i32 %1309, ptr %99, align 4, !tbaa !5
  br label %1259, !llvm.loop !46

1310:                                             ; preds = %1263
  call void @llvm.lifetime.start.p0(i64 8, ptr %102) #12
  %1311 = load i64, ptr %98, align 8, !tbaa !37
  %1312 = invoke i64 @libxsmm_timer_tick()
          to label %1313 unwind label %1367

1313:                                             ; preds = %1310
  %1314 = invoke noundef i64 @_Z21libxsmm_timer_ncyclesyy(i64 noundef %1311, i64 noundef %1312)
          to label %1315 unwind label %1367

1315:                                             ; preds = %1313
  store i64 %1314, ptr %102, align 8, !tbaa !37
  call void @llvm.lifetime.start.p0(i64 8, ptr %103) #12
  %1316 = load i64, ptr %102, align 8, !tbaa !37
  %1317 = invoke double @libxsmm_timer_duration(i64 noundef 0, i64 noundef %1316)
          to label %1318 unwind label %1371

1318:                                             ; preds = %1315
  %1319 = load i32, ptr %12, align 4, !tbaa !5
  %1320 = sitofp i32 %1319 to double
  %1321 = fdiv double %1317, %1320
  store double %1321, ptr %103, align 8, !tbaa !12
  %1322 = load double, ptr %103, align 8, !tbaa !12
  %1323 = fcmp olt double 0.000000e+00, %1322
  br i1 %1323, label %1324, label %1375

1324:                                             ; preds = %1318
  %1325 = load i64, ptr %102, align 8, !tbaa !37
  %1326 = icmp ne i64 0, %1325
  br i1 %1326, label %1327, label %1375

1327:                                             ; preds = %1324
  %1328 = load ptr, ptr @stdout, align 8, !tbaa !9
  %1329 = load i32, ptr %9, align 4, !tbaa !5
  %1330 = sitofp i32 %1329 to double
  %1331 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %1330, double -1.000000e+00)
  %1332 = load i32, ptr %24, align 4, !tbaa !5
  %1333 = sitofp i32 %1332 to double
  %1334 = load i32, ptr %8, align 4, !tbaa !5
  %1335 = sitofp i32 %1334 to double
  %1336 = fmul double %1333, %1335
  %1337 = load i32, ptr %10, align 4, !tbaa !5
  %1338 = sitofp i32 %1337 to double
  %1339 = fmul double %1336, %1338
  %1340 = fmul double %1331, %1339
  %1341 = load i64, ptr %102, align 8, !tbaa !37
  %1342 = uitofp i64 %1341 to double
  %1343 = fdiv double %1340, %1342
  %1344 = getelementptr inbounds [6 x i8], ptr %28, i64 0, i64 0
  %1345 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %1328, ptr noundef @.str.4, double noundef %1343, ptr noundef %1344) #12
  %1346 = load ptr, ptr @stdout, align 8, !tbaa !9
  %1347 = load double, ptr %27, align 8, !tbaa !12
  %1348 = load double, ptr %103, align 8, !tbaa !12
  %1349 = fdiv double %1347, %1348
  %1350 = getelementptr inbounds [6 x i8], ptr %28, i64 0, i64 0
  %1351 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %1346, ptr noundef @.str.5, double noundef %1349, ptr noundef %1350) #12
  %1352 = load ptr, ptr @stdout, align 8, !tbaa !9
  %1353 = load i32, ptr %24, align 4, !tbaa !5
  %1354 = sext i32 %1353 to i64
  %1355 = load i64, ptr %26, align 8, !tbaa !14
  %1356 = load i32, ptr %22, align 4, !tbaa !5
  %1357 = sext i32 %1356 to i64
  %1358 = mul i64 8, %1357
  %1359 = mul i64 %1358, 2
  %1360 = sub i64 %1355, %1359
  %1361 = mul i64 %1354, %1360
  %1362 = uitofp i64 %1361 to double
  %1363 = load double, ptr %103, align 8, !tbaa !12
  %1364 = fmul double %1363, 0x41D0000000000000
  %1365 = fdiv double %1362, %1364
  %1366 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %1352, ptr noundef @.str.6, double noundef %1365) #12
  br label %1375

1367:                                             ; preds = %1313, %1310
  %1368 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %1369 = extractvalue { ptr, i32 } %1368, 0
  store ptr %1369, ptr %33, align 8
  %1370 = extractvalue { ptr, i32 } %1368, 1
  store i32 %1370, ptr %34, align 4
  br label %1380

1371:                                             ; preds = %1315
  %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 8, ptr %103) #12
  br label %1380

1375:                                             ; preds = %1327, %1324, %1318
  %1376 = load ptr, ptr @stdout, align 8, !tbaa !9
  %1377 = load double, ptr %103, align 8, !tbaa !12
  %1378 = fmul double 1.000000e+03, %1377
  %1379 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %1376, ptr noundef @.str.7, double noundef %1378) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %103) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %102) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %98) #12
  br label %1481

1380:                                             ; preds = %1371, %1367
  call void @llvm.lifetime.end.p0(i64 8, ptr %102) #12
  br label %1381

1381:                                             ; preds = %1380, %1302, %1264
  call void @llvm.lifetime.end.p0(i64 8, ptr %98) #12
  br label %1506

1382:                                             ; preds = %872
  %1383 = load ptr, ptr @stdout, align 8, !tbaa !9
  %1384 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %1383, ptr noundef @.str.11) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr %104) #12
  %1385 = invoke i64 @libxsmm_timer_tick()
          to label %1386 unwind label %1392

1386:                                             ; preds = %1382
  store i64 %1385, ptr %104, align 8, !tbaa !37
  call void @llvm.lifetime.start.p0(i64 4, ptr %105) #12
  store i32 0, ptr %105, align 4, !tbaa !5
  br label %1387

1387:                                             ; preds = %1419, %1386
  %1388 = load i32, ptr %105, align 4, !tbaa !5
  %1389 = load i32, ptr %12, align 4, !tbaa !5
  %1390 = icmp slt i32 %1388, %1389
  br i1 %1390, label %1396, label %1391

1391:                                             ; preds = %1387
  store i32 81, ptr %84, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %105) #12
  br label %1422

1392:                                             ; preds = %1382
  %1393 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %1394 = extractvalue { ptr, i32 } %1393, 0
  store ptr %1394, ptr %33, align 8
  %1395 = extractvalue { ptr, i32 } %1393, 1
  store i32 %1395, ptr %34, align 4
  br label %1478

1396:                                             ; preds = %1387
  call void @llvm.lifetime.start.p0(i64 4, ptr %106) #12
  store i32 0, ptr %106, align 4, !tbaa !5
  br label %1397

1397:                                             ; preds = %1411, %1396
  %1398 = load i32, ptr %106, align 4, !tbaa !5
  %1399 = load i32, ptr %24, align 4, !tbaa !5
  %1400 = icmp slt i32 %1398, %1399
  br i1 %1400, label %1402, label %1401

1401:                                             ; preds = %1397
  store i32 84, ptr %84, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %106) #12
  br label %1418

1402:                                             ; preds = %1397
  call void @llvm.lifetime.start.p0(i64 4, ptr %107) #12
  store i32 0, ptr %107, align 4, !tbaa !5
  %1403 = load i32, ptr %8, align 4, !tbaa !5
  %1404 = load i32, ptr %10, align 4, !tbaa !5
  %1405 = load i32, ptr %9, align 4, !tbaa !5
  %1406 = load ptr, ptr %35, align 8, !tbaa !9
  %1407 = load ptr, ptr %36, align 8, !tbaa !9
  %1408 = load ptr, ptr %37, align 8, !tbaa !9
  %1409 = getelementptr inbounds double, ptr %1408, i64 0
  invoke void @_Z12libxsmm_gemmPKcS0_iiiPKdS2_PKiS2_S4_S2_PdS4_(ptr noundef %16, ptr noundef %17, i32 noundef %1403, i32 noundef %1404, i32 noundef %1405, ptr noundef %18, ptr noundef %1406, ptr noundef %13, ptr noundef %1407, ptr noundef %14, ptr noundef %19, ptr noundef %1409, ptr noundef %15)
          to label %1410 unwind label %1414

1410:                                             ; preds = %1402
  call void @llvm.lifetime.end.p0(i64 4, ptr %107) #12
  br label %1411

1411:                                             ; preds = %1410
  %1412 = load i32, ptr %106, align 4, !tbaa !5
  %1413 = add nsw i32 %1412, 1
  store i32 %1413, ptr %106, align 4, !tbaa !5
  br label %1397, !llvm.loop !47

1414:                                             ; preds = %1402
  %1415 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %1416 = extractvalue { ptr, i32 } %1415, 0
  store ptr %1416, ptr %33, align 8
  %1417 = extractvalue { ptr, i32 } %1415, 1
  store i32 %1417, ptr %34, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %107) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %106) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %105) #12
  br label %1478

1418:                                             ; preds = %1401
  br label %1419

1419:                                             ; preds = %1418
  %1420 = load i32, ptr %105, align 4, !tbaa !5
  %1421 = add nsw i32 %1420, 1
  store i32 %1421, ptr %105, align 4, !tbaa !5
  br label %1387, !llvm.loop !48

1422:                                             ; preds = %1391
  call void @llvm.lifetime.start.p0(i64 8, ptr %108) #12
  %1423 = load i64, ptr %104, align 8, !tbaa !37
  %1424 = invoke i64 @libxsmm_timer_tick()
          to label %1425 unwind label %1464

1425:                                             ; preds = %1422
  %1426 = invoke noundef i64 @_Z21libxsmm_timer_ncyclesyy(i64 noundef %1423, i64 noundef %1424)
          to label %1427 unwind label %1464

1427:                                             ; preds = %1425
  store i64 %1426, ptr %108, align 8, !tbaa !37
  call void @llvm.lifetime.start.p0(i64 8, ptr %109) #12
  %1428 = load i64, ptr %108, align 8, !tbaa !37
  %1429 = invoke double @libxsmm_timer_duration(i64 noundef 0, i64 noundef %1428)
          to label %1430 unwind label %1468

1430:                                             ; preds = %1427
  %1431 = load i32, ptr %12, align 4, !tbaa !5
  %1432 = sitofp i32 %1431 to double
  %1433 = fdiv double %1429, %1432
  store double %1433, ptr %109, align 8, !tbaa !12
  %1434 = load double, ptr %109, align 8, !tbaa !12
  %1435 = fcmp olt double 0.000000e+00, %1434
  br i1 %1435, label %1436, label %1472

1436:                                             ; preds = %1430
  %1437 = load i64, ptr %108, align 8, !tbaa !37
  %1438 = icmp ne i64 0, %1437
  br i1 %1438, label %1439, label %1472

1439:                                             ; preds = %1436
  %1440 = load ptr, ptr @stdout, align 8, !tbaa !9
  %1441 = load i32, ptr %9, align 4, !tbaa !5
  %1442 = sitofp i32 %1441 to double
  %1443 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %1442, double -1.000000e+00)
  %1444 = load i32, ptr %24, align 4, !tbaa !5
  %1445 = sitofp i32 %1444 to double
  %1446 = load i32, ptr %8, align 4, !tbaa !5
  %1447 = sitofp i32 %1446 to double
  %1448 = fmul double %1445, %1447
  %1449 = load i32, ptr %10, align 4, !tbaa !5
  %1450 = sitofp i32 %1449 to double
  %1451 = fmul double %1448, %1450
  %1452 = fmul double %1443, %1451
  %1453 = load i64, ptr %108, align 8, !tbaa !37
  %1454 = uitofp i64 %1453 to double
  %1455 = fdiv double %1452, %1454
  %1456 = getelementptr inbounds [6 x i8], ptr %28, i64 0, i64 0
  %1457 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %1440, ptr noundef @.str.4, double noundef %1455, ptr noundef %1456) #12
  %1458 = load ptr, ptr @stdout, align 8, !tbaa !9
  %1459 = load double, ptr %27, align 8, !tbaa !12
  %1460 = load double, ptr %109, align 8, !tbaa !12
  %1461 = fdiv double %1459, %1460
  %1462 = getelementptr inbounds [6 x i8], ptr %28, i64 0, i64 0
  %1463 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %1458, ptr noundef @.str.5, double noundef %1461, ptr noundef %1462) #12
  br label %1472

1464:                                             ; preds = %1425, %1422
  %1465 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %1466 = extractvalue { ptr, i32 } %1465, 0
  store ptr %1466, ptr %33, align 8
  %1467 = extractvalue { ptr, i32 } %1465, 1
  store i32 %1467, ptr %34, align 4
  br label %1477

1468:                                             ; preds = %1427
  %1469 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %1470 = extractvalue { ptr, i32 } %1469, 0
  store ptr %1470, ptr %33, align 8
  %1471 = extractvalue { ptr, i32 } %1469, 1
  store i32 %1471, ptr %34, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %109) #12
  br label %1477

1472:                                             ; preds = %1439, %1436, %1430
  %1473 = load ptr, ptr @stdout, align 8, !tbaa !9
  %1474 = load double, ptr %109, align 8, !tbaa !12
  %1475 = fmul double 1.000000e+03, %1474
  %1476 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %1473, ptr noundef @.str.7, double noundef %1475) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %109) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %108) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %104) #12
  br label %1481

1477:                                             ; preds = %1468, %1464
  call void @llvm.lifetime.end.p0(i64 8, ptr %108) #12
  br label %1478

1478:                                             ; preds = %1477, %1414, %1392
  call void @llvm.lifetime.end.p0(i64 8, ptr %104) #12
  br label %1506

1479:                                             ; preds = %872
  %1480 = call ptr @__cxa_allocate_exception(i64 8) #12
  store ptr @.str.12, ptr %1480, align 16, !tbaa !9
  invoke void @__cxa_throw(ptr %1480, ptr @_ZTIPKc, ptr null) #14
          to label %1539 unwind label %874

1481:                                             ; preds = %1472, %1375, %1247, %1123, %999
  %1482 = load i32, ptr %31, align 4, !tbaa !5
  %1483 = icmp ne i32 0, %1482
  br i1 %1483, label %1484, label %1502

1484:                                             ; preds = %1481
  call void @llvm.lifetime.start.p0(i64 192, ptr %110) #12
  %1485 = load i32, ptr %8, align 4, !tbaa !5
  %1486 = load i32, ptr %10, align 4, !tbaa !5
  %1487 = load ptr, ptr %37, align 8, !tbaa !9
  %1488 = invoke i32 @libxsmm_matdiff(ptr noundef %110, i32 noundef 0, i32 noundef %1485, i32 noundef %1486, ptr noundef %1487, ptr noundef null, ptr noundef %15, ptr noundef %15)
          to label %1489 unwind label %1497

1489:                                             ; preds = %1484
  store i32 %1488, ptr %6, align 4, !tbaa !5
  %1490 = load i32, ptr %6, align 4, !tbaa !5
  %1491 = icmp eq i32 0, %1490
  br i1 %1491, label %1492, label %1501

1492:                                             ; preds = %1489
  %1493 = load ptr, ptr @stdout, align 8, !tbaa !9
  %1494 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %110, i32 0, i32 10
  %1495 = load double, ptr %1494, align 8, !tbaa !49
  %1496 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %1493, ptr noundef @.str.13, double noundef %1495) #12
  br label %1501

1497:                                             ; preds = %1484
  %1498 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %1499 = extractvalue { ptr, i32 } %1498, 0
  store ptr %1499, ptr %33, align 8
  %1500 = extractvalue { ptr, i32 } %1498, 1
  store i32 %1500, ptr %34, align 4
  call void @llvm.lifetime.end.p0(i64 192, ptr %110) #12
  br label %1506

1501:                                             ; preds = %1492, %1489
  call void @llvm.lifetime.end.p0(i64 192, ptr %110) #12
  br label %1502

1502:                                             ; preds = %1501, %1481
  invoke void @libxsmm_finalize()
          to label %1503 unwind label %874

1503:                                             ; preds = %1502
  %1504 = load ptr, ptr @stdout, align 8, !tbaa !9
  %1505 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %1504, ptr noundef @.str.14) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #12
  call void @_ZZ4mainEN4raiiD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %32) #12
  call void @llvm.lifetime.end.p0(i64 40, ptr %32) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #12
  call void @llvm.lifetime.end.p0(i64 6, ptr %28) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #12
  call void @llvm.lifetime.end.p0(i64 1, ptr %17) #12
  call void @llvm.lifetime.end.p0(i64 1, ptr %16) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #12
  br label %1522

1506:                                             ; preds = %1497, %1478, %1381, %1253, %1129, %1005, %874, %837
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #12
  call void @_ZZ4mainEN4raiiD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %32) #12
  br label %1507

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

1508:                                             ; preds = %1507
  %1509 = load i32, ptr %34, align 4
  %1510 = call i32 @llvm.eh.typeid.for.p0(ptr @_ZTISt9exception) #12
  %1511 = icmp eq i32 %1509, %1510
  br i1 %1511, label %1512, label %1525

1512:                                             ; preds = %1508
  call void @llvm.lifetime.start.p0(i64 8, ptr %112) #12
  %1513 = load ptr, ptr %33, align 8
  %1514 = call ptr @__cxa_begin_catch(ptr %1513) #12
  store ptr %1514, ptr %112, align 8
  %1515 = load ptr, ptr @stderr, align 8, !tbaa !9
  %1516 = load ptr, ptr %112, align 8, !tbaa !9
  %1517 = load ptr, ptr %1516, align 8, !tbaa !51
  %1518 = getelementptr inbounds ptr, ptr %1517, i64 2
  %1519 = load ptr, ptr %1518, align 8
  %1520 = call noundef ptr %1519(ptr noundef nonnull align 8 dereferenceable(8) %1516) #12
  %1521 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %1515, ptr noundef @.str.16, ptr noundef %1520) #12
  store i32 1, ptr %6, align 4, !tbaa !5
  call void @__cxa_end_catch()
  call void @llvm.lifetime.end.p0(i64 8, ptr %112) #12
  br label %1522

1522:                                             ; preds = %1534, %1528, %1512, %1503
  %1523 = load i32, ptr %6, align 4, !tbaa !5
  store i32 %1523, ptr %3, align 4
  store i32 1, ptr %84, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #12
  %1524 = load i32, ptr %3, align 4
  ret i32 %1524

1525:                                             ; preds = %1508
  %1526 = call i32 @llvm.eh.typeid.for.p0(ptr @_ZTIPKc) #12
  %1527 = icmp eq i32 %1509, %1526
  br i1 %1527, label %1528, label %1534

1528:                                             ; preds = %1525
  call void @llvm.lifetime.start.p0(i64 8, ptr %111) #12
  %1529 = load ptr, ptr %33, align 8
  %1530 = call ptr @__cxa_begin_catch(ptr %1529) #12
  store ptr %1530, ptr %111, align 8
  %1531 = load ptr, ptr @stderr, align 8, !tbaa !9
  %1532 = load ptr, ptr %111, align 8, !tbaa !9
  %1533 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %1531, ptr noundef @.str.16, ptr noundef %1532) #12
  store i32 1, ptr %6, align 4, !tbaa !5
  call void @__cxa_end_catch() #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %111) #12
  br label %1522

1534:                                             ; preds = %1525
  %1535 = load ptr, ptr %33, align 8
  %1536 = call ptr @__cxa_begin_catch(ptr %1535) #12
  %1537 = load ptr, ptr @stderr, align 8, !tbaa !9
  %1538 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %1537, ptr noundef @.str.15) #12
  store i32 1, ptr %6, align 4, !tbaa !5
  call void @__cxa_end_catch()
  br label %1522

1539:                                             ; preds = %1479
  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(40), 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(40), 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

declare i64 @libxsmm_timer_tick() #8

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_Z12libxsmm_gemmPKcS0_iiiPKdS2_PKiS2_S4_S2_PdS4_(ptr noundef, ptr noundef, i32 noundef, i32 noundef, i32 noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) #9

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

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

declare ptr @__cxa_allocate_exception(i64)

declare void @__cxa_throw(ptr, ptr, ptr)

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

declare void @libxsmm_finalize() #8

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

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

declare ptr @__cxa_begin_catch(ptr)

declare void @__cxa_end_catch()

attributes #0 = { mustprogress norecurse uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { inlinehint mustprogress nounwind willreturn memory(read) uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { 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 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 = { 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 = { nounwind memory(none) }
attributes #12 = { nounwind }
attributes #13 = { nounwind willreturn memory(read) }
attributes #14 = { 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, !15, i64 24, !15, i64 32}
!18 = !{!17, !10, i64 8}
!19 = !{!17, !10, i64 16}
!20 = distinct !{!20, !21}
!21 = !{!"llvm.loop.mustprogress"}
!22 = distinct !{!22, !21}
!23 = distinct !{!23, !21}
!24 = distinct !{!24, !21}
!25 = distinct !{!25, !21}
!26 = distinct !{!26, !21}
!27 = distinct !{!27, !21}
!28 = distinct !{!28, !21}
!29 = distinct !{!29, !21}
!30 = distinct !{!30, !21}
!31 = distinct !{!31, !21}
!32 = distinct !{!32, !21}
!33 = distinct !{!33, !21}
!34 = distinct !{!34, !21}
!35 = distinct !{!35, !21}
!36 = distinct !{!36, !21}
!37 = !{!38, !38, i64 0}
!38 = !{!"long long", !7, i64 0}
!39 = distinct !{!39, !21}
!40 = distinct !{!40, !21}
!41 = distinct !{!41, !21}
!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 = distinct !{!48, !21}
!49 = !{!50, !13, i64 80}
!50 = !{!"_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}
!51 = !{!52, !52, i64 0}
!52 = !{!"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, i64, i64 }
%class.libxsmm_mmfunction = type { ptr }
%struct.libxsmm_matdiff_info = type { double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, i32, i32, i32, i32 }

@_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 [20 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [10 x i8], align 1
@stderr = external local_unnamed_addr global ptr, align 8
@.str.15 = external hidden unnamed_addr constant [34 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [11 x i8], align 1

; Function Attrs: mustprogress norecurse uwtable
define dso_local noundef i32 @main(i32 noundef %0, ptr 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 %struct.libxsmm_matdiff_info, align 8
  %14 = icmp sgt i32 %0, 1
  br i1 %14, label %15, label %.thread528

15:                                               ; preds = %2
  %16 = getelementptr inbounds i8, ptr %1, i64 8
  %17 = load ptr, ptr %16, align 8, !tbaa !5
  %18 = tail call i32 @atoi(ptr nocapture noundef %17) #14
  %.not532 = icmp eq i32 %0, 2
  br i1 %.not532, label %.thread528, label %19

19:                                               ; preds = %15
  %20 = getelementptr inbounds i8, ptr %1, i64 16
  %21 = load ptr, ptr %20, align 8, !tbaa !5
  %22 = tail call i32 @atoi(ptr nocapture noundef %21) #14
  %23 = icmp ugt i32 %0, 4
  br i1 %23, label %29, label %24

24:                                               ; preds = %19
  %25 = icmp eq i32 %0, 4
  br i1 %25, label %.thread521, label %.thread528

.thread521:                                       ; preds = %24
  %26 = getelementptr inbounds i8, ptr %1, i64 24
  %27 = load ptr, ptr %26, align 8, !tbaa !5
  %28 = tail call i32 @atoi(ptr nocapture noundef %27) #14
  br label %.thread528

29:                                               ; preds = %19
  %30 = getelementptr inbounds i8, ptr %1, i64 32
  %31 = load ptr, ptr %30, align 8, !tbaa !5
  %32 = tail call i32 @atoi(ptr nocapture noundef %31) #14
  %33 = getelementptr inbounds i8, ptr %1, i64 24
  %34 = load ptr, ptr %33, align 8, !tbaa !5
  %35 = tail call i32 @atoi(ptr nocapture noundef %34) #14
  %.not533 = icmp eq i32 %0, 5
  br i1 %.not533, label %.thread528, label %36

36:                                               ; preds = %29
  %37 = getelementptr inbounds i8, ptr %1, i64 40
  %38 = load ptr, ptr %37, align 8, !tbaa !5
  %39 = tail call i32 @atoi(ptr nocapture noundef %38) #14
  %.fr = freeze i32 %39
  %40 = icmp ugt i32 %0, 6
  br i1 %40, label %41, label %46

41:                                               ; preds = %36
  %42 = getelementptr inbounds i8, ptr %1, i64 48
  %43 = load ptr, ptr %42, align 8, !tbaa !5
  %44 = tail call i32 @atoi(ptr nocapture noundef %43) #14
  %45 = icmp sgt i32 %44, 0
  br i1 %45, label %.thread528, label %46

46:                                               ; preds = %41, %36
  %47 = icmp slt i32 %.fr, 1
  %spec.select = select i1 %47, i32 13, i32 1
  br label %.thread528

.thread528:                                       ; preds = %46, %.thread521, %29, %24, %2, %15, %41
  %48 = phi i32 [ %.fr, %41 ], [ 0, %15 ], [ 0, %2 ], [ 0, %24 ], [ 0, %29 ], [ 0, %.thread521 ], [ %.fr, %46 ]
  %49 = phi i32 [ %32, %41 ], [ 23, %15 ], [ 23, %2 ], [ %22, %24 ], [ %32, %29 ], [ %22, %.thread521 ], [ %32, %46 ]
  %50 = phi i32 [ %18, %41 ], [ %18, %15 ], [ 0, %2 ], [ %18, %24 ], [ %18, %29 ], [ %18, %.thread521 ], [ %18, %46 ]
  %51 = phi i32 [ %22, %41 ], [ 23, %15 ], [ 23, %2 ], [ %22, %24 ], [ %22, %29 ], [ %22, %.thread521 ], [ %22, %46 ]
  %52 = phi i32 [ %35, %41 ], [ 23, %15 ], [ 23, %2 ], [ %22, %24 ], [ %35, %29 ], [ %28, %.thread521 ], [ %35, %46 ]
  %53 = phi i32 [ %44, %41 ], [ 13, %15 ], [ 13, %2 ], [ 13, %24 ], [ 13, %29 ], [ 13, %.thread521 ], [ %spec.select, %46 ]
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %3) #15
  store i32 %51, ptr %3, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %4) #15
  store i32 %49, ptr %4, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %5) #15
  store i32 %51, ptr %5, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %6) #15
  store i8 78, ptr %6, align 1, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %7) #15
  store i8 78, ptr %7, align 1, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %8) #15
  store double 1.000000e+00, ptr %8, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %9) #15
  store double 1.000000e+00, ptr %9, align 8, !tbaa !12
  %54 = mul nsw i32 %51, %49
  %55 = mul nsw i32 %52, %49
  %56 = mul nsw i32 %52, %51
  %57 = sext i32 %54 to i64
  %58 = sext i32 %55 to i64
  %59 = add nsw i64 %58, %57
  %60 = shl nsw i64 %59, 3
  %61 = sext i32 %56 to i64
  %62 = add nsw i64 %59, %61
  %63 = shl nsw i64 %62, 3
  %64 = udiv i64 2147483648, %63
  %65 = trunc nuw i64 %64 to i32
  %66 = icmp sgt i32 %48, 0
  %spec.select729 = select i1 %66, i32 %48, i32 %65
  %. = tail call i32 @llvm.smin.i32(i32 %spec.select729, i32 %65)
  %67 = shl nsw i64 %61, 4
  %68 = add nsw i64 %60, %67
  %69 = sitofp i32 %. to double
  %70 = fmul double %69, 2.000000e-09
  %71 = sitofp i32 %51 to double
  %72 = fmul double %70, %71
  %73 = sitofp i32 %52 to double
  %74 = fmul double %72, %73
  %75 = sitofp i32 %49 to double
  %76 = fmul double %74, %75
  call void @llvm.lifetime.start.p0(i64 6, ptr nonnull %10) #15
  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)
  %77 = fdiv double 1.000000e+00, %69
  %78 = tail call ptr @getenv(ptr noundef nonnull @.str) #15
  %79 = icmp eq ptr %78, null
  br i1 %79, label %82, label %80

80:                                               ; preds = %.thread528
  %81 = tail call i32 @atoi(ptr nocapture noundef %78) #14
  br label %82

82:                                               ; preds = %.thread528, %80
  %83 = phi i32 [ %81, %80 ], [ 0, %.thread528 ]
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %11) #15
  %84 = mul nsw i32 %., %54
  %85 = add nsw i32 %84, 7
  %86 = mul nsw i32 %., %55
  %87 = add nsw i32 %86, 7
  %88 = mul nsw i32 %., %56
  %89 = add nsw i32 %88, 7
  invoke void @_ZZ4mainEN4raiiC2Eiiii(ptr noundef nonnull align 8 dereferenceable(40) %11, i32 noundef %85, i32 noundef %87, i32 noundef %89, i32 noundef %.)
          to label %90 unwind label %120

90:                                               ; preds = %82
  %91 = load ptr, ptr %11, align 8, !tbaa !14
  %92 = ptrtoint ptr %91 to i64
  %93 = add i64 %92, 63
  %94 = and i64 %93, -64
  %95 = sub i64 %94, %92
  %96 = lshr i64 %95, 3
  %97 = getelementptr inbounds double, ptr %91, i64 %96
  %98 = getelementptr inbounds i8, ptr %11, i64 8
  %99 = load ptr, ptr %98, align 8, !tbaa !17
  %100 = ptrtoint ptr %99 to i64
  %101 = add i64 %100, 63
  %102 = and i64 %101, -64
  %103 = sub i64 %102, %100
  %104 = lshr i64 %103, 3
  %105 = getelementptr inbounds double, ptr %99, i64 %104
  %106 = getelementptr inbounds i8, ptr %11, i64 16
  %107 = load ptr, ptr %106, align 8, !tbaa !18
  %108 = ptrtoint ptr %107 to i64
  %109 = add i64 %108, 63
  %110 = and i64 %109, -64
  %111 = sub i64 %110, %108
  %112 = lshr i64 %111, 3
  %113 = getelementptr inbounds double, ptr %107, i64 %112
  %114 = icmp sgt i32 %., 0
  br i1 %114, label %.lr.ph591, label %._crit_edge592

.lr.ph591:                                        ; preds = %90
  %115 = icmp sgt i32 %49, 0
  %116 = icmp sgt i32 %51, 0
  %117 = icmp sgt i32 %52, 0
  %118 = zext nneg i32 %. to i64
  %wide.trip.count651 = zext nneg i32 %49 to i64
  %wide.trip.count = zext i32 %51 to i64
  %wide.trip.count661 = zext nneg i32 %49 to i64
  %wide.trip.count676 = zext nneg i32 %52 to i64
  %wide.trip.count666 = zext nneg i32 %49 to i64
  %wide.trip.count686 = zext nneg i32 %52 to i64
  %wide.trip.count701 = zext nneg i32 %52 to i64
  %wide.trip.count691 = zext nneg i32 %51 to i64
  %smax = call i32 @llvm.smax.i32(i32 %51, i32 0)
  %119 = zext nneg i32 %smax to i64
  %min.iters.check737 = icmp ult i32 %51, 4
  %n.vec740 = and i64 %wide.trip.count, 2147483644
  %cmp.n750 = icmp eq i64 %n.vec740, %wide.trip.count
  br label %122

._crit_edge592:                                   ; preds = %._crit_edge586, %90
  invoke void @libxsmm_init()
          to label %274 unwind label %288

120:                                              ; preds = %82
  %121 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  br label %556

122:                                              ; preds = %.lr.ph591, %._crit_edge586
  %indvars.iv703 = phi i64 [ 0, %.lr.ph591 ], [ %indvars.iv.next704, %._crit_edge586 ]
  %123 = trunc nuw nsw i64 %indvars.iv703 to i32
  %124 = call noundef i32 @_ZZ4mainENK4raii7shuffleEi(ptr noundef nonnull align 8 dereferenceable(40) %11, i32 noundef %123)
  %125 = add nsw i32 %124, 42
  %126 = sitofp i32 %125 to double
  %127 = call double @llvm.fmuladd.f64(double %126, double %77, double %77)
  %128 = load i32, ptr %3, align 4, !tbaa !9
  %.not510 = icmp eq i32 %125, 0
  br i1 %.not510, label %155, label %.preheader558

.preheader558:                                    ; preds = %122
  br i1 %115, label %.preheader552.preheader, label %.loopexit557

.preheader552.preheader:                          ; preds = %.preheader558
  %129 = sext i32 %128 to i64
  %wide.trip.count646 = zext i32 %128 to i64
  br label %.preheader552

.preheader552:                                    ; preds = %.preheader552.preheader, %._crit_edge
  %indvars.iv648 = phi i64 [ 0, %.preheader552.preheader ], [ %indvars.iv.next649, %._crit_edge ]
  br i1 %116, label %.lr.ph, label %.preheader551

.lr.ph:                                           ; preds = %.preheader552
  %130 = mul nsw i64 %indvars.iv648, %129
  %131 = trunc nuw nsw i64 %indvars.iv648 to i32
  %132 = uitofp nneg i32 %131 to double
  %133 = call double @llvm.fmuladd.f64(double %132, double %71, double 1.000000e+00)
  br label %137

.preheader551:                                    ; preds = %137, %.preheader552
  %.0441.lcssa = phi i32 [ 0, %.preheader552 ], [ %51, %137 ]
  %134 = icmp slt i32 %.0441.lcssa, %128
  br i1 %134, label %.lr.ph562, label %._crit_edge

.lr.ph562:                                        ; preds = %.preheader551
  %135 = mul nsw i64 %indvars.iv648, %129
  %136 = zext nneg i32 %.0441.lcssa to i64
  br label %148

137:                                              ; preds = %.lr.ph, %137
  %indvars.iv = phi i64 [ 0, %.lr.ph ], [ %indvars.iv.next, %137 ]
  %138 = trunc nuw nsw i64 %indvars.iv to i32
  %139 = uitofp nneg i32 %138 to double
  %140 = fadd double %133, %139
  %141 = fmul double %127, %140
  %142 = call noundef i32 @_ZZ4mainENK4raii7shuffleEi(ptr noundef nonnull align 8 dereferenceable(40) %11, i32 noundef %123)
  %143 = sext i32 %142 to i64
  %144 = mul nsw i64 %143, %57
  %145 = getelementptr inbounds double, ptr %97, i64 %144
  %146 = getelementptr double, ptr %145, i64 %indvars.iv
  %147 = getelementptr double, ptr %146, i64 %130
  store double %141, ptr %147, 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 %.preheader551, label %137, !llvm.loop !19

148:                                              ; preds = %.lr.ph562, %148
  %indvars.iv643 = phi i64 [ %136, %.lr.ph562 ], [ %indvars.iv.next644, %148 ]
  %149 = call noundef i32 @_ZZ4mainENK4raii7shuffleEi(ptr noundef nonnull align 8 dereferenceable(40) %11, i32 noundef %123)
  %150 = sext i32 %149 to i64
  %151 = mul nsw i64 %150, %57
  %152 = getelementptr inbounds double, ptr %97, i64 %151
  %153 = getelementptr double, ptr %152, i64 %indvars.iv643
  %154 = getelementptr double, ptr %153, i64 %135
  store double %126, ptr %154, align 8, !tbaa !12
  %indvars.iv.next644 = add nuw nsw i64 %indvars.iv643, 1
  %exitcond647.not = icmp eq i64 %indvars.iv.next644, %wide.trip.count646
  br i1 %exitcond647.not, label %._crit_edge, label %148, !llvm.loop !21

._crit_edge:                                      ; preds = %148, %.preheader551
  %indvars.iv.next649 = add nuw nsw i64 %indvars.iv648, 1
  %exitcond652.not = icmp eq i64 %indvars.iv.next649, %wide.trip.count651
  br i1 %exitcond652.not, label %.loopexit557, label %.preheader552, !llvm.loop !22

155:                                              ; preds = %122
  %156 = mul nsw i32 %128, %49
  %157 = add nsw i32 %156, 1
  %158 = sdiv i32 %157, 2
  %159 = sitofp i32 %158 to double
  %160 = fdiv double %77, %159
  %161 = sext i32 %156 to i64
  %162 = invoke i64 @libxsmm_coprime2(i64 noundef %161)
          to label %.preheader556 unwind label %178

.preheader556:                                    ; preds = %155
  %163 = icmp sgt i32 %128, 0
  %or.cond730 = select i1 %115, i1 %163, i1 false
  br i1 %or.cond730, label %.preheader550.us.preheader, label %.loopexit557

.preheader550.us.preheader:                       ; preds = %.preheader556
  %164 = zext nneg i32 %128 to i64
  br label %.preheader550.us

.preheader550.us:                                 ; preds = %.preheader550.us.preheader, %._crit_edge566.us
  %indvars.iv658 = phi i64 [ 0, %.preheader550.us.preheader ], [ %indvars.iv.next659, %._crit_edge566.us ]
  %165 = mul nuw nsw i64 %indvars.iv658, %164
  br label %166

166:                                              ; preds = %.preheader550.us, %166
  %indvars.iv653 = phi i64 [ 0, %.preheader550.us ], [ %indvars.iv.next654, %166 ]
  %167 = add nuw nsw i64 %indvars.iv653, %165
  %168 = mul i64 %162, %167
  %169 = urem i64 %168, %161
  %170 = uitofp i64 %169 to double
  %171 = fsub double %170, %159
  %172 = fmul double %160, %171
  %173 = call noundef i32 @_ZZ4mainENK4raii7shuffleEi(ptr noundef nonnull align 8 dereferenceable(40) %11, i32 noundef %123)
  %174 = sext i32 %173 to i64
  %175 = mul nsw i64 %174, %57
  %176 = getelementptr inbounds double, ptr %97, i64 %175
  %177 = getelementptr inbounds double, ptr %176, i64 %167
  store double %172, ptr %177, align 8, !tbaa !12
  %indvars.iv.next654 = add nuw nsw i64 %indvars.iv653, 1
  %exitcond657.not = icmp eq i64 %indvars.iv.next654, %164
  br i1 %exitcond657.not, label %._crit_edge566.us, label %166, !llvm.loop !23

._crit_edge566.us:                                ; preds = %166
  %indvars.iv.next659 = add nuw nsw i64 %indvars.iv658, 1
  %exitcond662.not = icmp eq i64 %indvars.iv.next659, %wide.trip.count661
  br i1 %exitcond662.not, label %.loopexit557, label %.preheader550.us, !llvm.loop !24

178:                                              ; preds = %155
  %179 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  br label %555

.loopexit557:                                     ; preds = %._crit_edge, %._crit_edge566.us, %.preheader558, %.preheader556
  %180 = call noundef i32 @_ZZ4mainENK4raii7shuffleEi(ptr noundef nonnull align 8 dereferenceable(40) %11, i32 noundef %123)
  %181 = add nsw i32 %180, 24
  %182 = sitofp i32 %181 to double
  %183 = call double @llvm.fmuladd.f64(double %182, double %77, double %77)
  %184 = load i32, ptr %4, align 4, !tbaa !9
  %.not511 = icmp eq i32 %181, 0
  br i1 %.not511, label %211, label %.preheader554

.preheader554:                                    ; preds = %.loopexit557
  br i1 %117, label %.preheader549.preheader, label %._crit_edge586

.preheader549.preheader:                          ; preds = %.preheader554
  %185 = sext i32 %184 to i64
  %wide.trip.count671 = zext i32 %184 to i64
  br label %.preheader549

.preheader549:                                    ; preds = %.preheader549.preheader, %._crit_edge573
  %indvars.iv673 = phi i64 [ 0, %.preheader549.preheader ], [ %indvars.iv.next674, %._crit_edge573 ]
  br i1 %115, label %.lr.ph569, label %.preheader548

.lr.ph569:                                        ; preds = %.preheader549
  %186 = mul nsw i64 %indvars.iv673, %185
  %187 = trunc nuw nsw i64 %indvars.iv673 to i32
  %188 = uitofp nneg i32 %187 to double
  %189 = call double @llvm.fmuladd.f64(double %188, double %75, double 1.000000e+00)
  br label %193

.preheader548:                                    ; preds = %193, %.preheader549
  %.0446.lcssa = phi i32 [ 0, %.preheader549 ], [ %49, %193 ]
  %190 = icmp slt i32 %.0446.lcssa, %184
  br i1 %190, label %.lr.ph572, label %._crit_edge573

.lr.ph572:                                        ; preds = %.preheader548
  %191 = mul nsw i64 %indvars.iv673, %185
  %192 = zext nneg i32 %.0446.lcssa to i64
  br label %204

193:                                              ; preds = %.lr.ph569, %193
  %indvars.iv663 = phi i64 [ 0, %.lr.ph569 ], [ %indvars.iv.next664, %193 ]
  %194 = trunc nuw nsw i64 %indvars.iv663 to i32
  %195 = uitofp nneg i32 %194 to double
  %196 = fadd double %189, %195
  %197 = fmul double %183, %196
  %198 = call noundef i32 @_ZZ4mainENK4raii7shuffleEi(ptr noundef nonnull align 8 dereferenceable(40) %11, i32 noundef %123)
  %199 = sext i32 %198 to i64
  %200 = mul nsw i64 %199, %58
  %201 = getelementptr inbounds double, ptr %105, i64 %200
  %202 = getelementptr double, ptr %201, i64 %indvars.iv663
  %203 = getelementptr double, ptr %202, i64 %186
  store double %197, ptr %203, align 8, !tbaa !12
  %indvars.iv.next664 = add nuw nsw i64 %indvars.iv663, 1
  %exitcond667.not = icmp eq i64 %indvars.iv.next664, %wide.trip.count666
  br i1 %exitcond667.not, label %.preheader548, label %193, !llvm.loop !25

204:                                              ; preds = %.lr.ph572, %204
  %indvars.iv668 = phi i64 [ %192, %.lr.ph572 ], [ %indvars.iv.next669, %204 ]
  %205 = call noundef i32 @_ZZ4mainENK4raii7shuffleEi(ptr noundef nonnull align 8 dereferenceable(40) %11, i32 noundef %123)
  %206 = sext i32 %205 to i64
  %207 = mul nsw i64 %206, %58
  %208 = getelementptr inbounds double, ptr %105, i64 %207
  %209 = getelementptr double, ptr %208, i64 %indvars.iv668
  %210 = getelementptr double, ptr %209, i64 %191
  store double %182, ptr %210, align 8, !tbaa !12
  %indvars.iv.next669 = add nuw nsw i64 %indvars.iv668, 1
  %exitcond672.not = icmp eq i64 %indvars.iv.next669, %wide.trip.count671
  br i1 %exitcond672.not, label %._crit_edge573, label %204, !llvm.loop !26

._crit_edge573:                                   ; preds = %204, %.preheader548
  %indvars.iv.next674 = add nuw nsw i64 %indvars.iv673, 1
  %exitcond677.not = icmp eq i64 %indvars.iv.next674, %wide.trip.count676
  br i1 %exitcond677.not, label %.loopexit, label %.preheader549, !llvm.loop !27

211:                                              ; preds = %.loopexit557
  %212 = mul nsw i32 %184, %52
  %213 = add nsw i32 %212, 1
  %214 = sdiv i32 %213, 2
  %215 = sitofp i32 %214 to double
  %216 = fdiv double %77, %215
  %217 = sext i32 %212 to i64
  %218 = invoke i64 @libxsmm_coprime2(i64 noundef %217)
          to label %.preheader553 unwind label %238

.preheader553:                                    ; preds = %211
  br i1 %117, label %.preheader547.lr.ph, label %._crit_edge586

.preheader547.lr.ph:                              ; preds = %.preheader553
  %219 = icmp sgt i32 %184, 0
  br i1 %219, label %.preheader547.us.preheader, label %.loopexit.thread724

.loopexit.thread724:                              ; preds = %.preheader547.lr.ph
  %220 = trunc i64 %indvars.iv703 to i32
  %221 = add i32 %220, 22
  %222 = uitofp nneg i32 %221 to double
  %223 = call double @llvm.fmuladd.f64(double %222, double %77, double %77)
  br label %.preheader546.lr.ph

.preheader547.us.preheader:                       ; preds = %.preheader547.lr.ph
  %224 = zext nneg i32 %184 to i64
  br label %.preheader547.us

.preheader547.us:                                 ; preds = %.preheader547.us.preheader, %._crit_edge577.us
  %indvars.iv683 = phi i64 [ 0, %.preheader547.us.preheader ], [ %indvars.iv.next684, %._crit_edge577.us ]
  %225 = mul nuw nsw i64 %indvars.iv683, %224
  br label %226

226:                                              ; preds = %.preheader547.us, %226
  %indvars.iv678 = phi i64 [ 0, %.preheader547.us ], [ %indvars.iv.next679, %226 ]
  %227 = add nuw nsw i64 %indvars.iv678, %225
  %228 = mul i64 %218, %227
  %229 = urem i64 %228, %217
  %230 = uitofp i64 %229 to double
  %231 = fsub double %230, %215
  %232 = fmul double %216, %231
  %233 = call noundef i32 @_ZZ4mainENK4raii7shuffleEi(ptr noundef nonnull align 8 dereferenceable(40) %11, i32 noundef %123)
  %234 = sext i32 %233 to i64
  %235 = mul nsw i64 %234, %58
  %236 = getelementptr inbounds double, ptr %105, i64 %235
  %237 = getelementptr inbounds double, ptr %236, i64 %227
  store double %232, ptr %237, align 8, !tbaa !12
  %indvars.iv.next679 = add nuw nsw i64 %indvars.iv678, 1
  %exitcond682.not = icmp eq i64 %indvars.iv.next679, %224
  br i1 %exitcond682.not, label %._crit_edge577.us, label %226, !llvm.loop !28

._crit_edge577.us:                                ; preds = %226
  %indvars.iv.next684 = add nuw nsw i64 %indvars.iv683, 1
  %exitcond687.not = icmp eq i64 %indvars.iv.next684, %wide.trip.count686
  br i1 %exitcond687.not, label %.loopexit, label %.preheader547.us, !llvm.loop !29

238:                                              ; preds = %211
  %239 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  br label %555

.loopexit:                                        ; preds = %._crit_edge573, %._crit_edge577.us
  %240 = trunc i64 %indvars.iv703 to i32
  %241 = add i32 %240, 22
  %242 = uitofp nneg i32 %241 to double
  %243 = call double @llvm.fmuladd.f64(double %242, double %77, double %77)
  br i1 %117, label %.preheader546.lr.ph, label %._crit_edge586

.preheader546.lr.ph:                              ; preds = %.loopexit.thread724, %.loopexit
  %244 = phi double [ %223, %.loopexit.thread724 ], [ %243, %.loopexit ]
  %245 = phi double [ %222, %.loopexit.thread724 ], [ %242, %.loopexit ]
  %246 = load i32, ptr %5, align 4, !tbaa !9
  %247 = mul nsw i64 %indvars.iv703, %61
  %248 = getelementptr inbounds double, ptr %113, i64 %247
  %249 = sext i32 %246 to i64
  %wide.trip.count696 = zext i32 %246 to i64
  %250 = sub nsw i64 %wide.trip.count696, %119
  %broadcast.splatinsert747 = insertelement <2 x double> poison, double %244, i64 0
  %broadcast.splat748 = shufflevector <2 x double> %broadcast.splatinsert747, <2 x double> poison, <2 x i32> zeroinitializer
  %min.iters.check = icmp ult i64 %250, 4
  %n.vec = and i64 %250, -4
  %broadcast.splatinsert = insertelement <2 x double> poison, double %245, i64 0
  %broadcast.splat = shufflevector <2 x double> %broadcast.splatinsert, <2 x double> poison, <2 x i32> zeroinitializer
  %cmp.n = icmp eq i64 %250, %n.vec
  br label %.preheader546

.preheader546:                                    ; preds = %.preheader546.lr.ph, %._crit_edge584
  %indvars.iv698 = phi i64 [ 0, %.preheader546.lr.ph ], [ %indvars.iv.next699, %._crit_edge584 ]
  br i1 %116, label %.lr.ph580, label %.preheader545

.lr.ph580:                                        ; preds = %.preheader546
  %251 = mul nsw i64 %indvars.iv698, %249
  %252 = trunc nuw nsw i64 %indvars.iv698 to i32
  %253 = uitofp nneg i32 %252 to double
  %254 = call double @llvm.fmuladd.f64(double %253, double %71, double 1.000000e+00)
  %invariant.gep = getelementptr double, ptr %248, i64 %251
  br i1 %min.iters.check737, label %scalar.ph736.preheader, label %vector.ph738

scalar.ph736.preheader:                           ; preds = %middle.block735, %.lr.ph580
  %indvars.iv688.ph = phi i64 [ 0, %.lr.ph580 ], [ %n.vec740, %middle.block735 ]
  br label %scalar.ph736

vector.ph738:                                     ; preds = %.lr.ph580
  %broadcast.splatinsert745 = insertelement <2 x double> poison, double %254, i64 0
  %broadcast.splat746 = shufflevector <2 x double> %broadcast.splatinsert745, <2 x double> poison, <2 x i32> zeroinitializer
  br label %vector.body742

vector.body742:                                   ; preds = %vector.body742, %vector.ph738
  %index743 = phi i64 [ 0, %vector.ph738 ], [ %index.next749, %vector.body742 ]
  %vec.ind = phi <2 x i32> [ <i32 0, i32 1>, %vector.ph738 ], [ %vec.ind.next, %vector.body742 ]
  %step.add = add <2 x i32> %vec.ind, <i32 2, i32 2>
  %255 = uitofp <2 x i32> %vec.ind to <2 x double>
  %256 = uitofp <2 x i32> %step.add to <2 x double>
  %257 = fadd <2 x double> %broadcast.splat746, %255
  %258 = fadd <2 x double> %broadcast.splat746, %256
  %259 = fmul <2 x double> %broadcast.splat748, %257
  %260 = fmul <2 x double> %broadcast.splat748, %258
  %261 = getelementptr double, ptr %invariant.gep, i64 %index743
  %262 = getelementptr i8, ptr %261, i64 16
  store <2 x double> %259, ptr %261, align 8, !tbaa !12
  store <2 x double> %260, ptr %262, align 8, !tbaa !12
  %index.next749 = add nuw i64 %index743, 4
  %vec.ind.next = add <2 x i32> %vec.ind, <i32 4, i32 4>
  %263 = icmp eq i64 %index.next749, %n.vec740
  br i1 %263, label %middle.block735, label %vector.body742, !llvm.loop !30

middle.block735:                                  ; preds = %vector.body742
  br i1 %cmp.n750, label %.preheader545, label %scalar.ph736.preheader

.preheader545:                                    ; preds = %scalar.ph736, %middle.block735, %.preheader546
  %.0453.lcssa = phi i32 [ 0, %.preheader546 ], [ %51, %middle.block735 ], [ %51, %scalar.ph736 ]
  %264 = icmp slt i32 %.0453.lcssa, %246
  br i1 %264, label %.lr.ph583, label %._crit_edge584

.lr.ph583:                                        ; preds = %.preheader545
  %265 = mul nsw i64 %indvars.iv698, %249
  %266 = zext nneg i32 %.0453.lcssa to i64
  %invariant.gep727 = getelementptr double, ptr %248, i64 %265
  br i1 %min.iters.check, label %scalar.ph.preheader, label %vector.ph

scalar.ph.preheader:                              ; preds = %middle.block, %.lr.ph583
  %indvars.iv693.ph = phi i64 [ %266, %.lr.ph583 ], [ %ind.end, %middle.block ]
  br label %scalar.ph

vector.ph:                                        ; preds = %.lr.ph583
  %ind.end = add nsw i64 %n.vec, %266
  %invariant.gep753 = getelementptr double, ptr %invariant.gep727, i64 %266
  br label %vector.body

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

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

scalar.ph736:                                     ; preds = %scalar.ph736.preheader, %scalar.ph736
  %indvars.iv688 = phi i64 [ %indvars.iv.next689, %scalar.ph736 ], [ %indvars.iv688.ph, %scalar.ph736.preheader ]
  %269 = trunc nuw nsw i64 %indvars.iv688 to i32
  %270 = uitofp nneg i32 %269 to double
  %271 = fadd double %254, %270
  %272 = fmul double %244, %271
  %gep = getelementptr double, ptr %invariant.gep, i64 %indvars.iv688
  store double %272, ptr %gep, align 8, !tbaa !12
  %indvars.iv.next689 = add nuw nsw i64 %indvars.iv688, 1
  %exitcond692.not = icmp eq i64 %indvars.iv.next689, %wide.trip.count691
  br i1 %exitcond692.not, label %.preheader545, label %scalar.ph736, !llvm.loop !34

scalar.ph:                                        ; preds = %scalar.ph.preheader, %scalar.ph
  %indvars.iv693 = phi i64 [ %indvars.iv.next694, %scalar.ph ], [ %indvars.iv693.ph, %scalar.ph.preheader ]
  %gep728 = getelementptr double, ptr %invariant.gep727, i64 %indvars.iv693
  store double %245, ptr %gep728, align 8, !tbaa !12
  %indvars.iv.next694 = add nuw nsw i64 %indvars.iv693, 1
  %exitcond697.not = icmp eq i64 %indvars.iv.next694, %wide.trip.count696
  br i1 %exitcond697.not, label %._crit_edge584, label %scalar.ph, !llvm.loop !35

._crit_edge584:                                   ; preds = %scalar.ph, %middle.block, %.preheader545
  %indvars.iv.next699 = add nuw nsw i64 %indvars.iv698, 1
  %exitcond702.not = icmp eq i64 %indvars.iv.next699, %wide.trip.count701
  br i1 %exitcond702.not, label %._crit_edge586, label %.preheader546, !llvm.loop !36

._crit_edge586:                                   ; preds = %._crit_edge584, %.preheader553, %.preheader554, %.loopexit
  %indvars.iv.next704 = add nuw nsw i64 %indvars.iv703, 1
  %273 = icmp ult i64 %indvars.iv.next704, %118
  br i1 %273, label %122, label %._crit_edge592, !llvm.loop !37

274:                                              ; preds = %._crit_edge592
  %275 = load ptr, ptr @stdout, align 8, !tbaa !5
  %276 = sext i32 %51 to i64
  %277 = sext i32 %52 to i64
  %278 = sext i32 %49 to i64
  %279 = sext i32 %. to i64
  %280 = mul i64 %63, %279
  %281 = uitofp i64 %280 to double
  %282 = fmul double %281, 0x3EB0000000000000
  %283 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %275, ptr noundef nonnull @.str.1, i64 noundef %276, i64 noundef %277, i64 noundef %278, i64 noundef %279, double noundef %282, ptr noundef nonnull @.str.2, ptr noundef nonnull @.str.2) #15
  %284 = load i32, ptr %3, align 4, !tbaa !9
  %285 = load i32, ptr %4, align 4, !tbaa !9
  %286 = 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 %51, i32 noundef %52, i32 noundef %49, i32 noundef %284, i32 noundef %285, i32 noundef %286, double noundef 1.000000e+00, double noundef 1.000000e+00, i32 noundef -1)
          to label %287 unwind label %288

287:                                              ; preds = %274
  switch i32 %50, label %533 [
    i32 0, label %290
    i32 1, label %343
    i32 2, label %394
    i32 3, label %445
    i32 4, label %496
  ]

288:                                              ; preds = %551, %533, %274, %._crit_edge592
  %289 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  br label %555

290:                                              ; preds = %287
  %291 = load ptr, ptr @stdout, align 8, !tbaa !5
  %292 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %291, ptr noundef nonnull @.str.3) #15
  %293 = invoke i64 @libxsmm_timer_tick()
          to label %.preheader536 unwind label %311

.preheader536:                                    ; preds = %290
  br i1 %114, label %.preheader.us.preheader, label %.split628.us

.preheader.us.preheader:                          ; preds = %.preheader536
  %umax722 = call i32 @llvm.umax.i32(i32 %53, i32 1)
  br label %.preheader.us

.preheader.us:                                    ; preds = %.preheader.us.preheader, %._crit_edge625.us
  %.0456626.us = phi i32 [ %308, %._crit_edge625.us ], [ 0, %.preheader.us.preheader ]
  br label %294

294:                                              ; preds = %.preheader.us, %306
  %indvars.iv719 = phi i64 [ 0, %.preheader.us ], [ %indvars.iv.next720, %306 ]
  %295 = trunc nuw nsw i64 %indvars.iv719 to i32
  %296 = call noundef i32 @_ZZ4mainENK4raii7shuffleEi(ptr noundef nonnull align 8 dereferenceable(40) %11, i32 noundef %295)
  %297 = sext i32 %296 to i64
  %298 = mul nsw i64 %297, %57
  %299 = getelementptr inbounds double, ptr %97, i64 %298
  %300 = call noundef i32 @_ZZ4mainENK4raii7shuffleEi(ptr noundef nonnull align 8 dereferenceable(40) %11, i32 noundef %295)
  %301 = sext i32 %300 to i64
  %302 = mul nsw i64 %301, %58
  %303 = getelementptr inbounds double, ptr %105, i64 %302
  %304 = mul nsw i64 %indvars.iv719, %61
  %305 = getelementptr inbounds double, ptr %113, i64 %304
  invoke void @_Z12libxsmm_gemmPKcS0_iiiPKdS2_PKiS2_S4_S2_PdS4_(ptr noundef nonnull %6, ptr noundef nonnull %7, i32 noundef %51, i32 noundef %52, i32 noundef %49, ptr noundef nonnull %8, ptr noundef %299, ptr noundef nonnull %3, ptr noundef %303, ptr noundef nonnull %4, ptr noundef nonnull %9, ptr noundef %305, ptr noundef nonnull %5)
          to label %306 unwind label %.split630.us

306:                                              ; preds = %294
  %indvars.iv.next720 = add nuw nsw i64 %indvars.iv719, 1
  %307 = icmp slt i64 %indvars.iv.next720, %279
  br i1 %307, label %294, label %._crit_edge625.us, !llvm.loop !38

._crit_edge625.us:                                ; preds = %306
  %308 = add nuw nsw i32 %.0456626.us, 1
  %exitcond723.not = icmp eq i32 %308, %umax722
  br i1 %exitcond723.not, label %.split628.us, label %.preheader.us, !llvm.loop !39

.split630.us:                                     ; preds = %294
  %309 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  br label %555

.split628.us:                                     ; preds = %._crit_edge625.us, %.preheader536
  %310 = invoke i64 @libxsmm_timer_tick()
          to label %313 unwind label %339

311:                                              ; preds = %290
  %312 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  br label %555

313:                                              ; preds = %.split628.us
  %314 = call noundef i64 @_Z21libxsmm_timer_ncyclesyy(i64 noundef %293, i64 noundef %310)
  %315 = invoke double @libxsmm_timer_duration(i64 noundef 0, i64 noundef %314)
          to label %316 unwind label %341

316:                                              ; preds = %313
  %317 = uitofp nneg i32 %53 to double
  %318 = fdiv double %315, %317
  %319 = fcmp ogt double %318, 0.000000e+00
  %320 = icmp ne i64 %314, 0
  %or.cond = and i1 %320, %319
  br i1 %or.cond, label %321, label %535

321:                                              ; preds = %316
  %322 = load ptr, ptr @stdout, align 8, !tbaa !5
  %323 = call double @llvm.fmuladd.f64(double %75, double 2.000000e+00, double -1.000000e+00)
  %324 = fmul double %71, %69
  %325 = fmul double %324, %73
  %326 = fmul double %323, %325
  %327 = uitofp i64 %314 to double
  %328 = fdiv double %326, %327
  %329 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %322, ptr noundef nonnull @.str.4, double noundef %328, ptr noundef nonnull %10) #15
  %330 = load ptr, ptr @stdout, align 8, !tbaa !5
  %331 = fdiv double %76, %318
  %332 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %330, ptr noundef nonnull @.str.5, double noundef %331, ptr noundef nonnull %10) #15
  %333 = load ptr, ptr @stdout, align 8, !tbaa !5
  %334 = mul i64 %68, %279
  %335 = uitofp i64 %334 to double
  %336 = fmul double %318, 0x41D0000000000000
  %337 = fdiv double %335, %336
  %338 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %333, ptr noundef nonnull @.str.6, double noundef %337) #15
  br label %535

339:                                              ; preds = %.split628.us
  %340 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  br label %555

341:                                              ; preds = %313
  %342 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  br label %555

343:                                              ; preds = %287
  %344 = load ptr, ptr @stdout, align 8, !tbaa !5
  %345 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %344, ptr noundef nonnull @.str.8) #15
  %346 = invoke i64 @libxsmm_timer_tick()
          to label %.preheader538 unwind label %360

.preheader538:                                    ; preds = %343
  br i1 %114, label %.preheader537.us.preheader, label %.split620.us

.preheader537.us.preheader:                       ; preds = %.preheader538
  %umax717 = call i32 @llvm.umax.i32(i32 %53, i32 1)
  br label %.preheader537.us

.preheader537.us:                                 ; preds = %.preheader537.us.preheader, %._crit_edge617.us
  %.0460618.us = phi i32 [ %357, %._crit_edge617.us ], [ 0, %.preheader537.us.preheader ]
  br label %347

347:                                              ; preds = %.preheader537.us, %355
  %indvars.iv714 = phi i64 [ 0, %.preheader537.us ], [ %indvars.iv.next715, %355 ]
  %348 = trunc nuw nsw i64 %indvars.iv714 to i32
  %349 = call noundef i32 @_ZZ4mainENK4raii7shuffleEi(ptr noundef nonnull align 8 dereferenceable(40) %11, i32 noundef %348)
  %350 = sext i32 %349 to i64
  %351 = mul nsw i64 %350, %57
  %352 = getelementptr inbounds double, ptr %97, i64 %351
  %353 = mul nsw i64 %indvars.iv714, %61
  %354 = getelementptr inbounds double, ptr %113, i64 %353
  invoke void @_Z12libxsmm_gemmPKcS0_iiiPKdS2_PKiS2_S4_S2_PdS4_(ptr noundef nonnull %6, ptr noundef nonnull %7, i32 noundef %51, i32 noundef %52, i32 noundef %49, ptr noundef nonnull %8, ptr noundef %352, ptr noundef nonnull %3, ptr noundef %105, ptr noundef nonnull %4, ptr noundef nonnull %9, ptr noundef %354, ptr noundef nonnull %5)
          to label %355 unwind label %.split622.us

355:                                              ; preds = %347
  %indvars.iv.next715 = add nuw nsw i64 %indvars.iv714, 1
  %356 = icmp slt i64 %indvars.iv.next715, %279
  br i1 %356, label %347, label %._crit_edge617.us, !llvm.loop !40

._crit_edge617.us:                                ; preds = %355
  %357 = add nuw nsw i32 %.0460618.us, 1
  %exitcond718.not = icmp eq i32 %357, %umax717
  br i1 %exitcond718.not, label %.split620.us, label %.preheader537.us, !llvm.loop !41

.split622.us:                                     ; preds = %347
  %358 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  br label %555

.split620.us:                                     ; preds = %._crit_edge617.us, %.preheader538
  %359 = invoke i64 @libxsmm_timer_tick()
          to label %362 unwind label %390

360:                                              ; preds = %343
  %361 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  br label %555

362:                                              ; preds = %.split620.us
  %363 = call noundef i64 @_Z21libxsmm_timer_ncyclesyy(i64 noundef %346, i64 noundef %359)
  %364 = invoke double @libxsmm_timer_duration(i64 noundef 0, i64 noundef %363)
          to label %365 unwind label %392

365:                                              ; preds = %362
  %366 = uitofp nneg i32 %53 to double
  %367 = fdiv double %364, %366
  %368 = fcmp ogt double %367, 0.000000e+00
  %369 = icmp ne i64 %363, 0
  %or.cond3 = and i1 %369, %368
  br i1 %or.cond3, label %370, label %535

370:                                              ; preds = %365
  %371 = load ptr, ptr @stdout, align 8, !tbaa !5
  %372 = call double @llvm.fmuladd.f64(double %75, double 2.000000e+00, double -1.000000e+00)
  %373 = fmul double %71, %69
  %374 = fmul double %373, %73
  %375 = fmul double %372, %374
  %376 = uitofp i64 %363 to double
  %377 = fdiv double %375, %376
  %378 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %371, ptr noundef nonnull @.str.4, double noundef %377, ptr noundef nonnull %10) #15
  %379 = load ptr, ptr @stdout, align 8, !tbaa !5
  %380 = fdiv double %76, %367
  %381 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %379, ptr noundef nonnull @.str.5, double noundef %380, ptr noundef nonnull %10) #15
  %382 = load ptr, ptr @stdout, align 8, !tbaa !5
  %383 = shl nsw i64 %58, 3
  %384 = sub nsw i64 %68, %383
  %385 = mul i64 %384, %279
  %386 = uitofp i64 %385 to double
  %387 = fmul double %367, 0x41D0000000000000
  %388 = fdiv double %386, %387
  %389 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %382, ptr noundef nonnull @.str.6, double noundef %388) #15
  br label %535

390:                                              ; preds = %.split620.us
  %391 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  br label %555

392:                                              ; preds = %362
  %393 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  br label %555

394:                                              ; preds = %287
  %395 = load ptr, ptr @stdout, align 8, !tbaa !5
  %396 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %395, ptr noundef nonnull @.str.9) #15
  %397 = invoke i64 @libxsmm_timer_tick()
          to label %.preheader540 unwind label %411

.preheader540:                                    ; preds = %394
  br i1 %114, label %.preheader539.us.preheader, label %.split612.us

.preheader539.us.preheader:                       ; preds = %.preheader540
  %umax712 = call i32 @llvm.umax.i32(i32 %53, i32 1)
  br label %.preheader539.us

.preheader539.us:                                 ; preds = %.preheader539.us.preheader, %._crit_edge609.us
  %.0458610.us = phi i32 [ %408, %._crit_edge609.us ], [ 0, %.preheader539.us.preheader ]
  br label %398

398:                                              ; preds = %.preheader539.us, %406
  %indvars.iv709 = phi i64 [ 0, %.preheader539.us ], [ %indvars.iv.next710, %406 ]
  %399 = trunc nuw nsw i64 %indvars.iv709 to i32
  %400 = call noundef i32 @_ZZ4mainENK4raii7shuffleEi(ptr noundef nonnull align 8 dereferenceable(40) %11, i32 noundef %399)
  %401 = sext i32 %400 to i64
  %402 = mul nsw i64 %401, %58
  %403 = getelementptr inbounds double, ptr %105, i64 %402
  %404 = mul nsw i64 %indvars.iv709, %61
  %405 = getelementptr inbounds double, ptr %113, i64 %404
  invoke void @_Z12libxsmm_gemmPKcS0_iiiPKdS2_PKiS2_S4_S2_PdS4_(ptr noundef nonnull %6, ptr noundef nonnull %7, i32 noundef %51, i32 noundef %52, i32 noundef %49, ptr noundef nonnull %8, ptr noundef %97, ptr noundef nonnull %3, ptr noundef %403, ptr noundef nonnull %4, ptr noundef nonnull %9, ptr noundef %405, ptr noundef nonnull %5)
          to label %406 unwind label %.split614.us

406:                                              ; preds = %398
  %indvars.iv.next710 = add nuw nsw i64 %indvars.iv709, 1
  %407 = icmp slt i64 %indvars.iv.next710, %279
  br i1 %407, label %398, label %._crit_edge609.us, !llvm.loop !42

._crit_edge609.us:                                ; preds = %406
  %408 = add nuw nsw i32 %.0458610.us, 1
  %exitcond713.not = icmp eq i32 %408, %umax712
  br i1 %exitcond713.not, label %.split612.us, label %.preheader539.us, !llvm.loop !43

.split614.us:                                     ; preds = %398
  %409 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  br label %555

.split612.us:                                     ; preds = %._crit_edge609.us, %.preheader540
  %410 = invoke i64 @libxsmm_timer_tick()
          to label %413 unwind label %441

411:                                              ; preds = %394
  %412 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  br label %555

413:                                              ; preds = %.split612.us
  %414 = call noundef i64 @_Z21libxsmm_timer_ncyclesyy(i64 noundef %397, i64 noundef %410)
  %415 = invoke double @libxsmm_timer_duration(i64 noundef 0, i64 noundef %414)
          to label %416 unwind label %443

416:                                              ; preds = %413
  %417 = uitofp nneg i32 %53 to double
  %418 = fdiv double %415, %417
  %419 = fcmp ogt double %418, 0.000000e+00
  %420 = icmp ne i64 %414, 0
  %or.cond5 = and i1 %420, %419
  br i1 %or.cond5, label %421, label %535

421:                                              ; preds = %416
  %422 = load ptr, ptr @stdout, align 8, !tbaa !5
  %423 = call double @llvm.fmuladd.f64(double %75, double 2.000000e+00, double -1.000000e+00)
  %424 = fmul double %71, %69
  %425 = fmul double %424, %73
  %426 = fmul double %423, %425
  %427 = uitofp i64 %414 to double
  %428 = fdiv double %426, %427
  %429 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %422, ptr noundef nonnull @.str.4, double noundef %428, ptr noundef nonnull %10) #15
  %430 = load ptr, ptr @stdout, align 8, !tbaa !5
  %431 = fdiv double %76, %418
  %432 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %430, ptr noundef nonnull @.str.5, double noundef %431, ptr noundef nonnull %10) #15
  %433 = load ptr, ptr @stdout, align 8, !tbaa !5
  %434 = shl nsw i64 %57, 3
  %435 = sub nsw i64 %68, %434
  %436 = mul i64 %435, %279
  %437 = uitofp i64 %436 to double
  %438 = fmul double %418, 0x41D0000000000000
  %439 = fdiv double %437, %438
  %440 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %433, ptr noundef nonnull @.str.6, double noundef %439) #15
  br label %535

441:                                              ; preds = %.split612.us
  %442 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  br label %555

443:                                              ; preds = %413
  %444 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  br label %555

445:                                              ; preds = %287
  %446 = load ptr, ptr @stdout, align 8, !tbaa !5
  %447 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %446, ptr noundef nonnull @.str.10) #15
  %448 = invoke i64 @libxsmm_timer_tick()
          to label %.preheader542 unwind label %464

.preheader542:                                    ; preds = %445
  br i1 %114, label %.preheader541.us.preheader, label %.split604.us

.preheader541.us.preheader:                       ; preds = %.preheader542
  %umax707 = call i32 @llvm.umax.i32(i32 %53, i32 1)
  br label %.preheader541.us

.preheader541.us:                                 ; preds = %.preheader541.us.preheader, %._crit_edge601.us
  %.0450602.us = phi i32 [ %461, %._crit_edge601.us ], [ 0, %.preheader541.us.preheader ]
  br label %449

449:                                              ; preds = %.preheader541.us, %458
  %.0449599.us = phi i32 [ 0, %.preheader541.us ], [ %459, %458 ]
  %450 = call noundef i32 @_ZZ4mainENK4raii7shuffleEi(ptr noundef nonnull align 8 dereferenceable(40) %11, i32 noundef %.0449599.us)
  %451 = sext i32 %450 to i64
  %452 = mul nsw i64 %451, %57
  %453 = getelementptr inbounds double, ptr %97, i64 %452
  %454 = call noundef i32 @_ZZ4mainENK4raii7shuffleEi(ptr noundef nonnull align 8 dereferenceable(40) %11, i32 noundef %.0449599.us)
  %455 = sext i32 %454 to i64
  %456 = mul nsw i64 %455, %58
  %457 = getelementptr inbounds double, ptr %105, i64 %456
  invoke void @_Z12libxsmm_gemmPKcS0_iiiPKdS2_PKiS2_S4_S2_PdS4_(ptr noundef nonnull %6, ptr noundef nonnull %7, i32 noundef %51, i32 noundef %52, i32 noundef %49, ptr noundef nonnull %8, ptr noundef %453, ptr noundef nonnull %3, ptr noundef %457, ptr noundef nonnull %4, ptr noundef nonnull %9, ptr noundef %113, ptr noundef nonnull %5)
          to label %458 unwind label %.split606.us

458:                                              ; preds = %449
  %459 = add nuw nsw i32 %.0449599.us, 1
  %460 = icmp slt i32 %459, %.
  br i1 %460, label %449, label %._crit_edge601.us, !llvm.loop !44

._crit_edge601.us:                                ; preds = %458
  %461 = add nuw nsw i32 %.0450602.us, 1
  %exitcond708.not = icmp eq i32 %461, %umax707
  br i1 %exitcond708.not, label %.split604.us, label %.preheader541.us, !llvm.loop !45

.split606.us:                                     ; preds = %449
  %462 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  br label %555

.split604.us:                                     ; preds = %._crit_edge601.us, %.preheader542
  %463 = invoke i64 @libxsmm_timer_tick()
          to label %466 unwind label %492

464:                                              ; preds = %445
  %465 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  br label %555

466:                                              ; preds = %.split604.us
  %467 = call noundef i64 @_Z21libxsmm_timer_ncyclesyy(i64 noundef %448, i64 noundef %463)
  %468 = invoke double @libxsmm_timer_duration(i64 noundef 0, i64 noundef %467)
          to label %469 unwind label %494

469:                                              ; preds = %466
  %470 = uitofp nneg i32 %53 to double
  %471 = fdiv double %468, %470
  %472 = fcmp ogt double %471, 0.000000e+00
  %473 = icmp ne i64 %467, 0
  %or.cond7 = and i1 %473, %472
  br i1 %or.cond7, label %474, label %535

474:                                              ; preds = %469
  %475 = load ptr, ptr @stdout, align 8, !tbaa !5
  %476 = call double @llvm.fmuladd.f64(double %75, double 2.000000e+00, double -1.000000e+00)
  %477 = fmul double %71, %69
  %478 = fmul double %477, %73
  %479 = fmul double %476, %478
  %480 = uitofp i64 %467 to double
  %481 = fdiv double %479, %480
  %482 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %475, ptr noundef nonnull @.str.4, double noundef %481, ptr noundef nonnull %10) #15
  %483 = load ptr, ptr @stdout, align 8, !tbaa !5
  %484 = fdiv double %76, %471
  %485 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %483, ptr noundef nonnull @.str.5, double noundef %484, ptr noundef nonnull %10) #15
  %486 = load ptr, ptr @stdout, align 8, !tbaa !5
  %487 = mul i64 %60, %279
  %488 = uitofp i64 %487 to double
  %489 = fmul double %471, 0x41D0000000000000
  %490 = fdiv double %488, %489
  %491 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %486, ptr noundef nonnull @.str.6, double noundef %490) #15
  br label %535

492:                                              ; preds = %.split604.us
  %493 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  br label %555

494:                                              ; preds = %466
  %495 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  br label %555

496:                                              ; preds = %287
  %497 = load ptr, ptr @stdout, align 8, !tbaa !5
  %498 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %497, ptr noundef nonnull @.str.11) #15
  %499 = invoke i64 @libxsmm_timer_tick()
          to label %.preheader544 unwind label %507

.preheader544:                                    ; preds = %496
  br i1 %114, label %.preheader543.us.preheader, label %.split.us

.preheader543.us.preheader:                       ; preds = %.preheader544
  %umax = call i32 @llvm.umax.i32(i32 %53, i32 1)
  br label %.preheader543.us

.preheader543.us:                                 ; preds = %.preheader543.us.preheader, %._crit_edge595.us
  %.0438596.us = phi i32 [ %504, %._crit_edge595.us ], [ 0, %.preheader543.us.preheader ]
  br label %500

500:                                              ; preds = %.preheader543.us, %501
  %.0437593.us = phi i32 [ 0, %.preheader543.us ], [ %502, %501 ]
  invoke void @_Z12libxsmm_gemmPKcS0_iiiPKdS2_PKiS2_S4_S2_PdS4_(ptr noundef nonnull %6, ptr noundef nonnull %7, i32 noundef %51, i32 noundef %52, i32 noundef %49, ptr noundef nonnull %8, ptr noundef %97, ptr noundef nonnull %3, ptr noundef %105, ptr noundef nonnull %4, ptr noundef nonnull %9, ptr noundef %113, ptr noundef nonnull %5)
          to label %501 unwind label %.split598.us

501:                                              ; preds = %500
  %502 = add nuw nsw i32 %.0437593.us, 1
  %503 = icmp slt i32 %502, %.
  br i1 %503, label %500, label %._crit_edge595.us, !llvm.loop !46

._crit_edge595.us:                                ; preds = %501
  %504 = add nuw nsw i32 %.0438596.us, 1
  %exitcond706.not = icmp eq i32 %504, %umax
  br i1 %exitcond706.not, label %.split.us, label %.preheader543.us, !llvm.loop !47

.split598.us:                                     ; preds = %500
  %505 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  br label %555

.split.us:                                        ; preds = %._crit_edge595.us, %.preheader544
  %506 = invoke i64 @libxsmm_timer_tick()
          to label %509 unwind label %529

507:                                              ; preds = %496
  %508 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  br label %555

509:                                              ; preds = %.split.us
  %510 = call noundef i64 @_Z21libxsmm_timer_ncyclesyy(i64 noundef %499, i64 noundef %506)
  %511 = invoke double @libxsmm_timer_duration(i64 noundef 0, i64 noundef %510)
          to label %512 unwind label %531

512:                                              ; preds = %509
  %513 = uitofp nneg i32 %53 to double
  %514 = fdiv double %511, %513
  %515 = fcmp ogt double %514, 0.000000e+00
  %516 = icmp ne i64 %510, 0
  %or.cond9 = and i1 %516, %515
  br i1 %or.cond9, label %517, label %535

517:                                              ; preds = %512
  %518 = load ptr, ptr @stdout, align 8, !tbaa !5
  %519 = call double @llvm.fmuladd.f64(double %75, double 2.000000e+00, double -1.000000e+00)
  %520 = fmul double %71, %69
  %521 = fmul double %520, %73
  %522 = fmul double %519, %521
  %523 = uitofp i64 %510 to double
  %524 = fdiv double %522, %523
  %525 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %518, ptr noundef nonnull @.str.4, double noundef %524, ptr noundef nonnull %10) #15
  %526 = load ptr, ptr @stdout, align 8, !tbaa !5
  %527 = fdiv double %76, %514
  %528 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %526, ptr noundef nonnull @.str.5, double noundef %527, ptr noundef nonnull %10) #15
  br label %535

529:                                              ; preds = %.split.us
  %530 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  br label %555

531:                                              ; preds = %509
  %532 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  br label %555

533:                                              ; preds = %287
  %534 = call ptr @__cxa_allocate_exception(i64 8) #15
  store ptr @.str.12, ptr %534, align 16, !tbaa !5
  invoke void @__cxa_throw(ptr nonnull %534, ptr nonnull @_ZTIPKc, ptr null) #16
          to label %577 unwind label %288

535:                                              ; preds = %512, %517, %469, %474, %416, %421, %365, %370, %316, %321
  %.sink732 = phi double [ %318, %321 ], [ %318, %316 ], [ %367, %370 ], [ %367, %365 ], [ %418, %421 ], [ %418, %416 ], [ %471, %474 ], [ %471, %469 ], [ %514, %517 ], [ %514, %512 ]
  %536 = load ptr, ptr @stdout, align 8, !tbaa !5
  %537 = fmul double %.sink732, 1.000000e+03
  %538 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %536, ptr noundef nonnull @.str.7, double noundef %537) #15
  %.not = icmp eq i32 %83, 0
  br i1 %.not, label %551, label %539

539:                                              ; preds = %535
  call void @llvm.lifetime.start.p0(i64 192, ptr nonnull %13) #15
  %540 = invoke i32 @libxsmm_matdiff(ptr noundef nonnull %13, i32 noundef 0, i32 noundef %51, i32 noundef %52, ptr noundef %113, ptr noundef null, ptr noundef nonnull %5, ptr noundef nonnull %5)
          to label %541 unwind label %548

541:                                              ; preds = %539
  %542 = icmp eq i32 %540, 0
  br i1 %542, label %543, label %550

543:                                              ; preds = %541
  %544 = load ptr, ptr @stdout, align 8, !tbaa !5
  %545 = getelementptr inbounds i8, ptr %13, i64 80
  %546 = load double, ptr %545, align 8, !tbaa !48
  %547 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %544, ptr noundef nonnull @.str.13, double noundef %546) #15
  br label %550

548:                                              ; preds = %539
  %549 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  call void @llvm.lifetime.end.p0(i64 192, ptr nonnull %13) #15
  br label %555

550:                                              ; preds = %543, %541
  call void @llvm.lifetime.end.p0(i64 192, ptr nonnull %13) #15
  br label %551

551:                                              ; preds = %550, %535
  %.0 = phi i32 [ %540, %550 ], [ 0, %535 ]
  invoke void @libxsmm_finalize()
          to label %552 unwind label %288

552:                                              ; preds = %551
  %553 = load ptr, ptr @stdout, align 8, !tbaa !5
  %554 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %553, ptr noundef nonnull @.str.14) #15
  call void @_ZZ4mainEN4raiiD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %11) #15
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %11) #15
  call void @llvm.lifetime.end.p0(i64 6, ptr nonnull %10) #15
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %9) #15
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #15
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %7) #15
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %6) #15
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %5) #15
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %4) #15
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %3) #15
  br label %567

555:                                              ; preds = %507, %.split598.us, %531, %529, %464, %.split606.us, %494, %492, %411, %.split614.us, %443, %441, %360, %.split622.us, %392, %390, %311, %.split630.us, %341, %339, %178, %238, %548, %288
  %.pn = phi { ptr, i32 } [ %289, %288 ], [ %549, %548 ], [ %239, %238 ], [ %179, %178 ], [ %309, %.split630.us ], [ %312, %311 ], [ %342, %341 ], [ %340, %339 ], [ %358, %.split622.us ], [ %361, %360 ], [ %393, %392 ], [ %391, %390 ], [ %409, %.split614.us ], [ %412, %411 ], [ %444, %443 ], [ %442, %441 ], [ %462, %.split606.us ], [ %465, %464 ], [ %495, %494 ], [ %493, %492 ], [ %505, %.split598.us ], [ %508, %507 ], [ %532, %531 ], [ %530, %529 ]
  call void @_ZZ4mainEN4raiiD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %11) #15
  br label %556

556:                                              ; preds = %555, %120
  %.pn.pn = phi { ptr, i32 } [ %.pn, %555 ], [ %121, %120 ]
  %.12 = extractvalue { ptr, i32 } %.pn.pn, 0
  %.12435 = extractvalue { ptr, i32 } %.pn.pn, 1
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %11) #15
  call void @llvm.lifetime.end.p0(i64 6, ptr nonnull %10) #15
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %9) #15
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #15
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %7) #15
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %6) #15
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %5) #15
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %4) #15
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %3) #15
  %557 = call i32 @llvm.eh.typeid.for.p0(ptr nonnull @_ZTISt9exception) #15
  %558 = icmp eq i32 %.12435, %557
  br i1 %558, label %559, label %568

559:                                              ; preds = %556
  %560 = call ptr @__cxa_begin_catch(ptr %.12) #15
  %561 = load ptr, ptr @stderr, align 8, !tbaa !5
  %562 = load ptr, ptr %560, align 8, !tbaa !50
  %563 = getelementptr inbounds i8, ptr %562, i64 16
  %564 = load ptr, ptr %563, align 8
  %565 = call noundef ptr %564(ptr noundef nonnull align 8 dereferenceable(8) %560) #15
  %566 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %561, ptr noundef nonnull @.str.16, ptr noundef %565) #17
  call void @__cxa_end_catch()
  br label %567

567:                                              ; preds = %575, %573, %559, %552
  %.1 = phi i32 [ 1, %559 ], [ 1, %573 ], [ 1, %575 ], [ %.0, %552 ]
  ret i32 %.1

568:                                              ; preds = %556
  %569 = call i32 @llvm.eh.typeid.for.p0(ptr nonnull @_ZTIPKc) #15
  %570 = icmp eq i32 %.12435, %569
  %571 = call ptr @__cxa_begin_catch(ptr %.12) #15
  %572 = load ptr, ptr @stderr, align 8, !tbaa !5
  br i1 %570, label %573, label %575

573:                                              ; preds = %568
  %574 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %572, ptr noundef nonnull @.str.16, ptr noundef %571) #17
  call void @__cxa_end_catch() #15
  br label %567

575:                                              ; preds = %568
  %576 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %572, ptr noundef nonnull @.str.15) #17
  call void @__cxa_end_catch()
  br label %567

577:                                              ; preds = %533
  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(40), 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(40), 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

declare i64 @libxsmm_timer_tick() local_unnamed_addr #8

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_Z12libxsmm_gemmPKcS0_iiiPKdS2_PKiS2_S4_S2_PdS4_(ptr noundef, ptr noundef, i32 noundef, i32 noundef, i32 noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #10

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

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

declare ptr @__cxa_allocate_exception(i64) local_unnamed_addr

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

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_finalize() local_unnamed_addr #8

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

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

declare ptr @__cxa_begin_catch(ptr) local_unnamed_addr

declare void @__cxa_end_catch() local_unnamed_addr

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

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

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

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 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 = { inlinehint mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #12 = { nofree nosync nounwind memory(none) }
attributes #13 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #14 = { nounwind willreturn memory(read) }
attributes #15 = { nounwind }
attributes #16 = { noreturn }
attributes #17 = { cold nounwind }

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

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


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