; LLVM IR from libxsmm/libxsmm :: samples/xgemm_packed (gemm_packed_kernel)

; Unoptimized IR (clang -disable-llvm-passes):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

%struct.libxsmm_gemm_shape = type { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 }
%struct.libxsmm_kernel_info = type { i32, i32, i64, i32 }
%struct.libxsmm_gemm_param = type { %struct.libxsmm_matrix_op_arg, %struct.libxsmm_matrix_arg, %struct.libxsmm_matrix_arg, %struct.libxsmm_matrix_arg }
%struct.libxsmm_matrix_op_arg = type { ptr, ptr, ptr, ptr }
%struct.libxsmm_matrix_arg = type { ptr, ptr, ptr, ptr, ptr, ptr }

@stderr = external global ptr, align 8
@.str = external hidden unnamed_addr constant [49 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [67 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [50 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [72 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [61 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [91 x i8], align 1
@__PRETTY_FUNCTION__.main = external hidden unnamed_addr constant [23 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [88 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [28 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local i32 @main(i32 noundef %0, ptr noundef %1) #0 {
  %3 = alloca i32, align 4
  %4 = alloca i32, align 4
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  %14 = alloca i32, align 4
  %15 = alloca i32, align 4
  %16 = alloca i32, align 4
  %17 = alloca i32, align 4
  %18 = alloca i32, align 4
  %19 = alloca i32, align 4
  %20 = alloca i32, align 4
  %21 = alloca double, align 8
  %22 = alloca double, align 8
  %23 = alloca i32, align 4
  %24 = alloca i32, align 4
  %25 = alloca i32, align 4
  %26 = alloca ptr, align 8
  %27 = alloca i32, align 4
  %28 = alloca i32, align 4
  %29 = alloca ptr, align 8
  %30 = alloca i32, align 4
  %31 = alloca i32, align 4
  %32 = alloca [512 x i8], align 16
  %33 = alloca double, align 8
  %34 = alloca ptr, align 8
  %35 = alloca ptr, align 8
  %36 = alloca ptr, align 8
  %37 = alloca ptr, align 8
  %38 = alloca ptr, align 8
  %39 = alloca %struct.libxsmm_gemm_shape, align 8
  %40 = alloca i32, align 4
  %41 = alloca i32, align 4
  %42 = alloca i64, align 8
  %43 = alloca %struct.libxsmm_kernel_info, align 8
  %44 = alloca %struct.libxsmm_gemm_param, align 8
  %45 = alloca i64, align 8
  %46 = alloca i64, align 8
  %47 = alloca double, align 8
  %48 = alloca double, align 8
  %49 = alloca double, align 8
  %50 = alloca double, align 8
  %51 = alloca i32, align 4
  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 8, ptr %6) #8
  store ptr null, ptr %6, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #8
  store ptr null, ptr %7, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #8
  store ptr null, ptr %8, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #8
  store ptr null, ptr %9, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #8
  store i32 0, ptr %14, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #8
  store i32 0, ptr %15, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #8
  store i32 0, ptr %16, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #8
  store i32 0, ptr %17, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #8
  store i32 0, ptr %18, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #8
  store i32 0, ptr %19, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #8
  store i32 0, ptr %20, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #8
  store double 0.000000e+00, ptr %21, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #8
  store double 0.000000e+00, ptr %22, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #8
  store i32 0, ptr %23, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #8
  store i32 0, ptr %24, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #8
  store i32 0, ptr %27, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #8
  store i32 0, ptr %28, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #8
  store ptr null, ptr %29, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #8
  store i32 0, ptr %30, align 4, !tbaa !5
  %52 = load i32, ptr %4, align 4, !tbaa !5
  %53 = icmp eq i32 %52, 17
  br i1 %53, label %54, label %115

54:                                               ; preds = %2
  %55 = load ptr, ptr %5, align 8, !tbaa !9
  %56 = getelementptr inbounds ptr, ptr %55, i64 1
  %57 = load ptr, ptr %56, align 8, !tbaa !9
  store ptr %57, ptr %6, align 8, !tbaa !9
  %58 = load ptr, ptr %5, align 8, !tbaa !9
  %59 = getelementptr inbounds ptr, ptr %58, i64 2
  %60 = load ptr, ptr %59, align 8, !tbaa !9
  store ptr %60, ptr %7, align 8, !tbaa !9
  %61 = load ptr, ptr %5, align 8, !tbaa !9
  %62 = getelementptr inbounds ptr, ptr %61, i64 3
  %63 = load ptr, ptr %62, align 8, !tbaa !9
  store ptr %63, ptr %8, align 8, !tbaa !9
  %64 = load ptr, ptr %5, align 8, !tbaa !9
  %65 = getelementptr inbounds ptr, ptr %64, i64 4
  %66 = load ptr, ptr %65, align 8, !tbaa !9
  store ptr %66, ptr %9, align 8, !tbaa !9
  %67 = load ptr, ptr %5, align 8, !tbaa !9
  %68 = getelementptr inbounds ptr, ptr %67, i64 5
  %69 = load ptr, ptr %68, align 8, !tbaa !9
  %70 = call i32 @atoi(ptr noundef %69) #9
  store i32 %70, ptr %14, align 4, !tbaa !5
  %71 = load ptr, ptr %5, align 8, !tbaa !9
  %72 = getelementptr inbounds ptr, ptr %71, i64 6
  %73 = load ptr, ptr %72, align 8, !tbaa !9
  %74 = call i32 @atoi(ptr noundef %73) #9
  store i32 %74, ptr %15, align 4, !tbaa !5
  %75 = load ptr, ptr %5, align 8, !tbaa !9
  %76 = getelementptr inbounds ptr, ptr %75, i64 7
  %77 = load ptr, ptr %76, align 8, !tbaa !9
  %78 = call i32 @atoi(ptr noundef %77) #9
  store i32 %78, ptr %16, align 4, !tbaa !5
  %79 = load ptr, ptr %5, align 8, !tbaa !9
  %80 = getelementptr inbounds ptr, ptr %79, i64 8
  %81 = load ptr, ptr %80, align 8, !tbaa !9
  %82 = call i32 @atoi(ptr noundef %81) #9
  store i32 %82, ptr %17, align 4, !tbaa !5
  %83 = load ptr, ptr %5, align 8, !tbaa !9
  %84 = getelementptr inbounds ptr, ptr %83, i64 9
  %85 = load ptr, ptr %84, align 8, !tbaa !9
  %86 = call i32 @atoi(ptr noundef %85) #9
  store i32 %86, ptr %18, align 4, !tbaa !5
  %87 = load ptr, ptr %5, align 8, !tbaa !9
  %88 = getelementptr inbounds ptr, ptr %87, i64 10
  %89 = load ptr, ptr %88, align 8, !tbaa !9
  %90 = call i32 @atoi(ptr noundef %89) #9
  store i32 %90, ptr %19, align 4, !tbaa !5
  %91 = load ptr, ptr %5, align 8, !tbaa !9
  %92 = getelementptr inbounds ptr, ptr %91, i64 11
  %93 = load ptr, ptr %92, align 8, !tbaa !9
  %94 = call i32 @atoi(ptr noundef %93) #9
  store i32 %94, ptr %20, align 4, !tbaa !5
  %95 = load ptr, ptr %5, align 8, !tbaa !9
  %96 = getelementptr inbounds ptr, ptr %95, i64 12
  %97 = load ptr, ptr %96, align 8, !tbaa !9
  %98 = call double @atof(ptr noundef %97) #9
  store double %98, ptr %21, align 8, !tbaa !11
  %99 = load ptr, ptr %5, align 8, !tbaa !9
  %100 = getelementptr inbounds ptr, ptr %99, i64 13
  %101 = load ptr, ptr %100, align 8, !tbaa !9
  %102 = call double @atof(ptr noundef %101) #9
  store double %102, ptr %22, align 8, !tbaa !11
  %103 = load ptr, ptr %5, align 8, !tbaa !9
  %104 = getelementptr inbounds ptr, ptr %103, i64 14
  %105 = load ptr, ptr %104, align 8, !tbaa !9
  %106 = call i32 @atoi(ptr noundef %105) #9
  store i32 %106, ptr %23, align 4, !tbaa !5
  %107 = load ptr, ptr %5, align 8, !tbaa !9
  %108 = getelementptr inbounds ptr, ptr %107, i64 15
  %109 = load ptr, ptr %108, align 8, !tbaa !9
  %110 = call i32 @atoi(ptr noundef %109) #9
  store i32 %110, ptr %24, align 4, !tbaa !5
  %111 = load ptr, ptr %5, align 8, !tbaa !9
  %112 = getelementptr inbounds ptr, ptr %111, i64 16
  %113 = load ptr, ptr %112, align 8, !tbaa !9
  %114 = call i32 @atoi(ptr noundef %113) #9
  store i32 %114, ptr %25, align 4, !tbaa !5
  br label %156

115:                                              ; preds = %2
  %116 = load i32, ptr %4, align 4, !tbaa !5
  %117 = icmp eq i32 %116, 11
  br i1 %117, label %118, label %154

118:                                              ; preds = %115
  store i32 1, ptr %30, align 4, !tbaa !5
  %119 = load ptr, ptr %5, align 8, !tbaa !9
  %120 = getelementptr inbounds ptr, ptr %119, i64 1
  %121 = load ptr, ptr %120, align 8, !tbaa !9
  store ptr %121, ptr %6, align 8, !tbaa !9
  %122 = load ptr, ptr %5, align 8, !tbaa !9
  %123 = getelementptr inbounds ptr, ptr %122, i64 2
  %124 = load ptr, ptr %123, align 8, !tbaa !9
  store ptr %124, ptr %7, align 8, !tbaa !9
  %125 = load ptr, ptr %5, align 8, !tbaa !9
  %126 = getelementptr inbounds ptr, ptr %125, i64 3
  %127 = load ptr, ptr %126, align 8, !tbaa !9
  store ptr %127, ptr %8, align 8, !tbaa !9
  %128 = load ptr, ptr %5, align 8, !tbaa !9
  %129 = getelementptr inbounds ptr, ptr %128, i64 4
  %130 = load ptr, ptr %129, align 8, !tbaa !9
  store ptr %130, ptr %9, align 8, !tbaa !9
  %131 = load ptr, ptr %5, align 8, !tbaa !9
  %132 = getelementptr inbounds ptr, ptr %131, i64 5
  %133 = load ptr, ptr %132, align 8, !tbaa !9
  store ptr %133, ptr %26, align 8, !tbaa !9
  %134 = load ptr, ptr %5, align 8, !tbaa !9
  %135 = getelementptr inbounds ptr, ptr %134, i64 6
  %136 = load ptr, ptr %135, align 8, !tbaa !9
  %137 = call double @atof(ptr noundef %136) #9
  store double %137, ptr %21, align 8, !tbaa !11
  %138 = load ptr, ptr %5, align 8, !tbaa !9
  %139 = getelementptr inbounds ptr, ptr %138, i64 7
  %140 = load ptr, ptr %139, align 8, !tbaa !9
  %141 = call double @atof(ptr noundef %140) #9
  store double %141, ptr %22, align 8, !tbaa !11
  %142 = load ptr, ptr %5, align 8, !tbaa !9
  %143 = getelementptr inbounds ptr, ptr %142, i64 8
  %144 = load ptr, ptr %143, align 8, !tbaa !9
  %145 = call i32 @atoi(ptr noundef %144) #9
  store i32 %145, ptr %23, align 4, !tbaa !5
  %146 = load ptr, ptr %5, align 8, !tbaa !9
  %147 = getelementptr inbounds ptr, ptr %146, i64 9
  %148 = load ptr, ptr %147, align 8, !tbaa !9
  %149 = call i32 @atoi(ptr noundef %148) #9
  store i32 %149, ptr %24, align 4, !tbaa !5
  %150 = load ptr, ptr %5, align 8, !tbaa !9
  %151 = getelementptr inbounds ptr, ptr %150, i64 10
  %152 = load ptr, ptr %151, align 8, !tbaa !9
  %153 = call i32 @atoi(ptr noundef %152) #9
  store i32 %153, ptr %25, align 4, !tbaa !5
  br label %155

154:                                              ; preds = %115
  call void @print_help()
  store i32 1, ptr %3, align 4
  store i32 1, ptr %31, align 4
  br label %798

155:                                              ; preds = %118
  br label %156

156:                                              ; preds = %155, %54
  %157 = load ptr, ptr %26, align 8, !tbaa !9
  %158 = load double, ptr %21, align 8, !tbaa !11
  %159 = load i32, ptr %23, align 4, !tbaa !5
  %160 = load i32, ptr %24, align 4, !tbaa !5
  %161 = load i32, ptr %23, align 4, !tbaa !5
  %162 = icmp ne i32 %161, 0
  br i1 %162, label %166, label %163

163:                                              ; preds = %156
  %164 = load i32, ptr %24, align 4, !tbaa !5
  %165 = icmp ne i32 %164, 0
  br i1 %165, label %166, label %171

166:                                              ; preds = %163, %156
  %167 = load ptr, ptr @stderr, align 8, !tbaa !9
  %168 = load i32, ptr %23, align 4, !tbaa !5
  %169 = load i32, ptr %24, align 4, !tbaa !5
  %170 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %167, ptr noundef @.str, i32 noundef %168, i32 noundef %169) #8
  call void @exit(i32 noundef 1) #10
  unreachable

171:                                              ; preds = %163
  %172 = load ptr, ptr %6, align 8, !tbaa !9
  %173 = call i32 @char_to_libxsmm_datatype(ptr noundef %172)
  store i32 %173, ptr %10, align 4, !tbaa !5
  %174 = load ptr, ptr %7, align 8, !tbaa !9
  %175 = call i32 @char_to_libxsmm_datatype(ptr noundef %174)
  store i32 %175, ptr %11, align 4, !tbaa !5
  %176 = load ptr, ptr %8, align 8, !tbaa !9
  %177 = call i32 @char_to_libxsmm_datatype(ptr noundef %176)
  store i32 %177, ptr %12, align 4, !tbaa !5
  %178 = load ptr, ptr %9, align 8, !tbaa !9
  %179 = call i32 @char_to_libxsmm_datatype(ptr noundef %178)
  store i32 %179, ptr %13, align 4, !tbaa !5
  %180 = load i32, ptr %10, align 4, !tbaa !5
  %181 = icmp eq i32 %180, 0
  br i1 %181, label %182, label %191

182:                                              ; preds = %171
  %183 = load i32, ptr %11, align 4, !tbaa !5
  %184 = icmp eq i32 %183, 0
  br i1 %184, label %185, label %191

185:                                              ; preds = %182
  %186 = load i32, ptr %12, align 4, !tbaa !5
  %187 = icmp eq i32 %186, 0
  br i1 %187, label %188, label %191

188:                                              ; preds = %185
  %189 = load i32, ptr %13, align 4, !tbaa !5
  %190 = icmp eq i32 %189, 0
  br i1 %190, label %210, label %191

191:                                              ; preds = %188, %185, %182, %171
  %192 = load i32, ptr %10, align 4, !tbaa !5
  %193 = icmp eq i32 %192, 1
  br i1 %193, label %194, label %203

194:                                              ; preds = %191
  %195 = load i32, ptr %11, align 4, !tbaa !5
  %196 = icmp eq i32 %195, 1
  br i1 %196, label %197, label %203

197:                                              ; preds = %194
  %198 = load i32, ptr %12, align 4, !tbaa !5
  %199 = icmp eq i32 %198, 1
  br i1 %199, label %200, label %203

200:                                              ; preds = %197
  %201 = load i32, ptr %13, align 4, !tbaa !5
  %202 = icmp eq i32 %201, 1
  br i1 %202, label %210, label %203

203:                                              ; preds = %200, %197, %194, %191
  %204 = load ptr, ptr @stderr, align 8, !tbaa !9
  %205 = load ptr, ptr %6, align 8, !tbaa !9
  %206 = load ptr, ptr %7, align 8, !tbaa !9
  %207 = load ptr, ptr %8, align 8, !tbaa !9
  %208 = load ptr, ptr %9, align 8, !tbaa !9
  %209 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %204, ptr noundef @.str.1, ptr noundef %205, ptr noundef %206, ptr noundef %207, ptr noundef %208) #8
  call void @exit(i32 noundef 1) #10
  unreachable

210:                                              ; preds = %200, %188
  %211 = load i32, ptr %30, align 4, !tbaa !5
  %212 = icmp ne i32 %211, 0
  br i1 %212, label %213, label %216

213:                                              ; preds = %210
  %214 = load ptr, ptr %26, align 8, !tbaa !9
  %215 = call noalias ptr @fopen(ptr noundef %214, ptr noundef @.str.2)
  store ptr %215, ptr %29, align 8, !tbaa !9
  br label %233

216:                                              ; preds = %210
  %217 = call i32 (ptr, ...) @printf(ptr noundef @.str.3)
  %218 = load i32, ptr %14, align 4, !tbaa !5
  %219 = load i32, ptr %16, align 4, !tbaa !5
  %220 = load i32, ptr %20, align 4, !tbaa !5
  %221 = load i32, ptr %16, align 4, !tbaa !5
  %222 = load i32, ptr %15, align 4, !tbaa !5
  %223 = load i32, ptr %20, align 4, !tbaa !5
  %224 = load i32, ptr %14, align 4, !tbaa !5
  %225 = load i32, ptr %15, align 4, !tbaa !5
  %226 = load i32, ptr %20, align 4, !tbaa !5
  %227 = load ptr, ptr %6, align 8, !tbaa !9
  %228 = load ptr, ptr %7, align 8, !tbaa !9
  %229 = load ptr, ptr %8, align 8, !tbaa !9
  %230 = load ptr, ptr %9, align 8, !tbaa !9
  %231 = call i32 (ptr, ...) @printf(ptr noundef @.str.4, i32 noundef %218, i32 noundef %219, i32 noundef %220, i32 noundef %221, i32 noundef %222, i32 noundef %223, i32 noundef %224, i32 noundef %225, i32 noundef %226, ptr noundef %227, ptr noundef %228, ptr noundef %229, ptr noundef %230)
  %232 = call i32 (ptr, ...) @printf(ptr noundef @.str.3)
  br label %233

233:                                              ; preds = %216, %213
  store i32 0, ptr %28, align 4, !tbaa !5
  br label %234

234:                                              ; preds = %793, %233
  %235 = load i32, ptr %30, align 4, !tbaa !5
  %236 = icmp ne i32 %235, 0
  br i1 %236, label %237, label %257

237:                                              ; preds = %234
  call void @llvm.lifetime.start.p0(i64 512, ptr %32) #8
  %238 = getelementptr inbounds [512 x i8], ptr %32, i64 0, i64 0
  %239 = load ptr, ptr %29, align 8, !tbaa !9
  %240 = call ptr @fgets(ptr noundef %238, i32 noundef 512, ptr noundef %239)
  %241 = icmp eq ptr %240, null
  br i1 %241, label %242, label %243

242:                                              ; preds = %237
  store i32 0, ptr %28, align 4, !tbaa !5
  store i32 2, ptr %31, align 4
  br label %254

243:                                              ; preds = %237
  store i32 1, ptr %28, align 4, !tbaa !5
  br label %244

244:                                              ; preds = %243
  %245 = getelementptr inbounds [512 x i8], ptr %32, i64 0, i64 0
  %246 = call i32 (ptr, ptr, ...) @__isoc99_sscanf(ptr noundef %245, ptr noundef @.str.5, ptr noundef %14, ptr noundef %15, ptr noundef %16, ptr noundef %17, ptr noundef %18, ptr noundef %19, ptr noundef %20) #8
  %247 = icmp ne i32 7, %246
  br i1 %247, label %248, label %249

248:                                              ; preds = %244
  call void @exit(i32 noundef 1) #10
  unreachable

249:                                              ; preds = %244
  %250 = load i32, ptr %28, align 4, !tbaa !5
  %251 = icmp eq i32 %250, 0
  br i1 %251, label %252, label %253

252:                                              ; preds = %249
  store i32 2, ptr %31, align 4
  br label %254

253:                                              ; preds = %249
  store i32 0, ptr %31, align 4
  br label %254

254:                                              ; preds = %253, %252, %242
  call void @llvm.lifetime.end.p0(i64 512, ptr %32) #8
  %255 = load i32, ptr %31, align 4
  switch i32 %255, label %800 [
    i32 0, label %256
    i32 2, label %796
  ]

256:                                              ; preds = %254
  br label %257

257:                                              ; preds = %256, %234
  %258 = load ptr, ptr %5, align 8, !tbaa !9
  %259 = getelementptr inbounds ptr, ptr %258, i64 0
  %260 = load ptr, ptr %259, align 8, !tbaa !9
  %261 = load ptr, ptr %6, align 8, !tbaa !9
  %262 = load ptr, ptr %7, align 8, !tbaa !9
  %263 = load ptr, ptr %8, align 8, !tbaa !9
  %264 = load ptr, ptr %9, align 8, !tbaa !9
  %265 = load i32, ptr %14, align 4, !tbaa !5
  %266 = load i32, ptr %15, align 4, !tbaa !5
  %267 = load i32, ptr %16, align 4, !tbaa !5
  %268 = load i32, ptr %17, align 4, !tbaa !5
  %269 = load i32, ptr %18, align 4, !tbaa !5
  %270 = load i32, ptr %19, align 4, !tbaa !5
  %271 = load i32, ptr %20, align 4, !tbaa !5
  %272 = load double, ptr %21, align 8, !tbaa !11
  %273 = load double, ptr %22, align 8, !tbaa !11
  %274 = load i32, ptr %23, align 4, !tbaa !5
  %275 = load i32, ptr %24, align 4, !tbaa !5
  %276 = load i32, ptr %25, align 4, !tbaa !5
  %277 = call i32 (ptr, ...) @printf(ptr noundef @.str.6, ptr noundef %260, ptr noundef %261, ptr noundef %262, ptr noundef %263, ptr noundef %264, i32 noundef %265, i32 noundef %266, i32 noundef %267, i32 noundef %268, i32 noundef %269, i32 noundef %270, i32 noundef %271, double noundef %272, double noundef %273, i32 noundef %274, i32 noundef %275, i32 noundef %276)
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #8
  %278 = load i32, ptr %14, align 4, !tbaa !5
  %279 = sitofp i32 %278 to double
  %280 = fmul double 2.000000e+00, %279
  %281 = load i32, ptr %15, align 4, !tbaa !5
  %282 = sitofp i32 %281 to double
  %283 = fmul double %280, %282
  %284 = load i32, ptr %16, align 4, !tbaa !5
  %285 = sitofp i32 %284 to double
  %286 = fmul double %283, %285
  %287 = load i32, ptr %20, align 4, !tbaa !5
  %288 = sitofp i32 %287 to double
  %289 = fmul double %286, %288
  %290 = load i32, ptr %25, align 4, !tbaa !5
  %291 = sitofp i32 %290 to double
  %292 = fmul double %289, %291
  store double %292, ptr %33, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #8
  %293 = load i32, ptr %17, align 4, !tbaa !5
  %294 = load i32, ptr %16, align 4, !tbaa !5
  %295 = mul nsw i32 %293, %294
  %296 = load i32, ptr %20, align 4, !tbaa !5
  %297 = mul nsw i32 %295, %296
  %298 = load i32, ptr %10, align 4, !tbaa !5
  %299 = icmp eq i32 0, %298
  br i1 %299, label %300, label %301

300:                                              ; preds = %257
  br label %381

301:                                              ; preds = %257
  %302 = load i32, ptr %10, align 4, !tbaa !5
  %303 = icmp eq i32 1, %302
  br i1 %303, label %304, label %305

304:                                              ; preds = %301
  br label %379

305:                                              ; preds = %301
  %306 = load i32, ptr %10, align 4, !tbaa !5
  %307 = icmp eq i32 2, %306
  br i1 %307, label %308, label %309

308:                                              ; preds = %305
  br label %377

309:                                              ; preds = %305
  %310 = load i32, ptr %10, align 4, !tbaa !5
  %311 = icmp eq i32 3, %310
  br i1 %311, label %312, label %313

312:                                              ; preds = %309
  br label %375

313:                                              ; preds = %309
  %314 = load i32, ptr %10, align 4, !tbaa !5
  %315 = icmp eq i32 4, %314
  br i1 %315, label %316, label %317

316:                                              ; preds = %313
  br label %373

317:                                              ; preds = %313
  %318 = load i32, ptr %10, align 4, !tbaa !5
  %319 = icmp eq i32 5, %318
  br i1 %319, label %320, label %321

320:                                              ; preds = %317
  br label %371

321:                                              ; preds = %317
  %322 = load i32, ptr %10, align 4, !tbaa !5
  %323 = icmp eq i32 6, %322
  br i1 %323, label %324, label %325

324:                                              ; preds = %321
  br label %369

325:                                              ; preds = %321
  %326 = load i32, ptr %10, align 4, !tbaa !5
  %327 = icmp eq i32 7, %326
  br i1 %327, label %328, label %329

328:                                              ; preds = %325
  br label %367

329:                                              ; preds = %325
  %330 = load i32, ptr %10, align 4, !tbaa !5
  %331 = icmp eq i32 8, %330
  br i1 %331, label %332, label %333

332:                                              ; preds = %329
  br label %365

333:                                              ; preds = %329
  %334 = load i32, ptr %10, align 4, !tbaa !5
  %335 = icmp eq i32 9, %334
  br i1 %335, label %336, label %337

336:                                              ; preds = %333
  br label %363

337:                                              ; preds = %333
  %338 = load i32, ptr %10, align 4, !tbaa !5
  %339 = icmp eq i32 10, %338
  br i1 %339, label %340, label %341

340:                                              ; preds = %337
  br label %361

341:                                              ; preds = %337
  %342 = load i32, ptr %10, align 4, !tbaa !5
  %343 = icmp eq i32 11, %342
  br i1 %343, label %344, label %345

344:                                              ; preds = %341
  br label %359

345:                                              ; preds = %341
  %346 = load i32, ptr %10, align 4, !tbaa !5
  %347 = icmp eq i32 12, %346
  br i1 %347, label %348, label %349

348:                                              ; preds = %345
  br label %357

349:                                              ; preds = %345
  %350 = load i32, ptr %10, align 4, !tbaa !5
  %351 = icmp eq i32 13, %350
  br i1 %351, label %352, label %353

352:                                              ; preds = %349
  br label %355

353:                                              ; preds = %349
  call void @__assert_fail(ptr noundef @.str.7, ptr noundef @.str.8, i32 noundef 362, ptr noundef @__PRETTY_FUNCTION__.main) #10
  unreachable

354:                                              ; No predecessors!
  br label %355

355:                                              ; preds = %354, %352
  %356 = phi i32 [ 1, %352 ], [ 0, %354 ]
  br label %357

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

359:                                              ; preds = %357, %344
  %360 = phi i32 [ 2, %344 ], [ %358, %357 ]
  br label %361

361:                                              ; preds = %359, %340
  %362 = phi i32 [ 2, %340 ], [ %360, %359 ]
  br label %363

363:                                              ; preds = %361, %336
  %364 = phi i32 [ 4, %336 ], [ %362, %361 ]
  br label %365

365:                                              ; preds = %363, %332
  %366 = phi i32 [ 4, %332 ], [ %364, %363 ]
  br label %367

367:                                              ; preds = %365, %328
  %368 = phi i32 [ 8, %328 ], [ %366, %365 ]
  br label %369

369:                                              ; preds = %367, %324
  %370 = phi i32 [ 8, %324 ], [ %368, %367 ]
  br label %371

371:                                              ; preds = %369, %320
  %372 = phi i32 [ 1, %320 ], [ %370, %369 ]
  br label %373

373:                                              ; preds = %371, %316
  %374 = phi i32 [ 1, %316 ], [ %372, %371 ]
  br label %375

375:                                              ; preds = %373, %312
  %376 = phi i32 [ 2, %312 ], [ %374, %373 ]
  br label %377

377:                                              ; preds = %375, %308
  %378 = phi i32 [ 2, %308 ], [ %376, %375 ]
  br label %379

379:                                              ; preds = %377, %304
  %380 = phi i32 [ 4, %304 ], [ %378, %377 ]
  br label %381

381:                                              ; preds = %379, %300
  %382 = phi i32 [ 8, %300 ], [ %380, %379 ]
  %383 = mul nsw i32 %297, %382
  %384 = sext i32 %383 to i64
  %385 = call noalias ptr @libxsmm_aligned_malloc(i64 noundef %384, i64 noundef 64)
  store ptr %385, ptr %34, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #8
  %386 = load i32, ptr %18, align 4, !tbaa !5
  %387 = load i32, ptr %15, align 4, !tbaa !5
  %388 = mul nsw i32 %386, %387
  %389 = load i32, ptr %20, align 4, !tbaa !5
  %390 = mul nsw i32 %388, %389
  %391 = load i32, ptr %11, align 4, !tbaa !5
  %392 = icmp eq i32 0, %391
  br i1 %392, label %393, label %394

393:                                              ; preds = %381
  br label %474

394:                                              ; preds = %381
  %395 = load i32, ptr %11, align 4, !tbaa !5
  %396 = icmp eq i32 1, %395
  br i1 %396, label %397, label %398

397:                                              ; preds = %394
  br label %472

398:                                              ; preds = %394
  %399 = load i32, ptr %11, align 4, !tbaa !5
  %400 = icmp eq i32 2, %399
  br i1 %400, label %401, label %402

401:                                              ; preds = %398
  br label %470

402:                                              ; preds = %398
  %403 = load i32, ptr %11, align 4, !tbaa !5
  %404 = icmp eq i32 3, %403
  br i1 %404, label %405, label %406

405:                                              ; preds = %402
  br label %468

406:                                              ; preds = %402
  %407 = load i32, ptr %11, align 4, !tbaa !5
  %408 = icmp eq i32 4, %407
  br i1 %408, label %409, label %410

409:                                              ; preds = %406
  br label %466

410:                                              ; preds = %406
  %411 = load i32, ptr %11, align 4, !tbaa !5
  %412 = icmp eq i32 5, %411
  br i1 %412, label %413, label %414

413:                                              ; preds = %410
  br label %464

414:                                              ; preds = %410
  %415 = load i32, ptr %11, align 4, !tbaa !5
  %416 = icmp eq i32 6, %415
  br i1 %416, label %417, label %418

417:                                              ; preds = %414
  br label %462

418:                                              ; preds = %414
  %419 = load i32, ptr %11, align 4, !tbaa !5
  %420 = icmp eq i32 7, %419
  br i1 %420, label %421, label %422

421:                                              ; preds = %418
  br label %460

422:                                              ; preds = %418
  %423 = load i32, ptr %11, align 4, !tbaa !5
  %424 = icmp eq i32 8, %423
  br i1 %424, label %425, label %426

425:                                              ; preds = %422
  br label %458

426:                                              ; preds = %422
  %427 = load i32, ptr %11, align 4, !tbaa !5
  %428 = icmp eq i32 9, %427
  br i1 %428, label %429, label %430

429:                                              ; preds = %426
  br label %456

430:                                              ; preds = %426
  %431 = load i32, ptr %11, align 4, !tbaa !5
  %432 = icmp eq i32 10, %431
  br i1 %432, label %433, label %434

433:                                              ; preds = %430
  br label %454

434:                                              ; preds = %430
  %435 = load i32, ptr %11, align 4, !tbaa !5
  %436 = icmp eq i32 11, %435
  br i1 %436, label %437, label %438

437:                                              ; preds = %434
  br label %452

438:                                              ; preds = %434
  %439 = load i32, ptr %11, align 4, !tbaa !5
  %440 = icmp eq i32 12, %439
  br i1 %440, label %441, label %442

441:                                              ; preds = %438
  br label %450

442:                                              ; preds = %438
  %443 = load i32, ptr %11, align 4, !tbaa !5
  %444 = icmp eq i32 13, %443
  br i1 %444, label %445, label %446

445:                                              ; preds = %442
  br label %448

446:                                              ; preds = %442
  call void @__assert_fail(ptr noundef @.str.7, ptr noundef @.str.8, i32 noundef 363, ptr noundef @__PRETTY_FUNCTION__.main) #10
  unreachable

447:                                              ; No predecessors!
  br label %448

448:                                              ; preds = %447, %445
  %449 = phi i32 [ 1, %445 ], [ 0, %447 ]
  br label %450

450:                                              ; preds = %448, %441
  %451 = phi i32 [ 1, %441 ], [ %449, %448 ]
  br label %452

452:                                              ; preds = %450, %437
  %453 = phi i32 [ 2, %437 ], [ %451, %450 ]
  br label %454

454:                                              ; preds = %452, %433
  %455 = phi i32 [ 2, %433 ], [ %453, %452 ]
  br label %456

456:                                              ; preds = %454, %429
  %457 = phi i32 [ 4, %429 ], [ %455, %454 ]
  br label %458

458:                                              ; preds = %456, %425
  %459 = phi i32 [ 4, %425 ], [ %457, %456 ]
  br label %460

460:                                              ; preds = %458, %421
  %461 = phi i32 [ 8, %421 ], [ %459, %458 ]
  br label %462

462:                                              ; preds = %460, %417
  %463 = phi i32 [ 8, %417 ], [ %461, %460 ]
  br label %464

464:                                              ; preds = %462, %413
  %465 = phi i32 [ 1, %413 ], [ %463, %462 ]
  br label %466

466:                                              ; preds = %464, %409
  %467 = phi i32 [ 1, %409 ], [ %465, %464 ]
  br label %468

468:                                              ; preds = %466, %405
  %469 = phi i32 [ 2, %405 ], [ %467, %466 ]
  br label %470

470:                                              ; preds = %468, %401
  %471 = phi i32 [ 2, %401 ], [ %469, %468 ]
  br label %472

472:                                              ; preds = %470, %397
  %473 = phi i32 [ 4, %397 ], [ %471, %470 ]
  br label %474

474:                                              ; preds = %472, %393
  %475 = phi i32 [ 8, %393 ], [ %473, %472 ]
  %476 = mul nsw i32 %390, %475
  %477 = sext i32 %476 to i64
  %478 = call noalias ptr @libxsmm_aligned_malloc(i64 noundef %477, i64 noundef 64)
  store ptr %478, ptr %35, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #8
  %479 = load i32, ptr %19, align 4, !tbaa !5
  %480 = load i32, ptr %15, align 4, !tbaa !5
  %481 = mul nsw i32 %479, %480
  %482 = load i32, ptr %20, align 4, !tbaa !5
  %483 = mul nsw i32 %481, %482
  %484 = load i32, ptr %13, align 4, !tbaa !5
  %485 = icmp eq i32 0, %484
  br i1 %485, label %486, label %487

486:                                              ; preds = %474
  br label %567

487:                                              ; preds = %474
  %488 = load i32, ptr %13, align 4, !tbaa !5
  %489 = icmp eq i32 1, %488
  br i1 %489, label %490, label %491

490:                                              ; preds = %487
  br label %565

491:                                              ; preds = %487
  %492 = load i32, ptr %13, align 4, !tbaa !5
  %493 = icmp eq i32 2, %492
  br i1 %493, label %494, label %495

494:                                              ; preds = %491
  br label %563

495:                                              ; preds = %491
  %496 = load i32, ptr %13, align 4, !tbaa !5
  %497 = icmp eq i32 3, %496
  br i1 %497, label %498, label %499

498:                                              ; preds = %495
  br label %561

499:                                              ; preds = %495
  %500 = load i32, ptr %13, align 4, !tbaa !5
  %501 = icmp eq i32 4, %500
  br i1 %501, label %502, label %503

502:                                              ; preds = %499
  br label %559

503:                                              ; preds = %499
  %504 = load i32, ptr %13, align 4, !tbaa !5
  %505 = icmp eq i32 5, %504
  br i1 %505, label %506, label %507

506:                                              ; preds = %503
  br label %557

507:                                              ; preds = %503
  %508 = load i32, ptr %13, align 4, !tbaa !5
  %509 = icmp eq i32 6, %508
  br i1 %509, label %510, label %511

510:                                              ; preds = %507
  br label %555

511:                                              ; preds = %507
  %512 = load i32, ptr %13, align 4, !tbaa !5
  %513 = icmp eq i32 7, %512
  br i1 %513, label %514, label %515

514:                                              ; preds = %511
  br label %553

515:                                              ; preds = %511
  %516 = load i32, ptr %13, align 4, !tbaa !5
  %517 = icmp eq i32 8, %516
  br i1 %517, label %518, label %519

518:                                              ; preds = %515
  br label %551

519:                                              ; preds = %515
  %520 = load i32, ptr %13, align 4, !tbaa !5
  %521 = icmp eq i32 9, %520
  br i1 %521, label %522, label %523

522:                                              ; preds = %519
  br label %549

523:                                              ; preds = %519
  %524 = load i32, ptr %13, align 4, !tbaa !5
  %525 = icmp eq i32 10, %524
  br i1 %525, label %526, label %527

526:                                              ; preds = %523
  br label %547

527:                                              ; preds = %523
  %528 = load i32, ptr %13, align 4, !tbaa !5
  %529 = icmp eq i32 11, %528
  br i1 %529, label %530, label %531

530:                                              ; preds = %527
  br label %545

531:                                              ; preds = %527
  %532 = load i32, ptr %13, align 4, !tbaa !5
  %533 = icmp eq i32 12, %532
  br i1 %533, label %534, label %535

534:                                              ; preds = %531
  br label %543

535:                                              ; preds = %531
  %536 = load i32, ptr %13, align 4, !tbaa !5
  %537 = icmp eq i32 13, %536
  br i1 %537, label %538, label %539

538:                                              ; preds = %535
  br label %541

539:                                              ; preds = %535
  call void @__assert_fail(ptr noundef @.str.7, ptr noundef @.str.8, i32 noundef 364, ptr noundef @__PRETTY_FUNCTION__.main) #10
  unreachable

540:                                              ; No predecessors!
  br label %541

541:                                              ; preds = %540, %538
  %542 = phi i32 [ 1, %538 ], [ 0, %540 ]
  br label %543

543:                                              ; preds = %541, %534
  %544 = phi i32 [ 1, %534 ], [ %542, %541 ]
  br label %545

545:                                              ; preds = %543, %530
  %546 = phi i32 [ 2, %530 ], [ %544, %543 ]
  br label %547

547:                                              ; preds = %545, %526
  %548 = phi i32 [ 2, %526 ], [ %546, %545 ]
  br label %549

549:                                              ; preds = %547, %522
  %550 = phi i32 [ 4, %522 ], [ %548, %547 ]
  br label %551

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

553:                                              ; preds = %551, %514
  %554 = phi i32 [ 8, %514 ], [ %552, %551 ]
  br label %555

555:                                              ; preds = %553, %510
  %556 = phi i32 [ 8, %510 ], [ %554, %553 ]
  br label %557

557:                                              ; preds = %555, %506
  %558 = phi i32 [ 1, %506 ], [ %556, %555 ]
  br label %559

559:                                              ; preds = %557, %502
  %560 = phi i32 [ 1, %502 ], [ %558, %557 ]
  br label %561

561:                                              ; preds = %559, %498
  %562 = phi i32 [ 2, %498 ], [ %560, %559 ]
  br label %563

563:                                              ; preds = %561, %494
  %564 = phi i32 [ 2, %494 ], [ %562, %561 ]
  br label %565

565:                                              ; preds = %563, %490
  %566 = phi i32 [ 4, %490 ], [ %564, %563 ]
  br label %567

567:                                              ; preds = %565, %486
  %568 = phi i32 [ 8, %486 ], [ %566, %565 ]
  %569 = mul nsw i32 %483, %568
  %570 = sext i32 %569 to i64
  %571 = call noalias ptr @libxsmm_aligned_malloc(i64 noundef %570, i64 noundef 64)
  store ptr %571, ptr %36, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #8
  %572 = load i32, ptr %19, align 4, !tbaa !5
  %573 = load i32, ptr %15, align 4, !tbaa !5
  %574 = mul nsw i32 %572, %573
  %575 = load i32, ptr %20, align 4, !tbaa !5
  %576 = mul nsw i32 %574, %575
  %577 = load i32, ptr %13, align 4, !tbaa !5
  %578 = icmp eq i32 0, %577
  br i1 %578, label %579, label %580

579:                                              ; preds = %567
  br label %660

580:                                              ; preds = %567
  %581 = load i32, ptr %13, align 4, !tbaa !5
  %582 = icmp eq i32 1, %581
  br i1 %582, label %583, label %584

583:                                              ; preds = %580
  br label %658

584:                                              ; preds = %580
  %585 = load i32, ptr %13, align 4, !tbaa !5
  %586 = icmp eq i32 2, %585
  br i1 %586, label %587, label %588

587:                                              ; preds = %584
  br label %656

588:                                              ; preds = %584
  %589 = load i32, ptr %13, align 4, !tbaa !5
  %590 = icmp eq i32 3, %589
  br i1 %590, label %591, label %592

591:                                              ; preds = %588
  br label %654

592:                                              ; preds = %588
  %593 = load i32, ptr %13, align 4, !tbaa !5
  %594 = icmp eq i32 4, %593
  br i1 %594, label %595, label %596

595:                                              ; preds = %592
  br label %652

596:                                              ; preds = %592
  %597 = load i32, ptr %13, align 4, !tbaa !5
  %598 = icmp eq i32 5, %597
  br i1 %598, label %599, label %600

599:                                              ; preds = %596
  br label %650

600:                                              ; preds = %596
  %601 = load i32, ptr %13, align 4, !tbaa !5
  %602 = icmp eq i32 6, %601
  br i1 %602, label %603, label %604

603:                                              ; preds = %600
  br label %648

604:                                              ; preds = %600
  %605 = load i32, ptr %13, align 4, !tbaa !5
  %606 = icmp eq i32 7, %605
  br i1 %606, label %607, label %608

607:                                              ; preds = %604
  br label %646

608:                                              ; preds = %604
  %609 = load i32, ptr %13, align 4, !tbaa !5
  %610 = icmp eq i32 8, %609
  br i1 %610, label %611, label %612

611:                                              ; preds = %608
  br label %644

612:                                              ; preds = %608
  %613 = load i32, ptr %13, align 4, !tbaa !5
  %614 = icmp eq i32 9, %613
  br i1 %614, label %615, label %616

615:                                              ; preds = %612
  br label %642

616:                                              ; preds = %612
  %617 = load i32, ptr %13, align 4, !tbaa !5
  %618 = icmp eq i32 10, %617
  br i1 %618, label %619, label %620

619:                                              ; preds = %616
  br label %640

620:                                              ; preds = %616
  %621 = load i32, ptr %13, align 4, !tbaa !5
  %622 = icmp eq i32 11, %621
  br i1 %622, label %623, label %624

623:                                              ; preds = %620
  br label %638

624:                                              ; preds = %620
  %625 = load i32, ptr %13, align 4, !tbaa !5
  %626 = icmp eq i32 12, %625
  br i1 %626, label %627, label %628

627:                                              ; preds = %624
  br label %636

628:                                              ; preds = %624
  %629 = load i32, ptr %13, align 4, !tbaa !5
  %630 = icmp eq i32 13, %629
  br i1 %630, label %631, label %632

631:                                              ; preds = %628
  br label %634

632:                                              ; preds = %628
  call void @__assert_fail(ptr noundef @.str.7, ptr noundef @.str.8, i32 noundef 365, ptr noundef @__PRETTY_FUNCTION__.main) #10
  unreachable

633:                                              ; No predecessors!
  br label %634

634:                                              ; preds = %633, %631
  %635 = phi i32 [ 1, %631 ], [ 0, %633 ]
  br label %636

636:                                              ; preds = %634, %627
  %637 = phi i32 [ 1, %627 ], [ %635, %634 ]
  br label %638

638:                                              ; preds = %636, %623
  %639 = phi i32 [ 2, %623 ], [ %637, %636 ]
  br label %640

640:                                              ; preds = %638, %619
  %641 = phi i32 [ 2, %619 ], [ %639, %638 ]
  br label %642

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

644:                                              ; preds = %642, %611
  %645 = phi i32 [ 4, %611 ], [ %643, %642 ]
  br label %646

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

648:                                              ; preds = %646, %603
  %649 = phi i32 [ 8, %603 ], [ %647, %646 ]
  br label %650

650:                                              ; preds = %648, %599
  %651 = phi i32 [ 1, %599 ], [ %649, %648 ]
  br label %652

652:                                              ; preds = %650, %595
  %653 = phi i32 [ 1, %595 ], [ %651, %650 ]
  br label %654

654:                                              ; preds = %652, %591
  %655 = phi i32 [ 2, %591 ], [ %653, %652 ]
  br label %656

656:                                              ; preds = %654, %587
  %657 = phi i32 [ 2, %587 ], [ %655, %654 ]
  br label %658

658:                                              ; preds = %656, %583
  %659 = phi i32 [ 4, %583 ], [ %657, %656 ]
  br label %660

660:                                              ; preds = %658, %579
  %661 = phi i32 [ 8, %579 ], [ %659, %658 ]
  %662 = mul nsw i32 %576, %661
  %663 = sext i32 %662 to i64
  %664 = call noalias ptr @libxsmm_aligned_malloc(i64 noundef %663, i64 noundef 64)
  store ptr %664, ptr %37, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #8
  store ptr null, ptr %38, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 40, ptr %39) #8
  %665 = load i32, ptr %14, align 4, !tbaa !5
  %666 = load i32, ptr %15, align 4, !tbaa !5
  %667 = load i32, ptr %16, align 4, !tbaa !5
  %668 = load i32, ptr %17, align 4, !tbaa !5
  %669 = load i32, ptr %18, align 4, !tbaa !5
  %670 = load i32, ptr %19, align 4, !tbaa !5
  %671 = load i32, ptr %10, align 4, !tbaa !5
  %672 = load i32, ptr %11, align 4, !tbaa !5
  %673 = load i32, ptr %13, align 4, !tbaa !5
  %674 = load i32, ptr %12, align 4, !tbaa !5
  call void @libxsmm_create_gemm_shape(ptr dead_on_unwind writable sret(%struct.libxsmm_gemm_shape) align 4 %39, i32 noundef %665, i32 noundef %666, i32 noundef %667, i32 noundef %668, i32 noundef %669, i32 noundef %670, i32 noundef %671, i32 noundef %672, i32 noundef %673, i32 noundef %674)
  call void @llvm.lifetime.start.p0(i64 4, ptr %40) #8
  %675 = load double, ptr %22, align 8, !tbaa !11
  %676 = fcmp oeq double %675, 0.000000e+00
  %677 = zext i1 %676 to i64
  %678 = select i1 %676, i32 4, i32 0
  %679 = or i32 0, %678
  store i32 %679, ptr %40, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %41) #8
  store i32 0, ptr %41, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %42) #8
  call void @llvm.lifetime.start.p0(i64 24, ptr %43) #8
  call void @llvm.lifetime.start.p0(i64 176, ptr %44) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %45) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %46) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %47) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %48) #8
  store double 0.000000e+00, ptr %48, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %49) #8
  store double 0.000000e+00, ptr %49, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %50) #8
  store double 0.000000e+00, ptr %50, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %51) #8
  store i32 0, ptr %51, align 4, !tbaa !5
  %680 = load i32, ptr %40, align 4, !tbaa !5
  %681 = load i32, ptr %20, align 4, !tbaa !5
  %682 = call ptr @libxsmm_create_packed_gemm(ptr noundef byval(%struct.libxsmm_gemm_shape) align 8 %39, i32 noundef %680, i32 noundef 0, i32 noundef %681)
  store ptr %682, ptr %38, align 8, !tbaa !9
  %683 = load ptr, ptr %38, align 8, !tbaa !9
  %684 = icmp eq ptr %683, null
  br i1 %684, label %685, label %687

685:                                              ; preds = %660
  %686 = call i32 (ptr, ...) @printf(ptr noundef @.str.9)
  call void @exit(i32 noundef -1) #10
  unreachable

687:                                              ; preds = %660
  %688 = load i32, ptr %20, align 4, !tbaa !5
  %689 = load i32, ptr %14, align 4, !tbaa !5
  %690 = load i32, ptr %15, align 4, !tbaa !5
  %691 = load i32, ptr %19, align 4, !tbaa !5
  %692 = load i32, ptr %13, align 4, !tbaa !5
  %693 = load ptr, ptr %36, align 8, !tbaa !9
  call void @init_data(i32 noundef %688, i32 noundef %689, i32 noundef %690, i32 noundef %691, i32 noundef %692, ptr noundef %693)
  %694 = load i32, ptr %20, align 4, !tbaa !5
  %695 = load i32, ptr %14, align 4, !tbaa !5
  %696 = load i32, ptr %15, align 4, !tbaa !5
  %697 = load i32, ptr %19, align 4, !tbaa !5
  %698 = load i32, ptr %13, align 4, !tbaa !5
  %699 = load ptr, ptr %36, align 8, !tbaa !9
  %700 = load ptr, ptr %37, align 8, !tbaa !9
  call void @copy_data(i32 noundef %694, i32 noundef %695, i32 noundef %696, i32 noundef %697, i32 noundef %698, ptr noundef %699, ptr noundef %700)
  %701 = load i32, ptr %20, align 4, !tbaa !5
  %702 = load i32, ptr %14, align 4, !tbaa !5
  %703 = load i32, ptr %16, align 4, !tbaa !5
  %704 = load i32, ptr %17, align 4, !tbaa !5
  %705 = load i32, ptr %10, align 4, !tbaa !5
  %706 = load ptr, ptr %34, align 8, !tbaa !9
  call void @init_data(i32 noundef %701, i32 noundef %702, i32 noundef %703, i32 noundef %704, i32 noundef %705, ptr noundef %706)
  %707 = load i32, ptr %20, align 4, !tbaa !5
  %708 = load i32, ptr %16, align 4, !tbaa !5
  %709 = load i32, ptr %15, align 4, !tbaa !5
  %710 = load i32, ptr %18, align 4, !tbaa !5
  %711 = load i32, ptr %11, align 4, !tbaa !5
  %712 = load ptr, ptr %35, align 8, !tbaa !9
  call void @init_data(i32 noundef %707, i32 noundef %708, i32 noundef %709, i32 noundef %710, i32 noundef %711, ptr noundef %712)
  %713 = load i32, ptr %20, align 4, !tbaa !5
  %714 = load i32, ptr %14, align 4, !tbaa !5
  %715 = load i32, ptr %15, align 4, !tbaa !5
  %716 = load i32, ptr %16, align 4, !tbaa !5
  %717 = load i32, ptr %17, align 4, !tbaa !5
  %718 = load i32, ptr %18, align 4, !tbaa !5
  %719 = load i32, ptr %19, align 4, !tbaa !5
  %720 = load double, ptr %22, align 8, !tbaa !11
  %721 = fptosi double %720 to i32
  %722 = load i32, ptr %10, align 4, !tbaa !5
  %723 = load i32, ptr %11, align 4, !tbaa !5
  %724 = load i32, ptr %13, align 4, !tbaa !5
  %725 = load i32, ptr %12, align 4, !tbaa !5
  %726 = load ptr, ptr %34, align 8, !tbaa !9
  %727 = load ptr, ptr %35, align 8, !tbaa !9
  %728 = load ptr, ptr %36, align 8, !tbaa !9
  call void @matMulpacked(i32 noundef %713, i32 noundef %714, i32 noundef %715, i32 noundef %716, i32 noundef %717, i32 noundef %718, i32 noundef %719, i32 noundef %721, i32 noundef %722, i32 noundef %723, i32 noundef %724, i32 noundef %725, ptr noundef %726, ptr noundef %727, ptr noundef %728)
  call void @llvm.memset.p0.i64(ptr align 8 %44, i8 0, i64 176, i1 false)
  %729 = load ptr, ptr %34, align 8, !tbaa !9
  %730 = getelementptr inbounds %struct.libxsmm_gemm_param, ptr %44, i32 0, i32 1
  %731 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %730, i32 0, i32 0
  store ptr %729, ptr %731, align 8, !tbaa !13
  %732 = load ptr, ptr %35, align 8, !tbaa !9
  %733 = getelementptr inbounds %struct.libxsmm_gemm_param, ptr %44, i32 0, i32 2
  %734 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %733, i32 0, i32 0
  store ptr %732, ptr %734, align 8, !tbaa !17
  %735 = load ptr, ptr %37, align 8, !tbaa !9
  %736 = getelementptr inbounds %struct.libxsmm_gemm_param, ptr %44, i32 0, i32 3
  %737 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %736, i32 0, i32 0
  store ptr %735, ptr %737, align 8, !tbaa !18
  %738 = load ptr, ptr %38, align 8, !tbaa !9
  call void %738(ptr noundef %44)
  %739 = load i32, ptr %20, align 4, !tbaa !5
  %740 = load i32, ptr %14, align 4, !tbaa !5
  %741 = load i32, ptr %15, align 4, !tbaa !5
  %742 = load i32, ptr %19, align 4, !tbaa !5
  %743 = load i32, ptr %13, align 4, !tbaa !5
  %744 = load ptr, ptr %36, align 8, !tbaa !9
  %745 = load ptr, ptr %37, align 8, !tbaa !9
  %746 = call double @check_data(i32 noundef %739, i32 noundef %740, i32 noundef %741, i32 noundef %742, i32 noundef %743, ptr noundef %744, ptr noundef %745)
  store double %746, ptr %48, align 8, !tbaa !11
  %747 = load double, ptr %48, align 8, !tbaa !11
  %748 = fcmp ogt double %747, 1.000000e-05
  br i1 %748, label %749, label %750

749:                                              ; preds = %687
  store i32 1, ptr %27, align 4, !tbaa !5
  br label %750

750:                                              ; preds = %749, %687
  %751 = call i64 @libxsmm_timer_tick()
  store i64 %751, ptr %45, align 8, !tbaa !19
  store i32 0, ptr %51, align 4, !tbaa !5
  br label %752

752:                                              ; preds = %758, %750
  %753 = load i32, ptr %51, align 4, !tbaa !5
  %754 = load i32, ptr %25, align 4, !tbaa !5
  %755 = icmp slt i32 %753, %754
  br i1 %755, label %756, label %761

756:                                              ; preds = %752
  %757 = load ptr, ptr %38, align 8, !tbaa !9
  call void %757(ptr noundef %44)
  br label %758

758:                                              ; preds = %756
  %759 = load i32, ptr %51, align 4, !tbaa !5
  %760 = add nsw i32 %759, 1
  store i32 %760, ptr %51, align 4, !tbaa !5
  br label %752, !llvm.loop !21

761:                                              ; preds = %752
  %762 = call i64 @libxsmm_timer_tick()
  store i64 %762, ptr %46, align 8, !tbaa !19
  %763 = load i64, ptr %45, align 8, !tbaa !19
  %764 = load i64, ptr %46, align 8, !tbaa !19
  %765 = call double @libxsmm_timer_duration(i64 noundef %763, i64 noundef %764)
  store double %765, ptr %47, align 8, !tbaa !11
  %766 = load ptr, ptr %38, align 8, !tbaa !9
  %767 = call i32 @libxsmm_get_kernel_info(ptr noundef %766, ptr noundef %43)
  %768 = getelementptr inbounds %struct.libxsmm_kernel_info, ptr %43, i32 0, i32 1
  %769 = load i32, ptr %768, align 4, !tbaa !23
  %770 = zext i32 %769 to i64
  store i64 %770, ptr %42, align 8, !tbaa !19
  %771 = load double, ptr %33, align 8, !tbaa !11
  %772 = load double, ptr %47, align 8, !tbaa !11
  %773 = fdiv double %771, %772
  %774 = fdiv double %773, 1.000000e+09
  store double %774, ptr %49, align 8, !tbaa !11
  %775 = load i64, ptr %42, align 8, !tbaa !19
  %776 = uitofp i64 %775 to double
  %777 = load i32, ptr %25, align 4, !tbaa !5
  %778 = sitofp i32 %777 to double
  %779 = fmul double %776, %778
  %780 = load double, ptr %47, align 8, !tbaa !11
  %781 = fdiv double %779, %780
  %782 = fdiv double %781, 1.000000e+09
  store double %782, ptr %50, align 8, !tbaa !11
  %783 = load double, ptr %48, align 8, !tbaa !11
  %784 = call i32 (ptr, ...) @printf(ptr noundef @.str.10, double noundef %783)
  %785 = load double, ptr %49, align 8, !tbaa !11
  %786 = call i32 (ptr, ...) @printf(ptr noundef @.str.11, double noundef %785)
  %787 = load double, ptr %50, align 8, !tbaa !11
  %788 = call i32 (ptr, ...) @printf(ptr noundef @.str.12, double noundef %787)
  %789 = load ptr, ptr %34, align 8, !tbaa !9
  call void @libxsmm_free(ptr noundef %789)
  %790 = load ptr, ptr %35, align 8, !tbaa !9
  call void @libxsmm_free(ptr noundef %790)
  %791 = load ptr, ptr %36, align 8, !tbaa !9
  call void @libxsmm_free(ptr noundef %791)
  %792 = load ptr, ptr %37, align 8, !tbaa !9
  call void @libxsmm_free(ptr noundef %792)
  call void @llvm.lifetime.end.p0(i64 4, ptr %51) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #8
  call void @llvm.lifetime.end.p0(i64 176, ptr %44) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr %43) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #8
  call void @llvm.lifetime.end.p0(i64 40, ptr %39) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #8
  br label %793

793:                                              ; preds = %761
  %794 = load i32, ptr %28, align 4, !tbaa !5
  %795 = icmp ne i32 %794, 0
  br i1 %795, label %234, label %796, !llvm.loop !26

796:                                              ; preds = %793, %254
  %797 = load i32, ptr %27, align 4, !tbaa !5
  store i32 %797, ptr %3, align 4
  store i32 1, ptr %31, align 4
  br label %798

798:                                              ; preds = %796, %154
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %6) #8
  %799 = load i32, ptr %3, align 4
  ret i32 %799

800:                                              ; preds = %254
  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 nounwind willreturn memory(read) uwtable
declare i32 @atoi(ptr noundef nonnull) #2

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

; Function Attrs: inlinehint nounwind uwtable
declare hidden void @print_help() #3

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

; Function Attrs: noreturn nounwind
declare void @exit(i32 noundef) #5

; Function Attrs: inlinehint nounwind uwtable
declare hidden i32 @char_to_libxsmm_datatype(ptr noundef) #3

declare noalias ptr @fopen(ptr noundef, ptr noundef) #6

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

declare ptr @fgets(ptr noundef, i32 noundef, ptr noundef) #6

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

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

declare noalias ptr @libxsmm_aligned_malloc(i64 noundef, i64 noundef) #6

; Function Attrs: noreturn nounwind
declare void @__assert_fail(ptr noundef, ptr noundef, i32 noundef, ptr noundef) #5

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

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

; Function Attrs: inlinehint nounwind uwtable
declare hidden void @init_data(i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, ptr noundef) #3

; Function Attrs: inlinehint nounwind uwtable
declare hidden void @copy_data(i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, ptr noundef, ptr noundef) #3

; Function Attrs: inlinehint nounwind uwtable
declare hidden void @matMulpacked(i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, ptr noundef, ptr noundef, ptr noundef) #3

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

; Function Attrs: inlinehint nounwind uwtable
declare hidden double @check_data(i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, ptr noundef, ptr noundef) #3

declare i64 @libxsmm_timer_tick() #6

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

declare i32 @libxsmm_get_kernel_info(ptr noundef, ptr noundef) #6

declare void @libxsmm_free(ptr noundef) #6

attributes #0 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { inlinehint nounwind willreturn memory(read) uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { inlinehint nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #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 = { noreturn nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { "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 nounwind willreturn memory(argmem: write) }
attributes #8 = { nounwind }
attributes #9 = { nounwind willreturn memory(read) }
attributes #10 = { noreturn 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 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"any pointer", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"double", !7, i64 0}
!13 = !{!14, !10, i64 32}
!14 = !{!"libxsmm_gemm_param", !15, i64 0, !16, i64 32, !16, i64 80, !16, i64 128}
!15 = !{!"libxsmm_matrix_op_arg", !10, i64 0, !10, i64 8, !10, i64 16, !10, i64 24}
!16 = !{!"libxsmm_matrix_arg", !10, i64 0, !10, i64 8, !10, i64 16, !10, i64 24, !10, i64 32, !10, i64 40}
!17 = !{!14, !10, i64 80}
!18 = !{!14, !10, i64 128}
!19 = !{!20, !20, i64 0}
!20 = !{!"long long", !7, i64 0}
!21 = distinct !{!21, !22}
!22 = !{!"llvm.loop.mustprogress"}
!23 = !{!24, !6, i64 4}
!24 = !{!"libxsmm_kernel_info", !6, i64 0, !6, i64 4, !25, i64 8, !6, i64 16}
!25 = !{!"long", !7, i64 0}
!26 = distinct !{!26, !22}


; Optimized IR (opt -passes='default<O3>'):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

%struct.libxsmm_gemm_shape = type { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 }
%struct.libxsmm_kernel_info = type { i32, i32, i64, i32 }
%struct.libxsmm_gemm_param = type { %struct.libxsmm_matrix_op_arg, %struct.libxsmm_matrix_arg, %struct.libxsmm_matrix_arg, %struct.libxsmm_matrix_arg }
%struct.libxsmm_matrix_op_arg = type { ptr, ptr, ptr, ptr }
%struct.libxsmm_matrix_arg = type { ptr, ptr, ptr, ptr, ptr, ptr }

@stderr = external local_unnamed_addr global ptr, align 8
@.str = external hidden unnamed_addr constant [49 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [67 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [50 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [72 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [61 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [91 x i8], align 1
@__PRETTY_FUNCTION__.main = external hidden unnamed_addr constant [23 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [88 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [28 x i8], align 1
@switch.table.main.3 = private unnamed_addr constant [11 x i32] [i32 2, i32 2, i32 1, i32 2, i32 8, i32 2, i32 4, i32 2, i32 2, i32 2, i32 1], align 4

; Function Attrs: nounwind uwtable
define dso_local i32 @main(i32 noundef %0, ptr nocapture noundef readonly %1) local_unnamed_addr #0 {
  %3 = alloca i32, align 4
  %4 = alloca i32, align 4
  %5 = alloca i32, align 4
  %6 = alloca i32, align 4
  %7 = alloca i32, align 4
  %8 = alloca i32, align 4
  %9 = alloca i32, align 4
  %10 = alloca [512 x i8], align 16
  %11 = alloca %struct.libxsmm_gemm_shape, align 8
  %12 = alloca %struct.libxsmm_kernel_info, align 8
  %13 = alloca %struct.libxsmm_gemm_param, align 8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %3) #8
  store i32 0, ptr %3, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %4) #8
  store i32 0, ptr %4, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %5) #8
  store i32 0, ptr %5, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %6) #8
  store i32 0, ptr %6, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %7) #8
  store i32 0, ptr %7, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %8) #8
  store i32 0, ptr %8, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %9) #8
  store i32 0, ptr %9, align 4, !tbaa !5
  %14 = icmp eq i32 %0, 17
  br i1 %14, label %15, label %45

15:                                               ; preds = %2
  %16 = getelementptr inbounds i8, ptr %1, i64 8
  %17 = load ptr, ptr %16, align 8, !tbaa !9
  %18 = getelementptr inbounds i8, ptr %1, i64 16
  %19 = load ptr, ptr %18, align 8, !tbaa !9
  %20 = getelementptr inbounds i8, ptr %1, i64 24
  %21 = load ptr, ptr %20, align 8, !tbaa !9
  %22 = getelementptr inbounds i8, ptr %1, i64 32
  %23 = load ptr, ptr %22, align 8, !tbaa !9
  %24 = getelementptr inbounds i8, ptr %1, i64 40
  %25 = load ptr, ptr %24, align 8, !tbaa !9
  %26 = tail call i32 @atoi(ptr nocapture noundef %25) #9
  store i32 %26, ptr %3, align 4, !tbaa !5
  %27 = getelementptr inbounds i8, ptr %1, i64 48
  %28 = load ptr, ptr %27, align 8, !tbaa !9
  %29 = tail call i32 @atoi(ptr nocapture noundef %28) #9
  store i32 %29, ptr %4, align 4, !tbaa !5
  %30 = getelementptr inbounds i8, ptr %1, i64 56
  %31 = load ptr, ptr %30, align 8, !tbaa !9
  %32 = tail call i32 @atoi(ptr nocapture noundef %31) #9
  store i32 %32, ptr %5, align 4, !tbaa !5
  %33 = getelementptr inbounds i8, ptr %1, i64 64
  %34 = load ptr, ptr %33, align 8, !tbaa !9
  %35 = tail call i32 @atoi(ptr nocapture noundef %34) #9
  store i32 %35, ptr %6, align 4, !tbaa !5
  %36 = getelementptr inbounds i8, ptr %1, i64 72
  %37 = load ptr, ptr %36, align 8, !tbaa !9
  %38 = tail call i32 @atoi(ptr nocapture noundef %37) #9
  store i32 %38, ptr %7, align 4, !tbaa !5
  %39 = getelementptr inbounds i8, ptr %1, i64 80
  %40 = load ptr, ptr %39, align 8, !tbaa !9
  %41 = tail call i32 @atoi(ptr nocapture noundef %40) #9
  store i32 %41, ptr %8, align 4, !tbaa !5
  %42 = getelementptr inbounds i8, ptr %1, i64 88
  %43 = load ptr, ptr %42, align 8, !tbaa !9
  %44 = tail call i32 @atoi(ptr nocapture noundef %43) #9
  store i32 %44, ptr %9, align 4, !tbaa !5
  br label %59

45:                                               ; preds = %2
  %46 = icmp eq i32 %0, 11
  br i1 %46, label %47, label %58

47:                                               ; preds = %45
  %48 = getelementptr inbounds i8, ptr %1, i64 8
  %49 = load ptr, ptr %48, align 8, !tbaa !9
  %50 = getelementptr inbounds i8, ptr %1, i64 16
  %51 = load ptr, ptr %50, align 8, !tbaa !9
  %52 = getelementptr inbounds i8, ptr %1, i64 24
  %53 = load ptr, ptr %52, align 8, !tbaa !9
  %54 = getelementptr inbounds i8, ptr %1, i64 32
  %55 = load ptr, ptr %54, align 8, !tbaa !9
  %56 = getelementptr inbounds i8, ptr %1, i64 40
  %57 = load ptr, ptr %56, align 8, !tbaa !9
  br label %59

58:                                               ; preds = %45
  tail call void @print_help()
  br label %.loopexit

59:                                               ; preds = %47, %15
  %.sink328 = phi i64 [ 48, %47 ], [ 96, %15 ]
  %.sink325 = phi i64 [ 56, %47 ], [ 104, %15 ]
  %.sink322 = phi i64 [ 64, %47 ], [ 112, %15 ]
  %.sink319 = phi i64 [ 72, %47 ], [ 120, %15 ]
  %.sink = phi i64 [ 80, %47 ], [ 128, %15 ]
  %60 = phi i32 [ 0, %47 ], [ %29, %15 ]
  %61 = phi i32 [ 0, %47 ], [ %44, %15 ]
  %62 = phi i32 [ 0, %47 ], [ %32, %15 ]
  %63 = phi i32 [ 0, %47 ], [ %26, %15 ]
  %.0253 = phi ptr [ %57, %47 ], [ undef, %15 ]
  %.0247 = phi ptr [ %55, %47 ], [ %23, %15 ]
  %.0246 = phi ptr [ %53, %47 ], [ %21, %15 ]
  %.0245 = phi ptr [ %51, %47 ], [ %19, %15 ]
  %.0244 = phi ptr [ %49, %47 ], [ %17, %15 ]
  %64 = getelementptr inbounds i8, ptr %1, i64 %.sink328
  %65 = load ptr, ptr %64, align 8, !tbaa !9
  %66 = tail call double @atof(ptr noundef %65) #9
  %67 = getelementptr inbounds i8, ptr %1, i64 %.sink325
  %68 = load ptr, ptr %67, align 8, !tbaa !9
  %69 = tail call double @atof(ptr noundef %68) #9
  %70 = getelementptr inbounds i8, ptr %1, i64 %.sink322
  %71 = load ptr, ptr %70, align 8, !tbaa !9
  %72 = tail call i32 @atoi(ptr nocapture noundef %71) #9
  %73 = getelementptr inbounds i8, ptr %1, i64 %.sink319
  %74 = load ptr, ptr %73, align 8, !tbaa !9
  %75 = tail call i32 @atoi(ptr nocapture noundef %74) #9
  %76 = getelementptr inbounds i8, ptr %1, i64 %.sink
  %77 = load ptr, ptr %76, align 8, !tbaa !9
  %78 = tail call i32 @atoi(ptr nocapture noundef %77) #9
  %79 = icmp ne i32 %72, 0
  %80 = icmp ne i32 %75, 0
  %or.cond = select i1 %79, i1 true, i1 %80
  br i1 %or.cond, label %81, label %84

81:                                               ; preds = %59
  %82 = load ptr, ptr @stderr, align 8, !tbaa !9
  %83 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %82, ptr noundef nonnull @.str, i32 noundef %72, i32 noundef %75) #10
  tail call void @exit(i32 noundef 1) #11
  unreachable

84:                                               ; preds = %59
  %85 = tail call i32 @char_to_libxsmm_datatype(ptr noundef %.0244)
  %86 = tail call i32 @char_to_libxsmm_datatype(ptr noundef %.0245)
  %87 = tail call i32 @char_to_libxsmm_datatype(ptr noundef %.0246)
  %88 = tail call i32 @char_to_libxsmm_datatype(ptr noundef %.0247)
  %89 = icmp eq i32 %85, 0
  %90 = icmp eq i32 %86, 0
  %or.cond3 = select i1 %89, i1 %90, i1 false
  %91 = icmp eq i32 %87, 0
  %or.cond5 = select i1 %or.cond3, i1 %91, i1 false
  %92 = icmp eq i32 %88, 0
  %or.cond7 = select i1 %or.cond5, i1 %92, i1 false
  br i1 %or.cond7, label %101, label %93

93:                                               ; preds = %84
  %94 = icmp eq i32 %85, 1
  %95 = icmp eq i32 %86, 1
  %or.cond9 = select i1 %94, i1 %95, i1 false
  %96 = icmp eq i32 %87, 1
  %or.cond11 = select i1 %or.cond9, i1 %96, i1 false
  %97 = icmp eq i32 %88, 1
  %or.cond13 = select i1 %or.cond11, i1 %97, i1 false
  br i1 %or.cond13, label %101, label %98

98:                                               ; preds = %93
  %99 = load ptr, ptr @stderr, align 8, !tbaa !9
  %100 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %99, ptr noundef nonnull @.str.1, ptr noundef %.0244, ptr noundef %.0245, ptr noundef %.0246, ptr noundef %.0247) #10
  tail call void @exit(i32 noundef 1) #11
  unreachable

101:                                              ; preds = %93, %84
  br i1 %14, label %104, label %102

102:                                              ; preds = %101
  %103 = tail call noalias ptr @fopen(ptr noundef %.0253, ptr noundef nonnull @.str.2)
  br label %108

104:                                              ; preds = %101
  %105 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.3)
  %106 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.4, i32 noundef %63, i32 noundef %62, i32 noundef %61, i32 noundef %62, i32 noundef %60, i32 noundef %61, i32 noundef %63, i32 noundef %60, i32 noundef %61, ptr noundef %.0244, ptr noundef %.0245, ptr noundef %.0246, ptr noundef %.0247)
  %107 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.3)
  br label %108

108:                                              ; preds = %104, %102
  %.0256 = phi ptr [ %103, %102 ], [ null, %104 ]
  %109 = sitofp i32 %78 to double
  %110 = and i32 %85, -2
  %111 = and i32 %86, -2
  %112 = and i32 %88, -2
  %113 = fcmp oeq double %69, 0.000000e+00
  %114 = select i1 %113, i32 4, i32 0
  %115 = fptosi double %69 to i32
  %116 = getelementptr inbounds i8, ptr %13, i64 32
  %117 = getelementptr inbounds i8, ptr %13, i64 80
  %118 = getelementptr inbounds i8, ptr %13, i64 128
  %119 = icmp sgt i32 %78, 0
  %120 = getelementptr inbounds i8, ptr %12, i64 4
  %.mux = select i1 %89, i32 8, i32 4
  %switch = icmp ult i32 %85, 2
  %.mux294 = select i1 %90, i32 8, i32 4
  %switch299 = icmp ult i32 %86, 2
  %.mux296 = select i1 %92, i32 8, i32 4
  %switch300 = icmp ult i32 %88, 2
  %switch.tableidx = add i32 %110, -2
  %121 = icmp ult i32 %switch.tableidx, 11
  %switch.maskindex = trunc nuw i32 %switch.tableidx to i16
  %switch.shifted = lshr i16 1365, %switch.maskindex
  %switch.lobit = trunc i16 %switch.shifted to i1
  %122 = zext nneg i32 %switch.tableidx to i64
  %switch.gep = getelementptr inbounds [11 x i32], ptr @switch.table.main.3, i64 0, i64 %122
  %switch.tableidx337 = add i32 %111, -2
  %123 = icmp ult i32 %switch.tableidx337, 11
  %switch.maskindex340 = trunc nuw i32 %switch.tableidx337 to i16
  %switch.shifted341 = lshr i16 1365, %switch.maskindex340
  %switch.lobit342 = trunc i16 %switch.shifted341 to i1
  %124 = zext nneg i32 %switch.tableidx337 to i64
  %switch.gep343 = getelementptr inbounds [11 x i32], ptr @switch.table.main.3, i64 0, i64 %124
  %switch.tableidx346 = add i32 %112, -2
  %125 = icmp ult i32 %switch.tableidx346, 11
  %switch.maskindex349 = trunc nuw i32 %switch.tableidx346 to i16
  %switch.shifted350 = lshr i16 1365, %switch.maskindex349
  %switch.lobit351 = trunc i16 %switch.shifted350 to i1
  %126 = zext nneg i32 %switch.tableidx346 to i64
  %switch.gep352 = getelementptr inbounds [11 x i32], ptr @switch.table.main.3, i64 0, i64 %126
  %switch.tableidx355 = add i32 %112, -2
  %127 = icmp ult i32 %switch.tableidx355, 11
  %switch.maskindex358 = trunc nuw i32 %switch.tableidx355 to i16
  %switch.shifted359 = lshr i16 1365, %switch.maskindex358
  %switch.lobit360 = trunc i16 %switch.shifted359 to i1
  %128 = zext nneg i32 %switch.tableidx355 to i64
  %switch.gep361 = getelementptr inbounds [11 x i32], ptr @switch.table.main.3, i64 0, i64 %128
  br label %129

129:                                              ; preds = %._crit_edge, %108
  %.0258 = phi i32 [ 0, %108 ], [ %.1259, %._crit_edge ]
  %.0257 = phi i32 [ 0, %108 ], [ 1, %._crit_edge ]
  br i1 %14, label %137, label %130

130:                                              ; preds = %129
  call void @llvm.lifetime.start.p0(i64 512, ptr nonnull %10) #8
  %131 = call ptr @fgets(ptr noundef nonnull %10, i32 noundef 512, ptr noundef %.0256)
  %132 = icmp eq ptr %131, null
  br i1 %132, label %136, label %133

133:                                              ; preds = %130
  %134 = call i32 (ptr, ptr, ...) @__isoc99_sscanf(ptr noundef nonnull %10, ptr noundef nonnull @.str.5, ptr noundef nonnull %3, ptr noundef nonnull %4, ptr noundef nonnull %5, ptr noundef nonnull %6, ptr noundef nonnull %7, ptr noundef nonnull %8, ptr noundef nonnull %9) #8
  %.not = icmp eq i32 %134, 7
  br i1 %.not, label %.thread, label %135

.thread:                                          ; preds = %133
  call void @llvm.lifetime.end.p0(i64 512, ptr nonnull %10) #8
  br label %137

135:                                              ; preds = %133
  call void @exit(i32 noundef 1) #11
  unreachable

136:                                              ; preds = %130
  call void @llvm.lifetime.end.p0(i64 512, ptr nonnull %10) #8
  br label %.loopexit

137:                                              ; preds = %.thread, %129
  %.2 = phi i32 [ %.0257, %129 ], [ 1, %.thread ]
  %138 = load ptr, ptr %1, align 8, !tbaa !9
  %139 = load i32, ptr %3, align 4, !tbaa !5
  %140 = load i32, ptr %4, align 4, !tbaa !5
  %141 = load i32, ptr %5, align 4, !tbaa !5
  %142 = load i32, ptr %6, align 4, !tbaa !5
  %143 = load i32, ptr %7, align 4, !tbaa !5
  %144 = load i32, ptr %8, align 4, !tbaa !5
  %145 = load i32, ptr %9, align 4, !tbaa !5
  %146 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.6, ptr noundef %138, ptr noundef %.0244, ptr noundef %.0245, ptr noundef %.0246, ptr noundef %.0247, i32 noundef %139, i32 noundef %140, i32 noundef %141, i32 noundef %142, i32 noundef %143, i32 noundef %144, i32 noundef %145, double noundef %66, double noundef %69, i32 noundef 0, i32 noundef 0, i32 noundef %78)
  %147 = load i32, ptr %3, align 4, !tbaa !5
  %148 = sitofp i32 %147 to double
  %149 = fmul double %148, 2.000000e+00
  %150 = load i32, ptr %4, align 4, !tbaa !5
  %151 = sitofp i32 %150 to double
  %152 = fmul double %149, %151
  %153 = load i32, ptr %5, align 4, !tbaa !5
  %154 = sitofp i32 %153 to double
  %155 = fmul double %152, %154
  %156 = load i32, ptr %9, align 4, !tbaa !5
  %157 = sitofp i32 %156 to double
  %158 = fmul double %155, %157
  %159 = fmul double %158, %109
  %160 = load i32, ptr %6, align 4, !tbaa !5
  br i1 %switch, label %163, label %161

161:                                              ; preds = %137
  %.not377 = xor i1 %121, true
  %switch.lobit.not = xor i1 %switch.lobit, true
  %brmerge = select i1 %.not377, i1 true, i1 %switch.lobit.not
  br i1 %brmerge, label %162, label %switch.lookup

162:                                              ; preds = %161
  call void @__assert_fail(ptr noundef nonnull @.str.7, ptr noundef nonnull @.str.8, i32 noundef 362, ptr noundef nonnull @__PRETTY_FUNCTION__.main) #11
  unreachable

switch.lookup:                                    ; preds = %161
  %switch.load = load i32, ptr %switch.gep, align 4
  br label %163

163:                                              ; preds = %switch.lookup, %137
  %164 = phi i32 [ %.mux, %137 ], [ %switch.load, %switch.lookup ]
  %165 = mul i32 %156, %153
  %166 = mul i32 %165, %160
  %167 = mul nsw i32 %166, %164
  %168 = sext i32 %167 to i64
  %169 = call noalias ptr @libxsmm_aligned_malloc(i64 noundef %168, i64 noundef 64) #8
  %170 = load i32, ptr %7, align 4, !tbaa !5
  %171 = load i32, ptr %4, align 4, !tbaa !5
  %172 = mul nsw i32 %171, %170
  %173 = load i32, ptr %9, align 4, !tbaa !5
  %174 = mul nsw i32 %172, %173
  br i1 %switch299, label %177, label %175

175:                                              ; preds = %163
  %.not378 = xor i1 %123, true
  %switch.lobit342.not = xor i1 %switch.lobit342, true
  %brmerge379 = select i1 %.not378, i1 true, i1 %switch.lobit342.not
  br i1 %brmerge379, label %176, label %switch.lookup339

176:                                              ; preds = %175
  call void @__assert_fail(ptr noundef nonnull @.str.7, ptr noundef nonnull @.str.8, i32 noundef 363, ptr noundef nonnull @__PRETTY_FUNCTION__.main) #11
  unreachable

switch.lookup339:                                 ; preds = %175
  %switch.load344 = load i32, ptr %switch.gep343, align 4
  br label %177

177:                                              ; preds = %switch.lookup339, %163
  %178 = phi i32 [ %.mux294, %163 ], [ %switch.load344, %switch.lookup339 ]
  %179 = mul nsw i32 %174, %178
  %180 = sext i32 %179 to i64
  %181 = call noalias ptr @libxsmm_aligned_malloc(i64 noundef %180, i64 noundef 64) #8
  %182 = load i32, ptr %8, align 4, !tbaa !5
  %183 = load i32, ptr %4, align 4, !tbaa !5
  %184 = mul nsw i32 %183, %182
  %185 = load i32, ptr %9, align 4, !tbaa !5
  %186 = mul nsw i32 %184, %185
  br i1 %switch300, label %189, label %187

187:                                              ; preds = %177
  %.not380 = xor i1 %125, true
  %switch.lobit351.not = xor i1 %switch.lobit351, true
  %brmerge381 = select i1 %.not380, i1 true, i1 %switch.lobit351.not
  br i1 %brmerge381, label %188, label %switch.lookup348

188:                                              ; preds = %187
  call void @__assert_fail(ptr noundef nonnull @.str.7, ptr noundef nonnull @.str.8, i32 noundef 364, ptr noundef nonnull @__PRETTY_FUNCTION__.main) #11
  unreachable

switch.lookup348:                                 ; preds = %187
  %switch.load353 = load i32, ptr %switch.gep352, align 4
  br label %189

189:                                              ; preds = %switch.lookup348, %177
  %190 = phi i32 [ %.mux296, %177 ], [ %switch.load353, %switch.lookup348 ]
  %191 = mul nsw i32 %186, %190
  %192 = sext i32 %191 to i64
  %193 = call noalias ptr @libxsmm_aligned_malloc(i64 noundef %192, i64 noundef 64) #8
  %194 = load i32, ptr %8, align 4, !tbaa !5
  %195 = load i32, ptr %4, align 4, !tbaa !5
  %196 = mul nsw i32 %195, %194
  %197 = load i32, ptr %9, align 4, !tbaa !5
  %198 = mul nsw i32 %196, %197
  br i1 %switch300, label %201, label %199

199:                                              ; preds = %189
  %.not382 = xor i1 %127, true
  %switch.lobit360.not = xor i1 %switch.lobit360, true
  %brmerge383 = select i1 %.not382, i1 true, i1 %switch.lobit360.not
  br i1 %brmerge383, label %200, label %switch.lookup357

200:                                              ; preds = %199
  call void @__assert_fail(ptr noundef nonnull @.str.7, ptr noundef nonnull @.str.8, i32 noundef 365, ptr noundef nonnull @__PRETTY_FUNCTION__.main) #11
  unreachable

switch.lookup357:                                 ; preds = %199
  %switch.load362 = load i32, ptr %switch.gep361, align 4
  br label %201

201:                                              ; preds = %switch.lookup357, %189
  %202 = phi i32 [ %.mux296, %189 ], [ %switch.load362, %switch.lookup357 ]
  %203 = mul nsw i32 %198, %202
  %204 = sext i32 %203 to i64
  %205 = call noalias ptr @libxsmm_aligned_malloc(i64 noundef %204, i64 noundef 64) #8
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %11) #8
  %206 = load i32, ptr %3, align 4, !tbaa !5
  %207 = load i32, ptr %4, align 4, !tbaa !5
  %208 = load i32, ptr %5, align 4, !tbaa !5
  %209 = load i32, ptr %6, align 4, !tbaa !5
  %210 = load i32, ptr %7, align 4, !tbaa !5
  %211 = load i32, ptr %8, align 4, !tbaa !5
  call void @libxsmm_create_gemm_shape(ptr dead_on_unwind nonnull writable sret(%struct.libxsmm_gemm_shape) align 4 %11, i32 noundef %206, i32 noundef %207, i32 noundef %208, i32 noundef %209, i32 noundef %210, i32 noundef %211, i32 noundef %85, i32 noundef %86, i32 noundef %88, i32 noundef %87) #8
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %12) #8
  call void @llvm.lifetime.start.p0(i64 176, ptr nonnull %13) #8
  %212 = load i32, ptr %9, align 4, !tbaa !5
  %213 = call ptr @libxsmm_create_packed_gemm(ptr noundef nonnull byval(%struct.libxsmm_gemm_shape) align 8 %11, i32 noundef %114, i32 noundef 0, i32 noundef %212) #8
  %214 = icmp eq ptr %213, null
  br i1 %214, label %215, label %217

215:                                              ; preds = %201
  %216 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.9)
  call void @exit(i32 noundef -1) #11
  unreachable

217:                                              ; preds = %201
  %218 = load i32, ptr %9, align 4, !tbaa !5
  %219 = load i32, ptr %3, align 4, !tbaa !5
  %220 = load i32, ptr %4, align 4, !tbaa !5
  %221 = load i32, ptr %8, align 4, !tbaa !5
  call void @init_data(i32 noundef %218, i32 noundef %219, i32 noundef %220, i32 noundef %221, i32 noundef %88, ptr noundef %193)
  %222 = load i32, ptr %9, align 4, !tbaa !5
  %223 = load i32, ptr %3, align 4, !tbaa !5
  %224 = load i32, ptr %4, align 4, !tbaa !5
  %225 = load i32, ptr %8, align 4, !tbaa !5
  call void @copy_data(i32 noundef %222, i32 noundef %223, i32 noundef %224, i32 noundef %225, i32 noundef %88, ptr noundef %193, ptr noundef %205)
  %226 = load i32, ptr %9, align 4, !tbaa !5
  %227 = load i32, ptr %3, align 4, !tbaa !5
  %228 = load i32, ptr %5, align 4, !tbaa !5
  %229 = load i32, ptr %6, align 4, !tbaa !5
  call void @init_data(i32 noundef %226, i32 noundef %227, i32 noundef %228, i32 noundef %229, i32 noundef %85, ptr noundef %169)
  %230 = load i32, ptr %9, align 4, !tbaa !5
  %231 = load i32, ptr %5, align 4, !tbaa !5
  %232 = load i32, ptr %4, align 4, !tbaa !5
  %233 = load i32, ptr %7, align 4, !tbaa !5
  call void @init_data(i32 noundef %230, i32 noundef %231, i32 noundef %232, i32 noundef %233, i32 noundef %86, ptr noundef %181)
  %234 = load i32, ptr %9, align 4, !tbaa !5
  %235 = load i32, ptr %3, align 4, !tbaa !5
  %236 = load i32, ptr %4, align 4, !tbaa !5
  %237 = load i32, ptr %5, align 4, !tbaa !5
  %238 = load i32, ptr %6, align 4, !tbaa !5
  %239 = load i32, ptr %7, align 4, !tbaa !5
  %240 = load i32, ptr %8, align 4, !tbaa !5
  call void @matMulpacked(i32 noundef %234, i32 noundef %235, i32 noundef %236, i32 noundef %237, i32 noundef %238, i32 noundef %239, i32 noundef %240, i32 noundef %115, i32 noundef %85, i32 noundef %86, i32 noundef %88, i32 noundef %87, ptr noundef %169, ptr noundef %181, ptr noundef %193)
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(176) %13, i8 0, i64 176, i1 false)
  store ptr %169, ptr %116, align 8, !tbaa !11
  store ptr %181, ptr %117, align 8, !tbaa !15
  store ptr %205, ptr %118, align 8, !tbaa !16
  call void %213(ptr noundef nonnull %13) #8
  %241 = load i32, ptr %9, align 4, !tbaa !5
  %242 = load i32, ptr %3, align 4, !tbaa !5
  %243 = load i32, ptr %4, align 4, !tbaa !5
  %244 = load i32, ptr %8, align 4, !tbaa !5
  %245 = call double @check_data(i32 noundef %241, i32 noundef %242, i32 noundef %243, i32 noundef %244, i32 noundef %88, ptr noundef %193, ptr noundef %205)
  %246 = fcmp ogt double %245, 1.000000e-05
  %.1259 = select i1 %246, i32 1, i32 %.0258
  %247 = call i64 @libxsmm_timer_tick() #8
  br i1 %119, label %.lr.ph, label %._crit_edge

.lr.ph:                                           ; preds = %217, %.lr.ph
  %.0292 = phi i32 [ %248, %.lr.ph ], [ 0, %217 ]
  call void %213(ptr noundef nonnull %13) #8
  %248 = add nuw nsw i32 %.0292, 1
  %exitcond.not = icmp eq i32 %248, %78
  br i1 %exitcond.not, label %._crit_edge, label %.lr.ph, !llvm.loop !17

._crit_edge:                                      ; preds = %.lr.ph, %217
  %249 = call i64 @libxsmm_timer_tick() #8
  %250 = call double @libxsmm_timer_duration(i64 noundef %247, i64 noundef %249) #8
  %251 = call i32 @libxsmm_get_kernel_info(ptr noundef nonnull %213, ptr noundef nonnull %12) #8
  %252 = load i32, ptr %120, align 4, !tbaa !19
  %253 = fdiv double %159, %250
  %254 = fdiv double %253, 1.000000e+09
  %255 = uitofp i32 %252 to double
  %256 = fmul double %109, %255
  %257 = fdiv double %256, %250
  %258 = fdiv double %257, 1.000000e+09
  %259 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.10, double noundef %245)
  %260 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.11, double noundef %254)
  %261 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.12, double noundef %258)
  call void @libxsmm_free(ptr noundef %169) #8
  call void @libxsmm_free(ptr noundef %181) #8
  call void @libxsmm_free(ptr noundef %193) #8
  call void @libxsmm_free(ptr noundef %205) #8
  call void @llvm.lifetime.end.p0(i64 176, ptr nonnull %13) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %12) #8
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %11) #8
  %.not266 = icmp eq i32 %.2, 0
  br i1 %.not266, label %.loopexit, label %129, !llvm.loop !22

.loopexit:                                        ; preds = %._crit_edge, %136, %58
  %.0243 = phi i32 [ 1, %58 ], [ %.0258, %136 ], [ %.1259, %._crit_edge ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %9) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %8) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %7) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %6) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %5) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %4) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %3) #8
  ret i32 %.0243
}

; 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: inlinehint mustprogress nofree nounwind willreturn memory(read) uwtable
declare double @atof(ptr nocapture noundef nonnull) local_unnamed_addr #2

; Function Attrs: inlinehint nounwind uwtable
declare hidden void @print_help() local_unnamed_addr #3

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

; Function Attrs: noreturn nounwind
declare void @exit(i32 noundef) local_unnamed_addr #5

; Function Attrs: inlinehint nounwind uwtable
declare hidden i32 @char_to_libxsmm_datatype(ptr noundef) local_unnamed_addr #3

; Function Attrs: nofree nounwind
declare noalias noundef ptr @fopen(ptr nocapture noundef readonly, ptr nocapture noundef readonly) local_unnamed_addr #4

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

; Function Attrs: nofree nounwind
declare noundef ptr @fgets(ptr noundef, i32 noundef, ptr nocapture noundef) local_unnamed_addr #4

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

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

declare noalias ptr @libxsmm_aligned_malloc(i64 noundef, i64 noundef) local_unnamed_addr #6

; Function Attrs: noreturn nounwind
declare void @__assert_fail(ptr noundef, ptr noundef, i32 noundef, ptr noundef) local_unnamed_addr #5

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

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

; Function Attrs: inlinehint nounwind uwtable
declare hidden void @init_data(i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, ptr noundef) local_unnamed_addr #3

; Function Attrs: inlinehint nounwind uwtable
declare hidden void @copy_data(i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, ptr noundef, ptr noundef) local_unnamed_addr #3

; Function Attrs: inlinehint nounwind uwtable
declare hidden void @matMulpacked(i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #3

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

; Function Attrs: inlinehint nounwind uwtable
declare hidden double @check_data(i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, ptr noundef, ptr noundef) local_unnamed_addr #3

declare i64 @libxsmm_timer_tick() local_unnamed_addr #6

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

declare i32 @libxsmm_get_kernel_info(ptr noundef, ptr noundef) local_unnamed_addr #6

declare void @libxsmm_free(ptr noundef) local_unnamed_addr #6

attributes #0 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { inlinehint mustprogress nofree nounwind willreturn memory(read) uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { inlinehint nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { 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 #5 = { noreturn nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { "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 nounwind willreturn memory(argmem: write) }
attributes #8 = { nounwind }
attributes #9 = { nounwind willreturn memory(read) }
attributes #10 = { cold nounwind }
attributes #11 = { noreturn 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 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"any pointer", !7, i64 0}
!11 = !{!12, !10, i64 32}
!12 = !{!"libxsmm_gemm_param", !13, i64 0, !14, i64 32, !14, i64 80, !14, i64 128}
!13 = !{!"libxsmm_matrix_op_arg", !10, i64 0, !10, i64 8, !10, i64 16, !10, i64 24}
!14 = !{!"libxsmm_matrix_arg", !10, i64 0, !10, i64 8, !10, i64 16, !10, i64 24, !10, i64 32, !10, i64 40}
!15 = !{!12, !10, i64 80}
!16 = !{!12, !10, i64 128}
!17 = distinct !{!17, !18}
!18 = !{!"llvm.loop.mustprogress"}
!19 = !{!20, !6, i64 4}
!20 = !{!"libxsmm_kernel_info", !6, i64 0, !6, i64 4, !21, i64 8, !6, i64 16}
!21 = !{!"long", !7, i64 0}
!22 = distinct !{!22, !18}


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