; LLVM IR from libxsmm/libxsmm :: src (libxsmm_gemm)

; 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 }
%union.libxsmm_xmmfunction = type { ptr }

@stderr = external global ptr, align 8
@libxsmm_ninit = external global i32, align 4
@.str.9 = external hidden unnamed_addr constant [2 x i8], align 1
@libxsmm_verbosity = external global i32, align 4
@libxsmm_gemm_batch_task.error_once = external hidden global i32, align 4
@libxsmm_gemm_batch_task.threshold_max = external hidden global i64, align 8
@.str.20 = external hidden unnamed_addr constant [49 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [63 x i8], align 1

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

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

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

; Function Attrs: nounwind uwtable
declare dso_local i32 @libxsmm_get_gemm_prefetch(i32 noundef) #2

declare void @libxsmm_init() #3

; Function Attrs: nounwind uwtable
define dso_local void @libxsmm_gemm_batch_task(i32 noundef %0, i32 noundef %1, ptr noundef %2, ptr noundef %3, i32 noundef %4, i32 noundef %5, i32 noundef %6, ptr noundef %7, ptr noundef %8, ptr noundef %9, ptr noundef %10, ptr noundef %11, ptr noundef %12, ptr noundef %13, ptr noundef %14, ptr noundef %15, ptr noundef %16, ptr noundef %17, i32 noundef %18, i32 noundef %19, i32 noundef %20, i32 noundef %21, i32 noundef %22, i32 noundef %23) #2 {
  %25 = alloca i32, align 4
  %26 = alloca i32, align 4
  %27 = alloca ptr, align 8
  %28 = alloca ptr, align 8
  %29 = alloca i32, align 4
  %30 = alloca i32, align 4
  %31 = alloca i32, align 4
  %32 = alloca ptr, align 8
  %33 = alloca ptr, 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 ptr, align 8
  %40 = alloca ptr, align 8
  %41 = alloca ptr, align 8
  %42 = alloca ptr, align 8
  %43 = alloca i32, align 4
  %44 = alloca i32, align 4
  %45 = alloca i32, align 4
  %46 = alloca i32, align 4
  %47 = alloca i32, align 4
  %48 = alloca i32, align 4
  %49 = alloca i8, align 1
  %50 = alloca i32, align 4
  %51 = alloca double, align 8
  %52 = alloca double, align 8
  %53 = alloca i32, align 4
  %54 = alloca i32, align 4
  %55 = alloca %struct.libxsmm_gemm_shape, align 8
  %56 = alloca %union.libxsmm_xmmfunction, align 8
  %57 = alloca i32, align 4
  %58 = alloca i32, align 4
  %59 = alloca i32, align 4
  %60 = alloca i32, align 4
  %61 = alloca ptr, align 8
  %62 = alloca i32, align 4
  %63 = alloca i32, align 4
  %64 = alloca i32, align 4
  %65 = alloca i32, align 4
  %66 = alloca i32, align 4
  %67 = alloca i32, align 4
  %68 = alloca ptr, align 8
  %69 = alloca ptr, align 8
  %70 = alloca i64, align 8
  store i32 %0, ptr %25, align 4, !tbaa !5
  store i32 %1, ptr %26, align 4, !tbaa !5
  store ptr %2, ptr %27, align 8, !tbaa !9
  store ptr %3, ptr %28, align 8, !tbaa !9
  store i32 %4, ptr %29, align 4, !tbaa !5
  store i32 %5, ptr %30, align 4, !tbaa !5
  store i32 %6, ptr %31, align 4, !tbaa !5
  store ptr %7, ptr %32, align 8, !tbaa !9
  store ptr %8, ptr %33, align 8, !tbaa !9
  store ptr %9, ptr %34, align 8, !tbaa !9
  store ptr %10, ptr %35, align 8, !tbaa !9
  store ptr %11, ptr %36, align 8, !tbaa !9
  store ptr %12, ptr %37, align 8, !tbaa !9
  store ptr %13, ptr %38, align 8, !tbaa !9
  store ptr %14, ptr %39, align 8, !tbaa !9
  store ptr %15, ptr %40, align 8, !tbaa !9
  store ptr %16, ptr %41, align 8, !tbaa !9
  store ptr %17, ptr %42, align 8, !tbaa !9
  store i32 %18, ptr %43, align 4, !tbaa !5
  store i32 %19, ptr %44, align 4, !tbaa !5
  store i32 %20, ptr %45, align 4, !tbaa !5
  store i32 %21, ptr %46, align 4, !tbaa !5
  store i32 %22, ptr %47, align 4, !tbaa !5
  store i32 %23, ptr %48, align 4, !tbaa !5
  %71 = load ptr, ptr %33, align 8, !tbaa !9
  %72 = icmp ne ptr null, %71
  br i1 %72, label %73, label %529

73:                                               ; preds = %24
  %74 = load ptr, ptr %36, align 8, !tbaa !9
  %75 = icmp ne ptr null, %74
  br i1 %75, label %76, label %529

76:                                               ; preds = %73
  %77 = load ptr, ptr %40, align 8, !tbaa !9
  %78 = icmp ne ptr null, %77
  br i1 %78, label %79, label %529

79:                                               ; preds = %76
  %80 = load i32, ptr %47, align 4, !tbaa !5
  %81 = icmp sle i32 0, %80
  br i1 %81, label %82, label %529

82:                                               ; preds = %79
  %83 = load i32, ptr %47, align 4, !tbaa !5
  %84 = load i32, ptr %48, align 4, !tbaa !5
  %85 = icmp slt i32 %83, %84
  br i1 %85, label %86, label %529

86:                                               ; preds = %82
  call void @llvm.lifetime.start.p0(i64 1, ptr %49) #4
  %87 = load i32, ptr %26, align 4, !tbaa !5
  %88 = call zeroext i8 @libxsmm_typesize(i32 noundef %87)
  store i8 %88, ptr %49, align 1, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %50) #4
  store i32 0, ptr %50, align 4, !tbaa !5
  %89 = load i32, ptr @libxsmm_ninit, align 4, !tbaa !5
  %90 = icmp ugt i32 2, %89
  br i1 %90, label %91, label %92

91:                                               ; preds = %86
  call void @libxsmm_init()
  br label %92

92:                                               ; preds = %91, %86
  %93 = load i32, ptr %29, align 4, !tbaa !5
  %94 = sext i32 %93 to i64
  %95 = load i32, ptr %30, align 4, !tbaa !5
  %96 = sext i32 %95 to i64
  %97 = mul i64 %94, %96
  %98 = load i32, ptr %31, align 4, !tbaa !5
  %99 = sext i32 %98 to i64
  %100 = mul i64 %97, %99
  %101 = mul i64 %100, 2
  %102 = load i8, ptr %49, align 1, !tbaa !11
  %103 = zext i8 %102 to i64
  %104 = mul i64 %103, 4
  %105 = load i32, ptr %29, align 4, !tbaa !5
  %106 = sext i32 %105 to i64
  %107 = load i32, ptr %31, align 4, !tbaa !5
  %108 = sext i32 %107 to i64
  %109 = mul i64 %106, %108
  %110 = load i32, ptr %31, align 4, !tbaa !5
  %111 = sext i32 %110 to i64
  %112 = load i32, ptr %30, align 4, !tbaa !5
  %113 = sext i32 %112 to i64
  %114 = mul i64 %111, %113
  %115 = add i64 %109, %114
  %116 = load i32, ptr %29, align 4, !tbaa !5
  %117 = sext i32 %116 to i64
  %118 = mul i64 2, %117
  %119 = load i32, ptr %30, align 4, !tbaa !5
  %120 = sext i32 %119 to i64
  %121 = mul i64 %118, %120
  %122 = add i64 %115, %121
  %123 = mul i64 %104, %122
  %124 = icmp ule i64 %101, %123
  br i1 %124, label %125, label %479

125:                                              ; preds = %92
  call void @llvm.lifetime.start.p0(i64 8, ptr %51) #4
  store double 1.000000e+00, ptr %51, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 8, ptr %52) #4
  store double 1.000000e+00, ptr %52, align 8, !tbaa !12
  %126 = load i32, ptr %26, align 4, !tbaa !5
  %127 = load ptr, ptr %32, align 8, !tbaa !9
  %128 = call i32 @libxsmm_dvalue(i32 noundef %126, ptr noundef %127, ptr noundef %51)
  store i32 %128, ptr %50, align 4, !tbaa !5
  %129 = load i32, ptr %50, align 4, !tbaa !5
  %130 = icmp eq i32 0, %129
  br i1 %130, label %131, label %135

131:                                              ; preds = %125
  %132 = load i32, ptr %26, align 4, !tbaa !5
  %133 = load ptr, ptr %39, align 8, !tbaa !9
  %134 = call i32 @libxsmm_dvalue(i32 noundef %132, ptr noundef %133, ptr noundef %52)
  store i32 %134, ptr %50, align 4, !tbaa !5
  br label %135

135:                                              ; preds = %131, %125
  %136 = load i32, ptr %50, align 4, !tbaa !5
  %137 = icmp eq i32 0, %136
  br i1 %137, label %138, label %478

138:                                              ; preds = %135
  call void @llvm.lifetime.start.p0(i64 4, ptr %53) #4
  %139 = load ptr, ptr %27, align 8, !tbaa !9
  %140 = icmp ne ptr null, %139
  br i1 %140, label %141, label %145

141:                                              ; preds = %138
  %142 = load ptr, ptr %27, align 8, !tbaa !9
  %143 = load i8, ptr %142, align 1, !tbaa !11
  %144 = sext i8 %143 to i32
  br label %146

145:                                              ; preds = %138
  br label %146

146:                                              ; preds = %145, %141
  %147 = phi i32 [ %144, %141 ], [ 110, %145 ]
  %148 = icmp eq i32 110, %147
  br i1 %148, label %162, label %149

149:                                              ; preds = %146
  %150 = load i8, ptr @.str.9, align 1, !tbaa !11
  %151 = sext i8 %150 to i32
  %152 = load ptr, ptr %27, align 8, !tbaa !9
  %153 = icmp ne ptr null, %152
  br i1 %153, label %154, label %158

154:                                              ; preds = %149
  %155 = load ptr, ptr %27, align 8, !tbaa !9
  %156 = load i8, ptr %155, align 1, !tbaa !11
  %157 = sext i8 %156 to i32
  br label %159

158:                                              ; preds = %149
  br label %159

159:                                              ; preds = %158, %154
  %160 = phi i32 [ %157, %154 ], [ 110, %158 ]
  %161 = icmp eq i32 %151, %160
  br label %162

162:                                              ; preds = %159, %146
  %163 = phi i1 [ true, %146 ], [ %161, %159 ]
  %164 = zext i1 %163 to i64
  %165 = select i1 %163, i32 0, i32 1
  %166 = load ptr, ptr %28, align 8, !tbaa !9
  %167 = icmp ne ptr null, %166
  br i1 %167, label %168, label %172

168:                                              ; preds = %162
  %169 = load ptr, ptr %28, align 8, !tbaa !9
  %170 = load i8, ptr %169, align 1, !tbaa !11
  %171 = sext i8 %170 to i32
  br label %173

172:                                              ; preds = %162
  br label %173

173:                                              ; preds = %172, %168
  %174 = phi i32 [ %171, %168 ], [ 110, %172 ]
  %175 = icmp eq i32 110, %174
  br i1 %175, label %189, label %176

176:                                              ; preds = %173
  %177 = load i8, ptr @.str.9, align 1, !tbaa !11
  %178 = sext i8 %177 to i32
  %179 = load ptr, ptr %28, align 8, !tbaa !9
  %180 = icmp ne ptr null, %179
  br i1 %180, label %181, label %185

181:                                              ; preds = %176
  %182 = load ptr, ptr %28, align 8, !tbaa !9
  %183 = load i8, ptr %182, align 1, !tbaa !11
  %184 = sext i8 %183 to i32
  br label %186

185:                                              ; preds = %176
  br label %186

186:                                              ; preds = %185, %181
  %187 = phi i32 [ %184, %181 ], [ 110, %185 ]
  %188 = icmp eq i32 %178, %187
  br label %189

189:                                              ; preds = %186, %173
  %190 = phi i1 [ true, %173 ], [ %188, %186 ]
  %191 = zext i1 %190 to i64
  %192 = select i1 %190, i32 0, i32 2
  %193 = or i32 %165, %192
  %194 = or i32 %193, 0
  %195 = load double, ptr %52, align 8, !tbaa !12
  %196 = fcmp une double 0.000000e+00, %195
  %197 = zext i1 %196 to i64
  %198 = select i1 %196, i32 0, i32 4
  %199 = or i32 %194, %198
  store i32 %199, ptr %53, align 4, !tbaa !5
  %200 = load double, ptr %51, align 8, !tbaa !12
  %201 = fcmp oeq double 1.000000e+00, %200
  br i1 %201, label %202, label %476

202:                                              ; preds = %189
  %203 = load double, ptr %52, align 8, !tbaa !12
  %204 = fcmp oeq double 1.000000e+00, %203
  br i1 %204, label %208, label %205

205:                                              ; preds = %202
  %206 = load double, ptr %52, align 8, !tbaa !12
  %207 = fcmp oeq double 0.000000e+00, %206
  br i1 %207, label %208, label %476

208:                                              ; preds = %205, %202
  call void @llvm.lifetime.start.p0(i64 4, ptr %54) #4
  %209 = call i32 @libxsmm_get_gemm_prefetch(i32 noundef 0)
  store i32 %209, ptr %54, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 40, ptr %55) #4
  %210 = load i32, ptr %29, align 4, !tbaa !5
  %211 = load i32, ptr %30, align 4, !tbaa !5
  %212 = load i32, ptr %31, align 4, !tbaa !5
  %213 = load ptr, ptr %34, align 8, !tbaa !9
  %214 = icmp ne ptr null, %213
  br i1 %214, label %215, label %218

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

218:                                              ; preds = %208
  %219 = load i32, ptr %53, align 4, !tbaa !5
  %220 = and i32 1, %219
  %221 = icmp eq i32 0, %220
  br i1 %221, label %222, label %224

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

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

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

228:                                              ; preds = %226, %215
  %229 = phi i32 [ %217, %215 ], [ %227, %226 ]
  %230 = load ptr, ptr %37, align 8, !tbaa !9
  %231 = icmp ne ptr null, %230
  br i1 %231, label %232, label %235

232:                                              ; preds = %228
  %233 = load ptr, ptr %37, align 8, !tbaa !9
  %234 = load i32, ptr %233, align 4, !tbaa !5
  br label %245

235:                                              ; preds = %228
  %236 = load i32, ptr %53, align 4, !tbaa !5
  %237 = and i32 2, %236
  %238 = icmp eq i32 0, %237
  br i1 %238, label %239, label %241

239:                                              ; preds = %235
  %240 = load i32, ptr %31, align 4, !tbaa !5
  br label %243

241:                                              ; preds = %235
  %242 = load i32, ptr %30, align 4, !tbaa !5
  br label %243

243:                                              ; preds = %241, %239
  %244 = phi i32 [ %240, %239 ], [ %242, %241 ]
  br label %245

245:                                              ; preds = %243, %232
  %246 = phi i32 [ %234, %232 ], [ %244, %243 ]
  %247 = load ptr, ptr %41, align 8, !tbaa !9
  %248 = icmp ne ptr null, %247
  br i1 %248, label %249, label %252

249:                                              ; preds = %245
  %250 = load ptr, ptr %41, align 8, !tbaa !9
  %251 = load i32, ptr %250, align 4, !tbaa !5
  br label %254

252:                                              ; preds = %245
  %253 = load i32, ptr %29, align 4, !tbaa !5
  br label %254

254:                                              ; preds = %252, %249
  %255 = phi i32 [ %251, %249 ], [ %253, %252 ]
  %256 = load i32, ptr %25, align 4, !tbaa !5
  %257 = load i32, ptr %25, align 4, !tbaa !5
  %258 = load i32, ptr %26, align 4, !tbaa !5
  %259 = load i32, ptr %26, align 4, !tbaa !5
  call void @libxsmm_create_gemm_shape(ptr dead_on_unwind writable sret(%struct.libxsmm_gemm_shape) align 4 %55, i32 noundef %210, i32 noundef %211, i32 noundef %212, i32 noundef %229, i32 noundef %246, i32 noundef %255, i32 noundef %256, i32 noundef %257, i32 noundef %258, i32 noundef %259)
  call void @llvm.lifetime.start.p0(i64 8, ptr %56) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %57) #4
  %260 = load i32, ptr %53, align 4, !tbaa !5
  store i32 %260, ptr %57, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %58) #4
  store i32 0, ptr %58, align 4, !tbaa !5
  %261 = load i32, ptr %43, align 4, !tbaa !5
  %262 = icmp sle i32 0, %261
  br i1 %262, label %263, label %265

263:                                              ; preds = %254
  %264 = load i32, ptr %43, align 4, !tbaa !5
  br label %268

265:                                              ; preds = %254
  %266 = load i32, ptr %43, align 4, !tbaa !5
  %267 = sub nsw i32 0, %266
  br label %268

268:                                              ; preds = %265, %263
  %269 = phi i32 [ %264, %263 ], [ %267, %265 ]
  %270 = icmp sle i32 4, %269
  br i1 %270, label %271, label %343

271:                                              ; preds = %268
  %272 = load i32, ptr %53, align 4, !tbaa !5
  %273 = load ptr, ptr %40, align 8, !tbaa !9
  %274 = load i32, ptr %46, align 4, !tbaa !5
  %275 = icmp eq i32 0, %274
  br i1 %275, label %276, label %277

276:                                              ; preds = %271
  br label %278

277:                                              ; preds = %271
  br label %278

278:                                              ; preds = %277, %276
  %279 = phi ptr [ null, %276 ], [ %58, %277 ]
  %280 = call i32 @libxsmm_gemm_batch_flags(i32 noundef %272, ptr noundef %55, ptr noundef %273, ptr noundef %279)
  store i32 %280, ptr %57, align 4, !tbaa !5
  %281 = load i8, ptr %49, align 1, !tbaa !11
  %282 = zext i8 %281 to i32
  %283 = load i32, ptr %58, align 4, !tbaa !5
  %284 = icmp slt i32 %282, %283
  br i1 %284, label %285, label %342

285:                                              ; preds = %278
  call void @llvm.lifetime.start.p0(i64 4, ptr %59) #4
  %286 = load i32, ptr %45, align 4, !tbaa !5
  %287 = icmp sle i32 0, %286
  br i1 %287, label %288, label %290

288:                                              ; preds = %285
  %289 = load i32, ptr %45, align 4, !tbaa !5
  br label %293

290:                                              ; preds = %285
  %291 = load i32, ptr %45, align 4, !tbaa !5
  %292 = sub nsw i32 0, %291
  br label %293

293:                                              ; preds = %290, %288
  %294 = phi i32 [ %289, %288 ], [ %292, %290 ]
  %295 = load i32, ptr %43, align 4, !tbaa !5
  %296 = mul nsw i32 %294, %295
  store i32 %296, ptr %59, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %60) #4
  %297 = load i32, ptr %43, align 4, !tbaa !5
  store i32 %297, ptr %60, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %61) #4
  %298 = load ptr, ptr %40, align 8, !tbaa !9
  store ptr %298, ptr %61, align 8, !tbaa !9
  br label %299

299:                                              ; preds = %337, %293
  %300 = load i32, ptr %60, align 4, !tbaa !5
  %301 = load i32, ptr %59, align 4, !tbaa !5
  %302 = icmp slt i32 %300, %301
  br i1 %302, label %303, label %341

303:                                              ; preds = %299
  call void @llvm.lifetime.start.p0(i64 4, ptr %62) #4
  %304 = load ptr, ptr %42, align 8, !tbaa !9
  %305 = icmp ne ptr null, %304
  br i1 %305, label %306, label %312

306:                                              ; preds = %303
  %307 = load ptr, ptr %42, align 8, !tbaa !9
  %308 = load i32, ptr %60, align 4, !tbaa !5
  %309 = sext i32 %308 to i64
  %310 = getelementptr inbounds i8, ptr %307, i64 %309
  %311 = load i32, ptr %310, align 4, !tbaa !5
  br label %314

312:                                              ; preds = %303
  %313 = load i32, ptr %44, align 4, !tbaa !5
  br label %314

314:                                              ; preds = %312, %306
  %315 = phi i32 [ %311, %306 ], [ %313, %312 ]
  %316 = load i32, ptr %44, align 4, !tbaa !5
  %317 = sub nsw i32 %315, %316
  store i32 %317, ptr %62, align 4, !tbaa !5
  %318 = load ptr, ptr %61, align 8, !tbaa !9
  %319 = load i32, ptr %62, align 4, !tbaa !5
  %320 = load i8, ptr %49, align 1, !tbaa !11
  %321 = zext i8 %320 to i32
  %322 = mul nsw i32 %319, %321
  %323 = sext i32 %322 to i64
  %324 = getelementptr inbounds i8, ptr %318, i64 %323
  %325 = ptrtoint ptr %324 to i64
  %326 = load i32, ptr %58, align 4, !tbaa !5
  %327 = sub nsw i32 %326, 1
  %328 = sext i32 %327 to i64
  %329 = and i64 %325, %328
  %330 = icmp ne i64 0, %329
  br i1 %330, label %331, label %333

331:                                              ; preds = %314
  %332 = load i32, ptr %53, align 4, !tbaa !5
  store i32 %332, ptr %57, align 4, !tbaa !5
  store i32 2, ptr %63, align 4
  br label %334

333:                                              ; preds = %314
  store i32 0, ptr %63, align 4
  br label %334

334:                                              ; preds = %333, %331
  call void @llvm.lifetime.end.p0(i64 4, ptr %62) #4
  %335 = load i32, ptr %63, align 4
  switch i32 %335, label %541 [
    i32 0, label %336
    i32 2, label %341
  ]

336:                                              ; preds = %334
  br label %337

337:                                              ; preds = %336
  %338 = load i32, ptr %43, align 4, !tbaa !5
  %339 = load i32, ptr %60, align 4, !tbaa !5
  %340 = add nsw i32 %339, %338
  store i32 %340, ptr %60, align 4, !tbaa !5
  br label %299, !llvm.loop !14

341:                                              ; preds = %334, %299
  call void @llvm.lifetime.end.p0(i64 8, ptr %61) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %60) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %59) #4
  br label %342

342:                                              ; preds = %341, %278
  br label %446

343:                                              ; preds = %268
  %344 = load i32, ptr %43, align 4, !tbaa !5
  %345 = icmp ne i32 0, %344
  br i1 %345, label %346, label %378

346:                                              ; preds = %343
  %347 = load i32, ptr %53, align 4, !tbaa !5
  %348 = load ptr, ptr %40, align 8, !tbaa !9
  %349 = load i32, ptr %46, align 4, !tbaa !5
  %350 = icmp eq i32 0, %349
  br i1 %350, label %351, label %352

351:                                              ; preds = %346
  br label %353

352:                                              ; preds = %346
  br label %353

353:                                              ; preds = %352, %351
  %354 = phi ptr [ null, %351 ], [ %58, %352 ]
  %355 = call i32 @libxsmm_gemm_batch_flags(i32 noundef %347, ptr noundef %55, ptr noundef %348, ptr noundef %354)
  store i32 %355, ptr %57, align 4, !tbaa !5
  %356 = load ptr, ptr %42, align 8, !tbaa !9
  %357 = icmp ne ptr null, %356
  br i1 %357, label %358, label %366

358:                                              ; preds = %353
  %359 = load ptr, ptr %42, align 8, !tbaa !9
  %360 = load i32, ptr %359, align 4, !tbaa !5
  %361 = load i32, ptr %44, align 4, !tbaa !5
  %362 = sub nsw i32 %360, %361
  %363 = load i8, ptr %49, align 1, !tbaa !11
  %364 = zext i8 %363 to i32
  %365 = mul nsw i32 %362, %364
  br label %369

366:                                              ; preds = %353
  %367 = load i8, ptr %49, align 1, !tbaa !11
  %368 = zext i8 %367 to i32
  br label %369

369:                                              ; preds = %366, %358
  %370 = phi i32 [ %365, %358 ], [ %368, %366 ]
  %371 = load i32, ptr %58, align 4, !tbaa !5
  %372 = sub nsw i32 %371, 1
  %373 = and i32 %370, %372
  %374 = icmp ne i32 0, %373
  br i1 %374, label %375, label %377

375:                                              ; preds = %369
  %376 = load i32, ptr %53, align 4, !tbaa !5
  store i32 %376, ptr %57, align 4, !tbaa !5
  br label %377

377:                                              ; preds = %375, %369
  br label %445

378:                                              ; preds = %343
  %379 = load i32, ptr %46, align 4, !tbaa !5
  %380 = icmp ne i32 0, %379
  br i1 %380, label %381, label %444

381:                                              ; preds = %378
  call void @llvm.lifetime.start.p0(i64 4, ptr %64) #4
  store i32 8, ptr %64, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %65) #4
  %382 = load ptr, ptr %42, align 8, !tbaa !9
  %383 = icmp ne ptr null, %382
  br i1 %383, label %384, label %387

384:                                              ; preds = %381
  %385 = load ptr, ptr %42, align 8, !tbaa !9
  %386 = load i32, ptr %385, align 4, !tbaa !5
  br label %388

387:                                              ; preds = %381
  br label %388

388:                                              ; preds = %387, %384
  %389 = phi i32 [ %386, %384 ], [ 8, %387 ]
  %390 = load i32, ptr %44, align 4, !tbaa !5
  %391 = mul nsw i32 %390, 8
  %392 = sub nsw i32 %389, %391
  store i32 %392, ptr %65, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %66) #4
  %393 = load i32, ptr %45, align 4, !tbaa !5
  %394 = icmp sle i32 0, %393
  br i1 %394, label %395, label %397

395:                                              ; preds = %388
  %396 = load i32, ptr %45, align 4, !tbaa !5
  br label %400

397:                                              ; preds = %388
  %398 = load i32, ptr %45, align 4, !tbaa !5
  %399 = sub nsw i32 0, %398
  br label %400

400:                                              ; preds = %397, %395
  %401 = phi i32 [ %396, %395 ], [ %399, %397 ]
  store i32 %401, ptr %66, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %67) #4
  store i32 0, ptr %67, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %68) #4
  %402 = load ptr, ptr %40, align 8, !tbaa !9
  store ptr %402, ptr %68, align 8, !tbaa !9
  br label %403

403:                                              ; preds = %436, %400
  %404 = load i32, ptr %67, align 4, !tbaa !5
  %405 = load i32, ptr %66, align 4, !tbaa !5
  %406 = icmp slt i32 %404, %405
  br i1 %406, label %407, label %443

407:                                              ; preds = %403
  call void @llvm.lifetime.start.p0(i64 8, ptr %69) #4
  %408 = load ptr, ptr %68, align 8, !tbaa !9
  %409 = load ptr, ptr %408, align 8, !tbaa !9
  store ptr %409, ptr %69, align 8, !tbaa !9
  %410 = load ptr, ptr %69, align 8, !tbaa !9
  %411 = icmp ne ptr null, %410
  br i1 %411, label %412, label %431

412:                                              ; preds = %407
  %413 = load i32, ptr %53, align 4, !tbaa !5
  %414 = load ptr, ptr %69, align 8, !tbaa !9
  %415 = call i32 @libxsmm_gemm_batch_flags(i32 noundef %413, ptr noundef %55, ptr noundef %414, ptr noundef %58)
  store i32 %415, ptr %57, align 4, !tbaa !5
  %416 = load i8, ptr %49, align 1, !tbaa !11
  %417 = zext i8 %416 to i32
  %418 = load i32, ptr %58, align 4, !tbaa !5
  %419 = icmp slt i32 %417, %418
  br i1 %419, label %420, label %430

420:                                              ; preds = %412
  %421 = load ptr, ptr %69, align 8, !tbaa !9
  %422 = ptrtoint ptr %421 to i64
  %423 = load i32, ptr %58, align 4, !tbaa !5
  %424 = sub nsw i32 %423, 1
  %425 = sext i32 %424 to i64
  %426 = and i64 %422, %425
  %427 = icmp ne i64 0, %426
  br i1 %427, label %428, label %430

428:                                              ; preds = %420
  %429 = load i32, ptr %53, align 4, !tbaa !5
  store i32 %429, ptr %57, align 4, !tbaa !5
  store i32 5, ptr %63, align 4
  br label %433

430:                                              ; preds = %420, %412
  br label %432

431:                                              ; preds = %407
  store i32 1, ptr %50, align 4, !tbaa !5
  store i32 5, ptr %63, align 4
  br label %433

432:                                              ; preds = %430
  store i32 0, ptr %63, align 4
  br label %433

433:                                              ; preds = %432, %431, %428
  call void @llvm.lifetime.end.p0(i64 8, ptr %69) #4
  %434 = load i32, ptr %63, align 4
  switch i32 %434, label %541 [
    i32 0, label %435
    i32 5, label %443
  ]

435:                                              ; preds = %433
  br label %436

436:                                              ; preds = %435
  %437 = load i32, ptr %67, align 4, !tbaa !5
  %438 = add nsw i32 %437, 1
  store i32 %438, ptr %67, align 4, !tbaa !5
  %439 = load i32, ptr %65, align 4, !tbaa !5
  %440 = load ptr, ptr %68, align 8, !tbaa !9
  %441 = sext i32 %439 to i64
  %442 = getelementptr inbounds i8, ptr %440, i64 %441
  store ptr %442, ptr %68, align 8, !tbaa !9
  br label %403, !llvm.loop !16

443:                                              ; preds = %433, %403
  call void @llvm.lifetime.end.p0(i64 8, ptr %68) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %67) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %66) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %65) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %64) #4
  br label %444

444:                                              ; preds = %443, %378
  br label %445

445:                                              ; preds = %444, %377
  br label %446

446:                                              ; preds = %445, %342
  %447 = load i32, ptr %50, align 4, !tbaa !5
  %448 = icmp eq i32 0, %447
  br i1 %448, label %449, label %475

449:                                              ; preds = %446
  %450 = load i32, ptr %57, align 4, !tbaa !5
  %451 = load i32, ptr %54, align 4, !tbaa !5
  %452 = call ptr @libxsmm_dispatch_gemm(ptr noundef byval(%struct.libxsmm_gemm_shape) align 8 %55, i32 noundef %450, i32 noundef %451)
  store ptr %452, ptr %56, align 8, !tbaa !11
  %453 = load ptr, ptr %56, align 8, !tbaa !11
  %454 = icmp ne ptr null, %453
  br i1 %454, label %455, label %473

455:                                              ; preds = %449
  %456 = load ptr, ptr %56, align 8, !tbaa !11
  %457 = load i32, ptr %44, align 4, !tbaa !5
  %458 = load i32, ptr %43, align 4, !tbaa !5
  %459 = load ptr, ptr %35, align 8, !tbaa !9
  %460 = load ptr, ptr %38, align 8, !tbaa !9
  %461 = load ptr, ptr %42, align 8, !tbaa !9
  %462 = load ptr, ptr %33, align 8, !tbaa !9
  %463 = load ptr, ptr %36, align 8, !tbaa !9
  %464 = load ptr, ptr %40, align 8, !tbaa !9
  %465 = load i32, ptr %45, align 4, !tbaa !5
  %466 = load i32, ptr %47, align 4, !tbaa !5
  %467 = load i32, ptr %48, align 4, !tbaa !5
  %468 = load i32, ptr %25, align 4, !tbaa !5
  %469 = call zeroext i8 @libxsmm_typesize(i32 noundef %468)
  %470 = load i8, ptr %49, align 1, !tbaa !11
  %471 = load i32, ptr %57, align 4, !tbaa !5
  %472 = call i32 @libxsmm_gemm_batch_kernel(ptr noundef %456, i32 noundef %457, i32 noundef %458, ptr noundef %459, ptr noundef %460, ptr noundef %461, ptr noundef %462, ptr noundef %463, ptr noundef %464, i32 noundef %465, i32 noundef %466, i32 noundef %467, i8 noundef zeroext %469, i8 noundef zeroext %470, i32 noundef %471)
  store i32 %472, ptr %50, align 4, !tbaa !5
  br label %474

473:                                              ; preds = %449
  store i32 1, ptr %50, align 4, !tbaa !5
  br label %474

474:                                              ; preds = %473, %455
  br label %475

475:                                              ; preds = %474, %446
  call void @llvm.lifetime.end.p0(i64 4, ptr %58) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %57) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %56) #4
  call void @llvm.lifetime.end.p0(i64 40, ptr %55) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %54) #4
  br label %477

476:                                              ; preds = %205, %189
  store i32 1, ptr %50, align 4, !tbaa !5
  br label %477

477:                                              ; preds = %476, %475
  call void @llvm.lifetime.end.p0(i64 4, ptr %53) #4
  br label %478

478:                                              ; preds = %477, %135
  call void @llvm.lifetime.end.p0(i64 8, ptr %52) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #4
  br label %480

479:                                              ; preds = %92
  store i32 1, ptr %50, align 4, !tbaa !5
  br label %480

480:                                              ; preds = %479, %478
  %481 = load i32, ptr %50, align 4, !tbaa !5
  %482 = icmp ne i32 0, %481
  br i1 %482, label %483, label %528

483:                                              ; preds = %480
  %484 = load i32, ptr %25, align 4, !tbaa !5
  %485 = load i32, ptr %26, align 4, !tbaa !5
  %486 = load ptr, ptr %27, align 8, !tbaa !9
  %487 = load ptr, ptr %28, align 8, !tbaa !9
  %488 = load i32, ptr %29, align 4, !tbaa !5
  %489 = load i32, ptr %30, align 4, !tbaa !5
  %490 = load i32, ptr %31, align 4, !tbaa !5
  %491 = load ptr, ptr %32, align 8, !tbaa !9
  %492 = load ptr, ptr %33, align 8, !tbaa !9
  %493 = load ptr, ptr %34, align 8, !tbaa !9
  %494 = load ptr, ptr %35, align 8, !tbaa !9
  %495 = load ptr, ptr %36, align 8, !tbaa !9
  %496 = load ptr, ptr %37, align 8, !tbaa !9
  %497 = load ptr, ptr %38, align 8, !tbaa !9
  %498 = load ptr, ptr %39, align 8, !tbaa !9
  %499 = load ptr, ptr %40, align 8, !tbaa !9
  %500 = load ptr, ptr %41, align 8, !tbaa !9
  %501 = load ptr, ptr %42, align 8, !tbaa !9
  %502 = load i32, ptr %43, align 4, !tbaa !5
  %503 = load i32, ptr %44, align 4, !tbaa !5
  %504 = load i32, ptr %45, align 4, !tbaa !5
  call void @libxsmm_gemm_batch_blas(i32 noundef %484, i32 noundef %485, ptr noundef %486, ptr noundef %487, i32 noundef %488, i32 noundef %489, i32 noundef %490, ptr noundef %491, ptr noundef %492, ptr noundef %493, ptr noundef %494, ptr noundef %495, ptr noundef %496, ptr noundef %497, ptr noundef %498, ptr noundef %499, ptr noundef %500, ptr noundef %501, i32 noundef %502, i32 noundef %503, i32 noundef %504)
  %505 = load i32, ptr @libxsmm_verbosity, align 4, !tbaa !5
  %506 = icmp sle i32 2, %505
  br i1 %506, label %510, label %507

507:                                              ; preds = %483
  %508 = load i32, ptr @libxsmm_verbosity, align 4, !tbaa !5
  %509 = icmp sgt i32 0, %508
  br i1 %509, label %510, label %527

510:                                              ; preds = %507, %483
  call void @llvm.lifetime.start.p0(i64 8, ptr %70) #4
  %511 = load i32, ptr %29, align 4, !tbaa !5
  %512 = sext i32 %511 to i64
  %513 = load i32, ptr %30, align 4, !tbaa !5
  %514 = sext i32 %513 to i64
  %515 = mul i64 %512, %514
  %516 = load i32, ptr %29, align 4, !tbaa !5
  %517 = sext i32 %516 to i64
  %518 = mul i64 %515, %517
  store i64 %518, ptr %70, align 8, !tbaa !17
  %519 = load i64, ptr @libxsmm_gemm_batch_task.threshold_max, align 8, !tbaa !17
  %520 = load i64, ptr %70, align 8, !tbaa !17
  %521 = icmp ne i64 %519, %520
  br i1 %521, label %522, label %526

522:                                              ; preds = %510
  call void @libxsmm_stdio_acquire()
  %523 = load ptr, ptr @stderr, align 8, !tbaa !9
  %524 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %523, ptr noundef @.str.20) #4
  call void @libxsmm_stdio_release()
  %525 = load i64, ptr %70, align 8, !tbaa !17
  store i64 %525, ptr @libxsmm_gemm_batch_task.threshold_max, align 8, !tbaa !17
  br label %526

526:                                              ; preds = %522, %510
  call void @llvm.lifetime.end.p0(i64 8, ptr %70) #4
  br label %527

527:                                              ; preds = %526, %507
  br label %528

528:                                              ; preds = %527, %480
  call void @llvm.lifetime.end.p0(i64 4, ptr %50) #4
  call void @llvm.lifetime.end.p0(i64 1, ptr %49) #4
  br label %540

529:                                              ; preds = %82, %79, %76, %73, %24
  %530 = load i32, ptr @libxsmm_verbosity, align 4, !tbaa !5
  %531 = icmp ne i32 0, %530
  br i1 %531, label %532, label %539

532:                                              ; preds = %529
  %533 = atomicrmw add ptr @libxsmm_gemm_batch_task.error_once, i32 1 seq_cst, align 4
  %534 = add i32 %533, 1
  %535 = icmp eq i32 1, %534
  br i1 %535, label %536, label %539

536:                                              ; preds = %532
  %537 = load ptr, ptr @stderr, align 8, !tbaa !9
  %538 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %537, ptr noundef @.str.21) #4
  br label %539

539:                                              ; preds = %536, %532, %529
  br label %540

540:                                              ; preds = %539, %528
  ret void

541:                                              ; preds = %433, %334
  unreachable
}

declare zeroext i8 @libxsmm_typesize(i32 noundef) #3

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

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

; Function Attrs: nounwind uwtable
declare dso_local i32 @libxsmm_gemm_batch_kernel(ptr noundef, i32 noundef, i32 noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, i32 noundef, i32 noundef, i32 noundef, i8 noundef zeroext, i8 noundef zeroext, i32 noundef) #2

; Function Attrs: nounwind uwtable
declare dso_local i32 @libxsmm_gemm_batch_flags(i32 noundef, ptr noundef, ptr noundef, ptr noundef) #2

; Function Attrs: nounwind uwtable
declare dso_local void @libxsmm_gemm_batch_blas(i32 noundef, i32 noundef, ptr noundef, ptr noundef, i32 noundef, i32 noundef, i32 noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, i32 noundef, i32 noundef, i32 noundef) #2

declare i32 @libxsmm_dvalue(i32 noundef, ptr noundef, ptr noundef) #3

declare void @libxsmm_stdio_acquire() #3

declare void @libxsmm_stdio_release() #3

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { 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 #2 = { 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 #3 = { "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 }

!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 = !{!7, !7, i64 0}
!12 = !{!13, !13, i64 0}
!13 = !{!"double", !7, i64 0}
!14 = distinct !{!14, !15}
!15 = !{!"llvm.loop.mustprogress"}
!16 = distinct !{!16, !15}
!17 = !{!18, !18, i64 0}
!18 = !{!"long", !7, i64 0}


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

%struct.libxsmm_gemm_shape = type { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 }

@stderr = external local_unnamed_addr global ptr, align 8
@libxsmm_ninit = external local_unnamed_addr global i32, align 4
@.str.9 = external hidden unnamed_addr constant [2 x i8], align 1
@libxsmm_verbosity = external local_unnamed_addr global i32, align 4
@libxsmm_gemm_batch_task.error_once = external hidden global i32, align 4
@libxsmm_gemm_batch_task.threshold_max = external hidden local_unnamed_addr global i64, align 8
@.str.20 = external hidden unnamed_addr constant [49 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [63 x i8], align 1

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

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

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

; Function Attrs: nounwind uwtable
declare dso_local i32 @libxsmm_get_gemm_prefetch(i32 noundef) local_unnamed_addr #2

declare void @libxsmm_init() local_unnamed_addr #3

; Function Attrs: nounwind uwtable
define dso_local void @libxsmm_gemm_batch_task(i32 noundef %0, i32 noundef %1, ptr noundef %2, ptr noundef %3, i32 noundef %4, i32 noundef %5, i32 noundef %6, ptr noundef %7, ptr noundef %8, ptr noundef %9, ptr noundef %10, ptr noundef %11, ptr noundef %12, ptr noundef %13, ptr noundef %14, ptr noundef %15, ptr noundef %16, ptr noundef %17, i32 noundef %18, i32 noundef %19, i32 noundef %20, i32 noundef %21, i32 noundef %22, i32 noundef %23) local_unnamed_addr #2 {
  %25 = alloca double, align 8
  %26 = alloca double, align 8
  %27 = alloca %struct.libxsmm_gemm_shape, align 8
  %28 = alloca i32, align 4
  %29 = icmp ne ptr %8, null
  %30 = icmp ne ptr %11, null
  %or.cond = and i1 %29, %30
  %31 = icmp ne ptr %15, null
  %or.cond3 = and i1 %or.cond, %31
  %32 = icmp sgt i32 %22, -1
  %or.cond5 = and i1 %or.cond3, %32
  %33 = icmp slt i32 %22, %23
  %or.cond216 = and i1 %or.cond5, %33
  br i1 %or.cond216, label %34, label %184

34:                                               ; preds = %24
  %35 = tail call zeroext i8 @libxsmm_typesize(i32 noundef %1) #5
  %36 = load i32, ptr @libxsmm_ninit, align 4, !tbaa !5
  %37 = icmp ult i32 %36, 2
  br i1 %37, label %38, label %39

38:                                               ; preds = %34
  tail call void @libxsmm_init() #5
  br label %39

39:                                               ; preds = %38, %34
  %40 = sext i32 %4 to i64
  %41 = sext i32 %5 to i64
  %42 = mul nsw i64 %41, %40
  %43 = sext i32 %6 to i64
  %44 = shl nsw i64 %43, 1
  %45 = mul i64 %44, %42
  %46 = zext i8 %35 to i64
  %47 = add nsw i64 %41, %40
  %48 = mul i64 %47, %43
  %49 = shl nsw i64 %40, 1
  %50 = mul i64 %49, %41
  %51 = add i64 %48, %50
  %52 = shl i64 %51, 2
  %53 = mul i64 %52, %46
  %.not198 = icmp ugt i64 %45, %53
  br i1 %.not198, label %.critedge, label %54

54:                                               ; preds = %39
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %25) #5
  store double 1.000000e+00, ptr %25, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %26) #5
  store double 1.000000e+00, ptr %26, align 8, !tbaa !9
  %55 = call i32 @libxsmm_dvalue(i32 noundef %1, ptr noundef %7, ptr noundef nonnull %25) #5
  %56 = icmp eq i32 %55, 0
  br i1 %56, label %57, label %.critedge219

57:                                               ; preds = %54
  %58 = call i32 @libxsmm_dvalue(i32 noundef %1, ptr noundef %14, ptr noundef nonnull %26) #5
  %59 = icmp eq i32 %58, 0
  br i1 %59, label %60, label %.critedge219

60:                                               ; preds = %57
  %.not199 = icmp eq ptr %2, null
  br i1 %.not199, label %.thread222, label %61

61:                                               ; preds = %60
  %62 = load i8, ptr %2, align 1, !tbaa !11
  %63 = icmp eq i8 %62, 110
  br i1 %63, label %.thread222, label %64

64:                                               ; preds = %61
  %65 = load i8, ptr @.str.9, align 1, !tbaa !11
  %66 = icmp eq i8 %62, %65
  br label %.thread222

.thread222:                                       ; preds = %60, %64, %61
  %67 = phi i1 [ true, %61 ], [ %66, %64 ], [ true, %60 ]
  %not. = xor i1 %67, true
  %68 = zext i1 %not. to i32
  %.not200 = icmp eq ptr %3, null
  br i1 %.not200, label %.thread224, label %69

69:                                               ; preds = %.thread222
  %70 = load i8, ptr %3, align 1, !tbaa !11
  %71 = icmp eq i8 %70, 110
  br i1 %71, label %.thread224, label %72

72:                                               ; preds = %69
  %73 = load i8, ptr @.str.9, align 1, !tbaa !11
  %74 = icmp eq i8 %70, %73
  %cond.fr = freeze i1 %74
  %spec.select243 = select i1 %cond.fr, i32 0, i32 2
  br label %.thread224

.thread224:                                       ; preds = %72, %.thread222, %69
  %75 = phi i1 [ true, %69 ], [ true, %.thread222 ], [ %cond.fr, %72 ]
  %76 = phi i32 [ 0, %69 ], [ 0, %.thread222 ], [ %spec.select243, %72 ]
  %77 = or disjoint i32 %76, %68
  %78 = load double, ptr %26, align 8
  %79 = fcmp une double %78, 0.000000e+00
  %80 = select i1 %79, i32 0, i32 4
  %81 = or disjoint i32 %77, %80
  %82 = load double, ptr %25, align 8, !tbaa !9
  %83 = fcmp oeq double %82, 1.000000e+00
  br i1 %83, label %84, label %.critedge219

84:                                               ; preds = %.thread224
  %85 = fcmp oeq double %78, 1.000000e+00
  %86 = fcmp oeq double %78, 0.000000e+00
  %or.cond7 = or i1 %85, %86
  br i1 %or.cond7, label %87, label %.critedge219

87:                                               ; preds = %84
  %88 = call i32 @libxsmm_get_gemm_prefetch(i32 noundef 0)
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %27) #5
  %.not201 = icmp eq ptr %9, null
  br i1 %.not201, label %91, label %89

89:                                               ; preds = %87
  %90 = load i32, ptr %9, align 4, !tbaa !5
  br label %93

91:                                               ; preds = %87
  %92 = select i1 %67, i32 %4, i32 %6
  br label %93

93:                                               ; preds = %91, %89
  %94 = phi i32 [ %90, %89 ], [ %92, %91 ]
  %.not202 = icmp eq ptr %12, null
  br i1 %.not202, label %97, label %95

95:                                               ; preds = %93
  %96 = load i32, ptr %12, align 4, !tbaa !5
  br label %99

97:                                               ; preds = %93
  %98 = select i1 %75, i32 %6, i32 %5
  br label %99

99:                                               ; preds = %97, %95
  %100 = phi i32 [ %96, %95 ], [ %98, %97 ]
  %.not203 = icmp eq ptr %16, null
  br i1 %.not203, label %103, label %101

101:                                              ; preds = %99
  %102 = load i32, ptr %16, align 4, !tbaa !5
  br label %103

103:                                              ; preds = %99, %101
  %104 = phi i32 [ %102, %101 ], [ %4, %99 ]
  call void @libxsmm_create_gemm_shape(ptr dead_on_unwind nonnull writable sret(%struct.libxsmm_gemm_shape) align 4 %27, i32 noundef %4, i32 noundef %5, i32 noundef %6, i32 noundef %94, i32 noundef %100, i32 noundef %104, i32 noundef %0, i32 noundef %0, i32 noundef %1, i32 noundef %1) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %28) #5
  store i32 0, ptr %28, align 4, !tbaa !5
  %105 = call i32 @llvm.abs.i32(i32 %18, i1 true)
  %106 = icmp ugt i32 %105, 3
  br i1 %106, label %107, label %133

107:                                              ; preds = %103
  %108 = icmp eq i32 %21, 0
  %. = select i1 %108, ptr null, ptr %28
  %109 = call i32 @libxsmm_gemm_batch_flags(i32 noundef %81, ptr noundef nonnull %27, ptr noundef nonnull %15, ptr noundef %.)
  %110 = zext i8 %35 to i32
  %111 = load i32, ptr %28, align 4, !tbaa !5
  %112 = icmp sgt i32 %111, %110
  br i1 %112, label %113, label %.thread237

113:                                              ; preds = %107
  %114 = call i32 @llvm.abs.i32(i32 %20, i1 true)
  %115 = mul nsw i32 %114, %18
  %116 = icmp sgt i32 %115, %18
  br i1 %116, label %.lr.ph251, label %.thread237

.lr.ph251:                                        ; preds = %113
  %.not211 = icmp eq ptr %17, null
  %117 = add nsw i32 %111, -1
  %118 = zext nneg i32 %117 to i64
  br i1 %.not211, label %.lr.ph251.split.us, label %.lr.ph251.split.preheader

.lr.ph251.split.preheader:                        ; preds = %.lr.ph251
  %119 = sext i32 %18 to i64
  %120 = sext i32 %115 to i64
  br label %.lr.ph251.split

.lr.ph251.split.us:                               ; preds = %.lr.ph251
  %121 = ptrtoint ptr %15 to i64
  %122 = and i64 %121, %118
  %.not212.us = icmp eq i64 %122, 0
  %spec.select263 = select i1 %.not212.us, i32 %109, i32 %81
  br label %.thread237

123:                                              ; preds = %.lr.ph251.split
  %indvars.iv.next = add nsw i64 %indvars.iv, %119
  %124 = icmp slt i64 %indvars.iv.next, %120
  br i1 %124, label %.lr.ph251.split, label %.thread237, !llvm.loop !12

.lr.ph251.split:                                  ; preds = %.lr.ph251.split.preheader, %123
  %indvars.iv = phi i64 [ %119, %.lr.ph251.split.preheader ], [ %indvars.iv.next, %123 ]
  %125 = getelementptr inbounds i8, ptr %17, i64 %indvars.iv
  %126 = load i32, ptr %125, align 4, !tbaa !5
  %127 = sub nsw i32 %126, %19
  %128 = mul nsw i32 %127, %110
  %129 = sext i32 %128 to i64
  %130 = getelementptr inbounds i8, ptr %15, i64 %129
  %131 = ptrtoint ptr %130 to i64
  %132 = and i64 %131, %118
  %.not212 = icmp eq i64 %132, 0
  br i1 %.not212, label %123, label %.thread237

133:                                              ; preds = %103
  %.not204 = icmp eq i32 %18, 0
  %.not205 = icmp eq i32 %21, 0
  br i1 %.not204, label %148, label %134

134:                                              ; preds = %133
  %.8 = select i1 %.not205, ptr null, ptr %28
  %135 = call i32 @libxsmm_gemm_batch_flags(i32 noundef %81, ptr noundef nonnull %27, ptr noundef nonnull %15, ptr noundef %.8)
  %.not209 = icmp eq ptr %17, null
  br i1 %.not209, label %141, label %136

136:                                              ; preds = %134
  %137 = load i32, ptr %17, align 4, !tbaa !5
  %138 = sub nsw i32 %137, %19
  %139 = zext i8 %35 to i32
  %140 = mul nsw i32 %138, %139
  br label %143

141:                                              ; preds = %134
  %142 = zext i8 %35 to i32
  br label %143

143:                                              ; preds = %141, %136
  %144 = phi i32 [ %140, %136 ], [ %142, %141 ]
  %145 = load i32, ptr %28, align 4, !tbaa !5
  %146 = add nsw i32 %145, -1
  %147 = and i32 %146, %144
  %.not210 = icmp eq i32 %147, 0
  %spec.select = select i1 %.not210, i32 %135, i32 %81
  br label %.thread237

148:                                              ; preds = %133
  br i1 %.not205, label %.thread237, label %149

149:                                              ; preds = %148
  %.not206 = icmp eq ptr %17, null
  br i1 %.not206, label %152, label %150

150:                                              ; preds = %149
  %151 = load i32, ptr %17, align 4, !tbaa !5
  br label %152

152:                                              ; preds = %149, %150
  %153 = phi i32 [ %151, %150 ], [ 8, %149 ]
  %.not256 = icmp eq i32 %20, 0
  br i1 %.not256, label %.thread237, label %.lr.ph

.lr.ph:                                           ; preds = %152
  %154 = shl nsw i32 %19, 3
  %155 = sub nsw i32 %153, %154
  %156 = zext i8 %35 to i32
  %157 = sext i32 %155 to i64
  %smax = call i32 @llvm.abs.i32(i32 %20, i1 false)
  br label %158

158:                                              ; preds = %.lr.ph, %169
  %.0172247 = phi ptr [ %15, %.lr.ph ], [ %171, %169 ]
  %.0173246 = phi i32 [ 0, %.lr.ph ], [ %170, %169 ]
  %159 = load ptr, ptr %.0172247, align 8, !tbaa !14
  %.not207 = icmp eq ptr %159, null
  br i1 %.not207, label %.critedge.critedge, label %160

160:                                              ; preds = %158
  %161 = call i32 @libxsmm_gemm_batch_flags(i32 noundef %81, ptr noundef nonnull %27, ptr noundef nonnull %159, ptr noundef nonnull %28)
  %162 = load i32, ptr %28, align 4, !tbaa !5
  %163 = icmp sgt i32 %162, %156
  br i1 %163, label %164, label %169

164:                                              ; preds = %160
  %165 = ptrtoint ptr %159 to i64
  %166 = add nsw i32 %162, -1
  %167 = zext nneg i32 %166 to i64
  %168 = and i64 %167, %165
  %.not208 = icmp eq i64 %168, 0
  br i1 %.not208, label %169, label %.thread237

169:                                              ; preds = %160, %164
  %170 = add nuw i32 %.0173246, 1
  %171 = getelementptr inbounds i8, ptr %.0172247, i64 %157
  %exitcond.not = icmp eq i32 %170, %smax
  br i1 %exitcond.not, label %.thread237, label %158, !llvm.loop !16

.thread237:                                       ; preds = %169, %164, %.lr.ph251.split, %123, %.lr.ph251.split.us, %152, %113, %143, %148, %107
  %.6171236 = phi i32 [ %spec.select, %143 ], [ %81, %148 ], [ %109, %107 ], [ %109, %113 ], [ %81, %152 ], [ %spec.select263, %.lr.ph251.split.us ], [ %81, %.lr.ph251.split ], [ %109, %123 ], [ %161, %169 ], [ %81, %164 ]
  %172 = call ptr @libxsmm_dispatch_gemm(ptr noundef nonnull byval(%struct.libxsmm_gemm_shape) align 8 %27, i32 noundef %.6171236, i32 noundef %88) #5
  %.not213 = icmp eq ptr %172, null
  br i1 %.not213, label %.critedge.critedge, label %173

173:                                              ; preds = %.thread237
  %174 = call zeroext i8 @libxsmm_typesize(i32 noundef %0) #5
  %175 = call i32 @libxsmm_gemm_batch_kernel(ptr noundef nonnull %172, i32 noundef %19, i32 noundef %18, ptr noundef %10, ptr noundef %13, ptr noundef %17, ptr noundef nonnull %8, ptr noundef nonnull %11, ptr noundef nonnull %15, i32 noundef %20, i32 noundef %22, i32 noundef %23, i8 noundef zeroext %174, i8 noundef zeroext %35, i32 noundef %.6171236)
  %176 = icmp eq i32 %175, 0
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %28) #5
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %27) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %26) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %25) #5
  br i1 %176, label %192, label %.critedge

.critedge219:                                     ; preds = %54, %.thread224, %84, %57
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %26) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %25) #5
  br label %.critedge

.critedge.critedge:                               ; preds = %158, %.thread237
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %28) #5
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %27) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %26) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %25) #5
  br label %.critedge

.critedge:                                        ; preds = %.critedge.critedge, %39, %.critedge219, %173
  call void @libxsmm_gemm_batch_blas(i32 noundef %0, i32 noundef %1, ptr noundef %2, ptr noundef %3, i32 noundef %4, i32 noundef %5, i32 noundef %6, ptr noundef %7, ptr noundef nonnull %8, ptr noundef %9, ptr noundef %10, ptr noundef nonnull %11, ptr noundef %12, ptr noundef %13, ptr noundef %14, ptr noundef nonnull %15, ptr noundef %16, ptr noundef %17, i32 noundef %18, i32 noundef %19, i32 noundef %20)
  %177 = load i32, ptr @libxsmm_verbosity, align 4
  %or.cond10 = icmp ugt i32 %177, 1
  br i1 %or.cond10, label %178, label %192

178:                                              ; preds = %.critedge
  %179 = mul i64 %42, %40
  %180 = load i64, ptr @libxsmm_gemm_batch_task.threshold_max, align 8, !tbaa !17
  %.not215 = icmp eq i64 %180, %179
  br i1 %.not215, label %192, label %181

181:                                              ; preds = %178
  call void @libxsmm_stdio_acquire() #5
  %182 = load ptr, ptr @stderr, align 8, !tbaa !14
  %183 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %182, ptr noundef nonnull @.str.20) #6
  call void @libxsmm_stdio_release() #5
  store i64 %179, ptr @libxsmm_gemm_batch_task.threshold_max, align 8, !tbaa !17
  br label %192

184:                                              ; preds = %24
  %185 = load i32, ptr @libxsmm_verbosity, align 4, !tbaa !5
  %.not = icmp eq i32 %185, 0
  br i1 %.not, label %192, label %186

186:                                              ; preds = %184
  %187 = atomicrmw add ptr @libxsmm_gemm_batch_task.error_once, i32 1 seq_cst, align 4
  %188 = icmp eq i32 %187, 0
  br i1 %188, label %189, label %192

189:                                              ; preds = %186
  %190 = load ptr, ptr @stderr, align 8, !tbaa !14
  %191 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %190, ptr noundef nonnull @.str.21) #6
  br label %192

192:                                              ; preds = %173, %.critedge, %181, %178, %184, %186, %189
  ret void
}

declare zeroext i8 @libxsmm_typesize(i32 noundef) local_unnamed_addr #3

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 #3

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

; Function Attrs: nounwind uwtable
declare dso_local i32 @libxsmm_gemm_batch_kernel(ptr noundef, i32 noundef, i32 noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, i32 noundef, i32 noundef, i32 noundef, i8 noundef zeroext, i8 noundef zeroext, i32 noundef) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
declare dso_local i32 @libxsmm_gemm_batch_flags(i32 noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
declare dso_local void @libxsmm_gemm_batch_blas(i32 noundef, i32 noundef, ptr noundef, ptr noundef, i32 noundef, i32 noundef, i32 noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #2

declare i32 @libxsmm_dvalue(i32 noundef, ptr noundef, ptr noundef) local_unnamed_addr #3

declare void @libxsmm_stdio_acquire() local_unnamed_addr #3

declare void @libxsmm_stdio_release() local_unnamed_addr #3

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.abs.i32(i32, i1 immarg) #4

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { 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 #2 = { 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 #3 = { "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 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #5 = { nounwind }
attributes #6 = { cold nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"double", !7, i64 0}
!11 = !{!7, !7, i64 0}
!12 = distinct !{!12, !13}
!13 = !{!"llvm.loop.mustprogress"}
!14 = !{!15, !15, i64 0}
!15 = !{!"any pointer", !7, i64 0}
!16 = distinct !{!16, !13}
!17 = !{!18, !18, i64 0}
!18 = !{!"long", !7, i64 0}


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