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

; 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 }
%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 i64, align 8
  %82 = alloca i32, align 4
  %83 = alloca i32, align 4
  %84 = alloca i32, align 4
  %85 = alloca i8, align 1
  %86 = alloca i8, align 1
  %87 = alloca i32, align 4
  %88 = alloca i32, align 4
  %89 = alloca i32, align 4
  %90 = alloca i32, align 4
  %91 = alloca i32, align 4
  %92 = alloca i32, align 4
  %93 = alloca double, align 8
  %94 = alloca double, align 8
  %95 = alloca i32, align 4
  %96 = alloca i32, align 4
  %97 = alloca i32, align 4
  %98 = alloca i64, align 8
  %99 = alloca double, align 8
  %100 = alloca i64, align 8
  %101 = alloca i32, align 4
  %102 = alloca i32, align 4
  %103 = alloca i8, align 1
  %104 = alloca i8, align 1
  %105 = alloca i32, align 4
  %106 = alloca i32, align 4
  %107 = alloca i32, align 4
  %108 = alloca i32, align 4
  %109 = alloca i32, align 4
  %110 = alloca i32, align 4
  %111 = alloca double, align 8
  %112 = alloca double, align 8
  %113 = alloca i32, align 4
  %114 = alloca i32, align 4
  %115 = alloca i32, align 4
  %116 = alloca i64, align 8
  %117 = alloca double, align 8
  %118 = alloca i64, align 8
  %119 = alloca i32, align 4
  %120 = alloca i32, align 4
  %121 = alloca i8, align 1
  %122 = alloca i8, align 1
  %123 = alloca i32, align 4
  %124 = alloca i32, align 4
  %125 = alloca i32, align 4
  %126 = alloca i32, align 4
  %127 = alloca i32, align 4
  %128 = alloca i32, align 4
  %129 = alloca double, align 8
  %130 = alloca double, align 8
  %131 = alloca i32, align 4
  %132 = alloca i32, align 4
  %133 = alloca i32, align 4
  %134 = alloca i64, align 8
  %135 = alloca double, align 8
  %136 = alloca i64, align 8
  %137 = alloca i32, align 4
  %138 = alloca i32, align 4
  %139 = alloca i32, align 4
  %140 = alloca i8, align 1
  %141 = alloca i8, align 1
  %142 = alloca i32, align 4
  %143 = alloca i32, align 4
  %144 = alloca i32, align 4
  %145 = alloca i32, align 4
  %146 = alloca i32, align 4
  %147 = alloca i32, align 4
  %148 = alloca double, align 8
  %149 = alloca double, align 8
  %150 = alloca i32, align 4
  %151 = alloca i32, align 4
  %152 = alloca i32, align 4
  %153 = alloca i64, align 8
  %154 = alloca double, align 8
  %155 = alloca i64, align 8
  %156 = alloca i32, align 4
  %157 = alloca i32, align 4
  %158 = alloca i32, align 4
  %159 = alloca i8, align 1
  %160 = alloca i8, align 1
  %161 = alloca i32, align 4
  %162 = alloca i32, align 4
  %163 = alloca i32, align 4
  %164 = alloca i32, align 4
  %165 = alloca i32, align 4
  %166 = alloca i32, align 4
  %167 = alloca double, align 8
  %168 = alloca double, align 8
  %169 = alloca i32, align 4
  %170 = alloca i32, align 4
  %171 = alloca i32, align 4
  %172 = alloca i64, align 8
  %173 = alloca double, align 8
  %174 = alloca %struct.libxsmm_matdiff_info, align 8
  %175 = alloca ptr, align 8
  %176 = alloca ptr, align 8
  store i32 0, ptr %3, align 4
  store i32 %0, ptr %4, align 4, !tbaa !5
  store ptr %1, ptr %5, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #11
  store i32 0, ptr %6, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #11
  %177 = load i32, ptr %4, align 4, !tbaa !5
  %178 = icmp slt i32 1, %177
  br i1 %178, label %179, label %184

179:                                              ; preds = %2
  %180 = load ptr, ptr %5, align 8, !tbaa !9
  %181 = getelementptr inbounds ptr, ptr %180, i64 1
  %182 = load ptr, ptr %181, align 8, !tbaa !9
  %183 = call i32 @atoi(ptr noundef %182) #12
  br label %185

184:                                              ; preds = %2
  br label %185

185:                                              ; preds = %184, %179
  %186 = phi i32 [ %183, %179 ], [ 0, %184 ]
  store i32 %186, ptr %7, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #11
  %187 = load i32, ptr %4, align 4, !tbaa !5
  %188 = icmp slt i32 2, %187
  br i1 %188, label %189, label %194

189:                                              ; preds = %185
  %190 = load ptr, ptr %5, align 8, !tbaa !9
  %191 = getelementptr inbounds ptr, ptr %190, i64 2
  %192 = load ptr, ptr %191, align 8, !tbaa !9
  %193 = call i32 @atoi(ptr noundef %192) #12
  br label %195

194:                                              ; preds = %185
  br label %195

195:                                              ; preds = %194, %189
  %196 = phi i32 [ %193, %189 ], [ 23, %194 ]
  store i32 %196, ptr %8, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #11
  %197 = load i32, ptr %4, align 4, !tbaa !5
  %198 = icmp slt i32 4, %197
  br i1 %198, label %199, label %204

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

204:                                              ; preds = %195
  %205 = load i32, ptr %8, align 4, !tbaa !5
  br label %206

206:                                              ; preds = %204, %199
  %207 = phi i32 [ %203, %199 ], [ %205, %204 ]
  store i32 %207, ptr %9, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #11
  %208 = load i32, ptr %4, align 4, !tbaa !5
  %209 = icmp slt i32 3, %208
  br i1 %209, label %210, label %215

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

215:                                              ; preds = %206
  %216 = load i32, ptr %9, align 4, !tbaa !5
  br label %217

217:                                              ; preds = %215, %210
  %218 = phi i32 [ %214, %210 ], [ %216, %215 ]
  store i32 %218, ptr %10, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #11
  %219 = load i32, ptr %4, align 4, !tbaa !5
  %220 = icmp slt i32 5, %219
  br i1 %220, label %221, label %226

221:                                              ; preds = %217
  %222 = load ptr, ptr %5, align 8, !tbaa !9
  %223 = getelementptr inbounds ptr, ptr %222, i64 5
  %224 = load ptr, ptr %223, align 8, !tbaa !9
  %225 = call i32 @atoi(ptr noundef %224) #12
  br label %227

226:                                              ; preds = %217
  br label %227

227:                                              ; preds = %226, %221
  %228 = phi i32 [ %225, %221 ], [ 0, %226 ]
  store i32 %228, ptr %11, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #11
  %229 = load i32, ptr %4, align 4, !tbaa !5
  %230 = icmp slt i32 6, %229
  br i1 %230, label %231, label %242

231:                                              ; preds = %227
  %232 = load ptr, ptr %5, align 8, !tbaa !9
  %233 = getelementptr inbounds ptr, ptr %232, i64 6
  %234 = load ptr, ptr %233, align 8, !tbaa !9
  %235 = call i32 @atoi(ptr noundef %234) #12
  %236 = icmp slt i32 0, %235
  br i1 %236, label %237, label %242

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

242:                                              ; preds = %231, %227
  %243 = load i32, ptr %11, align 4, !tbaa !5
  %244 = icmp sge i32 0, %243
  %245 = zext i1 %244 to i64
  %246 = select i1 %244, i32 13, i32 1
  br label %247

247:                                              ; preds = %242, %237
  %248 = phi i32 [ %241, %237 ], [ %246, %242 ]
  store i32 %248, ptr %12, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #11
  %249 = load i32, ptr %8, align 4, !tbaa !5
  store i32 %249, ptr %13, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #11
  %250 = load i32, ptr %9, align 4, !tbaa !5
  store i32 %250, ptr %14, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #11
  %251 = load i32, ptr %8, align 4, !tbaa !5
  store i32 %251, ptr %15, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr %16) #11
  store i8 78, ptr %16, align 1, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 1, ptr %17) #11
  store i8 78, ptr %17, align 1, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #11
  store double 1.000000e+00, ptr %18, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #11
  store double 1.000000e+00, ptr %19, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #11
  %252 = load i32, ptr %13, align 4, !tbaa !5
  %253 = load i32, ptr %9, align 4, !tbaa !5
  %254 = mul nsw i32 %252, %253
  store i32 %254, ptr %20, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #11
  %255 = load i32, ptr %14, align 4, !tbaa !5
  %256 = load i32, ptr %10, align 4, !tbaa !5
  %257 = mul nsw i32 %255, %256
  store i32 %257, ptr %21, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #11
  %258 = load i32, ptr %15, align 4, !tbaa !5
  %259 = load i32, ptr %10, align 4, !tbaa !5
  %260 = mul nsw i32 %258, %259
  store i32 %260, ptr %22, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #11
  %261 = load i32, ptr %20, align 4, !tbaa !5
  %262 = sext i32 %261 to i64
  %263 = load i32, ptr %21, align 4, !tbaa !5
  %264 = sext i32 %263 to i64
  %265 = add i64 %262, %264
  %266 = mul i64 %265, 8
  %267 = load i32, ptr %22, align 4, !tbaa !5
  %268 = sext i32 %267 to i64
  %269 = mul i64 %268, 8
  %270 = add i64 %266, %269
  %271 = udiv i64 2147483648, %270
  %272 = trunc i64 %271 to i32
  store i32 %272, ptr %23, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #11
  %273 = load i32, ptr %11, align 4, !tbaa !5
  %274 = icmp slt i32 0, %273
  br i1 %274, label %275, label %277

275:                                              ; preds = %247
  %276 = load i32, ptr %11, align 4, !tbaa !5
  br label %279

277:                                              ; preds = %247
  %278 = load i32, ptr %23, align 4, !tbaa !5
  br label %279

279:                                              ; preds = %277, %275
  %280 = phi i32 [ %276, %275 ], [ %278, %277 ]
  %281 = load i32, ptr %23, align 4, !tbaa !5
  %282 = icmp slt i32 %280, %281
  br i1 %282, label %283, label %292

283:                                              ; preds = %279
  %284 = load i32, ptr %11, align 4, !tbaa !5
  %285 = icmp slt i32 0, %284
  br i1 %285, label %286, label %288

286:                                              ; preds = %283
  %287 = load i32, ptr %11, align 4, !tbaa !5
  br label %290

288:                                              ; preds = %283
  %289 = load i32, ptr %23, align 4, !tbaa !5
  br label %290

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

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

294:                                              ; preds = %292, %290
  %295 = phi i32 [ %291, %290 ], [ %293, %292 ]
  store i32 %295, ptr %24, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #11
  store i32 8, ptr %25, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #11
  %296 = load i32, ptr %20, align 4, !tbaa !5
  %297 = sext i32 %296 to i64
  %298 = load i32, ptr %21, align 4, !tbaa !5
  %299 = sext i32 %298 to i64
  %300 = add i64 %297, %299
  %301 = mul i64 %300, 8
  %302 = load i32, ptr %22, align 4, !tbaa !5
  %303 = sext i32 %302 to i64
  %304 = mul i64 8, %303
  %305 = mul i64 %304, 2
  %306 = add i64 %301, %305
  store i64 %306, ptr %26, align 8, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #11
  %307 = load i32, ptr %24, align 4, !tbaa !5
  %308 = sitofp i32 %307 to double
  %309 = fmul double 2.000000e-09, %308
  %310 = load i32, ptr %8, align 4, !tbaa !5
  %311 = sitofp i32 %310 to double
  %312 = fmul double %309, %311
  %313 = load i32, ptr %10, align 4, !tbaa !5
  %314 = sitofp i32 %313 to double
  %315 = fmul double %312, %314
  %316 = load i32, ptr %9, align 4, !tbaa !5
  %317 = sitofp i32 %316 to double
  %318 = fmul double %315, %317
  store double %318, ptr %27, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 6, ptr %28) #11
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %28, ptr align 1 @__const.main.ops, i64 6, i1 false)
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #11
  %319 = load i32, ptr %24, align 4, !tbaa !5
  %320 = sitofp i32 %319 to double
  %321 = fdiv double 1.000000e+00, %320
  store double %321, ptr %29, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #11
  %322 = call ptr @getenv(ptr noundef @.str) #11
  store ptr %322, ptr %30, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #11
  %323 = load ptr, ptr %30, align 8, !tbaa !9
  %324 = icmp eq ptr null, %323
  br i1 %324, label %325, label %326

325:                                              ; preds = %294
  br label %329

326:                                              ; preds = %294
  %327 = load ptr, ptr %30, align 8, !tbaa !9
  %328 = call i32 @atoi(ptr noundef %327) #12
  br label %329

329:                                              ; preds = %326, %325
  %330 = phi i32 [ 0, %325 ], [ %328, %326 ]
  store i32 %330, ptr %31, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 40, ptr %32) #11
  %331 = load i32, ptr %24, align 4, !tbaa !5
  %332 = load i32, ptr %20, align 4, !tbaa !5
  %333 = mul nsw i32 %331, %332
  %334 = add nsw i32 %333, 8
  %335 = sub nsw i32 %334, 1
  %336 = load i32, ptr %24, align 4, !tbaa !5
  %337 = load i32, ptr %21, align 4, !tbaa !5
  %338 = mul nsw i32 %336, %337
  %339 = add nsw i32 %338, 8
  %340 = sub nsw i32 %339, 1
  %341 = load i32, ptr %24, align 4, !tbaa !5
  %342 = load i32, ptr %22, align 4, !tbaa !5
  %343 = mul nsw i32 %341, %342
  %344 = add nsw i32 %343, 8
  %345 = sub nsw i32 %344, 1
  %346 = load i32, ptr %24, align 4, !tbaa !5
  invoke void @_ZZ4mainEN4raiiC2Eiiii(ptr noundef nonnull align 8 dereferenceable(40) %32, i32 noundef %335, i32 noundef %340, i32 noundef %345, i32 noundef %346)
          to label %347 unwind label %392

347:                                              ; preds = %329
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #11
  %348 = getelementptr inbounds %struct.raii, ptr %32, i32 0, i32 0
  %349 = load ptr, ptr %348, align 8, !tbaa !16
  %350 = getelementptr inbounds %struct.raii, ptr %32, i32 0, i32 0
  %351 = load ptr, ptr %350, align 8, !tbaa !16
  %352 = ptrtoint ptr %351 to i64
  %353 = add i64 %352, 63
  %354 = and i64 %353, -64
  %355 = getelementptr inbounds %struct.raii, ptr %32, i32 0, i32 0
  %356 = load ptr, ptr %355, align 8, !tbaa !16
  %357 = ptrtoint ptr %356 to i64
  %358 = sub i64 %354, %357
  %359 = udiv i64 %358, 8
  %360 = getelementptr inbounds double, ptr %349, i64 %359
  store ptr %360, ptr %35, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #11
  %361 = getelementptr inbounds %struct.raii, ptr %32, i32 0, i32 1
  %362 = load ptr, ptr %361, align 8, !tbaa !18
  %363 = getelementptr inbounds %struct.raii, ptr %32, i32 0, i32 1
  %364 = load ptr, ptr %363, align 8, !tbaa !18
  %365 = ptrtoint ptr %364 to i64
  %366 = add i64 %365, 63
  %367 = and i64 %366, -64
  %368 = getelementptr inbounds %struct.raii, ptr %32, i32 0, i32 1
  %369 = load ptr, ptr %368, align 8, !tbaa !18
  %370 = ptrtoint ptr %369 to i64
  %371 = sub i64 %367, %370
  %372 = udiv i64 %371, 8
  %373 = getelementptr inbounds double, ptr %362, i64 %372
  store ptr %373, ptr %36, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #11
  %374 = getelementptr inbounds %struct.raii, ptr %32, i32 0, i32 2
  %375 = load ptr, ptr %374, align 8, !tbaa !19
  %376 = getelementptr inbounds %struct.raii, ptr %32, i32 0, i32 2
  %377 = load ptr, ptr %376, align 8, !tbaa !19
  %378 = ptrtoint ptr %377 to i64
  %379 = add i64 %378, 63
  %380 = and i64 %379, -64
  %381 = getelementptr inbounds %struct.raii, ptr %32, i32 0, i32 2
  %382 = load ptr, ptr %381, align 8, !tbaa !19
  %383 = ptrtoint ptr %382 to i64
  %384 = sub i64 %380, %383
  %385 = udiv i64 %384, 8
  %386 = getelementptr inbounds double, ptr %375, i64 %385
  store ptr %386, ptr %37, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %38) #11
  store i32 0, ptr %38, align 4, !tbaa !5
  br label %387

387:                                              ; preds = %898, %347
  %388 = load i32, ptr %38, align 4, !tbaa !5
  %389 = load i32, ptr %24, align 4, !tbaa !5
  %390 = icmp slt i32 %388, %389
  br i1 %390, label %396, label %391

391:                                              ; preds = %387
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #11
  br label %902

392:                                              ; preds = %329
  %393 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %394 = extractvalue { ptr, i32 } %393, 0
  store ptr %394, ptr %33, align 8
  %395 = extractvalue { ptr, i32 } %393, 1
  store i32 %395, ptr %34, align 4
  br label %1925

396:                                              ; preds = %387
  br label %397

397:                                              ; preds = %396
  call void @llvm.lifetime.start.p0(i64 8, ptr %39) #11
  %398 = load i32, ptr %38, align 4, !tbaa !5
  %399 = invoke noundef i32 @_ZZ4mainENK4raii7shuffleEi(ptr noundef nonnull align 8 dereferenceable(40) %32, i32 noundef %398)
          to label %400 unwind label %453

400:                                              ; preds = %397
  %401 = add nsw i32 42, %399
  %402 = sitofp i32 %401 to double
  store double %402, ptr %39, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 8, ptr %40) #11
  %403 = load double, ptr %39, align 8, !tbaa !12
  %404 = load double, ptr %29, align 8, !tbaa !12
  %405 = load double, ptr %29, align 8, !tbaa !12
  %406 = call double @llvm.fmuladd.f64(double %403, double %404, double %405)
  store double %406, ptr %40, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 4, ptr %41) #11
  %407 = load i32, ptr %8, align 4, !tbaa !5
  store i32 %407, ptr %41, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %42) #11
  %408 = load i32, ptr %9, align 4, !tbaa !5
  store i32 %408, ptr %42, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %43) #11
  %409 = load i32, ptr %13, align 4, !tbaa !5
  store i32 %409, ptr %43, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %44) #11
  store i32 0, ptr %44, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %45) #11
  store i32 0, ptr %45, align 4, !tbaa !5
  %410 = load double, ptr %39, align 8, !tbaa !12
  %411 = fcmp une double 0.000000e+00, %410
  br i1 %411, label %412, label %497

412:                                              ; preds = %400
  store i32 0, ptr %44, align 4, !tbaa !5
  br label %413

413:                                              ; preds = %493, %412
  %414 = load i32, ptr %44, align 4, !tbaa !5
  %415 = load i32, ptr %42, align 4, !tbaa !5
  %416 = icmp slt i32 %414, %415
  br i1 %416, label %417, label %496

417:                                              ; preds = %413
  store i32 0, ptr %45, align 4, !tbaa !5
  br label %418

418:                                              ; preds = %450, %417
  %419 = load i32, ptr %45, align 4, !tbaa !5
  %420 = load i32, ptr %41, align 4, !tbaa !5
  %421 = icmp slt i32 %419, %420
  br i1 %421, label %422, label %461

422:                                              ; preds = %418
  call void @llvm.lifetime.start.p0(i64 4, ptr %46) #11
  %423 = load i32, ptr %44, align 4, !tbaa !5
  %424 = load i32, ptr %43, align 4, !tbaa !5
  %425 = mul nsw i32 %423, %424
  %426 = load i32, ptr %45, align 4, !tbaa !5
  %427 = add nsw i32 %425, %426
  store i32 %427, ptr %46, align 4, !tbaa !5
  %428 = load double, ptr %40, align 8, !tbaa !12
  %429 = load i32, ptr %44, align 4, !tbaa !5
  %430 = sitofp i32 %429 to double
  %431 = load i32, ptr %41, align 4, !tbaa !5
  %432 = sitofp i32 %431 to double
  %433 = call double @llvm.fmuladd.f64(double %430, double %432, double 1.000000e+00)
  %434 = load i32, ptr %45, align 4, !tbaa !5
  %435 = sitofp i32 %434 to double
  %436 = fadd double %433, %435
  %437 = fmul double %428, %436
  %438 = load ptr, ptr %35, align 8, !tbaa !9
  %439 = load i32, ptr %20, align 4, !tbaa !5
  %440 = sext i32 %439 to i64
  %441 = load i32, ptr %38, align 4, !tbaa !5
  %442 = invoke noundef i32 @_ZZ4mainENK4raii7shuffleEi(ptr noundef nonnull align 8 dereferenceable(40) %32, i32 noundef %441)
          to label %443 unwind label %457

443:                                              ; preds = %422
  %444 = sext i32 %442 to i64
  %445 = mul i64 %440, %444
  %446 = getelementptr inbounds double, ptr %438, i64 %445
  %447 = load i32, ptr %46, align 4, !tbaa !5
  %448 = sext i32 %447 to i64
  %449 = getelementptr inbounds double, ptr %446, i64 %448
  store double %437, ptr %449, align 8, !tbaa !12
  call void @llvm.lifetime.end.p0(i64 4, ptr %46) #11
  br label %450

450:                                              ; preds = %443
  %451 = load i32, ptr %45, align 4, !tbaa !5
  %452 = add nsw i32 %451, 1
  store i32 %452, ptr %45, align 4, !tbaa !5
  br label %418, !llvm.loop !20

453:                                              ; preds = %397
  %454 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %455 = extractvalue { ptr, i32 } %454, 0
  store ptr %455, ptr %33, align 8
  %456 = extractvalue { ptr, i32 } %454, 1
  store i32 %456, ptr %34, align 4
  br label %628

457:                                              ; preds = %422
  %458 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %459 = extractvalue { ptr, i32 } %458, 0
  store ptr %459, ptr %33, align 8
  %460 = extractvalue { ptr, i32 } %458, 1
  store i32 %460, ptr %34, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %46) #11
  br label %627

461:                                              ; preds = %418
  br label %462

462:                                              ; preds = %485, %461
  %463 = load i32, ptr %45, align 4, !tbaa !5
  %464 = load i32, ptr %43, align 4, !tbaa !5
  %465 = icmp slt i32 %463, %464
  br i1 %465, label %466, label %492

466:                                              ; preds = %462
  call void @llvm.lifetime.start.p0(i64 4, ptr %47) #11
  %467 = load i32, ptr %44, align 4, !tbaa !5
  %468 = load i32, ptr %43, align 4, !tbaa !5
  %469 = mul nsw i32 %467, %468
  %470 = load i32, ptr %45, align 4, !tbaa !5
  %471 = add nsw i32 %469, %470
  store i32 %471, ptr %47, align 4, !tbaa !5
  %472 = load double, ptr %39, align 8, !tbaa !12
  %473 = load ptr, ptr %35, align 8, !tbaa !9
  %474 = load i32, ptr %20, align 4, !tbaa !5
  %475 = sext i32 %474 to i64
  %476 = load i32, ptr %38, align 4, !tbaa !5
  %477 = invoke noundef i32 @_ZZ4mainENK4raii7shuffleEi(ptr noundef nonnull align 8 dereferenceable(40) %32, i32 noundef %476)
          to label %478 unwind label %488

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

485:                                              ; preds = %478
  %486 = load i32, ptr %45, align 4, !tbaa !5
  %487 = add nsw i32 %486, 1
  store i32 %487, ptr %45, align 4, !tbaa !5
  br label %462, !llvm.loop !22

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

492:                                              ; preds = %462
  br label %493

493:                                              ; preds = %492
  %494 = load i32, ptr %44, align 4, !tbaa !5
  %495 = add nsw i32 %494, 1
  store i32 %495, ptr %44, align 4, !tbaa !5
  br label %413, !llvm.loop !23

496:                                              ; preds = %413
  br label %568

497:                                              ; preds = %400
  call void @llvm.lifetime.start.p0(i64 4, ptr %48) #11
  %498 = load i32, ptr %42, align 4, !tbaa !5
  %499 = load i32, ptr %43, align 4, !tbaa !5
  %500 = mul nsw i32 %498, %499
  store i32 %500, ptr %48, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %49) #11
  %501 = load i32, ptr %48, align 4, !tbaa !5
  %502 = add nsw i32 %501, 1
  %503 = sdiv i32 %502, 2
  %504 = sitofp i32 %503 to double
  store double %504, ptr %49, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 8, ptr %50) #11
  %505 = load double, ptr %29, align 8, !tbaa !12
  %506 = load double, ptr %49, align 8, !tbaa !12
  %507 = fdiv double %505, %506
  store double %507, ptr %50, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 8, ptr %51) #11
  %508 = load i32, ptr %48, align 4, !tbaa !5
  %509 = sext i32 %508 to i64
  %510 = invoke i64 @libxsmm_coprime2(i64 noundef %509)
          to label %511 unwind label %554

511:                                              ; preds = %497
  store i64 %510, ptr %51, align 8, !tbaa !14
  store i32 0, ptr %44, align 4, !tbaa !5
  br label %512

512:                                              ; preds = %563, %511
  %513 = load i32, ptr %44, align 4, !tbaa !5
  %514 = load i32, ptr %42, align 4, !tbaa !5
  %515 = icmp slt i32 %513, %514
  br i1 %515, label %516, label %566

516:                                              ; preds = %512
  store i32 0, ptr %45, align 4, !tbaa !5
  br label %517

517:                                              ; preds = %551, %516
  %518 = load i32, ptr %45, align 4, !tbaa !5
  %519 = load i32, ptr %43, align 4, !tbaa !5
  %520 = icmp slt i32 %518, %519
  br i1 %520, label %521, label %562

521:                                              ; preds = %517
  call void @llvm.lifetime.start.p0(i64 4, ptr %52) #11
  %522 = load i32, ptr %44, align 4, !tbaa !5
  %523 = load i32, ptr %43, align 4, !tbaa !5
  %524 = mul nsw i32 %522, %523
  %525 = load i32, ptr %45, align 4, !tbaa !5
  %526 = add nsw i32 %524, %525
  store i32 %526, ptr %52, align 4, !tbaa !5
  %527 = load double, ptr %50, align 8, !tbaa !12
  %528 = load i64, ptr %51, align 8, !tbaa !14
  %529 = load i32, ptr %52, align 4, !tbaa !5
  %530 = sext i32 %529 to i64
  %531 = mul i64 %528, %530
  %532 = load i32, ptr %48, align 4, !tbaa !5
  %533 = sext i32 %532 to i64
  %534 = urem i64 %531, %533
  %535 = uitofp i64 %534 to double
  %536 = load double, ptr %49, align 8, !tbaa !12
  %537 = fsub double %535, %536
  %538 = fmul double %527, %537
  %539 = load ptr, ptr %35, align 8, !tbaa !9
  %540 = load i32, ptr %20, align 4, !tbaa !5
  %541 = sext i32 %540 to i64
  %542 = load i32, ptr %38, align 4, !tbaa !5
  %543 = invoke noundef i32 @_ZZ4mainENK4raii7shuffleEi(ptr noundef nonnull align 8 dereferenceable(40) %32, i32 noundef %542)
          to label %544 unwind label %558

544:                                              ; preds = %521
  %545 = sext i32 %543 to i64
  %546 = mul i64 %541, %545
  %547 = getelementptr inbounds double, ptr %539, i64 %546
  %548 = load i32, ptr %52, align 4, !tbaa !5
  %549 = sext i32 %548 to i64
  %550 = getelementptr inbounds double, ptr %547, i64 %549
  store double %538, ptr %550, align 8, !tbaa !12
  call void @llvm.lifetime.end.p0(i64 4, ptr %52) #11
  br label %551

551:                                              ; preds = %544
  %552 = load i32, ptr %45, align 4, !tbaa !5
  %553 = add nsw i32 %552, 1
  store i32 %553, ptr %45, align 4, !tbaa !5
  br label %517, !llvm.loop !24

554:                                              ; preds = %497
  %555 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %556 = extractvalue { ptr, i32 } %555, 0
  store ptr %556, ptr %33, align 8
  %557 = extractvalue { ptr, i32 } %555, 1
  store i32 %557, ptr %34, align 4
  br label %567

558:                                              ; preds = %521
  %559 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %560 = extractvalue { ptr, i32 } %559, 0
  store ptr %560, ptr %33, align 8
  %561 = extractvalue { ptr, i32 } %559, 1
  store i32 %561, ptr %34, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %52) #11
  br label %567

562:                                              ; preds = %517
  br label %563

563:                                              ; preds = %562
  %564 = load i32, ptr %44, align 4, !tbaa !5
  %565 = add nsw i32 %564, 1
  store i32 %565, ptr %44, align 4, !tbaa !5
  br label %512, !llvm.loop !25

566:                                              ; preds = %512
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %48) #11
  br label %568

567:                                              ; preds = %558, %554
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %48) #11
  br label %627

568:                                              ; preds = %566, %496
  call void @llvm.lifetime.end.p0(i64 4, ptr %45) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #11
  br label %569

569:                                              ; preds = %568
  br label %570

570:                                              ; preds = %569
  br label %571

571:                                              ; preds = %570
  call void @llvm.lifetime.start.p0(i64 8, ptr %53) #11
  %572 = load i32, ptr %38, align 4, !tbaa !5
  %573 = invoke noundef i32 @_ZZ4mainENK4raii7shuffleEi(ptr noundef nonnull align 8 dereferenceable(40) %32, i32 noundef %572)
          to label %574 unwind label %629

574:                                              ; preds = %571
  %575 = add nsw i32 24, %573
  %576 = sitofp i32 %575 to double
  store double %576, ptr %53, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 8, ptr %54) #11
  %577 = load double, ptr %53, align 8, !tbaa !12
  %578 = load double, ptr %29, align 8, !tbaa !12
  %579 = load double, ptr %29, align 8, !tbaa !12
  %580 = call double @llvm.fmuladd.f64(double %577, double %578, double %579)
  store double %580, ptr %54, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 4, ptr %55) #11
  %581 = load i32, ptr %9, align 4, !tbaa !5
  store i32 %581, ptr %55, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %56) #11
  %582 = load i32, ptr %10, align 4, !tbaa !5
  store i32 %582, ptr %56, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %57) #11
  %583 = load i32, ptr %14, align 4, !tbaa !5
  store i32 %583, ptr %57, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %58) #11
  store i32 0, ptr %58, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %59) #11
  store i32 0, ptr %59, align 4, !tbaa !5
  %584 = load double, ptr %53, align 8, !tbaa !12
  %585 = fcmp une double 0.000000e+00, %584
  br i1 %585, label %586, label %673

586:                                              ; preds = %574
  store i32 0, ptr %58, align 4, !tbaa !5
  br label %587

587:                                              ; preds = %669, %586
  %588 = load i32, ptr %58, align 4, !tbaa !5
  %589 = load i32, ptr %56, align 4, !tbaa !5
  %590 = icmp slt i32 %588, %589
  br i1 %590, label %591, label %672

591:                                              ; preds = %587
  store i32 0, ptr %59, align 4, !tbaa !5
  br label %592

592:                                              ; preds = %624, %591
  %593 = load i32, ptr %59, align 4, !tbaa !5
  %594 = load i32, ptr %55, align 4, !tbaa !5
  %595 = icmp slt i32 %593, %594
  br i1 %595, label %596, label %637

596:                                              ; preds = %592
  call void @llvm.lifetime.start.p0(i64 4, ptr %60) #11
  %597 = load i32, ptr %58, align 4, !tbaa !5
  %598 = load i32, ptr %57, align 4, !tbaa !5
  %599 = mul nsw i32 %597, %598
  %600 = load i32, ptr %59, align 4, !tbaa !5
  %601 = add nsw i32 %599, %600
  store i32 %601, ptr %60, align 4, !tbaa !5
  %602 = load double, ptr %54, align 8, !tbaa !12
  %603 = load i32, ptr %58, align 4, !tbaa !5
  %604 = sitofp i32 %603 to double
  %605 = load i32, ptr %55, align 4, !tbaa !5
  %606 = sitofp i32 %605 to double
  %607 = call double @llvm.fmuladd.f64(double %604, double %606, double 1.000000e+00)
  %608 = load i32, ptr %59, align 4, !tbaa !5
  %609 = sitofp i32 %608 to double
  %610 = fadd double %607, %609
  %611 = fmul double %602, %610
  %612 = load ptr, ptr %36, align 8, !tbaa !9
  %613 = load i32, ptr %21, align 4, !tbaa !5
  %614 = sext i32 %613 to i64
  %615 = load i32, ptr %38, align 4, !tbaa !5
  %616 = invoke noundef i32 @_ZZ4mainENK4raii7shuffleEi(ptr noundef nonnull align 8 dereferenceable(40) %32, i32 noundef %615)
          to label %617 unwind label %633

617:                                              ; preds = %596
  %618 = sext i32 %616 to i64
  %619 = mul i64 %614, %618
  %620 = getelementptr inbounds double, ptr %612, i64 %619
  %621 = load i32, ptr %60, align 4, !tbaa !5
  %622 = sext i32 %621 to i64
  %623 = getelementptr inbounds double, ptr %620, i64 %622
  store double %611, ptr %623, align 8, !tbaa !12
  call void @llvm.lifetime.end.p0(i64 4, ptr %60) #11
  br label %624

624:                                              ; preds = %617
  %625 = load i32, ptr %59, align 4, !tbaa !5
  %626 = add nsw i32 %625, 1
  store i32 %626, ptr %59, align 4, !tbaa !5
  br label %592, !llvm.loop !26

627:                                              ; preds = %567, %488, %457
  call void @llvm.lifetime.end.p0(i64 4, ptr %45) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #11
  br label %628

628:                                              ; preds = %627, %453
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #11
  br label %901

629:                                              ; preds = %571
  %630 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %631 = extractvalue { ptr, i32 } %630, 0
  store ptr %631, ptr %33, align 8
  %632 = extractvalue { ptr, i32 } %630, 1
  store i32 %632, ptr %34, align 4
  br label %800

633:                                              ; preds = %596
  %634 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %635 = extractvalue { ptr, i32 } %634, 0
  store ptr %635, ptr %33, align 8
  %636 = extractvalue { ptr, i32 } %634, 1
  store i32 %636, ptr %34, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %60) #11
  br label %799

637:                                              ; preds = %592
  br label %638

638:                                              ; preds = %661, %637
  %639 = load i32, ptr %59, align 4, !tbaa !5
  %640 = load i32, ptr %57, align 4, !tbaa !5
  %641 = icmp slt i32 %639, %640
  br i1 %641, label %642, label %668

642:                                              ; preds = %638
  call void @llvm.lifetime.start.p0(i64 4, ptr %61) #11
  %643 = load i32, ptr %58, align 4, !tbaa !5
  %644 = load i32, ptr %57, align 4, !tbaa !5
  %645 = mul nsw i32 %643, %644
  %646 = load i32, ptr %59, align 4, !tbaa !5
  %647 = add nsw i32 %645, %646
  store i32 %647, ptr %61, align 4, !tbaa !5
  %648 = load double, ptr %53, align 8, !tbaa !12
  %649 = load ptr, ptr %36, align 8, !tbaa !9
  %650 = load i32, ptr %21, align 4, !tbaa !5
  %651 = sext i32 %650 to i64
  %652 = load i32, ptr %38, align 4, !tbaa !5
  %653 = invoke noundef i32 @_ZZ4mainENK4raii7shuffleEi(ptr noundef nonnull align 8 dereferenceable(40) %32, i32 noundef %652)
          to label %654 unwind label %664

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

661:                                              ; preds = %654
  %662 = load i32, ptr %59, align 4, !tbaa !5
  %663 = add nsw i32 %662, 1
  store i32 %663, ptr %59, align 4, !tbaa !5
  br label %638, !llvm.loop !27

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

668:                                              ; preds = %638
  br label %669

669:                                              ; preds = %668
  %670 = load i32, ptr %58, align 4, !tbaa !5
  %671 = add nsw i32 %670, 1
  store i32 %671, ptr %58, align 4, !tbaa !5
  br label %587, !llvm.loop !28

672:                                              ; preds = %587
  br label %744

673:                                              ; preds = %574
  call void @llvm.lifetime.start.p0(i64 4, ptr %62) #11
  %674 = load i32, ptr %56, align 4, !tbaa !5
  %675 = load i32, ptr %57, align 4, !tbaa !5
  %676 = mul nsw i32 %674, %675
  store i32 %676, ptr %62, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %63) #11
  %677 = load i32, ptr %62, align 4, !tbaa !5
  %678 = add nsw i32 %677, 1
  %679 = sdiv i32 %678, 2
  %680 = sitofp i32 %679 to double
  store double %680, ptr %63, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 8, ptr %64) #11
  %681 = load double, ptr %29, align 8, !tbaa !12
  %682 = load double, ptr %63, align 8, !tbaa !12
  %683 = fdiv double %681, %682
  store double %683, ptr %64, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 8, ptr %65) #11
  %684 = load i32, ptr %62, align 4, !tbaa !5
  %685 = sext i32 %684 to i64
  %686 = invoke i64 @libxsmm_coprime2(i64 noundef %685)
          to label %687 unwind label %730

687:                                              ; preds = %673
  store i64 %686, ptr %65, align 8, !tbaa !14
  store i32 0, ptr %58, align 4, !tbaa !5
  br label %688

688:                                              ; preds = %739, %687
  %689 = load i32, ptr %58, align 4, !tbaa !5
  %690 = load i32, ptr %56, align 4, !tbaa !5
  %691 = icmp slt i32 %689, %690
  br i1 %691, label %692, label %742

692:                                              ; preds = %688
  store i32 0, ptr %59, align 4, !tbaa !5
  br label %693

693:                                              ; preds = %727, %692
  %694 = load i32, ptr %59, align 4, !tbaa !5
  %695 = load i32, ptr %57, align 4, !tbaa !5
  %696 = icmp slt i32 %694, %695
  br i1 %696, label %697, label %738

697:                                              ; preds = %693
  call void @llvm.lifetime.start.p0(i64 4, ptr %66) #11
  %698 = load i32, ptr %58, align 4, !tbaa !5
  %699 = load i32, ptr %57, align 4, !tbaa !5
  %700 = mul nsw i32 %698, %699
  %701 = load i32, ptr %59, align 4, !tbaa !5
  %702 = add nsw i32 %700, %701
  store i32 %702, ptr %66, align 4, !tbaa !5
  %703 = load double, ptr %64, align 8, !tbaa !12
  %704 = load i64, ptr %65, align 8, !tbaa !14
  %705 = load i32, ptr %66, align 4, !tbaa !5
  %706 = sext i32 %705 to i64
  %707 = mul i64 %704, %706
  %708 = load i32, ptr %62, align 4, !tbaa !5
  %709 = sext i32 %708 to i64
  %710 = urem i64 %707, %709
  %711 = uitofp i64 %710 to double
  %712 = load double, ptr %63, align 8, !tbaa !12
  %713 = fsub double %711, %712
  %714 = fmul double %703, %713
  %715 = load ptr, ptr %36, align 8, !tbaa !9
  %716 = load i32, ptr %21, align 4, !tbaa !5
  %717 = sext i32 %716 to i64
  %718 = load i32, ptr %38, align 4, !tbaa !5
  %719 = invoke noundef i32 @_ZZ4mainENK4raii7shuffleEi(ptr noundef nonnull align 8 dereferenceable(40) %32, i32 noundef %718)
          to label %720 unwind label %734

720:                                              ; preds = %697
  %721 = sext i32 %719 to i64
  %722 = mul i64 %717, %721
  %723 = getelementptr inbounds double, ptr %715, i64 %722
  %724 = load i32, ptr %66, align 4, !tbaa !5
  %725 = sext i32 %724 to i64
  %726 = getelementptr inbounds double, ptr %723, i64 %725
  store double %714, ptr %726, align 8, !tbaa !12
  call void @llvm.lifetime.end.p0(i64 4, ptr %66) #11
  br label %727

727:                                              ; preds = %720
  %728 = load i32, ptr %59, align 4, !tbaa !5
  %729 = add nsw i32 %728, 1
  store i32 %729, ptr %59, align 4, !tbaa !5
  br label %693, !llvm.loop !29

730:                                              ; preds = %673
  %731 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %732 = extractvalue { ptr, i32 } %731, 0
  store ptr %732, ptr %33, align 8
  %733 = extractvalue { ptr, i32 } %731, 1
  store i32 %733, ptr %34, align 4
  br label %743

734:                                              ; preds = %697
  %735 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %736 = extractvalue { ptr, i32 } %735, 0
  store ptr %736, ptr %33, align 8
  %737 = extractvalue { ptr, i32 } %735, 1
  store i32 %737, ptr %34, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %66) #11
  br label %743

738:                                              ; preds = %693
  br label %739

739:                                              ; preds = %738
  %740 = load i32, ptr %58, align 4, !tbaa !5
  %741 = add nsw i32 %740, 1
  store i32 %741, ptr %58, align 4, !tbaa !5
  br label %688, !llvm.loop !30

742:                                              ; preds = %688
  call void @llvm.lifetime.end.p0(i64 8, ptr %65) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %64) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %63) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %62) #11
  br label %744

743:                                              ; preds = %734, %730
  call void @llvm.lifetime.end.p0(i64 8, ptr %65) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %64) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %63) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %62) #11
  br label %799

744:                                              ; preds = %742, %672
  call void @llvm.lifetime.end.p0(i64 4, ptr %59) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %58) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %57) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %56) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %55) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %54) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %53) #11
  br label %745

745:                                              ; preds = %744
  br label %746

746:                                              ; preds = %745
  br label %747

747:                                              ; preds = %746
  call void @llvm.lifetime.start.p0(i64 8, ptr %67) #11
  %748 = load i32, ptr %38, align 4, !tbaa !5
  %749 = add nsw i32 22, %748
  %750 = sitofp i32 %749 to double
  store double %750, ptr %67, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 8, ptr %68) #11
  %751 = load double, ptr %67, align 8, !tbaa !12
  %752 = load double, ptr %29, align 8, !tbaa !12
  %753 = load double, ptr %29, align 8, !tbaa !12
  %754 = call double @llvm.fmuladd.f64(double %751, double %752, double %753)
  store double %754, ptr %68, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 4, ptr %69) #11
  %755 = load i32, ptr %8, align 4, !tbaa !5
  store i32 %755, ptr %69, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %70) #11
  %756 = load i32, ptr %10, align 4, !tbaa !5
  store i32 %756, ptr %70, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %71) #11
  %757 = load i32, ptr %15, align 4, !tbaa !5
  store i32 %757, ptr %71, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %72) #11
  store i32 0, ptr %72, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %73) #11
  store i32 0, ptr %73, align 4, !tbaa !5
  %758 = load double, ptr %67, align 8, !tbaa !12
  %759 = fcmp une double 0.000000e+00, %758
  br i1 %759, label %760, label %831

760:                                              ; preds = %747
  store i32 0, ptr %72, align 4, !tbaa !5
  br label %761

761:                                              ; preds = %827, %760
  %762 = load i32, ptr %72, align 4, !tbaa !5
  %763 = load i32, ptr %70, align 4, !tbaa !5
  %764 = icmp slt i32 %762, %763
  br i1 %764, label %765, label %830

765:                                              ; preds = %761
  store i32 0, ptr %73, align 4, !tbaa !5
  br label %766

766:                                              ; preds = %796, %765
  %767 = load i32, ptr %73, align 4, !tbaa !5
  %768 = load i32, ptr %69, align 4, !tbaa !5
  %769 = icmp slt i32 %767, %768
  br i1 %769, label %770, label %801

770:                                              ; preds = %766
  call void @llvm.lifetime.start.p0(i64 4, ptr %74) #11
  %771 = load i32, ptr %72, align 4, !tbaa !5
  %772 = load i32, ptr %71, align 4, !tbaa !5
  %773 = mul nsw i32 %771, %772
  %774 = load i32, ptr %73, align 4, !tbaa !5
  %775 = add nsw i32 %773, %774
  store i32 %775, ptr %74, align 4, !tbaa !5
  %776 = load double, ptr %68, align 8, !tbaa !12
  %777 = load i32, ptr %72, align 4, !tbaa !5
  %778 = sitofp i32 %777 to double
  %779 = load i32, ptr %69, align 4, !tbaa !5
  %780 = sitofp i32 %779 to double
  %781 = call double @llvm.fmuladd.f64(double %778, double %780, double 1.000000e+00)
  %782 = load i32, ptr %73, align 4, !tbaa !5
  %783 = sitofp i32 %782 to double
  %784 = fadd double %781, %783
  %785 = fmul double %776, %784
  %786 = load ptr, ptr %37, align 8, !tbaa !9
  %787 = load i32, ptr %22, align 4, !tbaa !5
  %788 = sext i32 %787 to i64
  %789 = load i32, ptr %38, align 4, !tbaa !5
  %790 = sext i32 %789 to i64
  %791 = mul i64 %788, %790
  %792 = getelementptr inbounds double, ptr %786, i64 %791
  %793 = load i32, ptr %74, align 4, !tbaa !5
  %794 = sext i32 %793 to i64
  %795 = getelementptr inbounds double, ptr %792, i64 %794
  store double %785, ptr %795, align 8, !tbaa !12
  call void @llvm.lifetime.end.p0(i64 4, ptr %74) #11
  br label %796

796:                                              ; preds = %770
  %797 = load i32, ptr %73, align 4, !tbaa !5
  %798 = add nsw i32 %797, 1
  store i32 %798, ptr %73, align 4, !tbaa !5
  br label %766, !llvm.loop !31

799:                                              ; preds = %743, %664, %633
  call void @llvm.lifetime.end.p0(i64 4, ptr %59) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %58) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %57) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %56) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %55) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %54) #11
  br label %800

800:                                              ; preds = %799, %629
  call void @llvm.lifetime.end.p0(i64 8, ptr %53) #11
  br label %901

801:                                              ; preds = %766
  br label %802

802:                                              ; preds = %823, %801
  %803 = load i32, ptr %73, align 4, !tbaa !5
  %804 = load i32, ptr %71, align 4, !tbaa !5
  %805 = icmp slt i32 %803, %804
  br i1 %805, label %806, label %826

806:                                              ; preds = %802
  call void @llvm.lifetime.start.p0(i64 4, ptr %75) #11
  %807 = load i32, ptr %72, align 4, !tbaa !5
  %808 = load i32, ptr %71, align 4, !tbaa !5
  %809 = mul nsw i32 %807, %808
  %810 = load i32, ptr %73, align 4, !tbaa !5
  %811 = add nsw i32 %809, %810
  store i32 %811, ptr %75, align 4, !tbaa !5
  %812 = load double, ptr %67, align 8, !tbaa !12
  %813 = load ptr, ptr %37, align 8, !tbaa !9
  %814 = load i32, ptr %22, align 4, !tbaa !5
  %815 = sext i32 %814 to i64
  %816 = load i32, ptr %38, align 4, !tbaa !5
  %817 = sext i32 %816 to i64
  %818 = mul i64 %815, %817
  %819 = getelementptr inbounds double, ptr %813, i64 %818
  %820 = load i32, ptr %75, align 4, !tbaa !5
  %821 = sext i32 %820 to i64
  %822 = getelementptr inbounds double, ptr %819, i64 %821
  store double %812, ptr %822, align 8, !tbaa !12
  call void @llvm.lifetime.end.p0(i64 4, ptr %75) #11
  br label %823

823:                                              ; preds = %806
  %824 = load i32, ptr %73, align 4, !tbaa !5
  %825 = add nsw i32 %824, 1
  store i32 %825, ptr %73, align 4, !tbaa !5
  br label %802, !llvm.loop !32

826:                                              ; preds = %802
  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 %761, !llvm.loop !33

830:                                              ; preds = %761
  br label %895

831:                                              ; preds = %747
  call void @llvm.lifetime.start.p0(i64 4, ptr %76) #11
  %832 = load i32, ptr %70, align 4, !tbaa !5
  %833 = load i32, ptr %71, align 4, !tbaa !5
  %834 = mul nsw i32 %832, %833
  store i32 %834, ptr %76, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %77) #11
  %835 = load i32, ptr %76, align 4, !tbaa !5
  %836 = add nsw i32 %835, 1
  %837 = sdiv i32 %836, 2
  %838 = sitofp i32 %837 to double
  store double %838, ptr %77, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 8, ptr %78) #11
  %839 = load double, ptr %29, align 8, !tbaa !12
  %840 = load double, ptr %77, align 8, !tbaa !12
  %841 = fdiv double %839, %840
  store double %841, ptr %78, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 8, ptr %79) #11
  %842 = load i32, ptr %76, align 4, !tbaa !5
  %843 = sext i32 %842 to i64
  %844 = invoke i64 @libxsmm_coprime2(i64 noundef %843)
          to label %845 unwind label %886

845:                                              ; preds = %831
  store i64 %844, ptr %79, align 8, !tbaa !14
  store i32 0, ptr %72, align 4, !tbaa !5
  br label %846

846:                                              ; preds = %891, %845
  %847 = load i32, ptr %72, align 4, !tbaa !5
  %848 = load i32, ptr %70, align 4, !tbaa !5
  %849 = icmp slt i32 %847, %848
  br i1 %849, label %850, label %894

850:                                              ; preds = %846
  store i32 0, ptr %73, align 4, !tbaa !5
  br label %851

851:                                              ; preds = %883, %850
  %852 = load i32, ptr %73, align 4, !tbaa !5
  %853 = load i32, ptr %71, align 4, !tbaa !5
  %854 = icmp slt i32 %852, %853
  br i1 %854, label %855, label %890

855:                                              ; preds = %851
  call void @llvm.lifetime.start.p0(i64 4, ptr %80) #11
  %856 = load i32, ptr %72, align 4, !tbaa !5
  %857 = load i32, ptr %71, align 4, !tbaa !5
  %858 = mul nsw i32 %856, %857
  %859 = load i32, ptr %73, align 4, !tbaa !5
  %860 = add nsw i32 %858, %859
  store i32 %860, ptr %80, align 4, !tbaa !5
  %861 = load double, ptr %78, align 8, !tbaa !12
  %862 = load i64, ptr %79, align 8, !tbaa !14
  %863 = load i32, ptr %80, align 4, !tbaa !5
  %864 = sext i32 %863 to i64
  %865 = mul i64 %862, %864
  %866 = load i32, ptr %76, align 4, !tbaa !5
  %867 = sext i32 %866 to i64
  %868 = urem i64 %865, %867
  %869 = uitofp i64 %868 to double
  %870 = load double, ptr %77, align 8, !tbaa !12
  %871 = fsub double %869, %870
  %872 = fmul double %861, %871
  %873 = load ptr, ptr %37, align 8, !tbaa !9
  %874 = load i32, ptr %22, align 4, !tbaa !5
  %875 = sext i32 %874 to i64
  %876 = load i32, ptr %38, align 4, !tbaa !5
  %877 = sext i32 %876 to i64
  %878 = mul i64 %875, %877
  %879 = getelementptr inbounds double, ptr %873, i64 %878
  %880 = load i32, ptr %80, align 4, !tbaa !5
  %881 = sext i32 %880 to i64
  %882 = getelementptr inbounds double, ptr %879, i64 %881
  store double %872, ptr %882, align 8, !tbaa !12
  call void @llvm.lifetime.end.p0(i64 4, ptr %80) #11
  br label %883

883:                                              ; preds = %855
  %884 = load i32, ptr %73, align 4, !tbaa !5
  %885 = add nsw i32 %884, 1
  store i32 %885, ptr %73, align 4, !tbaa !5
  br label %851, !llvm.loop !34

886:                                              ; preds = %831
  %887 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %888 = extractvalue { ptr, i32 } %887, 0
  store ptr %888, ptr %33, align 8
  %889 = extractvalue { ptr, i32 } %887, 1
  store i32 %889, ptr %34, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %79) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %78) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %77) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %76) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %73) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %72) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %71) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %70) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %69) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %68) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %67) #11
  br label %901

890:                                              ; preds = %851
  br label %891

891:                                              ; preds = %890
  %892 = load i32, ptr %72, align 4, !tbaa !5
  %893 = add nsw i32 %892, 1
  store i32 %893, ptr %72, align 4, !tbaa !5
  br label %846, !llvm.loop !35

894:                                              ; preds = %846
  call void @llvm.lifetime.end.p0(i64 8, ptr %79) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %78) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %77) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %76) #11
  br label %895

895:                                              ; preds = %894, %830
  call void @llvm.lifetime.end.p0(i64 4, ptr %73) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %72) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %71) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %70) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %69) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %68) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %67) #11
  br label %896

896:                                              ; preds = %895
  br label %897

897:                                              ; preds = %896
  br label %898

898:                                              ; preds = %897
  %899 = load i32, ptr %38, align 4, !tbaa !5
  %900 = add nsw i32 %899, 1
  store i32 %900, ptr %38, align 4, !tbaa !5
  br label %387, !llvm.loop !36

901:                                              ; preds = %886, %800, %628
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #11
  br label %1924

902:                                              ; preds = %391
  invoke void @libxsmm_init()
          to label %903 unwind label %931

903:                                              ; preds = %902
  %904 = load ptr, ptr @stdout, align 8, !tbaa !9
  %905 = load i32, ptr %8, align 4, !tbaa !5
  %906 = sext i32 %905 to i64
  %907 = load i32, ptr %10, align 4, !tbaa !5
  %908 = sext i32 %907 to i64
  %909 = load i32, ptr %9, align 4, !tbaa !5
  %910 = sext i32 %909 to i64
  %911 = load i32, ptr %24, align 4, !tbaa !5
  %912 = sext i32 %911 to i64
  %913 = load i32, ptr %24, align 4, !tbaa !5
  %914 = sext i32 %913 to i64
  %915 = load i32, ptr %20, align 4, !tbaa !5
  %916 = sext i32 %915 to i64
  %917 = load i32, ptr %21, align 4, !tbaa !5
  %918 = sext i32 %917 to i64
  %919 = add i64 %916, %918
  %920 = mul i64 %919, 8
  %921 = load i32, ptr %22, align 4, !tbaa !5
  %922 = sext i32 %921 to i64
  %923 = mul i64 %922, 8
  %924 = add i64 %920, %923
  %925 = mul i64 %914, %924
  %926 = uitofp i64 %925 to double
  %927 = fmul double 1.000000e+00, %926
  %928 = fdiv double %927, 0x4130000000000000
  %929 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %904, ptr noundef @.str.1, i64 noundef %906, i64 noundef %908, i64 noundef %910, i64 noundef %912, double noundef %928, ptr noundef @.str.2, ptr noundef @.str.2) #11
  %930 = load i32, ptr %7, align 4, !tbaa !5
  switch i32 %930, label %1897 [
    i32 0, label %935
    i32 1, label %1138
    i32 2, label %1337
    i32 3, label %1536
    i32 4, label %1734
  ]

931:                                              ; preds = %1920, %1897, %902
  %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
  br label %1924

935:                                              ; preds = %903
  %936 = load ptr, ptr @stdout, align 8, !tbaa !9
  %937 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %936, ptr noundef @.str.3) #11
  call void @llvm.lifetime.start.p0(i64 8, ptr %81) #11
  %938 = invoke i64 @libxsmm_timer_tick()
          to label %939 unwind label %945

939:                                              ; preds = %935
  store i64 %938, ptr %81, align 8, !tbaa !37
  call void @llvm.lifetime.start.p0(i64 4, ptr %82) #11
  store i32 0, ptr %82, align 4, !tbaa !5
  br label %940

940:                                              ; preds = %1068, %939
  %941 = load i32, ptr %82, align 4, !tbaa !5
  %942 = load i32, ptr %12, align 4, !tbaa !5
  %943 = icmp slt i32 %941, %942
  br i1 %943, label %949, label %944

944:                                              ; preds = %940
  store i32 57, ptr %83, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %82) #11
  br label %1071

945:                                              ; preds = %935
  %946 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %947 = extractvalue { ptr, i32 } %946, 0
  store ptr %947, ptr %33, align 8
  %948 = extractvalue { ptr, i32 } %946, 1
  store i32 %948, ptr %34, align 4
  br label %1137

949:                                              ; preds = %940
  call void @llvm.lifetime.start.p0(i64 4, ptr %84) #11
  store i32 0, ptr %84, align 4, !tbaa !5
  br label %950

950:                                              ; preds = %1064, %949
  %951 = load i32, ptr %84, align 4, !tbaa !5
  %952 = load i32, ptr %24, align 4, !tbaa !5
  %953 = icmp slt i32 %951, %952
  br i1 %953, label %955, label %954

954:                                              ; preds = %950
  store i32 60, ptr %83, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %84) #11
  br label %1067

955:                                              ; preds = %950
  br label %956

956:                                              ; preds = %955
  call void @llvm.lifetime.start.p0(i64 1, ptr %85) #11
  store i8 78, ptr %85, align 1, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 1, ptr %86) #11
  store i8 78, ptr %86, align 1, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %87) #11
  %957 = load i32, ptr %8, align 4, !tbaa !5
  store i32 %957, ptr %87, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %88) #11
  %958 = load i32, ptr %9, align 4, !tbaa !5
  store i32 %958, ptr %88, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %89) #11
  %959 = load i32, ptr %10, align 4, !tbaa !5
  store i32 %959, ptr %89, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %90) #11
  %960 = load i32, ptr %13, align 4, !tbaa !5
  store i32 %960, ptr %90, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %91) #11
  %961 = load i32, ptr %14, align 4, !tbaa !5
  store i32 %961, ptr %91, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %92) #11
  %962 = load i32, ptr %15, align 4, !tbaa !5
  store i32 %962, ptr %92, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %93) #11
  %963 = load double, ptr %18, align 8, !tbaa !12
  store double %963, ptr %93, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 8, ptr %94) #11
  %964 = load double, ptr %19, align 8, !tbaa !12
  store double %964, ptr %94, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 4, ptr %95) #11
  call void @llvm.lifetime.start.p0(i64 4, ptr %96) #11
  store i32 0, ptr %96, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %97) #11
  store i32 0, ptr %96, align 4, !tbaa !5
  br label %965

965:                                              ; preds = %1058, %956
  %966 = load i32, ptr %96, align 4, !tbaa !5
  %967 = load i32, ptr %87, align 4, !tbaa !5
  %968 = icmp slt i32 %966, %967
  br i1 %968, label %969, label %1061

969:                                              ; preds = %965
  store i32 0, ptr %97, align 4, !tbaa !5
  br label %970

970:                                              ; preds = %1054, %969
  %971 = load i32, ptr %97, align 4, !tbaa !5
  %972 = load i32, ptr %88, align 4, !tbaa !5
  %973 = icmp slt i32 %971, %972
  br i1 %973, label %974, label %1057

974:                                              ; preds = %970
  store i32 0, ptr %95, align 4, !tbaa !5
  br label %975

975:                                              ; preds = %1046, %974
  %976 = load i32, ptr %95, align 4, !tbaa !5
  %977 = load i32, ptr %89, align 4, !tbaa !5
  %978 = icmp slt i32 %976, %977
  br i1 %978, label %979, label %1053

979:                                              ; preds = %975
  %980 = load ptr, ptr %36, align 8, !tbaa !9
  %981 = load i32, ptr %21, align 4, !tbaa !5
  %982 = sext i32 %981 to i64
  %983 = load i32, ptr %84, align 4, !tbaa !5
  %984 = invoke noundef i32 @_ZZ4mainENK4raii7shuffleEi(ptr noundef nonnull align 8 dereferenceable(40) %32, i32 noundef %983)
          to label %985 unwind label %1049

985:                                              ; preds = %979
  %986 = sext i32 %984 to i64
  %987 = mul i64 %982, %986
  %988 = getelementptr inbounds double, ptr %980, i64 %987
  %989 = load i32, ptr %95, align 4, !tbaa !5
  %990 = load i32, ptr %91, align 4, !tbaa !5
  %991 = mul nsw i32 %989, %990
  %992 = load i32, ptr %97, align 4, !tbaa !5
  %993 = add nsw i32 %991, %992
  %994 = sext i32 %993 to i64
  %995 = getelementptr inbounds double, ptr %988, i64 %994
  %996 = load double, ptr %995, align 8, !tbaa !12
  %997 = load ptr, ptr %35, align 8, !tbaa !9
  %998 = load i32, ptr %20, align 4, !tbaa !5
  %999 = sext i32 %998 to i64
  %1000 = load i32, ptr %84, align 4, !tbaa !5
  %1001 = invoke noundef i32 @_ZZ4mainENK4raii7shuffleEi(ptr noundef nonnull align 8 dereferenceable(40) %32, i32 noundef %1000)
          to label %1002 unwind label %1049

1002:                                             ; preds = %985
  %1003 = sext i32 %1001 to i64
  %1004 = mul i64 %999, %1003
  %1005 = getelementptr inbounds double, ptr %997, i64 %1004
  %1006 = load i32, ptr %97, align 4, !tbaa !5
  %1007 = load i32, ptr %90, align 4, !tbaa !5
  %1008 = mul nsw i32 %1006, %1007
  %1009 = load i32, ptr %96, align 4, !tbaa !5
  %1010 = add nsw i32 %1008, %1009
  %1011 = sext i32 %1010 to i64
  %1012 = getelementptr inbounds double, ptr %1005, i64 %1011
  %1013 = load double, ptr %1012, align 8, !tbaa !12
  %1014 = fmul double %1013, 1.000000e+00
  %1015 = load ptr, ptr %37, align 8, !tbaa !9
  %1016 = load i32, ptr %22, align 4, !tbaa !5
  %1017 = sext i32 %1016 to i64
  %1018 = load i32, ptr %84, align 4, !tbaa !5
  %1019 = sext i32 %1018 to i64
  %1020 = mul i64 %1017, %1019
  %1021 = getelementptr inbounds double, ptr %1015, i64 %1020
  %1022 = load i32, ptr %95, align 4, !tbaa !5
  %1023 = load i32, ptr %92, align 4, !tbaa !5
  %1024 = mul nsw i32 %1022, %1023
  %1025 = load i32, ptr %96, align 4, !tbaa !5
  %1026 = add nsw i32 %1024, %1025
  %1027 = sext i32 %1026 to i64
  %1028 = getelementptr inbounds double, ptr %1021, i64 %1027
  %1029 = load double, ptr %1028, align 8, !tbaa !12
  %1030 = fmul double %1029, 1.000000e+00
  %1031 = call double @llvm.fmuladd.f64(double %996, double %1014, double %1030)
  %1032 = load ptr, ptr %37, align 8, !tbaa !9
  %1033 = load i32, ptr %22, align 4, !tbaa !5
  %1034 = sext i32 %1033 to i64
  %1035 = load i32, ptr %84, align 4, !tbaa !5
  %1036 = sext i32 %1035 to i64
  %1037 = mul i64 %1034, %1036
  %1038 = getelementptr inbounds double, ptr %1032, i64 %1037
  %1039 = load i32, ptr %95, align 4, !tbaa !5
  %1040 = load i32, ptr %92, align 4, !tbaa !5
  %1041 = mul nsw i32 %1039, %1040
  %1042 = load i32, ptr %96, align 4, !tbaa !5
  %1043 = add nsw i32 %1041, %1042
  %1044 = sext i32 %1043 to i64
  %1045 = getelementptr inbounds double, ptr %1038, i64 %1044
  store double %1031, ptr %1045, align 8, !tbaa !12
  br label %1046

1046:                                             ; preds = %1002
  %1047 = load i32, ptr %95, align 4, !tbaa !5
  %1048 = add nsw i32 %1047, 1
  store i32 %1048, ptr %95, align 4, !tbaa !5
  br label %975, !llvm.loop !39

1049:                                             ; preds = %985, %979
  %1050 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %1051 = extractvalue { ptr, i32 } %1050, 0
  store ptr %1051, ptr %33, align 8
  %1052 = extractvalue { ptr, i32 } %1050, 1
  store i32 %1052, ptr %34, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %97) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %96) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %95) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %94) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %93) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %92) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %91) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %90) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %89) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %88) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %87) #11
  call void @llvm.lifetime.end.p0(i64 1, ptr %86) #11
  call void @llvm.lifetime.end.p0(i64 1, ptr %85) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %84) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %82) #11
  br label %1137

1053:                                             ; preds = %975
  br label %1054

1054:                                             ; preds = %1053
  %1055 = load i32, ptr %97, align 4, !tbaa !5
  %1056 = add nsw i32 %1055, 1
  store i32 %1056, ptr %97, align 4, !tbaa !5
  br label %970, !llvm.loop !40

1057:                                             ; preds = %970
  br label %1058

1058:                                             ; preds = %1057
  %1059 = load i32, ptr %96, align 4, !tbaa !5
  %1060 = add nsw i32 %1059, 1
  store i32 %1060, ptr %96, align 4, !tbaa !5
  br label %965, !llvm.loop !41

1061:                                             ; preds = %965
  call void @llvm.lifetime.end.p0(i64 4, ptr %97) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %96) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %95) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %94) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %93) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %92) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %91) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %90) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %89) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %88) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %87) #11
  call void @llvm.lifetime.end.p0(i64 1, ptr %86) #11
  call void @llvm.lifetime.end.p0(i64 1, ptr %85) #11
  br label %1062

1062:                                             ; preds = %1061
  br label %1063

1063:                                             ; preds = %1062
  br label %1064

1064:                                             ; preds = %1063
  %1065 = load i32, ptr %84, align 4, !tbaa !5
  %1066 = add nsw i32 %1065, 1
  store i32 %1066, ptr %84, align 4, !tbaa !5
  br label %950, !llvm.loop !42

1067:                                             ; preds = %954
  br label %1068

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

1071:                                             ; preds = %944
  call void @llvm.lifetime.start.p0(i64 8, ptr %98) #11
  %1072 = load i64, ptr %81, align 8, !tbaa !37
  %1073 = invoke i64 @libxsmm_timer_tick()
          to label %1074 unwind label %1123

1074:                                             ; preds = %1071
  %1075 = invoke noundef i64 @_Z21libxsmm_timer_ncyclesyy(i64 noundef %1072, i64 noundef %1073)
          to label %1076 unwind label %1123

1076:                                             ; preds = %1074
  store i64 %1075, ptr %98, align 8, !tbaa !37
  call void @llvm.lifetime.start.p0(i64 8, ptr %99) #11
  %1077 = load i64, ptr %98, align 8, !tbaa !37
  %1078 = invoke double @libxsmm_timer_duration(i64 noundef 0, i64 noundef %1077)
          to label %1079 unwind label %1127

1079:                                             ; preds = %1076
  %1080 = load i32, ptr %12, align 4, !tbaa !5
  %1081 = sitofp i32 %1080 to double
  %1082 = fdiv double %1078, %1081
  store double %1082, ptr %99, align 8, !tbaa !12
  %1083 = load double, ptr %99, align 8, !tbaa !12
  %1084 = fcmp olt double 0.000000e+00, %1083
  br i1 %1084, label %1085, label %1131

1085:                                             ; preds = %1079
  %1086 = load i64, ptr %98, align 8, !tbaa !37
  %1087 = icmp ne i64 0, %1086
  br i1 %1087, label %1088, label %1131

1088:                                             ; preds = %1085
  %1089 = load ptr, ptr @stdout, align 8, !tbaa !9
  %1090 = load i32, ptr %9, align 4, !tbaa !5
  %1091 = sitofp i32 %1090 to double
  %1092 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %1091, double -1.000000e+00)
  %1093 = load i32, ptr %24, align 4, !tbaa !5
  %1094 = sitofp i32 %1093 to double
  %1095 = load i32, ptr %8, align 4, !tbaa !5
  %1096 = sitofp i32 %1095 to double
  %1097 = fmul double %1094, %1096
  %1098 = load i32, ptr %10, align 4, !tbaa !5
  %1099 = sitofp i32 %1098 to double
  %1100 = fmul double %1097, %1099
  %1101 = fmul double %1092, %1100
  %1102 = load i64, ptr %98, align 8, !tbaa !37
  %1103 = uitofp i64 %1102 to double
  %1104 = fdiv double %1101, %1103
  %1105 = getelementptr inbounds [6 x i8], ptr %28, i64 0, i64 0
  %1106 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %1089, ptr noundef @.str.4, double noundef %1104, ptr noundef %1105) #11
  %1107 = load ptr, ptr @stdout, align 8, !tbaa !9
  %1108 = load double, ptr %27, align 8, !tbaa !12
  %1109 = load double, ptr %99, align 8, !tbaa !12
  %1110 = fdiv double %1108, %1109
  %1111 = getelementptr inbounds [6 x i8], ptr %28, i64 0, i64 0
  %1112 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %1107, ptr noundef @.str.5, double noundef %1110, ptr noundef %1111) #11
  %1113 = load ptr, ptr @stdout, align 8, !tbaa !9
  %1114 = load i32, ptr %24, align 4, !tbaa !5
  %1115 = sext i32 %1114 to i64
  %1116 = load i64, ptr %26, align 8, !tbaa !14
  %1117 = mul i64 %1115, %1116
  %1118 = uitofp i64 %1117 to double
  %1119 = load double, ptr %99, align 8, !tbaa !12
  %1120 = fmul double %1119, 0x41D0000000000000
  %1121 = fdiv double %1118, %1120
  %1122 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %1113, ptr noundef @.str.6, double noundef %1121) #11
  br label %1131

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

1127:                                             ; preds = %1076
  %1128 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %1129 = extractvalue { ptr, i32 } %1128, 0
  store ptr %1129, ptr %33, align 8
  %1130 = extractvalue { ptr, i32 } %1128, 1
  store i32 %1130, ptr %34, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %99) #11
  br label %1136

1131:                                             ; preds = %1088, %1085, %1079
  %1132 = load ptr, ptr @stdout, align 8, !tbaa !9
  %1133 = load double, ptr %99, align 8, !tbaa !12
  %1134 = fmul double 1.000000e+03, %1133
  %1135 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %1132, ptr noundef @.str.7, double noundef %1134) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %99) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %98) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %81) #11
  br label %1899

1136:                                             ; preds = %1127, %1123
  call void @llvm.lifetime.end.p0(i64 8, ptr %98) #11
  br label %1137

1137:                                             ; preds = %1136, %1049, %945
  call void @llvm.lifetime.end.p0(i64 8, ptr %81) #11
  br label %1924

1138:                                             ; preds = %903
  %1139 = load ptr, ptr @stdout, align 8, !tbaa !9
  %1140 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %1139, ptr noundef @.str.8) #11
  call void @llvm.lifetime.start.p0(i64 8, ptr %100) #11
  %1141 = invoke i64 @libxsmm_timer_tick()
          to label %1142 unwind label %1148

1142:                                             ; preds = %1138
  store i64 %1141, ptr %100, align 8, !tbaa !37
  call void @llvm.lifetime.start.p0(i64 4, ptr %101) #11
  store i32 0, ptr %101, align 4, !tbaa !5
  br label %1143

1143:                                             ; preds = %1263, %1142
  %1144 = load i32, ptr %101, align 4, !tbaa !5
  %1145 = load i32, ptr %12, align 4, !tbaa !5
  %1146 = icmp slt i32 %1144, %1145
  br i1 %1146, label %1152, label %1147

1147:                                             ; preds = %1143
  store i32 74, ptr %83, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %101) #11
  br label %1266

1148:                                             ; preds = %1138
  %1149 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %1150 = extractvalue { ptr, i32 } %1149, 0
  store ptr %1150, ptr %33, align 8
  %1151 = extractvalue { ptr, i32 } %1149, 1
  store i32 %1151, ptr %34, align 4
  br label %1336

1152:                                             ; preds = %1143
  call void @llvm.lifetime.start.p0(i64 4, ptr %102) #11
  store i32 0, ptr %102, align 4, !tbaa !5
  br label %1153

1153:                                             ; preds = %1259, %1152
  %1154 = load i32, ptr %102, align 4, !tbaa !5
  %1155 = load i32, ptr %24, align 4, !tbaa !5
  %1156 = icmp slt i32 %1154, %1155
  br i1 %1156, label %1158, label %1157

1157:                                             ; preds = %1153
  store i32 77, ptr %83, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %102) #11
  br label %1262

1158:                                             ; preds = %1153
  br label %1159

1159:                                             ; preds = %1158
  call void @llvm.lifetime.start.p0(i64 1, ptr %103) #11
  store i8 78, ptr %103, align 1, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 1, ptr %104) #11
  store i8 78, ptr %104, align 1, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %105) #11
  %1160 = load i32, ptr %8, align 4, !tbaa !5
  store i32 %1160, ptr %105, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %106) #11
  %1161 = load i32, ptr %9, align 4, !tbaa !5
  store i32 %1161, ptr %106, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %107) #11
  %1162 = load i32, ptr %10, align 4, !tbaa !5
  store i32 %1162, ptr %107, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %108) #11
  %1163 = load i32, ptr %13, align 4, !tbaa !5
  store i32 %1163, ptr %108, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %109) #11
  %1164 = load i32, ptr %14, align 4, !tbaa !5
  store i32 %1164, ptr %109, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %110) #11
  %1165 = load i32, ptr %15, align 4, !tbaa !5
  store i32 %1165, ptr %110, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %111) #11
  %1166 = load double, ptr %18, align 8, !tbaa !12
  store double %1166, ptr %111, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 8, ptr %112) #11
  %1167 = load double, ptr %19, align 8, !tbaa !12
  store double %1167, ptr %112, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 4, ptr %113) #11
  call void @llvm.lifetime.start.p0(i64 4, ptr %114) #11
  store i32 0, ptr %114, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %115) #11
  store i32 0, ptr %114, align 4, !tbaa !5
  br label %1168

1168:                                             ; preds = %1253, %1159
  %1169 = load i32, ptr %114, align 4, !tbaa !5
  %1170 = load i32, ptr %105, align 4, !tbaa !5
  %1171 = icmp slt i32 %1169, %1170
  br i1 %1171, label %1172, label %1256

1172:                                             ; preds = %1168
  store i32 0, ptr %115, align 4, !tbaa !5
  br label %1173

1173:                                             ; preds = %1249, %1172
  %1174 = load i32, ptr %115, align 4, !tbaa !5
  %1175 = load i32, ptr %106, align 4, !tbaa !5
  %1176 = icmp slt i32 %1174, %1175
  br i1 %1176, label %1177, label %1252

1177:                                             ; preds = %1173
  store i32 0, ptr %113, align 4, !tbaa !5
  br label %1178

1178:                                             ; preds = %1241, %1177
  %1179 = load i32, ptr %113, align 4, !tbaa !5
  %1180 = load i32, ptr %107, align 4, !tbaa !5
  %1181 = icmp slt i32 %1179, %1180
  br i1 %1181, label %1182, label %1248

1182:                                             ; preds = %1178
  %1183 = load ptr, ptr %36, align 8, !tbaa !9
  %1184 = load i32, ptr %113, align 4, !tbaa !5
  %1185 = load i32, ptr %109, align 4, !tbaa !5
  %1186 = mul nsw i32 %1184, %1185
  %1187 = load i32, ptr %115, align 4, !tbaa !5
  %1188 = add nsw i32 %1186, %1187
  %1189 = sext i32 %1188 to i64
  %1190 = getelementptr inbounds double, ptr %1183, i64 %1189
  %1191 = load double, ptr %1190, align 8, !tbaa !12
  %1192 = load ptr, ptr %35, align 8, !tbaa !9
  %1193 = load i32, ptr %20, align 4, !tbaa !5
  %1194 = sext i32 %1193 to i64
  %1195 = load i32, ptr %102, align 4, !tbaa !5
  %1196 = invoke noundef i32 @_ZZ4mainENK4raii7shuffleEi(ptr noundef nonnull align 8 dereferenceable(40) %32, i32 noundef %1195)
          to label %1197 unwind label %1244

1197:                                             ; preds = %1182
  %1198 = sext i32 %1196 to i64
  %1199 = mul i64 %1194, %1198
  %1200 = getelementptr inbounds double, ptr %1192, i64 %1199
  %1201 = load i32, ptr %115, align 4, !tbaa !5
  %1202 = load i32, ptr %108, align 4, !tbaa !5
  %1203 = mul nsw i32 %1201, %1202
  %1204 = load i32, ptr %114, align 4, !tbaa !5
  %1205 = add nsw i32 %1203, %1204
  %1206 = sext i32 %1205 to i64
  %1207 = getelementptr inbounds double, ptr %1200, i64 %1206
  %1208 = load double, ptr %1207, align 8, !tbaa !12
  %1209 = fmul double %1208, 1.000000e+00
  %1210 = load ptr, ptr %37, align 8, !tbaa !9
  %1211 = load i32, ptr %22, align 4, !tbaa !5
  %1212 = sext i32 %1211 to i64
  %1213 = load i32, ptr %102, align 4, !tbaa !5
  %1214 = sext i32 %1213 to i64
  %1215 = mul i64 %1212, %1214
  %1216 = getelementptr inbounds double, ptr %1210, i64 %1215
  %1217 = load i32, ptr %113, align 4, !tbaa !5
  %1218 = load i32, ptr %110, align 4, !tbaa !5
  %1219 = mul nsw i32 %1217, %1218
  %1220 = load i32, ptr %114, align 4, !tbaa !5
  %1221 = add nsw i32 %1219, %1220
  %1222 = sext i32 %1221 to i64
  %1223 = getelementptr inbounds double, ptr %1216, i64 %1222
  %1224 = load double, ptr %1223, align 8, !tbaa !12
  %1225 = fmul double %1224, 1.000000e+00
  %1226 = call double @llvm.fmuladd.f64(double %1191, double %1209, double %1225)
  %1227 = load ptr, ptr %37, align 8, !tbaa !9
  %1228 = load i32, ptr %22, align 4, !tbaa !5
  %1229 = sext i32 %1228 to i64
  %1230 = load i32, ptr %102, align 4, !tbaa !5
  %1231 = sext i32 %1230 to i64
  %1232 = mul i64 %1229, %1231
  %1233 = getelementptr inbounds double, ptr %1227, i64 %1232
  %1234 = load i32, ptr %113, align 4, !tbaa !5
  %1235 = load i32, ptr %110, align 4, !tbaa !5
  %1236 = mul nsw i32 %1234, %1235
  %1237 = load i32, ptr %114, align 4, !tbaa !5
  %1238 = add nsw i32 %1236, %1237
  %1239 = sext i32 %1238 to i64
  %1240 = getelementptr inbounds double, ptr %1233, i64 %1239
  store double %1226, ptr %1240, align 8, !tbaa !12
  br label %1241

1241:                                             ; preds = %1197
  %1242 = load i32, ptr %113, align 4, !tbaa !5
  %1243 = add nsw i32 %1242, 1
  store i32 %1243, ptr %113, align 4, !tbaa !5
  br label %1178, !llvm.loop !44

1244:                                             ; preds = %1182
  %1245 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %1246 = extractvalue { ptr, i32 } %1245, 0
  store ptr %1246, ptr %33, align 8
  %1247 = extractvalue { ptr, i32 } %1245, 1
  store i32 %1247, ptr %34, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %115) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %114) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %113) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %112) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %111) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %110) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %109) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %108) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %107) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %106) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %105) #11
  call void @llvm.lifetime.end.p0(i64 1, ptr %104) #11
  call void @llvm.lifetime.end.p0(i64 1, ptr %103) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %102) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %101) #11
  br label %1336

1248:                                             ; preds = %1178
  br label %1249

1249:                                             ; preds = %1248
  %1250 = load i32, ptr %115, align 4, !tbaa !5
  %1251 = add nsw i32 %1250, 1
  store i32 %1251, ptr %115, align 4, !tbaa !5
  br label %1173, !llvm.loop !45

1252:                                             ; preds = %1173
  br label %1253

1253:                                             ; preds = %1252
  %1254 = load i32, ptr %114, align 4, !tbaa !5
  %1255 = add nsw i32 %1254, 1
  store i32 %1255, ptr %114, align 4, !tbaa !5
  br label %1168, !llvm.loop !46

1256:                                             ; preds = %1168
  call void @llvm.lifetime.end.p0(i64 4, ptr %115) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %114) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %113) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %112) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %111) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %110) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %109) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %108) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %107) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %106) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %105) #11
  call void @llvm.lifetime.end.p0(i64 1, ptr %104) #11
  call void @llvm.lifetime.end.p0(i64 1, ptr %103) #11
  br label %1257

1257:                                             ; preds = %1256
  br label %1258

1258:                                             ; preds = %1257
  br label %1259

1259:                                             ; preds = %1258
  %1260 = load i32, ptr %102, align 4, !tbaa !5
  %1261 = add nsw i32 %1260, 1
  store i32 %1261, ptr %102, align 4, !tbaa !5
  br label %1153, !llvm.loop !47

1262:                                             ; preds = %1157
  br label %1263

1263:                                             ; preds = %1262
  %1264 = load i32, ptr %101, align 4, !tbaa !5
  %1265 = add nsw i32 %1264, 1
  store i32 %1265, ptr %101, align 4, !tbaa !5
  br label %1143, !llvm.loop !48

1266:                                             ; preds = %1147
  call void @llvm.lifetime.start.p0(i64 8, ptr %116) #11
  %1267 = load i64, ptr %100, align 8, !tbaa !37
  %1268 = invoke i64 @libxsmm_timer_tick()
          to label %1269 unwind label %1322

1269:                                             ; preds = %1266
  %1270 = invoke noundef i64 @_Z21libxsmm_timer_ncyclesyy(i64 noundef %1267, i64 noundef %1268)
          to label %1271 unwind label %1322

1271:                                             ; preds = %1269
  store i64 %1270, ptr %116, align 8, !tbaa !37
  call void @llvm.lifetime.start.p0(i64 8, ptr %117) #11
  %1272 = load i64, ptr %116, align 8, !tbaa !37
  %1273 = invoke double @libxsmm_timer_duration(i64 noundef 0, i64 noundef %1272)
          to label %1274 unwind label %1326

1274:                                             ; preds = %1271
  %1275 = load i32, ptr %12, align 4, !tbaa !5
  %1276 = sitofp i32 %1275 to double
  %1277 = fdiv double %1273, %1276
  store double %1277, ptr %117, align 8, !tbaa !12
  %1278 = load double, ptr %117, align 8, !tbaa !12
  %1279 = fcmp olt double 0.000000e+00, %1278
  br i1 %1279, label %1280, label %1330

1280:                                             ; preds = %1274
  %1281 = load i64, ptr %116, align 8, !tbaa !37
  %1282 = icmp ne i64 0, %1281
  br i1 %1282, label %1283, label %1330

1283:                                             ; preds = %1280
  %1284 = load ptr, ptr @stdout, align 8, !tbaa !9
  %1285 = load i32, ptr %9, align 4, !tbaa !5
  %1286 = sitofp i32 %1285 to double
  %1287 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %1286, double -1.000000e+00)
  %1288 = load i32, ptr %24, align 4, !tbaa !5
  %1289 = sitofp i32 %1288 to double
  %1290 = load i32, ptr %8, align 4, !tbaa !5
  %1291 = sitofp i32 %1290 to double
  %1292 = fmul double %1289, %1291
  %1293 = load i32, ptr %10, align 4, !tbaa !5
  %1294 = sitofp i32 %1293 to double
  %1295 = fmul double %1292, %1294
  %1296 = fmul double %1287, %1295
  %1297 = load i64, ptr %116, align 8, !tbaa !37
  %1298 = uitofp i64 %1297 to double
  %1299 = fdiv double %1296, %1298
  %1300 = getelementptr inbounds [6 x i8], ptr %28, i64 0, i64 0
  %1301 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %1284, ptr noundef @.str.4, double noundef %1299, ptr noundef %1300) #11
  %1302 = load ptr, ptr @stdout, align 8, !tbaa !9
  %1303 = load double, ptr %27, align 8, !tbaa !12
  %1304 = load double, ptr %117, align 8, !tbaa !12
  %1305 = fdiv double %1303, %1304
  %1306 = getelementptr inbounds [6 x i8], ptr %28, i64 0, i64 0
  %1307 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %1302, ptr noundef @.str.5, double noundef %1305, ptr noundef %1306) #11
  %1308 = load ptr, ptr @stdout, align 8, !tbaa !9
  %1309 = load i32, ptr %24, align 4, !tbaa !5
  %1310 = sext i32 %1309 to i64
  %1311 = load i64, ptr %26, align 8, !tbaa !14
  %1312 = load i32, ptr %21, align 4, !tbaa !5
  %1313 = sext i32 %1312 to i64
  %1314 = mul i64 %1313, 8
  %1315 = sub i64 %1311, %1314
  %1316 = mul i64 %1310, %1315
  %1317 = uitofp i64 %1316 to double
  %1318 = load double, ptr %117, align 8, !tbaa !12
  %1319 = fmul double %1318, 0x41D0000000000000
  %1320 = fdiv double %1317, %1319
  %1321 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %1308, ptr noundef @.str.6, double noundef %1320) #11
  br label %1330

1322:                                             ; preds = %1269, %1266
  %1323 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %1324 = extractvalue { ptr, i32 } %1323, 0
  store ptr %1324, ptr %33, align 8
  %1325 = extractvalue { ptr, i32 } %1323, 1
  store i32 %1325, ptr %34, align 4
  br label %1335

1326:                                             ; preds = %1271
  %1327 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %1328 = extractvalue { ptr, i32 } %1327, 0
  store ptr %1328, ptr %33, align 8
  %1329 = extractvalue { ptr, i32 } %1327, 1
  store i32 %1329, ptr %34, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %117) #11
  br label %1335

1330:                                             ; preds = %1283, %1280, %1274
  %1331 = load ptr, ptr @stdout, align 8, !tbaa !9
  %1332 = load double, ptr %117, align 8, !tbaa !12
  %1333 = fmul double 1.000000e+03, %1332
  %1334 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %1331, ptr noundef @.str.7, double noundef %1333) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %117) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %116) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %100) #11
  br label %1899

1335:                                             ; preds = %1326, %1322
  call void @llvm.lifetime.end.p0(i64 8, ptr %116) #11
  br label %1336

1336:                                             ; preds = %1335, %1244, %1148
  call void @llvm.lifetime.end.p0(i64 8, ptr %100) #11
  br label %1924

1337:                                             ; preds = %903
  %1338 = load ptr, ptr @stdout, align 8, !tbaa !9
  %1339 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %1338, ptr noundef @.str.9) #11
  call void @llvm.lifetime.start.p0(i64 8, ptr %118) #11
  %1340 = invoke i64 @libxsmm_timer_tick()
          to label %1341 unwind label %1347

1341:                                             ; preds = %1337
  store i64 %1340, ptr %118, align 8, !tbaa !37
  call void @llvm.lifetime.start.p0(i64 4, ptr %119) #11
  store i32 0, ptr %119, align 4, !tbaa !5
  br label %1342

1342:                                             ; preds = %1462, %1341
  %1343 = load i32, ptr %119, align 4, !tbaa !5
  %1344 = load i32, ptr %12, align 4, !tbaa !5
  %1345 = icmp slt i32 %1343, %1344
  br i1 %1345, label %1351, label %1346

1346:                                             ; preds = %1342
  store i32 91, ptr %83, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %119) #11
  br label %1465

1347:                                             ; preds = %1337
  %1348 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %1349 = extractvalue { ptr, i32 } %1348, 0
  store ptr %1349, ptr %33, align 8
  %1350 = extractvalue { ptr, i32 } %1348, 1
  store i32 %1350, ptr %34, align 4
  br label %1535

1351:                                             ; preds = %1342
  call void @llvm.lifetime.start.p0(i64 4, ptr %120) #11
  store i32 0, ptr %120, align 4, !tbaa !5
  br label %1352

1352:                                             ; preds = %1458, %1351
  %1353 = load i32, ptr %120, align 4, !tbaa !5
  %1354 = load i32, ptr %24, align 4, !tbaa !5
  %1355 = icmp slt i32 %1353, %1354
  br i1 %1355, label %1357, label %1356

1356:                                             ; preds = %1352
  store i32 94, ptr %83, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %120) #11
  br label %1461

1357:                                             ; preds = %1352
  br label %1358

1358:                                             ; preds = %1357
  call void @llvm.lifetime.start.p0(i64 1, ptr %121) #11
  store i8 78, ptr %121, align 1, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 1, ptr %122) #11
  store i8 78, ptr %122, align 1, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %123) #11
  %1359 = load i32, ptr %8, align 4, !tbaa !5
  store i32 %1359, ptr %123, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %124) #11
  %1360 = load i32, ptr %9, align 4, !tbaa !5
  store i32 %1360, ptr %124, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %125) #11
  %1361 = load i32, ptr %10, align 4, !tbaa !5
  store i32 %1361, ptr %125, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %126) #11
  %1362 = load i32, ptr %13, align 4, !tbaa !5
  store i32 %1362, ptr %126, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %127) #11
  %1363 = load i32, ptr %14, align 4, !tbaa !5
  store i32 %1363, ptr %127, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %128) #11
  %1364 = load i32, ptr %15, align 4, !tbaa !5
  store i32 %1364, ptr %128, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %129) #11
  %1365 = load double, ptr %18, align 8, !tbaa !12
  store double %1365, ptr %129, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 8, ptr %130) #11
  %1366 = load double, ptr %19, align 8, !tbaa !12
  store double %1366, ptr %130, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 4, ptr %131) #11
  call void @llvm.lifetime.start.p0(i64 4, ptr %132) #11
  store i32 0, ptr %132, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %133) #11
  store i32 0, ptr %132, align 4, !tbaa !5
  br label %1367

1367:                                             ; preds = %1452, %1358
  %1368 = load i32, ptr %132, align 4, !tbaa !5
  %1369 = load i32, ptr %123, align 4, !tbaa !5
  %1370 = icmp slt i32 %1368, %1369
  br i1 %1370, label %1371, label %1455

1371:                                             ; preds = %1367
  store i32 0, ptr %133, align 4, !tbaa !5
  br label %1372

1372:                                             ; preds = %1448, %1371
  %1373 = load i32, ptr %133, align 4, !tbaa !5
  %1374 = load i32, ptr %124, align 4, !tbaa !5
  %1375 = icmp slt i32 %1373, %1374
  br i1 %1375, label %1376, label %1451

1376:                                             ; preds = %1372
  store i32 0, ptr %131, align 4, !tbaa !5
  br label %1377

1377:                                             ; preds = %1440, %1376
  %1378 = load i32, ptr %131, align 4, !tbaa !5
  %1379 = load i32, ptr %125, align 4, !tbaa !5
  %1380 = icmp slt i32 %1378, %1379
  br i1 %1380, label %1381, label %1447

1381:                                             ; preds = %1377
  %1382 = load ptr, ptr %36, align 8, !tbaa !9
  %1383 = load i32, ptr %21, align 4, !tbaa !5
  %1384 = sext i32 %1383 to i64
  %1385 = load i32, ptr %120, align 4, !tbaa !5
  %1386 = invoke noundef i32 @_ZZ4mainENK4raii7shuffleEi(ptr noundef nonnull align 8 dereferenceable(40) %32, i32 noundef %1385)
          to label %1387 unwind label %1443

1387:                                             ; preds = %1381
  %1388 = sext i32 %1386 to i64
  %1389 = mul i64 %1384, %1388
  %1390 = getelementptr inbounds double, ptr %1382, i64 %1389
  %1391 = load i32, ptr %131, align 4, !tbaa !5
  %1392 = load i32, ptr %127, align 4, !tbaa !5
  %1393 = mul nsw i32 %1391, %1392
  %1394 = load i32, ptr %133, align 4, !tbaa !5
  %1395 = add nsw i32 %1393, %1394
  %1396 = sext i32 %1395 to i64
  %1397 = getelementptr inbounds double, ptr %1390, i64 %1396
  %1398 = load double, ptr %1397, align 8, !tbaa !12
  %1399 = load ptr, ptr %35, align 8, !tbaa !9
  %1400 = load i32, ptr %133, align 4, !tbaa !5
  %1401 = load i32, ptr %126, align 4, !tbaa !5
  %1402 = mul nsw i32 %1400, %1401
  %1403 = load i32, ptr %132, align 4, !tbaa !5
  %1404 = add nsw i32 %1402, %1403
  %1405 = sext i32 %1404 to i64
  %1406 = getelementptr inbounds double, ptr %1399, i64 %1405
  %1407 = load double, ptr %1406, align 8, !tbaa !12
  %1408 = fmul double %1407, 1.000000e+00
  %1409 = load ptr, ptr %37, align 8, !tbaa !9
  %1410 = load i32, ptr %22, align 4, !tbaa !5
  %1411 = sext i32 %1410 to i64
  %1412 = load i32, ptr %120, align 4, !tbaa !5
  %1413 = sext i32 %1412 to i64
  %1414 = mul i64 %1411, %1413
  %1415 = getelementptr inbounds double, ptr %1409, i64 %1414
  %1416 = load i32, ptr %131, align 4, !tbaa !5
  %1417 = load i32, ptr %128, align 4, !tbaa !5
  %1418 = mul nsw i32 %1416, %1417
  %1419 = load i32, ptr %132, align 4, !tbaa !5
  %1420 = add nsw i32 %1418, %1419
  %1421 = sext i32 %1420 to i64
  %1422 = getelementptr inbounds double, ptr %1415, i64 %1421
  %1423 = load double, ptr %1422, align 8, !tbaa !12
  %1424 = fmul double %1423, 1.000000e+00
  %1425 = call double @llvm.fmuladd.f64(double %1398, double %1408, double %1424)
  %1426 = load ptr, ptr %37, align 8, !tbaa !9
  %1427 = load i32, ptr %22, align 4, !tbaa !5
  %1428 = sext i32 %1427 to i64
  %1429 = load i32, ptr %120, align 4, !tbaa !5
  %1430 = sext i32 %1429 to i64
  %1431 = mul i64 %1428, %1430
  %1432 = getelementptr inbounds double, ptr %1426, i64 %1431
  %1433 = load i32, ptr %131, align 4, !tbaa !5
  %1434 = load i32, ptr %128, align 4, !tbaa !5
  %1435 = mul nsw i32 %1433, %1434
  %1436 = load i32, ptr %132, align 4, !tbaa !5
  %1437 = add nsw i32 %1435, %1436
  %1438 = sext i32 %1437 to i64
  %1439 = getelementptr inbounds double, ptr %1432, i64 %1438
  store double %1425, ptr %1439, align 8, !tbaa !12
  br label %1440

1440:                                             ; preds = %1387
  %1441 = load i32, ptr %131, align 4, !tbaa !5
  %1442 = add nsw i32 %1441, 1
  store i32 %1442, ptr %131, align 4, !tbaa !5
  br label %1377, !llvm.loop !49

1443:                                             ; preds = %1381
  %1444 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %1445 = extractvalue { ptr, i32 } %1444, 0
  store ptr %1445, ptr %33, align 8
  %1446 = extractvalue { ptr, i32 } %1444, 1
  store i32 %1446, ptr %34, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %133) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %132) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %131) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %130) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %129) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %128) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %127) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %126) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %125) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %124) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %123) #11
  call void @llvm.lifetime.end.p0(i64 1, ptr %122) #11
  call void @llvm.lifetime.end.p0(i64 1, ptr %121) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %120) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %119) #11
  br label %1535

1447:                                             ; preds = %1377
  br label %1448

1448:                                             ; preds = %1447
  %1449 = load i32, ptr %133, align 4, !tbaa !5
  %1450 = add nsw i32 %1449, 1
  store i32 %1450, ptr %133, align 4, !tbaa !5
  br label %1372, !llvm.loop !50

1451:                                             ; preds = %1372
  br label %1452

1452:                                             ; preds = %1451
  %1453 = load i32, ptr %132, align 4, !tbaa !5
  %1454 = add nsw i32 %1453, 1
  store i32 %1454, ptr %132, align 4, !tbaa !5
  br label %1367, !llvm.loop !51

1455:                                             ; preds = %1367
  call void @llvm.lifetime.end.p0(i64 4, ptr %133) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %132) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %131) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %130) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %129) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %128) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %127) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %126) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %125) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %124) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %123) #11
  call void @llvm.lifetime.end.p0(i64 1, ptr %122) #11
  call void @llvm.lifetime.end.p0(i64 1, ptr %121) #11
  br label %1456

1456:                                             ; preds = %1455
  br label %1457

1457:                                             ; preds = %1456
  br label %1458

1458:                                             ; preds = %1457
  %1459 = load i32, ptr %120, align 4, !tbaa !5
  %1460 = add nsw i32 %1459, 1
  store i32 %1460, ptr %120, align 4, !tbaa !5
  br label %1352, !llvm.loop !52

1461:                                             ; preds = %1356
  br label %1462

1462:                                             ; preds = %1461
  %1463 = load i32, ptr %119, align 4, !tbaa !5
  %1464 = add nsw i32 %1463, 1
  store i32 %1464, ptr %119, align 4, !tbaa !5
  br label %1342, !llvm.loop !53

1465:                                             ; preds = %1346
  call void @llvm.lifetime.start.p0(i64 8, ptr %134) #11
  %1466 = load i64, ptr %118, align 8, !tbaa !37
  %1467 = invoke i64 @libxsmm_timer_tick()
          to label %1468 unwind label %1521

1468:                                             ; preds = %1465
  %1469 = invoke noundef i64 @_Z21libxsmm_timer_ncyclesyy(i64 noundef %1466, i64 noundef %1467)
          to label %1470 unwind label %1521

1470:                                             ; preds = %1468
  store i64 %1469, ptr %134, align 8, !tbaa !37
  call void @llvm.lifetime.start.p0(i64 8, ptr %135) #11
  %1471 = load i64, ptr %134, align 8, !tbaa !37
  %1472 = invoke double @libxsmm_timer_duration(i64 noundef 0, i64 noundef %1471)
          to label %1473 unwind label %1525

1473:                                             ; preds = %1470
  %1474 = load i32, ptr %12, align 4, !tbaa !5
  %1475 = sitofp i32 %1474 to double
  %1476 = fdiv double %1472, %1475
  store double %1476, ptr %135, align 8, !tbaa !12
  %1477 = load double, ptr %135, align 8, !tbaa !12
  %1478 = fcmp olt double 0.000000e+00, %1477
  br i1 %1478, label %1479, label %1529

1479:                                             ; preds = %1473
  %1480 = load i64, ptr %134, align 8, !tbaa !37
  %1481 = icmp ne i64 0, %1480
  br i1 %1481, label %1482, label %1529

1482:                                             ; preds = %1479
  %1483 = load ptr, ptr @stdout, align 8, !tbaa !9
  %1484 = load i32, ptr %9, align 4, !tbaa !5
  %1485 = sitofp i32 %1484 to double
  %1486 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %1485, double -1.000000e+00)
  %1487 = load i32, ptr %24, align 4, !tbaa !5
  %1488 = sitofp i32 %1487 to double
  %1489 = load i32, ptr %8, align 4, !tbaa !5
  %1490 = sitofp i32 %1489 to double
  %1491 = fmul double %1488, %1490
  %1492 = load i32, ptr %10, align 4, !tbaa !5
  %1493 = sitofp i32 %1492 to double
  %1494 = fmul double %1491, %1493
  %1495 = fmul double %1486, %1494
  %1496 = load i64, ptr %134, align 8, !tbaa !37
  %1497 = uitofp i64 %1496 to double
  %1498 = fdiv double %1495, %1497
  %1499 = getelementptr inbounds [6 x i8], ptr %28, i64 0, i64 0
  %1500 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %1483, ptr noundef @.str.4, double noundef %1498, ptr noundef %1499) #11
  %1501 = load ptr, ptr @stdout, align 8, !tbaa !9
  %1502 = load double, ptr %27, align 8, !tbaa !12
  %1503 = load double, ptr %135, align 8, !tbaa !12
  %1504 = fdiv double %1502, %1503
  %1505 = getelementptr inbounds [6 x i8], ptr %28, i64 0, i64 0
  %1506 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %1501, ptr noundef @.str.5, double noundef %1504, ptr noundef %1505) #11
  %1507 = load ptr, ptr @stdout, align 8, !tbaa !9
  %1508 = load i32, ptr %24, align 4, !tbaa !5
  %1509 = sext i32 %1508 to i64
  %1510 = load i64, ptr %26, align 8, !tbaa !14
  %1511 = load i32, ptr %20, align 4, !tbaa !5
  %1512 = sext i32 %1511 to i64
  %1513 = mul i64 %1512, 8
  %1514 = sub i64 %1510, %1513
  %1515 = mul i64 %1509, %1514
  %1516 = uitofp i64 %1515 to double
  %1517 = load double, ptr %135, align 8, !tbaa !12
  %1518 = fmul double %1517, 0x41D0000000000000
  %1519 = fdiv double %1516, %1518
  %1520 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %1507, ptr noundef @.str.6, double noundef %1519) #11
  br label %1529

1521:                                             ; preds = %1468, %1465
  %1522 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %1523 = extractvalue { ptr, i32 } %1522, 0
  store ptr %1523, ptr %33, align 8
  %1524 = extractvalue { ptr, i32 } %1522, 1
  store i32 %1524, ptr %34, align 4
  br label %1534

1525:                                             ; preds = %1470
  %1526 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %1527 = extractvalue { ptr, i32 } %1526, 0
  store ptr %1527, ptr %33, align 8
  %1528 = extractvalue { ptr, i32 } %1526, 1
  store i32 %1528, ptr %34, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %135) #11
  br label %1534

1529:                                             ; preds = %1482, %1479, %1473
  %1530 = load ptr, ptr @stdout, align 8, !tbaa !9
  %1531 = load double, ptr %135, align 8, !tbaa !12
  %1532 = fmul double 1.000000e+03, %1531
  %1533 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %1530, ptr noundef @.str.7, double noundef %1532) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %135) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %134) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %118) #11
  br label %1899

1534:                                             ; preds = %1525, %1521
  call void @llvm.lifetime.end.p0(i64 8, ptr %134) #11
  br label %1535

1535:                                             ; preds = %1534, %1443, %1347
  call void @llvm.lifetime.end.p0(i64 8, ptr %118) #11
  br label %1924

1536:                                             ; preds = %903
  %1537 = load ptr, ptr @stdout, align 8, !tbaa !9
  %1538 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %1537, ptr noundef @.str.10) #11
  call void @llvm.lifetime.start.p0(i64 8, ptr %136) #11
  %1539 = invoke i64 @libxsmm_timer_tick()
          to label %1540 unwind label %1546

1540:                                             ; preds = %1536
  store i64 %1539, ptr %136, align 8, !tbaa !37
  call void @llvm.lifetime.start.p0(i64 4, ptr %137) #11
  store i32 0, ptr %137, align 4, !tbaa !5
  br label %1541

1541:                                             ; preds = %1659, %1540
  %1542 = load i32, ptr %137, align 4, !tbaa !5
  %1543 = load i32, ptr %12, align 4, !tbaa !5
  %1544 = icmp slt i32 %1542, %1543
  br i1 %1544, label %1550, label %1545

1545:                                             ; preds = %1541
  store i32 108, ptr %83, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %137) #11
  br label %1662

1546:                                             ; preds = %1536
  %1547 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %1548 = extractvalue { ptr, i32 } %1547, 0
  store ptr %1548, ptr %33, align 8
  %1549 = extractvalue { ptr, i32 } %1547, 1
  store i32 %1549, ptr %34, align 4
  br label %1733

1550:                                             ; preds = %1541
  call void @llvm.lifetime.start.p0(i64 4, ptr %138) #11
  store i32 0, ptr %138, align 4, !tbaa !5
  br label %1551

1551:                                             ; preds = %1655, %1550
  %1552 = load i32, ptr %138, align 4, !tbaa !5
  %1553 = load i32, ptr %24, align 4, !tbaa !5
  %1554 = icmp slt i32 %1552, %1553
  br i1 %1554, label %1556, label %1555

1555:                                             ; preds = %1551
  store i32 111, ptr %83, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %138) #11
  br label %1658

1556:                                             ; preds = %1551
  call void @llvm.lifetime.start.p0(i64 4, ptr %139) #11
  store i32 0, ptr %139, align 4, !tbaa !5
  br label %1557

1557:                                             ; preds = %1556
  call void @llvm.lifetime.start.p0(i64 1, ptr %140) #11
  store i8 78, ptr %140, align 1, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 1, ptr %141) #11
  store i8 78, ptr %141, align 1, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %142) #11
  %1558 = load i32, ptr %8, align 4, !tbaa !5
  store i32 %1558, ptr %142, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %143) #11
  %1559 = load i32, ptr %9, align 4, !tbaa !5
  store i32 %1559, ptr %143, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %144) #11
  %1560 = load i32, ptr %10, align 4, !tbaa !5
  store i32 %1560, ptr %144, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %145) #11
  %1561 = load i32, ptr %13, align 4, !tbaa !5
  store i32 %1561, ptr %145, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %146) #11
  %1562 = load i32, ptr %14, align 4, !tbaa !5
  store i32 %1562, ptr %146, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %147) #11
  %1563 = load i32, ptr %15, align 4, !tbaa !5
  store i32 %1563, ptr %147, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %148) #11
  %1564 = load double, ptr %18, align 8, !tbaa !12
  store double %1564, ptr %148, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 8, ptr %149) #11
  %1565 = load double, ptr %19, align 8, !tbaa !12
  store double %1565, ptr %149, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 4, ptr %150) #11
  call void @llvm.lifetime.start.p0(i64 4, ptr %151) #11
  store i32 0, ptr %151, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %152) #11
  store i32 0, ptr %151, align 4, !tbaa !5
  br label %1566

1566:                                             ; preds = %1649, %1557
  %1567 = load i32, ptr %151, align 4, !tbaa !5
  %1568 = load i32, ptr %142, align 4, !tbaa !5
  %1569 = icmp slt i32 %1567, %1568
  br i1 %1569, label %1570, label %1652

1570:                                             ; preds = %1566
  store i32 0, ptr %152, align 4, !tbaa !5
  br label %1571

1571:                                             ; preds = %1645, %1570
  %1572 = load i32, ptr %152, align 4, !tbaa !5
  %1573 = load i32, ptr %143, align 4, !tbaa !5
  %1574 = icmp slt i32 %1572, %1573
  br i1 %1574, label %1575, label %1648

1575:                                             ; preds = %1571
  store i32 0, ptr %150, align 4, !tbaa !5
  br label %1576

1576:                                             ; preds = %1637, %1575
  %1577 = load i32, ptr %150, align 4, !tbaa !5
  %1578 = load i32, ptr %144, align 4, !tbaa !5
  %1579 = icmp slt i32 %1577, %1578
  br i1 %1579, label %1580, label %1644

1580:                                             ; preds = %1576
  %1581 = load ptr, ptr %36, align 8, !tbaa !9
  %1582 = load i32, ptr %21, align 4, !tbaa !5
  %1583 = sext i32 %1582 to i64
  %1584 = load i32, ptr %138, align 4, !tbaa !5
  %1585 = invoke noundef i32 @_ZZ4mainENK4raii7shuffleEi(ptr noundef nonnull align 8 dereferenceable(40) %32, i32 noundef %1584)
          to label %1586 unwind label %1640

1586:                                             ; preds = %1580
  %1587 = sext i32 %1585 to i64
  %1588 = mul i64 %1583, %1587
  %1589 = getelementptr inbounds double, ptr %1581, i64 %1588
  %1590 = load i32, ptr %150, align 4, !tbaa !5
  %1591 = load i32, ptr %146, align 4, !tbaa !5
  %1592 = mul nsw i32 %1590, %1591
  %1593 = load i32, ptr %152, align 4, !tbaa !5
  %1594 = add nsw i32 %1592, %1593
  %1595 = sext i32 %1594 to i64
  %1596 = getelementptr inbounds double, ptr %1589, i64 %1595
  %1597 = load double, ptr %1596, align 8, !tbaa !12
  %1598 = load ptr, ptr %35, align 8, !tbaa !9
  %1599 = load i32, ptr %20, align 4, !tbaa !5
  %1600 = sext i32 %1599 to i64
  %1601 = load i32, ptr %138, align 4, !tbaa !5
  %1602 = invoke noundef i32 @_ZZ4mainENK4raii7shuffleEi(ptr noundef nonnull align 8 dereferenceable(40) %32, i32 noundef %1601)
          to label %1603 unwind label %1640

1603:                                             ; preds = %1586
  %1604 = sext i32 %1602 to i64
  %1605 = mul i64 %1600, %1604
  %1606 = getelementptr inbounds double, ptr %1598, i64 %1605
  %1607 = load i32, ptr %152, align 4, !tbaa !5
  %1608 = load i32, ptr %145, align 4, !tbaa !5
  %1609 = mul nsw i32 %1607, %1608
  %1610 = load i32, ptr %151, align 4, !tbaa !5
  %1611 = add nsw i32 %1609, %1610
  %1612 = sext i32 %1611 to i64
  %1613 = getelementptr inbounds double, ptr %1606, i64 %1612
  %1614 = load double, ptr %1613, align 8, !tbaa !12
  %1615 = fmul double %1614, 1.000000e+00
  %1616 = load ptr, ptr %37, align 8, !tbaa !9
  %1617 = getelementptr inbounds double, ptr %1616, i64 0
  %1618 = load i32, ptr %150, align 4, !tbaa !5
  %1619 = load i32, ptr %147, align 4, !tbaa !5
  %1620 = mul nsw i32 %1618, %1619
  %1621 = load i32, ptr %151, align 4, !tbaa !5
  %1622 = add nsw i32 %1620, %1621
  %1623 = sext i32 %1622 to i64
  %1624 = getelementptr inbounds double, ptr %1617, i64 %1623
  %1625 = load double, ptr %1624, align 8, !tbaa !12
  %1626 = fmul double %1625, 1.000000e+00
  %1627 = call double @llvm.fmuladd.f64(double %1597, double %1615, double %1626)
  %1628 = load ptr, ptr %37, align 8, !tbaa !9
  %1629 = getelementptr inbounds double, ptr %1628, i64 0
  %1630 = load i32, ptr %150, align 4, !tbaa !5
  %1631 = load i32, ptr %147, align 4, !tbaa !5
  %1632 = mul nsw i32 %1630, %1631
  %1633 = load i32, ptr %151, align 4, !tbaa !5
  %1634 = add nsw i32 %1632, %1633
  %1635 = sext i32 %1634 to i64
  %1636 = getelementptr inbounds double, ptr %1629, i64 %1635
  store double %1627, ptr %1636, align 8, !tbaa !12
  br label %1637

1637:                                             ; preds = %1603
  %1638 = load i32, ptr %150, align 4, !tbaa !5
  %1639 = add nsw i32 %1638, 1
  store i32 %1639, ptr %150, align 4, !tbaa !5
  br label %1576, !llvm.loop !54

1640:                                             ; preds = %1586, %1580
  %1641 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %1642 = extractvalue { ptr, i32 } %1641, 0
  store ptr %1642, ptr %33, align 8
  %1643 = extractvalue { ptr, i32 } %1641, 1
  store i32 %1643, ptr %34, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %152) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %151) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %150) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %149) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %148) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %147) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %146) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %145) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %144) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %143) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %142) #11
  call void @llvm.lifetime.end.p0(i64 1, ptr %141) #11
  call void @llvm.lifetime.end.p0(i64 1, ptr %140) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %139) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %138) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %137) #11
  br label %1733

1644:                                             ; preds = %1576
  br label %1645

1645:                                             ; preds = %1644
  %1646 = load i32, ptr %152, align 4, !tbaa !5
  %1647 = add nsw i32 %1646, 1
  store i32 %1647, ptr %152, align 4, !tbaa !5
  br label %1571, !llvm.loop !55

1648:                                             ; preds = %1571
  br label %1649

1649:                                             ; preds = %1648
  %1650 = load i32, ptr %151, align 4, !tbaa !5
  %1651 = add nsw i32 %1650, 1
  store i32 %1651, ptr %151, align 4, !tbaa !5
  br label %1566, !llvm.loop !56

1652:                                             ; preds = %1566
  call void @llvm.lifetime.end.p0(i64 4, ptr %152) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %151) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %150) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %149) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %148) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %147) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %146) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %145) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %144) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %143) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %142) #11
  call void @llvm.lifetime.end.p0(i64 1, ptr %141) #11
  call void @llvm.lifetime.end.p0(i64 1, ptr %140) #11
  br label %1653

1653:                                             ; preds = %1652
  br label %1654

1654:                                             ; preds = %1653
  call void @llvm.lifetime.end.p0(i64 4, ptr %139) #11
  br label %1655

1655:                                             ; preds = %1654
  %1656 = load i32, ptr %138, align 4, !tbaa !5
  %1657 = add nsw i32 %1656, 1
  store i32 %1657, ptr %138, align 4, !tbaa !5
  br label %1551, !llvm.loop !57

1658:                                             ; preds = %1555
  br label %1659

1659:                                             ; preds = %1658
  %1660 = load i32, ptr %137, align 4, !tbaa !5
  %1661 = add nsw i32 %1660, 1
  store i32 %1661, ptr %137, align 4, !tbaa !5
  br label %1541, !llvm.loop !58

1662:                                             ; preds = %1545
  call void @llvm.lifetime.start.p0(i64 8, ptr %153) #11
  %1663 = load i64, ptr %136, align 8, !tbaa !37
  %1664 = invoke i64 @libxsmm_timer_tick()
          to label %1665 unwind label %1719

1665:                                             ; preds = %1662
  %1666 = invoke noundef i64 @_Z21libxsmm_timer_ncyclesyy(i64 noundef %1663, i64 noundef %1664)
          to label %1667 unwind label %1719

1667:                                             ; preds = %1665
  store i64 %1666, ptr %153, align 8, !tbaa !37
  call void @llvm.lifetime.start.p0(i64 8, ptr %154) #11
  %1668 = load i64, ptr %153, align 8, !tbaa !37
  %1669 = invoke double @libxsmm_timer_duration(i64 noundef 0, i64 noundef %1668)
          to label %1670 unwind label %1723

1670:                                             ; preds = %1667
  %1671 = load i32, ptr %12, align 4, !tbaa !5
  %1672 = sitofp i32 %1671 to double
  %1673 = fdiv double %1669, %1672
  store double %1673, ptr %154, align 8, !tbaa !12
  %1674 = load double, ptr %154, align 8, !tbaa !12
  %1675 = fcmp olt double 0.000000e+00, %1674
  br i1 %1675, label %1676, label %1727

1676:                                             ; preds = %1670
  %1677 = load i64, ptr %153, align 8, !tbaa !37
  %1678 = icmp ne i64 0, %1677
  br i1 %1678, label %1679, label %1727

1679:                                             ; preds = %1676
  %1680 = load ptr, ptr @stdout, align 8, !tbaa !9
  %1681 = load i32, ptr %9, align 4, !tbaa !5
  %1682 = sitofp i32 %1681 to double
  %1683 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %1682, double -1.000000e+00)
  %1684 = load i32, ptr %24, align 4, !tbaa !5
  %1685 = sitofp i32 %1684 to double
  %1686 = load i32, ptr %8, align 4, !tbaa !5
  %1687 = sitofp i32 %1686 to double
  %1688 = fmul double %1685, %1687
  %1689 = load i32, ptr %10, align 4, !tbaa !5
  %1690 = sitofp i32 %1689 to double
  %1691 = fmul double %1688, %1690
  %1692 = fmul double %1683, %1691
  %1693 = load i64, ptr %153, align 8, !tbaa !37
  %1694 = uitofp i64 %1693 to double
  %1695 = fdiv double %1692, %1694
  %1696 = getelementptr inbounds [6 x i8], ptr %28, i64 0, i64 0
  %1697 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %1680, ptr noundef @.str.4, double noundef %1695, ptr noundef %1696) #11
  %1698 = load ptr, ptr @stdout, align 8, !tbaa !9
  %1699 = load double, ptr %27, align 8, !tbaa !12
  %1700 = load double, ptr %154, align 8, !tbaa !12
  %1701 = fdiv double %1699, %1700
  %1702 = getelementptr inbounds [6 x i8], ptr %28, i64 0, i64 0
  %1703 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %1698, ptr noundef @.str.5, double noundef %1701, ptr noundef %1702) #11
  %1704 = load ptr, ptr @stdout, align 8, !tbaa !9
  %1705 = load i32, ptr %24, align 4, !tbaa !5
  %1706 = sext i32 %1705 to i64
  %1707 = load i64, ptr %26, align 8, !tbaa !14
  %1708 = load i32, ptr %22, align 4, !tbaa !5
  %1709 = sext i32 %1708 to i64
  %1710 = mul i64 8, %1709
  %1711 = mul i64 %1710, 2
  %1712 = sub i64 %1707, %1711
  %1713 = mul i64 %1706, %1712
  %1714 = uitofp i64 %1713 to double
  %1715 = load double, ptr %154, align 8, !tbaa !12
  %1716 = fmul double %1715, 0x41D0000000000000
  %1717 = fdiv double %1714, %1716
  %1718 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %1704, ptr noundef @.str.6, double noundef %1717) #11
  br label %1727

1719:                                             ; preds = %1665, %1662
  %1720 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %1721 = extractvalue { ptr, i32 } %1720, 0
  store ptr %1721, ptr %33, align 8
  %1722 = extractvalue { ptr, i32 } %1720, 1
  store i32 %1722, ptr %34, align 4
  br label %1732

1723:                                             ; preds = %1667
  %1724 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %1725 = extractvalue { ptr, i32 } %1724, 0
  store ptr %1725, ptr %33, align 8
  %1726 = extractvalue { ptr, i32 } %1724, 1
  store i32 %1726, ptr %34, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %154) #11
  br label %1732

1727:                                             ; preds = %1679, %1676, %1670
  %1728 = load ptr, ptr @stdout, align 8, !tbaa !9
  %1729 = load double, ptr %154, align 8, !tbaa !12
  %1730 = fmul double 1.000000e+03, %1729
  %1731 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %1728, ptr noundef @.str.7, double noundef %1730) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %154) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %153) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %136) #11
  br label %1899

1732:                                             ; preds = %1723, %1719
  call void @llvm.lifetime.end.p0(i64 8, ptr %153) #11
  br label %1733

1733:                                             ; preds = %1732, %1640, %1546
  call void @llvm.lifetime.end.p0(i64 8, ptr %136) #11
  br label %1924

1734:                                             ; preds = %903
  %1735 = load ptr, ptr @stdout, align 8, !tbaa !9
  %1736 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %1735, ptr noundef @.str.11) #11
  call void @llvm.lifetime.start.p0(i64 8, ptr %155) #11
  %1737 = invoke i64 @libxsmm_timer_tick()
          to label %1738 unwind label %1744

1738:                                             ; preds = %1734
  store i64 %1737, ptr %155, align 8, !tbaa !37
  call void @llvm.lifetime.start.p0(i64 4, ptr %156) #11
  store i32 0, ptr %156, align 4, !tbaa !5
  br label %1739

1739:                                             ; preds = %1837, %1738
  %1740 = load i32, ptr %156, align 4, !tbaa !5
  %1741 = load i32, ptr %12, align 4, !tbaa !5
  %1742 = icmp slt i32 %1740, %1741
  br i1 %1742, label %1748, label %1743

1743:                                             ; preds = %1739
  store i32 125, ptr %83, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %156) #11
  br label %1840

1744:                                             ; preds = %1734
  %1745 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %1746 = extractvalue { ptr, i32 } %1745, 0
  store ptr %1746, ptr %33, align 8
  %1747 = extractvalue { ptr, i32 } %1745, 1
  store i32 %1747, ptr %34, align 4
  br label %1896

1748:                                             ; preds = %1739
  call void @llvm.lifetime.start.p0(i64 4, ptr %157) #11
  store i32 0, ptr %157, align 4, !tbaa !5
  br label %1749

1749:                                             ; preds = %1833, %1748
  %1750 = load i32, ptr %157, align 4, !tbaa !5
  %1751 = load i32, ptr %24, align 4, !tbaa !5
  %1752 = icmp slt i32 %1750, %1751
  br i1 %1752, label %1754, label %1753

1753:                                             ; preds = %1749
  store i32 128, ptr %83, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %157) #11
  br label %1836

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

1755:                                             ; preds = %1754
  call void @llvm.lifetime.start.p0(i64 1, ptr %159) #11
  store i8 78, ptr %159, align 1, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 1, ptr %160) #11
  store i8 78, ptr %160, align 1, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %161) #11
  %1756 = load i32, ptr %8, align 4, !tbaa !5
  store i32 %1756, ptr %161, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %162) #11
  %1757 = load i32, ptr %9, align 4, !tbaa !5
  store i32 %1757, ptr %162, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %163) #11
  %1758 = load i32, ptr %10, align 4, !tbaa !5
  store i32 %1758, ptr %163, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %164) #11
  %1759 = load i32, ptr %13, align 4, !tbaa !5
  store i32 %1759, ptr %164, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %165) #11
  %1760 = load i32, ptr %14, align 4, !tbaa !5
  store i32 %1760, ptr %165, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %166) #11
  %1761 = load i32, ptr %15, align 4, !tbaa !5
  store i32 %1761, ptr %166, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %167) #11
  %1762 = load double, ptr %18, align 8, !tbaa !12
  store double %1762, ptr %167, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 8, ptr %168) #11
  %1763 = load double, ptr %19, align 8, !tbaa !12
  store double %1763, ptr %168, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 4, ptr %169) #11
  call void @llvm.lifetime.start.p0(i64 4, ptr %170) #11
  store i32 0, ptr %170, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %171) #11
  store i32 0, ptr %170, align 4, !tbaa !5
  br label %1764

1764:                                             ; preds = %1827, %1755
  %1765 = load i32, ptr %170, align 4, !tbaa !5
  %1766 = load i32, ptr %161, align 4, !tbaa !5
  %1767 = icmp slt i32 %1765, %1766
  br i1 %1767, label %1768, label %1830

1768:                                             ; preds = %1764
  store i32 0, ptr %171, align 4, !tbaa !5
  br label %1769

1769:                                             ; preds = %1823, %1768
  %1770 = load i32, ptr %171, align 4, !tbaa !5
  %1771 = load i32, ptr %162, align 4, !tbaa !5
  %1772 = icmp slt i32 %1770, %1771
  br i1 %1772, label %1773, label %1826

1773:                                             ; preds = %1769
  store i32 0, ptr %169, align 4, !tbaa !5
  br label %1774

1774:                                             ; preds = %1819, %1773
  %1775 = load i32, ptr %169, align 4, !tbaa !5
  %1776 = load i32, ptr %163, align 4, !tbaa !5
  %1777 = icmp slt i32 %1775, %1776
  br i1 %1777, label %1778, label %1822

1778:                                             ; preds = %1774
  %1779 = load ptr, ptr %36, align 8, !tbaa !9
  %1780 = load i32, ptr %169, align 4, !tbaa !5
  %1781 = load i32, ptr %165, align 4, !tbaa !5
  %1782 = mul nsw i32 %1780, %1781
  %1783 = load i32, ptr %171, align 4, !tbaa !5
  %1784 = add nsw i32 %1782, %1783
  %1785 = sext i32 %1784 to i64
  %1786 = getelementptr inbounds double, ptr %1779, i64 %1785
  %1787 = load double, ptr %1786, align 8, !tbaa !12
  %1788 = load ptr, ptr %35, align 8, !tbaa !9
  %1789 = load i32, ptr %171, align 4, !tbaa !5
  %1790 = load i32, ptr %164, align 4, !tbaa !5
  %1791 = mul nsw i32 %1789, %1790
  %1792 = load i32, ptr %170, align 4, !tbaa !5
  %1793 = add nsw i32 %1791, %1792
  %1794 = sext i32 %1793 to i64
  %1795 = getelementptr inbounds double, ptr %1788, i64 %1794
  %1796 = load double, ptr %1795, align 8, !tbaa !12
  %1797 = fmul double %1796, 1.000000e+00
  %1798 = load ptr, ptr %37, align 8, !tbaa !9
  %1799 = getelementptr inbounds double, ptr %1798, i64 0
  %1800 = load i32, ptr %169, align 4, !tbaa !5
  %1801 = load i32, ptr %166, align 4, !tbaa !5
  %1802 = mul nsw i32 %1800, %1801
  %1803 = load i32, ptr %170, align 4, !tbaa !5
  %1804 = add nsw i32 %1802, %1803
  %1805 = sext i32 %1804 to i64
  %1806 = getelementptr inbounds double, ptr %1799, i64 %1805
  %1807 = load double, ptr %1806, align 8, !tbaa !12
  %1808 = fmul double %1807, 1.000000e+00
  %1809 = call double @llvm.fmuladd.f64(double %1787, double %1797, double %1808)
  %1810 = load ptr, ptr %37, align 8, !tbaa !9
  %1811 = getelementptr inbounds double, ptr %1810, i64 0
  %1812 = load i32, ptr %169, align 4, !tbaa !5
  %1813 = load i32, ptr %166, align 4, !tbaa !5
  %1814 = mul nsw i32 %1812, %1813
  %1815 = load i32, ptr %170, align 4, !tbaa !5
  %1816 = add nsw i32 %1814, %1815
  %1817 = sext i32 %1816 to i64
  %1818 = getelementptr inbounds double, ptr %1811, i64 %1817
  store double %1809, ptr %1818, align 8, !tbaa !12
  br label %1819

1819:                                             ; preds = %1778
  %1820 = load i32, ptr %169, align 4, !tbaa !5
  %1821 = add nsw i32 %1820, 1
  store i32 %1821, ptr %169, align 4, !tbaa !5
  br label %1774, !llvm.loop !59

1822:                                             ; preds = %1774
  br label %1823

1823:                                             ; preds = %1822
  %1824 = load i32, ptr %171, align 4, !tbaa !5
  %1825 = add nsw i32 %1824, 1
  store i32 %1825, ptr %171, align 4, !tbaa !5
  br label %1769, !llvm.loop !60

1826:                                             ; preds = %1769
  br label %1827

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

1830:                                             ; preds = %1764
  call void @llvm.lifetime.end.p0(i64 4, ptr %171) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %170) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %169) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %168) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %167) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %166) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %165) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %164) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %163) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %162) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %161) #11
  call void @llvm.lifetime.end.p0(i64 1, ptr %160) #11
  call void @llvm.lifetime.end.p0(i64 1, ptr %159) #11
  br label %1831

1831:                                             ; preds = %1830
  br label %1832

1832:                                             ; preds = %1831
  call void @llvm.lifetime.end.p0(i64 4, ptr %158) #11
  br label %1833

1833:                                             ; preds = %1832
  %1834 = load i32, ptr %157, align 4, !tbaa !5
  %1835 = add nsw i32 %1834, 1
  store i32 %1835, ptr %157, align 4, !tbaa !5
  br label %1749, !llvm.loop !62

1836:                                             ; preds = %1753
  br label %1837

1837:                                             ; preds = %1836
  %1838 = load i32, ptr %156, align 4, !tbaa !5
  %1839 = add nsw i32 %1838, 1
  store i32 %1839, ptr %156, align 4, !tbaa !5
  br label %1739, !llvm.loop !63

1840:                                             ; preds = %1743
  call void @llvm.lifetime.start.p0(i64 8, ptr %172) #11
  %1841 = load i64, ptr %155, align 8, !tbaa !37
  %1842 = invoke i64 @libxsmm_timer_tick()
          to label %1843 unwind label %1882

1843:                                             ; preds = %1840
  %1844 = invoke noundef i64 @_Z21libxsmm_timer_ncyclesyy(i64 noundef %1841, i64 noundef %1842)
          to label %1845 unwind label %1882

1845:                                             ; preds = %1843
  store i64 %1844, ptr %172, align 8, !tbaa !37
  call void @llvm.lifetime.start.p0(i64 8, ptr %173) #11
  %1846 = load i64, ptr %172, align 8, !tbaa !37
  %1847 = invoke double @libxsmm_timer_duration(i64 noundef 0, i64 noundef %1846)
          to label %1848 unwind label %1886

1848:                                             ; preds = %1845
  %1849 = load i32, ptr %12, align 4, !tbaa !5
  %1850 = sitofp i32 %1849 to double
  %1851 = fdiv double %1847, %1850
  store double %1851, ptr %173, align 8, !tbaa !12
  %1852 = load double, ptr %173, align 8, !tbaa !12
  %1853 = fcmp olt double 0.000000e+00, %1852
  br i1 %1853, label %1854, label %1890

1854:                                             ; preds = %1848
  %1855 = load i64, ptr %172, align 8, !tbaa !37
  %1856 = icmp ne i64 0, %1855
  br i1 %1856, label %1857, label %1890

1857:                                             ; preds = %1854
  %1858 = load ptr, ptr @stdout, align 8, !tbaa !9
  %1859 = load i32, ptr %9, align 4, !tbaa !5
  %1860 = sitofp i32 %1859 to double
  %1861 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %1860, double -1.000000e+00)
  %1862 = load i32, ptr %24, align 4, !tbaa !5
  %1863 = sitofp i32 %1862 to double
  %1864 = load i32, ptr %8, align 4, !tbaa !5
  %1865 = sitofp i32 %1864 to double
  %1866 = fmul double %1863, %1865
  %1867 = load i32, ptr %10, align 4, !tbaa !5
  %1868 = sitofp i32 %1867 to double
  %1869 = fmul double %1866, %1868
  %1870 = fmul double %1861, %1869
  %1871 = load i64, ptr %172, align 8, !tbaa !37
  %1872 = uitofp i64 %1871 to double
  %1873 = fdiv double %1870, %1872
  %1874 = getelementptr inbounds [6 x i8], ptr %28, i64 0, i64 0
  %1875 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %1858, ptr noundef @.str.4, double noundef %1873, ptr noundef %1874) #11
  %1876 = load ptr, ptr @stdout, align 8, !tbaa !9
  %1877 = load double, ptr %27, align 8, !tbaa !12
  %1878 = load double, ptr %173, align 8, !tbaa !12
  %1879 = fdiv double %1877, %1878
  %1880 = getelementptr inbounds [6 x i8], ptr %28, i64 0, i64 0
  %1881 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %1876, ptr noundef @.str.5, double noundef %1879, ptr noundef %1880) #11
  br label %1890

1882:                                             ; preds = %1843, %1840
  %1883 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %1884 = extractvalue { ptr, i32 } %1883, 0
  store ptr %1884, ptr %33, align 8
  %1885 = extractvalue { ptr, i32 } %1883, 1
  store i32 %1885, ptr %34, align 4
  br label %1895

1886:                                             ; preds = %1845
  %1887 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %1888 = extractvalue { ptr, i32 } %1887, 0
  store ptr %1888, ptr %33, align 8
  %1889 = extractvalue { ptr, i32 } %1887, 1
  store i32 %1889, ptr %34, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %173) #11
  br label %1895

1890:                                             ; preds = %1857, %1854, %1848
  %1891 = load ptr, ptr @stdout, align 8, !tbaa !9
  %1892 = load double, ptr %173, align 8, !tbaa !12
  %1893 = fmul double 1.000000e+03, %1892
  %1894 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %1891, ptr noundef @.str.7, double noundef %1893) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %173) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %172) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %155) #11
  br label %1899

1895:                                             ; preds = %1886, %1882
  call void @llvm.lifetime.end.p0(i64 8, ptr %172) #11
  br label %1896

1896:                                             ; preds = %1895, %1744
  call void @llvm.lifetime.end.p0(i64 8, ptr %155) #11
  br label %1924

1897:                                             ; preds = %903
  %1898 = call ptr @__cxa_allocate_exception(i64 8) #11
  store ptr @.str.12, ptr %1898, align 16, !tbaa !9
  invoke void @__cxa_throw(ptr %1898, ptr @_ZTIPKc, ptr null) #13
          to label %1957 unwind label %931

1899:                                             ; preds = %1890, %1727, %1529, %1330, %1131
  %1900 = load i32, ptr %31, align 4, !tbaa !5
  %1901 = icmp ne i32 0, %1900
  br i1 %1901, label %1902, label %1920

1902:                                             ; preds = %1899
  call void @llvm.lifetime.start.p0(i64 192, ptr %174) #11
  %1903 = load i32, ptr %8, align 4, !tbaa !5
  %1904 = load i32, ptr %10, align 4, !tbaa !5
  %1905 = load ptr, ptr %37, align 8, !tbaa !9
  %1906 = invoke i32 @libxsmm_matdiff(ptr noundef %174, i32 noundef 0, i32 noundef %1903, i32 noundef %1904, ptr noundef %1905, ptr noundef null, ptr noundef %15, ptr noundef %15)
          to label %1907 unwind label %1915

1907:                                             ; preds = %1902
  store i32 %1906, ptr %6, align 4, !tbaa !5
  %1908 = load i32, ptr %6, align 4, !tbaa !5
  %1909 = icmp eq i32 0, %1908
  br i1 %1909, label %1910, label %1919

1910:                                             ; preds = %1907
  %1911 = load ptr, ptr @stdout, align 8, !tbaa !9
  %1912 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %174, i32 0, i32 10
  %1913 = load double, ptr %1912, align 8, !tbaa !64
  %1914 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %1911, ptr noundef @.str.13, double noundef %1913) #11
  br label %1919

1915:                                             ; preds = %1902
  %1916 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  %1917 = extractvalue { ptr, i32 } %1916, 0
  store ptr %1917, ptr %33, align 8
  %1918 = extractvalue { ptr, i32 } %1916, 1
  store i32 %1918, ptr %34, align 4
  call void @llvm.lifetime.end.p0(i64 192, ptr %174) #11
  br label %1924

1919:                                             ; preds = %1910, %1907
  call void @llvm.lifetime.end.p0(i64 192, ptr %174) #11
  br label %1920

1920:                                             ; preds = %1919, %1899
  invoke void @libxsmm_finalize()
          to label %1921 unwind label %931

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

1924:                                             ; preds = %1915, %1896, %1733, %1535, %1336, %1137, %931, %901
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #11
  call void @_ZZ4mainEN4raiiD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %32) #11
  br label %1925

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

1926:                                             ; preds = %1925
  %1927 = load i32, ptr %34, align 4
  %1928 = call i32 @llvm.eh.typeid.for.p0(ptr @_ZTISt9exception) #11
  %1929 = icmp eq i32 %1927, %1928
  br i1 %1929, label %1930, label %1943

1930:                                             ; preds = %1926
  call void @llvm.lifetime.start.p0(i64 8, ptr %176) #11
  %1931 = load ptr, ptr %33, align 8
  %1932 = call ptr @__cxa_begin_catch(ptr %1931) #11
  store ptr %1932, ptr %176, align 8
  %1933 = load ptr, ptr @stderr, align 8, !tbaa !9
  %1934 = load ptr, ptr %176, align 8, !tbaa !9
  %1935 = load ptr, ptr %1934, align 8, !tbaa !66
  %1936 = getelementptr inbounds ptr, ptr %1935, i64 2
  %1937 = load ptr, ptr %1936, align 8
  %1938 = call noundef ptr %1937(ptr noundef nonnull align 8 dereferenceable(8) %1934) #11
  %1939 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %1933, ptr noundef @.str.16, ptr noundef %1938) #11
  store i32 1, ptr %6, align 4, !tbaa !5
  call void @__cxa_end_catch()
  call void @llvm.lifetime.end.p0(i64 8, ptr %176) #11
  br label %1940

1940:                                             ; preds = %1952, %1946, %1930, %1921
  %1941 = load i32, ptr %6, align 4, !tbaa !5
  store i32 %1941, ptr %3, align 4
  store i32 1, ptr %83, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #11
  %1942 = load i32, ptr %3, align 4
  ret i32 %1942

1943:                                             ; preds = %1926
  %1944 = call i32 @llvm.eh.typeid.for.p0(ptr @_ZTIPKc) #11
  %1945 = icmp eq i32 %1927, %1944
  br i1 %1945, label %1946, label %1952

1946:                                             ; preds = %1943
  call void @llvm.lifetime.start.p0(i64 8, ptr %175) #11
  %1947 = load ptr, ptr %33, align 8
  %1948 = call ptr @__cxa_begin_catch(ptr %1947) #11
  store ptr %1948, ptr %175, align 8
  %1949 = load ptr, ptr @stderr, align 8, !tbaa !9
  %1950 = load ptr, ptr %175, align 8, !tbaa !9
  %1951 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %1949, ptr noundef @.str.16, ptr noundef %1950) #11
  store i32 1, ptr %6, align 4, !tbaa !5
  call void @__cxa_end_catch() #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %175) #11
  br label %1940

1952:                                             ; preds = %1943
  %1953 = load ptr, ptr %33, align 8
  %1954 = call ptr @__cxa_begin_catch(ptr %1953) #11
  %1955 = load ptr, ptr @stderr, align 8, !tbaa !9
  %1956 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %1955, ptr noundef @.str.15) #11
  store i32 1, ptr %6, align 4, !tbaa !5
  call void @__cxa_end_catch()
  br label %1940

1957:                                             ; preds = %1897
  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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local i64 @libxsmm_coprime2(i64 noundef) #8

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @libxsmm_init() #8

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local i64 @libxsmm_timer_tick() #8

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

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

declare ptr @__cxa_allocate_exception(i64)

declare void @__cxa_throw(ptr, ptr, ptr)

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local i32 @libxsmm_matdiff(ptr noundef, i32 noundef, i32 noundef, i32 noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) #8

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local 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) #10

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"any pointer", !7, i64 0}
!11 = !{!7, !7, i64 0}
!12 = !{!13, !13, i64 0}
!13 = !{!"double", !7, i64 0}
!14 = !{!15, !15, i64 0}
!15 = !{!"long", !7, i64 0}
!16 = !{!17, !10, i64 0}
!17 = !{!"_ZTSZ4mainE4raii", !10, i64 0, !10, i64 8, !10, i64 16, !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 = distinct !{!49, !21}
!50 = distinct !{!50, !21}
!51 = distinct !{!51, !21}
!52 = distinct !{!52, !21}
!53 = distinct !{!53, !21}
!54 = distinct !{!54, !21}
!55 = distinct !{!55, !21}
!56 = distinct !{!56, !21}
!57 = distinct !{!57, !21}
!58 = distinct !{!58, !21}
!59 = distinct !{!59, !21}
!60 = distinct !{!60, !21}
!61 = distinct !{!61, !21}
!62 = distinct !{!62, !21}
!63 = distinct !{!63, !21}
!64 = !{!65, !13, i64 80}
!65 = !{!"_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}
!66 = !{!67, !67, i64 0}
!67 = !{!"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 }
%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 [6 x i8], align 1
  %5 = alloca %struct.raii, align 8
  %6 = alloca %struct.libxsmm_matdiff_info, align 8
  %7 = icmp sgt i32 %0, 1
  br i1 %7, label %8, label %.thread677

8:                                                ; preds = %2
  %9 = getelementptr inbounds i8, ptr %1, i64 8
  %10 = load ptr, ptr %9, align 8, !tbaa !5
  %11 = tail call i32 @atoi(ptr nocapture noundef %10) #13
  %.not681 = icmp eq i32 %0, 2
  br i1 %.not681, label %.thread677, label %12

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

17:                                               ; preds = %12
  %18 = icmp eq i32 %0, 4
  br i1 %18, label %.thread670, label %.thread677

.thread670:                                       ; preds = %17
  %19 = getelementptr inbounds i8, ptr %1, i64 24
  %20 = load ptr, ptr %19, align 8, !tbaa !5
  %21 = tail call i32 @atoi(ptr nocapture noundef %20) #13
  br label %.thread677

22:                                               ; preds = %12
  %23 = getelementptr inbounds i8, ptr %1, i64 32
  %24 = load ptr, ptr %23, align 8, !tbaa !5
  %25 = tail call i32 @atoi(ptr nocapture noundef %24) #13
  %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) #13
  %.not682 = icmp eq i32 %0, 5
  br i1 %.not682, label %.thread677, label %29

29:                                               ; preds = %22
  %30 = getelementptr inbounds i8, ptr %1, i64 40
  %31 = load ptr, ptr %30, align 8, !tbaa !5
  %32 = tail call i32 @atoi(ptr nocapture noundef %31) #13
  %.fr = freeze i32 %32
  %33 = icmp ugt i32 %0, 6
  br i1 %33, label %34, label %39

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

39:                                               ; preds = %34, %29
  %40 = icmp slt i32 %.fr, 1
  %spec.select = select i1 %40, i32 13, i32 1
  br label %.thread677

.thread677:                                       ; preds = %39, %.thread670, %22, %17, %2, %8, %34
  %41 = phi i32 [ %.fr, %34 ], [ 0, %8 ], [ 0, %2 ], [ 0, %17 ], [ 0, %22 ], [ 0, %.thread670 ], [ %.fr, %39 ]
  %42 = phi i32 [ %25, %34 ], [ 23, %8 ], [ 23, %2 ], [ %15, %17 ], [ %25, %22 ], [ %15, %.thread670 ], [ %25, %39 ]
  %43 = phi i32 [ %11, %34 ], [ %11, %8 ], [ 0, %2 ], [ %11, %17 ], [ %11, %22 ], [ %11, %.thread670 ], [ %11, %39 ]
  %44 = phi i32 [ %15, %34 ], [ 23, %8 ], [ 23, %2 ], [ %15, %17 ], [ %15, %22 ], [ %15, %.thread670 ], [ %15, %39 ]
  %45 = phi i32 [ %28, %34 ], [ 23, %8 ], [ 23, %2 ], [ %15, %17 ], [ %28, %22 ], [ %21, %.thread670 ], [ %28, %39 ]
  %46 = phi i32 [ %37, %34 ], [ 13, %8 ], [ 13, %2 ], [ 13, %17 ], [ 13, %22 ], [ 13, %.thread670 ], [ %spec.select, %39 ]
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %3) #14
  store i32 %44, ptr %3, align 4, !tbaa !9
  %47 = mul nsw i32 %44, %42
  %48 = mul nsw i32 %45, %42
  %49 = mul nsw i32 %45, %44
  %50 = sext i32 %47 to i64
  %51 = sext i32 %48 to i64
  %52 = add nsw i64 %51, %50
  %53 = shl nsw i64 %52, 3
  %54 = sext i32 %49 to i64
  %55 = add nsw i64 %52, %54
  %56 = shl nsw i64 %55, 3
  %57 = udiv i64 2147483648, %56
  %58 = trunc nuw i64 %57 to i32
  %59 = icmp sgt i32 %41, 0
  %spec.select1166 = select i1 %59, i32 %41, i32 %58
  %. = tail call i32 @llvm.smin.i32(i32 %spec.select1166, i32 %58)
  %60 = shl nsw i64 %54, 4
  %61 = add nsw i64 %53, %60
  %62 = sitofp i32 %. to double
  %63 = fmul double %62, 2.000000e-09
  %64 = sitofp i32 %44 to double
  %65 = fmul double %63, %64
  %66 = sitofp i32 %45 to double
  %67 = fmul double %65, %66
  %68 = sitofp i32 %42 to double
  %69 = fmul double %67, %68
  call void @llvm.lifetime.start.p0(i64 6, ptr nonnull %4) #14
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(6) %4, ptr noundef nonnull align 1 dereferenceable(6) @__const.main.ops, i64 6, i1 false)
  %70 = fdiv double 1.000000e+00, %62
  %71 = tail call ptr @getenv(ptr noundef nonnull @.str) #14
  %72 = icmp eq ptr %71, null
  br i1 %72, label %75, label %73

73:                                               ; preds = %.thread677
  %74 = tail call i32 @atoi(ptr nocapture noundef %71) #13
  br label %75

75:                                               ; preds = %.thread677, %73
  %76 = phi i32 [ %74, %73 ], [ 0, %.thread677 ]
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %5) #14
  %77 = mul nsw i32 %., %47
  %78 = add nsw i32 %77, 7
  %79 = mul nsw i32 %., %48
  %80 = add nsw i32 %79, 7
  %81 = mul nsw i32 %., %49
  %82 = add nsw i32 %81, 7
  invoke void @_ZZ4mainEN4raiiC2Eiiii(ptr noundef nonnull align 8 dereferenceable(40) %5, i32 noundef %78, i32 noundef %80, i32 noundef %82, i32 noundef %.)
          to label %83 unwind label %123

83:                                               ; preds = %75
  %84 = load ptr, ptr %5, align 8, !tbaa !11
  %85 = ptrtoint ptr %84 to i64
  %86 = add i64 %85, 63
  %87 = and i64 %86, -64
  %88 = sub i64 %87, %85
  %89 = lshr i64 %88, 3
  %90 = getelementptr inbounds double, ptr %84, i64 %89
  %91 = getelementptr inbounds i8, ptr %5, i64 8
  %92 = load ptr, ptr %91, align 8, !tbaa !14
  %93 = ptrtoint ptr %92 to i64
  %94 = add i64 %93, 63
  %95 = and i64 %94, -64
  %96 = sub i64 %95, %93
  %97 = lshr i64 %96, 3
  %98 = getelementptr double, ptr %92, i64 %97
  %99 = getelementptr inbounds i8, ptr %5, i64 16
  %100 = load ptr, ptr %99, align 8, !tbaa !15
  %101 = ptrtoint ptr %100 to i64
  %102 = add i64 %101, 63
  %103 = and i64 %102, -64
  %104 = sub i64 %103, %101
  %105 = lshr i64 %104, 3
  %106 = getelementptr inbounds double, ptr %100, i64 %105
  %107 = icmp sgt i32 %., 0
  br i1 %107, label %.lr.ph751, label %._crit_edge752

.lr.ph751:                                        ; preds = %83
  %108 = icmp slt i32 %42, 1
  %109 = icmp slt i32 %44, 1
  %110 = add nsw i32 %47, 1
  %111 = sdiv i32 %110, 2
  %112 = sitofp i32 %111 to double
  %113 = fdiv double %70, %112
  %114 = icmp sgt i32 %45, 0
  %115 = add nsw i32 %48, 1
  %116 = sdiv i32 %115, 2
  %117 = sitofp i32 %116 to double
  %118 = fdiv double %70, %117
  %119 = sext i32 %44 to i64
  %120 = zext i32 %44 to i64
  %121 = zext i32 %42 to i64
  %122 = zext nneg i32 %. to i64
  %wide.trip.count1008 = zext nneg i32 %45 to i64
  %wide.trip.count1018 = zext nneg i32 %45 to i64
  %wide.trip.count1033 = zext nneg i32 %45 to i64
  %brmerge = or i1 %108, %109
  %min.iters.check = icmp ult i32 %44, 4
  %n.vec = and i64 %120, 2147483644
  %cmp.n = icmp eq i64 %n.vec, %120
  br label %125

._crit_edge752:                                   ; preds = %._crit_edge746, %83
  invoke void @libxsmm_init()
          to label %232 unwind label %242

123:                                              ; preds = %75
  %124 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  br label %575

125:                                              ; preds = %.lr.ph751, %._crit_edge746
  %indvars.iv1035 = phi i64 [ 0, %.lr.ph751 ], [ %indvars.iv.next1036, %._crit_edge746 ]
  %126 = trunc nuw nsw i64 %indvars.iv1035 to i32
  %127 = call noundef i32 @_ZZ4mainENK4raii7shuffleEi(ptr noundef nonnull align 8 dereferenceable(40) %5, i32 noundef %126)
  %128 = add nsw i32 %127, 42
  %129 = sitofp i32 %128 to double
  %130 = call double @llvm.fmuladd.f64(double %129, double %70, double %70)
  %.not659 = icmp eq i32 %128, 0
  br i1 %.not659, label %148, label %.preheader718

.preheader718:                                    ; preds = %125
  br i1 %108, label %.loopexit717, label %.preheader712

.preheader712:                                    ; preds = %.preheader718, %._crit_edge
  %indvars.iv980 = phi i64 [ %indvars.iv.next981, %._crit_edge ], [ 0, %.preheader718 ]
  br i1 %109, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %.preheader712
  %131 = trunc nuw nsw i64 %indvars.iv980 to i32
  %132 = uitofp nneg i32 %131 to double
  %133 = call double @llvm.fmuladd.f64(double %132, double %64, double 1.000000e+00)
  %134 = trunc i64 %indvars.iv980 to i32
  %135 = mul i32 %44, %134
  %136 = zext i32 %135 to i64
  br label %137

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 %130, %140
  %142 = call noundef i32 @_ZZ4mainENK4raii7shuffleEi(ptr noundef nonnull align 8 dereferenceable(40) %5, i32 noundef %126)
  %143 = sext i32 %142 to i64
  %144 = mul nsw i64 %143, %50
  %145 = getelementptr inbounds double, ptr %90, i64 %144
  %146 = getelementptr inbounds double, ptr %145, i64 %indvars.iv
  %147 = getelementptr inbounds double, ptr %146, i64 %136
  store double %141, ptr %147, align 8, !tbaa !16
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, %120
  br i1 %exitcond.not, label %._crit_edge, label %137, !llvm.loop !18

._crit_edge:                                      ; preds = %137, %.preheader712
  %indvars.iv.next981 = add nuw nsw i64 %indvars.iv980, 1
  %exitcond984.not = icmp eq i64 %indvars.iv.next981, %121
  br i1 %exitcond984.not, label %.loopexit717, label %.preheader712, !llvm.loop !20

148:                                              ; preds = %125
  %149 = invoke i64 @libxsmm_coprime2(i64 noundef %50)
          to label %.preheader716 unwind label %163

.preheader716:                                    ; preds = %148
  br i1 %brmerge, label %.loopexit717, label %.preheader710.us

.preheader710.us:                                 ; preds = %.preheader716, %._crit_edge726.us
  %indvars.iv990 = phi i64 [ %indvars.iv.next991, %._crit_edge726.us ], [ 0, %.preheader716 ]
  %150 = mul nuw nsw i64 %indvars.iv990, %120
  br label %151

151:                                              ; preds = %.preheader710.us, %151
  %indvars.iv985 = phi i64 [ 0, %.preheader710.us ], [ %indvars.iv.next986, %151 ]
  %152 = add nuw nsw i64 %indvars.iv985, %150
  %153 = mul i64 %149, %152
  %154 = urem i64 %153, %50
  %155 = uitofp i64 %154 to double
  %156 = fsub double %155, %112
  %157 = fmul double %113, %156
  %158 = call noundef i32 @_ZZ4mainENK4raii7shuffleEi(ptr noundef nonnull align 8 dereferenceable(40) %5, i32 noundef %126)
  %159 = sext i32 %158 to i64
  %160 = mul nsw i64 %159, %50
  %161 = getelementptr inbounds double, ptr %90, i64 %160
  %162 = getelementptr inbounds double, ptr %161, i64 %152
  store double %157, ptr %162, align 8, !tbaa !16
  %indvars.iv.next986 = add nuw nsw i64 %indvars.iv985, 1
  %exitcond989.not = icmp eq i64 %indvars.iv.next986, %120
  br i1 %exitcond989.not, label %._crit_edge726.us, label %151, !llvm.loop !21

._crit_edge726.us:                                ; preds = %151
  %indvars.iv.next991 = add nuw nsw i64 %indvars.iv990, 1
  %exitcond994.not = icmp eq i64 %indvars.iv.next991, %121
  br i1 %exitcond994.not, label %.loopexit717, label %.preheader710.us, !llvm.loop !22

163:                                              ; preds = %148
  %164 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  br label %574

.loopexit717:                                     ; preds = %._crit_edge, %._crit_edge726.us, %.preheader716, %.preheader718
  %165 = call noundef i32 @_ZZ4mainENK4raii7shuffleEi(ptr noundef nonnull align 8 dereferenceable(40) %5, i32 noundef %126)
  %166 = add nsw i32 %165, 24
  %167 = sitofp i32 %166 to double
  %168 = call double @llvm.fmuladd.f64(double %167, double %70, double %70)
  %.not660 = icmp eq i32 %166, 0
  br i1 %.not660, label %186, label %.preheader714

.preheader714:                                    ; preds = %.loopexit717
  br i1 %114, label %.preheader709, label %._crit_edge746

.preheader709:                                    ; preds = %.preheader714, %._crit_edge733
  %indvars.iv1005 = phi i64 [ %indvars.iv.next1006, %._crit_edge733 ], [ 0, %.preheader714 ]
  br i1 %108, label %._crit_edge733, label %.lr.ph729

.lr.ph729:                                        ; preds = %.preheader709
  %169 = trunc nuw nsw i64 %indvars.iv1005 to i32
  %170 = uitofp nneg i32 %169 to double
  %171 = call double @llvm.fmuladd.f64(double %170, double %68, double 1.000000e+00)
  %172 = trunc i64 %indvars.iv1005 to i32
  %173 = mul i32 %42, %172
  %174 = zext i32 %173 to i64
  br label %175

175:                                              ; preds = %.lr.ph729, %175
  %indvars.iv995 = phi i64 [ 0, %.lr.ph729 ], [ %indvars.iv.next996, %175 ]
  %176 = trunc nuw nsw i64 %indvars.iv995 to i32
  %177 = uitofp nneg i32 %176 to double
  %178 = fadd double %171, %177
  %179 = fmul double %168, %178
  %180 = call noundef i32 @_ZZ4mainENK4raii7shuffleEi(ptr noundef nonnull align 8 dereferenceable(40) %5, i32 noundef %126)
  %181 = sext i32 %180 to i64
  %182 = mul nsw i64 %181, %51
  %183 = getelementptr inbounds double, ptr %98, i64 %182
  %184 = getelementptr inbounds double, ptr %183, i64 %indvars.iv995
  %185 = getelementptr inbounds double, ptr %184, i64 %174
  store double %179, ptr %185, align 8, !tbaa !16
  %indvars.iv.next996 = add nuw nsw i64 %indvars.iv995, 1
  %exitcond999.not = icmp eq i64 %indvars.iv.next996, %121
  br i1 %exitcond999.not, label %._crit_edge733, label %175, !llvm.loop !23

._crit_edge733:                                   ; preds = %175, %.preheader709
  %indvars.iv.next1006 = add nuw nsw i64 %indvars.iv1005, 1
  %exitcond1009.not = icmp eq i64 %indvars.iv.next1006, %wide.trip.count1008
  br i1 %exitcond1009.not, label %.loopexit, label %.preheader709, !llvm.loop !24

186:                                              ; preds = %.loopexit717
  %187 = invoke i64 @libxsmm_coprime2(i64 noundef %51)
          to label %.preheader713 unwind label %205

.preheader713:                                    ; preds = %186
  br i1 %114, label %.preheader707.lr.ph, label %._crit_edge746

.preheader707.lr.ph:                              ; preds = %.preheader713
  br i1 %108, label %.loopexit.thread1133, label %.preheader707.us

.loopexit.thread1133:                             ; preds = %.preheader707.lr.ph
  %188 = trunc i64 %indvars.iv1035 to i32
  %189 = add i32 %188, 22
  %190 = uitofp nneg i32 %189 to double
  %191 = call double @llvm.fmuladd.f64(double %190, double %70, double %70)
  br label %.preheader706.lr.ph

.preheader707.us:                                 ; preds = %.preheader707.lr.ph, %._crit_edge737.us
  %indvars.iv1015 = phi i64 [ %indvars.iv.next1016, %._crit_edge737.us ], [ 0, %.preheader707.lr.ph ]
  %192 = mul nuw nsw i64 %indvars.iv1015, %121
  br label %193

193:                                              ; preds = %.preheader707.us, %193
  %indvars.iv1010 = phi i64 [ 0, %.preheader707.us ], [ %indvars.iv.next1011, %193 ]
  %194 = add nuw nsw i64 %indvars.iv1010, %192
  %195 = mul i64 %187, %194
  %196 = urem i64 %195, %51
  %197 = uitofp i64 %196 to double
  %198 = fsub double %197, %117
  %199 = fmul double %118, %198
  %200 = call noundef i32 @_ZZ4mainENK4raii7shuffleEi(ptr noundef nonnull align 8 dereferenceable(40) %5, i32 noundef %126)
  %201 = sext i32 %200 to i64
  %202 = mul nsw i64 %201, %51
  %203 = getelementptr inbounds double, ptr %98, i64 %202
  %204 = getelementptr inbounds double, ptr %203, i64 %194
  store double %199, ptr %204, align 8, !tbaa !16
  %indvars.iv.next1011 = add nuw nsw i64 %indvars.iv1010, 1
  %exitcond1014.not = icmp eq i64 %indvars.iv.next1011, %121
  br i1 %exitcond1014.not, label %._crit_edge737.us, label %193, !llvm.loop !25

._crit_edge737.us:                                ; preds = %193
  %indvars.iv.next1016 = add nuw nsw i64 %indvars.iv1015, 1
  %exitcond1019.not = icmp eq i64 %indvars.iv.next1016, %wide.trip.count1018
  br i1 %exitcond1019.not, label %.loopexit, label %.preheader707.us, !llvm.loop !26

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

.loopexit:                                        ; preds = %._crit_edge733, %._crit_edge737.us
  %207 = trunc i64 %indvars.iv1035 to i32
  %208 = add i32 %207, 22
  %209 = uitofp nneg i32 %208 to double
  %210 = call double @llvm.fmuladd.f64(double %209, double %70, double %70)
  br i1 %114, label %.preheader706.lr.ph, label %._crit_edge746

.preheader706.lr.ph:                              ; preds = %.loopexit.thread1133, %.loopexit
  %211 = phi double [ %191, %.loopexit.thread1133 ], [ %210, %.loopexit ]
  %212 = mul nsw i64 %indvars.iv1035, %54
  %213 = getelementptr inbounds double, ptr %106, i64 %212
  %broadcast.splatinsert1199 = insertelement <2 x double> poison, double %211, i64 0
  %broadcast.splat1200 = shufflevector <2 x double> %broadcast.splatinsert1199, <2 x double> poison, <2 x i32> zeroinitializer
  br label %.preheader706

.preheader706:                                    ; preds = %.preheader706.lr.ph, %._crit_edge744
  %indvars.iv1030 = phi i64 [ 0, %.preheader706.lr.ph ], [ %indvars.iv.next1031, %._crit_edge744 ]
  br i1 %109, label %._crit_edge744, label %.lr.ph740

.lr.ph740:                                        ; preds = %.preheader706
  %214 = mul nuw nsw i64 %indvars.iv1030, %119
  %215 = trunc nuw nsw i64 %indvars.iv1030 to i32
  %216 = uitofp nneg i32 %215 to double
  %217 = call double @llvm.fmuladd.f64(double %216, double %64, double 1.000000e+00)
  %invariant.gep1140 = getelementptr double, ptr %213, i64 %214
  br i1 %min.iters.check, label %scalar.ph.preheader, label %vector.ph

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

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

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

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

scalar.ph:                                        ; preds = %scalar.ph.preheader, %scalar.ph
  %indvars.iv1020 = phi i64 [ %indvars.iv.next1021, %scalar.ph ], [ %indvars.iv1020.ph, %scalar.ph.preheader ]
  %227 = trunc nuw nsw i64 %indvars.iv1020 to i32
  %228 = uitofp nneg i32 %227 to double
  %229 = fadd double %217, %228
  %230 = fmul double %211, %229
  %gep1141 = getelementptr double, ptr %invariant.gep1140, i64 %indvars.iv1020
  store double %230, ptr %gep1141, align 8, !tbaa !16
  %indvars.iv.next1021 = add nuw nsw i64 %indvars.iv1020, 1
  %exitcond1024.not = icmp eq i64 %indvars.iv.next1021, %120
  br i1 %exitcond1024.not, label %._crit_edge744, label %scalar.ph, !llvm.loop !30

._crit_edge744:                                   ; preds = %scalar.ph, %middle.block, %.preheader706
  %indvars.iv.next1031 = add nuw nsw i64 %indvars.iv1030, 1
  %exitcond1034.not = icmp eq i64 %indvars.iv.next1031, %wide.trip.count1033
  br i1 %exitcond1034.not, label %._crit_edge746, label %.preheader706, !llvm.loop !31

._crit_edge746:                                   ; preds = %._crit_edge744, %.preheader713, %.preheader714, %.loopexit
  %indvars.iv.next1036 = add nuw nsw i64 %indvars.iv1035, 1
  %231 = icmp ult i64 %indvars.iv.next1036, %122
  br i1 %231, label %125, label %._crit_edge752, !llvm.loop !32

232:                                              ; preds = %._crit_edge752
  %233 = load ptr, ptr @stdout, align 8, !tbaa !5
  %234 = sext i32 %44 to i64
  %235 = sext i32 %45 to i64
  %236 = sext i32 %42 to i64
  %237 = sext i32 %. to i64
  %238 = mul i64 %56, %237
  %239 = uitofp i64 %238 to double
  %240 = fmul double %239, 0x3EB0000000000000
  %241 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %233, ptr noundef nonnull @.str.1, i64 noundef %234, i64 noundef %235, i64 noundef %236, i64 noundef %237, double noundef %240, ptr noundef nonnull @.str.2, ptr noundef nonnull @.str.2) #14
  switch i32 %43, label %552 [
    i32 0, label %244
    i32 1, label %303
    i32 2, label %358
    i32 3, label %416
    i32 4, label %473
  ]

242:                                              ; preds = %570, %552, %._crit_edge752
  %243 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  br label %574

244:                                              ; preds = %232
  %245 = load ptr, ptr @stdout, align 8, !tbaa !5
  %246 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %245, ptr noundef nonnull @.str.3) #14
  %247 = invoke i64 @libxsmm_timer_tick()
          to label %.preheader688 unwind label %274

.preheader688:                                    ; preds = %244
  %248 = icmp slt i32 %42, 1
  %249 = icmp slt i32 %45, 1
  %250 = icmp sgt i32 %44, 0
  %or.cond1169 = and i1 %107, %250
  %or.cond1169.not = xor i1 %or.cond1169, true
  %brmerge1171 = or i1 %248, %or.cond1169.not
  %brmerge1173 = or i1 %brmerge1171, %249
  br i1 %brmerge1173, label %.split945.us, label %.preheader687.us.us.us.us.preheader

.preheader687.us.us.us.us.preheader:              ; preds = %.preheader688
  %umax1129 = call i32 @llvm.umax.i32(i32 %46, i32 1)
  %wide.trip.count1124 = zext nneg i32 %44 to i64
  %wide.trip.count1119 = zext nneg i32 %42 to i64
  %wide.trip.count1114 = zext nneg i32 %45 to i64
  br label %.preheader687.us.us.us.us

.preheader687.us.us.us.us:                        ; preds = %.preheader687.us.us.us.us.preheader, %._crit_edge923.split.us.split.us.split.us.us.us.us.us
  %.0587932.us.us.us.us = phi i32 [ %272, %._crit_edge923.split.us.split.us.split.us.us.us.us.us ], [ 0, %.preheader687.us.us.us.us.preheader ]
  br label %.preheader686.lr.ph.us.us.us.us.us.us.us

.preheader686.lr.ph.us.us.us.us.us.us.us:         ; preds = %._crit_edge914.split.us.split.us.us.us.us.us.us.us.us, %.preheader687.us.us.us.us
  %indvars.iv1126 = phi i64 [ %indvars.iv.next1127, %._crit_edge914.split.us.split.us.us.us.us.us.us.us.us ], [ 0, %.preheader687.us.us.us.us ]
  %251 = mul nuw nsw i64 %indvars.iv1126, %54
  %252 = getelementptr inbounds double, ptr %106, i64 %251
  %253 = trunc nuw nsw i64 %indvars.iv1126 to i32
  br label %.preheader686.us.us.us.us.us.us.us.us.us

.preheader686.us.us.us.us.us.us.us.us.us:         ; preds = %._crit_edge911.split.us.us.us.us.us.us.us.us.us.us, %.preheader686.lr.ph.us.us.us.us.us.us.us
  %indvars.iv1121 = phi i64 [ %indvars.iv.next1122, %._crit_edge911.split.us.us.us.us.us.us.us.us.us.us ], [ 0, %.preheader686.lr.ph.us.us.us.us.us.us.us ]
  %invariant.gep1164 = getelementptr double, ptr %90, i64 %indvars.iv1121
  %invariant.gep1162 = getelementptr double, ptr %252, i64 %indvars.iv1121
  br label %.preheader.us.us.us.us.us.us.us.us.us.us

.preheader.us.us.us.us.us.us.us.us.us.us:         ; preds = %._crit_edge909.us.us.us.us.us.us.us.us.us.us, %.preheader686.us.us.us.us.us.us.us.us.us
  %indvars.iv1116 = phi i64 [ %indvars.iv.next1117, %._crit_edge909.us.us.us.us.us.us.us.us.us.us ], [ 0, %.preheader686.us.us.us.us.us.us.us.us.us ]
  %254 = mul nuw nsw i64 %indvars.iv1116, %234
  %gep1165 = getelementptr double, ptr %invariant.gep1164, i64 %254
  br label %255

255:                                              ; preds = %255, %.preheader.us.us.us.us.us.us.us.us.us.us
  %indvars.iv1111 = phi i64 [ %indvars.iv.next1112, %255 ], [ 0, %.preheader.us.us.us.us.us.us.us.us.us.us ]
  %256 = call noundef i32 @_ZZ4mainENK4raii7shuffleEi(ptr noundef nonnull align 8 dereferenceable(40) %5, i32 noundef %253)
  %257 = sext i32 %256 to i64
  %258 = mul nsw i64 %257, %51
  %259 = getelementptr inbounds double, ptr %98, i64 %258
  %260 = mul nuw nsw i64 %indvars.iv1111, %236
  %261 = getelementptr inbounds double, ptr %259, i64 %260
  %262 = getelementptr inbounds double, ptr %261, i64 %indvars.iv1116
  %263 = load double, ptr %262, align 8, !tbaa !16
  %264 = call noundef i32 @_ZZ4mainENK4raii7shuffleEi(ptr noundef nonnull align 8 dereferenceable(40) %5, i32 noundef %253)
  %265 = sext i32 %264 to i64
  %266 = mul nsw i64 %265, %50
  %gep.us.us.us.us.us.us.us.us.us.us947 = getelementptr double, ptr %gep1165, i64 %266
  %267 = load double, ptr %gep.us.us.us.us.us.us.us.us.us.us947, align 8, !tbaa !16
  %268 = mul nuw nsw i64 %indvars.iv1111, %234
  %gep1163 = getelementptr double, ptr %invariant.gep1162, i64 %268
  %269 = load double, ptr %gep1163, align 8, !tbaa !16
  %270 = call double @llvm.fmuladd.f64(double %263, double %267, double %269)
  store double %270, ptr %gep1163, align 8, !tbaa !16
  %indvars.iv.next1112 = add nuw nsw i64 %indvars.iv1111, 1
  %exitcond1115.not = icmp eq i64 %indvars.iv.next1112, %wide.trip.count1114
  br i1 %exitcond1115.not, label %._crit_edge909.us.us.us.us.us.us.us.us.us.us, label %255, !llvm.loop !33

._crit_edge909.us.us.us.us.us.us.us.us.us.us:     ; preds = %255
  %indvars.iv.next1117 = add nuw nsw i64 %indvars.iv1116, 1
  %exitcond1120.not = icmp eq i64 %indvars.iv.next1117, %wide.trip.count1119
  br i1 %exitcond1120.not, label %._crit_edge911.split.us.us.us.us.us.us.us.us.us.us, label %.preheader.us.us.us.us.us.us.us.us.us.us, !llvm.loop !34

._crit_edge911.split.us.us.us.us.us.us.us.us.us.us: ; preds = %._crit_edge909.us.us.us.us.us.us.us.us.us.us
  %indvars.iv.next1122 = add nuw nsw i64 %indvars.iv1121, 1
  %exitcond1125.not = icmp eq i64 %indvars.iv.next1122, %wide.trip.count1124
  br i1 %exitcond1125.not, label %._crit_edge914.split.us.split.us.us.us.us.us.us.us.us, label %.preheader686.us.us.us.us.us.us.us.us.us, !llvm.loop !35

._crit_edge914.split.us.split.us.us.us.us.us.us.us.us: ; preds = %._crit_edge911.split.us.us.us.us.us.us.us.us.us.us
  %indvars.iv.next1127 = add nuw nsw i64 %indvars.iv1126, 1
  %271 = icmp slt i64 %indvars.iv.next1127, %237
  br i1 %271, label %.preheader686.lr.ph.us.us.us.us.us.us.us, label %._crit_edge923.split.us.split.us.split.us.us.us.us.us, !llvm.loop !36

._crit_edge923.split.us.split.us.split.us.us.us.us.us: ; preds = %._crit_edge914.split.us.split.us.us.us.us.us.us.us.us
  %272 = add nuw nsw i32 %.0587932.us.us.us.us, 1
  %exitcond1130.not = icmp eq i32 %272, %umax1129
  br i1 %exitcond1130.not, label %.split945.us, label %.preheader687.us.us.us.us, !llvm.loop !37

.split945.us:                                     ; preds = %._crit_edge923.split.us.split.us.split.us.us.us.us.us, %.preheader688
  %273 = invoke i64 @libxsmm_timer_tick()
          to label %276 unwind label %301

274:                                              ; preds = %244
  %275 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  br label %574

276:                                              ; preds = %.split945.us
  %277 = call noundef i64 @_Z21libxsmm_timer_ncyclesyy(i64 noundef %247, i64 noundef %273)
  %278 = call double @libxsmm_timer_duration(i64 noundef 0, i64 noundef %277)
  %279 = uitofp nneg i32 %46 to double
  %280 = fdiv double %278, %279
  %281 = fcmp ogt double %280, 0.000000e+00
  %282 = icmp ne i64 %277, 0
  %or.cond = and i1 %282, %281
  br i1 %or.cond, label %283, label %554

283:                                              ; preds = %276
  %284 = load ptr, ptr @stdout, align 8, !tbaa !5
  %285 = call double @llvm.fmuladd.f64(double %68, double 2.000000e+00, double -1.000000e+00)
  %286 = fmul double %64, %62
  %287 = fmul double %286, %66
  %288 = fmul double %285, %287
  %289 = uitofp i64 %277 to double
  %290 = fdiv double %288, %289
  %291 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %284, ptr noundef nonnull @.str.4, double noundef %290, ptr noundef nonnull %4) #14
  %292 = load ptr, ptr @stdout, align 8, !tbaa !5
  %293 = fdiv double %69, %280
  %294 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %292, ptr noundef nonnull @.str.5, double noundef %293, ptr noundef nonnull %4) #14
  %295 = load ptr, ptr @stdout, align 8, !tbaa !5
  %296 = mul i64 %61, %237
  %297 = uitofp i64 %296 to double
  %298 = fmul double %280, 0x41D0000000000000
  %299 = fdiv double %297, %298
  %300 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %295, ptr noundef nonnull @.str.6, double noundef %299) #14
  br label %554

301:                                              ; preds = %.split945.us
  %302 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  br label %574

303:                                              ; preds = %232
  %304 = load ptr, ptr @stdout, align 8, !tbaa !5
  %305 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %304, ptr noundef nonnull @.str.8) #14
  %306 = invoke i64 @libxsmm_timer_tick()
          to label %.preheader692 unwind label %327

.preheader692:                                    ; preds = %303
  %307 = icmp slt i32 %42, 1
  %308 = icmp slt i32 %45, 1
  %309 = icmp sgt i32 %44, 0
  %or.cond1174 = and i1 %107, %309
  %or.cond1174.not = xor i1 %or.cond1174, true
  %brmerge1176 = or i1 %307, %or.cond1174.not
  %brmerge1178 = or i1 %brmerge1176, %308
  br i1 %brmerge1178, label %.split904.us, label %.preheader691.us.us.us.us.preheader

.preheader691.us.us.us.us.preheader:              ; preds = %.preheader692
  %umax1109 = call i32 @llvm.umax.i32(i32 %46, i32 1)
  %wide.trip.count1104 = zext nneg i32 %44 to i64
  %wide.trip.count1099 = zext nneg i32 %42 to i64
  %wide.trip.count1094 = zext nneg i32 %45 to i64
  br label %.preheader691.us.us.us.us

.preheader691.us.us.us.us:                        ; preds = %.preheader691.us.us.us.us.preheader, %._crit_edge882.split.us.split.us.split.us.us.us.us.us
  %.0594891.us.us.us.us = phi i32 [ %325, %._crit_edge882.split.us.split.us.split.us.us.us.us.us ], [ 0, %.preheader691.us.us.us.us.preheader ]
  br label %.preheader690.lr.ph.us.us.us.us.us.us.us

.preheader690.lr.ph.us.us.us.us.us.us.us:         ; preds = %._crit_edge873.split.us.split.us.us.us.us.us.us.us.us, %.preheader691.us.us.us.us
  %indvars.iv1106 = phi i64 [ %indvars.iv.next1107, %._crit_edge873.split.us.split.us.us.us.us.us.us.us.us ], [ 0, %.preheader691.us.us.us.us ]
  %310 = mul nuw nsw i64 %indvars.iv1106, %54
  %311 = getelementptr inbounds double, ptr %106, i64 %310
  %312 = trunc nuw nsw i64 %indvars.iv1106 to i32
  br label %.preheader690.us.us.us.us.us.us.us.us.us

.preheader690.us.us.us.us.us.us.us.us.us:         ; preds = %._crit_edge870.split.us.us.us.us.us.us.us.us.us.us, %.preheader690.lr.ph.us.us.us.us.us.us.us
  %indvars.iv1101 = phi i64 [ %indvars.iv.next1102, %._crit_edge870.split.us.us.us.us.us.us.us.us.us.us ], [ 0, %.preheader690.lr.ph.us.us.us.us.us.us.us ]
  %invariant.gep1160 = getelementptr double, ptr %90, i64 %indvars.iv1101
  %invariant.gep1158 = getelementptr double, ptr %311, i64 %indvars.iv1101
  br label %.preheader689.us.us.us.us.us.us.us.us.us.us

.preheader689.us.us.us.us.us.us.us.us.us.us:      ; preds = %._crit_edge868.us.us.us.us.us.us.us.us.us.us, %.preheader690.us.us.us.us.us.us.us.us.us
  %indvars.iv1096 = phi i64 [ %indvars.iv.next1097, %._crit_edge868.us.us.us.us.us.us.us.us.us.us ], [ 0, %.preheader690.us.us.us.us.us.us.us.us.us ]
  %313 = mul nuw nsw i64 %indvars.iv1096, %234
  %gep1161 = getelementptr double, ptr %invariant.gep1160, i64 %313
  %invariant.gep1156 = getelementptr double, ptr %98, i64 %indvars.iv1096
  br label %314

314:                                              ; preds = %314, %.preheader689.us.us.us.us.us.us.us.us.us.us
  %indvars.iv1091 = phi i64 [ %indvars.iv.next1092, %314 ], [ 0, %.preheader689.us.us.us.us.us.us.us.us.us.us ]
  %315 = mul nuw nsw i64 %indvars.iv1091, %236
  %gep1157 = getelementptr double, ptr %invariant.gep1156, i64 %315
  %316 = load double, ptr %gep1157, align 8, !tbaa !16
  %317 = call noundef i32 @_ZZ4mainENK4raii7shuffleEi(ptr noundef nonnull align 8 dereferenceable(40) %5, i32 noundef %312)
  %318 = sext i32 %317 to i64
  %319 = mul nsw i64 %318, %50
  %gep.us.us.us.us.us.us.us.us.us.us906 = getelementptr double, ptr %gep1161, i64 %319
  %320 = load double, ptr %gep.us.us.us.us.us.us.us.us.us.us906, align 8, !tbaa !16
  %321 = mul nuw nsw i64 %indvars.iv1091, %234
  %gep1159 = getelementptr double, ptr %invariant.gep1158, i64 %321
  %322 = load double, ptr %gep1159, align 8, !tbaa !16
  %323 = call double @llvm.fmuladd.f64(double %316, double %320, double %322)
  store double %323, ptr %gep1159, align 8, !tbaa !16
  %indvars.iv.next1092 = add nuw nsw i64 %indvars.iv1091, 1
  %exitcond1095.not = icmp eq i64 %indvars.iv.next1092, %wide.trip.count1094
  br i1 %exitcond1095.not, label %._crit_edge868.us.us.us.us.us.us.us.us.us.us, label %314, !llvm.loop !38

._crit_edge868.us.us.us.us.us.us.us.us.us.us:     ; preds = %314
  %indvars.iv.next1097 = add nuw nsw i64 %indvars.iv1096, 1
  %exitcond1100.not = icmp eq i64 %indvars.iv.next1097, %wide.trip.count1099
  br i1 %exitcond1100.not, label %._crit_edge870.split.us.us.us.us.us.us.us.us.us.us, label %.preheader689.us.us.us.us.us.us.us.us.us.us, !llvm.loop !39

._crit_edge870.split.us.us.us.us.us.us.us.us.us.us: ; preds = %._crit_edge868.us.us.us.us.us.us.us.us.us.us
  %indvars.iv.next1102 = add nuw nsw i64 %indvars.iv1101, 1
  %exitcond1105.not = icmp eq i64 %indvars.iv.next1102, %wide.trip.count1104
  br i1 %exitcond1105.not, label %._crit_edge873.split.us.split.us.us.us.us.us.us.us.us, label %.preheader690.us.us.us.us.us.us.us.us.us, !llvm.loop !40

._crit_edge873.split.us.split.us.us.us.us.us.us.us.us: ; preds = %._crit_edge870.split.us.us.us.us.us.us.us.us.us.us
  %indvars.iv.next1107 = add nuw nsw i64 %indvars.iv1106, 1
  %324 = icmp slt i64 %indvars.iv.next1107, %237
  br i1 %324, label %.preheader690.lr.ph.us.us.us.us.us.us.us, label %._crit_edge882.split.us.split.us.split.us.us.us.us.us, !llvm.loop !41

._crit_edge882.split.us.split.us.split.us.us.us.us.us: ; preds = %._crit_edge873.split.us.split.us.us.us.us.us.us.us.us
  %325 = add nuw nsw i32 %.0594891.us.us.us.us, 1
  %exitcond1110.not = icmp eq i32 %325, %umax1109
  br i1 %exitcond1110.not, label %.split904.us, label %.preheader691.us.us.us.us, !llvm.loop !42

.split904.us:                                     ; preds = %._crit_edge882.split.us.split.us.split.us.us.us.us.us, %.preheader692
  %326 = invoke i64 @libxsmm_timer_tick()
          to label %329 unwind label %356

327:                                              ; preds = %303
  %328 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  br label %574

329:                                              ; preds = %.split904.us
  %330 = call noundef i64 @_Z21libxsmm_timer_ncyclesyy(i64 noundef %306, i64 noundef %326)
  %331 = call double @libxsmm_timer_duration(i64 noundef 0, i64 noundef %330)
  %332 = uitofp nneg i32 %46 to double
  %333 = fdiv double %331, %332
  %334 = fcmp ogt double %333, 0.000000e+00
  %335 = icmp ne i64 %330, 0
  %or.cond3 = and i1 %335, %334
  br i1 %or.cond3, label %336, label %554

336:                                              ; preds = %329
  %337 = load ptr, ptr @stdout, align 8, !tbaa !5
  %338 = call double @llvm.fmuladd.f64(double %68, double 2.000000e+00, double -1.000000e+00)
  %339 = fmul double %64, %62
  %340 = fmul double %339, %66
  %341 = fmul double %338, %340
  %342 = uitofp i64 %330 to double
  %343 = fdiv double %341, %342
  %344 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %337, ptr noundef nonnull @.str.4, double noundef %343, ptr noundef nonnull %4) #14
  %345 = load ptr, ptr @stdout, align 8, !tbaa !5
  %346 = fdiv double %69, %333
  %347 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %345, ptr noundef nonnull @.str.5, double noundef %346, ptr noundef nonnull %4) #14
  %348 = load ptr, ptr @stdout, align 8, !tbaa !5
  %349 = shl nsw i64 %51, 3
  %350 = sub nsw i64 %61, %349
  %351 = mul i64 %350, %237
  %352 = uitofp i64 %351 to double
  %353 = fmul double %333, 0x41D0000000000000
  %354 = fdiv double %352, %353
  %355 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %348, ptr noundef nonnull @.str.6, double noundef %354) #14
  br label %554

356:                                              ; preds = %.split904.us
  %357 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  br label %574

358:                                              ; preds = %232
  %359 = load ptr, ptr @stdout, align 8, !tbaa !5
  %360 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %359, ptr noundef nonnull @.str.9) #14
  %361 = invoke i64 @libxsmm_timer_tick()
          to label %.preheader696 unwind label %385

.preheader696:                                    ; preds = %358
  %362 = icmp slt i32 %42, 1
  %363 = icmp slt i32 %45, 1
  %364 = icmp sgt i32 %44, 0
  %or.cond1179 = and i1 %107, %364
  %or.cond1179.not = xor i1 %or.cond1179, true
  %brmerge1181 = or i1 %362, %or.cond1179.not
  %brmerge1183 = or i1 %brmerge1181, %363
  br i1 %brmerge1183, label %.split865.us, label %.preheader695.us.us.us.us.preheader

.preheader695.us.us.us.us.preheader:              ; preds = %.preheader696
  %umax1089 = call i32 @llvm.umax.i32(i32 %46, i32 1)
  %wide.trip.count1084 = zext nneg i32 %44 to i64
  %wide.trip.count1079 = zext nneg i32 %42 to i64
  %wide.trip.count1074 = zext nneg i32 %45 to i64
  br label %.preheader695.us.us.us.us

.preheader695.us.us.us.us:                        ; preds = %.preheader695.us.us.us.us.preheader, %._crit_edge843.split.us.split.us.split.us.us.us.us.us
  %.0602852.us.us.us.us = phi i32 [ %383, %._crit_edge843.split.us.split.us.split.us.us.us.us.us ], [ 0, %.preheader695.us.us.us.us.preheader ]
  br label %.preheader694.lr.ph.us.us.us.us.us.us.us

.preheader694.lr.ph.us.us.us.us.us.us.us:         ; preds = %._crit_edge834.split.us.split.us.us.us.us.us.us.us.us, %.preheader695.us.us.us.us
  %indvars.iv1086 = phi i64 [ %indvars.iv.next1087, %._crit_edge834.split.us.split.us.us.us.us.us.us.us.us ], [ 0, %.preheader695.us.us.us.us ]
  %365 = mul nuw nsw i64 %indvars.iv1086, %54
  %366 = getelementptr inbounds double, ptr %106, i64 %365
  %367 = trunc nuw nsw i64 %indvars.iv1086 to i32
  br label %.preheader694.us.us.us.us.us.us.us.us.us

.preheader694.us.us.us.us.us.us.us.us.us:         ; preds = %._crit_edge831.split.us.us.us.us.us.us.us.us.us.us, %.preheader694.lr.ph.us.us.us.us.us.us.us
  %indvars.iv1081 = phi i64 [ %indvars.iv.next1082, %._crit_edge831.split.us.us.us.us.us.us.us.us.us.us ], [ 0, %.preheader694.lr.ph.us.us.us.us.us.us.us ]
  %invariant.gep1154 = getelementptr double, ptr %90, i64 %indvars.iv1081
  %invariant.gep1152 = getelementptr double, ptr %366, i64 %indvars.iv1081
  br label %.preheader693.us.us.us.us.us.us.us.us.us.us

.preheader693.us.us.us.us.us.us.us.us.us.us:      ; preds = %._crit_edge829.us.us.us.us.us.us.us.us.us.us, %.preheader694.us.us.us.us.us.us.us.us.us
  %indvars.iv1076 = phi i64 [ %indvars.iv.next1077, %._crit_edge829.us.us.us.us.us.us.us.us.us.us ], [ 0, %.preheader694.us.us.us.us.us.us.us.us.us ]
  %368 = mul nuw nsw i64 %indvars.iv1076, %234
  %gep1155 = getelementptr double, ptr %invariant.gep1154, i64 %368
  br label %369

369:                                              ; preds = %369, %.preheader693.us.us.us.us.us.us.us.us.us.us
  %indvars.iv1071 = phi i64 [ %indvars.iv.next1072, %369 ], [ 0, %.preheader693.us.us.us.us.us.us.us.us.us.us ]
  %370 = call noundef i32 @_ZZ4mainENK4raii7shuffleEi(ptr noundef nonnull align 8 dereferenceable(40) %5, i32 noundef %367)
  %371 = sext i32 %370 to i64
  %372 = mul nsw i64 %371, %51
  %373 = getelementptr inbounds double, ptr %98, i64 %372
  %374 = mul nuw nsw i64 %indvars.iv1071, %236
  %375 = getelementptr inbounds double, ptr %373, i64 %374
  %376 = getelementptr inbounds double, ptr %375, i64 %indvars.iv1076
  %377 = load double, ptr %376, align 8, !tbaa !16
  %378 = load double, ptr %gep1155, align 8, !tbaa !16
  %379 = mul nuw nsw i64 %indvars.iv1071, %234
  %gep1153 = getelementptr double, ptr %invariant.gep1152, i64 %379
  %380 = load double, ptr %gep1153, align 8, !tbaa !16
  %381 = call double @llvm.fmuladd.f64(double %377, double %378, double %380)
  store double %381, ptr %gep1153, align 8, !tbaa !16
  %indvars.iv.next1072 = add nuw nsw i64 %indvars.iv1071, 1
  %exitcond1075.not = icmp eq i64 %indvars.iv.next1072, %wide.trip.count1074
  br i1 %exitcond1075.not, label %._crit_edge829.us.us.us.us.us.us.us.us.us.us, label %369, !llvm.loop !43

._crit_edge829.us.us.us.us.us.us.us.us.us.us:     ; preds = %369
  %indvars.iv.next1077 = add nuw nsw i64 %indvars.iv1076, 1
  %exitcond1080.not = icmp eq i64 %indvars.iv.next1077, %wide.trip.count1079
  br i1 %exitcond1080.not, label %._crit_edge831.split.us.us.us.us.us.us.us.us.us.us, label %.preheader693.us.us.us.us.us.us.us.us.us.us, !llvm.loop !44

._crit_edge831.split.us.us.us.us.us.us.us.us.us.us: ; preds = %._crit_edge829.us.us.us.us.us.us.us.us.us.us
  %indvars.iv.next1082 = add nuw nsw i64 %indvars.iv1081, 1
  %exitcond1085.not = icmp eq i64 %indvars.iv.next1082, %wide.trip.count1084
  br i1 %exitcond1085.not, label %._crit_edge834.split.us.split.us.us.us.us.us.us.us.us, label %.preheader694.us.us.us.us.us.us.us.us.us, !llvm.loop !45

._crit_edge834.split.us.split.us.us.us.us.us.us.us.us: ; preds = %._crit_edge831.split.us.us.us.us.us.us.us.us.us.us
  %indvars.iv.next1087 = add nuw nsw i64 %indvars.iv1086, 1
  %382 = icmp slt i64 %indvars.iv.next1087, %237
  br i1 %382, label %.preheader694.lr.ph.us.us.us.us.us.us.us, label %._crit_edge843.split.us.split.us.split.us.us.us.us.us, !llvm.loop !46

._crit_edge843.split.us.split.us.split.us.us.us.us.us: ; preds = %._crit_edge834.split.us.split.us.us.us.us.us.us.us.us
  %383 = add nuw nsw i32 %.0602852.us.us.us.us, 1
  %exitcond1090.not = icmp eq i32 %383, %umax1089
  br i1 %exitcond1090.not, label %.split865.us, label %.preheader695.us.us.us.us, !llvm.loop !47

.split865.us:                                     ; preds = %._crit_edge843.split.us.split.us.split.us.us.us.us.us, %.preheader696
  %384 = invoke i64 @libxsmm_timer_tick()
          to label %387 unwind label %414

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

387:                                              ; preds = %.split865.us
  %388 = call noundef i64 @_Z21libxsmm_timer_ncyclesyy(i64 noundef %361, i64 noundef %384)
  %389 = call double @libxsmm_timer_duration(i64 noundef 0, i64 noundef %388)
  %390 = uitofp nneg i32 %46 to double
  %391 = fdiv double %389, %390
  %392 = fcmp ogt double %391, 0.000000e+00
  %393 = icmp ne i64 %388, 0
  %or.cond5 = and i1 %393, %392
  br i1 %or.cond5, label %394, label %554

394:                                              ; preds = %387
  %395 = load ptr, ptr @stdout, align 8, !tbaa !5
  %396 = call double @llvm.fmuladd.f64(double %68, double 2.000000e+00, double -1.000000e+00)
  %397 = fmul double %64, %62
  %398 = fmul double %397, %66
  %399 = fmul double %396, %398
  %400 = uitofp i64 %388 to double
  %401 = fdiv double %399, %400
  %402 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %395, ptr noundef nonnull @.str.4, double noundef %401, ptr noundef nonnull %4) #14
  %403 = load ptr, ptr @stdout, align 8, !tbaa !5
  %404 = fdiv double %69, %391
  %405 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %403, ptr noundef nonnull @.str.5, double noundef %404, ptr noundef nonnull %4) #14
  %406 = load ptr, ptr @stdout, align 8, !tbaa !5
  %407 = shl nsw i64 %50, 3
  %408 = sub nsw i64 %61, %407
  %409 = mul i64 %408, %237
  %410 = uitofp i64 %409 to double
  %411 = fmul double %391, 0x41D0000000000000
  %412 = fdiv double %410, %411
  %413 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %406, ptr noundef nonnull @.str.6, double noundef %412) #14
  br label %554

414:                                              ; preds = %.split865.us
  %415 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  br label %574

416:                                              ; preds = %232
  %417 = load ptr, ptr @stdout, align 8, !tbaa !5
  %418 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %417, ptr noundef nonnull @.str.10) #14
  %419 = invoke i64 @libxsmm_timer_tick()
          to label %.preheader700 unwind label %444

.preheader700:                                    ; preds = %416
  %420 = icmp slt i32 %42, 1
  %421 = icmp slt i32 %45, 1
  %422 = icmp sgt i32 %44, 0
  %or.cond1184 = and i1 %107, %422
  %or.cond1184.not = xor i1 %or.cond1184, true
  %brmerge1186 = or i1 %420, %or.cond1184.not
  %brmerge1188 = or i1 %brmerge1186, %421
  br i1 %brmerge1188, label %.split826.us, label %.preheader699.us.us.us.us.preheader

.preheader699.us.us.us.us.preheader:              ; preds = %.preheader700
  %umax1069 = call i32 @llvm.umax.i32(i32 %46, i32 1)
  %wide.trip.count1067 = zext nneg i32 %44 to i64
  %wide.trip.count1062 = zext nneg i32 %42 to i64
  %wide.trip.count1057 = zext nneg i32 %45 to i64
  br label %.preheader699.us.us.us.us

.preheader699.us.us.us.us:                        ; preds = %.preheader699.us.us.us.us.preheader, %._crit_edge804.split.us.split.us.split.us.us.us.us.us
  %.0607813.us.us.us.us = phi i32 [ %442, %._crit_edge804.split.us.split.us.split.us.us.us.us.us ], [ 0, %.preheader699.us.us.us.us.preheader ]
  br label %.preheader698.lr.ph.us.us.us.us.us.us.us

.preheader698.lr.ph.us.us.us.us.us.us.us:         ; preds = %._crit_edge795.split.us.split.us.us.us.us.us.us.us.us, %.preheader699.us.us.us.us
  %.0608800.us.us.us.us.us.us.us = phi i32 [ 0, %.preheader699.us.us.us.us ], [ %440, %._crit_edge795.split.us.split.us.us.us.us.us.us.us.us ]
  br label %.preheader698.us.us.us.us.us.us.us.us.us

.preheader698.us.us.us.us.us.us.us.us.us:         ; preds = %._crit_edge792.split.us.us.us.us.us.us.us.us.us.us, %.preheader698.lr.ph.us.us.us.us.us.us.us
  %indvars.iv1064 = phi i64 [ %indvars.iv.next1065, %._crit_edge792.split.us.us.us.us.us.us.us.us.us.us ], [ 0, %.preheader698.lr.ph.us.us.us.us.us.us.us ]
  %invariant.gep1150 = getelementptr double, ptr %90, i64 %indvars.iv1064
  %invariant.gep1148 = getelementptr double, ptr %106, i64 %indvars.iv1064
  br label %.preheader697.us.us.us.us.us.us.us.us.us.us

.preheader697.us.us.us.us.us.us.us.us.us.us:      ; preds = %._crit_edge790.us.us.us.us.us.us.us.us.us.us, %.preheader698.us.us.us.us.us.us.us.us.us
  %indvars.iv1059 = phi i64 [ %indvars.iv.next1060, %._crit_edge790.us.us.us.us.us.us.us.us.us.us ], [ 0, %.preheader698.us.us.us.us.us.us.us.us.us ]
  %423 = mul nuw nsw i64 %indvars.iv1059, %234
  %gep1151 = getelementptr double, ptr %invariant.gep1150, i64 %423
  br label %424

424:                                              ; preds = %424, %.preheader697.us.us.us.us.us.us.us.us.us.us
  %indvars.iv1054 = phi i64 [ %indvars.iv.next1055, %424 ], [ 0, %.preheader697.us.us.us.us.us.us.us.us.us.us ]
  %425 = call noundef i32 @_ZZ4mainENK4raii7shuffleEi(ptr noundef nonnull align 8 dereferenceable(40) %5, i32 noundef %.0608800.us.us.us.us.us.us.us)
  %426 = sext i32 %425 to i64
  %427 = mul nsw i64 %426, %51
  %428 = getelementptr inbounds double, ptr %98, i64 %427
  %429 = mul nuw nsw i64 %indvars.iv1054, %236
  %430 = getelementptr inbounds double, ptr %428, i64 %429
  %431 = getelementptr inbounds double, ptr %430, i64 %indvars.iv1059
  %432 = load double, ptr %431, align 8, !tbaa !16
  %433 = call noundef i32 @_ZZ4mainENK4raii7shuffleEi(ptr noundef nonnull align 8 dereferenceable(40) %5, i32 noundef %.0608800.us.us.us.us.us.us.us)
  %434 = sext i32 %433 to i64
  %435 = mul nsw i64 %434, %50
  %gep.us.us.us.us.us.us.us.us.us.us = getelementptr double, ptr %gep1151, i64 %435
  %436 = load double, ptr %gep.us.us.us.us.us.us.us.us.us.us, align 8, !tbaa !16
  %437 = mul nuw nsw i64 %indvars.iv1054, %234
  %gep1149 = getelementptr double, ptr %invariant.gep1148, i64 %437
  %438 = load double, ptr %gep1149, align 8, !tbaa !16
  %439 = call double @llvm.fmuladd.f64(double %432, double %436, double %438)
  store double %439, ptr %gep1149, align 8, !tbaa !16
  %indvars.iv.next1055 = add nuw nsw i64 %indvars.iv1054, 1
  %exitcond1058.not = icmp eq i64 %indvars.iv.next1055, %wide.trip.count1057
  br i1 %exitcond1058.not, label %._crit_edge790.us.us.us.us.us.us.us.us.us.us, label %424, !llvm.loop !48

._crit_edge790.us.us.us.us.us.us.us.us.us.us:     ; preds = %424
  %indvars.iv.next1060 = add nuw nsw i64 %indvars.iv1059, 1
  %exitcond1063.not = icmp eq i64 %indvars.iv.next1060, %wide.trip.count1062
  br i1 %exitcond1063.not, label %._crit_edge792.split.us.us.us.us.us.us.us.us.us.us, label %.preheader697.us.us.us.us.us.us.us.us.us.us, !llvm.loop !49

._crit_edge792.split.us.us.us.us.us.us.us.us.us.us: ; preds = %._crit_edge790.us.us.us.us.us.us.us.us.us.us
  %indvars.iv.next1065 = add nuw nsw i64 %indvars.iv1064, 1
  %exitcond1068.not = icmp eq i64 %indvars.iv.next1065, %wide.trip.count1067
  br i1 %exitcond1068.not, label %._crit_edge795.split.us.split.us.us.us.us.us.us.us.us, label %.preheader698.us.us.us.us.us.us.us.us.us, !llvm.loop !50

._crit_edge795.split.us.split.us.us.us.us.us.us.us.us: ; preds = %._crit_edge792.split.us.us.us.us.us.us.us.us.us.us
  %440 = add nuw nsw i32 %.0608800.us.us.us.us.us.us.us, 1
  %441 = icmp slt i32 %440, %.
  br i1 %441, label %.preheader698.lr.ph.us.us.us.us.us.us.us, label %._crit_edge804.split.us.split.us.split.us.us.us.us.us, !llvm.loop !51

._crit_edge804.split.us.split.us.split.us.us.us.us.us: ; preds = %._crit_edge795.split.us.split.us.us.us.us.us.us.us.us
  %442 = add nuw nsw i32 %.0607813.us.us.us.us, 1
  %exitcond1070.not = icmp eq i32 %442, %umax1069
  br i1 %exitcond1070.not, label %.split826.us, label %.preheader699.us.us.us.us, !llvm.loop !52

.split826.us:                                     ; preds = %._crit_edge804.split.us.split.us.split.us.us.us.us.us, %.preheader700
  %443 = invoke i64 @libxsmm_timer_tick()
          to label %446 unwind label %471

444:                                              ; preds = %416
  %445 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  br label %574

446:                                              ; preds = %.split826.us
  %447 = call noundef i64 @_Z21libxsmm_timer_ncyclesyy(i64 noundef %419, i64 noundef %443)
  %448 = call double @libxsmm_timer_duration(i64 noundef 0, i64 noundef %447)
  %449 = uitofp nneg i32 %46 to double
  %450 = fdiv double %448, %449
  %451 = fcmp ogt double %450, 0.000000e+00
  %452 = icmp ne i64 %447, 0
  %or.cond7 = and i1 %452, %451
  br i1 %or.cond7, label %453, label %554

453:                                              ; preds = %446
  %454 = load ptr, ptr @stdout, align 8, !tbaa !5
  %455 = call double @llvm.fmuladd.f64(double %68, double 2.000000e+00, double -1.000000e+00)
  %456 = fmul double %64, %62
  %457 = fmul double %456, %66
  %458 = fmul double %455, %457
  %459 = uitofp i64 %447 to double
  %460 = fdiv double %458, %459
  %461 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %454, ptr noundef nonnull @.str.4, double noundef %460, ptr noundef nonnull %4) #14
  %462 = load ptr, ptr @stdout, align 8, !tbaa !5
  %463 = fdiv double %69, %450
  %464 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %462, ptr noundef nonnull @.str.5, double noundef %463, ptr noundef nonnull %4) #14
  %465 = load ptr, ptr @stdout, align 8, !tbaa !5
  %466 = mul i64 %53, %237
  %467 = uitofp i64 %466 to double
  %468 = fmul double %450, 0x41D0000000000000
  %469 = fdiv double %467, %468
  %470 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %465, ptr noundef nonnull @.str.6, double noundef %469) #14
  br label %554

471:                                              ; preds = %.split826.us
  %472 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  br label %574

473:                                              ; preds = %232
  %474 = load ptr, ptr @stdout, align 8, !tbaa !5
  %475 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %474, ptr noundef nonnull @.str.11) #14
  %476 = invoke i64 @libxsmm_timer_tick()
          to label %.preheader704 unwind label %529

.preheader704:                                    ; preds = %473
  %477 = icmp slt i32 %42, 1
  %478 = icmp slt i32 %45, 1
  %479 = icmp sgt i32 %44, 0
  %or.cond1189 = and i1 %107, %479
  %or.cond1189.not = xor i1 %or.cond1189, true
  %brmerge1191 = or i1 %477, %or.cond1189.not
  %brmerge1193 = or i1 %brmerge1191, %478
  br i1 %brmerge1193, label %.split.us, label %.preheader703.us.us.us.us.preheader

.preheader703.us.us.us.us.preheader:              ; preds = %.preheader704
  %umax = call i32 @llvm.umax.i32(i32 %46, i32 1)
  %wide.trip.count1051 = zext nneg i32 %44 to i64
  %wide.trip.count1046 = zext nneg i32 %42 to i64
  %wide.trip.count1041 = zext nneg i32 %45 to i64
  %480 = and i64 %104, -8
  %481 = shl nuw nsw i64 %wide.trip.count1041, 3
  %482 = and i64 %96, -8
  %483 = shl nuw nsw i64 %wide.trip.count1046, 3
  %484 = getelementptr i8, ptr %92, i64 %482
  %485 = getelementptr i8, ptr %484, i64 %483
  %486 = getelementptr i8, ptr %485, i64 %481
  %scevgep1203 = getelementptr i8, ptr %486, i64 -8
  %487 = and i64 %88, -8
  %488 = getelementptr i8, ptr %100, i64 %480
  %489 = getelementptr i8, ptr %100, i64 %480
  %490 = getelementptr i8, ptr %489, i64 %481
  %491 = getelementptr i8, ptr %84, i64 %487
  %492 = getelementptr i8, ptr %84, i64 %487
  %493 = getelementptr i8, ptr %492, i64 %483
  %min.iters.check1211 = icmp ult i32 %45, 6
  %ident.check = icmp ne i32 %44, 1
  %ident.check1201 = icmp ne i32 %42, 1
  %494 = or i1 %ident.check, %ident.check1201
  %bound01206 = icmp ult ptr %488, %493
  %bound11207 = icmp ult ptr %491, %490
  %found.conflict1208 = and i1 %bound01206, %bound11207
  %n.vec1214 = and i64 %wide.trip.count1041, 2147483644
  %cmp.n1226 = icmp eq i64 %n.vec1214, %wide.trip.count1041
  %xtraiter = and i64 %wide.trip.count1041, 1
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  %495 = add nsw i64 %wide.trip.count1041, -1
  br label %.preheader703.us.us.us.us

.preheader703.us.us.us.us:                        ; preds = %.preheader703.us.us.us.us.preheader, %._crit_edge767.split.us.split.us.split.us.us.us.us.us
  %.0591776.us.us.us.us = phi i32 [ %527, %._crit_edge767.split.us.split.us.split.us.us.us.us.us ], [ 0, %.preheader703.us.us.us.us.preheader ]
  br label %.preheader702.lr.ph.us.us.us.us.us.us.us

.preheader702.lr.ph.us.us.us.us.us.us.us:         ; preds = %._crit_edge760.split.us.split.us.us.us.us.us.us.us.us, %.preheader703.us.us.us.us
  %.0590765.us.us.us.us.us.us.us = phi i32 [ 0, %.preheader703.us.us.us.us ], [ %525, %._crit_edge760.split.us.split.us.us.us.us.us.us.us.us ]
  br label %.preheader702.us.us.us.us.us.us.us.us.us

.preheader702.us.us.us.us.us.us.us.us.us:         ; preds = %._crit_edge757.split.us.us.us.us.us.us.us.us.us.us, %.preheader702.lr.ph.us.us.us.us.us.us.us
  %indvars.iv1048 = phi i64 [ %indvars.iv.next1049, %._crit_edge757.split.us.us.us.us.us.us.us.us.us.us ], [ 0, %.preheader702.lr.ph.us.us.us.us.us.us.us ]
  %496 = shl i64 %indvars.iv1048, 3
  %scevgep = getelementptr i8, ptr %488, i64 %496
  %scevgep1202 = getelementptr i8, ptr %490, i64 %496
  %invariant.gep1146 = getelementptr double, ptr %90, i64 %indvars.iv1048
  %invariant.gep1144 = getelementptr double, ptr %106, i64 %indvars.iv1048
  %bound0 = icmp ult ptr %scevgep, %scevgep1203
  %bound1 = icmp ult ptr %98, %scevgep1202
  %found.conflict = and i1 %bound0, %bound1
  %conflict.rdx = or i1 %found.conflict, %found.conflict1208
  br label %.preheader701.us.us.us.us.us.us.us.us.us.us

.preheader701.us.us.us.us.us.us.us.us.us.us:      ; preds = %._crit_edge755.us.us.us.us.us.us.us.us.us.us, %.preheader702.us.us.us.us.us.us.us.us.us
  %indvars.iv1043 = phi i64 [ %indvars.iv.next1044, %._crit_edge755.us.us.us.us.us.us.us.us.us.us ], [ 0, %.preheader702.us.us.us.us.us.us.us.us.us ]
  %497 = mul nuw nsw i64 %indvars.iv1043, %234
  %gep1147 = getelementptr double, ptr %invariant.gep1146, i64 %497
  %invariant.gep1142 = getelementptr double, ptr %98, i64 %indvars.iv1043
  %brmerge1229 = or i1 %min.iters.check1211, %494
  %brmerge1230 = select i1 %brmerge1229, i1 true, i1 %conflict.rdx
  br i1 %brmerge1230, label %scalar.ph1210.preheader, label %vector.ph1212

vector.ph1212:                                    ; preds = %.preheader701.us.us.us.us.us.us.us.us.us.us
  %498 = load double, ptr %gep1147, align 8, !tbaa !16, !alias.scope !53
  %broadcast.splatinsert1223 = insertelement <2 x double> poison, double %498, i64 0
  %broadcast.splat1224 = shufflevector <2 x double> %broadcast.splatinsert1223, <2 x double> poison, <2 x i32> zeroinitializer
  br label %vector.body1216

vector.body1216:                                  ; preds = %vector.body1216, %vector.ph1212
  %index1217 = phi i64 [ 0, %vector.ph1212 ], [ %index.next1225, %vector.body1216 ]
  %499 = getelementptr double, ptr %invariant.gep1142, i64 %index1217
  %500 = getelementptr i8, ptr %499, i64 16
  %wide.load = load <2 x double>, ptr %499, align 8, !tbaa !16, !alias.scope !56
  %wide.load1218 = load <2 x double>, ptr %500, align 8, !tbaa !16, !alias.scope !56
  %501 = getelementptr double, ptr %invariant.gep1144, i64 %index1217
  %502 = getelementptr i8, ptr %501, i64 16
  %wide.load1219 = load <2 x double>, ptr %501, align 8, !tbaa !16, !alias.scope !58, !noalias !60
  %wide.load1220 = load <2 x double>, ptr %502, align 8, !tbaa !16, !alias.scope !58, !noalias !60
  %503 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %wide.load, <2 x double> %broadcast.splat1224, <2 x double> %wide.load1219)
  %504 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %wide.load1218, <2 x double> %broadcast.splat1224, <2 x double> %wide.load1220)
  store <2 x double> %503, ptr %501, align 8, !tbaa !16, !alias.scope !58, !noalias !60
  store <2 x double> %504, ptr %502, align 8, !tbaa !16, !alias.scope !58, !noalias !60
  %index.next1225 = add nuw i64 %index1217, 4
  %505 = icmp eq i64 %index.next1225, %n.vec1214
  br i1 %505, label %middle.block1209, label %vector.body1216, !llvm.loop !61

middle.block1209:                                 ; preds = %vector.body1216
  br i1 %cmp.n1226, label %._crit_edge755.us.us.us.us.us.us.us.us.us.us, label %scalar.ph1210.preheader

scalar.ph1210.preheader:                          ; preds = %.preheader701.us.us.us.us.us.us.us.us.us.us, %middle.block1209
  %indvars.iv1038.ph = phi i64 [ 0, %.preheader701.us.us.us.us.us.us.us.us.us.us ], [ %n.vec1214, %middle.block1209 ]
  br i1 %lcmp.mod.not, label %scalar.ph1210.prol.loopexit, label %scalar.ph1210.prol

scalar.ph1210.prol:                               ; preds = %scalar.ph1210.preheader
  %506 = mul nuw nsw i64 %indvars.iv1038.ph, %236
  %gep1143.prol = getelementptr double, ptr %invariant.gep1142, i64 %506
  %507 = load double, ptr %gep1143.prol, align 8, !tbaa !16
  %508 = load double, ptr %gep1147, align 8, !tbaa !16
  %509 = mul nuw nsw i64 %indvars.iv1038.ph, %234
  %gep1145.prol = getelementptr double, ptr %invariant.gep1144, i64 %509
  %510 = load double, ptr %gep1145.prol, align 8, !tbaa !16
  %511 = call double @llvm.fmuladd.f64(double %507, double %508, double %510)
  store double %511, ptr %gep1145.prol, align 8, !tbaa !16
  %indvars.iv.next1039.prol = or disjoint i64 %indvars.iv1038.ph, 1
  br label %scalar.ph1210.prol.loopexit

scalar.ph1210.prol.loopexit:                      ; preds = %scalar.ph1210.prol, %scalar.ph1210.preheader
  %indvars.iv1038.unr = phi i64 [ %indvars.iv1038.ph, %scalar.ph1210.preheader ], [ %indvars.iv.next1039.prol, %scalar.ph1210.prol ]
  %512 = icmp eq i64 %indvars.iv1038.ph, %495
  br i1 %512, label %._crit_edge755.us.us.us.us.us.us.us.us.us.us, label %scalar.ph1210

scalar.ph1210:                                    ; preds = %scalar.ph1210.prol.loopexit, %scalar.ph1210
  %indvars.iv1038 = phi i64 [ %indvars.iv.next1039.1, %scalar.ph1210 ], [ %indvars.iv1038.unr, %scalar.ph1210.prol.loopexit ]
  %513 = mul nuw nsw i64 %indvars.iv1038, %236
  %gep1143 = getelementptr double, ptr %invariant.gep1142, i64 %513
  %514 = load double, ptr %gep1143, align 8, !tbaa !16
  %515 = load double, ptr %gep1147, align 8, !tbaa !16
  %516 = mul nuw nsw i64 %indvars.iv1038, %234
  %gep1145 = getelementptr double, ptr %invariant.gep1144, i64 %516
  %517 = load double, ptr %gep1145, align 8, !tbaa !16
  %518 = call double @llvm.fmuladd.f64(double %514, double %515, double %517)
  store double %518, ptr %gep1145, align 8, !tbaa !16
  %indvars.iv.next1039 = add nuw nsw i64 %indvars.iv1038, 1
  %519 = mul nuw nsw i64 %indvars.iv.next1039, %236
  %gep1143.1 = getelementptr double, ptr %invariant.gep1142, i64 %519
  %520 = load double, ptr %gep1143.1, align 8, !tbaa !16
  %521 = load double, ptr %gep1147, align 8, !tbaa !16
  %522 = mul nuw nsw i64 %indvars.iv.next1039, %234
  %gep1145.1 = getelementptr double, ptr %invariant.gep1144, i64 %522
  %523 = load double, ptr %gep1145.1, align 8, !tbaa !16
  %524 = call double @llvm.fmuladd.f64(double %520, double %521, double %523)
  store double %524, ptr %gep1145.1, align 8, !tbaa !16
  %indvars.iv.next1039.1 = add nuw nsw i64 %indvars.iv1038, 2
  %exitcond1042.not.1 = icmp eq i64 %indvars.iv.next1039.1, %wide.trip.count1041
  br i1 %exitcond1042.not.1, label %._crit_edge755.us.us.us.us.us.us.us.us.us.us, label %scalar.ph1210, !llvm.loop !62

._crit_edge755.us.us.us.us.us.us.us.us.us.us:     ; preds = %scalar.ph1210.prol.loopexit, %scalar.ph1210, %middle.block1209
  %indvars.iv.next1044 = add nuw nsw i64 %indvars.iv1043, 1
  %exitcond1047.not = icmp eq i64 %indvars.iv.next1044, %wide.trip.count1046
  br i1 %exitcond1047.not, label %._crit_edge757.split.us.us.us.us.us.us.us.us.us.us, label %.preheader701.us.us.us.us.us.us.us.us.us.us, !llvm.loop !63

._crit_edge757.split.us.us.us.us.us.us.us.us.us.us: ; preds = %._crit_edge755.us.us.us.us.us.us.us.us.us.us
  %indvars.iv.next1049 = add nuw nsw i64 %indvars.iv1048, 1
  %exitcond1052.not = icmp eq i64 %indvars.iv.next1049, %wide.trip.count1051
  br i1 %exitcond1052.not, label %._crit_edge760.split.us.split.us.us.us.us.us.us.us.us, label %.preheader702.us.us.us.us.us.us.us.us.us, !llvm.loop !64

._crit_edge760.split.us.split.us.us.us.us.us.us.us.us: ; preds = %._crit_edge757.split.us.us.us.us.us.us.us.us.us.us
  %525 = add nuw nsw i32 %.0590765.us.us.us.us.us.us.us, 1
  %526 = icmp slt i32 %525, %.
  br i1 %526, label %.preheader702.lr.ph.us.us.us.us.us.us.us, label %._crit_edge767.split.us.split.us.split.us.us.us.us.us, !llvm.loop !65

._crit_edge767.split.us.split.us.split.us.us.us.us.us: ; preds = %._crit_edge760.split.us.split.us.us.us.us.us.us.us.us
  %527 = add nuw nsw i32 %.0591776.us.us.us.us, 1
  %exitcond1053.not = icmp eq i32 %527, %umax
  br i1 %exitcond1053.not, label %.split.us, label %.preheader703.us.us.us.us, !llvm.loop !66

.split.us:                                        ; preds = %._crit_edge767.split.us.split.us.split.us.us.us.us.us, %.preheader704
  %528 = invoke i64 @libxsmm_timer_tick()
          to label %531 unwind label %550

529:                                              ; preds = %473
  %530 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  br label %574

531:                                              ; preds = %.split.us
  %532 = call noundef i64 @_Z21libxsmm_timer_ncyclesyy(i64 noundef %476, i64 noundef %528)
  %533 = call double @libxsmm_timer_duration(i64 noundef 0, i64 noundef %532)
  %534 = uitofp nneg i32 %46 to double
  %535 = fdiv double %533, %534
  %536 = fcmp ogt double %535, 0.000000e+00
  %537 = icmp ne i64 %532, 0
  %or.cond9 = and i1 %537, %536
  br i1 %or.cond9, label %538, label %554

538:                                              ; preds = %531
  %539 = load ptr, ptr @stdout, align 8, !tbaa !5
  %540 = call double @llvm.fmuladd.f64(double %68, double 2.000000e+00, double -1.000000e+00)
  %541 = fmul double %64, %62
  %542 = fmul double %541, %66
  %543 = fmul double %540, %542
  %544 = uitofp i64 %532 to double
  %545 = fdiv double %543, %544
  %546 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %539, ptr noundef nonnull @.str.4, double noundef %545, ptr noundef nonnull %4) #14
  %547 = load ptr, ptr @stdout, align 8, !tbaa !5
  %548 = fdiv double %69, %535
  %549 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %547, ptr noundef nonnull @.str.5, double noundef %548, ptr noundef nonnull %4) #14
  br label %554

550:                                              ; preds = %.split.us
  %551 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  br label %574

552:                                              ; preds = %232
  %553 = call ptr @__cxa_allocate_exception(i64 8) #14
  store ptr @.str.12, ptr %553, align 16, !tbaa !5
  invoke void @__cxa_throw(ptr nonnull %553, ptr nonnull @_ZTIPKc, ptr null) #15
          to label %596 unwind label %242

554:                                              ; preds = %531, %538, %446, %453, %387, %394, %329, %336, %276, %283
  %.sink1195 = phi double [ %280, %283 ], [ %280, %276 ], [ %333, %336 ], [ %333, %329 ], [ %391, %394 ], [ %391, %387 ], [ %450, %453 ], [ %450, %446 ], [ %535, %538 ], [ %535, %531 ]
  %555 = load ptr, ptr @stdout, align 8, !tbaa !5
  %556 = fmul double %.sink1195, 1.000000e+03
  %557 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %555, ptr noundef nonnull @.str.7, double noundef %556) #14
  %.not = icmp eq i32 %76, 0
  br i1 %.not, label %570, label %558

558:                                              ; preds = %554
  call void @llvm.lifetime.start.p0(i64 192, ptr nonnull %6) #14
  %559 = invoke i32 @libxsmm_matdiff(ptr noundef nonnull %6, i32 noundef 0, i32 noundef %44, i32 noundef %45, ptr noundef %106, ptr noundef null, ptr noundef nonnull %3, ptr noundef nonnull %3)
          to label %560 unwind label %567

560:                                              ; preds = %558
  %561 = icmp eq i32 %559, 0
  br i1 %561, label %562, label %569

562:                                              ; preds = %560
  %563 = load ptr, ptr @stdout, align 8, !tbaa !5
  %564 = getelementptr inbounds i8, ptr %6, i64 80
  %565 = load double, ptr %564, align 8, !tbaa !67
  %566 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %563, ptr noundef nonnull @.str.13, double noundef %565) #14
  br label %569

567:                                              ; preds = %558
  %568 = landingpad { ptr, i32 }
          catch ptr @_ZTISt9exception
          catch ptr @_ZTIPKc
          catch ptr null
  call void @llvm.lifetime.end.p0(i64 192, ptr nonnull %6) #14
  br label %574

569:                                              ; preds = %562, %560
  call void @llvm.lifetime.end.p0(i64 192, ptr nonnull %6) #14
  br label %570

570:                                              ; preds = %569, %554
  %.0 = phi i32 [ %559, %569 ], [ 0, %554 ]
  invoke void @libxsmm_finalize()
          to label %571 unwind label %242

571:                                              ; preds = %570
  %572 = load ptr, ptr @stdout, align 8, !tbaa !5
  %573 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %572, ptr noundef nonnull @.str.14) #14
  call void @_ZZ4mainEN4raiiD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %5) #14
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %5) #14
  call void @llvm.lifetime.end.p0(i64 6, ptr nonnull %4) #14
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %3) #14
  br label %586

574:                                              ; preds = %529, %550, %444, %471, %385, %414, %327, %356, %274, %301, %163, %205, %567, %242
  %.pn683 = phi { ptr, i32 } [ %243, %242 ], [ %568, %567 ], [ %206, %205 ], [ %164, %163 ], [ %302, %301 ], [ %275, %274 ], [ %357, %356 ], [ %328, %327 ], [ %415, %414 ], [ %386, %385 ], [ %472, %471 ], [ %445, %444 ], [ %551, %550 ], [ %530, %529 ]
  call void @_ZZ4mainEN4raiiD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %5) #14
  br label %575

575:                                              ; preds = %574, %123
  %.pn683.pn = phi { ptr, i32 } [ %.pn683, %574 ], [ %124, %123 ]
  %.7 = extractvalue { ptr, i32 } %.pn683.pn, 0
  %.7567 = extractvalue { ptr, i32 } %.pn683.pn, 1
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %5) #14
  call void @llvm.lifetime.end.p0(i64 6, ptr nonnull %4) #14
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %3) #14
  %576 = call i32 @llvm.eh.typeid.for.p0(ptr nonnull @_ZTISt9exception) #14
  %577 = icmp eq i32 %.7567, %576
  br i1 %577, label %578, label %587

578:                                              ; preds = %575
  %579 = call ptr @__cxa_begin_catch(ptr %.7) #14
  %580 = load ptr, ptr @stderr, align 8, !tbaa !5
  %581 = load ptr, ptr %579, align 8, !tbaa !69
  %582 = getelementptr inbounds i8, ptr %581, i64 16
  %583 = load ptr, ptr %582, align 8
  %584 = call noundef ptr %583(ptr noundef nonnull align 8 dereferenceable(8) %579) #14
  %585 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %580, ptr noundef nonnull @.str.16, ptr noundef %584) #16
  call void @__cxa_end_catch()
  br label %586

586:                                              ; preds = %594, %592, %578, %571
  %.1 = phi i32 [ 1, %578 ], [ 1, %592 ], [ 1, %594 ], [ %.0, %571 ]
  ret i32 %.1

587:                                              ; preds = %575
  %588 = call i32 @llvm.eh.typeid.for.p0(ptr nonnull @_ZTIPKc) #14
  %589 = icmp eq i32 %.7567, %588
  %590 = call ptr @__cxa_begin_catch(ptr %.7) #14
  %591 = load ptr, ptr @stderr, align 8, !tbaa !5
  br i1 %589, label %592, label %594

592:                                              ; preds = %587
  %593 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %591, ptr noundef nonnull @.str.16, ptr noundef %590) #16
  call void @__cxa_end_catch() #14
  br label %586

594:                                              ; preds = %587
  %595 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %591, ptr noundef nonnull @.str.15) #16
  call void @__cxa_end_catch()
  br label %586

596:                                              ; preds = %552
  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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local i64 @libxsmm_coprime2(i64 noundef) local_unnamed_addr #8

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local 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: inlinehint mustprogress uwtable
declare dso_local i64 @libxsmm_timer_tick() local_unnamed_addr #8

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

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

declare ptr @__cxa_allocate_exception(i64) local_unnamed_addr

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local i32 @libxsmm_matdiff(ptr noundef, i32 noundef, i32 noundef, i32 noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #8

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local 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) #11

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) #12

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

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!12, !6, i64 0}
!12 = !{!"_ZTSZ4mainE4raii", !6, i64 0, !6, i64 8, !6, i64 16, !13, i64 24, !13, i64 32}
!13 = !{!"long", !7, i64 0}
!14 = !{!12, !6, i64 8}
!15 = !{!12, !6, i64 16}
!16 = !{!17, !17, i64 0}
!17 = !{!"double", !7, i64 0}
!18 = distinct !{!18, !19}
!19 = !{!"llvm.loop.mustprogress"}
!20 = distinct !{!20, !19}
!21 = distinct !{!21, !19}
!22 = distinct !{!22, !19}
!23 = distinct !{!23, !19}
!24 = distinct !{!24, !19}
!25 = distinct !{!25, !19}
!26 = distinct !{!26, !19}
!27 = distinct !{!27, !19, !28, !29}
!28 = !{!"llvm.loop.isvectorized", i32 1}
!29 = !{!"llvm.loop.unroll.runtime.disable"}
!30 = distinct !{!30, !19, !29, !28}
!31 = distinct !{!31, !19}
!32 = distinct !{!32, !19}
!33 = distinct !{!33, !19}
!34 = distinct !{!34, !19}
!35 = distinct !{!35, !19}
!36 = distinct !{!36, !19}
!37 = distinct !{!37, !19}
!38 = distinct !{!38, !19}
!39 = distinct !{!39, !19}
!40 = distinct !{!40, !19}
!41 = distinct !{!41, !19}
!42 = distinct !{!42, !19}
!43 = distinct !{!43, !19}
!44 = distinct !{!44, !19}
!45 = distinct !{!45, !19}
!46 = distinct !{!46, !19}
!47 = distinct !{!47, !19}
!48 = distinct !{!48, !19}
!49 = distinct !{!49, !19}
!50 = distinct !{!50, !19}
!51 = distinct !{!51, !19}
!52 = distinct !{!52, !19}
!53 = !{!54}
!54 = distinct !{!54, !55}
!55 = distinct !{!55, !"LVerDomain"}
!56 = !{!57}
!57 = distinct !{!57, !55}
!58 = !{!59}
!59 = distinct !{!59, !55}
!60 = !{!57, !54}
!61 = distinct !{!61, !19, !28, !29}
!62 = distinct !{!62, !19, !28}
!63 = distinct !{!63, !19}
!64 = distinct !{!64, !19}
!65 = distinct !{!65, !19}
!66 = distinct !{!66, !19}
!67 = !{!68, !17, i64 80}
!68 = !{!"_ZTS20libxsmm_matdiff_info", !17, i64 0, !17, i64 8, !17, i64 16, !17, i64 24, !17, i64 32, !17, i64 40, !17, i64 48, !17, i64 56, !17, i64 64, !17, i64 72, !17, i64 80, !17, i64 88, !17, i64 96, !17, i64 104, !17, i64 112, !17, i64 120, !17, i64 128, !17, i64 136, !17, i64 144, !17, i64 152, !17, i64 160, !17, i64 168, !10, i64 176, !10, i64 180, !10, i64 184, !10, i64 188}
!69 = !{!70, !70, i64 0}
!70 = !{!"vtable pointer", !8, i64 0}


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