; 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"

%union.internal_gemm_locktype = type { i32, [60 x i8] }
%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 }

@.str.1 = external hidden unnamed_addr constant [68 x i8], align 1
@internal_gemm_nlocks = external dso_local global i32, align 64
@internal_gemm_lock = external dso_local global [1024 x %union.internal_gemm_locktype], align 64
@.str.12 = external hidden unnamed_addr constant [78 x i8], align 1
@__PRETTY_FUNCTION__.libxsmm_gemm_batch_kernel = external hidden unnamed_addr constant [259 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [31 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [39 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [44 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [44 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [19 x i8], align 1

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

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

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

; Function Attrs: nounwind uwtable
define dso_local i32 @libxsmm_gemm_batch_kernel(ptr noundef %0, i32 noundef %1, i32 noundef %2, ptr noundef %3, ptr noundef %4, ptr noundef %5, ptr noundef %6, ptr noundef %7, ptr noundef %8, i32 noundef %9, i32 noundef %10, i32 noundef %11, i8 noundef zeroext %12, i8 noundef zeroext %13, i32 noundef %14) #2 {
  %16 = alloca ptr, align 8
  %17 = alloca i32, align 4
  %18 = alloca i32, align 4
  %19 = alloca ptr, align 8
  %20 = alloca ptr, align 8
  %21 = alloca ptr, align 8
  %22 = alloca ptr, align 8
  %23 = alloca ptr, align 8
  %24 = alloca ptr, align 8
  %25 = alloca i32, align 4
  %26 = alloca i32, align 4
  %27 = alloca i32, align 4
  %28 = alloca i8, align 1
  %29 = alloca i8, align 1
  %30 = alloca i32, align 4
  %31 = alloca i32, align 4
  %32 = alloca i32, align 4
  %33 = alloca i32, align 4
  %34 = alloca i32, align 4
  %35 = alloca i32, align 4
  %36 = alloca i32, align 4
  %37 = alloca i32, align 4
  %38 = alloca ptr, align 8
  %39 = alloca ptr, align 8
  %40 = alloca ptr, align 8
  %41 = alloca %struct.libxsmm_gemm_param, align 8
  %42 = alloca i32, align 4
  %43 = alloca i32, align 4
  %44 = alloca i32, align 4
  %45 = alloca i32, align 4
  %46 = alloca i32, align 4
  %47 = alloca ptr, align 8
  %48 = alloca ptr, align 8
  %49 = alloca i32, align 4
  %50 = alloca i32, align 4
  %51 = alloca i32, align 4
  %52 = alloca ptr, align 8
  %53 = alloca i32, align 4
  %54 = alloca i32, align 4
  %55 = alloca i32, align 4
  %56 = alloca i32, align 4
  %57 = alloca i32, align 4
  %58 = alloca i32, align 4
  %59 = alloca i32, align 4
  %60 = alloca i32, align 4
  %61 = alloca ptr, align 8
  %62 = alloca ptr, align 8
  %63 = alloca ptr, align 8
  %64 = alloca i32, align 4
  %65 = alloca i32, align 4
  %66 = alloca ptr, align 8
  %67 = alloca ptr, align 8
  %68 = alloca ptr, align 8
  %69 = alloca ptr, align 8
  %70 = alloca ptr, align 8
  %71 = alloca ptr, align 8
  %72 = alloca ptr, align 8
  %73 = alloca ptr, align 8
  %74 = alloca ptr, align 8
  %75 = alloca i32, align 4
  %76 = alloca i32, align 4
  %77 = alloca i32, align 4
  %78 = alloca i32, align 4
  %79 = alloca i32, align 4
  %80 = alloca i32, align 4
  %81 = alloca i32, align 4
  %82 = alloca i32, align 4
  %83 = alloca i32, align 4
  store ptr %0, ptr %16, align 8, !tbaa !5
  store i32 %1, ptr %17, align 4, !tbaa !9
  store i32 %2, ptr %18, align 4, !tbaa !9
  store ptr %3, ptr %19, align 8, !tbaa !5
  store ptr %4, ptr %20, align 8, !tbaa !5
  store ptr %5, ptr %21, align 8, !tbaa !5
  store ptr %6, ptr %22, align 8, !tbaa !5
  store ptr %7, ptr %23, align 8, !tbaa !5
  store ptr %8, ptr %24, align 8, !tbaa !5
  store i32 %9, ptr %25, align 4, !tbaa !9
  store i32 %10, ptr %26, align 4, !tbaa !9
  store i32 %11, ptr %27, align 4, !tbaa !9
  store i8 %12, ptr %28, align 1, !tbaa !11
  store i8 %13, ptr %29, align 1, !tbaa !11
  store i32 %14, ptr %30, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #4
  store i32 0, ptr %31, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #4
  %84 = load i32, ptr %25, align 4, !tbaa !9
  %85 = icmp sle i32 0, %84
  br i1 %85, label %86, label %88

86:                                               ; preds = %15
  %87 = load i32, ptr %25, align 4, !tbaa !9
  br label %91

88:                                               ; preds = %15
  %89 = load i32, ptr %25, align 4, !tbaa !9
  %90 = sub nsw i32 0, %89
  br label %91

91:                                               ; preds = %88, %86
  %92 = phi i32 [ %87, %86 ], [ %90, %88 ]
  store i32 %92, ptr %32, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #4
  %93 = load i32, ptr %32, align 4, !tbaa !9
  %94 = load i32, ptr %27, align 4, !tbaa !9
  %95 = icmp slt i32 %93, %94
  br i1 %95, label %96, label %98

96:                                               ; preds = %91
  %97 = load i32, ptr %32, align 4, !tbaa !9
  br label %100

98:                                               ; preds = %91
  %99 = load i32, ptr %27, align 4, !tbaa !9
  br label %100

100:                                              ; preds = %98, %96
  %101 = phi i32 [ %97, %96 ], [ %99, %98 ]
  store i32 %101, ptr %33, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #4
  %102 = load i32, ptr %32, align 4, !tbaa !9
  %103 = load i32, ptr %33, align 4, !tbaa !9
  %104 = sub nsw i32 %103, 1
  %105 = add nsw i32 %102, %104
  %106 = load i32, ptr %33, align 4, !tbaa !9
  %107 = sdiv i32 %105, %106
  store i32 %107, ptr %34, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #4
  %108 = load i32, ptr %26, align 4, !tbaa !9
  %109 = load i32, ptr %33, align 4, !tbaa !9
  %110 = icmp slt i32 %108, %109
  br i1 %110, label %111, label %115

111:                                              ; preds = %100
  %112 = load i32, ptr %26, align 4, !tbaa !9
  %113 = load i32, ptr %34, align 4, !tbaa !9
  %114 = mul nsw i32 %112, %113
  br label %117

115:                                              ; preds = %100
  %116 = load i32, ptr %32, align 4, !tbaa !9
  br label %117

117:                                              ; preds = %115, %111
  %118 = phi i32 [ %114, %111 ], [ %116, %115 ]
  store i32 %118, ptr %35, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %36) #4
  %119 = load i32, ptr %35, align 4, !tbaa !9
  %120 = load i32, ptr %34, align 4, !tbaa !9
  %121 = add nsw i32 %119, %120
  store i32 %121, ptr %36, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %37) #4
  %122 = load i32, ptr %36, align 4, !tbaa !9
  %123 = load i32, ptr %32, align 4, !tbaa !9
  %124 = icmp slt i32 %122, %123
  br i1 %124, label %125, label %127

125:                                              ; preds = %117
  %126 = load i32, ptr %36, align 4, !tbaa !9
  br label %129

127:                                              ; preds = %117
  %128 = load i32, ptr %32, align 4, !tbaa !9
  br label %129

129:                                              ; preds = %127, %125
  %130 = phi i32 [ %126, %125 ], [ %128, %127 ]
  store i32 %130, ptr %37, align 4, !tbaa !9
  %131 = load ptr, ptr %22, align 8, !tbaa !5
  %132 = icmp ne ptr null, %131
  br i1 %132, label %133, label %143

133:                                              ; preds = %129
  %134 = load ptr, ptr %23, align 8, !tbaa !5
  %135 = icmp ne ptr null, %134
  br i1 %135, label %136, label %143

136:                                              ; preds = %133
  %137 = load ptr, ptr %24, align 8, !tbaa !5
  %138 = icmp ne ptr null, %137
  br i1 %138, label %139, label %143

139:                                              ; preds = %136
  %140 = load ptr, ptr %16, align 8, !tbaa !5
  %141 = icmp ne ptr null, %140
  br i1 %141, label %142, label %143

142:                                              ; preds = %139
  br label %144

143:                                              ; preds = %139, %136, %133, %129
  call void @__assert_fail(ptr noundef @.str.12, ptr noundef @.str.1, i32 noundef 595, ptr noundef @__PRETTY_FUNCTION__.libxsmm_gemm_batch_kernel) #6
  unreachable

144:                                              ; preds = %142
  %145 = load i32, ptr %30, align 4, !tbaa !9
  %146 = load i32, ptr %35, align 4, !tbaa !9
  %147 = load i32, ptr %37, align 4, !tbaa !9
  %148 = icmp slt i32 %146, %147
  br i1 %148, label %149, label %1372

149:                                              ; preds = %144
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #4
  %150 = load ptr, ptr %22, align 8, !tbaa !5
  store ptr %150, ptr %38, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %39) #4
  %151 = load ptr, ptr %23, align 8, !tbaa !5
  store ptr %151, ptr %39, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %40) #4
  %152 = load ptr, ptr %24, align 8, !tbaa !5
  store ptr %152, ptr %40, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 176, ptr %41) #4
  %153 = load i8, ptr %28, align 1, !tbaa !11
  %154 = zext i8 %153 to i32
  %155 = icmp slt i32 0, %154
  br i1 %155, label %156, label %161

156:                                              ; preds = %149
  %157 = load i8, ptr %29, align 1, !tbaa !11
  %158 = zext i8 %157 to i32
  %159 = icmp slt i32 0, %158
  br i1 %159, label %160, label %161

160:                                              ; preds = %156
  br label %162

161:                                              ; preds = %156, %149
  call void @__assert_fail(ptr noundef @.str.13, ptr noundef @.str.1, i32 noundef 603, ptr noundef @__PRETTY_FUNCTION__.libxsmm_gemm_batch_kernel) #6
  unreachable

162:                                              ; preds = %160
  %163 = load i32, ptr %18, align 4, !tbaa !9
  %164 = icmp sle i32 0, %163
  br i1 %164, label %165, label %167

165:                                              ; preds = %162
  %166 = load i32, ptr %18, align 4, !tbaa !9
  br label %170

167:                                              ; preds = %162
  %168 = load i32, ptr %18, align 4, !tbaa !9
  %169 = sub nsw i32 0, %168
  br label %170

170:                                              ; preds = %167, %165
  %171 = phi i32 [ %166, %165 ], [ %169, %167 ]
  %172 = icmp sle i32 4, %171
  br i1 %172, label %173, label %775

173:                                              ; preds = %170
  call void @llvm.lifetime.start.p0(i64 4, ptr %42) #4
  %174 = load i32, ptr %37, align 4, !tbaa !9
  %175 = load i32, ptr %32, align 4, !tbaa !9
  %176 = icmp ne i32 %174, %175
  br i1 %176, label %177, label %179

177:                                              ; preds = %173
  %178 = load i32, ptr %37, align 4, !tbaa !9
  br label %182

179:                                              ; preds = %173
  %180 = load i32, ptr %37, align 4, !tbaa !9
  %181 = sub nsw i32 %180, 1
  br label %182

182:                                              ; preds = %179, %177
  %183 = phi i32 [ %178, %177 ], [ %181, %179 ]
  %184 = load i32, ptr %18, align 4, !tbaa !9
  %185 = mul nsw i32 %183, %184
  store i32 %185, ptr %42, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %43) #4
  %186 = load i32, ptr %35, align 4, !tbaa !9
  %187 = load i32, ptr %18, align 4, !tbaa !9
  %188 = mul nsw i32 %186, %187
  store i32 %188, ptr %43, align 4, !tbaa !9
  %189 = load i32, ptr %33, align 4, !tbaa !9
  %190 = icmp eq i32 1, %189
  br i1 %190, label %197, label %191

191:                                              ; preds = %182
  %192 = load i32, ptr @internal_gemm_nlocks, align 64, !tbaa !9
  %193 = icmp eq i32 0, %192
  br i1 %193, label %197, label %194

194:                                              ; preds = %191
  %195 = load i32, ptr %25, align 4, !tbaa !9
  %196 = icmp sgt i32 0, %195
  br i1 %196, label %197, label %415

197:                                              ; preds = %194, %191, %182
  call void @llvm.lifetime.start.p0(i64 4, ptr %44) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %45) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %46) #4
  %198 = load ptr, ptr %19, align 8, !tbaa !5
  %199 = icmp ne ptr null, %198
  br i1 %199, label %200, label %206

200:                                              ; preds = %197
  %201 = load ptr, ptr %19, align 8, !tbaa !5
  %202 = load i32, ptr %43, align 4, !tbaa !9
  %203 = sext i32 %202 to i64
  %204 = getelementptr inbounds i8, ptr %201, i64 %203
  %205 = load i32, ptr %204, align 4, !tbaa !9
  br label %208

206:                                              ; preds = %197
  %207 = load i32, ptr %17, align 4, !tbaa !9
  br label %208

208:                                              ; preds = %206, %200
  %209 = phi i32 [ %205, %200 ], [ %207, %206 ]
  %210 = load i32, ptr %17, align 4, !tbaa !9
  %211 = sub nsw i32 %209, %210
  store i32 %211, ptr %44, align 4, !tbaa !9
  %212 = load ptr, ptr %20, align 8, !tbaa !5
  %213 = icmp ne ptr null, %212
  br i1 %213, label %214, label %220

214:                                              ; preds = %208
  %215 = load ptr, ptr %20, align 8, !tbaa !5
  %216 = load i32, ptr %43, align 4, !tbaa !9
  %217 = sext i32 %216 to i64
  %218 = getelementptr inbounds i8, ptr %215, i64 %217
  %219 = load i32, ptr %218, align 4, !tbaa !9
  br label %222

220:                                              ; preds = %208
  %221 = load i32, ptr %17, align 4, !tbaa !9
  br label %222

222:                                              ; preds = %220, %214
  %223 = phi i32 [ %219, %214 ], [ %221, %220 ]
  %224 = load i32, ptr %17, align 4, !tbaa !9
  %225 = sub nsw i32 %223, %224
  store i32 %225, ptr %45, align 4, !tbaa !9
  %226 = load ptr, ptr %21, align 8, !tbaa !5
  %227 = icmp ne ptr null, %226
  br i1 %227, label %228, label %234

228:                                              ; preds = %222
  %229 = load ptr, ptr %21, align 8, !tbaa !5
  %230 = load i32, ptr %43, align 4, !tbaa !9
  %231 = sext i32 %230 to i64
  %232 = getelementptr inbounds i8, ptr %229, i64 %231
  %233 = load i32, ptr %232, align 4, !tbaa !9
  br label %236

234:                                              ; preds = %222
  %235 = load i32, ptr %17, align 4, !tbaa !9
  br label %236

236:                                              ; preds = %234, %228
  %237 = phi i32 [ %233, %228 ], [ %235, %234 ]
  %238 = load i32, ptr %17, align 4, !tbaa !9
  %239 = sub nsw i32 %237, %238
  store i32 %239, ptr %46, align 4, !tbaa !9
  %240 = load i32, ptr %44, align 4, !tbaa !9
  %241 = icmp sle i32 0, %240
  br i1 %241, label %242, label %384

242:                                              ; preds = %236
  %243 = load i32, ptr %45, align 4, !tbaa !9
  %244 = icmp sle i32 0, %243
  br i1 %244, label %245, label %384

245:                                              ; preds = %242
  %246 = load i32, ptr %46, align 4, !tbaa !9
  %247 = icmp sle i32 0, %246
  br i1 %247, label %248, label %384

248:                                              ; preds = %245
  %249 = load ptr, ptr %38, align 8, !tbaa !5
  %250 = load i32, ptr %44, align 4, !tbaa !9
  %251 = load i8, ptr %28, align 1, !tbaa !11
  %252 = zext i8 %251 to i32
  %253 = mul nsw i32 %250, %252
  %254 = sext i32 %253 to i64
  %255 = getelementptr inbounds i8, ptr %249, i64 %254
  %256 = getelementptr inbounds %struct.libxsmm_gemm_param, ptr %41, i32 0, i32 1
  %257 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %256, i32 0, i32 0
  store ptr %255, ptr %257, align 8, !tbaa !12
  %258 = load ptr, ptr %39, align 8, !tbaa !5
  %259 = load i32, ptr %45, align 4, !tbaa !9
  %260 = load i8, ptr %28, align 1, !tbaa !11
  %261 = zext i8 %260 to i32
  %262 = mul nsw i32 %259, %261
  %263 = sext i32 %262 to i64
  %264 = getelementptr inbounds i8, ptr %258, i64 %263
  %265 = getelementptr inbounds %struct.libxsmm_gemm_param, ptr %41, i32 0, i32 2
  %266 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %265, i32 0, i32 0
  store ptr %264, ptr %266, align 8, !tbaa !16
  %267 = load ptr, ptr %40, align 8, !tbaa !5
  %268 = load i32, ptr %46, align 4, !tbaa !9
  %269 = load i8, ptr %29, align 1, !tbaa !11
  %270 = zext i8 %269 to i32
  %271 = mul nsw i32 %268, %270
  %272 = sext i32 %271 to i64
  %273 = getelementptr inbounds i8, ptr %267, i64 %272
  %274 = getelementptr inbounds %struct.libxsmm_gemm_param, ptr %41, i32 0, i32 3
  %275 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %274, i32 0, i32 0
  store ptr %273, ptr %275, align 8, !tbaa !17
  %276 = load i32, ptr %18, align 4, !tbaa !9
  %277 = load i32, ptr %43, align 4, !tbaa !9
  %278 = add nsw i32 %277, %276
  store i32 %278, ptr %43, align 4, !tbaa !9
  br label %279

279:                                              ; preds = %379, %248
  %280 = load i32, ptr %43, align 4, !tbaa !9
  %281 = load i32, ptr %42, align 4, !tbaa !9
  %282 = icmp sle i32 %280, %281
  br i1 %282, label %283, label %383

283:                                              ; preds = %279
  %284 = load ptr, ptr %19, align 8, !tbaa !5
  %285 = icmp ne ptr null, %284
  br i1 %285, label %286, label %292

286:                                              ; preds = %283
  %287 = load ptr, ptr %19, align 8, !tbaa !5
  %288 = load i32, ptr %43, align 4, !tbaa !9
  %289 = sext i32 %288 to i64
  %290 = getelementptr inbounds i8, ptr %287, i64 %289
  %291 = load i32, ptr %290, align 4, !tbaa !9
  br label %294

292:                                              ; preds = %283
  %293 = load i32, ptr %17, align 4, !tbaa !9
  br label %294

294:                                              ; preds = %292, %286
  %295 = phi i32 [ %291, %286 ], [ %293, %292 ]
  %296 = load i32, ptr %17, align 4, !tbaa !9
  %297 = sub nsw i32 %295, %296
  store i32 %297, ptr %44, align 4, !tbaa !9
  %298 = load ptr, ptr %20, align 8, !tbaa !5
  %299 = icmp ne ptr null, %298
  br i1 %299, label %300, label %306

300:                                              ; preds = %294
  %301 = load ptr, ptr %20, align 8, !tbaa !5
  %302 = load i32, ptr %43, align 4, !tbaa !9
  %303 = sext i32 %302 to i64
  %304 = getelementptr inbounds i8, ptr %301, i64 %303
  %305 = load i32, ptr %304, align 4, !tbaa !9
  br label %308

306:                                              ; preds = %294
  %307 = load i32, ptr %17, align 4, !tbaa !9
  br label %308

308:                                              ; preds = %306, %300
  %309 = phi i32 [ %305, %300 ], [ %307, %306 ]
  %310 = load i32, ptr %17, align 4, !tbaa !9
  %311 = sub nsw i32 %309, %310
  store i32 %311, ptr %45, align 4, !tbaa !9
  %312 = load ptr, ptr %21, align 8, !tbaa !5
  %313 = icmp ne ptr null, %312
  br i1 %313, label %314, label %320

314:                                              ; preds = %308
  %315 = load ptr, ptr %21, align 8, !tbaa !5
  %316 = load i32, ptr %43, align 4, !tbaa !9
  %317 = sext i32 %316 to i64
  %318 = getelementptr inbounds i8, ptr %315, i64 %317
  %319 = load i32, ptr %318, align 4, !tbaa !9
  br label %322

320:                                              ; preds = %308
  %321 = load i32, ptr %17, align 4, !tbaa !9
  br label %322

322:                                              ; preds = %320, %314
  %323 = phi i32 [ %319, %314 ], [ %321, %320 ]
  %324 = load i32, ptr %17, align 4, !tbaa !9
  %325 = sub nsw i32 %323, %324
  store i32 %325, ptr %46, align 4, !tbaa !9
  %326 = load i32, ptr %44, align 4, !tbaa !9
  %327 = icmp sle i32 0, %326
  br i1 %327, label %328, label %378

328:                                              ; preds = %322
  %329 = load i32, ptr %45, align 4, !tbaa !9
  %330 = icmp sle i32 0, %329
  br i1 %330, label %331, label %378

331:                                              ; preds = %328
  %332 = load i32, ptr %46, align 4, !tbaa !9
  %333 = icmp sle i32 0, %332
  br i1 %333, label %334, label %378

334:                                              ; preds = %331
  %335 = load ptr, ptr %38, align 8, !tbaa !5
  %336 = load i32, ptr %44, align 4, !tbaa !9
  %337 = load i8, ptr %28, align 1, !tbaa !11
  %338 = zext i8 %337 to i32
  %339 = mul nsw i32 %336, %338
  %340 = sext i32 %339 to i64
  %341 = getelementptr inbounds i8, ptr %335, i64 %340
  %342 = getelementptr inbounds %struct.libxsmm_gemm_param, ptr %41, i32 0, i32 1
  %343 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %342, i32 0, i32 5
  store ptr %341, ptr %343, align 8, !tbaa !18
  %344 = load ptr, ptr %39, align 8, !tbaa !5
  %345 = load i32, ptr %45, align 4, !tbaa !9
  %346 = load i8, ptr %28, align 1, !tbaa !11
  %347 = zext i8 %346 to i32
  %348 = mul nsw i32 %345, %347
  %349 = sext i32 %348 to i64
  %350 = getelementptr inbounds i8, ptr %344, i64 %349
  %351 = getelementptr inbounds %struct.libxsmm_gemm_param, ptr %41, i32 0, i32 2
  %352 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %351, i32 0, i32 5
  store ptr %350, ptr %352, align 8, !tbaa !19
  %353 = load ptr, ptr %40, align 8, !tbaa !5
  %354 = load i32, ptr %46, align 4, !tbaa !9
  %355 = load i8, ptr %29, align 1, !tbaa !11
  %356 = zext i8 %355 to i32
  %357 = mul nsw i32 %354, %356
  %358 = sext i32 %357 to i64
  %359 = getelementptr inbounds i8, ptr %353, i64 %358
  %360 = getelementptr inbounds %struct.libxsmm_gemm_param, ptr %41, i32 0, i32 3
  %361 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %360, i32 0, i32 5
  store ptr %359, ptr %361, align 8, !tbaa !20
  %362 = load ptr, ptr %16, align 8, !tbaa !5
  call void %362(ptr noundef %41)
  %363 = getelementptr inbounds %struct.libxsmm_gemm_param, ptr %41, i32 0, i32 1
  %364 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %363, i32 0, i32 5
  %365 = load ptr, ptr %364, align 8, !tbaa !18
  %366 = getelementptr inbounds %struct.libxsmm_gemm_param, ptr %41, i32 0, i32 1
  %367 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %366, i32 0, i32 0
  store ptr %365, ptr %367, align 8, !tbaa !12
  %368 = getelementptr inbounds %struct.libxsmm_gemm_param, ptr %41, i32 0, i32 2
  %369 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %368, i32 0, i32 5
  %370 = load ptr, ptr %369, align 8, !tbaa !19
  %371 = getelementptr inbounds %struct.libxsmm_gemm_param, ptr %41, i32 0, i32 2
  %372 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %371, i32 0, i32 0
  store ptr %370, ptr %372, align 8, !tbaa !16
  %373 = getelementptr inbounds %struct.libxsmm_gemm_param, ptr %41, i32 0, i32 3
  %374 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %373, i32 0, i32 5
  %375 = load ptr, ptr %374, align 8, !tbaa !20
  %376 = getelementptr inbounds %struct.libxsmm_gemm_param, ptr %41, i32 0, i32 3
  %377 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %376, i32 0, i32 0
  store ptr %375, ptr %377, align 8, !tbaa !17
  br label %378

378:                                              ; preds = %334, %331, %328, %322
  br label %379

379:                                              ; preds = %378
  %380 = load i32, ptr %18, align 4, !tbaa !9
  %381 = load i32, ptr %43, align 4, !tbaa !9
  %382 = add nsw i32 %381, %380
  store i32 %382, ptr %43, align 4, !tbaa !9
  br label %279, !llvm.loop !21

383:                                              ; preds = %279
  br label %384

384:                                              ; preds = %383, %245, %242, %236
  %385 = load i32, ptr %44, align 4, !tbaa !9
  %386 = icmp sle i32 0, %385
  br i1 %386, label %387, label %414

387:                                              ; preds = %384
  %388 = load i32, ptr %45, align 4, !tbaa !9
  %389 = icmp sle i32 0, %388
  br i1 %389, label %390, label %414

390:                                              ; preds = %387
  %391 = load i32, ptr %46, align 4, !tbaa !9
  %392 = icmp sle i32 0, %391
  br i1 %392, label %393, label %414

393:                                              ; preds = %390
  %394 = load i32, ptr %37, align 4, !tbaa !9
  %395 = load i32, ptr %32, align 4, !tbaa !9
  %396 = icmp eq i32 %394, %395
  br i1 %396, label %397, label %414

397:                                              ; preds = %393
  %398 = getelementptr inbounds %struct.libxsmm_gemm_param, ptr %41, i32 0, i32 1
  %399 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %398, i32 0, i32 0
  %400 = load ptr, ptr %399, align 8, !tbaa !12
  %401 = getelementptr inbounds %struct.libxsmm_gemm_param, ptr %41, i32 0, i32 1
  %402 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %401, i32 0, i32 5
  store ptr %400, ptr %402, align 8, !tbaa !18
  %403 = getelementptr inbounds %struct.libxsmm_gemm_param, ptr %41, i32 0, i32 2
  %404 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %403, i32 0, i32 0
  %405 = load ptr, ptr %404, align 8, !tbaa !16
  %406 = getelementptr inbounds %struct.libxsmm_gemm_param, ptr %41, i32 0, i32 2
  %407 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %406, i32 0, i32 5
  store ptr %405, ptr %407, align 8, !tbaa !19
  %408 = getelementptr inbounds %struct.libxsmm_gemm_param, ptr %41, i32 0, i32 3
  %409 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %408, i32 0, i32 0
  %410 = load ptr, ptr %409, align 8, !tbaa !17
  %411 = getelementptr inbounds %struct.libxsmm_gemm_param, ptr %41, i32 0, i32 3
  %412 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %411, i32 0, i32 5
  store ptr %410, ptr %412, align 8, !tbaa !20
  %413 = load ptr, ptr %16, align 8, !tbaa !5
  call void %413(ptr noundef %41)
  br label %414

414:                                              ; preds = %397, %393, %390, %387, %384
  call void @llvm.lifetime.end.p0(i64 4, ptr %46) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %45) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #4
  br label %774

415:                                              ; preds = %194
  call void @llvm.lifetime.start.p0(i64 8, ptr %47) #4
  store ptr null, ptr %47, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %48) #4
  store ptr null, ptr %48, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %49) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %50) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %51) #4
  %416 = load ptr, ptr %19, align 8, !tbaa !5
  %417 = icmp ne ptr null, %416
  br i1 %417, label %418, label %424

418:                                              ; preds = %415
  %419 = load ptr, ptr %19, align 8, !tbaa !5
  %420 = load i32, ptr %43, align 4, !tbaa !9
  %421 = sext i32 %420 to i64
  %422 = getelementptr inbounds i8, ptr %419, i64 %421
  %423 = load i32, ptr %422, align 4, !tbaa !9
  br label %426

424:                                              ; preds = %415
  %425 = load i32, ptr %17, align 4, !tbaa !9
  br label %426

426:                                              ; preds = %424, %418
  %427 = phi i32 [ %423, %418 ], [ %425, %424 ]
  %428 = load i32, ptr %17, align 4, !tbaa !9
  %429 = sub nsw i32 %427, %428
  store i32 %429, ptr %49, align 4, !tbaa !9
  %430 = load ptr, ptr %20, align 8, !tbaa !5
  %431 = icmp ne ptr null, %430
  br i1 %431, label %432, label %438

432:                                              ; preds = %426
  %433 = load ptr, ptr %20, align 8, !tbaa !5
  %434 = load i32, ptr %43, align 4, !tbaa !9
  %435 = sext i32 %434 to i64
  %436 = getelementptr inbounds i8, ptr %433, i64 %435
  %437 = load i32, ptr %436, align 4, !tbaa !9
  br label %440

438:                                              ; preds = %426
  %439 = load i32, ptr %17, align 4, !tbaa !9
  br label %440

440:                                              ; preds = %438, %432
  %441 = phi i32 [ %437, %432 ], [ %439, %438 ]
  %442 = load i32, ptr %17, align 4, !tbaa !9
  %443 = sub nsw i32 %441, %442
  store i32 %443, ptr %50, align 4, !tbaa !9
  %444 = load ptr, ptr %21, align 8, !tbaa !5
  %445 = icmp ne ptr null, %444
  br i1 %445, label %446, label %452

446:                                              ; preds = %440
  %447 = load ptr, ptr %21, align 8, !tbaa !5
  %448 = load i32, ptr %43, align 4, !tbaa !9
  %449 = sext i32 %448 to i64
  %450 = getelementptr inbounds i8, ptr %447, i64 %449
  %451 = load i32, ptr %450, align 4, !tbaa !9
  br label %454

452:                                              ; preds = %440
  %453 = load i32, ptr %17, align 4, !tbaa !9
  br label %454

454:                                              ; preds = %452, %446
  %455 = phi i32 [ %451, %446 ], [ %453, %452 ]
  %456 = load i32, ptr %17, align 4, !tbaa !9
  %457 = sub nsw i32 %455, %456
  store i32 %457, ptr %51, align 4, !tbaa !9
  %458 = load i32, ptr %49, align 4, !tbaa !9
  %459 = icmp sle i32 0, %458
  br i1 %459, label %460, label %684

460:                                              ; preds = %454
  %461 = load i32, ptr %50, align 4, !tbaa !9
  %462 = icmp sle i32 0, %461
  br i1 %462, label %463, label %684

463:                                              ; preds = %460
  %464 = load i32, ptr %51, align 4, !tbaa !9
  %465 = icmp sle i32 0, %464
  br i1 %465, label %466, label %684

466:                                              ; preds = %463
  %467 = load ptr, ptr %38, align 8, !tbaa !5
  %468 = load i32, ptr %49, align 4, !tbaa !9
  %469 = load i8, ptr %28, align 1, !tbaa !11
  %470 = zext i8 %469 to i32
  %471 = mul nsw i32 %468, %470
  %472 = sext i32 %471 to i64
  %473 = getelementptr inbounds i8, ptr %467, i64 %472
  %474 = getelementptr inbounds %struct.libxsmm_gemm_param, ptr %41, i32 0, i32 1
  %475 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %474, i32 0, i32 0
  store ptr %473, ptr %475, align 8, !tbaa !12
  %476 = load ptr, ptr %39, align 8, !tbaa !5
  %477 = load i32, ptr %50, align 4, !tbaa !9
  %478 = load i8, ptr %28, align 1, !tbaa !11
  %479 = zext i8 %478 to i32
  %480 = mul nsw i32 %477, %479
  %481 = sext i32 %480 to i64
  %482 = getelementptr inbounds i8, ptr %476, i64 %481
  %483 = getelementptr inbounds %struct.libxsmm_gemm_param, ptr %41, i32 0, i32 2
  %484 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %483, i32 0, i32 0
  store ptr %482, ptr %484, align 8, !tbaa !16
  %485 = load ptr, ptr %40, align 8, !tbaa !5
  %486 = load i32, ptr %51, align 4, !tbaa !9
  %487 = load i8, ptr %29, align 1, !tbaa !11
  %488 = zext i8 %487 to i32
  %489 = mul nsw i32 %486, %488
  %490 = sext i32 %489 to i64
  %491 = getelementptr inbounds i8, ptr %485, i64 %490
  %492 = getelementptr inbounds %struct.libxsmm_gemm_param, ptr %41, i32 0, i32 3
  %493 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %492, i32 0, i32 0
  store ptr %491, ptr %493, align 8, !tbaa !17
  %494 = call i32 (i32, ptr, ...) @libxsmm_crc32_u32(i32 noundef 2507, ptr noundef %51)
  %495 = load i32, ptr @internal_gemm_nlocks, align 64, !tbaa !9
  %496 = sub i32 %495, 1
  %497 = and i32 %494, %496
  %498 = zext i32 %497 to i64
  %499 = getelementptr inbounds [1024 x %union.internal_gemm_locktype], ptr @internal_gemm_lock, i64 0, i64 %498
  store ptr %499, ptr %47, align 8, !tbaa !5
  %500 = load i32, ptr %18, align 4, !tbaa !9
  %501 = load i32, ptr %43, align 4, !tbaa !9
  %502 = add nsw i32 %501, %500
  store i32 %502, ptr %43, align 4, !tbaa !9
  br label %503

503:                                              ; preds = %679, %466
  %504 = load i32, ptr %43, align 4, !tbaa !9
  %505 = load i32, ptr %42, align 4, !tbaa !9
  %506 = icmp sle i32 %504, %505
  br i1 %506, label %507, label %683

507:                                              ; preds = %503
  %508 = load ptr, ptr %19, align 8, !tbaa !5
  %509 = icmp ne ptr null, %508
  br i1 %509, label %510, label %516

510:                                              ; preds = %507
  %511 = load ptr, ptr %19, align 8, !tbaa !5
  %512 = load i32, ptr %43, align 4, !tbaa !9
  %513 = sext i32 %512 to i64
  %514 = getelementptr inbounds i8, ptr %511, i64 %513
  %515 = load i32, ptr %514, align 4, !tbaa !9
  br label %518

516:                                              ; preds = %507
  %517 = load i32, ptr %17, align 4, !tbaa !9
  br label %518

518:                                              ; preds = %516, %510
  %519 = phi i32 [ %515, %510 ], [ %517, %516 ]
  %520 = load i32, ptr %17, align 4, !tbaa !9
  %521 = sub nsw i32 %519, %520
  store i32 %521, ptr %49, align 4, !tbaa !9
  %522 = load ptr, ptr %20, align 8, !tbaa !5
  %523 = icmp ne ptr null, %522
  br i1 %523, label %524, label %530

524:                                              ; preds = %518
  %525 = load ptr, ptr %20, align 8, !tbaa !5
  %526 = load i32, ptr %43, align 4, !tbaa !9
  %527 = sext i32 %526 to i64
  %528 = getelementptr inbounds i8, ptr %525, i64 %527
  %529 = load i32, ptr %528, align 4, !tbaa !9
  br label %532

530:                                              ; preds = %518
  %531 = load i32, ptr %17, align 4, !tbaa !9
  br label %532

532:                                              ; preds = %530, %524
  %533 = phi i32 [ %529, %524 ], [ %531, %530 ]
  %534 = load i32, ptr %17, align 4, !tbaa !9
  %535 = sub nsw i32 %533, %534
  store i32 %535, ptr %50, align 4, !tbaa !9
  %536 = load ptr, ptr %21, align 8, !tbaa !5
  %537 = icmp ne ptr null, %536
  br i1 %537, label %538, label %544

538:                                              ; preds = %532
  %539 = load ptr, ptr %21, align 8, !tbaa !5
  %540 = load i32, ptr %43, align 4, !tbaa !9
  %541 = sext i32 %540 to i64
  %542 = getelementptr inbounds i8, ptr %539, i64 %541
  %543 = load i32, ptr %542, align 4, !tbaa !9
  br label %546

544:                                              ; preds = %532
  %545 = load i32, ptr %17, align 4, !tbaa !9
  br label %546

546:                                              ; preds = %544, %538
  %547 = phi i32 [ %543, %538 ], [ %545, %544 ]
  %548 = load i32, ptr %17, align 4, !tbaa !9
  %549 = sub nsw i32 %547, %548
  store i32 %549, ptr %51, align 4, !tbaa !9
  %550 = load i32, ptr %49, align 4, !tbaa !9
  %551 = icmp sle i32 0, %550
  br i1 %551, label %552, label %678

552:                                              ; preds = %546
  %553 = load i32, ptr %50, align 4, !tbaa !9
  %554 = icmp sle i32 0, %553
  br i1 %554, label %555, label %678

555:                                              ; preds = %552
  %556 = load i32, ptr %51, align 4, !tbaa !9
  %557 = icmp sle i32 0, %556
  br i1 %557, label %558, label %678

558:                                              ; preds = %555
  call void @llvm.lifetime.start.p0(i64 8, ptr %52) #4
  %559 = call i32 (i32, ptr, ...) @libxsmm_crc32_u32(i32 noundef 2507, ptr noundef %51)
  %560 = load i32, ptr @internal_gemm_nlocks, align 64, !tbaa !9
  %561 = sub i32 %560, 1
  %562 = and i32 %559, %561
  %563 = zext i32 %562 to i64
  %564 = getelementptr inbounds [1024 x %union.internal_gemm_locktype], ptr @internal_gemm_lock, i64 0, i64 %563
  store ptr %564, ptr %52, align 8, !tbaa !5
  %565 = load ptr, ptr %38, align 8, !tbaa !5
  %566 = load i32, ptr %49, align 4, !tbaa !9
  %567 = load i8, ptr %28, align 1, !tbaa !11
  %568 = zext i8 %567 to i32
  %569 = mul nsw i32 %566, %568
  %570 = sext i32 %569 to i64
  %571 = getelementptr inbounds i8, ptr %565, i64 %570
  %572 = getelementptr inbounds %struct.libxsmm_gemm_param, ptr %41, i32 0, i32 1
  %573 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %572, i32 0, i32 5
  store ptr %571, ptr %573, align 8, !tbaa !18
  %574 = load ptr, ptr %39, align 8, !tbaa !5
  %575 = load i32, ptr %50, align 4, !tbaa !9
  %576 = load i8, ptr %28, align 1, !tbaa !11
  %577 = zext i8 %576 to i32
  %578 = mul nsw i32 %575, %577
  %579 = sext i32 %578 to i64
  %580 = getelementptr inbounds i8, ptr %574, i64 %579
  %581 = getelementptr inbounds %struct.libxsmm_gemm_param, ptr %41, i32 0, i32 2
  %582 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %581, i32 0, i32 5
  store ptr %580, ptr %582, align 8, !tbaa !19
  %583 = load ptr, ptr %40, align 8, !tbaa !5
  %584 = load i32, ptr %51, align 4, !tbaa !9
  %585 = load i8, ptr %29, align 1, !tbaa !11
  %586 = zext i8 %585 to i32
  %587 = mul nsw i32 %584, %586
  %588 = sext i32 %587 to i64
  %589 = getelementptr inbounds i8, ptr %583, i64 %588
  %590 = getelementptr inbounds %struct.libxsmm_gemm_param, ptr %41, i32 0, i32 3
  %591 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %590, i32 0, i32 5
  store ptr %589, ptr %591, align 8, !tbaa !20
  %592 = load ptr, ptr %47, align 8, !tbaa !5
  %593 = load ptr, ptr %48, align 8, !tbaa !5
  %594 = icmp ne ptr %592, %593
  br i1 %594, label %595, label %644

595:                                              ; preds = %558
  %596 = load ptr, ptr %47, align 8, !tbaa !5
  store ptr %596, ptr %48, align 8, !tbaa !5
  %597 = load ptr, ptr %47, align 8, !tbaa !5
  %598 = ptrtoint ptr %597 to i64
  %599 = and i64 %598, 3
  %600 = icmp eq i64 0, %599
  br i1 %600, label %601, label %602

601:                                              ; preds = %595
  br label %603

602:                                              ; preds = %595
  call void @__assert_fail(ptr noundef @.str.14, ptr noundef @.str.1, i32 noundef 772, ptr noundef @__PRETTY_FUNCTION__.libxsmm_gemm_batch_kernel) #6
  unreachable

603:                                              ; preds = %601
  br label %604

604:                                              ; preds = %636, %603
  %605 = load ptr, ptr %47, align 8, !tbaa !5
  %606 = atomicrmw or ptr %605, i32 1 seq_cst, align 4
  %607 = icmp eq i32 0, %606
  %608 = xor i1 %607, true
  br i1 %608, label %609, label %637

609:                                              ; preds = %604
  br label %610

610:                                              ; preds = %609
  call void @llvm.lifetime.start.p0(i64 4, ptr %53) #4
  store i32 1, ptr %53, align 4, !tbaa !9
  br label %611

611:                                              ; preds = %629, %610
  call void @llvm.lifetime.start.p0(i64 4, ptr %54) #4
  store i32 0, ptr %54, align 4, !tbaa !9
  br label %612

612:                                              ; preds = %617, %611
  %613 = load i32, ptr %54, align 4, !tbaa !9
  %614 = load i32, ptr %53, align 4, !tbaa !9
  %615 = icmp slt i32 %613, %614
  br i1 %615, label %616, label %620

616:                                              ; preds = %612
  call void @llvm.x86.sse2.pause()
  br label %617

617:                                              ; preds = %616
  %618 = load i32, ptr %54, align 4, !tbaa !9
  %619 = add nsw i32 %618, 1
  store i32 %619, ptr %54, align 4, !tbaa !9
  br label %612, !llvm.loop !23

620:                                              ; preds = %612
  %621 = load i32, ptr %53, align 4, !tbaa !9
  %622 = icmp slt i32 %621, 4096
  br i1 %622, label %623, label %626

623:                                              ; preds = %620
  %624 = load i32, ptr %53, align 4, !tbaa !9
  %625 = mul nsw i32 %624, 2
  store i32 %625, ptr %53, align 4, !tbaa !9
  br label %628

626:                                              ; preds = %620
  store i32 4096, ptr %53, align 4, !tbaa !9
  %627 = call i32 @sched_yield() #4
  br label %628

628:                                              ; preds = %626, %623
  call void @llvm.lifetime.end.p0(i64 4, ptr %54) #4
  br label %629

629:                                              ; preds = %628
  %630 = load ptr, ptr %47, align 8, !tbaa !5
  %631 = load volatile i32, ptr %630, align 4, !tbaa !9
  %632 = and i32 %631, 1
  %633 = icmp ne i32 0, %632
  br i1 %633, label %611, label %634, !llvm.loop !24

634:                                              ; preds = %629
  call void @llvm.lifetime.end.p0(i64 4, ptr %53) #4
  br label %635

635:                                              ; preds = %634
  br label %636

636:                                              ; preds = %635
  br label %604, !llvm.loop !25

637:                                              ; preds = %604
  %638 = load ptr, ptr %47, align 8, !tbaa !5
  %639 = load volatile i32, ptr %638, align 4, !tbaa !9
  %640 = icmp ne i32 0, %639
  br i1 %640, label %641, label %642

641:                                              ; preds = %637
  br label %643

642:                                              ; preds = %637
  call void @__assert_fail(ptr noundef @.str.15, ptr noundef @.str.1, i32 noundef 772, ptr noundef @__PRETTY_FUNCTION__.libxsmm_gemm_batch_kernel) #6
  unreachable

643:                                              ; preds = %641
  br label %644

644:                                              ; preds = %643, %558
  %645 = load ptr, ptr %16, align 8, !tbaa !5
  call void %645(ptr noundef %41)
  %646 = load ptr, ptr %47, align 8, !tbaa !5
  %647 = load ptr, ptr %52, align 8, !tbaa !5
  %648 = icmp ne ptr %646, %647
  br i1 %648, label %653, label %649

649:                                              ; preds = %644
  %650 = load i32, ptr %43, align 4, !tbaa !9
  %651 = load i32, ptr %42, align 4, !tbaa !9
  %652 = icmp eq i32 %650, %651
  br i1 %652, label %653, label %662

653:                                              ; preds = %649, %644
  %654 = load ptr, ptr %47, align 8, !tbaa !5
  %655 = load volatile i32, ptr %654, align 4, !tbaa !9
  %656 = icmp ne i32 0, %655
  br i1 %656, label %657, label %658

657:                                              ; preds = %653
  br label %659

658:                                              ; preds = %653
  call void @__assert_fail(ptr noundef @.str.16, ptr noundef @.str.1, i32 noundef 778, ptr noundef @__PRETTY_FUNCTION__.libxsmm_gemm_batch_kernel) #6
  unreachable

659:                                              ; preds = %657
  %660 = load ptr, ptr %47, align 8, !tbaa !5
  store atomic i32 0, ptr %660 release, align 4
  %661 = load ptr, ptr %52, align 8, !tbaa !5
  store ptr %661, ptr %47, align 8, !tbaa !5
  br label %662

662:                                              ; preds = %659, %649
  %663 = getelementptr inbounds %struct.libxsmm_gemm_param, ptr %41, i32 0, i32 1
  %664 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %663, i32 0, i32 5
  %665 = load ptr, ptr %664, align 8, !tbaa !18
  %666 = getelementptr inbounds %struct.libxsmm_gemm_param, ptr %41, i32 0, i32 1
  %667 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %666, i32 0, i32 0
  store ptr %665, ptr %667, align 8, !tbaa !12
  %668 = getelementptr inbounds %struct.libxsmm_gemm_param, ptr %41, i32 0, i32 2
  %669 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %668, i32 0, i32 5
  %670 = load ptr, ptr %669, align 8, !tbaa !19
  %671 = getelementptr inbounds %struct.libxsmm_gemm_param, ptr %41, i32 0, i32 2
  %672 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %671, i32 0, i32 0
  store ptr %670, ptr %672, align 8, !tbaa !16
  %673 = getelementptr inbounds %struct.libxsmm_gemm_param, ptr %41, i32 0, i32 3
  %674 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %673, i32 0, i32 5
  %675 = load ptr, ptr %674, align 8, !tbaa !20
  %676 = getelementptr inbounds %struct.libxsmm_gemm_param, ptr %41, i32 0, i32 3
  %677 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %676, i32 0, i32 0
  store ptr %675, ptr %677, align 8, !tbaa !17
  call void @llvm.lifetime.end.p0(i64 8, ptr %52) #4
  br label %678

678:                                              ; preds = %662, %555, %552, %546
  br label %679

679:                                              ; preds = %678
  %680 = load i32, ptr %18, align 4, !tbaa !9
  %681 = load i32, ptr %43, align 4, !tbaa !9
  %682 = add nsw i32 %681, %680
  store i32 %682, ptr %43, align 4, !tbaa !9
  br label %503, !llvm.loop !26

683:                                              ; preds = %503
  br label %684

684:                                              ; preds = %683, %463, %460, %454
  %685 = load ptr, ptr %47, align 8, !tbaa !5
  %686 = icmp ne ptr null, %685
  br i1 %686, label %687, label %688

687:                                              ; preds = %684
  br label %689

688:                                              ; preds = %684
  call void @__assert_fail(ptr noundef @.str.17, ptr noundef @.str.1, i32 noundef 789, ptr noundef @__PRETTY_FUNCTION__.libxsmm_gemm_batch_kernel) #6
  unreachable

689:                                              ; preds = %687
  %690 = load i32, ptr %49, align 4, !tbaa !9
  %691 = icmp sle i32 0, %690
  br i1 %691, label %692, label %773

692:                                              ; preds = %689
  %693 = load i32, ptr %50, align 4, !tbaa !9
  %694 = icmp sle i32 0, %693
  br i1 %694, label %695, label %773

695:                                              ; preds = %692
  %696 = load i32, ptr %51, align 4, !tbaa !9
  %697 = icmp sle i32 0, %696
  br i1 %697, label %698, label %773

698:                                              ; preds = %695
  %699 = load i32, ptr %37, align 4, !tbaa !9
  %700 = load i32, ptr %32, align 4, !tbaa !9
  %701 = icmp eq i32 %699, %700
  br i1 %701, label %702, label %773

702:                                              ; preds = %698
  %703 = getelementptr inbounds %struct.libxsmm_gemm_param, ptr %41, i32 0, i32 1
  %704 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %703, i32 0, i32 0
  %705 = load ptr, ptr %704, align 8, !tbaa !12
  %706 = getelementptr inbounds %struct.libxsmm_gemm_param, ptr %41, i32 0, i32 1
  %707 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %706, i32 0, i32 5
  store ptr %705, ptr %707, align 8, !tbaa !18
  %708 = getelementptr inbounds %struct.libxsmm_gemm_param, ptr %41, i32 0, i32 2
  %709 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %708, i32 0, i32 0
  %710 = load ptr, ptr %709, align 8, !tbaa !16
  %711 = getelementptr inbounds %struct.libxsmm_gemm_param, ptr %41, i32 0, i32 2
  %712 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %711, i32 0, i32 5
  store ptr %710, ptr %712, align 8, !tbaa !19
  %713 = getelementptr inbounds %struct.libxsmm_gemm_param, ptr %41, i32 0, i32 3
  %714 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %713, i32 0, i32 0
  %715 = load ptr, ptr %714, align 8, !tbaa !17
  %716 = getelementptr inbounds %struct.libxsmm_gemm_param, ptr %41, i32 0, i32 3
  %717 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %716, i32 0, i32 5
  store ptr %715, ptr %717, align 8, !tbaa !20
  %718 = load ptr, ptr %47, align 8, !tbaa !5
  %719 = ptrtoint ptr %718 to i64
  %720 = and i64 %719, 3
  %721 = icmp eq i64 0, %720
  br i1 %721, label %722, label %723

722:                                              ; preds = %702
  br label %724

723:                                              ; preds = %702
  call void @__assert_fail(ptr noundef @.str.14, ptr noundef @.str.1, i32 noundef 799, ptr noundef @__PRETTY_FUNCTION__.libxsmm_gemm_batch_kernel) #6
  unreachable

724:                                              ; preds = %722
  br label %725

725:                                              ; preds = %757, %724
  %726 = load ptr, ptr %47, align 8, !tbaa !5
  %727 = atomicrmw or ptr %726, i32 1 seq_cst, align 4
  %728 = icmp eq i32 0, %727
  %729 = xor i1 %728, true
  br i1 %729, label %730, label %758

730:                                              ; preds = %725
  br label %731

731:                                              ; preds = %730
  call void @llvm.lifetime.start.p0(i64 4, ptr %55) #4
  store i32 1, ptr %55, align 4, !tbaa !9
  br label %732

732:                                              ; preds = %750, %731
  call void @llvm.lifetime.start.p0(i64 4, ptr %56) #4
  store i32 0, ptr %56, align 4, !tbaa !9
  br label %733

733:                                              ; preds = %738, %732
  %734 = load i32, ptr %56, align 4, !tbaa !9
  %735 = load i32, ptr %55, align 4, !tbaa !9
  %736 = icmp slt i32 %734, %735
  br i1 %736, label %737, label %741

737:                                              ; preds = %733
  call void @llvm.x86.sse2.pause()
  br label %738

738:                                              ; preds = %737
  %739 = load i32, ptr %56, align 4, !tbaa !9
  %740 = add nsw i32 %739, 1
  store i32 %740, ptr %56, align 4, !tbaa !9
  br label %733, !llvm.loop !27

741:                                              ; preds = %733
  %742 = load i32, ptr %55, align 4, !tbaa !9
  %743 = icmp slt i32 %742, 4096
  br i1 %743, label %744, label %747

744:                                              ; preds = %741
  %745 = load i32, ptr %55, align 4, !tbaa !9
  %746 = mul nsw i32 %745, 2
  store i32 %746, ptr %55, align 4, !tbaa !9
  br label %749

747:                                              ; preds = %741
  store i32 4096, ptr %55, align 4, !tbaa !9
  %748 = call i32 @sched_yield() #4
  br label %749

749:                                              ; preds = %747, %744
  call void @llvm.lifetime.end.p0(i64 4, ptr %56) #4
  br label %750

750:                                              ; preds = %749
  %751 = load ptr, ptr %47, align 8, !tbaa !5
  %752 = load volatile i32, ptr %751, align 4, !tbaa !9
  %753 = and i32 %752, 1
  %754 = icmp ne i32 0, %753
  br i1 %754, label %732, label %755, !llvm.loop !28

755:                                              ; preds = %750
  call void @llvm.lifetime.end.p0(i64 4, ptr %55) #4
  br label %756

756:                                              ; preds = %755
  br label %757

757:                                              ; preds = %756
  br label %725, !llvm.loop !29

758:                                              ; preds = %725
  %759 = load ptr, ptr %47, align 8, !tbaa !5
  %760 = load volatile i32, ptr %759, align 4, !tbaa !9
  %761 = icmp ne i32 0, %760
  br i1 %761, label %762, label %763

762:                                              ; preds = %758
  br label %764

763:                                              ; preds = %758
  call void @__assert_fail(ptr noundef @.str.15, ptr noundef @.str.1, i32 noundef 799, ptr noundef @__PRETTY_FUNCTION__.libxsmm_gemm_batch_kernel) #6
  unreachable

764:                                              ; preds = %762
  %765 = load ptr, ptr %16, align 8, !tbaa !5
  call void %765(ptr noundef %41)
  %766 = load ptr, ptr %47, align 8, !tbaa !5
  %767 = load volatile i32, ptr %766, align 4, !tbaa !9
  %768 = icmp ne i32 0, %767
  br i1 %768, label %769, label %770

769:                                              ; preds = %764
  br label %771

770:                                              ; preds = %764
  call void @__assert_fail(ptr noundef @.str.16, ptr noundef @.str.1, i32 noundef 801, ptr noundef @__PRETTY_FUNCTION__.libxsmm_gemm_batch_kernel) #6
  unreachable

771:                                              ; preds = %769
  %772 = load ptr, ptr %47, align 8, !tbaa !5
  store atomic i32 0, ptr %772 release, align 4
  br label %773

773:                                              ; preds = %771, %698, %695, %692, %689
  call void @llvm.lifetime.end.p0(i64 4, ptr %51) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %50) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %49) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #4
  br label %774

774:                                              ; preds = %773, %414
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #4
  br label %1371

775:                                              ; preds = %170
  %776 = load i32, ptr %18, align 4, !tbaa !9
  %777 = icmp eq i32 0, %776
  br i1 %777, label %778, label %1219

778:                                              ; preds = %775
  call void @llvm.lifetime.start.p0(i64 4, ptr %57) #4
  store i32 8, ptr %57, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %58) #4
  %779 = load ptr, ptr %19, align 8, !tbaa !5
  %780 = icmp ne ptr null, %779
  br i1 %780, label %781, label %784

781:                                              ; preds = %778
  %782 = load ptr, ptr %19, align 8, !tbaa !5
  %783 = load i32, ptr %782, align 4, !tbaa !9
  br label %785

784:                                              ; preds = %778
  br label %785

785:                                              ; preds = %784, %781
  %786 = phi i32 [ %783, %781 ], [ 8, %784 ]
  %787 = load i32, ptr %17, align 4, !tbaa !9
  %788 = mul nsw i32 %787, 8
  %789 = sub nsw i32 %786, %788
  store i32 %789, ptr %58, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %59) #4
  %790 = load ptr, ptr %20, align 8, !tbaa !5
  %791 = icmp ne ptr null, %790
  br i1 %791, label %792, label %795

792:                                              ; preds = %785
  %793 = load ptr, ptr %20, align 8, !tbaa !5
  %794 = load i32, ptr %793, align 4, !tbaa !9
  br label %796

795:                                              ; preds = %785
  br label %796

796:                                              ; preds = %795, %792
  %797 = phi i32 [ %794, %792 ], [ 8, %795 ]
  %798 = load i32, ptr %17, align 4, !tbaa !9
  %799 = mul nsw i32 %798, 8
  %800 = sub nsw i32 %797, %799
  store i32 %800, ptr %59, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %60) #4
  %801 = load ptr, ptr %21, align 8, !tbaa !5
  %802 = icmp ne ptr null, %801
  br i1 %802, label %803, label %806

803:                                              ; preds = %796
  %804 = load ptr, ptr %21, align 8, !tbaa !5
  %805 = load i32, ptr %804, align 4, !tbaa !9
  br label %807

806:                                              ; preds = %796
  br label %807

807:                                              ; preds = %806, %803
  %808 = phi i32 [ %805, %803 ], [ 8, %806 ]
  %809 = load i32, ptr %17, align 4, !tbaa !9
  %810 = mul nsw i32 %809, 8
  %811 = sub nsw i32 %808, %810
  store i32 %811, ptr %60, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %61) #4
  %812 = load ptr, ptr %38, align 8, !tbaa !5
  %813 = load i32, ptr %35, align 4, !tbaa !9
  %814 = load i32, ptr %58, align 4, !tbaa !9
  %815 = mul nsw i32 %813, %814
  %816 = sext i32 %815 to i64
  %817 = getelementptr inbounds i8, ptr %812, i64 %816
  store ptr %817, ptr %61, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %62) #4
  %818 = load ptr, ptr %39, align 8, !tbaa !5
  %819 = load i32, ptr %35, align 4, !tbaa !9
  %820 = load i32, ptr %59, align 4, !tbaa !9
  %821 = mul nsw i32 %819, %820
  %822 = sext i32 %821 to i64
  %823 = getelementptr inbounds i8, ptr %818, i64 %822
  store ptr %823, ptr %62, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %63) #4
  %824 = load ptr, ptr %40, align 8, !tbaa !5
  %825 = load i32, ptr %35, align 4, !tbaa !9
  %826 = load i32, ptr %60, align 4, !tbaa !9
  %827 = mul nsw i32 %825, %826
  %828 = sext i32 %827 to i64
  %829 = getelementptr inbounds i8, ptr %824, i64 %828
  store ptr %829, ptr %63, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %64) #4
  %830 = load i32, ptr %37, align 4, !tbaa !9
  %831 = load i32, ptr %32, align 4, !tbaa !9
  %832 = icmp ne i32 %830, %831
  br i1 %832, label %833, label %835

833:                                              ; preds = %807
  %834 = load i32, ptr %37, align 4, !tbaa !9
  br label %838

835:                                              ; preds = %807
  %836 = load i32, ptr %37, align 4, !tbaa !9
  %837 = sub nsw i32 %836, 1
  br label %838

838:                                              ; preds = %835, %833
  %839 = phi i32 [ %834, %833 ], [ %837, %835 ]
  store i32 %839, ptr %64, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %65) #4
  %840 = load ptr, ptr %61, align 8, !tbaa !5
  %841 = load ptr, ptr %840, align 8, !tbaa !5
  %842 = getelementptr inbounds %struct.libxsmm_gemm_param, ptr %41, i32 0, i32 1
  %843 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %842, i32 0, i32 0
  store ptr %841, ptr %843, align 8, !tbaa !12
  %844 = load ptr, ptr %62, align 8, !tbaa !5
  %845 = load ptr, ptr %844, align 8, !tbaa !5
  %846 = getelementptr inbounds %struct.libxsmm_gemm_param, ptr %41, i32 0, i32 2
  %847 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %846, i32 0, i32 0
  store ptr %845, ptr %847, align 8, !tbaa !16
  %848 = load ptr, ptr %63, align 8, !tbaa !5
  %849 = load ptr, ptr %848, align 8, !tbaa !5
  %850 = getelementptr inbounds %struct.libxsmm_gemm_param, ptr %41, i32 0, i32 3
  %851 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %850, i32 0, i32 0
  store ptr %849, ptr %851, align 8, !tbaa !17
  %852 = load i32, ptr %33, align 4, !tbaa !9
  %853 = icmp eq i32 1, %852
  br i1 %853, label %860, label %854

854:                                              ; preds = %838
  %855 = load i32, ptr @internal_gemm_nlocks, align 64, !tbaa !9
  %856 = icmp eq i32 0, %855
  br i1 %856, label %860, label %857

857:                                              ; preds = %854
  %858 = load i32, ptr %25, align 4, !tbaa !9
  %859 = icmp sgt i32 0, %858
  br i1 %859, label %860, label %966

860:                                              ; preds = %857, %854, %838
  %861 = load i32, ptr %35, align 4, !tbaa !9
  store i32 %861, ptr %65, align 4, !tbaa !9
  br label %862

862:                                              ; preds = %926, %860
  %863 = load i32, ptr %65, align 4, !tbaa !9
  %864 = load i32, ptr %64, align 4, !tbaa !9
  %865 = icmp slt i32 %863, %864
  br i1 %865, label %866, label %929

866:                                              ; preds = %862
  call void @llvm.lifetime.start.p0(i64 8, ptr %66) #4
  %867 = load ptr, ptr %61, align 8, !tbaa !5
  %868 = load i32, ptr %58, align 4, !tbaa !9
  %869 = sext i32 %868 to i64
  %870 = getelementptr inbounds i8, ptr %867, i64 %869
  store ptr %870, ptr %66, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %67) #4
  %871 = load ptr, ptr %62, align 8, !tbaa !5
  %872 = load i32, ptr %59, align 4, !tbaa !9
  %873 = sext i32 %872 to i64
  %874 = getelementptr inbounds i8, ptr %871, i64 %873
  store ptr %874, ptr %67, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %68) #4
  %875 = load ptr, ptr %63, align 8, !tbaa !5
  %876 = load i32, ptr %60, align 4, !tbaa !9
  %877 = sext i32 %876 to i64
  %878 = getelementptr inbounds i8, ptr %875, i64 %877
  store ptr %878, ptr %68, align 8, !tbaa !5
  %879 = load ptr, ptr %66, align 8, !tbaa !5
  %880 = load ptr, ptr %879, align 8, !tbaa !5
  %881 = getelementptr inbounds %struct.libxsmm_gemm_param, ptr %41, i32 0, i32 1
  %882 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %881, i32 0, i32 5
  store ptr %880, ptr %882, align 8, !tbaa !18
  %883 = load ptr, ptr %67, align 8, !tbaa !5
  %884 = load ptr, ptr %883, align 8, !tbaa !5
  %885 = getelementptr inbounds %struct.libxsmm_gemm_param, ptr %41, i32 0, i32 2
  %886 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %885, i32 0, i32 5
  store ptr %884, ptr %886, align 8, !tbaa !19
  %887 = load ptr, ptr %68, align 8, !tbaa !5
  %888 = load ptr, ptr %887, align 8, !tbaa !5
  %889 = getelementptr inbounds %struct.libxsmm_gemm_param, ptr %41, i32 0, i32 3
  %890 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %889, i32 0, i32 5
  store ptr %888, ptr %890, align 8, !tbaa !20
  %891 = getelementptr inbounds %struct.libxsmm_gemm_param, ptr %41, i32 0, i32 1
  %892 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %891, i32 0, i32 0
  %893 = load ptr, ptr %892, align 8, !tbaa !12
  %894 = icmp ne ptr null, %893
  br i1 %894, label %895, label %907

895:                                              ; preds = %866
  %896 = getelementptr inbounds %struct.libxsmm_gemm_param, ptr %41, i32 0, i32 2
  %897 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %896, i32 0, i32 0
  %898 = load ptr, ptr %897, align 8, !tbaa !16
  %899 = icmp ne ptr null, %898
  br i1 %899, label %900, label %907

900:                                              ; preds = %895
  %901 = getelementptr inbounds %struct.libxsmm_gemm_param, ptr %41, i32 0, i32 3
  %902 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %901, i32 0, i32 0
  %903 = load ptr, ptr %902, align 8, !tbaa !17
  %904 = icmp ne ptr null, %903
  br i1 %904, label %905, label %907

905:                                              ; preds = %900
  %906 = load ptr, ptr %16, align 8, !tbaa !5
  call void %906(ptr noundef %41)
  br label %907

907:                                              ; preds = %905, %900, %895, %866
  %908 = getelementptr inbounds %struct.libxsmm_gemm_param, ptr %41, i32 0, i32 1
  %909 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %908, i32 0, i32 5
  %910 = load ptr, ptr %909, align 8, !tbaa !18
  %911 = getelementptr inbounds %struct.libxsmm_gemm_param, ptr %41, i32 0, i32 1
  %912 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %911, i32 0, i32 0
  store ptr %910, ptr %912, align 8, !tbaa !12
  %913 = getelementptr inbounds %struct.libxsmm_gemm_param, ptr %41, i32 0, i32 2
  %914 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %913, i32 0, i32 5
  %915 = load ptr, ptr %914, align 8, !tbaa !19
  %916 = getelementptr inbounds %struct.libxsmm_gemm_param, ptr %41, i32 0, i32 2
  %917 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %916, i32 0, i32 0
  store ptr %915, ptr %917, align 8, !tbaa !16
  %918 = getelementptr inbounds %struct.libxsmm_gemm_param, ptr %41, i32 0, i32 3
  %919 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %918, i32 0, i32 5
  %920 = load ptr, ptr %919, align 8, !tbaa !20
  %921 = getelementptr inbounds %struct.libxsmm_gemm_param, ptr %41, i32 0, i32 3
  %922 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %921, i32 0, i32 0
  store ptr %920, ptr %922, align 8, !tbaa !17
  %923 = load ptr, ptr %66, align 8, !tbaa !5
  store ptr %923, ptr %61, align 8, !tbaa !5
  %924 = load ptr, ptr %67, align 8, !tbaa !5
  store ptr %924, ptr %62, align 8, !tbaa !5
  %925 = load ptr, ptr %68, align 8, !tbaa !5
  store ptr %925, ptr %63, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 8, ptr %68) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %67) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %66) #4
  br label %926

926:                                              ; preds = %907
  %927 = load i32, ptr %65, align 4, !tbaa !9
  %928 = add nsw i32 %927, 1
  store i32 %928, ptr %65, align 4, !tbaa !9
  br label %862, !llvm.loop !30

929:                                              ; preds = %862
  %930 = getelementptr inbounds %struct.libxsmm_gemm_param, ptr %41, i32 0, i32 1
  %931 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %930, i32 0, i32 0
  %932 = load ptr, ptr %931, align 8, !tbaa !12
  %933 = icmp ne ptr null, %932
  br i1 %933, label %934, label %965

934:                                              ; preds = %929
  %935 = getelementptr inbounds %struct.libxsmm_gemm_param, ptr %41, i32 0, i32 2
  %936 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %935, i32 0, i32 0
  %937 = load ptr, ptr %936, align 8, !tbaa !16
  %938 = icmp ne ptr null, %937
  br i1 %938, label %939, label %965

939:                                              ; preds = %934
  %940 = getelementptr inbounds %struct.libxsmm_gemm_param, ptr %41, i32 0, i32 3
  %941 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %940, i32 0, i32 0
  %942 = load ptr, ptr %941, align 8, !tbaa !17
  %943 = icmp ne ptr null, %942
  br i1 %943, label %944, label %965

944:                                              ; preds = %939
  %945 = load i32, ptr %37, align 4, !tbaa !9
  %946 = load i32, ptr %32, align 4, !tbaa !9
  %947 = icmp eq i32 %945, %946
  br i1 %947, label %948, label %965

948:                                              ; preds = %944
  %949 = getelementptr inbounds %struct.libxsmm_gemm_param, ptr %41, i32 0, i32 1
  %950 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %949, i32 0, i32 0
  %951 = load ptr, ptr %950, align 8, !tbaa !12
  %952 = getelementptr inbounds %struct.libxsmm_gemm_param, ptr %41, i32 0, i32 1
  %953 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %952, i32 0, i32 5
  store ptr %951, ptr %953, align 8, !tbaa !18
  %954 = getelementptr inbounds %struct.libxsmm_gemm_param, ptr %41, i32 0, i32 2
  %955 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %954, i32 0, i32 0
  %956 = load ptr, ptr %955, align 8, !tbaa !16
  %957 = getelementptr inbounds %struct.libxsmm_gemm_param, ptr %41, i32 0, i32 2
  %958 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %957, i32 0, i32 5
  store ptr %956, ptr %958, align 8, !tbaa !19
  %959 = getelementptr inbounds %struct.libxsmm_gemm_param, ptr %41, i32 0, i32 3
  %960 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %959, i32 0, i32 0
  %961 = load ptr, ptr %960, align 8, !tbaa !17
  %962 = getelementptr inbounds %struct.libxsmm_gemm_param, ptr %41, i32 0, i32 3
  %963 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %962, i32 0, i32 5
  store ptr %961, ptr %963, align 8, !tbaa !20
  %964 = load ptr, ptr %16, align 8, !tbaa !5
  call void %964(ptr noundef %41)
  br label %965

965:                                              ; preds = %948, %944, %939, %934, %929
  br label %1218

966:                                              ; preds = %857
  call void @llvm.lifetime.start.p0(i64 8, ptr %69) #4
  %967 = getelementptr inbounds %struct.libxsmm_gemm_param, ptr %41, i32 0, i32 3
  %968 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %967, i32 0, i32 0
  %969 = call i32 (i32, ptr, ...) @libxsmm_crc32_u64(i32 noundef 1975, ptr noundef %968)
  %970 = load i32, ptr @internal_gemm_nlocks, align 64, !tbaa !9
  %971 = sub i32 %970, 1
  %972 = and i32 %969, %971
  %973 = zext i32 %972 to i64
  %974 = getelementptr inbounds [1024 x %union.internal_gemm_locktype], ptr @internal_gemm_lock, i64 0, i64 %973
  store ptr %974, ptr %69, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %70) #4
  store ptr null, ptr %70, align 8, !tbaa !5
  %975 = load ptr, ptr %69, align 8, !tbaa !5
  %976 = icmp ne ptr null, %975
  br i1 %976, label %977, label %978

977:                                              ; preds = %966
  br label %979

978:                                              ; preds = %966
  call void @__assert_fail(ptr noundef @.str.17, ptr noundef @.str.1, i32 noundef 855, ptr noundef @__PRETTY_FUNCTION__.libxsmm_gemm_batch_kernel) #6
  unreachable

979:                                              ; preds = %977
  %980 = load i32, ptr %35, align 4, !tbaa !9
  %981 = add nsw i32 %980, 1
  store i32 %981, ptr %65, align 4, !tbaa !9
  br label %982

982:                                              ; preds = %1124, %979
  %983 = load i32, ptr %65, align 4, !tbaa !9
  %984 = load i32, ptr %64, align 4, !tbaa !9
  %985 = icmp sle i32 %983, %984
  br i1 %985, label %986, label %1127

986:                                              ; preds = %982
  call void @llvm.lifetime.start.p0(i64 8, ptr %71) #4
  %987 = load ptr, ptr %61, align 8, !tbaa !5
  %988 = load i32, ptr %58, align 4, !tbaa !9
  %989 = sext i32 %988 to i64
  %990 = getelementptr inbounds i8, ptr %987, i64 %989
  store ptr %990, ptr %71, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %72) #4
  %991 = load ptr, ptr %62, align 8, !tbaa !5
  %992 = load i32, ptr %59, align 4, !tbaa !9
  %993 = sext i32 %992 to i64
  %994 = getelementptr inbounds i8, ptr %991, i64 %993
  store ptr %994, ptr %72, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %73) #4
  %995 = load ptr, ptr %63, align 8, !tbaa !5
  %996 = load i32, ptr %60, align 4, !tbaa !9
  %997 = sext i32 %996 to i64
  %998 = getelementptr inbounds i8, ptr %995, i64 %997
  store ptr %998, ptr %73, align 8, !tbaa !5
  %999 = load ptr, ptr %71, align 8, !tbaa !5
  %1000 = load ptr, ptr %999, align 8, !tbaa !5
  %1001 = getelementptr inbounds %struct.libxsmm_gemm_param, ptr %41, i32 0, i32 1
  %1002 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %1001, i32 0, i32 5
  store ptr %1000, ptr %1002, align 8, !tbaa !18
  %1003 = load ptr, ptr %72, align 8, !tbaa !5
  %1004 = load ptr, ptr %1003, align 8, !tbaa !5
  %1005 = getelementptr inbounds %struct.libxsmm_gemm_param, ptr %41, i32 0, i32 2
  %1006 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %1005, i32 0, i32 5
  store ptr %1004, ptr %1006, align 8, !tbaa !19
  %1007 = load ptr, ptr %73, align 8, !tbaa !5
  %1008 = load ptr, ptr %1007, align 8, !tbaa !5
  %1009 = getelementptr inbounds %struct.libxsmm_gemm_param, ptr %41, i32 0, i32 3
  %1010 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %1009, i32 0, i32 5
  store ptr %1008, ptr %1010, align 8, !tbaa !20
  %1011 = getelementptr inbounds %struct.libxsmm_gemm_param, ptr %41, i32 0, i32 1
  %1012 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %1011, i32 0, i32 0
  %1013 = load ptr, ptr %1012, align 8, !tbaa !12
  %1014 = icmp ne ptr null, %1013
  br i1 %1014, label %1015, label %1105

1015:                                             ; preds = %986
  %1016 = getelementptr inbounds %struct.libxsmm_gemm_param, ptr %41, i32 0, i32 2
  %1017 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %1016, i32 0, i32 0
  %1018 = load ptr, ptr %1017, align 8, !tbaa !16
  %1019 = icmp ne ptr null, %1018
  br i1 %1019, label %1020, label %1105

1020:                                             ; preds = %1015
  %1021 = getelementptr inbounds %struct.libxsmm_gemm_param, ptr %41, i32 0, i32 3
  %1022 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %1021, i32 0, i32 0
  %1023 = load ptr, ptr %1022, align 8, !tbaa !17
  %1024 = icmp ne ptr null, %1023
  br i1 %1024, label %1025, label %1105

1025:                                             ; preds = %1020
  call void @llvm.lifetime.start.p0(i64 8, ptr %74) #4
  %1026 = getelementptr inbounds %struct.libxsmm_gemm_param, ptr %41, i32 0, i32 3
  %1027 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %1026, i32 0, i32 5
  %1028 = call i32 (i32, ptr, ...) @libxsmm_crc32_u64(i32 noundef 1975, ptr noundef %1027)
  %1029 = load i32, ptr @internal_gemm_nlocks, align 64, !tbaa !9
  %1030 = sub i32 %1029, 1
  %1031 = and i32 %1028, %1030
  %1032 = zext i32 %1031 to i64
  %1033 = getelementptr inbounds [1024 x %union.internal_gemm_locktype], ptr @internal_gemm_lock, i64 0, i64 %1032
  store ptr %1033, ptr %74, align 8, !tbaa !5
  %1034 = load ptr, ptr %69, align 8, !tbaa !5
  %1035 = load ptr, ptr %70, align 8, !tbaa !5
  %1036 = icmp ne ptr %1034, %1035
  br i1 %1036, label %1037, label %1086

1037:                                             ; preds = %1025
  %1038 = load ptr, ptr %69, align 8, !tbaa !5
  store ptr %1038, ptr %70, align 8, !tbaa !5
  %1039 = load ptr, ptr %69, align 8, !tbaa !5
  %1040 = ptrtoint ptr %1039 to i64
  %1041 = and i64 %1040, 3
  %1042 = icmp eq i64 0, %1041
  br i1 %1042, label %1043, label %1044

1043:                                             ; preds = %1037
  br label %1045

1044:                                             ; preds = %1037
  call void @__assert_fail(ptr noundef @.str.14, ptr noundef @.str.1, i32 noundef 867, ptr noundef @__PRETTY_FUNCTION__.libxsmm_gemm_batch_kernel) #6
  unreachable

1045:                                             ; preds = %1043
  br label %1046

1046:                                             ; preds = %1078, %1045
  %1047 = load ptr, ptr %69, align 8, !tbaa !5
  %1048 = atomicrmw or ptr %1047, i32 1 seq_cst, align 4
  %1049 = icmp eq i32 0, %1048
  %1050 = xor i1 %1049, true
  br i1 %1050, label %1051, label %1079

1051:                                             ; preds = %1046
  br label %1052

1052:                                             ; preds = %1051
  call void @llvm.lifetime.start.p0(i64 4, ptr %75) #4
  store i32 1, ptr %75, align 4, !tbaa !9
  br label %1053

1053:                                             ; preds = %1071, %1052
  call void @llvm.lifetime.start.p0(i64 4, ptr %76) #4
  store i32 0, ptr %76, align 4, !tbaa !9
  br label %1054

1054:                                             ; preds = %1059, %1053
  %1055 = load i32, ptr %76, align 4, !tbaa !9
  %1056 = load i32, ptr %75, align 4, !tbaa !9
  %1057 = icmp slt i32 %1055, %1056
  br i1 %1057, label %1058, label %1062

1058:                                             ; preds = %1054
  call void @llvm.x86.sse2.pause()
  br label %1059

1059:                                             ; preds = %1058
  %1060 = load i32, ptr %76, align 4, !tbaa !9
  %1061 = add nsw i32 %1060, 1
  store i32 %1061, ptr %76, align 4, !tbaa !9
  br label %1054, !llvm.loop !31

1062:                                             ; preds = %1054
  %1063 = load i32, ptr %75, align 4, !tbaa !9
  %1064 = icmp slt i32 %1063, 4096
  br i1 %1064, label %1065, label %1068

1065:                                             ; preds = %1062
  %1066 = load i32, ptr %75, align 4, !tbaa !9
  %1067 = mul nsw i32 %1066, 2
  store i32 %1067, ptr %75, align 4, !tbaa !9
  br label %1070

1068:                                             ; preds = %1062
  store i32 4096, ptr %75, align 4, !tbaa !9
  %1069 = call i32 @sched_yield() #4
  br label %1070

1070:                                             ; preds = %1068, %1065
  call void @llvm.lifetime.end.p0(i64 4, ptr %76) #4
  br label %1071

1071:                                             ; preds = %1070
  %1072 = load ptr, ptr %69, align 8, !tbaa !5
  %1073 = load volatile i32, ptr %1072, align 4, !tbaa !9
  %1074 = and i32 %1073, 1
  %1075 = icmp ne i32 0, %1074
  br i1 %1075, label %1053, label %1076, !llvm.loop !32

1076:                                             ; preds = %1071
  call void @llvm.lifetime.end.p0(i64 4, ptr %75) #4
  br label %1077

1077:                                             ; preds = %1076
  br label %1078

1078:                                             ; preds = %1077
  br label %1046, !llvm.loop !33

1079:                                             ; preds = %1046
  %1080 = load ptr, ptr %69, align 8, !tbaa !5
  %1081 = load volatile i32, ptr %1080, align 4, !tbaa !9
  %1082 = icmp ne i32 0, %1081
  br i1 %1082, label %1083, label %1084

1083:                                             ; preds = %1079
  br label %1085

1084:                                             ; preds = %1079
  call void @__assert_fail(ptr noundef @.str.15, ptr noundef @.str.1, i32 noundef 867, ptr noundef @__PRETTY_FUNCTION__.libxsmm_gemm_batch_kernel) #6
  unreachable

1085:                                             ; preds = %1083
  br label %1086

1086:                                             ; preds = %1085, %1025
  %1087 = load ptr, ptr %16, align 8, !tbaa !5
  call void %1087(ptr noundef %41)
  %1088 = load ptr, ptr %69, align 8, !tbaa !5
  %1089 = load ptr, ptr %74, align 8, !tbaa !5
  %1090 = icmp ne ptr %1088, %1089
  br i1 %1090, label %1095, label %1091

1091:                                             ; preds = %1086
  %1092 = load i32, ptr %65, align 4, !tbaa !9
  %1093 = load i32, ptr %64, align 4, !tbaa !9
  %1094 = icmp eq i32 %1092, %1093
  br i1 %1094, label %1095, label %1104

1095:                                             ; preds = %1091, %1086
  %1096 = load ptr, ptr %69, align 8, !tbaa !5
  %1097 = load volatile i32, ptr %1096, align 4, !tbaa !9
  %1098 = icmp ne i32 0, %1097
  br i1 %1098, label %1099, label %1100

1099:                                             ; preds = %1095
  br label %1101

1100:                                             ; preds = %1095
  call void @__assert_fail(ptr noundef @.str.16, ptr noundef @.str.1, i32 noundef 873, ptr noundef @__PRETTY_FUNCTION__.libxsmm_gemm_batch_kernel) #6
  unreachable

1101:                                             ; preds = %1099
  %1102 = load ptr, ptr %69, align 8, !tbaa !5
  store atomic i32 0, ptr %1102 release, align 4
  %1103 = load ptr, ptr %74, align 8, !tbaa !5
  store ptr %1103, ptr %69, align 8, !tbaa !5
  br label %1104

1104:                                             ; preds = %1101, %1091
  call void @llvm.lifetime.end.p0(i64 8, ptr %74) #4
  br label %1105

1105:                                             ; preds = %1104, %1020, %1015, %986
  %1106 = getelementptr inbounds %struct.libxsmm_gemm_param, ptr %41, i32 0, i32 1
  %1107 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %1106, i32 0, i32 5
  %1108 = load ptr, ptr %1107, align 8, !tbaa !18
  %1109 = getelementptr inbounds %struct.libxsmm_gemm_param, ptr %41, i32 0, i32 1
  %1110 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %1109, i32 0, i32 0
  store ptr %1108, ptr %1110, align 8, !tbaa !12
  %1111 = getelementptr inbounds %struct.libxsmm_gemm_param, ptr %41, i32 0, i32 2
  %1112 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %1111, i32 0, i32 5
  %1113 = load ptr, ptr %1112, align 8, !tbaa !19
  %1114 = getelementptr inbounds %struct.libxsmm_gemm_param, ptr %41, i32 0, i32 2
  %1115 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %1114, i32 0, i32 0
  store ptr %1113, ptr %1115, align 8, !tbaa !16
  %1116 = getelementptr inbounds %struct.libxsmm_gemm_param, ptr %41, i32 0, i32 3
  %1117 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %1116, i32 0, i32 5
  %1118 = load ptr, ptr %1117, align 8, !tbaa !20
  %1119 = getelementptr inbounds %struct.libxsmm_gemm_param, ptr %41, i32 0, i32 3
  %1120 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %1119, i32 0, i32 0
  store ptr %1118, ptr %1120, align 8, !tbaa !17
  %1121 = load ptr, ptr %71, align 8, !tbaa !5
  store ptr %1121, ptr %61, align 8, !tbaa !5
  %1122 = load ptr, ptr %72, align 8, !tbaa !5
  store ptr %1122, ptr %62, align 8, !tbaa !5
  %1123 = load ptr, ptr %73, align 8, !tbaa !5
  store ptr %1123, ptr %63, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 8, ptr %73) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %72) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %71) #4
  br label %1124

1124:                                             ; preds = %1105
  %1125 = load i32, ptr %65, align 4, !tbaa !9
  %1126 = add nsw i32 %1125, 1
  store i32 %1126, ptr %65, align 4, !tbaa !9
  br label %982, !llvm.loop !34

1127:                                             ; preds = %982
  %1128 = getelementptr inbounds %struct.libxsmm_gemm_param, ptr %41, i32 0, i32 1
  %1129 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %1128, i32 0, i32 0
  %1130 = load ptr, ptr %1129, align 8, !tbaa !12
  %1131 = icmp ne ptr null, %1130
  br i1 %1131, label %1132, label %1217

1132:                                             ; preds = %1127
  %1133 = getelementptr inbounds %struct.libxsmm_gemm_param, ptr %41, i32 0, i32 2
  %1134 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %1133, i32 0, i32 0
  %1135 = load ptr, ptr %1134, align 8, !tbaa !16
  %1136 = icmp ne ptr null, %1135
  br i1 %1136, label %1137, label %1217

1137:                                             ; preds = %1132
  %1138 = getelementptr inbounds %struct.libxsmm_gemm_param, ptr %41, i32 0, i32 3
  %1139 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %1138, i32 0, i32 0
  %1140 = load ptr, ptr %1139, align 8, !tbaa !17
  %1141 = icmp ne ptr null, %1140
  br i1 %1141, label %1142, label %1217

1142:                                             ; preds = %1137
  %1143 = load i32, ptr %37, align 4, !tbaa !9
  %1144 = load i32, ptr %32, align 4, !tbaa !9
  %1145 = icmp eq i32 %1143, %1144
  br i1 %1145, label %1146, label %1217

1146:                                             ; preds = %1142
  %1147 = getelementptr inbounds %struct.libxsmm_gemm_param, ptr %41, i32 0, i32 1
  %1148 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %1147, i32 0, i32 0
  %1149 = load ptr, ptr %1148, align 8, !tbaa !12
  %1150 = getelementptr inbounds %struct.libxsmm_gemm_param, ptr %41, i32 0, i32 1
  %1151 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %1150, i32 0, i32 5
  store ptr %1149, ptr %1151, align 8, !tbaa !18
  %1152 = getelementptr inbounds %struct.libxsmm_gemm_param, ptr %41, i32 0, i32 2
  %1153 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %1152, i32 0, i32 0
  %1154 = load ptr, ptr %1153, align 8, !tbaa !16
  %1155 = getelementptr inbounds %struct.libxsmm_gemm_param, ptr %41, i32 0, i32 2
  %1156 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %1155, i32 0, i32 5
  store ptr %1154, ptr %1156, align 8, !tbaa !19
  %1157 = getelementptr inbounds %struct.libxsmm_gemm_param, ptr %41, i32 0, i32 3
  %1158 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %1157, i32 0, i32 0
  %1159 = load ptr, ptr %1158, align 8, !tbaa !17
  %1160 = getelementptr inbounds %struct.libxsmm_gemm_param, ptr %41, i32 0, i32 3
  %1161 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %1160, i32 0, i32 5
  store ptr %1159, ptr %1161, align 8, !tbaa !20
  %1162 = load ptr, ptr %69, align 8, !tbaa !5
  %1163 = ptrtoint ptr %1162 to i64
  %1164 = and i64 %1163, 3
  %1165 = icmp eq i64 0, %1164
  br i1 %1165, label %1166, label %1167

1166:                                             ; preds = %1146
  br label %1168

1167:                                             ; preds = %1146
  call void @__assert_fail(ptr noundef @.str.14, ptr noundef @.str.1, i32 noundef 892, ptr noundef @__PRETTY_FUNCTION__.libxsmm_gemm_batch_kernel) #6
  unreachable

1168:                                             ; preds = %1166
  br label %1169

1169:                                             ; preds = %1201, %1168
  %1170 = load ptr, ptr %69, align 8, !tbaa !5
  %1171 = atomicrmw or ptr %1170, i32 1 seq_cst, align 4
  %1172 = icmp eq i32 0, %1171
  %1173 = xor i1 %1172, true
  br i1 %1173, label %1174, label %1202

1174:                                             ; preds = %1169
  br label %1175

1175:                                             ; preds = %1174
  call void @llvm.lifetime.start.p0(i64 4, ptr %77) #4
  store i32 1, ptr %77, align 4, !tbaa !9
  br label %1176

1176:                                             ; preds = %1194, %1175
  call void @llvm.lifetime.start.p0(i64 4, ptr %78) #4
  store i32 0, ptr %78, align 4, !tbaa !9
  br label %1177

1177:                                             ; preds = %1182, %1176
  %1178 = load i32, ptr %78, align 4, !tbaa !9
  %1179 = load i32, ptr %77, align 4, !tbaa !9
  %1180 = icmp slt i32 %1178, %1179
  br i1 %1180, label %1181, label %1185

1181:                                             ; preds = %1177
  call void @llvm.x86.sse2.pause()
  br label %1182

1182:                                             ; preds = %1181
  %1183 = load i32, ptr %78, align 4, !tbaa !9
  %1184 = add nsw i32 %1183, 1
  store i32 %1184, ptr %78, align 4, !tbaa !9
  br label %1177, !llvm.loop !35

1185:                                             ; preds = %1177
  %1186 = load i32, ptr %77, align 4, !tbaa !9
  %1187 = icmp slt i32 %1186, 4096
  br i1 %1187, label %1188, label %1191

1188:                                             ; preds = %1185
  %1189 = load i32, ptr %77, align 4, !tbaa !9
  %1190 = mul nsw i32 %1189, 2
  store i32 %1190, ptr %77, align 4, !tbaa !9
  br label %1193

1191:                                             ; preds = %1185
  store i32 4096, ptr %77, align 4, !tbaa !9
  %1192 = call i32 @sched_yield() #4
  br label %1193

1193:                                             ; preds = %1191, %1188
  call void @llvm.lifetime.end.p0(i64 4, ptr %78) #4
  br label %1194

1194:                                             ; preds = %1193
  %1195 = load ptr, ptr %69, align 8, !tbaa !5
  %1196 = load volatile i32, ptr %1195, align 4, !tbaa !9
  %1197 = and i32 %1196, 1
  %1198 = icmp ne i32 0, %1197
  br i1 %1198, label %1176, label %1199, !llvm.loop !36

1199:                                             ; preds = %1194
  call void @llvm.lifetime.end.p0(i64 4, ptr %77) #4
  br label %1200

1200:                                             ; preds = %1199
  br label %1201

1201:                                             ; preds = %1200
  br label %1169, !llvm.loop !37

1202:                                             ; preds = %1169
  %1203 = load ptr, ptr %69, align 8, !tbaa !5
  %1204 = load volatile i32, ptr %1203, align 4, !tbaa !9
  %1205 = icmp ne i32 0, %1204
  br i1 %1205, label %1206, label %1207

1206:                                             ; preds = %1202
  br label %1208

1207:                                             ; preds = %1202
  call void @__assert_fail(ptr noundef @.str.15, ptr noundef @.str.1, i32 noundef 892, ptr noundef @__PRETTY_FUNCTION__.libxsmm_gemm_batch_kernel) #6
  unreachable

1208:                                             ; preds = %1206
  %1209 = load ptr, ptr %16, align 8, !tbaa !5
  call void %1209(ptr noundef %41)
  %1210 = load ptr, ptr %69, align 8, !tbaa !5
  %1211 = load volatile i32, ptr %1210, align 4, !tbaa !9
  %1212 = icmp ne i32 0, %1211
  br i1 %1212, label %1213, label %1214

1213:                                             ; preds = %1208
  br label %1215

1214:                                             ; preds = %1208
  call void @__assert_fail(ptr noundef @.str.16, ptr noundef @.str.1, i32 noundef 894, ptr noundef @__PRETTY_FUNCTION__.libxsmm_gemm_batch_kernel) #6
  unreachable

1215:                                             ; preds = %1213
  %1216 = load ptr, ptr %69, align 8, !tbaa !5
  store atomic i32 0, ptr %1216 release, align 4
  br label %1217

1217:                                             ; preds = %1215, %1142, %1137, %1132, %1127
  call void @llvm.lifetime.end.p0(i64 8, ptr %70) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %69) #4
  br label %1218

1218:                                             ; preds = %1217, %965
  call void @llvm.lifetime.end.p0(i64 4, ptr %65) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %64) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %63) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %62) #4
  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
  call void @llvm.lifetime.end.p0(i64 4, ptr %58) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %57) #4
  br label %1370

1219:                                             ; preds = %775
  call void @llvm.lifetime.start.p0(i64 4, ptr %79) #4
  %1220 = load ptr, ptr %19, align 8, !tbaa !5
  %1221 = icmp ne ptr null, %1220
  br i1 %1221, label %1222, label %1230

1222:                                             ; preds = %1219
  %1223 = load ptr, ptr %19, align 8, !tbaa !5
  %1224 = load i32, ptr %1223, align 4, !tbaa !9
  %1225 = load i32, ptr %17, align 4, !tbaa !9
  %1226 = sub nsw i32 %1224, %1225
  %1227 = load i8, ptr %28, align 1, !tbaa !11
  %1228 = zext i8 %1227 to i32
  %1229 = mul nsw i32 %1226, %1228
  br label %1233

1230:                                             ; preds = %1219
  %1231 = load i8, ptr %28, align 1, !tbaa !11
  %1232 = zext i8 %1231 to i32
  br label %1233

1233:                                             ; preds = %1230, %1222
  %1234 = phi i32 [ %1229, %1222 ], [ %1232, %1230 ]
  store i32 %1234, ptr %79, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %80) #4
  %1235 = load ptr, ptr %20, align 8, !tbaa !5
  %1236 = icmp ne ptr null, %1235
  br i1 %1236, label %1237, label %1245

1237:                                             ; preds = %1233
  %1238 = load ptr, ptr %20, align 8, !tbaa !5
  %1239 = load i32, ptr %1238, align 4, !tbaa !9
  %1240 = load i32, ptr %17, align 4, !tbaa !9
  %1241 = sub nsw i32 %1239, %1240
  %1242 = load i8, ptr %28, align 1, !tbaa !11
  %1243 = zext i8 %1242 to i32
  %1244 = mul nsw i32 %1241, %1243
  br label %1248

1245:                                             ; preds = %1233
  %1246 = load i8, ptr %28, align 1, !tbaa !11
  %1247 = zext i8 %1246 to i32
  br label %1248

1248:                                             ; preds = %1245, %1237
  %1249 = phi i32 [ %1244, %1237 ], [ %1247, %1245 ]
  store i32 %1249, ptr %80, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %81) #4
  %1250 = load ptr, ptr %21, align 8, !tbaa !5
  %1251 = icmp ne ptr null, %1250
  br i1 %1251, label %1252, label %1260

1252:                                             ; preds = %1248
  %1253 = load ptr, ptr %21, align 8, !tbaa !5
  %1254 = load i32, ptr %1253, align 4, !tbaa !9
  %1255 = load i32, ptr %17, align 4, !tbaa !9
  %1256 = sub nsw i32 %1254, %1255
  %1257 = load i8, ptr %29, align 1, !tbaa !11
  %1258 = zext i8 %1257 to i32
  %1259 = mul nsw i32 %1256, %1258
  br label %1263

1260:                                             ; preds = %1248
  %1261 = load i8, ptr %29, align 1, !tbaa !11
  %1262 = zext i8 %1261 to i32
  br label %1263

1263:                                             ; preds = %1260, %1252
  %1264 = phi i32 [ %1259, %1252 ], [ %1262, %1260 ]
  store i32 %1264, ptr %81, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %82) #4
  %1265 = load i32, ptr %37, align 4, !tbaa !9
  %1266 = load i32, ptr %32, align 4, !tbaa !9
  %1267 = icmp ne i32 %1265, %1266
  br i1 %1267, label %1268, label %1270

1268:                                             ; preds = %1263
  %1269 = load i32, ptr %37, align 4, !tbaa !9
  br label %1273

1270:                                             ; preds = %1263
  %1271 = load i32, ptr %37, align 4, !tbaa !9
  %1272 = sub nsw i32 %1271, 1
  br label %1273

1273:                                             ; preds = %1270, %1268
  %1274 = phi i32 [ %1269, %1268 ], [ %1272, %1270 ]
  store i32 %1274, ptr %82, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %83) #4
  %1275 = load ptr, ptr %38, align 8, !tbaa !5
  %1276 = load i32, ptr %35, align 4, !tbaa !9
  %1277 = load i32, ptr %79, align 4, !tbaa !9
  %1278 = mul nsw i32 %1276, %1277
  %1279 = sext i32 %1278 to i64
  %1280 = getelementptr inbounds i8, ptr %1275, i64 %1279
  %1281 = getelementptr inbounds %struct.libxsmm_gemm_param, ptr %41, i32 0, i32 1
  %1282 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %1281, i32 0, i32 0
  store ptr %1280, ptr %1282, align 8, !tbaa !12
  %1283 = load ptr, ptr %39, align 8, !tbaa !5
  %1284 = load i32, ptr %35, align 4, !tbaa !9
  %1285 = load i32, ptr %80, align 4, !tbaa !9
  %1286 = mul nsw i32 %1284, %1285
  %1287 = sext i32 %1286 to i64
  %1288 = getelementptr inbounds i8, ptr %1283, i64 %1287
  %1289 = getelementptr inbounds %struct.libxsmm_gemm_param, ptr %41, i32 0, i32 2
  %1290 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %1289, i32 0, i32 0
  store ptr %1288, ptr %1290, align 8, !tbaa !16
  %1291 = load ptr, ptr %40, align 8, !tbaa !5
  %1292 = load i32, ptr %35, align 4, !tbaa !9
  %1293 = load i32, ptr %81, align 4, !tbaa !9
  %1294 = mul nsw i32 %1292, %1293
  %1295 = sext i32 %1294 to i64
  %1296 = getelementptr inbounds i8, ptr %1291, i64 %1295
  %1297 = getelementptr inbounds %struct.libxsmm_gemm_param, ptr %41, i32 0, i32 3
  %1298 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %1297, i32 0, i32 0
  store ptr %1296, ptr %1298, align 8, !tbaa !17
  %1299 = load i32, ptr %35, align 4, !tbaa !9
  store i32 %1299, ptr %83, align 4, !tbaa !9
  br label %1300

1300:                                             ; preds = %1345, %1273
  %1301 = load i32, ptr %83, align 4, !tbaa !9
  %1302 = load i32, ptr %82, align 4, !tbaa !9
  %1303 = icmp slt i32 %1301, %1302
  br i1 %1303, label %1304, label %1348

1304:                                             ; preds = %1300
  %1305 = getelementptr inbounds %struct.libxsmm_gemm_param, ptr %41, i32 0, i32 1
  %1306 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %1305, i32 0, i32 0
  %1307 = load ptr, ptr %1306, align 8, !tbaa !12
  %1308 = load i32, ptr %79, align 4, !tbaa !9
  %1309 = sext i32 %1308 to i64
  %1310 = getelementptr inbounds i8, ptr %1307, i64 %1309
  %1311 = getelementptr inbounds %struct.libxsmm_gemm_param, ptr %41, i32 0, i32 1
  %1312 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %1311, i32 0, i32 5
  store ptr %1310, ptr %1312, align 8, !tbaa !18
  %1313 = getelementptr inbounds %struct.libxsmm_gemm_param, ptr %41, i32 0, i32 2
  %1314 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %1313, i32 0, i32 0
  %1315 = load ptr, ptr %1314, align 8, !tbaa !16
  %1316 = load i32, ptr %80, align 4, !tbaa !9
  %1317 = sext i32 %1316 to i64
  %1318 = getelementptr inbounds i8, ptr %1315, i64 %1317
  %1319 = getelementptr inbounds %struct.libxsmm_gemm_param, ptr %41, i32 0, i32 2
  %1320 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %1319, i32 0, i32 5
  store ptr %1318, ptr %1320, align 8, !tbaa !19
  %1321 = getelementptr inbounds %struct.libxsmm_gemm_param, ptr %41, i32 0, i32 3
  %1322 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %1321, i32 0, i32 0
  %1323 = load ptr, ptr %1322, align 8, !tbaa !17
  %1324 = load i32, ptr %81, align 4, !tbaa !9
  %1325 = sext i32 %1324 to i64
  %1326 = getelementptr inbounds i8, ptr %1323, i64 %1325
  %1327 = getelementptr inbounds %struct.libxsmm_gemm_param, ptr %41, i32 0, i32 3
  %1328 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %1327, i32 0, i32 5
  store ptr %1326, ptr %1328, align 8, !tbaa !20
  %1329 = load ptr, ptr %16, align 8, !tbaa !5
  call void %1329(ptr noundef %41)
  %1330 = getelementptr inbounds %struct.libxsmm_gemm_param, ptr %41, i32 0, i32 1
  %1331 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %1330, i32 0, i32 5
  %1332 = load ptr, ptr %1331, align 8, !tbaa !18
  %1333 = getelementptr inbounds %struct.libxsmm_gemm_param, ptr %41, i32 0, i32 1
  %1334 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %1333, i32 0, i32 0
  store ptr %1332, ptr %1334, align 8, !tbaa !12
  %1335 = getelementptr inbounds %struct.libxsmm_gemm_param, ptr %41, i32 0, i32 2
  %1336 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %1335, i32 0, i32 5
  %1337 = load ptr, ptr %1336, align 8, !tbaa !19
  %1338 = getelementptr inbounds %struct.libxsmm_gemm_param, ptr %41, i32 0, i32 2
  %1339 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %1338, i32 0, i32 0
  store ptr %1337, ptr %1339, align 8, !tbaa !16
  %1340 = getelementptr inbounds %struct.libxsmm_gemm_param, ptr %41, i32 0, i32 3
  %1341 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %1340, i32 0, i32 5
  %1342 = load ptr, ptr %1341, align 8, !tbaa !20
  %1343 = getelementptr inbounds %struct.libxsmm_gemm_param, ptr %41, i32 0, i32 3
  %1344 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %1343, i32 0, i32 0
  store ptr %1342, ptr %1344, align 8, !tbaa !17
  br label %1345

1345:                                             ; preds = %1304
  %1346 = load i32, ptr %83, align 4, !tbaa !9
  %1347 = add nsw i32 %1346, 1
  store i32 %1347, ptr %83, align 4, !tbaa !9
  br label %1300, !llvm.loop !38

1348:                                             ; preds = %1300
  %1349 = load i32, ptr %37, align 4, !tbaa !9
  %1350 = load i32, ptr %32, align 4, !tbaa !9
  %1351 = icmp eq i32 %1349, %1350
  br i1 %1351, label %1352, label %1369

1352:                                             ; preds = %1348
  %1353 = getelementptr inbounds %struct.libxsmm_gemm_param, ptr %41, i32 0, i32 1
  %1354 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %1353, i32 0, i32 0
  %1355 = load ptr, ptr %1354, align 8, !tbaa !12
  %1356 = getelementptr inbounds %struct.libxsmm_gemm_param, ptr %41, i32 0, i32 1
  %1357 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %1356, i32 0, i32 5
  store ptr %1355, ptr %1357, align 8, !tbaa !18
  %1358 = getelementptr inbounds %struct.libxsmm_gemm_param, ptr %41, i32 0, i32 2
  %1359 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %1358, i32 0, i32 0
  %1360 = load ptr, ptr %1359, align 8, !tbaa !16
  %1361 = getelementptr inbounds %struct.libxsmm_gemm_param, ptr %41, i32 0, i32 2
  %1362 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %1361, i32 0, i32 5
  store ptr %1360, ptr %1362, align 8, !tbaa !19
  %1363 = getelementptr inbounds %struct.libxsmm_gemm_param, ptr %41, i32 0, i32 3
  %1364 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %1363, i32 0, i32 0
  %1365 = load ptr, ptr %1364, align 8, !tbaa !17
  %1366 = getelementptr inbounds %struct.libxsmm_gemm_param, ptr %41, i32 0, i32 3
  %1367 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %1366, i32 0, i32 5
  store ptr %1365, ptr %1367, align 8, !tbaa !20
  %1368 = load ptr, ptr %16, align 8, !tbaa !5
  call void %1368(ptr noundef %41)
  br label %1369

1369:                                             ; preds = %1352, %1348
  call void @llvm.lifetime.end.p0(i64 4, ptr %83) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %82) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %81) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %80) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %79) #4
  br label %1370

1370:                                             ; preds = %1369, %1218
  br label %1371

1371:                                             ; preds = %1370, %774
  call void @llvm.lifetime.end.p0(i64 176, ptr %41) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #4
  br label %1372

1372:                                             ; preds = %1371, %144
  %1373 = load i32, ptr %31, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #4
  ret i32 %1373
}

declare i32 @libxsmm_crc32_u32(i32 noundef, ptr noundef, ...) #3

; Function Attrs: nounwind
declare void @llvm.x86.sse2.pause() #4

; Function Attrs: nounwind
declare i32 @sched_yield() #5

declare i32 @libxsmm_crc32_u64(i32 noundef, ptr noundef, ...) #3

attributes #0 = { 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 #1 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
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 }
attributes #5 = { 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 = { 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 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!7, !7, i64 0}
!12 = !{!13, !6, i64 32}
!13 = !{!"libxsmm_gemm_param", !14, i64 0, !15, i64 32, !15, i64 80, !15, i64 128}
!14 = !{!"libxsmm_matrix_op_arg", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24}
!15 = !{!"libxsmm_matrix_arg", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40}
!16 = !{!13, !6, i64 80}
!17 = !{!13, !6, i64 128}
!18 = !{!13, !6, i64 72}
!19 = !{!13, !6, i64 120}
!20 = !{!13, !6, i64 168}
!21 = distinct !{!21, !22}
!22 = !{!"llvm.loop.mustprogress"}
!23 = distinct !{!23, !22}
!24 = distinct !{!24, !22}
!25 = distinct !{!25, !22}
!26 = distinct !{!26, !22}
!27 = distinct !{!27, !22}
!28 = distinct !{!28, !22}
!29 = distinct !{!29, !22}
!30 = distinct !{!30, !22}
!31 = distinct !{!31, !22}
!32 = distinct !{!32, !22}
!33 = distinct !{!33, !22}
!34 = distinct !{!34, !22}
!35 = distinct !{!35, !22}
!36 = distinct !{!36, !22}
!37 = distinct !{!37, !22}
!38 = distinct !{!38, !22}


; 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"

%union.internal_gemm_locktype = type { i32, [60 x i8] }
%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 }

@.str.1 = external hidden unnamed_addr constant [68 x i8], align 1
@internal_gemm_nlocks = external dso_local local_unnamed_addr global i32, align 64
@internal_gemm_lock = external dso_local global [1024 x %union.internal_gemm_locktype], align 64
@.str.12 = external hidden unnamed_addr constant [78 x i8], align 1
@__PRETTY_FUNCTION__.libxsmm_gemm_batch_kernel = external hidden unnamed_addr constant [259 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [31 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [39 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [44 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [44 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [19 x i8], align 1

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

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

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

; Function Attrs: nounwind uwtable
define dso_local noundef i32 @libxsmm_gemm_batch_kernel(ptr noundef readonly %0, i32 noundef %1, i32 noundef %2, ptr noundef readonly %3, ptr noundef readonly %4, ptr noundef readonly %5, ptr noundef %6, ptr noundef %7, ptr noundef %8, i32 noundef %9, i32 noundef %10, i32 noundef %11, i8 noundef zeroext %12, i8 noundef zeroext %13, i32 noundef %14) local_unnamed_addr #2 {
  %16 = alloca %struct.libxsmm_gemm_param, align 8
  %17 = alloca i32, align 4
  %18 = tail call i32 @llvm.abs.i32(i32 %9, i1 true)
  %19 = tail call i32 @llvm.smin.i32(i32 %18, i32 %11)
  %20 = add nsw i32 %18, -1
  %21 = add i32 %20, %19
  %22 = sdiv i32 %21, %19
  %23 = icmp sgt i32 %19, %10
  %24 = mul nsw i32 %22, %10
  %25 = select i1 %23, i32 %24, i32 %18
  %26 = add i32 %25, %22
  %27 = icmp sge i32 %26, %18
  %28 = tail call i32 @llvm.smin.i32(i32 %26, i32 %18)
  %29 = insertelement <4 x ptr> poison, ptr %6, i64 0
  %30 = insertelement <4 x ptr> %29, ptr %7, i64 1
  %31 = insertelement <4 x ptr> %30, ptr %8, i64 2
  %32 = insertelement <4 x ptr> %31, ptr %0, i64 3
  %33 = icmp eq <4 x ptr> %32, zeroinitializer
  %34 = bitcast <4 x i1> %33 to i4
  %35 = icmp eq i4 %34, 0
  br i1 %35, label %37, label %36

36:                                               ; preds = %15
  tail call void @__assert_fail(ptr noundef nonnull @.str.12, ptr noundef nonnull @.str.1, i32 noundef 595, ptr noundef nonnull @__PRETTY_FUNCTION__.libxsmm_gemm_batch_kernel) #7
  unreachable

37:                                               ; preds = %15
  %38 = icmp slt i32 %25, %28
  br i1 %38, label %39, label %536

39:                                               ; preds = %37
  call void @llvm.lifetime.start.p0(i64 176, ptr nonnull %16) #4
  %40 = zext i8 %12 to i32
  %41 = icmp ne i8 %12, 0
  %42 = zext i8 %13 to i32
  %43 = icmp ne i8 %13, 0
  %or.cond8 = and i1 %41, %43
  br i1 %or.cond8, label %45, label %44

44:                                               ; preds = %39
  tail call void @__assert_fail(ptr noundef nonnull @.str.13, ptr noundef nonnull @.str.1, i32 noundef 603, ptr noundef nonnull @__PRETTY_FUNCTION__.libxsmm_gemm_batch_kernel) #7
  unreachable

45:                                               ; preds = %39
  %46 = tail call i32 @llvm.abs.i32(i32 %2, i1 true)
  %47 = icmp ugt i32 %46, 3
  br i1 %47, label %48, label %307

48:                                               ; preds = %45
  %49 = sext i1 %27 to i32
  %50 = add nsw i32 %28, %49
  %51 = mul nsw i32 %50, %2
  %52 = mul nsw i32 %25, %2
  %53 = icmp eq i32 %19, 1
  %54 = load i32, ptr @internal_gemm_nlocks, align 64
  %55 = icmp eq i32 %54, 0
  %or.cond10 = select i1 %53, i1 true, i1 %55
  %56 = icmp slt i32 %9, 0
  %or.cond12 = or i1 %56, %or.cond10
  br i1 %or.cond12, label %57, label %153

57:                                               ; preds = %48
  %.not530 = icmp eq ptr %3, null
  br i1 %.not530, label %62, label %58

58:                                               ; preds = %57
  %59 = sext i32 %52 to i64
  %60 = getelementptr inbounds i8, ptr %3, i64 %59
  %61 = load i32, ptr %60, align 4, !tbaa !5
  br label %62

62:                                               ; preds = %57, %58
  %63 = phi i32 [ %61, %58 ], [ %1, %57 ]
  %64 = sub nsw i32 %63, %1
  %.not531 = icmp eq ptr %4, null
  br i1 %.not531, label %69, label %65

65:                                               ; preds = %62
  %66 = sext i32 %52 to i64
  %67 = getelementptr inbounds i8, ptr %4, i64 %66
  %68 = load i32, ptr %67, align 4, !tbaa !5
  br label %69

69:                                               ; preds = %62, %65
  %70 = phi i32 [ %68, %65 ], [ %1, %62 ]
  %71 = sub nsw i32 %70, %1
  %.not532 = icmp eq ptr %5, null
  br i1 %.not532, label %76, label %72

72:                                               ; preds = %69
  %73 = sext i32 %52 to i64
  %74 = getelementptr inbounds i8, ptr %5, i64 %73
  %75 = load i32, ptr %74, align 4, !tbaa !5
  br label %76

76:                                               ; preds = %69, %72
  %77 = phi i32 [ %75, %72 ], [ %1, %69 ]
  %78 = sub nsw i32 %77, %1
  %79 = icmp sgt i32 %64, -1
  %80 = icmp sgt i32 %71, -1
  %or.cond14 = select i1 %79, i1 %80, i1 false
  %81 = icmp sgt i32 %78, -1
  %or.cond16 = select i1 %or.cond14, i1 %81, i1 false
  br i1 %or.cond16, label %82, label %.loopexit

82:                                               ; preds = %76
  %83 = mul nuw nsw i32 %64, %40
  %84 = zext nneg i32 %83 to i64
  %85 = getelementptr inbounds i8, ptr %6, i64 %84
  %86 = getelementptr inbounds i8, ptr %16, i64 32
  store ptr %85, ptr %86, align 8, !tbaa !9
  %87 = mul nuw nsw i32 %71, %40
  %88 = zext nneg i32 %87 to i64
  %89 = getelementptr inbounds i8, ptr %7, i64 %88
  %90 = getelementptr inbounds i8, ptr %16, i64 80
  store ptr %89, ptr %90, align 8, !tbaa !14
  %91 = mul nuw nsw i32 %78, %42
  %92 = zext nneg i32 %91 to i64
  %93 = getelementptr inbounds i8, ptr %8, i64 %92
  %94 = getelementptr inbounds i8, ptr %16, i64 128
  store ptr %93, ptr %94, align 8, !tbaa !15
  %.0415639 = add nsw i32 %52, %2
  %.not534640 = icmp sgt i32 %.0415639, %51
  br i1 %.not534640, label %.loopexit, label %.lr.ph643

.lr.ph643:                                        ; preds = %82
  %95 = getelementptr inbounds i8, ptr %16, i64 72
  %96 = getelementptr inbounds i8, ptr %16, i64 120
  %97 = getelementptr inbounds i8, ptr %16, i64 168
  %98 = sext i32 %.0415639 to i64
  %99 = sext i32 %2 to i64
  %100 = sext i32 %51 to i64
  br label %101

101:                                              ; preds = %.lr.ph643, %139
  %102 = phi ptr [ %93, %.lr.ph643 ], [ %140, %139 ]
  %103 = phi ptr [ %89, %.lr.ph643 ], [ %141, %139 ]
  %104 = phi ptr [ %85, %.lr.ph643 ], [ %142, %139 ]
  %indvars.iv664 = phi i64 [ %98, %.lr.ph643 ], [ %indvars.iv.next665, %139 ]
  br i1 %.not530, label %108, label %105

105:                                              ; preds = %101
  %106 = getelementptr inbounds i8, ptr %3, i64 %indvars.iv664
  %107 = load i32, ptr %106, align 4, !tbaa !5
  br label %108

108:                                              ; preds = %101, %105
  %109 = phi i32 [ %107, %105 ], [ %1, %101 ]
  %110 = sub nsw i32 %109, %1
  br i1 %.not531, label %114, label %111

111:                                              ; preds = %108
  %112 = getelementptr inbounds i8, ptr %4, i64 %indvars.iv664
  %113 = load i32, ptr %112, align 4, !tbaa !5
  br label %114

114:                                              ; preds = %108, %111
  %115 = phi i32 [ %113, %111 ], [ %1, %108 ]
  %116 = sub nsw i32 %115, %1
  br i1 %.not532, label %120, label %117

117:                                              ; preds = %114
  %118 = getelementptr inbounds i8, ptr %5, i64 %indvars.iv664
  %119 = load i32, ptr %118, align 4, !tbaa !5
  br label %120

120:                                              ; preds = %114, %117
  %121 = phi i32 [ %119, %117 ], [ %1, %114 ]
  %122 = sub nsw i32 %121, %1
  %123 = icmp sgt i32 %110, -1
  %124 = icmp sgt i32 %116, -1
  %or.cond18 = select i1 %123, i1 %124, i1 false
  %125 = icmp sgt i32 %122, -1
  %or.cond20 = select i1 %or.cond18, i1 %125, i1 false
  br i1 %or.cond20, label %126, label %139

126:                                              ; preds = %120
  %127 = mul nuw nsw i32 %110, %40
  %128 = zext nneg i32 %127 to i64
  %129 = getelementptr inbounds i8, ptr %6, i64 %128
  store ptr %129, ptr %95, align 8, !tbaa !16
  %130 = mul nuw nsw i32 %116, %40
  %131 = zext nneg i32 %130 to i64
  %132 = getelementptr inbounds i8, ptr %7, i64 %131
  store ptr %132, ptr %96, align 8, !tbaa !17
  %133 = mul nuw nsw i32 %122, %42
  %134 = zext nneg i32 %133 to i64
  %135 = getelementptr inbounds i8, ptr %8, i64 %134
  store ptr %135, ptr %97, align 8, !tbaa !18
  call void %0(ptr noundef nonnull %16) #4
  %136 = load ptr, ptr %95, align 8, !tbaa !16
  store ptr %136, ptr %86, align 8, !tbaa !9
  %137 = load ptr, ptr %96, align 8, !tbaa !17
  store ptr %137, ptr %90, align 8, !tbaa !14
  %138 = load ptr, ptr %97, align 8, !tbaa !18
  store ptr %138, ptr %94, align 8, !tbaa !15
  br label %139

139:                                              ; preds = %120, %126
  %140 = phi ptr [ %102, %120 ], [ %138, %126 ]
  %141 = phi ptr [ %103, %120 ], [ %137, %126 ]
  %142 = phi ptr [ %104, %120 ], [ %136, %126 ]
  %indvars.iv.next665 = add nsw i64 %indvars.iv664, %99
  %.not534 = icmp sgt i64 %indvars.iv.next665, %100
  br i1 %.not534, label %.loopexit, label %101, !llvm.loop !19

.loopexit:                                        ; preds = %139, %82, %76
  %143 = phi ptr [ undef, %76 ], [ %93, %82 ], [ %140, %139 ]
  %144 = phi ptr [ undef, %76 ], [ %89, %82 ], [ %141, %139 ]
  %145 = phi ptr [ undef, %76 ], [ %85, %82 ], [ %142, %139 ]
  %.1421 = phi i32 [ %78, %76 ], [ %78, %82 ], [ %122, %139 ]
  %.1419 = phi i32 [ %71, %76 ], [ %71, %82 ], [ %116, %139 ]
  %.1417 = phi i32 [ %64, %76 ], [ %64, %82 ], [ %110, %139 ]
  %146 = icmp slt i32 %.1417, 0
  %147 = icmp slt i32 %.1419, 0
  %or.cond22.not565 = select i1 %146, i1 true, i1 %147
  %148 = icmp slt i32 %.1421, 0
  %or.cond24.not562 = select i1 %or.cond22.not565, i1 true, i1 %148
  %.not535 = icmp sgt i32 %18, %26
  %or.cond536 = select i1 %or.cond24.not562, i1 true, i1 %.not535
  br i1 %or.cond536, label %535, label %149

149:                                              ; preds = %.loopexit
  %150 = getelementptr inbounds i8, ptr %16, i64 72
  store ptr %145, ptr %150, align 8, !tbaa !16
  %151 = getelementptr inbounds i8, ptr %16, i64 120
  store ptr %144, ptr %151, align 8, !tbaa !17
  %152 = getelementptr inbounds i8, ptr %16, i64 168
  store ptr %143, ptr %152, align 8, !tbaa !18
  call void %0(ptr noundef nonnull %16) #4
  br label %535

153:                                              ; preds = %48
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %17) #4
  %.not514 = icmp eq ptr %3, null
  br i1 %.not514, label %158, label %154

154:                                              ; preds = %153
  %155 = sext i32 %52 to i64
  %156 = getelementptr inbounds i8, ptr %3, i64 %155
  %157 = load i32, ptr %156, align 4, !tbaa !5
  br label %158

158:                                              ; preds = %153, %154
  %159 = phi i32 [ %157, %154 ], [ %1, %153 ]
  %160 = sub nsw i32 %159, %1
  %.not515 = icmp eq ptr %4, null
  br i1 %.not515, label %165, label %161

161:                                              ; preds = %158
  %162 = sext i32 %52 to i64
  %163 = getelementptr inbounds i8, ptr %4, i64 %162
  %164 = load i32, ptr %163, align 4, !tbaa !5
  br label %165

165:                                              ; preds = %158, %161
  %166 = phi i32 [ %164, %161 ], [ %1, %158 ]
  %167 = sub nsw i32 %166, %1
  %.not516 = icmp eq ptr %5, null
  br i1 %.not516, label %172, label %168

168:                                              ; preds = %165
  %169 = sext i32 %52 to i64
  %170 = getelementptr inbounds i8, ptr %5, i64 %169
  %171 = load i32, ptr %170, align 4, !tbaa !5
  br label %172

172:                                              ; preds = %165, %168
  %173 = phi i32 [ %171, %168 ], [ %1, %165 ]
  %174 = sub nsw i32 %173, %1
  store i32 %174, ptr %17, align 4, !tbaa !5
  %175 = icmp sgt i32 %160, -1
  %176 = icmp sgt i32 %167, -1
  %or.cond26 = select i1 %175, i1 %176, i1 false
  %177 = icmp sgt i32 %174, -1
  %or.cond28 = select i1 %or.cond26, i1 %177, i1 false
  br i1 %or.cond28, label %178, label %.thread

178:                                              ; preds = %172
  %179 = mul nuw nsw i32 %160, %40
  %180 = zext nneg i32 %179 to i64
  %181 = getelementptr inbounds i8, ptr %6, i64 %180
  %182 = getelementptr inbounds i8, ptr %16, i64 32
  store ptr %181, ptr %182, align 8, !tbaa !9
  %183 = mul nuw nsw i32 %167, %40
  %184 = zext nneg i32 %183 to i64
  %185 = getelementptr inbounds i8, ptr %7, i64 %184
  %186 = getelementptr inbounds i8, ptr %16, i64 80
  store ptr %185, ptr %186, align 8, !tbaa !14
  %187 = mul nuw nsw i32 %174, %42
  %188 = zext nneg i32 %187 to i64
  %189 = getelementptr inbounds i8, ptr %8, i64 %188
  %190 = getelementptr inbounds i8, ptr %16, i64 128
  store ptr %189, ptr %190, align 8, !tbaa !15
  %191 = call i32 (i32, ptr, ...) @libxsmm_crc32_u32(i32 noundef 2507, ptr noundef nonnull %17) #4
  %192 = load i32, ptr @internal_gemm_nlocks, align 64, !tbaa !5
  %193 = add i32 %192, -1
  %194 = and i32 %193, %191
  %195 = zext i32 %194 to i64
  %196 = getelementptr inbounds [1024 x %union.internal_gemm_locktype], ptr @internal_gemm_lock, i64 0, i64 %195
  %.1622 = add nsw i32 %52, %2
  %.not517623 = icmp sgt i32 %.1622, %51
  br i1 %.not517623, label %._crit_edge629.thread, label %.lr.ph628

.lr.ph628:                                        ; preds = %178
  %197 = getelementptr inbounds i8, ptr %16, i64 72
  %198 = getelementptr inbounds i8, ptr %16, i64 120
  %199 = getelementptr inbounds i8, ptr %16, i64 168
  %200 = sext i32 %.1622 to i64
  %201 = sext i32 %2 to i64
  %202 = sext i32 %51 to i64
  br label %203

203:                                              ; preds = %.lr.ph628, %271
  %indvars.iv = phi i64 [ %200, %.lr.ph628 ], [ %indvars.iv.next, %271 ]
  %.0428625 = phi ptr [ %196, %.lr.ph628 ], [ %.2, %271 ]
  %.0430624 = phi ptr [ null, %.lr.ph628 ], [ %.2432, %271 ]
  br i1 %.not514, label %207, label %204

204:                                              ; preds = %203
  %205 = getelementptr inbounds i8, ptr %3, i64 %indvars.iv
  %206 = load i32, ptr %205, align 4, !tbaa !5
  br label %207

207:                                              ; preds = %203, %204
  %208 = phi i32 [ %206, %204 ], [ %1, %203 ]
  %209 = sub nsw i32 %208, %1
  br i1 %.not515, label %213, label %210

210:                                              ; preds = %207
  %211 = getelementptr inbounds i8, ptr %4, i64 %indvars.iv
  %212 = load i32, ptr %211, align 4, !tbaa !5
  br label %213

213:                                              ; preds = %207, %210
  %214 = phi i32 [ %212, %210 ], [ %1, %207 ]
  %215 = sub nsw i32 %214, %1
  br i1 %.not516, label %219, label %216

216:                                              ; preds = %213
  %217 = getelementptr inbounds i8, ptr %5, i64 %indvars.iv
  %218 = load i32, ptr %217, align 4, !tbaa !5
  br label %219

219:                                              ; preds = %213, %216
  %220 = phi i32 [ %218, %216 ], [ %1, %213 ]
  %221 = sub nsw i32 %220, %1
  store i32 %221, ptr %17, align 4, !tbaa !5
  %222 = icmp sgt i32 %209, -1
  %223 = icmp sgt i32 %215, -1
  %or.cond30 = select i1 %222, i1 %223, i1 false
  %224 = icmp sgt i32 %221, -1
  %or.cond32 = select i1 %or.cond30, i1 %224, i1 false
  br i1 %or.cond32, label %225, label %271

225:                                              ; preds = %219
  %226 = call i32 (i32, ptr, ...) @libxsmm_crc32_u32(i32 noundef 2507, ptr noundef nonnull %17) #4
  %227 = load i32, ptr @internal_gemm_nlocks, align 64, !tbaa !5
  %228 = add i32 %227, -1
  %229 = and i32 %228, %226
  %230 = zext i32 %229 to i64
  %231 = getelementptr inbounds [1024 x %union.internal_gemm_locktype], ptr @internal_gemm_lock, i64 0, i64 %230
  %232 = mul nuw nsw i32 %209, %40
  %233 = zext nneg i32 %232 to i64
  %234 = getelementptr inbounds i8, ptr %6, i64 %233
  store ptr %234, ptr %197, align 8, !tbaa !16
  %235 = mul nuw nsw i32 %215, %40
  %236 = zext nneg i32 %235 to i64
  %237 = getelementptr inbounds i8, ptr %7, i64 %236
  store ptr %237, ptr %198, align 8, !tbaa !17
  %238 = load i32, ptr %17, align 4, !tbaa !5
  %239 = mul nsw i32 %238, %42
  %240 = sext i32 %239 to i64
  %241 = getelementptr inbounds i8, ptr %8, i64 %240
  store ptr %241, ptr %199, align 8, !tbaa !18
  %.not524 = icmp eq ptr %.0428625, %.0430624
  br i1 %.not524, label %261, label %242

242:                                              ; preds = %225
  %243 = ptrtoint ptr %.0428625 to i64
  %244 = and i64 %243, 3
  %245 = icmp eq i64 %244, 0
  br i1 %245, label %.preheader568, label %247

.preheader568:                                    ; preds = %242
  %246 = atomicrmw or ptr %.0428625, i32 1 seq_cst, align 4
  %.not525620 = icmp eq i32 %246, 0
  br i1 %.not525620, label %._crit_edge621, label %.preheader567

247:                                              ; preds = %242
  call void @__assert_fail(ptr noundef nonnull @.str.14, ptr noundef nonnull @.str.1, i32 noundef 772, ptr noundef nonnull @__PRETTY_FUNCTION__.libxsmm_gemm_batch_kernel) #7
  unreachable

.preheader567:                                    ; preds = %.preheader568, %.preheader567.backedge
  %.0443 = phi i32 [ %.0443.be, %.preheader567.backedge ], [ 1, %.preheader568 ]
  %248 = icmp sgt i32 %.0443, 0
  br i1 %248, label %.lr.ph618.preheader, label %._crit_edge619.thread

.lr.ph618.preheader:                              ; preds = %.preheader567
  %xtraiter750 = and i32 %.0443, 7
  %249 = icmp ult i32 %.0443, 8
  br i1 %249, label %._crit_edge619.unr-lcssa, label %.lr.ph618.preheader.new

.lr.ph618.preheader.new:                          ; preds = %.lr.ph618.preheader
  %unroll_iter753 = and i32 %.0443, 2147483640
  br label %.lr.ph618

.lr.ph618:                                        ; preds = %.lr.ph618, %.lr.ph618.preheader.new
  %niter754 = phi i32 [ 0, %.lr.ph618.preheader.new ], [ %niter754.next.7, %.lr.ph618 ]
  call void @llvm.x86.sse2.pause()
  call void @llvm.x86.sse2.pause()
  call void @llvm.x86.sse2.pause()
  call void @llvm.x86.sse2.pause()
  call void @llvm.x86.sse2.pause()
  call void @llvm.x86.sse2.pause()
  call void @llvm.x86.sse2.pause()
  call void @llvm.x86.sse2.pause()
  %niter754.next.7 = add i32 %niter754, 8
  %niter754.ncmp.7 = icmp eq i32 %niter754.next.7, %unroll_iter753
  br i1 %niter754.ncmp.7, label %._crit_edge619.unr-lcssa, label %.lr.ph618, !llvm.loop !21

._crit_edge619.unr-lcssa:                         ; preds = %.lr.ph618, %.lr.ph618.preheader
  %lcmp.mod752.not = icmp eq i32 %xtraiter750, 0
  br i1 %lcmp.mod752.not, label %._crit_edge619, label %.lr.ph618.epil

.lr.ph618.epil:                                   ; preds = %._crit_edge619.unr-lcssa, %.lr.ph618.epil
  %epil.iter751 = phi i32 [ %epil.iter751.next, %.lr.ph618.epil ], [ 0, %._crit_edge619.unr-lcssa ]
  call void @llvm.x86.sse2.pause()
  %epil.iter751.next = add i32 %epil.iter751, 1
  %epil.iter751.cmp.not = icmp eq i32 %epil.iter751.next, %xtraiter750
  br i1 %epil.iter751.cmp.not, label %._crit_edge619, label %.lr.ph618.epil, !llvm.loop !22

._crit_edge619:                                   ; preds = %.lr.ph618.epil, %._crit_edge619.unr-lcssa
  %250 = icmp slt i32 %.0443, 4096
  br i1 %250, label %._crit_edge619.thread, label %252

._crit_edge619.thread:                            ; preds = %.preheader567, %._crit_edge619
  %251 = shl i32 %.0443, 1
  br label %254

252:                                              ; preds = %._crit_edge619
  %253 = call i32 @sched_yield() #4
  br label %254

254:                                              ; preds = %252, %._crit_edge619.thread
  %.1444 = phi i32 [ %251, %._crit_edge619.thread ], [ 4096, %252 ]
  %255 = load volatile i32, ptr %.0428625, align 4, !tbaa !5
  %256 = and i32 %255, 1
  %.not529 = icmp eq i32 %256, 0
  br i1 %.not529, label %257, label %.preheader567.backedge

.preheader567.backedge:                           ; preds = %254, %257
  %.0443.be = phi i32 [ %.1444, %254 ], [ 1, %257 ]
  br label %.preheader567, !llvm.loop !24

257:                                              ; preds = %254
  %258 = atomicrmw or ptr %.0428625, i32 1 seq_cst, align 4
  %.not525 = icmp eq i32 %258, 0
  br i1 %.not525, label %._crit_edge621, label %.preheader567.backedge

._crit_edge621:                                   ; preds = %257, %.preheader568
  %259 = load volatile i32, ptr %.0428625, align 4, !tbaa !5
  %.not526 = icmp eq i32 %259, 0
  br i1 %.not526, label %260, label %261

260:                                              ; preds = %._crit_edge621
  call void @__assert_fail(ptr noundef nonnull @.str.15, ptr noundef nonnull @.str.1, i32 noundef 772, ptr noundef nonnull @__PRETTY_FUNCTION__.libxsmm_gemm_batch_kernel) #7
  unreachable

261:                                              ; preds = %._crit_edge621, %225
  call void %0(ptr noundef nonnull %16) #4
  %.not527 = icmp ne ptr %.0428625, %231
  %262 = icmp eq i64 %indvars.iv, %202
  %or.cond537 = select i1 %.not527, i1 true, i1 %262
  br i1 %or.cond537, label %263, label %267

263:                                              ; preds = %261
  %264 = load volatile i32, ptr %.0428625, align 4, !tbaa !5
  %.not528 = icmp eq i32 %264, 0
  br i1 %.not528, label %265, label %266

265:                                              ; preds = %263
  call void @__assert_fail(ptr noundef nonnull @.str.16, ptr noundef nonnull @.str.1, i32 noundef 778, ptr noundef nonnull @__PRETTY_FUNCTION__.libxsmm_gemm_batch_kernel) #7
  unreachable

266:                                              ; preds = %263
  store atomic i32 0, ptr %.0428625 release, align 4
  br label %267

267:                                              ; preds = %261, %266
  %.1429 = phi ptr [ %231, %266 ], [ %.0428625, %261 ]
  %268 = load ptr, ptr %197, align 8, !tbaa !16
  store ptr %268, ptr %182, align 8, !tbaa !9
  %269 = load ptr, ptr %198, align 8, !tbaa !17
  store ptr %269, ptr %186, align 8, !tbaa !14
  %270 = load ptr, ptr %199, align 8, !tbaa !18
  store ptr %270, ptr %190, align 8, !tbaa !15
  br label %271

271:                                              ; preds = %219, %267
  %.2432 = phi ptr [ %.0428625, %267 ], [ %.0430624, %219 ]
  %.2 = phi ptr [ %.1429, %267 ], [ %.0428625, %219 ]
  %indvars.iv.next = add nsw i64 %indvars.iv, %201
  %.not517 = icmp sgt i64 %indvars.iv.next, %202
  br i1 %.not517, label %._crit_edge629, label %203, !llvm.loop !25

._crit_edge629:                                   ; preds = %271
  %272 = icmp slt i32 %209, 0
  %273 = icmp slt i32 %215, 0
  %274 = select i1 %272, i1 true, i1 %273
  %.not518 = icmp eq ptr %.2, null
  br i1 %.not518, label %.thread, label %._crit_edge629.thread

.thread:                                          ; preds = %172, %._crit_edge629
  call void @__assert_fail(ptr noundef nonnull @.str.17, ptr noundef nonnull @.str.1, i32 noundef 789, ptr noundef nonnull @__PRETTY_FUNCTION__.libxsmm_gemm_batch_kernel) #7
  unreachable

._crit_edge629.thread:                            ; preds = %178, %._crit_edge629
  %.0428.lcssa678 = phi ptr [ %.2, %._crit_edge629 ], [ %196, %178 ]
  %.0433.lcssa677 = phi i1 [ %274, %._crit_edge629 ], [ false, %178 ]
  %275 = load i32, ptr %17, align 4
  %276 = icmp slt i32 %275, 0
  %or.cond36.not557 = select i1 %.0433.lcssa677, i1 true, i1 %276
  %.not519 = icmp sgt i32 %18, %26
  %or.cond538 = select i1 %or.cond36.not557, i1 true, i1 %.not519
  br i1 %or.cond538, label %306, label %277

277:                                              ; preds = %._crit_edge629.thread
  %278 = load ptr, ptr %182, align 8, !tbaa !9
  %279 = getelementptr inbounds i8, ptr %16, i64 72
  store ptr %278, ptr %279, align 8, !tbaa !16
  %280 = load ptr, ptr %186, align 8, !tbaa !14
  %281 = getelementptr inbounds i8, ptr %16, i64 120
  store ptr %280, ptr %281, align 8, !tbaa !17
  %282 = load ptr, ptr %190, align 8, !tbaa !15
  %283 = getelementptr inbounds i8, ptr %16, i64 168
  store ptr %282, ptr %283, align 8, !tbaa !18
  %284 = ptrtoint ptr %.0428.lcssa678 to i64
  %285 = and i64 %284, 3
  %286 = icmp eq i64 %285, 0
  br i1 %286, label %.preheader566, label %288

.preheader566:                                    ; preds = %277
  %287 = atomicrmw or ptr %.0428.lcssa678, i32 1 seq_cst, align 4
  %.not520637 = icmp eq i32 %287, 0
  br i1 %.not520637, label %._crit_edge638, label %.preheader

288:                                              ; preds = %277
  call void @__assert_fail(ptr noundef nonnull @.str.14, ptr noundef nonnull @.str.1, i32 noundef 799, ptr noundef nonnull @__PRETTY_FUNCTION__.libxsmm_gemm_batch_kernel) #7
  unreachable

.preheader:                                       ; preds = %.preheader566, %.preheader.backedge
  %.0446 = phi i32 [ %.0446.be, %.preheader.backedge ], [ 1, %.preheader566 ]
  %289 = icmp sgt i32 %.0446, 0
  br i1 %289, label %.lr.ph635.preheader, label %._crit_edge636.thread

.lr.ph635.preheader:                              ; preds = %.preheader
  %xtraiter755 = and i32 %.0446, 7
  %290 = icmp ult i32 %.0446, 8
  br i1 %290, label %._crit_edge636.unr-lcssa, label %.lr.ph635.preheader.new

.lr.ph635.preheader.new:                          ; preds = %.lr.ph635.preheader
  %unroll_iter758 = and i32 %.0446, 2147483640
  br label %.lr.ph635

.lr.ph635:                                        ; preds = %.lr.ph635, %.lr.ph635.preheader.new
  %niter759 = phi i32 [ 0, %.lr.ph635.preheader.new ], [ %niter759.next.7, %.lr.ph635 ]
  call void @llvm.x86.sse2.pause()
  call void @llvm.x86.sse2.pause()
  call void @llvm.x86.sse2.pause()
  call void @llvm.x86.sse2.pause()
  call void @llvm.x86.sse2.pause()
  call void @llvm.x86.sse2.pause()
  call void @llvm.x86.sse2.pause()
  call void @llvm.x86.sse2.pause()
  %niter759.next.7 = add i32 %niter759, 8
  %niter759.ncmp.7 = icmp eq i32 %niter759.next.7, %unroll_iter758
  br i1 %niter759.ncmp.7, label %._crit_edge636.unr-lcssa, label %.lr.ph635, !llvm.loop !26

._crit_edge636.unr-lcssa:                         ; preds = %.lr.ph635, %.lr.ph635.preheader
  %lcmp.mod757.not = icmp eq i32 %xtraiter755, 0
  br i1 %lcmp.mod757.not, label %._crit_edge636, label %.lr.ph635.epil

.lr.ph635.epil:                                   ; preds = %._crit_edge636.unr-lcssa, %.lr.ph635.epil
  %epil.iter756 = phi i32 [ %epil.iter756.next, %.lr.ph635.epil ], [ 0, %._crit_edge636.unr-lcssa ]
  call void @llvm.x86.sse2.pause()
  %epil.iter756.next = add i32 %epil.iter756, 1
  %epil.iter756.cmp.not = icmp eq i32 %epil.iter756.next, %xtraiter755
  br i1 %epil.iter756.cmp.not, label %._crit_edge636, label %.lr.ph635.epil, !llvm.loop !27

._crit_edge636:                                   ; preds = %.lr.ph635.epil, %._crit_edge636.unr-lcssa
  %291 = icmp slt i32 %.0446, 4096
  br i1 %291, label %._crit_edge636.thread, label %293

._crit_edge636.thread:                            ; preds = %.preheader, %._crit_edge636
  %292 = shl i32 %.0446, 1
  br label %295

293:                                              ; preds = %._crit_edge636
  %294 = call i32 @sched_yield() #4
  br label %295

295:                                              ; preds = %293, %._crit_edge636.thread
  %.1447 = phi i32 [ %292, %._crit_edge636.thread ], [ 4096, %293 ]
  %296 = load volatile i32, ptr %.0428.lcssa678, align 4, !tbaa !5
  %297 = and i32 %296, 1
  %.not523 = icmp eq i32 %297, 0
  br i1 %.not523, label %298, label %.preheader.backedge

.preheader.backedge:                              ; preds = %295, %298
  %.0446.be = phi i32 [ %.1447, %295 ], [ 1, %298 ]
  br label %.preheader, !llvm.loop !28

298:                                              ; preds = %295
  %299 = atomicrmw or ptr %.0428.lcssa678, i32 1 seq_cst, align 4
  %.not520 = icmp eq i32 %299, 0
  br i1 %.not520, label %._crit_edge638, label %.preheader.backedge

._crit_edge638:                                   ; preds = %298, %.preheader566
  %300 = load volatile i32, ptr %.0428.lcssa678, align 4, !tbaa !5
  %.not521 = icmp eq i32 %300, 0
  br i1 %.not521, label %301, label %302

301:                                              ; preds = %._crit_edge638
  call void @__assert_fail(ptr noundef nonnull @.str.15, ptr noundef nonnull @.str.1, i32 noundef 799, ptr noundef nonnull @__PRETTY_FUNCTION__.libxsmm_gemm_batch_kernel) #7
  unreachable

302:                                              ; preds = %._crit_edge638
  call void %0(ptr noundef nonnull %16) #4
  %303 = load volatile i32, ptr %.0428.lcssa678, align 4, !tbaa !5
  %.not522 = icmp eq i32 %303, 0
  br i1 %.not522, label %304, label %305

304:                                              ; preds = %302
  call void @__assert_fail(ptr noundef nonnull @.str.16, ptr noundef nonnull @.str.1, i32 noundef 801, ptr noundef nonnull @__PRETTY_FUNCTION__.libxsmm_gemm_batch_kernel) #7
  unreachable

305:                                              ; preds = %302
  store atomic i32 0, ptr %.0428.lcssa678 release, align 4
  br label %306

306:                                              ; preds = %305, %._crit_edge629.thread
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %17) #4
  br label %535

307:                                              ; preds = %45
  %308 = icmp eq i32 %2, 0
  %.not498 = icmp eq ptr %3, null
  br i1 %308, label %309, label %477

309:                                              ; preds = %307
  br i1 %.not498, label %312, label %310

310:                                              ; preds = %309
  %311 = load i32, ptr %3, align 4, !tbaa !5
  br label %312

312:                                              ; preds = %309, %310
  %313 = phi i32 [ %311, %310 ], [ 8, %309 ]
  %314 = shl nsw i32 %1, 3
  %315 = sub nsw i32 %313, %314
  %.not499 = icmp eq ptr %4, null
  br i1 %.not499, label %318, label %316

316:                                              ; preds = %312
  %317 = load i32, ptr %4, align 4, !tbaa !5
  br label %318

318:                                              ; preds = %312, %316
  %319 = phi i32 [ %317, %316 ], [ 8, %312 ]
  %320 = sub nsw i32 %319, %314
  %.not500 = icmp eq ptr %5, null
  br i1 %.not500, label %323, label %321

321:                                              ; preds = %318
  %322 = load i32, ptr %5, align 4, !tbaa !5
  br label %323

323:                                              ; preds = %318, %321
  %324 = phi i32 [ %322, %321 ], [ 8, %318 ]
  %325 = sub nsw i32 %324, %314
  %326 = mul nsw i32 %315, %25
  %327 = sext i32 %326 to i64
  %328 = getelementptr inbounds i8, ptr %6, i64 %327
  %329 = mul nsw i32 %320, %25
  %330 = sext i32 %329 to i64
  %331 = getelementptr inbounds i8, ptr %7, i64 %330
  %332 = mul nsw i32 %325, %25
  %333 = sext i32 %332 to i64
  %334 = getelementptr inbounds i8, ptr %8, i64 %333
  %335 = sext i1 %27 to i32
  %336 = add nsw i32 %28, %335
  %337 = load ptr, ptr %328, align 8, !tbaa !29
  %338 = getelementptr inbounds i8, ptr %16, i64 32
  store ptr %337, ptr %338, align 8, !tbaa !9
  %339 = load ptr, ptr %331, align 8, !tbaa !29
  %340 = getelementptr inbounds i8, ptr %16, i64 80
  store ptr %339, ptr %340, align 8, !tbaa !14
  %341 = load ptr, ptr %334, align 8, !tbaa !29
  %342 = getelementptr inbounds i8, ptr %16, i64 128
  store ptr %341, ptr %342, align 8, !tbaa !15
  %343 = icmp eq i32 %19, 1
  %344 = load i32, ptr @internal_gemm_nlocks, align 64
  %345 = icmp eq i32 %344, 0
  %or.cond38 = select i1 %343, i1 true, i1 %345
  %346 = icmp slt i32 %9, 0
  %or.cond40 = or i1 %346, %or.cond38
  br i1 %or.cond40, label %.preheader569, label %383

.preheader569:                                    ; preds = %323
  %347 = icmp slt i32 %25, %336
  br i1 %347, label %.lr.ph614, label %._crit_edge615

.lr.ph614:                                        ; preds = %.preheader569
  %348 = sext i32 %315 to i64
  %349 = sext i32 %320 to i64
  %350 = sext i32 %325 to i64
  %351 = getelementptr inbounds i8, ptr %16, i64 72
  %352 = getelementptr inbounds i8, ptr %16, i64 120
  %353 = getelementptr inbounds i8, ptr %16, i64 168
  br label %354

354:                                              ; preds = %.lr.ph614, %368
  %355 = phi ptr [ %341, %.lr.ph614 ], [ %369, %368 ]
  %356 = phi ptr [ %339, %.lr.ph614 ], [ %370, %368 ]
  %357 = phi ptr [ %337, %.lr.ph614 ], [ %371, %368 ]
  %.0448613 = phi i32 [ %25, %.lr.ph614 ], [ %372, %368 ]
  %.0451612 = phi ptr [ %334, %.lr.ph614 ], [ %360, %368 ]
  %.0453611 = phi ptr [ %331, %.lr.ph614 ], [ %359, %368 ]
  %.0455610 = phi ptr [ %328, %.lr.ph614 ], [ %358, %368 ]
  %358 = getelementptr inbounds i8, ptr %.0455610, i64 %348
  %359 = getelementptr inbounds i8, ptr %.0453611, i64 %349
  %360 = getelementptr inbounds i8, ptr %.0451612, i64 %350
  %361 = load ptr, ptr %358, align 8, !tbaa !29
  store ptr %361, ptr %351, align 8, !tbaa !16
  %362 = load ptr, ptr %359, align 8, !tbaa !29
  store ptr %362, ptr %352, align 8, !tbaa !17
  %363 = load ptr, ptr %360, align 8, !tbaa !29
  store ptr %363, ptr %353, align 8, !tbaa !18
  %364 = icmp ne ptr %357, null
  %365 = icmp ne ptr %356, null
  %or.cond44 = select i1 %364, i1 %365, i1 false
  %366 = icmp ne ptr %355, null
  %or.cond48 = select i1 %or.cond44, i1 %366, i1 false
  br i1 %or.cond48, label %367, label %368

367:                                              ; preds = %354
  call void %0(ptr noundef nonnull %16) #4
  %.pre671 = load ptr, ptr %351, align 8, !tbaa !16
  %.pre672 = load ptr, ptr %352, align 8, !tbaa !17
  %.pre673 = load ptr, ptr %353, align 8, !tbaa !18
  br label %368

368:                                              ; preds = %367, %354
  %369 = phi ptr [ %.pre673, %367 ], [ %363, %354 ]
  %370 = phi ptr [ %.pre672, %367 ], [ %362, %354 ]
  %371 = phi ptr [ %.pre671, %367 ], [ %361, %354 ]
  store ptr %371, ptr %338, align 8, !tbaa !9
  store ptr %370, ptr %340, align 8, !tbaa !14
  store ptr %369, ptr %342, align 8, !tbaa !15
  %372 = add i32 %.0448613, 1
  %exitcond660.not = icmp eq i32 %372, %336
  br i1 %exitcond660.not, label %._crit_edge615, label %354, !llvm.loop !30

._crit_edge615:                                   ; preds = %368, %.preheader569
  %373 = phi ptr [ %341, %.preheader569 ], [ %369, %368 ]
  %374 = phi ptr [ %339, %.preheader569 ], [ %370, %368 ]
  %375 = phi ptr [ %337, %.preheader569 ], [ %371, %368 ]
  %376 = icmp eq ptr %375, null
  %377 = icmp eq ptr %374, null
  %or.cond52.not555 = select i1 %376, i1 true, i1 %377
  %378 = icmp eq ptr %373, null
  %or.cond56.not552 = select i1 %or.cond52.not555, i1 true, i1 %378
  %.not513 = icmp sgt i32 %18, %26
  %or.cond539 = select i1 %or.cond56.not552, i1 true, i1 %.not513
  br i1 %or.cond539, label %535, label %379

379:                                              ; preds = %._crit_edge615
  %380 = getelementptr inbounds i8, ptr %16, i64 72
  store ptr %375, ptr %380, align 8, !tbaa !16
  %381 = getelementptr inbounds i8, ptr %16, i64 120
  store ptr %374, ptr %381, align 8, !tbaa !17
  %382 = getelementptr inbounds i8, ptr %16, i64 168
  store ptr %373, ptr %382, align 8, !tbaa !18
  call void %0(ptr noundef nonnull %16) #4
  br label %535

383:                                              ; preds = %323
  %384 = call i32 (i32, ptr, ...) @libxsmm_crc32_u64(i32 noundef 1975, ptr noundef nonnull %342) #4
  %385 = load i32, ptr @internal_gemm_nlocks, align 64, !tbaa !5
  %386 = add i32 %385, -1
  %387 = and i32 %386, %384
  %388 = zext i32 %387 to i64
  %389 = getelementptr inbounds [1024 x %union.internal_gemm_locktype], ptr @internal_gemm_lock, i64 0, i64 %388
  %.not501.not594 = icmp slt i32 %25, %336
  %.pre669 = load ptr, ptr %338, align 8, !tbaa !9
  %.pre = load ptr, ptr %340, align 8
  %.pre670 = load ptr, ptr %342, align 8
  br i1 %.not501.not594, label %.lr.ph602, label %._crit_edge603

.lr.ph602:                                        ; preds = %383
  %390 = sext i32 %315 to i64
  %391 = sext i32 %320 to i64
  %392 = sext i32 %325 to i64
  %393 = getelementptr inbounds i8, ptr %16, i64 72
  %394 = getelementptr inbounds i8, ptr %16, i64 120
  %395 = getelementptr inbounds i8, ptr %16, i64 168
  br label %396

396:                                              ; preds = %.lr.ph602, %441
  %397 = phi ptr [ %.pre670, %.lr.ph602 ], [ %444, %441 ]
  %398 = phi ptr [ %.pre, %.lr.ph602 ], [ %443, %441 ]
  %399 = phi ptr [ %.pre669, %.lr.ph602 ], [ %442, %441 ]
  %.1449600.in = phi i32 [ %25, %.lr.ph602 ], [ %.1449600, %441 ]
  %.0437599 = phi ptr [ null, %.lr.ph602 ], [ %.2439, %441 ]
  %.0440598 = phi ptr [ %389, %.lr.ph602 ], [ %.2442, %441 ]
  %.1452597 = phi ptr [ %334, %.lr.ph602 ], [ %402, %441 ]
  %.1454596 = phi ptr [ %331, %.lr.ph602 ], [ %401, %441 ]
  %.1456595 = phi ptr [ %328, %.lr.ph602 ], [ %400, %441 ]
  %.1449600 = add i32 %.1449600.in, 1
  %400 = getelementptr inbounds i8, ptr %.1456595, i64 %390
  %401 = getelementptr inbounds i8, ptr %.1454596, i64 %391
  %402 = getelementptr inbounds i8, ptr %.1452597, i64 %392
  %403 = load ptr, ptr %400, align 8, !tbaa !29
  store ptr %403, ptr %393, align 8, !tbaa !16
  %404 = load ptr, ptr %401, align 8, !tbaa !29
  store ptr %404, ptr %394, align 8, !tbaa !17
  %405 = load ptr, ptr %402, align 8, !tbaa !29
  store ptr %405, ptr %395, align 8, !tbaa !18
  %406 = icmp ne ptr %399, null
  %407 = icmp ne ptr %398, null
  %or.cond60 = select i1 %406, i1 %407, i1 false
  %408 = icmp ne ptr %397, null
  %or.cond64 = select i1 %or.cond60, i1 %408, i1 false
  br i1 %or.cond64, label %409, label %441

409:                                              ; preds = %396
  %410 = call i32 (i32, ptr, ...) @libxsmm_crc32_u64(i32 noundef 1975, ptr noundef nonnull %395) #4
  %411 = load i32, ptr @internal_gemm_nlocks, align 64, !tbaa !5
  %412 = add i32 %411, -1
  %413 = and i32 %412, %410
  %414 = zext i32 %413 to i64
  %415 = getelementptr inbounds [1024 x %union.internal_gemm_locktype], ptr @internal_gemm_lock, i64 0, i64 %414
  %.not507 = icmp eq ptr %.0440598, %.0437599
  br i1 %.not507, label %435, label %416

416:                                              ; preds = %409
  %417 = ptrtoint ptr %.0440598 to i64
  %418 = and i64 %417, 3
  %419 = icmp eq i64 %418, 0
  br i1 %419, label %.preheader573, label %421

.preheader573:                                    ; preds = %416
  %420 = atomicrmw or ptr %.0440598, i32 1 seq_cst, align 4
  %.not508591 = icmp eq i32 %420, 0
  br i1 %.not508591, label %._crit_edge592, label %.preheader572

421:                                              ; preds = %416
  call void @__assert_fail(ptr noundef nonnull @.str.14, ptr noundef nonnull @.str.1, i32 noundef 867, ptr noundef nonnull @__PRETTY_FUNCTION__.libxsmm_gemm_batch_kernel) #7
  unreachable

.preheader572:                                    ; preds = %.preheader573, %.preheader572.backedge
  %.0426 = phi i32 [ %.0426.be, %.preheader572.backedge ], [ 1, %.preheader573 ]
  %422 = icmp sgt i32 %.0426, 0
  br i1 %422, label %.lr.ph589.preheader, label %._crit_edge590.thread

.lr.ph589.preheader:                              ; preds = %.preheader572
  %xtraiter = and i32 %.0426, 7
  %423 = icmp ult i32 %.0426, 8
  br i1 %423, label %._crit_edge590.unr-lcssa, label %.lr.ph589.preheader.new

.lr.ph589.preheader.new:                          ; preds = %.lr.ph589.preheader
  %unroll_iter = and i32 %.0426, 2147483640
  br label %.lr.ph589

.lr.ph589:                                        ; preds = %.lr.ph589, %.lr.ph589.preheader.new
  %niter = phi i32 [ 0, %.lr.ph589.preheader.new ], [ %niter.next.7, %.lr.ph589 ]
  call void @llvm.x86.sse2.pause()
  call void @llvm.x86.sse2.pause()
  call void @llvm.x86.sse2.pause()
  call void @llvm.x86.sse2.pause()
  call void @llvm.x86.sse2.pause()
  call void @llvm.x86.sse2.pause()
  call void @llvm.x86.sse2.pause()
  call void @llvm.x86.sse2.pause()
  %niter.next.7 = add i32 %niter, 8
  %niter.ncmp.7 = icmp eq i32 %niter.next.7, %unroll_iter
  br i1 %niter.ncmp.7, label %._crit_edge590.unr-lcssa, label %.lr.ph589, !llvm.loop !31

._crit_edge590.unr-lcssa:                         ; preds = %.lr.ph589, %.lr.ph589.preheader
  %lcmp.mod.not = icmp eq i32 %xtraiter, 0
  br i1 %lcmp.mod.not, label %._crit_edge590, label %.lr.ph589.epil

.lr.ph589.epil:                                   ; preds = %._crit_edge590.unr-lcssa, %.lr.ph589.epil
  %epil.iter = phi i32 [ %epil.iter.next, %.lr.ph589.epil ], [ 0, %._crit_edge590.unr-lcssa ]
  call void @llvm.x86.sse2.pause()
  %epil.iter.next = add i32 %epil.iter, 1
  %epil.iter.cmp.not = icmp eq i32 %epil.iter.next, %xtraiter
  br i1 %epil.iter.cmp.not, label %._crit_edge590, label %.lr.ph589.epil, !llvm.loop !32

._crit_edge590:                                   ; preds = %.lr.ph589.epil, %._crit_edge590.unr-lcssa
  %424 = icmp slt i32 %.0426, 4096
  br i1 %424, label %._crit_edge590.thread, label %426

._crit_edge590.thread:                            ; preds = %.preheader572, %._crit_edge590
  %425 = shl i32 %.0426, 1
  br label %428

426:                                              ; preds = %._crit_edge590
  %427 = call i32 @sched_yield() #4
  br label %428

428:                                              ; preds = %426, %._crit_edge590.thread
  %.1427 = phi i32 [ %425, %._crit_edge590.thread ], [ 4096, %426 ]
  %429 = load volatile i32, ptr %.0440598, align 4, !tbaa !5
  %430 = and i32 %429, 1
  %.not512 = icmp eq i32 %430, 0
  br i1 %.not512, label %431, label %.preheader572.backedge

.preheader572.backedge:                           ; preds = %428, %431
  %.0426.be = phi i32 [ %.1427, %428 ], [ 1, %431 ]
  br label %.preheader572, !llvm.loop !33

431:                                              ; preds = %428
  %432 = atomicrmw or ptr %.0440598, i32 1 seq_cst, align 4
  %.not508 = icmp eq i32 %432, 0
  br i1 %.not508, label %._crit_edge592, label %.preheader572.backedge

._crit_edge592:                                   ; preds = %431, %.preheader573
  %433 = load volatile i32, ptr %.0440598, align 4, !tbaa !5
  %.not509 = icmp eq i32 %433, 0
  br i1 %.not509, label %434, label %435

434:                                              ; preds = %._crit_edge592
  call void @__assert_fail(ptr noundef nonnull @.str.15, ptr noundef nonnull @.str.1, i32 noundef 867, ptr noundef nonnull @__PRETTY_FUNCTION__.libxsmm_gemm_batch_kernel) #7
  unreachable

435:                                              ; preds = %._crit_edge592, %409
  %.1438 = phi ptr [ %.0440598, %._crit_edge592 ], [ %.0437599, %409 ]
  call void %0(ptr noundef nonnull %16) #4
  %.not510 = icmp ne ptr %.0440598, %415
  %436 = icmp eq i32 %.1449600, %336
  %or.cond540 = select i1 %.not510, i1 true, i1 %436
  br i1 %or.cond540, label %437, label %441

437:                                              ; preds = %435
  %438 = load volatile i32, ptr %.0440598, align 4, !tbaa !5
  %.not511 = icmp eq i32 %438, 0
  br i1 %.not511, label %439, label %440

439:                                              ; preds = %437
  call void @__assert_fail(ptr noundef nonnull @.str.16, ptr noundef nonnull @.str.1, i32 noundef 873, ptr noundef nonnull @__PRETTY_FUNCTION__.libxsmm_gemm_batch_kernel) #7
  unreachable

440:                                              ; preds = %437
  store atomic i32 0, ptr %.0440598 release, align 4
  br label %441

441:                                              ; preds = %440, %435, %396
  %.2442 = phi ptr [ %.0440598, %396 ], [ %415, %440 ], [ %.0440598, %435 ]
  %.2439 = phi ptr [ %.0437599, %396 ], [ %.1438, %440 ], [ %.1438, %435 ]
  %442 = load ptr, ptr %393, align 8, !tbaa !16
  store ptr %442, ptr %338, align 8, !tbaa !9
  %443 = load ptr, ptr %394, align 8, !tbaa !17
  store ptr %443, ptr %340, align 8, !tbaa !14
  %444 = load ptr, ptr %395, align 8, !tbaa !18
  store ptr %444, ptr %342, align 8, !tbaa !15
  %exitcond658.not = icmp eq i32 %.1449600, %336
  br i1 %exitcond658.not, label %._crit_edge603, label %396, !llvm.loop !34

._crit_edge603:                                   ; preds = %441, %383
  %445 = phi ptr [ %.pre670, %383 ], [ %444, %441 ]
  %446 = phi ptr [ %.pre, %383 ], [ %443, %441 ]
  %447 = phi ptr [ %.pre669, %383 ], [ %442, %441 ]
  %.0440.lcssa = phi ptr [ %389, %383 ], [ %.2442, %441 ]
  %448 = icmp eq ptr %447, null
  %449 = icmp eq ptr %446, null
  %or.cond68.not550 = select i1 %448, i1 true, i1 %449
  %450 = icmp eq ptr %445, null
  %or.cond72.not547 = select i1 %or.cond68.not550, i1 true, i1 %450
  %.not502 = icmp sgt i32 %18, %26
  %or.cond541 = select i1 %or.cond72.not547, i1 true, i1 %.not502
  br i1 %or.cond541, label %535, label %451

451:                                              ; preds = %._crit_edge603
  %452 = getelementptr inbounds i8, ptr %16, i64 72
  store ptr %447, ptr %452, align 8, !tbaa !16
  %453 = getelementptr inbounds i8, ptr %16, i64 120
  store ptr %446, ptr %453, align 8, !tbaa !17
  %454 = getelementptr inbounds i8, ptr %16, i64 168
  store ptr %445, ptr %454, align 8, !tbaa !18
  %455 = ptrtoint ptr %.0440.lcssa to i64
  %456 = and i64 %455, 3
  %457 = icmp eq i64 %456, 0
  br i1 %457, label %.preheader571, label %459

.preheader571:                                    ; preds = %451
  %458 = atomicrmw or ptr %.0440.lcssa, i32 1 seq_cst, align 4
  %.not503608 = icmp eq i32 %458, 0
  br i1 %.not503608, label %._crit_edge609, label %.preheader570

459:                                              ; preds = %451
  call void @__assert_fail(ptr noundef nonnull @.str.14, ptr noundef nonnull @.str.1, i32 noundef 892, ptr noundef nonnull @__PRETTY_FUNCTION__.libxsmm_gemm_batch_kernel) #7
  unreachable

.preheader570:                                    ; preds = %.preheader571, %.preheader570.backedge
  %.0423 = phi i32 [ %.0423.be, %.preheader570.backedge ], [ 1, %.preheader571 ]
  %460 = icmp sgt i32 %.0423, 0
  br i1 %460, label %.lr.ph606.preheader, label %._crit_edge607.thread

.lr.ph606.preheader:                              ; preds = %.preheader570
  %xtraiter745 = and i32 %.0423, 7
  %461 = icmp ult i32 %.0423, 8
  br i1 %461, label %._crit_edge607.unr-lcssa, label %.lr.ph606.preheader.new

.lr.ph606.preheader.new:                          ; preds = %.lr.ph606.preheader
  %unroll_iter748 = and i32 %.0423, 2147483640
  br label %.lr.ph606

.lr.ph606:                                        ; preds = %.lr.ph606, %.lr.ph606.preheader.new
  %niter749 = phi i32 [ 0, %.lr.ph606.preheader.new ], [ %niter749.next.7, %.lr.ph606 ]
  call void @llvm.x86.sse2.pause()
  call void @llvm.x86.sse2.pause()
  call void @llvm.x86.sse2.pause()
  call void @llvm.x86.sse2.pause()
  call void @llvm.x86.sse2.pause()
  call void @llvm.x86.sse2.pause()
  call void @llvm.x86.sse2.pause()
  call void @llvm.x86.sse2.pause()
  %niter749.next.7 = add i32 %niter749, 8
  %niter749.ncmp.7 = icmp eq i32 %niter749.next.7, %unroll_iter748
  br i1 %niter749.ncmp.7, label %._crit_edge607.unr-lcssa, label %.lr.ph606, !llvm.loop !35

._crit_edge607.unr-lcssa:                         ; preds = %.lr.ph606, %.lr.ph606.preheader
  %lcmp.mod747.not = icmp eq i32 %xtraiter745, 0
  br i1 %lcmp.mod747.not, label %._crit_edge607, label %.lr.ph606.epil

.lr.ph606.epil:                                   ; preds = %._crit_edge607.unr-lcssa, %.lr.ph606.epil
  %epil.iter746 = phi i32 [ %epil.iter746.next, %.lr.ph606.epil ], [ 0, %._crit_edge607.unr-lcssa ]
  call void @llvm.x86.sse2.pause()
  %epil.iter746.next = add i32 %epil.iter746, 1
  %epil.iter746.cmp.not = icmp eq i32 %epil.iter746.next, %xtraiter745
  br i1 %epil.iter746.cmp.not, label %._crit_edge607, label %.lr.ph606.epil, !llvm.loop !36

._crit_edge607:                                   ; preds = %.lr.ph606.epil, %._crit_edge607.unr-lcssa
  %462 = icmp slt i32 %.0423, 4096
  br i1 %462, label %._crit_edge607.thread, label %464

._crit_edge607.thread:                            ; preds = %.preheader570, %._crit_edge607
  %463 = shl i32 %.0423, 1
  br label %466

464:                                              ; preds = %._crit_edge607
  %465 = call i32 @sched_yield() #4
  br label %466

466:                                              ; preds = %464, %._crit_edge607.thread
  %.1424 = phi i32 [ %463, %._crit_edge607.thread ], [ 4096, %464 ]
  %467 = load volatile i32, ptr %.0440.lcssa, align 4, !tbaa !5
  %468 = and i32 %467, 1
  %.not506 = icmp eq i32 %468, 0
  br i1 %.not506, label %469, label %.preheader570.backedge

.preheader570.backedge:                           ; preds = %466, %469
  %.0423.be = phi i32 [ %.1424, %466 ], [ 1, %469 ]
  br label %.preheader570, !llvm.loop !37

469:                                              ; preds = %466
  %470 = atomicrmw or ptr %.0440.lcssa, i32 1 seq_cst, align 4
  %.not503 = icmp eq i32 %470, 0
  br i1 %.not503, label %._crit_edge609, label %.preheader570.backedge

._crit_edge609:                                   ; preds = %469, %.preheader571
  %471 = load volatile i32, ptr %.0440.lcssa, align 4, !tbaa !5
  %.not504 = icmp eq i32 %471, 0
  br i1 %.not504, label %472, label %473

472:                                              ; preds = %._crit_edge609
  call void @__assert_fail(ptr noundef nonnull @.str.15, ptr noundef nonnull @.str.1, i32 noundef 892, ptr noundef nonnull @__PRETTY_FUNCTION__.libxsmm_gemm_batch_kernel) #7
  unreachable

473:                                              ; preds = %._crit_edge609
  call void %0(ptr noundef nonnull %16) #4
  %474 = load volatile i32, ptr %.0440.lcssa, align 4, !tbaa !5
  %.not505 = icmp eq i32 %474, 0
  br i1 %.not505, label %475, label %476

475:                                              ; preds = %473
  call void @__assert_fail(ptr noundef nonnull @.str.16, ptr noundef nonnull @.str.1, i32 noundef 894, ptr noundef nonnull @__PRETTY_FUNCTION__.libxsmm_gemm_batch_kernel) #7
  unreachable

476:                                              ; preds = %473
  store atomic i32 0, ptr %.0440.lcssa release, align 4
  br label %535

477:                                              ; preds = %307
  br i1 %.not498, label %482, label %478

478:                                              ; preds = %477
  %479 = load i32, ptr %3, align 4, !tbaa !5
  %480 = sub nsw i32 %479, %1
  %481 = mul nsw i32 %480, %40
  br label %482

482:                                              ; preds = %477, %478
  %483 = phi i32 [ %481, %478 ], [ %40, %477 ]
  %.not495 = icmp eq ptr %4, null
  br i1 %.not495, label %488, label %484

484:                                              ; preds = %482
  %485 = load i32, ptr %4, align 4, !tbaa !5
  %486 = sub nsw i32 %485, %1
  %487 = mul nsw i32 %486, %40
  br label %488

488:                                              ; preds = %482, %484
  %489 = phi i32 [ %487, %484 ], [ %40, %482 ]
  %.not496 = icmp eq ptr %5, null
  br i1 %.not496, label %494, label %490

490:                                              ; preds = %488
  %491 = load i32, ptr %5, align 4, !tbaa !5
  %492 = sub nsw i32 %491, %1
  %493 = mul nsw i32 %492, %42
  br label %494

494:                                              ; preds = %488, %490
  %495 = phi i32 [ %493, %490 ], [ %42, %488 ]
  %496 = sext i1 %27 to i32
  %497 = add nsw i32 %28, %496
  %498 = mul nsw i32 %483, %25
  %499 = sext i32 %498 to i64
  %500 = getelementptr inbounds i8, ptr %6, i64 %499
  %501 = getelementptr inbounds i8, ptr %16, i64 32
  store ptr %500, ptr %501, align 8, !tbaa !9
  %502 = mul nsw i32 %489, %25
  %503 = sext i32 %502 to i64
  %504 = getelementptr inbounds i8, ptr %7, i64 %503
  %505 = getelementptr inbounds i8, ptr %16, i64 80
  store ptr %504, ptr %505, align 8, !tbaa !14
  %506 = mul nsw i32 %495, %25
  %507 = sext i32 %506 to i64
  %508 = getelementptr inbounds i8, ptr %8, i64 %507
  %509 = getelementptr inbounds i8, ptr %16, i64 128
  store ptr %508, ptr %509, align 8, !tbaa !15
  %510 = icmp slt i32 %25, %497
  br i1 %510, label %.lr.ph, label %._crit_edge

.lr.ph:                                           ; preds = %494
  %511 = sext i32 %483 to i64
  %512 = getelementptr inbounds i8, ptr %16, i64 72
  %513 = sext i32 %489 to i64
  %514 = getelementptr inbounds i8, ptr %16, i64 120
  %515 = sext i32 %495 to i64
  %516 = getelementptr inbounds i8, ptr %16, i64 168
  br label %517

517:                                              ; preds = %.lr.ph, %517
  %518 = phi ptr [ %508, %.lr.ph ], [ %526, %517 ]
  %519 = phi ptr [ %504, %.lr.ph ], [ %525, %517 ]
  %520 = phi ptr [ %500, %.lr.ph ], [ %524, %517 ]
  %.0586 = phi i32 [ %25, %.lr.ph ], [ %527, %517 ]
  %521 = getelementptr inbounds i8, ptr %520, i64 %511
  store ptr %521, ptr %512, align 8, !tbaa !16
  %522 = getelementptr inbounds i8, ptr %519, i64 %513
  store ptr %522, ptr %514, align 8, !tbaa !17
  %523 = getelementptr inbounds i8, ptr %518, i64 %515
  store ptr %523, ptr %516, align 8, !tbaa !18
  call void %0(ptr noundef nonnull %16) #4
  %524 = load ptr, ptr %512, align 8, !tbaa !16
  store ptr %524, ptr %501, align 8, !tbaa !9
  %525 = load ptr, ptr %514, align 8, !tbaa !17
  store ptr %525, ptr %505, align 8, !tbaa !14
  %526 = load ptr, ptr %516, align 8, !tbaa !18
  store ptr %526, ptr %509, align 8, !tbaa !15
  %527 = add i32 %.0586, 1
  %exitcond.not = icmp eq i32 %527, %497
  br i1 %exitcond.not, label %._crit_edge, label %517, !llvm.loop !38

._crit_edge:                                      ; preds = %517, %494
  %528 = phi ptr [ %508, %494 ], [ %526, %517 ]
  %529 = phi ptr [ %504, %494 ], [ %525, %517 ]
  %530 = phi ptr [ %500, %494 ], [ %524, %517 ]
  %.not497 = icmp sgt i32 %18, %26
  br i1 %.not497, label %535, label %531

531:                                              ; preds = %._crit_edge
  %532 = getelementptr inbounds i8, ptr %16, i64 72
  store ptr %530, ptr %532, align 8, !tbaa !16
  %533 = getelementptr inbounds i8, ptr %16, i64 120
  store ptr %529, ptr %533, align 8, !tbaa !17
  %534 = getelementptr inbounds i8, ptr %16, i64 168
  store ptr %528, ptr %534, align 8, !tbaa !18
  call void %0(ptr noundef nonnull %16) #4
  br label %535

535:                                              ; preds = %._crit_edge, %531, %379, %._crit_edge615, %476, %._crit_edge603, %306, %149, %.loopexit
  call void @llvm.lifetime.end.p0(i64 176, ptr nonnull %16) #4
  br label %536

536:                                              ; preds = %535, %37
  ret i32 0
}

declare i32 @libxsmm_crc32_u32(i32 noundef, ptr noundef, ...) local_unnamed_addr #3

; Function Attrs: nounwind
declare void @llvm.x86.sse2.pause() #4

; Function Attrs: nounwind
declare i32 @sched_yield() local_unnamed_addr #5

declare i32 @libxsmm_crc32_u64(i32 noundef, ptr noundef, ...) local_unnamed_addr #3

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

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

attributes #0 = { 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 #1 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
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 }
attributes #5 = { 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 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #7 = { 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, !12, i64 32}
!10 = !{!"libxsmm_gemm_param", !11, i64 0, !13, i64 32, !13, i64 80, !13, i64 128}
!11 = !{!"libxsmm_matrix_op_arg", !12, i64 0, !12, i64 8, !12, i64 16, !12, i64 24}
!12 = !{!"any pointer", !7, i64 0}
!13 = !{!"libxsmm_matrix_arg", !12, i64 0, !12, i64 8, !12, i64 16, !12, i64 24, !12, i64 32, !12, i64 40}
!14 = !{!10, !12, i64 80}
!15 = !{!10, !12, i64 128}
!16 = !{!10, !12, i64 72}
!17 = !{!10, !12, i64 120}
!18 = !{!10, !12, i64 168}
!19 = distinct !{!19, !20}
!20 = !{!"llvm.loop.mustprogress"}
!21 = distinct !{!21, !20}
!22 = distinct !{!22, !23}
!23 = !{!"llvm.loop.unroll.disable"}
!24 = distinct !{!24, !20}
!25 = distinct !{!25, !20}
!26 = distinct !{!26, !20}
!27 = distinct !{!27, !23}
!28 = distinct !{!28, !20}
!29 = !{!12, !12, i64 0}
!30 = distinct !{!30, !20}
!31 = distinct !{!31, !20}
!32 = distinct !{!32, !23}
!33 = distinct !{!33, !20}
!34 = distinct !{!34, !20}
!35 = distinct !{!35, !20}
!36 = distinct !{!36, !23}
!37 = distinct !{!37, !20}
!38 = distinct !{!38, !20}


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