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

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

%struct.libxsmm_micro_kernel_config = type { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i8, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, [4 x i32], [4 x i32], [4 x i32], [4 x i32], [4 x i32], [4 x i32], i32, [2 x %struct.libxsmm_blocking_info_t], %struct.libxsmm_tile_config, i32, i32, i32, i32, i32, i32, i32, i32, ptr, i32, i32, i32, i32, ptr, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 }
%struct.libxsmm_blocking_info_t = type { i32, [4 x i32], i32, i32 }
%struct.libxsmm_tile_config = type { i8, i16, i8, i16, i8, i16, i8, i16, i8, i16, i8, i16, i8, i16, i8, i16, i8 }
%struct.libxsmm_gemm_descriptor = type <{ i32, i32, i32, i32, i32, i32, i32, i8, [3 x i8], i8, i64, i64, i8, i32, i32, i32, i16, i16, i8, i8, i8, i8, i16, i16, i16, i16, i16, i16, i32, i32, i32, i8 }>
%struct.libxsmm_generated_code = type { ptr, i32, i32, i32, i32, i32, i32 }
%struct.libxsmm_gp_reg_mapping_struct = type { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 }

@__func__.libxsmm_generator_gemm_avx512_microkernel_nofsdbcst = external hidden unnamed_addr constant [52 x i8], align 1
@.str = external hidden unnamed_addr constant [89 x i8], align 1
@libxsmm_ninit = external global i32, align 4
@libxsmm_verbosity = external global i32, align 4
@.str.1 = external hidden unnamed_addr constant [25 x i8], align 1

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

declare i32 @LIBXSMM_GEMM_GETENUM_A_PREC(ptr noundef) #1

declare i32 @LIBXSMM_GEMM_GETENUM_B_PREC(ptr noundef) #1

declare i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef) #1

declare i32 @libxsmm_x86_is_Ai4_Bi8_gemm(ptr noundef) #1

declare i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef) #1

declare i32 @libxsmm_cpuid_dot_pack_factor(i32 noundef) #1

; Function Attrs: nounwind uwtable
define dso_local void @libxsmm_generator_gemm_avx512_microkernel_nofsdbcst(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, i32 noundef %4, i32 noundef %5) #2 {
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca ptr, align 8
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  %14 = alloca i32, align 4
  %15 = alloca i32, align 4
  %16 = alloca i32, align 4
  %17 = alloca i32, align 4
  %18 = alloca i32, align 4
  %19 = alloca i32, align 4
  %20 = alloca i32, align 4
  %21 = alloca i32, align 4
  %22 = alloca i32, align 4
  %23 = alloca i32, align 4
  %24 = alloca i32, align 4
  %25 = alloca i32, align 4
  %26 = alloca i32, align 4
  %27 = alloca i32, align 4
  %28 = alloca i32, align 4
  %29 = alloca i32, align 4
  %30 = alloca i32, align 4
  %31 = alloca i8, align 1
  %32 = alloca i32, align 4
  %33 = alloca i32, align 4
  %34 = alloca ptr, align 8
  %35 = alloca i32, align 4
  %36 = alloca i8, align 1
  %37 = alloca i32, align 4
  %38 = alloca i32, align 4
  %39 = alloca i8, align 1
  %40 = alloca i8, align 1
  %41 = alloca i32, align 4
  %42 = alloca i32, align 4
  %43 = alloca i32, align 4
  %44 = alloca i32, align 4
  %45 = alloca i32, align 4
  store ptr %0, ptr %7, align 8, !tbaa !5
  store ptr %1, ptr %8, align 8, !tbaa !5
  store ptr %2, ptr %9, align 8, !tbaa !5
  store ptr %3, ptr %10, align 8, !tbaa !5
  store i32 %4, ptr %11, align 4, !tbaa !9
  store i32 %5, ptr %12, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #5
  %46 = load i32, ptr %11, align 4, !tbaa !9
  %47 = load ptr, ptr %9, align 8, !tbaa !5
  %48 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %47, i32 0, i32 2
  %49 = load i32, ptr %48, align 8, !tbaa !11
  %50 = urem i32 %46, %49
  %51 = icmp eq i32 %50, 0
  br i1 %51, label %52, label %58

52:                                               ; preds = %6
  %53 = load i32, ptr %11, align 4, !tbaa !9
  %54 = load ptr, ptr %9, align 8, !tbaa !5
  %55 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %54, i32 0, i32 2
  %56 = load i32, ptr %55, align 8, !tbaa !11
  %57 = udiv i32 %53, %56
  br label %65

58:                                               ; preds = %6
  %59 = load i32, ptr %11, align 4, !tbaa !9
  %60 = load ptr, ptr %9, align 8, !tbaa !5
  %61 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %60, i32 0, i32 2
  %62 = load i32, ptr %61, align 8, !tbaa !11
  %63 = udiv i32 %59, %62
  %64 = add i32 %63, 1
  br label %65

65:                                               ; preds = %58, %52
  %66 = phi i32 [ %57, %52 ], [ %64, %58 ]
  store i32 %66, ptr %13, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #5
  store i32 0, ptr %14, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #5
  store i32 0, ptr %15, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #5
  store i32 0, ptr %16, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #5
  %67 = load ptr, ptr %9, align 8, !tbaa !5
  %68 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %67, i32 0, i32 1
  %69 = load i32, ptr %68, align 4, !tbaa !15
  %70 = load i32, ptr %12, align 4, !tbaa !9
  %71 = load i32, ptr %13, align 4, !tbaa !9
  %72 = mul i32 %70, %71
  %73 = sub i32 %69, %72
  store i32 %73, ptr %17, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #5
  store i32 0, ptr %18, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #5
  store i32 0, ptr %19, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #5
  store i32 1, ptr %20, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #5
  %74 = load ptr, ptr %10, align 8, !tbaa !5
  %75 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %74, i32 0, i32 8
  %76 = getelementptr inbounds [3 x i8], ptr %75, i64 0, i64 0
  %77 = call i32 @LIBXSMM_GEMM_GETENUM_A_PREC(ptr noundef %76)
  %78 = icmp eq i32 4, %77
  br i1 %78, label %79, label %85

79:                                               ; preds = %65
  %80 = load ptr, ptr %10, align 8, !tbaa !5
  %81 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %80, i32 0, i32 8
  %82 = getelementptr inbounds [3 x i8], ptr %81, i64 0, i64 0
  %83 = call i32 @LIBXSMM_GEMM_GETENUM_B_PREC(ptr noundef %82)
  %84 = icmp eq i32 3, %83
  br label %85

85:                                               ; preds = %79, %65
  %86 = phi i1 [ false, %65 ], [ %84, %79 ]
  %87 = zext i1 %86 to i64
  %88 = select i1 %86, i32 1, i32 0
  store i32 %88, ptr %21, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #5
  %89 = load ptr, ptr %10, align 8, !tbaa !5
  %90 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %89, i32 0, i32 8
  %91 = getelementptr inbounds [3 x i8], ptr %90, i64 0, i64 0
  %92 = call i32 @LIBXSMM_GEMM_GETENUM_A_PREC(ptr noundef %91)
  %93 = icmp eq i32 12, %92
  br i1 %93, label %94, label %100

94:                                               ; preds = %85
  %95 = load ptr, ptr %10, align 8, !tbaa !5
  %96 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %95, i32 0, i32 8
  %97 = getelementptr inbounds [3 x i8], ptr %96, i64 0, i64 0
  %98 = call i32 @LIBXSMM_GEMM_GETENUM_B_PREC(ptr noundef %97)
  %99 = icmp eq i32 3, %98
  br label %100

100:                                              ; preds = %94, %85
  %101 = phi i1 [ false, %85 ], [ %99, %94 ]
  %102 = zext i1 %101 to i64
  %103 = select i1 %101, i32 1, i32 0
  store i32 %103, ptr %22, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #5
  %104 = load ptr, ptr %10, align 8, !tbaa !5
  %105 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %104, i32 0, i32 6
  %106 = load i32, ptr %105, align 1, !tbaa !16
  %107 = and i32 %106, 2097152
  %108 = icmp ugt i32 %107, 0
  br i1 %108, label %109, label %137

109:                                              ; preds = %100
  %110 = load ptr, ptr %10, align 8, !tbaa !5
  %111 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %110, i32 0, i32 8
  %112 = getelementptr inbounds [3 x i8], ptr %111, i64 0, i64 0
  %113 = call i32 @LIBXSMM_GEMM_GETENUM_A_PREC(ptr noundef %112)
  %114 = icmp eq i32 12, %113
  br i1 %114, label %115, label %135

115:                                              ; preds = %109
  %116 = load ptr, ptr %10, align 8, !tbaa !5
  %117 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %116, i32 0, i32 8
  %118 = getelementptr inbounds [3 x i8], ptr %117, i64 0, i64 0
  %119 = call i32 @LIBXSMM_GEMM_GETENUM_B_PREC(ptr noundef %118)
  %120 = icmp eq i32 3, %119
  br i1 %120, label %121, label %135

121:                                              ; preds = %115
  %122 = load ptr, ptr %10, align 8, !tbaa !5
  %123 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %122, i32 0, i32 8
  %124 = getelementptr inbounds [3 x i8], ptr %123, i64 0, i64 0
  %125 = call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef %124)
  %126 = icmp eq i32 3, %125
  br i1 %126, label %133, label %127

127:                                              ; preds = %121
  %128 = load ptr, ptr %10, align 8, !tbaa !5
  %129 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %128, i32 0, i32 8
  %130 = getelementptr inbounds [3 x i8], ptr %129, i64 0, i64 0
  %131 = call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef %130)
  %132 = icmp eq i32 1, %131
  br label %133

133:                                              ; preds = %127, %121
  %134 = phi i1 [ true, %121 ], [ %132, %127 ]
  br label %135

135:                                              ; preds = %133, %115, %109
  %136 = phi i1 [ false, %115 ], [ false, %109 ], [ %134, %133 ]
  br label %137

137:                                              ; preds = %135, %100
  %138 = phi i1 [ false, %100 ], [ %136, %135 ]
  %139 = zext i1 %138 to i64
  %140 = select i1 %138, i32 1, i32 0
  store i32 %140, ptr %23, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #5
  %141 = load ptr, ptr %10, align 8, !tbaa !5
  %142 = call i32 @libxsmm_x86_is_Ai4_Bi8_gemm(ptr noundef %141)
  store i32 %142, ptr %24, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #5
  %143 = load i32, ptr %23, align 4, !tbaa !9
  %144 = icmp ugt i32 %143, 0
  br i1 %144, label %148, label %145

145:                                              ; preds = %137
  %146 = load i32, ptr %24, align 4, !tbaa !9
  %147 = icmp ugt i32 %146, 0
  br label %148

148:                                              ; preds = %145, %137
  %149 = phi i1 [ true, %137 ], [ %147, %145 ]
  %150 = zext i1 %149 to i64
  %151 = select i1 %149, i32 2, i32 1
  store i32 %151, ptr %25, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #5
  %152 = load ptr, ptr %10, align 8, !tbaa !5
  %153 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %152, i32 0, i32 8
  %154 = getelementptr inbounds [3 x i8], ptr %153, i64 0, i64 0
  %155 = call i32 @LIBXSMM_GEMM_GETENUM_A_PREC(ptr noundef %154)
  %156 = icmp eq i32 3, %155
  br i1 %156, label %157, label %163

157:                                              ; preds = %148
  %158 = load ptr, ptr %10, align 8, !tbaa !5
  %159 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %158, i32 0, i32 8
  %160 = getelementptr inbounds [3 x i8], ptr %159, i64 0, i64 0
  %161 = call i32 @LIBXSMM_GEMM_GETENUM_B_PREC(ptr noundef %160)
  %162 = icmp eq i32 3, %161
  br label %163

163:                                              ; preds = %157, %148
  %164 = phi i1 [ false, %148 ], [ %162, %157 ]
  %165 = zext i1 %164 to i64
  %166 = select i1 %164, i32 1, i32 0
  store i32 %166, ptr %26, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #5
  %167 = load ptr, ptr %10, align 8, !tbaa !5
  %168 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %167, i32 0, i32 8
  %169 = getelementptr inbounds [3 x i8], ptr %168, i64 0, i64 0
  %170 = call i32 @LIBXSMM_GEMM_GETENUM_A_PREC(ptr noundef %169)
  %171 = icmp eq i32 12, %170
  br i1 %171, label %172, label %178

172:                                              ; preds = %163
  %173 = load ptr, ptr %10, align 8, !tbaa !5
  %174 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %173, i32 0, i32 8
  %175 = getelementptr inbounds [3 x i8], ptr %174, i64 0, i64 0
  %176 = call i32 @LIBXSMM_GEMM_GETENUM_B_PREC(ptr noundef %175)
  %177 = icmp eq i32 2, %176
  br label %178

178:                                              ; preds = %172, %163
  %179 = phi i1 [ false, %163 ], [ %177, %172 ]
  %180 = zext i1 %179 to i64
  %181 = select i1 %179, i32 1, i32 0
  store i32 %181, ptr %27, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #5
  %182 = load i32, ptr %27, align 4, !tbaa !9
  %183 = icmp ugt i32 %182, 0
  br i1 %183, label %184, label %189

184:                                              ; preds = %178
  %185 = load ptr, ptr %9, align 8, !tbaa !5
  %186 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %185, i32 0, i32 14
  %187 = load i32, ptr %186, align 8, !tbaa !19
  %188 = icmp eq i32 %187, -268032430
  br label %189

189:                                              ; preds = %184, %178
  %190 = phi i1 [ false, %178 ], [ %188, %184 ]
  %191 = zext i1 %190 to i64
  %192 = select i1 %190, i32 1, i32 0
  store i32 %192, ptr %28, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #5
  %193 = load i32, ptr %22, align 4, !tbaa !9
  %194 = icmp ugt i32 %193, 0
  br i1 %194, label %201, label %195

195:                                              ; preds = %189
  %196 = load i32, ptr %21, align 4, !tbaa !9
  %197 = icmp ugt i32 %196, 0
  br i1 %197, label %201, label %198

198:                                              ; preds = %195
  %199 = load i32, ptr %26, align 4, !tbaa !9
  %200 = icmp ugt i32 %199, 0
  br i1 %200, label %201, label %212

201:                                              ; preds = %198, %195, %189
  %202 = load ptr, ptr %7, align 8, !tbaa !5
  %203 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %202, i32 0, i32 6
  %204 = load i32, ptr %203, align 4, !tbaa !20
  %205 = icmp ult i32 %204, 1104
  br i1 %205, label %206, label %212

206:                                              ; preds = %201
  %207 = load ptr, ptr %10, align 8, !tbaa !5
  %208 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %207, i32 0, i32 8
  %209 = getelementptr inbounds [3 x i8], ptr %208, i64 0, i64 0
  %210 = call i32 @LIBXSMM_GEMM_GETENUM_COMP_PREC(ptr noundef %209)
  %211 = icmp eq i32 3, %210
  br label %212

212:                                              ; preds = %206, %201, %198
  %213 = phi i1 [ false, %201 ], [ false, %198 ], [ %211, %206 ]
  %214 = zext i1 %213 to i64
  %215 = select i1 %213, i32 1, i32 0
  store i32 %215, ptr %29, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #5
  %216 = load i32, ptr %22, align 4, !tbaa !9
  %217 = icmp ugt i32 %216, 0
  br i1 %217, label %224, label %218

218:                                              ; preds = %212
  %219 = load i32, ptr %21, align 4, !tbaa !9
  %220 = icmp ugt i32 %219, 0
  br i1 %220, label %224, label %221

221:                                              ; preds = %218
  %222 = load i32, ptr %26, align 4, !tbaa !9
  %223 = icmp ugt i32 %222, 0
  br i1 %223, label %224, label %230

224:                                              ; preds = %221, %218, %212
  %225 = load ptr, ptr %10, align 8, !tbaa !5
  %226 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %225, i32 0, i32 8
  %227 = getelementptr inbounds [3 x i8], ptr %226, i64 0, i64 0
  %228 = call i32 @LIBXSMM_GEMM_GETENUM_COMP_PREC(ptr noundef %227)
  %229 = icmp eq i32 1, %228
  br label %230

230:                                              ; preds = %224, %221
  %231 = phi i1 [ false, %221 ], [ %229, %224 ]
  %232 = zext i1 %231 to i64
  %233 = select i1 %231, i32 1, i32 0
  store i32 %233, ptr %30, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 1, ptr %31) #5
  %234 = load ptr, ptr %9, align 8, !tbaa !5
  %235 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %234, i32 0, i32 21
  %236 = load i8, ptr %235, align 4, !tbaa !22
  store i8 %236, ptr %31, align 1, !tbaa !23
  %237 = load i32, ptr %22, align 4, !tbaa !9
  %238 = icmp ugt i32 %237, 0
  br i1 %238, label %239, label %278

239:                                              ; preds = %230
  %240 = load i32, ptr %23, align 4, !tbaa !9
  %241 = icmp ugt i32 %240, 0
  br i1 %241, label %242, label %252

242:                                              ; preds = %239
  store i32 3, ptr %18, align 4, !tbaa !9
  %243 = load ptr, ptr %10, align 8, !tbaa !5
  %244 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %243, i32 0, i32 6
  %245 = load i32, ptr %244, align 1, !tbaa !16
  %246 = and i32 %245, 524288
  %247 = icmp ugt i32 %246, 0
  br i1 %247, label %248, label %251

248:                                              ; preds = %242
  %249 = load i32, ptr %13, align 4, !tbaa !9
  %250 = add i32 2, %249
  store i32 %250, ptr %18, align 4, !tbaa !9
  br label %251

251:                                              ; preds = %248, %242
  br label %261

252:                                              ; preds = %239
  store i32 1, ptr %18, align 4, !tbaa !9
  %253 = load ptr, ptr %10, align 8, !tbaa !5
  %254 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %253, i32 0, i32 6
  %255 = load i32, ptr %254, align 1, !tbaa !16
  %256 = and i32 %255, 524288
  %257 = icmp ugt i32 %256, 0
  br i1 %257, label %258, label %260

258:                                              ; preds = %252
  %259 = load i32, ptr %13, align 4, !tbaa !9
  store i32 %259, ptr %18, align 4, !tbaa !9
  br label %260

260:                                              ; preds = %258, %252
  br label %261

261:                                              ; preds = %260, %251
  %262 = load ptr, ptr %10, align 8, !tbaa !5
  %263 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %262, i32 0, i32 6
  %264 = load i32, ptr %263, align 1, !tbaa !16
  %265 = and i32 %264, 1048576
  %266 = icmp ugt i32 %265, 0
  br i1 %266, label %273, label %267

267:                                              ; preds = %261
  %268 = load ptr, ptr %10, align 8, !tbaa !5
  %269 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %268, i32 0, i32 6
  %270 = load i32, ptr %269, align 1, !tbaa !16
  %271 = and i32 %270, 33554432
  %272 = icmp ugt i32 %271, 0
  br i1 %272, label %273, label %277

273:                                              ; preds = %267, %261
  %274 = load i32, ptr %13, align 4, !tbaa !9
  %275 = load i32, ptr %18, align 4, !tbaa !9
  %276 = add i32 %275, %274
  store i32 %276, ptr %18, align 4, !tbaa !9
  br label %277

277:                                              ; preds = %273, %267
  br label %278

278:                                              ; preds = %277, %230
  %279 = load i32, ptr %27, align 4, !tbaa !9
  %280 = icmp ugt i32 %279, 0
  br i1 %280, label %281, label %291

281:                                              ; preds = %278
  store i32 2, ptr %18, align 4, !tbaa !9
  %282 = load ptr, ptr %10, align 8, !tbaa !5
  %283 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %282, i32 0, i32 6
  %284 = load i32, ptr %283, align 1, !tbaa !16
  %285 = and i32 %284, 524288
  %286 = icmp ugt i32 %285, 0
  br i1 %286, label %287, label %290

287:                                              ; preds = %281
  %288 = load i32, ptr %13, align 4, !tbaa !9
  %289 = add i32 1, %288
  store i32 %289, ptr %18, align 4, !tbaa !9
  br label %290

290:                                              ; preds = %287, %281
  br label %291

291:                                              ; preds = %290, %278
  %292 = load i32, ptr %24, align 4, !tbaa !9
  %293 = icmp ugt i32 %292, 0
  br i1 %293, label %294, label %311

294:                                              ; preds = %291
  store i32 3, ptr %18, align 4, !tbaa !9
  %295 = load ptr, ptr %10, align 8, !tbaa !5
  %296 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %295, i32 0, i32 6
  %297 = load i32, ptr %296, align 1, !tbaa !16
  %298 = and i32 %297, 1048576
  %299 = icmp ugt i32 %298, 0
  br i1 %299, label %306, label %300

300:                                              ; preds = %294
  %301 = load ptr, ptr %10, align 8, !tbaa !5
  %302 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %301, i32 0, i32 6
  %303 = load i32, ptr %302, align 1, !tbaa !16
  %304 = and i32 %303, 33554432
  %305 = icmp ugt i32 %304, 0
  br i1 %305, label %306, label %310

306:                                              ; preds = %300, %294
  %307 = load i32, ptr %13, align 4, !tbaa !9
  %308 = load i32, ptr %18, align 4, !tbaa !9
  %309 = add i32 %308, %307
  store i32 %309, ptr %18, align 4, !tbaa !9
  br label %310

310:                                              ; preds = %306, %300
  br label %311

311:                                              ; preds = %310, %291
  %312 = load i32, ptr %12, align 4, !tbaa !9
  %313 = icmp ugt i32 %312, 30
  br i1 %313, label %317, label %314

314:                                              ; preds = %311
  %315 = load i32, ptr %12, align 4, !tbaa !9
  %316 = icmp ult i32 %315, 1
  br i1 %316, label %317, label %326

317:                                              ; preds = %314, %311
  %318 = load ptr, ptr %7, align 8, !tbaa !5
  %319 = load i32, ptr @libxsmm_ninit, align 4, !tbaa !9
  %320 = icmp ult i32 1, %319
  br i1 %320, label %321, label %323

321:                                              ; preds = %317
  %322 = load i32, ptr @libxsmm_verbosity, align 4, !tbaa !9
  br label %324

323:                                              ; preds = %317
  br label %324

324:                                              ; preds = %323, %321
  %325 = phi i32 [ %322, %321 ], [ 1, %323 ]
  call void @libxsmm_handle_error(ptr noundef %318, i32 noundef 90016, ptr noundef @__func__.libxsmm_generator_gemm_avx512_microkernel_nofsdbcst, ptr noundef @.str, i32 noundef 436, i32 noundef %325)
  store i32 1, ptr %32, align 4
  br label %1454

326:                                              ; preds = %314
  %327 = load ptr, ptr %7, align 8, !tbaa !5
  %328 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %327, i32 0, i32 6
  %329 = load i32, ptr %328, align 4, !tbaa !20
  %330 = icmp uge i32 %329, 1051
  br i1 %330, label %331, label %442

331:                                              ; preds = %326
  %332 = load ptr, ptr %7, align 8, !tbaa !5
  %333 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %332, i32 0, i32 6
  %334 = load i32, ptr %333, align 4, !tbaa !20
  %335 = icmp ult i32 %334, 1101
  br i1 %335, label %336, label %442

336:                                              ; preds = %331
  %337 = load i32, ptr %27, align 4, !tbaa !9
  %338 = icmp ugt i32 %337, 0
  br i1 %338, label %339, label %357

339:                                              ; preds = %336
  %340 = load i32, ptr %13, align 4, !tbaa !9
  %341 = load i32, ptr %12, align 4, !tbaa !9
  %342 = mul i32 %340, %341
  %343 = load i32, ptr %13, align 4, !tbaa !9
  %344 = add i32 %342, %343
  %345 = add i32 %344, 1
  %346 = icmp ugt i32 %345, 32
  br i1 %346, label %347, label %356

347:                                              ; preds = %339
  %348 = load ptr, ptr %7, align 8, !tbaa !5
  %349 = load i32, ptr @libxsmm_ninit, align 4, !tbaa !9
  %350 = icmp ult i32 1, %349
  br i1 %350, label %351, label %353

351:                                              ; preds = %347
  %352 = load i32, ptr @libxsmm_verbosity, align 4, !tbaa !9
  br label %354

353:                                              ; preds = %347
  br label %354

354:                                              ; preds = %353, %351
  %355 = phi i32 [ %352, %351 ], [ 1, %353 ]
  call void @libxsmm_handle_error(ptr noundef %348, i32 noundef 90019, ptr noundef @__func__.libxsmm_generator_gemm_avx512_microkernel_nofsdbcst, ptr noundef @.str, i32 noundef 443, i32 noundef %355)
  store i32 1, ptr %32, align 4
  br label %1454

356:                                              ; preds = %339
  br label %426

357:                                              ; preds = %336
  %358 = load i32, ptr %23, align 4, !tbaa !9
  %359 = icmp ugt i32 %358, 0
  br i1 %359, label %360, label %407

360:                                              ; preds = %357
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #5
  %361 = load ptr, ptr %10, align 8, !tbaa !5
  %362 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %361, i32 0, i32 6
  %363 = load i32, ptr %362, align 1, !tbaa !16
  %364 = and i32 %363, 524288
  %365 = icmp eq i32 %364, 0
  br i1 %365, label %366, label %369

366:                                              ; preds = %360
  %367 = load i32, ptr %13, align 4, !tbaa !9
  %368 = add i32 3, %367
  br label %373

369:                                              ; preds = %360
  %370 = load i32, ptr %13, align 4, !tbaa !9
  %371 = mul i32 2, %370
  %372 = add i32 2, %371
  br label %373

373:                                              ; preds = %369, %366
  %374 = phi i32 [ %368, %366 ], [ %372, %369 ]
  store i32 %374, ptr %33, align 4, !tbaa !9
  %375 = load ptr, ptr %10, align 8, !tbaa !5
  %376 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %375, i32 0, i32 6
  %377 = load i32, ptr %376, align 1, !tbaa !16
  %378 = and i32 %377, 1048576
  %379 = icmp ugt i32 %378, 0
  br i1 %379, label %380, label %384

380:                                              ; preds = %373
  %381 = load i32, ptr %13, align 4, !tbaa !9
  %382 = load i32, ptr %33, align 4, !tbaa !9
  %383 = add i32 %382, %381
  store i32 %383, ptr %33, align 4, !tbaa !9
  br label %384

384:                                              ; preds = %380, %373
  %385 = load i32, ptr %13, align 4, !tbaa !9
  %386 = load i32, ptr %12, align 4, !tbaa !9
  %387 = mul i32 %385, %386
  %388 = load i32, ptr %13, align 4, !tbaa !9
  %389 = add i32 %387, %388
  %390 = add i32 %389, 1
  %391 = load i32, ptr %33, align 4, !tbaa !9
  %392 = add i32 %390, %391
  %393 = icmp ugt i32 %392, 32
  br i1 %393, label %394, label %403

394:                                              ; preds = %384
  %395 = load ptr, ptr %7, align 8, !tbaa !5
  %396 = load i32, ptr @libxsmm_ninit, align 4, !tbaa !9
  %397 = icmp ult i32 1, %396
  br i1 %397, label %398, label %400

398:                                              ; preds = %394
  %399 = load i32, ptr @libxsmm_verbosity, align 4, !tbaa !9
  br label %401

400:                                              ; preds = %394
  br label %401

401:                                              ; preds = %400, %398
  %402 = phi i32 [ %399, %398 ], [ 1, %400 ]
  call void @libxsmm_handle_error(ptr noundef %395, i32 noundef 90019, ptr noundef @__func__.libxsmm_generator_gemm_avx512_microkernel_nofsdbcst, ptr noundef @.str, i32 noundef 452, i32 noundef %402)
  store i32 1, ptr %32, align 4
  br label %404

403:                                              ; preds = %384
  store i32 0, ptr %32, align 4
  br label %404

404:                                              ; preds = %403, %401
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #5
  %405 = load i32, ptr %32, align 4
  switch i32 %405, label %1454 [
    i32 0, label %406
  ]

406:                                              ; preds = %404
  br label %425

407:                                              ; preds = %357
  %408 = load i32, ptr %13, align 4, !tbaa !9
  %409 = load i32, ptr %12, align 4, !tbaa !9
  %410 = mul i32 %408, %409
  %411 = load i32, ptr %12, align 4, !tbaa !9
  %412 = add i32 %410, %411
  %413 = add i32 %412, 1
  %414 = icmp ugt i32 %413, 32
  br i1 %414, label %415, label %424

415:                                              ; preds = %407
  %416 = load ptr, ptr %7, align 8, !tbaa !5
  %417 = load i32, ptr @libxsmm_ninit, align 4, !tbaa !9
  %418 = icmp ult i32 1, %417
  br i1 %418, label %419, label %421

419:                                              ; preds = %415
  %420 = load i32, ptr @libxsmm_verbosity, align 4, !tbaa !9
  br label %422

421:                                              ; preds = %415
  br label %422

422:                                              ; preds = %421, %419
  %423 = phi i32 [ %420, %419 ], [ 1, %421 ]
  call void @libxsmm_handle_error(ptr noundef %416, i32 noundef 90019, ptr noundef @__func__.libxsmm_generator_gemm_avx512_microkernel_nofsdbcst, ptr noundef @.str, i32 noundef 457, i32 noundef %423)
  store i32 1, ptr %32, align 4
  br label %1454

424:                                              ; preds = %407
  br label %425

425:                                              ; preds = %424, %406
  br label %426

426:                                              ; preds = %425, %356
  %427 = load i32, ptr %13, align 4, !tbaa !9
  %428 = icmp ult i32 %427, 1
  br i1 %428, label %432, label %429

429:                                              ; preds = %426
  %430 = load i32, ptr %13, align 4, !tbaa !9
  %431 = icmp ugt i32 %430, 8
  br i1 %431, label %432, label %441

432:                                              ; preds = %429, %426
  %433 = load ptr, ptr %7, align 8, !tbaa !5
  %434 = load i32, ptr @libxsmm_ninit, align 4, !tbaa !9
  %435 = icmp ult i32 1, %434
  br i1 %435, label %436, label %438

436:                                              ; preds = %432
  %437 = load i32, ptr @libxsmm_verbosity, align 4, !tbaa !9
  br label %439

438:                                              ; preds = %432
  br label %439

439:                                              ; preds = %438, %436
  %440 = phi i32 [ %437, %436 ], [ 1, %438 ]
  call void @libxsmm_handle_error(ptr noundef %433, i32 noundef 90017, ptr noundef @__func__.libxsmm_generator_gemm_avx512_microkernel_nofsdbcst, ptr noundef @.str, i32 noundef 462, i32 noundef %440)
  store i32 1, ptr %32, align 4
  br label %1454

441:                                              ; preds = %429
  br label %478

442:                                              ; preds = %331, %326
  %443 = load i32, ptr %13, align 4, !tbaa !9
  %444 = icmp ult i32 %443, 1
  br i1 %444, label %448, label %445

445:                                              ; preds = %442
  %446 = load i32, ptr %13, align 4, !tbaa !9
  %447 = icmp ugt i32 %446, 4
  br i1 %447, label %448, label %457

448:                                              ; preds = %445, %442
  %449 = load ptr, ptr %7, align 8, !tbaa !5
  %450 = load i32, ptr @libxsmm_ninit, align 4, !tbaa !9
  %451 = icmp ult i32 1, %450
  br i1 %451, label %452, label %454

452:                                              ; preds = %448
  %453 = load i32, ptr @libxsmm_verbosity, align 4, !tbaa !9
  br label %455

454:                                              ; preds = %448
  br label %455

455:                                              ; preds = %454, %452
  %456 = phi i32 [ %453, %452 ], [ 1, %454 ]
  call void @libxsmm_handle_error(ptr noundef %449, i32 noundef 90017, ptr noundef @__func__.libxsmm_generator_gemm_avx512_microkernel_nofsdbcst, ptr noundef @.str, i32 noundef 467, i32 noundef %456)
  store i32 1, ptr %32, align 4
  br label %1454

457:                                              ; preds = %445
  %458 = load i32, ptr %13, align 4, !tbaa !9
  %459 = load i32, ptr %12, align 4, !tbaa !9
  %460 = mul i32 %458, %459
  %461 = load i32, ptr %13, align 4, !tbaa !9
  %462 = add i32 %460, %461
  %463 = add i32 %462, 1
  %464 = icmp ugt i32 %463, 32
  br i1 %464, label %465, label %477

465:                                              ; preds = %457
  %466 = load i32, ptr %12, align 4, !tbaa !9
  %467 = icmp ult i32 %466, 7
  br i1 %467, label %468, label %477

468:                                              ; preds = %465
  %469 = load ptr, ptr %7, align 8, !tbaa !5
  %470 = load i32, ptr @libxsmm_ninit, align 4, !tbaa !9
  %471 = icmp ult i32 1, %470
  br i1 %471, label %472, label %474

472:                                              ; preds = %468
  %473 = load i32, ptr @libxsmm_verbosity, align 4, !tbaa !9
  br label %475

474:                                              ; preds = %468
  br label %475

475:                                              ; preds = %474, %472
  %476 = phi i32 [ %473, %472 ], [ 1, %474 ]
  call void @libxsmm_handle_error(ptr noundef %469, i32 noundef 90019, ptr noundef @__func__.libxsmm_generator_gemm_avx512_microkernel_nofsdbcst, ptr noundef @.str, i32 noundef 471, i32 noundef %476)
  store i32 1, ptr %32, align 4
  br label %1454

477:                                              ; preds = %465, %457
  br label %478

478:                                              ; preds = %477, %441
  %479 = load ptr, ptr %10, align 8, !tbaa !5
  %480 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %479, i32 0, i32 6
  %481 = load i32, ptr %480, align 1, !tbaa !16
  %482 = and i32 %481, 2048
  %483 = icmp eq i32 %482, 2048
  br i1 %483, label %484, label %490

484:                                              ; preds = %478
  %485 = load ptr, ptr %10, align 8, !tbaa !5
  %486 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %485, i32 0, i32 8
  %487 = getelementptr inbounds [3 x i8], ptr %486, i64 0, i64 0
  %488 = call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef %487)
  %489 = call i32 @libxsmm_cpuid_dot_pack_factor(i32 noundef %488)
  store i32 %489, ptr %20, align 4, !tbaa !9
  br label %490

490:                                              ; preds = %484, %478
  store i32 0, ptr %15, align 4, !tbaa !9
  br label %491

491:                                              ; preds = %924, %490
  %492 = load i32, ptr %15, align 4, !tbaa !9
  %493 = load i32, ptr %13, align 4, !tbaa !9
  %494 = icmp ult i32 %492, %493
  br i1 %494, label %495, label %927

495:                                              ; preds = %491
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #5
  %496 = call ptr @getenv(ptr noundef @.str.1) #5
  store ptr %496, ptr %34, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #5
  %497 = load ptr, ptr %34, align 8, !tbaa !5
  %498 = icmp eq ptr %497, null
  br i1 %498, label %499, label %500

499:                                              ; preds = %495
  br label %503

500:                                              ; preds = %495
  %501 = load ptr, ptr %34, align 8, !tbaa !5
  %502 = call i32 @atoi(ptr noundef %501) #6
  br label %503

503:                                              ; preds = %500, %499
  %504 = phi i32 [ 0, %499 ], [ %502, %500 ]
  store i32 %504, ptr %35, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 1, ptr %36) #5
  %505 = load i32, ptr %22, align 4, !tbaa !9
  %506 = icmp eq i32 %505, 0
  br i1 %506, label %507, label %515

507:                                              ; preds = %503
  %508 = load i32, ptr %21, align 4, !tbaa !9
  %509 = icmp eq i32 %508, 0
  br i1 %509, label %510, label %515

510:                                              ; preds = %507
  %511 = load ptr, ptr %9, align 8, !tbaa !5
  %512 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %511, i32 0, i32 21
  %513 = load i8, ptr %512, align 4, !tbaa !22
  %514 = sext i8 %513 to i32
  br label %549

515:                                              ; preds = %507, %503
  %516 = load i32, ptr %30, align 4, !tbaa !9
  %517 = icmp ne i32 %516, 0
  br i1 %517, label %518, label %526

518:                                              ; preds = %515
  %519 = load ptr, ptr %9, align 8, !tbaa !5
  %520 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %519, i32 0, i32 21
  %521 = load i8, ptr %520, align 4, !tbaa !22
  %522 = sext i8 %521 to i32
  %523 = icmp eq i32 %522, 122
  %524 = zext i1 %523 to i64
  %525 = select i1 %523, i32 120, i32 120
  br label %547

526:                                              ; preds = %515
  %527 = load i32, ptr %29, align 4, !tbaa !9
  %528 = icmp ugt i32 %527, 0
  br i1 %528, label %529, label %537

529:                                              ; preds = %526
  %530 = load ptr, ptr %9, align 8, !tbaa !5
  %531 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %530, i32 0, i32 21
  %532 = load i8, ptr %531, align 4, !tbaa !22
  %533 = sext i8 %532 to i32
  %534 = icmp eq i32 %533, 122
  %535 = zext i1 %534 to i64
  %536 = select i1 %534, i32 120, i32 120
  br label %545

537:                                              ; preds = %526
  %538 = load ptr, ptr %9, align 8, !tbaa !5
  %539 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %538, i32 0, i32 21
  %540 = load i8, ptr %539, align 4, !tbaa !22
  %541 = sext i8 %540 to i32
  %542 = icmp eq i32 %541, 122
  %543 = zext i1 %542 to i64
  %544 = select i1 %542, i32 121, i32 120
  br label %545

545:                                              ; preds = %537, %529
  %546 = phi i32 [ %536, %529 ], [ %544, %537 ]
  br label %547

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

549:                                              ; preds = %547, %510
  %550 = phi i32 [ %514, %510 ], [ %548, %547 ]
  %551 = trunc i32 %550 to i8
  store i8 %551, ptr %36, align 1, !tbaa !23
  call void @llvm.lifetime.start.p0(i64 4, ptr %37) #5
  %552 = load i32, ptr %22, align 4, !tbaa !9
  %553 = icmp ugt i32 %552, 0
  br i1 %553, label %557, label %554

554:                                              ; preds = %549
  %555 = load i32, ptr %21, align 4, !tbaa !9
  %556 = icmp ugt i32 %555, 0
  br i1 %556, label %557, label %568

557:                                              ; preds = %554, %549
  %558 = load ptr, ptr %7, align 8, !tbaa !5
  %559 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %558, i32 0, i32 6
  %560 = load i32, ptr %559, align 4, !tbaa !20
  %561 = icmp ult i32 %560, 1101
  br i1 %561, label %562, label %568

562:                                              ; preds = %557
  %563 = load i32, ptr %15, align 4, !tbaa !9
  %564 = load i32, ptr %13, align 4, !tbaa !9
  %565 = sub i32 %564, 1
  %566 = icmp ne i32 %563, %565
  br i1 %566, label %567, label %568

567:                                              ; preds = %562
  br label %572

568:                                              ; preds = %562, %557, %554
  %569 = load ptr, ptr %9, align 8, !tbaa !5
  %570 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %569, i32 0, i32 6
  %571 = load i32, ptr %570, align 8, !tbaa !24
  br label %572

572:                                              ; preds = %568, %567
  %573 = phi i32 [ 545725200, %567 ], [ %571, %568 ]
  store i32 %573, ptr %37, align 4, !tbaa !9
  %574 = load i32, ptr %26, align 4, !tbaa !9
  %575 = icmp ugt i32 %574, 0
  br i1 %575, label %576, label %592

576:                                              ; preds = %572
  %577 = load i32, ptr %30, align 4, !tbaa !9
  %578 = icmp ugt i32 %577, 0
  br i1 %578, label %582, label %579

579:                                              ; preds = %576
  %580 = load i32, ptr %29, align 4, !tbaa !9
  %581 = icmp ugt i32 %580, 0
  br i1 %581, label %582, label %591

582:                                              ; preds = %579, %576
  %583 = load ptr, ptr %9, align 8, !tbaa !5
  %584 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %583, i32 0, i32 21
  %585 = load i8, ptr %584, align 4, !tbaa !22
  %586 = sext i8 %585 to i32
  %587 = icmp eq i32 %586, 122
  %588 = zext i1 %587 to i64
  %589 = select i1 %587, i32 121, i32 120
  %590 = trunc i32 %589 to i8
  store i8 %590, ptr %36, align 1, !tbaa !23
  br label %591

591:                                              ; preds = %582, %579
  br label %592

592:                                              ; preds = %591, %572
  %593 = load i32, ptr %29, align 4, !tbaa !9
  %594 = icmp ugt i32 %593, 0
  br i1 %594, label %595, label %621

595:                                              ; preds = %592
  %596 = load i8, ptr %36, align 1, !tbaa !23
  %597 = sext i8 %596 to i32
  %598 = icmp eq i32 %597, 121
  br i1 %598, label %599, label %600

599:                                              ; preds = %595
  br label %618

600:                                              ; preds = %595
  %601 = load i8, ptr %36, align 1, !tbaa !23
  %602 = sext i8 %601 to i32
  %603 = icmp eq i32 %602, 120
  br i1 %603, label %604, label %611

604:                                              ; preds = %600
  %605 = load ptr, ptr %7, align 8, !tbaa !5
  %606 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %605, i32 0, i32 6
  %607 = load i32, ptr %606, align 4, !tbaa !20
  %608 = icmp ult i32 %607, 1101
  %609 = zext i1 %608 to i64
  %610 = select i1 %608, i32 121, i32 122
  br label %616

611:                                              ; preds = %600
  %612 = load ptr, ptr %9, align 8, !tbaa !5
  %613 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %612, i32 0, i32 21
  %614 = load i8, ptr %613, align 4, !tbaa !22
  %615 = sext i8 %614 to i32
  br label %616

616:                                              ; preds = %611, %604
  %617 = phi i32 [ %610, %604 ], [ %615, %611 ]
  br label %618

618:                                              ; preds = %616, %599
  %619 = phi i32 [ 122, %599 ], [ %617, %616 ]
  %620 = trunc i32 %619 to i8
  store i8 %620, ptr %31, align 1, !tbaa !23
  br label %621

621:                                              ; preds = %618, %592
  %622 = load i32, ptr %27, align 4, !tbaa !9
  %623 = icmp ugt i32 %622, 0
  br i1 %623, label %624, label %636

624:                                              ; preds = %621
  %625 = load ptr, ptr %7, align 8, !tbaa !5
  %626 = load ptr, ptr %8, align 8, !tbaa !5
  %627 = load ptr, ptr %9, align 8, !tbaa !5
  %628 = load ptr, ptr %10, align 8, !tbaa !5
  %629 = load i32, ptr %15, align 4, !tbaa !9
  %630 = add i32 1, %629
  %631 = load i32, ptr %18, align 4, !tbaa !9
  %632 = add i32 %630, %631
  %633 = load i32, ptr %18, align 4, !tbaa !9
  %634 = load i32, ptr %13, align 4, !tbaa !9
  %635 = load i32, ptr %15, align 4, !tbaa !9
  call void @libxsmm_generator_gemm_avx512_microkernel_loadNinterleave_A_pair_k_i8_to_bf16(ptr noundef %625, ptr noundef %626, ptr noundef %627, ptr noundef %628, i32 noundef %632, i32 noundef %633, i32 noundef 0, i32 noundef %634, i32 noundef %635)
  br label %872

636:                                              ; preds = %621
  %637 = load ptr, ptr %10, align 8, !tbaa !5
  %638 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %637, i32 0, i32 6
  %639 = load i32, ptr %638, align 1, !tbaa !16
  %640 = and i32 %639, 8388608
  %641 = icmp ne i32 %640, 0
  br i1 %641, label %642, label %792

642:                                              ; preds = %636
  call void @llvm.lifetime.start.p0(i64 4, ptr %38) #5
  %643 = load i32, ptr %15, align 4, !tbaa !9
  %644 = add i32 3, %643
  %645 = urem i32 %644, 8
  store i32 %645, ptr %38, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 1, ptr %39) #5
  %646 = load ptr, ptr %10, align 8, !tbaa !5
  %647 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %646, i32 0, i32 8
  %648 = getelementptr inbounds [3 x i8], ptr %647, i64 0, i64 0
  %649 = call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef %648)
  %650 = icmp eq i32 2, %649
  br i1 %650, label %651, label %665

651:                                              ; preds = %642
  %652 = load ptr, ptr %10, align 8, !tbaa !5
  %653 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %652, i32 0, i32 6
  %654 = load i32, ptr %653, align 1, !tbaa !16
  %655 = and i32 %654, 8388608
  %656 = icmp ugt i32 %655, 0
  br i1 %656, label %657, label %665

657:                                              ; preds = %651
  %658 = load ptr, ptr %9, align 8, !tbaa !5
  %659 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %658, i32 0, i32 21
  %660 = load i8, ptr %659, align 4, !tbaa !22
  %661 = sext i8 %660 to i32
  %662 = icmp eq i32 %661, 122
  %663 = zext i1 %662 to i64
  %664 = select i1 %662, i32 121, i32 120
  br label %670

665:                                              ; preds = %651, %642
  %666 = load ptr, ptr %9, align 8, !tbaa !5
  %667 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %666, i32 0, i32 21
  %668 = load i8, ptr %667, align 4, !tbaa !22
  %669 = sext i8 %668 to i32
  br label %670

670:                                              ; preds = %665, %657
  %671 = phi i32 [ %664, %657 ], [ %669, %665 ]
  %672 = trunc i32 %671 to i8
  store i8 %672, ptr %39, align 1, !tbaa !23
  %673 = load ptr, ptr %7, align 8, !tbaa !5
  %674 = load ptr, ptr %10, align 8, !tbaa !5
  %675 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %674, i32 0, i32 8
  %676 = getelementptr inbounds [3 x i8], ptr %675, i64 0, i64 0
  %677 = call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef %676)
  %678 = icmp eq i32 3, %677
  %679 = zext i1 %678 to i64
  %680 = select i1 %678, i32 -1601891952, i32 -1610346096
  %681 = load ptr, ptr %8, align 8, !tbaa !5
  %682 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %681, i32 0, i32 29
  %683 = load i32, ptr %682, align 4, !tbaa !25
  %684 = load ptr, ptr %9, align 8, !tbaa !5
  %685 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %684, i32 0, i32 2
  %686 = load i32, ptr %685, align 8, !tbaa !11
  %687 = udiv i32 %686, 8
  %688 = load i32, ptr %15, align 4, !tbaa !9
  %689 = mul i32 %687, %688
  %690 = load i32, ptr %20, align 4, !tbaa !9
  %691 = mul i32 %689, %690
  %692 = load i32, ptr %38, align 4, !tbaa !9
  call void @libxsmm_x86_instruction_mask_move_mem(ptr noundef %673, i32 noundef %680, i32 noundef %683, i32 noundef 127, i32 noundef 0, i32 noundef %691, i32 noundef %692)
  %693 = load ptr, ptr %7, align 8, !tbaa !5
  %694 = load ptr, ptr %8, align 8, !tbaa !5
  %695 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %694, i32 0, i32 29
  %696 = load i32, ptr %695, align 4, !tbaa !25
  %697 = load ptr, ptr %9, align 8, !tbaa !5
  %698 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %697, i32 0, i32 2
  %699 = load i32, ptr %698, align 8, !tbaa !11
  %700 = udiv i32 %699, 8
  %701 = load i32, ptr %15, align 4, !tbaa !9
  %702 = mul i32 %700, %701
  %703 = load i32, ptr %20, align 4, !tbaa !9
  %704 = mul i32 %702, %703
  %705 = add i32 %704, 1024
  call void @libxsmm_x86_instruction_prefetch(ptr noundef %693, i32 noundef -1810624488, i32 noundef %696, i32 noundef 127, i32 noundef 0, i32 noundef %705)
  %706 = load ptr, ptr %7, align 8, !tbaa !5
  %707 = load ptr, ptr %10, align 8, !tbaa !5
  %708 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %707, i32 0, i32 8
  %709 = getelementptr inbounds [3 x i8], ptr %708, i64 0, i64 0
  %710 = call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef %709)
  %711 = icmp eq i32 3, %710
  br i1 %711, label %718, label %712

712:                                              ; preds = %670
  %713 = load ptr, ptr %10, align 8, !tbaa !5
  %714 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %713, i32 0, i32 8
  %715 = getelementptr inbounds [3 x i8], ptr %714, i64 0, i64 0
  %716 = call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef %715)
  %717 = icmp eq i32 2, %716
  br label %718

718:                                              ; preds = %712, %670
  %719 = phi i1 [ true, %670 ], [ %717, %712 ]
  %720 = zext i1 %719 to i64
  %721 = select i1 %719, i32 -528144030, i32 -536532343
  %722 = load i8, ptr %39, align 1, !tbaa !23
  %723 = load ptr, ptr %8, align 8, !tbaa !5
  %724 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %723, i32 0, i32 1
  %725 = load i32, ptr %724, align 4, !tbaa !27
  %726 = load ptr, ptr %8, align 8, !tbaa !5
  %727 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %726, i32 0, i32 31
  %728 = load i32, ptr %727, align 4, !tbaa !28
  %729 = load ptr, ptr %9, align 8, !tbaa !5
  %730 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %729, i32 0, i32 3
  %731 = load i32, ptr %730, align 4, !tbaa !29
  %732 = load i32, ptr %15, align 4, !tbaa !9
  %733 = add i32 1, %732
  %734 = load i32, ptr %18, align 4, !tbaa !9
  %735 = add i32 %733, %734
  %736 = load i32, ptr %38, align 4, !tbaa !9
  call void @libxsmm_x86_instruction_vec_compute_mem_2reg_mask_imm8(ptr noundef %706, i32 noundef %721, i8 noundef signext %722, i32 noundef %725, i32 noundef %728, i32 noundef %731, i32 noundef 0, i32 noundef 0, i32 noundef 255, i32 noundef %735, i32 noundef %736, i32 noundef 1, i32 noundef 0)
  %737 = load ptr, ptr %10, align 8, !tbaa !5
  %738 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %737, i32 0, i32 8
  %739 = getelementptr inbounds [3 x i8], ptr %738, i64 0, i64 0
  %740 = call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef %739)
  %741 = icmp eq i32 2, %740
  br i1 %741, label %742, label %755

742:                                              ; preds = %718
  %743 = load ptr, ptr %7, align 8, !tbaa !5
  %744 = load ptr, ptr %9, align 8, !tbaa !5
  %745 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %744, i32 0, i32 21
  %746 = load i8, ptr %745, align 4, !tbaa !22
  %747 = load i32, ptr %15, align 4, !tbaa !9
  %748 = add i32 1, %747
  %749 = load i32, ptr %18, align 4, !tbaa !9
  %750 = add i32 %748, %749
  %751 = load i32, ptr %15, align 4, !tbaa !9
  %752 = add i32 1, %751
  %753 = load i32, ptr %18, align 4, !tbaa !9
  %754 = add i32 %752, %753
  call void @libxsmm_generator_cvtbf16ps_sse_avx2_avx512(ptr noundef %743, i8 noundef signext %746, i32 noundef %750, i32 noundef %754)
  br label %755

755:                                              ; preds = %742, %718
  %756 = load ptr, ptr %7, align 8, !tbaa !5
  %757 = load ptr, ptr %8, align 8, !tbaa !5
  %758 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %757, i32 0, i32 1
  %759 = load i32, ptr %758, align 4, !tbaa !27
  %760 = load ptr, ptr %8, align 8, !tbaa !5
  %761 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %760, i32 0, i32 31
  %762 = load i32, ptr %761, align 4, !tbaa !28
  %763 = load ptr, ptr %9, align 8, !tbaa !5
  %764 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %763, i32 0, i32 3
  %765 = load i32, ptr %764, align 4, !tbaa !29
  call void @libxsmm_x86_instruction_prefetch(ptr noundef %756, i32 noundef -1810624488, i32 noundef %759, i32 noundef %762, i32 noundef %765, i32 noundef 1024)
  %766 = load ptr, ptr %7, align 8, !tbaa !5
  %767 = load ptr, ptr %10, align 8, !tbaa !5
  %768 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %767, i32 0, i32 8
  %769 = getelementptr inbounds [3 x i8], ptr %768, i64 0, i64 0
  %770 = call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef %769)
  %771 = icmp eq i32 3, %770
  %772 = zext i1 %771 to i64
  %773 = select i1 %771, i32 -1475931757, i32 -1476128365
  %774 = load ptr, ptr %8, align 8, !tbaa !5
  %775 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %774, i32 0, i32 32
  %776 = load i32, ptr %775, align 4, !tbaa !30
  %777 = load i32, ptr %38, align 4, !tbaa !9
  call void @libxsmm_x86_instruction_mask_move(ptr noundef %766, i32 noundef %773, i32 noundef %776, i32 noundef %777)
  %778 = load ptr, ptr %7, align 8, !tbaa !5
  %779 = load ptr, ptr %8, align 8, !tbaa !5
  %780 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %779, i32 0, i32 32
  %781 = load i32, ptr %780, align 4, !tbaa !30
  %782 = load ptr, ptr %8, align 8, !tbaa !5
  %783 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %782, i32 0, i32 32
  %784 = load i32, ptr %783, align 4, !tbaa !30
  call void @libxsmm_x86_instruction_alu_reg(ptr noundef %778, i32 noundef 30004, i32 noundef %781, i32 noundef %784)
  %785 = load ptr, ptr %7, align 8, !tbaa !5
  %786 = load ptr, ptr %8, align 8, !tbaa !5
  %787 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %786, i32 0, i32 32
  %788 = load i32, ptr %787, align 4, !tbaa !30
  %789 = load ptr, ptr %8, align 8, !tbaa !5
  %790 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %789, i32 0, i32 31
  %791 = load i32, ptr %790, align 4, !tbaa !28
  call void @libxsmm_x86_instruction_alu_reg(ptr noundef %785, i32 noundef 30000, i32 noundef %788, i32 noundef %791)
  call void @llvm.lifetime.end.p0(i64 1, ptr %39) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #5
  br label %871

792:                                              ; preds = %636
  %793 = load ptr, ptr %7, align 8, !tbaa !5
  %794 = load ptr, ptr %9, align 8, !tbaa !5
  %795 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %794, i32 0, i32 0
  %796 = load i32, ptr %795, align 8, !tbaa !31
  %797 = load i32, ptr %37, align 4, !tbaa !9
  %798 = load ptr, ptr %8, align 8, !tbaa !5
  %799 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %798, i32 0, i32 1
  %800 = load i32, ptr %799, align 4, !tbaa !27
  %801 = load ptr, ptr %9, align 8, !tbaa !5
  %802 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %801, i32 0, i32 3
  %803 = load i32, ptr %802, align 4, !tbaa !29
  %804 = load ptr, ptr %9, align 8, !tbaa !5
  %805 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %804, i32 0, i32 2
  %806 = load i32, ptr %805, align 8, !tbaa !11
  %807 = mul i32 %803, %806
  %808 = load i32, ptr %15, align 4, !tbaa !9
  %809 = mul i32 %807, %808
  %810 = load i32, ptr %20, align 4, !tbaa !9
  %811 = mul i32 %809, %810
  %812 = load i8, ptr %36, align 1, !tbaa !23
  %813 = load i32, ptr %15, align 4, !tbaa !9
  %814 = add i32 1, %813
  %815 = load i32, ptr %18, align 4, !tbaa !9
  %816 = add i32 %814, %815
  %817 = load i32, ptr %15, align 4, !tbaa !9
  %818 = load i32, ptr %13, align 4, !tbaa !9
  %819 = sub i32 %818, 1
  %820 = icmp eq i32 %817, %819
  br i1 %820, label %821, label %825

821:                                              ; preds = %792
  %822 = load ptr, ptr %9, align 8, !tbaa !5
  %823 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %822, i32 0, i32 11
  %824 = load i32, ptr %823, align 4, !tbaa !32
  br label %826

825:                                              ; preds = %792
  br label %826

826:                                              ; preds = %825, %821
  %827 = phi i32 [ %824, %821 ], [ 0, %825 ]
  call void @libxsmm_x86_instruction_vec_move(ptr noundef %793, i32 noundef %796, i32 noundef %797, i32 noundef %800, i32 noundef 127, i32 noundef 0, i32 noundef %811, i8 noundef signext %812, i32 noundef %816, i32 noundef %827, i32 noundef 1, i32 noundef 0)
  %828 = load ptr, ptr %9, align 8, !tbaa !5
  %829 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %828, i32 0, i32 3
  %830 = load i32, ptr %829, align 4, !tbaa !29
  %831 = load ptr, ptr %9, align 8, !tbaa !5
  %832 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %831, i32 0, i32 2
  %833 = load i32, ptr %832, align 8, !tbaa !11
  %834 = mul i32 %830, %833
  %835 = load i32, ptr %15, align 4, !tbaa !9
  %836 = mul i32 %834, %835
  %837 = load i32, ptr %20, align 4, !tbaa !9
  %838 = mul i32 %836, %837
  %839 = urem i32 %838, 64
  %840 = icmp eq i32 %839, 0
  br i1 %840, label %841, label %870

841:                                              ; preds = %826
  %842 = load i32, ptr %35, align 4, !tbaa !9
  %843 = icmp ugt i32 %842, 0
  br i1 %843, label %844, label %870

844:                                              ; preds = %841
  %845 = load ptr, ptr %7, align 8, !tbaa !5
  %846 = load ptr, ptr %8, align 8, !tbaa !5
  %847 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %846, i32 0, i32 1
  %848 = load i32, ptr %847, align 4, !tbaa !27
  %849 = load ptr, ptr %9, align 8, !tbaa !5
  %850 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %849, i32 0, i32 3
  %851 = load i32, ptr %850, align 4, !tbaa !29
  %852 = load ptr, ptr %9, align 8, !tbaa !5
  %853 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %852, i32 0, i32 2
  %854 = load i32, ptr %853, align 8, !tbaa !11
  %855 = mul i32 %851, %854
  %856 = load i32, ptr %15, align 4, !tbaa !9
  %857 = mul i32 %855, %856
  %858 = load i32, ptr %20, align 4, !tbaa !9
  %859 = mul i32 %857, %858
  %860 = load i32, ptr %35, align 4, !tbaa !9
  %861 = load ptr, ptr %10, align 8, !tbaa !5
  %862 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %861, i32 0, i32 3
  %863 = load i32, ptr %862, align 1, !tbaa !33
  %864 = mul i32 %860, %863
  %865 = load ptr, ptr %9, align 8, !tbaa !5
  %866 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %865, i32 0, i32 3
  %867 = load i32, ptr %866, align 4, !tbaa !29
  %868 = mul i32 %864, %867
  %869 = add i32 %859, %868
  call void @libxsmm_x86_instruction_prefetch(ptr noundef %845, i32 noundef -1810624488, i32 noundef %848, i32 noundef 127, i32 noundef 0, i32 noundef %869)
  br label %870

870:                                              ; preds = %844, %841, %826
  br label %871

871:                                              ; preds = %870, %755
  br label %872

872:                                              ; preds = %871, %624
  %873 = load i32, ptr %24, align 4, !tbaa !9
  %874 = icmp ugt i32 %873, 0
  br i1 %874, label %875, label %885

875:                                              ; preds = %872
  %876 = load ptr, ptr %7, align 8, !tbaa !5
  %877 = load ptr, ptr %9, align 8, !tbaa !5
  %878 = load ptr, ptr %10, align 8, !tbaa !5
  %879 = load i32, ptr %15, align 4, !tbaa !9
  %880 = load i32, ptr %13, align 4, !tbaa !9
  %881 = load i32, ptr %15, align 4, !tbaa !9
  %882 = add i32 1, %881
  %883 = load i32, ptr %18, align 4, !tbaa !9
  %884 = add i32 %882, %883
  call void @libxsmm_generator_gemm_avx512_microkernel_process_vreg_A_for_i4i8(ptr noundef %876, ptr noundef %877, ptr noundef %878, i32 noundef %879, i32 noundef %880, i32 noundef %884)
  br label %901

885:                                              ; preds = %872
  %886 = load ptr, ptr %7, align 8, !tbaa !5
  %887 = load ptr, ptr %9, align 8, !tbaa !5
  %888 = load ptr, ptr %10, align 8, !tbaa !5
  %889 = load i8, ptr %31, align 1, !tbaa !23
  %890 = load i32, ptr %22, align 4, !tbaa !9
  %891 = load i32, ptr %21, align 4, !tbaa !9
  %892 = load i32, ptr %26, align 4, !tbaa !9
  %893 = load i32, ptr %29, align 4, !tbaa !9
  %894 = load i32, ptr %30, align 4, !tbaa !9
  %895 = load i32, ptr %15, align 4, !tbaa !9
  %896 = load i32, ptr %13, align 4, !tbaa !9
  %897 = load i32, ptr %15, align 4, !tbaa !9
  %898 = add i32 1, %897
  %899 = load i32, ptr %18, align 4, !tbaa !9
  %900 = add i32 %898, %899
  call void @libxsmm_generator_gemm_avx512_microkernel_process_vreg_A(ptr noundef %886, ptr noundef %887, ptr noundef %888, i8 noundef signext %889, i32 noundef %890, i32 noundef %891, i32 noundef %892, i32 noundef %893, i32 noundef %894, i32 noundef %895, i32 noundef %896, i32 noundef %900)
  br label %901

901:                                              ; preds = %885, %875
  %902 = load ptr, ptr %10, align 8, !tbaa !5
  %903 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %902, i32 0, i32 7
  %904 = load i8, ptr %903, align 1, !tbaa !34
  %905 = zext i8 %904 to i32
  %906 = icmp eq i32 %905, 1
  br i1 %906, label %907, label %923

907:                                              ; preds = %901
  %908 = load ptr, ptr %7, align 8, !tbaa !5
  %909 = load ptr, ptr %8, align 8, !tbaa !5
  %910 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %909, i32 0, i32 6
  %911 = load i32, ptr %910, align 4, !tbaa !35
  %912 = load ptr, ptr %9, align 8, !tbaa !5
  %913 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %912, i32 0, i32 3
  %914 = load i32, ptr %913, align 4, !tbaa !29
  %915 = load ptr, ptr %9, align 8, !tbaa !5
  %916 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %915, i32 0, i32 2
  %917 = load i32, ptr %916, align 8, !tbaa !11
  %918 = mul i32 %914, %917
  %919 = load i32, ptr %15, align 4, !tbaa !9
  %920 = mul i32 %918, %919
  %921 = load i32, ptr %20, align 4, !tbaa !9
  %922 = mul i32 %920, %921
  call void @libxsmm_x86_instruction_prefetch(ptr noundef %908, i32 noundef -1809575912, i32 noundef %911, i32 noundef 127, i32 noundef 0, i32 noundef %922)
  br label %923

923:                                              ; preds = %907, %901
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %36) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #5
  br label %924

924:                                              ; preds = %923
  %925 = load i32, ptr %15, align 4, !tbaa !9
  %926 = add i32 %925, 1
  store i32 %926, ptr %15, align 4, !tbaa !9
  br label %491, !llvm.loop !36

927:                                              ; preds = %491
  store i32 0, ptr %16, align 4, !tbaa !9
  br label %928

928:                                              ; preds = %1450, %927
  %929 = load i32, ptr %16, align 4, !tbaa !9
  %930 = load i32, ptr %25, align 4, !tbaa !9
  %931 = icmp ult i32 %929, %930
  br i1 %931, label %932, label %1453

932:                                              ; preds = %928
  store i32 0, ptr %14, align 4, !tbaa !9
  br label %933

933:                                              ; preds = %1446, %932
  %934 = load i32, ptr %14, align 4, !tbaa !9
  %935 = load i32, ptr %12, align 4, !tbaa !9
  %936 = icmp ult i32 %934, %935
  br i1 %936, label %937, label %1449

937:                                              ; preds = %933
  call void @llvm.lifetime.start.p0(i64 1, ptr %40) #5
  %938 = load ptr, ptr %9, align 8, !tbaa !5
  %939 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %938, i32 0, i32 21
  %940 = load i8, ptr %939, align 4, !tbaa !22
  store i8 %940, ptr %40, align 1, !tbaa !23
  call void @llvm.lifetime.start.p0(i64 4, ptr %41) #5
  %941 = load ptr, ptr %9, align 8, !tbaa !5
  %942 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %941, i32 0, i32 7
  %943 = load i32, ptr %942, align 4, !tbaa !38
  store i32 %943, ptr %41, align 4, !tbaa !9
  %944 = load i32, ptr %26, align 4, !tbaa !9
  %945 = icmp ugt i32 %944, 0
  br i1 %945, label %952, label %946

946:                                              ; preds = %937
  %947 = load i32, ptr %22, align 4, !tbaa !9
  %948 = icmp ugt i32 %947, 0
  br i1 %948, label %952, label %949

949:                                              ; preds = %946
  %950 = load i32, ptr %21, align 4, !tbaa !9
  %951 = icmp ugt i32 %950, 0
  br i1 %951, label %952, label %968

952:                                              ; preds = %949, %946, %937
  %953 = load i32, ptr %30, align 4, !tbaa !9
  %954 = icmp ugt i32 %953, 0
  br i1 %954, label %958, label %955

955:                                              ; preds = %952
  %956 = load i32, ptr %29, align 4, !tbaa !9
  %957 = icmp ugt i32 %956, 0
  br i1 %957, label %958, label %967

958:                                              ; preds = %955, %952
  %959 = load ptr, ptr %9, align 8, !tbaa !5
  %960 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %959, i32 0, i32 21
  %961 = load i8, ptr %960, align 4, !tbaa !22
  %962 = sext i8 %961 to i32
  %963 = icmp eq i32 %962, 122
  %964 = zext i1 %963 to i64
  %965 = select i1 %963, i32 121, i32 120
  %966 = trunc i32 %965 to i8
  store i8 %966, ptr %40, align 1, !tbaa !23
  br label %967

967:                                              ; preds = %958, %955
  br label %968

968:                                              ; preds = %967, %949
  %969 = load i32, ptr %27, align 4, !tbaa !9
  %970 = icmp ugt i32 %969, 0
  br i1 %970, label %971, label %975

971:                                              ; preds = %968
  %972 = load i32, ptr %28, align 4, !tbaa !9
  %973 = icmp eq i32 %972, 0
  br i1 %973, label %974, label %975

974:                                              ; preds = %971
  store i32 537209209, ptr %41, align 4, !tbaa !9
  br label %975

975:                                              ; preds = %974, %971, %968
  %976 = load ptr, ptr %10, align 8, !tbaa !5
  %977 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %976, i32 0, i32 6
  %978 = load i32, ptr %977, align 1, !tbaa !16
  %979 = and i32 %978, 2
  %980 = icmp ugt i32 %979, 0
  br i1 %980, label %981, label %1010

981:                                              ; preds = %975
  call void @llvm.lifetime.start.p0(i64 4, ptr %42) #5
  %982 = load i32, ptr %27, align 4, !tbaa !9
  %983 = icmp ugt i32 %982, 0
  br i1 %983, label %984, label %989

984:                                              ; preds = %981
  %985 = load i32, ptr %28, align 4, !tbaa !9
  %986 = icmp eq i32 %985, 0
  %987 = zext i1 %986 to i64
  %988 = select i1 %986, i32 1, i32 2
  br label %991

989:                                              ; preds = %981
  %990 = load i32, ptr %20, align 4, !tbaa !9
  br label %991

991:                                              ; preds = %989, %984
  %992 = phi i32 [ %988, %984 ], [ %990, %989 ]
  store i32 %992, ptr %42, align 4, !tbaa !9
  %993 = load i32, ptr %14, align 4, !tbaa !9
  %994 = load ptr, ptr %9, align 8, !tbaa !5
  %995 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %994, i32 0, i32 4
  %996 = load i32, ptr %995, align 8, !tbaa !39
  %997 = mul i32 %993, %996
  %998 = load i32, ptr %42, align 4, !tbaa !9
  %999 = mul i32 %997, %998
  %1000 = load ptr, ptr %9, align 8, !tbaa !5
  %1001 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1000, i32 0, i32 4
  %1002 = load i32, ptr %1001, align 8, !tbaa !39
  %1003 = load i32, ptr %16, align 4, !tbaa !9
  %1004 = mul i32 %1002, %1003
  %1005 = load ptr, ptr %10, align 8, !tbaa !5
  %1006 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %1005, i32 0, i32 4
  %1007 = load i32, ptr %1006, align 1, !tbaa !40
  %1008 = mul i32 %1004, %1007
  %1009 = add i32 %999, %1008
  store i32 %1009, ptr %19, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #5
  br label %1039

1010:                                             ; preds = %975
  call void @llvm.lifetime.start.p0(i64 4, ptr %43) #5
  %1011 = load i32, ptr %27, align 4, !tbaa !9
  %1012 = icmp ugt i32 %1011, 0
  br i1 %1012, label %1013, label %1018

1013:                                             ; preds = %1010
  %1014 = load i32, ptr %28, align 4, !tbaa !9
  %1015 = icmp eq i32 %1014, 0
  %1016 = zext i1 %1015 to i64
  %1017 = select i1 %1015, i32 1, i32 2
  br label %1020

1018:                                             ; preds = %1010
  %1019 = load i32, ptr %20, align 4, !tbaa !9
  br label %1020

1020:                                             ; preds = %1018, %1013
  %1021 = phi i32 [ %1017, %1013 ], [ %1019, %1018 ]
  store i32 %1021, ptr %43, align 4, !tbaa !9
  %1022 = load ptr, ptr %10, align 8, !tbaa !5
  %1023 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %1022, i32 0, i32 4
  %1024 = load i32, ptr %1023, align 1, !tbaa !40
  %1025 = load i32, ptr %14, align 4, !tbaa !9
  %1026 = mul i32 %1024, %1025
  %1027 = load ptr, ptr %9, align 8, !tbaa !5
  %1028 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1027, i32 0, i32 4
  %1029 = load i32, ptr %1028, align 8, !tbaa !39
  %1030 = mul i32 %1026, %1029
  %1031 = load i32, ptr %16, align 4, !tbaa !9
  %1032 = load i32, ptr %43, align 4, !tbaa !9
  %1033 = mul i32 %1031, %1032
  %1034 = load ptr, ptr %9, align 8, !tbaa !5
  %1035 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1034, i32 0, i32 4
  %1036 = load i32, ptr %1035, align 8, !tbaa !39
  %1037 = mul i32 %1033, %1036
  %1038 = add i32 %1030, %1037
  store i32 %1038, ptr %19, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #5
  br label %1039

1039:                                             ; preds = %1020, %991
  %1040 = load ptr, ptr %10, align 8, !tbaa !5
  %1041 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %1040, i32 0, i32 8
  %1042 = getelementptr inbounds [3 x i8], ptr %1041, i64 0, i64 0
  %1043 = call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef %1042)
  %1044 = icmp eq i32 2, %1043
  br i1 %1044, label %1045, label %1057

1045:                                             ; preds = %1039
  %1046 = load ptr, ptr %10, align 8, !tbaa !5
  %1047 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %1046, i32 0, i32 6
  %1048 = load i32, ptr %1047, align 1, !tbaa !16
  %1049 = and i32 %1048, 8388608
  %1050 = icmp ugt i32 %1049, 0
  br i1 %1050, label %1051, label %1057

1051:                                             ; preds = %1045
  %1052 = load i8, ptr %40, align 1, !tbaa !23
  %1053 = sext i8 %1052 to i32
  %1054 = icmp eq i32 %1053, 122
  %1055 = zext i1 %1054 to i64
  %1056 = select i1 %1054, i32 121, i32 120
  br label %1060

1057:                                             ; preds = %1045, %1039
  %1058 = load i8, ptr %40, align 1, !tbaa !23
  %1059 = sext i8 %1058 to i32
  br label %1060

1060:                                             ; preds = %1057, %1051
  %1061 = phi i32 [ %1056, %1051 ], [ %1059, %1057 ]
  %1062 = trunc i32 %1061 to i8
  store i8 %1062, ptr %40, align 1, !tbaa !23
  %1063 = load ptr, ptr %7, align 8, !tbaa !5
  %1064 = load ptr, ptr %9, align 8, !tbaa !5
  %1065 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1064, i32 0, i32 0
  %1066 = load i32, ptr %1065, align 8, !tbaa !31
  %1067 = load i32, ptr %41, align 4, !tbaa !9
  %1068 = load ptr, ptr %8, align 8, !tbaa !5
  %1069 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %1068, i32 0, i32 3
  %1070 = load i32, ptr %1069, align 4, !tbaa !41
  %1071 = load i32, ptr %19, align 4, !tbaa !9
  %1072 = load i8, ptr %40, align 1, !tbaa !23
  %1073 = load i32, ptr %18, align 4, !tbaa !9
  call void @libxsmm_x86_instruction_vec_move(ptr noundef %1063, i32 noundef %1066, i32 noundef %1067, i32 noundef %1070, i32 noundef 127, i32 noundef 0, i32 noundef %1071, i8 noundef signext %1072, i32 noundef %1073, i32 noundef 0, i32 noundef 1, i32 noundef 0)
  %1074 = load ptr, ptr %10, align 8, !tbaa !5
  %1075 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %1074, i32 0, i32 6
  %1076 = load i32, ptr %1075, align 1, !tbaa !16
  %1077 = and i32 %1076, 8388608
  %1078 = icmp ugt i32 %1077, 0
  br i1 %1078, label %1079, label %1092

1079:                                             ; preds = %1060
  %1080 = load ptr, ptr %10, align 8, !tbaa !5
  %1081 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %1080, i32 0, i32 8
  %1082 = getelementptr inbounds [3 x i8], ptr %1081, i64 0, i64 0
  %1083 = call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef %1082)
  %1084 = icmp eq i32 2, %1083
  br i1 %1084, label %1085, label %1092

1085:                                             ; preds = %1079
  %1086 = load ptr, ptr %7, align 8, !tbaa !5
  %1087 = load ptr, ptr %9, align 8, !tbaa !5
  %1088 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1087, i32 0, i32 21
  %1089 = load i8, ptr %1088, align 4, !tbaa !22
  %1090 = load i32, ptr %18, align 4, !tbaa !9
  %1091 = load i32, ptr %18, align 4, !tbaa !9
  call void @libxsmm_generator_cvtbf16ps_sse_avx2_avx512(ptr noundef %1086, i8 noundef signext %1089, i32 noundef %1090, i32 noundef %1091)
  br label %1092

1092:                                             ; preds = %1085, %1079, %1060
  %1093 = load i32, ptr %26, align 4, !tbaa !9
  %1094 = icmp ugt i32 %1093, 0
  br i1 %1094, label %1101, label %1095

1095:                                             ; preds = %1092
  %1096 = load i32, ptr %22, align 4, !tbaa !9
  %1097 = icmp ugt i32 %1096, 0
  br i1 %1097, label %1101, label %1098

1098:                                             ; preds = %1095
  %1099 = load i32, ptr %21, align 4, !tbaa !9
  %1100 = icmp ugt i32 %1099, 0
  br i1 %1100, label %1101, label %1112

1101:                                             ; preds = %1098, %1095, %1092
  %1102 = load i32, ptr %29, align 4, !tbaa !9
  %1103 = icmp ugt i32 %1102, 0
  br i1 %1103, label %1107, label %1104

1104:                                             ; preds = %1101
  %1105 = load i32, ptr %30, align 4, !tbaa !9
  %1106 = icmp ugt i32 %1105, 0
  br i1 %1106, label %1107, label %1112

1107:                                             ; preds = %1104, %1101
  %1108 = load ptr, ptr %7, align 8, !tbaa !5
  %1109 = load i8, ptr %31, align 1, !tbaa !23
  %1110 = load i32, ptr %18, align 4, !tbaa !9
  %1111 = load i32, ptr %18, align 4, !tbaa !9
  call void @libxsmm_x86_instruction_vec_compute_2reg(ptr noundef %1108, i32 noundef 537208083, i8 noundef signext %1109, i32 noundef %1110, i32 noundef %1111)
  br label %1112

1112:                                             ; preds = %1107, %1104, %1098
  %1113 = load i32, ptr %27, align 4, !tbaa !9
  %1114 = icmp ugt i32 %1113, 0
  br i1 %1114, label %1115, label %1125

1115:                                             ; preds = %1112
  %1116 = load i32, ptr %28, align 4, !tbaa !9
  %1117 = icmp eq i32 %1116, 0
  br i1 %1117, label %1118, label %1125

1118:                                             ; preds = %1115
  %1119 = load ptr, ptr %7, align 8, !tbaa !5
  %1120 = load ptr, ptr %9, align 8, !tbaa !5
  %1121 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1120, i32 0, i32 21
  %1122 = load i8, ptr %1121, align 4, !tbaa !22
  %1123 = load i32, ptr %18, align 4, !tbaa !9
  %1124 = load i32, ptr %18, align 4, !tbaa !9
  call void @libxsmm_x86_instruction_vec_compute_2reg_imm8(ptr noundef %1119, i32 noundef 611128946, i8 noundef signext %1122, i32 noundef %1123, i32 noundef %1124, i32 noundef 16)
  br label %1125

1125:                                             ; preds = %1118, %1115, %1112
  %1126 = load i32, ptr %14, align 4, !tbaa !9
  %1127 = load i32, ptr %12, align 4, !tbaa !9
  %1128 = sub i32 %1127, 1
  %1129 = icmp eq i32 %1126, %1128
  br i1 %1129, label %1130, label %1181

1130:                                             ; preds = %1125
  %1131 = load ptr, ptr %10, align 8, !tbaa !5
  %1132 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %1131, i32 0, i32 6
  %1133 = load i32, ptr %1132, align 1, !tbaa !16
  %1134 = and i32 %1133, 2
  %1135 = icmp ugt i32 %1134, 0
  br i1 %1135, label %1136, label %1146

1136:                                             ; preds = %1130
  %1137 = load ptr, ptr %10, align 8, !tbaa !5
  %1138 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %1137, i32 0, i32 4
  %1139 = load i32, ptr %1138, align 1, !tbaa !40
  %1140 = load ptr, ptr %9, align 8, !tbaa !5
  %1141 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1140, i32 0, i32 4
  %1142 = load i32, ptr %1141, align 8, !tbaa !39
  %1143 = mul i32 %1139, %1142
  %1144 = load i32, ptr %25, align 4, !tbaa !9
  %1145 = mul i32 %1143, %1144
  store i32 %1145, ptr %19, align 4, !tbaa !9
  br label %1165

1146:                                             ; preds = %1130
  call void @llvm.lifetime.start.p0(i64 4, ptr %44) #5
  %1147 = load i32, ptr %27, align 4, !tbaa !9
  %1148 = icmp ugt i32 %1147, 0
  br i1 %1148, label %1149, label %1154

1149:                                             ; preds = %1146
  %1150 = load i32, ptr %28, align 4, !tbaa !9
  %1151 = icmp eq i32 %1150, 0
  %1152 = zext i1 %1151 to i64
  %1153 = select i1 %1151, i32 1, i32 2
  br label %1156

1154:                                             ; preds = %1146
  %1155 = load i32, ptr %20, align 4, !tbaa !9
  br label %1156

1156:                                             ; preds = %1154, %1149
  %1157 = phi i32 [ %1153, %1149 ], [ %1155, %1154 ]
  store i32 %1157, ptr %44, align 4, !tbaa !9
  %1158 = load ptr, ptr %9, align 8, !tbaa !5
  %1159 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1158, i32 0, i32 4
  %1160 = load i32, ptr %1159, align 8, !tbaa !39
  %1161 = load i32, ptr %44, align 4, !tbaa !9
  %1162 = mul i32 %1160, %1161
  %1163 = load i32, ptr %25, align 4, !tbaa !9
  %1164 = mul i32 %1162, %1163
  store i32 %1164, ptr %19, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #5
  br label %1165

1165:                                             ; preds = %1156, %1136
  %1166 = load i32, ptr %16, align 4, !tbaa !9
  %1167 = load i32, ptr %25, align 4, !tbaa !9
  %1168 = sub i32 %1167, 1
  %1169 = icmp eq i32 %1166, %1168
  br i1 %1169, label %1170, label %1180

1170:                                             ; preds = %1165
  %1171 = load ptr, ptr %7, align 8, !tbaa !5
  %1172 = load ptr, ptr %9, align 8, !tbaa !5
  %1173 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1172, i32 0, i32 16
  %1174 = load i32, ptr %1173, align 8, !tbaa !42
  %1175 = load ptr, ptr %8, align 8, !tbaa !5
  %1176 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %1175, i32 0, i32 3
  %1177 = load i32, ptr %1176, align 4, !tbaa !41
  %1178 = load i32, ptr %19, align 4, !tbaa !9
  %1179 = sext i32 %1178 to i64
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef %1171, i32 noundef %1174, i32 noundef %1177, i64 noundef %1179)
  br label %1180

1180:                                             ; preds = %1170, %1165
  br label %1181

1181:                                             ; preds = %1180, %1125
  store i32 0, ptr %15, align 4, !tbaa !9
  br label %1182

1182:                                             ; preds = %1442, %1181
  %1183 = load i32, ptr %15, align 4, !tbaa !9
  %1184 = load i32, ptr %13, align 4, !tbaa !9
  %1185 = icmp ult i32 %1183, %1184
  br i1 %1185, label %1186, label %1445

1186:                                             ; preds = %1182
  %1187 = load i32, ptr %15, align 4, !tbaa !9
  %1188 = icmp eq i32 %1187, 0
  br i1 %1188, label %1189, label %1277

1189:                                             ; preds = %1186
  %1190 = load i32, ptr %14, align 4, !tbaa !9
  %1191 = load i32, ptr %12, align 4, !tbaa !9
  %1192 = sub i32 %1191, 1
  %1193 = icmp eq i32 %1190, %1192
  br i1 %1193, label %1194, label %1277

1194:                                             ; preds = %1189
  %1195 = load i32, ptr %16, align 4, !tbaa !9
  %1196 = icmp eq i32 %1195, 0
  br i1 %1196, label %1197, label %1277

1197:                                             ; preds = %1194
  call void @llvm.lifetime.start.p0(i64 4, ptr %45) #5
  %1198 = load i32, ptr %27, align 4, !tbaa !9
  %1199 = icmp ugt i32 %1198, 0
  br i1 %1199, label %1200, label %1205

1200:                                             ; preds = %1197
  %1201 = load i32, ptr %28, align 4, !tbaa !9
  %1202 = icmp eq i32 %1201, 0
  %1203 = zext i1 %1202 to i64
  %1204 = select i1 %1202, i32 1, i32 2
  br label %1207

1205:                                             ; preds = %1197
  %1206 = load i32, ptr %20, align 4, !tbaa !9
  br label %1207

1207:                                             ; preds = %1205, %1200
  %1208 = phi i32 [ %1204, %1200 ], [ %1206, %1205 ]
  store i32 %1208, ptr %45, align 4, !tbaa !9
  %1209 = load ptr, ptr %10, align 8, !tbaa !5
  %1210 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %1209, i32 0, i32 6
  %1211 = load i32, ptr %1210, align 1, !tbaa !16
  %1212 = and i32 %1211, 8388608
  %1213 = icmp ne i32 %1212, 0
  br i1 %1213, label %1214, label %1230

1214:                                             ; preds = %1207
  %1215 = load ptr, ptr %7, align 8, !tbaa !5
  %1216 = load ptr, ptr %9, align 8, !tbaa !5
  %1217 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1216, i32 0, i32 16
  %1218 = load i32, ptr %1217, align 8, !tbaa !42
  %1219 = load ptr, ptr %8, align 8, !tbaa !5
  %1220 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %1219, i32 0, i32 29
  %1221 = load i32, ptr %1220, align 4, !tbaa !25
  %1222 = load ptr, ptr %10, align 8, !tbaa !5
  %1223 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %1222, i32 0, i32 3
  %1224 = load i32, ptr %1223, align 1, !tbaa !33
  %1225 = udiv i32 %1224, 8
  %1226 = zext i32 %1225 to i64
  %1227 = load i32, ptr %45, align 4, !tbaa !9
  %1228 = zext i32 %1227 to i64
  %1229 = mul nsw i64 %1226, %1228
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef %1215, i32 noundef %1218, i32 noundef %1221, i64 noundef %1229)
  br label %1250

1230:                                             ; preds = %1207
  %1231 = load ptr, ptr %7, align 8, !tbaa !5
  %1232 = load ptr, ptr %9, align 8, !tbaa !5
  %1233 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1232, i32 0, i32 16
  %1234 = load i32, ptr %1233, align 8, !tbaa !42
  %1235 = load ptr, ptr %8, align 8, !tbaa !5
  %1236 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %1235, i32 0, i32 1
  %1237 = load i32, ptr %1236, align 4, !tbaa !27
  %1238 = load ptr, ptr %10, align 8, !tbaa !5
  %1239 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %1238, i32 0, i32 3
  %1240 = load i32, ptr %1239, align 1, !tbaa !33
  %1241 = zext i32 %1240 to i64
  %1242 = load ptr, ptr %9, align 8, !tbaa !5
  %1243 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1242, i32 0, i32 3
  %1244 = load i32, ptr %1243, align 4, !tbaa !29
  %1245 = zext i32 %1244 to i64
  %1246 = mul nsw i64 %1241, %1245
  %1247 = load i32, ptr %45, align 4, !tbaa !9
  %1248 = zext i32 %1247 to i64
  %1249 = mul nsw i64 %1246, %1248
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef %1231, i32 noundef %1234, i32 noundef %1237, i64 noundef %1249)
  br label %1250

1250:                                             ; preds = %1230, %1214
  %1251 = load ptr, ptr %10, align 8, !tbaa !5
  %1252 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %1251, i32 0, i32 7
  %1253 = load i8, ptr %1252, align 1, !tbaa !34
  %1254 = zext i8 %1253 to i32
  %1255 = icmp eq i32 %1254, 1
  br i1 %1255, label %1256, label %1276

1256:                                             ; preds = %1250
  %1257 = load ptr, ptr %7, align 8, !tbaa !5
  %1258 = load ptr, ptr %9, align 8, !tbaa !5
  %1259 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1258, i32 0, i32 16
  %1260 = load i32, ptr %1259, align 8, !tbaa !42
  %1261 = load ptr, ptr %8, align 8, !tbaa !5
  %1262 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %1261, i32 0, i32 6
  %1263 = load i32, ptr %1262, align 4, !tbaa !35
  %1264 = load ptr, ptr %10, align 8, !tbaa !5
  %1265 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %1264, i32 0, i32 3
  %1266 = load i32, ptr %1265, align 1, !tbaa !33
  %1267 = zext i32 %1266 to i64
  %1268 = load ptr, ptr %9, align 8, !tbaa !5
  %1269 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1268, i32 0, i32 3
  %1270 = load i32, ptr %1269, align 4, !tbaa !29
  %1271 = zext i32 %1270 to i64
  %1272 = mul nsw i64 %1267, %1271
  %1273 = load i32, ptr %20, align 4, !tbaa !9
  %1274 = zext i32 %1273 to i64
  %1275 = mul nsw i64 %1272, %1274
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef %1257, i32 noundef %1260, i32 noundef %1263, i64 noundef %1275)
  br label %1276

1276:                                             ; preds = %1256, %1250
  call void @llvm.lifetime.end.p0(i64 4, ptr %45) #5
  br label %1277

1277:                                             ; preds = %1276, %1194, %1189, %1186
  %1278 = load ptr, ptr %10, align 8, !tbaa !5
  %1279 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %1278, i32 0, i32 8
  %1280 = getelementptr inbounds [3 x i8], ptr %1279, i64 0, i64 0
  %1281 = call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef %1280)
  %1282 = icmp eq i32 12, %1281
  br i1 %1282, label %1283, label %1346

1283:                                             ; preds = %1277
  %1284 = load ptr, ptr %10, align 8, !tbaa !5
  %1285 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %1284, i32 0, i32 6
  %1286 = load i32, ptr %1285, align 1, !tbaa !16
  %1287 = and i32 %1286, 256
  %1288 = icmp ugt i32 %1287, 0
  br i1 %1288, label %1289, label %1313

1289:                                             ; preds = %1283
  %1290 = load ptr, ptr %7, align 8, !tbaa !5
  %1291 = load ptr, ptr %9, align 8, !tbaa !5
  %1292 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1291, i32 0, i32 14
  %1293 = load i32, ptr %1292, align 8, !tbaa !19
  %1294 = load ptr, ptr %9, align 8, !tbaa !5
  %1295 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1294, i32 0, i32 21
  %1296 = load i8, ptr %1295, align 4, !tbaa !22
  %1297 = load i32, ptr %18, align 4, !tbaa !9
  %1298 = load i32, ptr %15, align 4, !tbaa !9
  %1299 = add i32 1, %1298
  %1300 = load i32, ptr %18, align 4, !tbaa !9
  %1301 = add i32 %1299, %1300
  %1302 = load i32, ptr %16, align 4, !tbaa !9
  %1303 = load i32, ptr %13, align 4, !tbaa !9
  %1304 = mul i32 %1302, %1303
  %1305 = add i32 %1301, %1304
  %1306 = load i32, ptr %17, align 4, !tbaa !9
  %1307 = load i32, ptr %15, align 4, !tbaa !9
  %1308 = add i32 %1306, %1307
  %1309 = load i32, ptr %13, align 4, !tbaa !9
  %1310 = load i32, ptr %14, align 4, !tbaa !9
  %1311 = mul i32 %1309, %1310
  %1312 = add i32 %1308, %1311
  call void @libxsmm_x86_instruction_vec_compute_3reg(ptr noundef %1290, i32 noundef %1293, i8 noundef signext %1296, i32 noundef %1297, i32 noundef %1305, i32 noundef %1312)
  br label %1345

1313:                                             ; preds = %1283
  %1314 = load ptr, ptr %10, align 8, !tbaa !5
  %1315 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %1314, i32 0, i32 6
  %1316 = load i32, ptr %1315, align 1, !tbaa !16
  %1317 = and i32 %1316, 512
  %1318 = icmp ugt i32 %1317, 0
  br i1 %1318, label %1319, label %1343

1319:                                             ; preds = %1313
  %1320 = load ptr, ptr %7, align 8, !tbaa !5
  %1321 = load ptr, ptr %9, align 8, !tbaa !5
  %1322 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1321, i32 0, i32 14
  %1323 = load i32, ptr %1322, align 8, !tbaa !19
  %1324 = load ptr, ptr %9, align 8, !tbaa !5
  %1325 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1324, i32 0, i32 21
  %1326 = load i8, ptr %1325, align 4, !tbaa !22
  %1327 = load i32, ptr %15, align 4, !tbaa !9
  %1328 = add i32 1, %1327
  %1329 = load i32, ptr %18, align 4, !tbaa !9
  %1330 = add i32 %1328, %1329
  %1331 = load i32, ptr %16, align 4, !tbaa !9
  %1332 = load i32, ptr %13, align 4, !tbaa !9
  %1333 = mul i32 %1331, %1332
  %1334 = add i32 %1330, %1333
  %1335 = load i32, ptr %18, align 4, !tbaa !9
  %1336 = load i32, ptr %17, align 4, !tbaa !9
  %1337 = load i32, ptr %15, align 4, !tbaa !9
  %1338 = add i32 %1336, %1337
  %1339 = load i32, ptr %13, align 4, !tbaa !9
  %1340 = load i32, ptr %14, align 4, !tbaa !9
  %1341 = mul i32 %1339, %1340
  %1342 = add i32 %1338, %1341
  call void @libxsmm_x86_instruction_vec_compute_3reg(ptr noundef %1320, i32 noundef %1323, i8 noundef signext %1326, i32 noundef %1334, i32 noundef %1335, i32 noundef %1342)
  br label %1344

1343:                                             ; preds = %1313
  br label %1344

1344:                                             ; preds = %1343, %1319
  br label %1345

1345:                                             ; preds = %1344, %1289
  br label %1441

1346:                                             ; preds = %1277
  %1347 = load i32, ptr %29, align 4, !tbaa !9
  %1348 = icmp ugt i32 %1347, 0
  br i1 %1348, label %1349, label %1416

1349:                                             ; preds = %1346
  %1350 = load ptr, ptr %7, align 8, !tbaa !5
  %1351 = load i8, ptr %31, align 1, !tbaa !23
  %1352 = load i32, ptr %17, align 4, !tbaa !9
  %1353 = load i32, ptr %15, align 4, !tbaa !9
  %1354 = add i32 %1352, %1353
  %1355 = load i32, ptr %13, align 4, !tbaa !9
  %1356 = load i32, ptr %14, align 4, !tbaa !9
  %1357 = mul i32 %1355, %1356
  %1358 = add i32 %1354, %1357
  %1359 = load i32, ptr %17, align 4, !tbaa !9
  %1360 = load i32, ptr %15, align 4, !tbaa !9
  %1361 = add i32 %1359, %1360
  %1362 = load i32, ptr %13, align 4, !tbaa !9
  %1363 = load i32, ptr %14, align 4, !tbaa !9
  %1364 = mul i32 %1362, %1363
  %1365 = add i32 %1361, %1364
  call void @libxsmm_x86_instruction_vec_compute_2reg(ptr noundef %1350, i32 noundef 537208083, i8 noundef signext %1351, i32 noundef %1358, i32 noundef %1365)
  %1366 = load ptr, ptr %7, align 8, !tbaa !5
  %1367 = load ptr, ptr %9, align 8, !tbaa !5
  %1368 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1367, i32 0, i32 14
  %1369 = load i32, ptr %1368, align 8, !tbaa !19
  %1370 = load i8, ptr %31, align 1, !tbaa !23
  %1371 = load i32, ptr %15, align 4, !tbaa !9
  %1372 = add i32 1, %1371
  %1373 = load i32, ptr %18, align 4, !tbaa !9
  %1374 = add i32 %1372, %1373
  %1375 = load i32, ptr %16, align 4, !tbaa !9
  %1376 = load i32, ptr %13, align 4, !tbaa !9
  %1377 = mul i32 %1375, %1376
  %1378 = add i32 %1374, %1377
  %1379 = load i32, ptr %18, align 4, !tbaa !9
  %1380 = load i32, ptr %17, align 4, !tbaa !9
  %1381 = load i32, ptr %15, align 4, !tbaa !9
  %1382 = add i32 %1380, %1381
  %1383 = load i32, ptr %13, align 4, !tbaa !9
  %1384 = load i32, ptr %14, align 4, !tbaa !9
  %1385 = mul i32 %1383, %1384
  %1386 = add i32 %1382, %1385
  call void @libxsmm_x86_instruction_vec_compute_3reg(ptr noundef %1366, i32 noundef %1369, i8 noundef signext %1370, i32 noundef %1378, i32 noundef %1379, i32 noundef %1386)
  %1387 = load ptr, ptr %7, align 8, !tbaa !5
  %1388 = load i8, ptr %31, align 1, !tbaa !23
  %1389 = load i32, ptr %17, align 4, !tbaa !9
  %1390 = load i32, ptr %15, align 4, !tbaa !9
  %1391 = add i32 %1389, %1390
  %1392 = load i32, ptr %13, align 4, !tbaa !9
  %1393 = load i32, ptr %14, align 4, !tbaa !9
  %1394 = mul i32 %1392, %1393
  %1395 = add i32 %1391, %1394
  %1396 = load i32, ptr %17, align 4, !tbaa !9
  %1397 = load i32, ptr %15, align 4, !tbaa !9
  %1398 = add i32 %1396, %1397
  %1399 = load i32, ptr %13, align 4, !tbaa !9
  %1400 = load i32, ptr %14, align 4, !tbaa !9
  %1401 = mul i32 %1399, %1400
  %1402 = add i32 %1398, %1401
  %1403 = load ptr, ptr %7, align 8, !tbaa !5
  %1404 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %1403, i32 0, i32 6
  %1405 = load i32, ptr %1404, align 4, !tbaa !20
  %1406 = icmp ult i32 %1405, 1101
  %1407 = zext i1 %1406 to i64
  %1408 = select i1 %1406, i32 0, i32 1
  %1409 = load ptr, ptr %7, align 8, !tbaa !5
  %1410 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %1409, i32 0, i32 6
  %1411 = load i32, ptr %1410, align 4, !tbaa !20
  %1412 = icmp ult i32 %1411, 1101
  %1413 = zext i1 %1412 to i64
  %1414 = select i1 %1412, i32 0, i32 1
  %1415 = trunc i32 %1414 to i8
  call void @libxsmm_x86_instruction_vec_compute_2reg_mask_sae_imm8(ptr noundef %1387, i32 noundef 671954205, i8 noundef signext %1388, i32 noundef %1395, i32 noundef %1402, i32 noundef 0, i32 noundef %1408, i8 noundef zeroext %1415, i32 noundef 0)
  br label %1440

1416:                                             ; preds = %1346
  %1417 = load ptr, ptr %7, align 8, !tbaa !5
  %1418 = load ptr, ptr %9, align 8, !tbaa !5
  %1419 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1418, i32 0, i32 14
  %1420 = load i32, ptr %1419, align 8, !tbaa !19
  %1421 = load ptr, ptr %9, align 8, !tbaa !5
  %1422 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1421, i32 0, i32 21
  %1423 = load i8, ptr %1422, align 4, !tbaa !22
  %1424 = load i32, ptr %15, align 4, !tbaa !9
  %1425 = add i32 1, %1424
  %1426 = load i32, ptr %18, align 4, !tbaa !9
  %1427 = add i32 %1425, %1426
  %1428 = load i32, ptr %16, align 4, !tbaa !9
  %1429 = load i32, ptr %13, align 4, !tbaa !9
  %1430 = mul i32 %1428, %1429
  %1431 = add i32 %1427, %1430
  %1432 = load i32, ptr %18, align 4, !tbaa !9
  %1433 = load i32, ptr %17, align 4, !tbaa !9
  %1434 = load i32, ptr %15, align 4, !tbaa !9
  %1435 = add i32 %1433, %1434
  %1436 = load i32, ptr %13, align 4, !tbaa !9
  %1437 = load i32, ptr %14, align 4, !tbaa !9
  %1438 = mul i32 %1436, %1437
  %1439 = add i32 %1435, %1438
  call void @libxsmm_x86_instruction_vec_compute_3reg(ptr noundef %1417, i32 noundef %1420, i8 noundef signext %1423, i32 noundef %1431, i32 noundef %1432, i32 noundef %1439)
  br label %1440

1440:                                             ; preds = %1416, %1349
  br label %1441

1441:                                             ; preds = %1440, %1345
  br label %1442

1442:                                             ; preds = %1441
  %1443 = load i32, ptr %15, align 4, !tbaa !9
  %1444 = add i32 %1443, 1
  store i32 %1444, ptr %15, align 4, !tbaa !9
  br label %1182, !llvm.loop !43

1445:                                             ; preds = %1182
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %40) #5
  br label %1446

1446:                                             ; preds = %1445
  %1447 = load i32, ptr %14, align 4, !tbaa !9
  %1448 = add i32 %1447, 1
  store i32 %1448, ptr %14, align 4, !tbaa !9
  br label %933, !llvm.loop !44

1449:                                             ; preds = %933
  br label %1450

1450:                                             ; preds = %1449
  %1451 = load i32, ptr %16, align 4, !tbaa !9
  %1452 = add i32 %1451, 1
  store i32 %1452, ptr %16, align 4, !tbaa !9
  br label %928, !llvm.loop !45

1453:                                             ; preds = %928
  store i32 0, ptr %32, align 4
  br label %1454

1454:                                             ; preds = %1453, %475, %455, %439, %422, %404, %354, %324
  call void @llvm.lifetime.end.p0(i64 1, ptr %31) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #5
  %1455 = load i32, ptr %32, align 4
  switch i32 %1455, label %1457 [
    i32 0, label %1456
    i32 1, label %1456
  ]

1456:                                             ; preds = %1454, %1454
  ret void

1457:                                             ; preds = %1454
  unreachable
}

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

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

declare void @libxsmm_x86_instruction_vec_move(ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i8 noundef signext, i32 noundef, i32 noundef, i32 noundef, i32 noundef) #1

declare void @libxsmm_x86_instruction_vec_compute_2reg(ptr noundef, i32 noundef, i8 noundef signext, i32 noundef, i32 noundef) #1

declare void @libxsmm_x86_instruction_vec_compute_3reg(ptr noundef, i32 noundef, i8 noundef signext, i32 noundef, i32 noundef, i32 noundef) #1

declare void @libxsmm_x86_instruction_vec_compute_2reg_imm8(ptr noundef, i32 noundef, i8 noundef signext, i32 noundef, i32 noundef, i32 noundef) #1

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

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

declare void @libxsmm_x86_instruction_vec_compute_2reg_mask_sae_imm8(ptr noundef, i32 noundef, i8 noundef signext, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i8 noundef zeroext, i32 noundef) #1

declare i32 @LIBXSMM_GEMM_GETENUM_COMP_PREC(ptr noundef) #1

declare void @libxsmm_handle_error(ptr noundef, i32 noundef, ptr noundef, ptr noundef, i32 noundef, i32 noundef) #1

; Function Attrs: nounwind
declare ptr @getenv(ptr noundef) #3

; Function Attrs: inlinehint nounwind willreturn memory(read) uwtable
declare i32 @atoi(ptr noundef nonnull) #4

declare void @libxsmm_x86_instruction_mask_move_mem(ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef) #1

declare void @libxsmm_x86_instruction_prefetch(ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef) #1

declare void @libxsmm_x86_instruction_vec_compute_mem_2reg_mask_imm8(ptr noundef, i32 noundef, i8 noundef signext, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef) #1

declare void @libxsmm_generator_cvtbf16ps_sse_avx2_avx512(ptr noundef, i8 noundef signext, i32 noundef, i32 noundef) #1

declare void @libxsmm_x86_instruction_mask_move(ptr noundef, i32 noundef, i32 noundef, i32 noundef) #1

declare void @libxsmm_x86_instruction_alu_reg(ptr noundef, i32 noundef, i32 noundef, i32 noundef) #1

declare void @libxsmm_x86_instruction_alu_imm(ptr noundef, i32 noundef, i32 noundef, i64 noundef) #1

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

!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 = !{!12, !10, i64 8}
!12 = !{!"libxsmm_micro_kernel_config", !10, i64 0, !10, i64 4, !10, i64 8, !10, i64 12, !10, i64 16, !10, i64 20, !10, i64 24, !10, i64 28, !10, i64 32, !10, i64 36, !10, i64 40, !10, i64 44, !10, i64 48, !10, i64 52, !10, i64 56, !10, i64 60, !10, i64 64, !10, i64 68, !10, i64 72, !10, i64 76, !10, i64 80, !7, i64 84, !10, i64 88, !10, i64 92, !10, i64 96, !10, i64 100, !10, i64 104, !10, i64 108, !10, i64 112, !10, i64 116, !10, i64 120, !10, i64 124, !10, i64 128, !10, i64 132, !10, i64 136, !10, i64 140, !10, i64 144, !10, i64 148, !10, i64 152, !10, i64 156, !10, i64 160, !10, i64 164, !10, i64 168, !10, i64 172, !10, i64 176, !10, i64 180, !10, i64 184, !10, i64 188, !10, i64 192, !10, i64 196, !10, i64 200, !10, i64 204, !10, i64 208, !10, i64 212, !10, i64 216, !10, i64 220, !10, i64 224, !10, i64 228, !10, i64 232, !10, i64 236, !10, i64 240, !10, i64 244, !10, i64 248, !10, i64 252, !10, i64 256, !10, i64 260, !10, i64 264, !10, i64 268, !10, i64 272, !10, i64 276, !10, i64 280, !10, i64 284, !10, i64 288, !10, i64 292, !10, i64 296, !10, i64 300, !10, i64 304, !10, i64 308, !10, i64 312, !10, i64 316, !10, i64 320, !10, i64 324, !10, i64 328, !10, i64 332, !10, i64 336, !10, i64 340, !10, i64 344, !10, i64 348, !10, i64 352, !10, i64 356, !10, i64 360, !7, i64 364, !7, i64 380, !7, i64 396, !7, i64 412, !7, i64 428, !7, i64 444, !10, i64 460, !7, i64 464, !13, i64 520, !10, i64 556, !10, i64 560, !10, i64 564, !10, i64 568, !10, i64 572, !10, i64 576, !10, i64 580, !10, i64 584, !6, i64 592, !10, i64 600, !10, i64 604, !10, i64 608, !10, i64 612, !6, i64 616, !10, i64 624, !10, i64 628, !10, i64 632, !10, i64 636, !10, i64 640, !10, i64 644, !10, i64 648, !10, i64 652, !10, i64 656, !10, i64 660, !10, i64 664, !10, i64 668, !10, i64 672, !10, i64 676, !10, i64 680}
!13 = !{!"libxsmm_tile_config", !7, i64 0, !14, i64 2, !7, i64 4, !14, i64 6, !7, i64 8, !14, i64 10, !7, i64 12, !14, i64 14, !7, i64 16, !14, i64 18, !7, i64 20, !14, i64 22, !7, i64 24, !14, i64 26, !7, i64 28, !14, i64 30, !7, i64 32}
!14 = !{!"short", !7, i64 0}
!15 = !{!12, !10, i64 4}
!16 = !{!17, !10, i64 24}
!17 = !{!"libxsmm_gemm_descriptor", !10, i64 0, !10, i64 4, !10, i64 8, !10, i64 12, !10, i64 16, !10, i64 20, !10, i64 24, !7, i64 28, !7, i64 29, !7, i64 32, !18, i64 33, !18, i64 41, !7, i64 49, !10, i64 50, !10, i64 54, !10, i64 58, !14, i64 62, !14, i64 64, !7, i64 66, !7, i64 67, !7, i64 68, !7, i64 69, !14, i64 70, !14, i64 72, !14, i64 74, !14, i64 76, !14, i64 78, !14, i64 80, !10, i64 82, !10, i64 86, !10, i64 90, !7, i64 94}
!18 = !{!"long long", !7, i64 0}
!19 = !{!12, !10, i64 56}
!20 = !{!21, !10, i64 28}
!21 = !{!"libxsmm_generated_code", !6, i64 0, !10, i64 8, !10, i64 12, !10, i64 16, !10, i64 20, !10, i64 24, !10, i64 28}
!22 = !{!12, !7, i64 84}
!23 = !{!7, !7, i64 0}
!24 = !{!12, !10, i64 24}
!25 = !{!26, !10, i64 116}
!26 = !{!"libxsmm_gp_reg_mapping_struct", !10, i64 0, !10, i64 4, !10, i64 8, !10, i64 12, !10, i64 16, !10, i64 20, !10, i64 24, !10, i64 28, !10, i64 32, !10, i64 36, !10, i64 40, !10, i64 44, !10, i64 48, !10, i64 52, !10, i64 56, !10, i64 60, !10, i64 64, !10, i64 68, !10, i64 72, !10, i64 76, !10, i64 80, !10, i64 84, !10, i64 88, !10, i64 92, !10, i64 96, !10, i64 100, !10, i64 104, !10, i64 108, !10, i64 112, !10, i64 116, !10, i64 120, !10, i64 124, !10, i64 128}
!27 = !{!26, !10, i64 4}
!28 = !{!26, !10, i64 124}
!29 = !{!12, !10, i64 12}
!30 = !{!26, !10, i64 128}
!31 = !{!12, !10, i64 0}
!32 = !{!12, !10, i64 44}
!33 = !{!17, !10, i64 12}
!34 = !{!17, !7, i64 28}
!35 = !{!26, !10, i64 24}
!36 = distinct !{!36, !37}
!37 = !{!"llvm.loop.mustprogress"}
!38 = !{!12, !10, i64 28}
!39 = !{!12, !10, i64 16}
!40 = !{!17, !10, i64 16}
!41 = !{!26, !10, i64 12}
!42 = !{!12, !10, i64 64}
!43 = distinct !{!43, !37}
!44 = distinct !{!44, !37}
!45 = distinct !{!45, !37}


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

@__func__.libxsmm_generator_gemm_avx512_microkernel_nofsdbcst = external hidden unnamed_addr constant [52 x i8], align 1
@.str = external hidden unnamed_addr constant [89 x i8], align 1
@libxsmm_ninit = external local_unnamed_addr global i32, align 4
@libxsmm_verbosity = external local_unnamed_addr global i32, align 4
@.str.1 = external hidden unnamed_addr constant [25 x i8], align 1

declare i32 @LIBXSMM_GEMM_GETENUM_A_PREC(ptr noundef) local_unnamed_addr #0

declare i32 @LIBXSMM_GEMM_GETENUM_B_PREC(ptr noundef) local_unnamed_addr #0

declare i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef) local_unnamed_addr #0

declare i32 @libxsmm_x86_is_Ai4_Bi8_gemm(ptr noundef) local_unnamed_addr #0

declare i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef) local_unnamed_addr #0

declare i32 @libxsmm_cpuid_dot_pack_factor(i32 noundef) local_unnamed_addr #0

; Function Attrs: nounwind uwtable
define dso_local void @libxsmm_generator_gemm_avx512_microkernel_nofsdbcst(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, i32 noundef %4, i32 noundef %5) local_unnamed_addr #1 {
  %7 = getelementptr inbounds i8, ptr %2, i64 8
  %8 = load i32, ptr %7, align 8, !tbaa !5
  %9 = urem i32 %4, %8
  %10 = icmp ne i32 %9, 0
  %11 = udiv i32 %4, %8
  %12 = zext i1 %10 to i32
  %13 = add i32 %11, %12
  %14 = getelementptr inbounds i8, ptr %2, i64 4
  %15 = load i32, ptr %14, align 4, !tbaa !13
  %16 = mul i32 %13, %5
  %17 = sub i32 %15, %16
  %18 = getelementptr inbounds i8, ptr %3, i64 29
  %19 = tail call i32 @LIBXSMM_GEMM_GETENUM_A_PREC(ptr noundef nonnull %18) #4
  %20 = icmp eq i32 %19, 4
  br i1 %20, label %21, label %24

21:                                               ; preds = %6
  %22 = tail call i32 @LIBXSMM_GEMM_GETENUM_B_PREC(ptr noundef nonnull %18) #4
  %23 = icmp eq i32 %22, 3
  br label %24

24:                                               ; preds = %21, %6
  %25 = phi i1 [ false, %6 ], [ %23, %21 ]
  %26 = zext i1 %25 to i32
  %27 = tail call i32 @LIBXSMM_GEMM_GETENUM_A_PREC(ptr noundef nonnull %18) #4
  %28 = icmp eq i32 %27, 12
  br i1 %28, label %29, label %32

29:                                               ; preds = %24
  %30 = tail call i32 @LIBXSMM_GEMM_GETENUM_B_PREC(ptr noundef nonnull %18) #4
  %31 = icmp eq i32 %30, 3
  br label %32

32:                                               ; preds = %29, %24
  %33 = phi i1 [ false, %24 ], [ %31, %29 ]
  %34 = zext i1 %33 to i32
  %35 = getelementptr inbounds i8, ptr %3, i64 24
  %36 = load i32, ptr %35, align 1, !tbaa !14
  %37 = and i32 %36, 2097152
  %.not = icmp eq i32 %37, 0
  br i1 %.not, label %50, label %38

38:                                               ; preds = %32
  %39 = tail call i32 @LIBXSMM_GEMM_GETENUM_A_PREC(ptr noundef nonnull %18) #4
  %40 = icmp eq i32 %39, 12
  br i1 %40, label %41, label %50

41:                                               ; preds = %38
  %42 = tail call i32 @LIBXSMM_GEMM_GETENUM_B_PREC(ptr noundef nonnull %18) #4
  %43 = icmp eq i32 %42, 3
  br i1 %43, label %44, label %50

44:                                               ; preds = %41
  %45 = tail call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef nonnull %18) #4
  %46 = icmp eq i32 %45, 3
  br i1 %46, label %50, label %47

47:                                               ; preds = %44
  %48 = tail call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef nonnull %18) #4
  %49 = icmp eq i32 %48, 1
  br label %50

50:                                               ; preds = %38, %41, %47, %44, %32
  %51 = phi i1 [ false, %32 ], [ false, %41 ], [ false, %38 ], [ true, %44 ], [ %49, %47 ]
  %52 = tail call i32 @libxsmm_x86_is_Ai4_Bi8_gemm(ptr noundef nonnull %3) #4
  %53 = icmp ne i32 %52, 0
  %54 = select i1 %51, i1 true, i1 %53
  %55 = select i1 %54, i32 2, i32 1
  %56 = tail call i32 @LIBXSMM_GEMM_GETENUM_A_PREC(ptr noundef nonnull %18) #4
  %57 = icmp eq i32 %56, 3
  br i1 %57, label %58, label %61

58:                                               ; preds = %50
  %59 = tail call i32 @LIBXSMM_GEMM_GETENUM_B_PREC(ptr noundef nonnull %18) #4
  %60 = icmp eq i32 %59, 3
  br label %61

61:                                               ; preds = %58, %50
  %62 = phi i1 [ false, %50 ], [ %60, %58 ]
  %63 = zext i1 %62 to i32
  %64 = tail call i32 @LIBXSMM_GEMM_GETENUM_A_PREC(ptr noundef nonnull %18) #4
  %65 = icmp eq i32 %64, 12
  br i1 %65, label %66, label %.thread

66:                                               ; preds = %61
  %67 = tail call i32 @LIBXSMM_GEMM_GETENUM_B_PREC(ptr noundef nonnull %18) #4
  %68 = icmp eq i32 %67, 2
  br i1 %68, label %69, label %.thread

69:                                               ; preds = %66
  %70 = getelementptr inbounds i8, ptr %2, i64 56
  %71 = load i32, ptr %70, align 8, !tbaa !17
  %72 = icmp eq i32 %71, -268032430
  br label %.thread

.thread:                                          ; preds = %61, %69, %66
  %.not526 = phi i1 [ true, %66 ], [ false, %69 ], [ true, %61 ]
  %73 = phi i1 [ false, %66 ], [ %72, %69 ], [ false, %61 ]
  %or.cond = select i1 %33, i1 true, i1 %25
  %or.cond3 = select i1 %or.cond, i1 true, i1 %62
  br i1 %or.cond3, label %74, label %85

74:                                               ; preds = %.thread
  %75 = getelementptr inbounds i8, ptr %0, i64 28
  %76 = load i32, ptr %75, align 4, !tbaa !18
  %77 = icmp ult i32 %76, 1104
  br i1 %77, label %78, label %81

78:                                               ; preds = %74
  %79 = tail call i32 @LIBXSMM_GEMM_GETENUM_COMP_PREC(ptr noundef nonnull %18) #4
  %80 = icmp eq i32 %79, 3
  br label %81

81:                                               ; preds = %78, %74
  %.ph = phi i1 [ %80, %78 ], [ false, %74 ]
  %82 = zext i1 %.ph to i32
  %83 = tail call i32 @LIBXSMM_GEMM_GETENUM_COMP_PREC(ptr noundef nonnull %18) #4
  %84 = icmp eq i32 %83, 1
  br label %85

85:                                               ; preds = %.thread, %81
  %86 = phi i32 [ %82, %81 ], [ 0, %.thread ]
  %87 = phi i1 [ %.ph, %81 ], [ false, %.thread ]
  %88 = phi i1 [ %84, %81 ], [ false, %.thread ]
  %89 = zext i1 %88 to i32
  %90 = getelementptr inbounds i8, ptr %2, i64 84
  %91 = load i8, ptr %90, align 4, !tbaa !20
  br i1 %33, label %92, label %98

92:                                               ; preds = %85
  %93 = load i32, ptr %35, align 1, !tbaa !14
  %94 = and i32 %93, 524288
  %.not490 = icmp eq i32 %94, 0
  %95 = add i32 %13, 2
  %spec.select = select i1 %.not490, i32 3, i32 %95
  %spec.select508 = select i1 %.not490, i32 1, i32 %13
  %.0468 = select i1 %51, i32 %spec.select, i32 %spec.select508
  %96 = and i32 %93, 34603008
  %or.cond509 = icmp eq i32 %96, 0
  %97 = select i1 %or.cond509, i32 0, i32 %13
  %spec.select518 = add i32 %97, %.0468
  br label %98

98:                                               ; preds = %92, %85
  %.1469 = phi i32 [ 0, %85 ], [ %spec.select518, %92 ]
  br i1 %.not526, label %103, label %99

99:                                               ; preds = %98
  %100 = load i32, ptr %35, align 1, !tbaa !14
  %101 = and i32 %100, 524288
  %.not493 = icmp eq i32 %101, 0
  %102 = add i32 %13, 1
  %spec.select510 = select i1 %.not493, i32 2, i32 %102
  br label %103

103:                                              ; preds = %99, %98
  %.2 = phi i32 [ %.1469, %98 ], [ %spec.select510, %99 ]
  br i1 %53, label %104, label %108

104:                                              ; preds = %103
  %105 = load i32, ptr %35, align 1, !tbaa !14
  %106 = and i32 %105, 34603008
  %or.cond511 = icmp eq i32 %106, 0
  %107 = add i32 %13, 3
  %spec.select519 = select i1 %or.cond511, i32 3, i32 %107
  br label %108

108:                                              ; preds = %104, %103
  %.3 = phi i32 [ %.2, %103 ], [ %spec.select519, %104 ]
  %109 = add i32 %5, -31
  %or.cond9 = icmp ult i32 %109, -30
  br i1 %or.cond9, label %110, label %115

110:                                              ; preds = %108
  %111 = load i32, ptr @libxsmm_ninit, align 4, !tbaa !21
  %112 = icmp ugt i32 %111, 1
  %113 = load i32, ptr @libxsmm_verbosity, align 4
  %114 = select i1 %112, i32 %113, i32 1
  tail call void @libxsmm_handle_error(ptr noundef %0, i32 noundef 90016, ptr noundef nonnull @__func__.libxsmm_generator_gemm_avx512_microkernel_nofsdbcst, ptr noundef nonnull @.str, i32 noundef 436, i32 noundef %114) #4
  br label %.loopexit

115:                                              ; preds = %108
  %116 = getelementptr inbounds i8, ptr %0, i64 28
  %117 = load i32, ptr %116, align 4, !tbaa !18
  %118 = add i32 %117, -1051
  %or.cond512 = icmp ult i32 %118, 50
  br i1 %or.cond512, label %119, label %164

119:                                              ; preds = %115
  br i1 %.not526, label %129, label %120

120:                                              ; preds = %119
  %121 = add i32 %16, %13
  %122 = add i32 %121, -32
  %123 = icmp ult i32 %122, -33
  br i1 %123, label %124, label %.critedge

124:                                              ; preds = %120
  %125 = load i32, ptr @libxsmm_ninit, align 4, !tbaa !21
  %126 = icmp ugt i32 %125, 1
  %127 = load i32, ptr @libxsmm_verbosity, align 4
  %128 = select i1 %126, i32 %127, i32 1
  tail call void @libxsmm_handle_error(ptr noundef nonnull %0, i32 noundef 90019, ptr noundef nonnull @__func__.libxsmm_generator_gemm_avx512_microkernel_nofsdbcst, ptr noundef nonnull @.str, i32 noundef 443, i32 noundef %128) #4
  br label %.loopexit

129:                                              ; preds = %119
  br i1 %51, label %130, label %149

130:                                              ; preds = %129
  %131 = load i32, ptr %35, align 1, !tbaa !14
  %132 = and i32 %131, 524288
  %133 = icmp eq i32 %132, 0
  %134 = add i32 %13, 3
  %135 = shl i32 %13, 1
  %136 = add i32 %135, 2
  %137 = select i1 %133, i32 %134, i32 %136
  %138 = and i32 %131, 1048576
  %.not496 = icmp eq i32 %138, 0
  %139 = select i1 %.not496, i32 0, i32 %13
  %.0479 = add i32 %16, %13
  %140 = add i32 %.0479, 1
  %141 = add i32 %140, %139
  %142 = add i32 %141, %137
  %143 = icmp ult i32 %142, 33
  br i1 %143, label %.critedge, label %144

144:                                              ; preds = %130
  %145 = load i32, ptr @libxsmm_ninit, align 4, !tbaa !21
  %146 = icmp ugt i32 %145, 1
  %147 = load i32, ptr @libxsmm_verbosity, align 4
  %148 = select i1 %146, i32 %147, i32 1
  tail call void @libxsmm_handle_error(ptr noundef nonnull %0, i32 noundef 90019, ptr noundef nonnull @__func__.libxsmm_generator_gemm_avx512_microkernel_nofsdbcst, ptr noundef nonnull @.str, i32 noundef 452, i32 noundef %148) #4
  br label %.loopexit

149:                                              ; preds = %129
  %150 = or disjoint i32 %5, -32
  %151 = add i32 %150, %16
  %152 = icmp ult i32 %151, -33
  br i1 %152, label %153, label %.critedge

153:                                              ; preds = %149
  %154 = load i32, ptr @libxsmm_ninit, align 4, !tbaa !21
  %155 = icmp ugt i32 %154, 1
  %156 = load i32, ptr @libxsmm_verbosity, align 4
  %157 = select i1 %155, i32 %156, i32 1
  tail call void @libxsmm_handle_error(ptr noundef nonnull %0, i32 noundef 90019, ptr noundef nonnull @__func__.libxsmm_generator_gemm_avx512_microkernel_nofsdbcst, ptr noundef nonnull @.str, i32 noundef 457, i32 noundef %157) #4
  br label %.loopexit

.critedge:                                        ; preds = %130, %149, %120
  %158 = add i32 %13, -9
  %or.cond11 = icmp ult i32 %158, -8
  br i1 %or.cond11, label %159, label %180

159:                                              ; preds = %.critedge
  %160 = load i32, ptr @libxsmm_ninit, align 4, !tbaa !21
  %161 = icmp ugt i32 %160, 1
  %162 = load i32, ptr @libxsmm_verbosity, align 4
  %163 = select i1 %161, i32 %162, i32 1
  tail call void @libxsmm_handle_error(ptr noundef nonnull %0, i32 noundef 90017, ptr noundef nonnull @__func__.libxsmm_generator_gemm_avx512_microkernel_nofsdbcst, ptr noundef nonnull @.str, i32 noundef 462, i32 noundef %163) #4
  br label %.loopexit

164:                                              ; preds = %115
  %165 = add i32 %13, -5
  %or.cond13 = icmp ult i32 %165, -4
  br i1 %or.cond13, label %166, label %171

166:                                              ; preds = %164
  %167 = load i32, ptr @libxsmm_ninit, align 4, !tbaa !21
  %168 = icmp ugt i32 %167, 1
  %169 = load i32, ptr @libxsmm_verbosity, align 4
  %170 = select i1 %168, i32 %169, i32 1
  tail call void @libxsmm_handle_error(ptr noundef nonnull %0, i32 noundef 90017, ptr noundef nonnull @__func__.libxsmm_generator_gemm_avx512_microkernel_nofsdbcst, ptr noundef nonnull @.str, i32 noundef 467, i32 noundef %170) #4
  br label %.loopexit

171:                                              ; preds = %164
  %172 = add nuw nsw i32 %16, %13
  %173 = icmp ugt i32 %172, 31
  %174 = icmp ult i32 %5, 7
  %or.cond15 = and i1 %174, %173
  br i1 %or.cond15, label %175, label %180

175:                                              ; preds = %171
  %176 = load i32, ptr @libxsmm_ninit, align 4, !tbaa !21
  %177 = icmp ugt i32 %176, 1
  %178 = load i32, ptr @libxsmm_verbosity, align 4
  %179 = select i1 %177, i32 %178, i32 1
  tail call void @libxsmm_handle_error(ptr noundef nonnull %0, i32 noundef 90019, ptr noundef nonnull @__func__.libxsmm_generator_gemm_avx512_microkernel_nofsdbcst, ptr noundef nonnull @.str, i32 noundef 471, i32 noundef %179) #4
  br label %.loopexit

180:                                              ; preds = %171, %.critedge
  %181 = load i32, ptr %35, align 1, !tbaa !14
  %182 = and i32 %181, 2048
  %.not497 = icmp eq i32 %182, 0
  br i1 %.not497, label %.lr.ph, label %183

183:                                              ; preds = %180
  %184 = tail call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef nonnull %18) #4
  %185 = tail call i32 @libxsmm_cpuid_dot_pack_factor(i32 noundef %184) #4
  br label %.lr.ph

.lr.ph:                                           ; preds = %180, %183
  %.0474 = phi i32 [ %185, %183 ], [ 1, %180 ]
  %brmerge = select i1 %88, i1 true, i1 %87
  %186 = add nsw i32 %13, -1
  %187 = getelementptr inbounds i8, ptr %2, i64 24
  %or.cond514 = select i1 %62, i1 %brmerge, i1 false
  %188 = add i32 %.3, 1
  %189 = getelementptr inbounds i8, ptr %1, i64 116
  %190 = getelementptr inbounds i8, ptr %1, i64 4
  %191 = getelementptr inbounds i8, ptr %1, i64 124
  %192 = getelementptr inbounds i8, ptr %2, i64 12
  %193 = getelementptr inbounds i8, ptr %1, i64 128
  %194 = getelementptr inbounds i8, ptr %2, i64 44
  %195 = getelementptr inbounds i8, ptr %3, i64 12
  %196 = getelementptr inbounds i8, ptr %3, i64 28
  %197 = getelementptr inbounds i8, ptr %1, i64 24
  br label %348

.preheader527:                                    ; preds = %485
  %.not537 = icmp eq i32 %5, 0
  %198 = getelementptr inbounds i8, ptr %2, i64 28
  %or.cond25 = select i1 %62, i1 true, i1 %33
  %or.cond27 = select i1 %or.cond25, i1 true, i1 %25
  %or.cond515 = select i1 %or.cond27, i1 %brmerge, i1 false
  %or.cond31.not = select i1 %.not526, i1 true, i1 %73
  %199 = select i1 %73, i32 2, i32 1
  %200 = select i1 %.not526, i32 %.0474, i32 %199
  %201 = getelementptr inbounds i8, ptr %2, i64 16
  %202 = getelementptr inbounds i8, ptr %3, i64 16
  %203 = getelementptr inbounds i8, ptr %1, i64 12
  %or.cond37 = select i1 %87, i1 true, i1 %88
  %or.cond516 = select i1 %or.cond27, i1 %or.cond37, i1 false
  %204 = add nsw i32 %5, -1
  %205 = zext i1 %54 to i32
  %206 = add nsw i32 %55, -1
  %207 = getelementptr inbounds i8, ptr %2, i64 64
  %208 = getelementptr inbounds i8, ptr %1, i64 116
  %209 = getelementptr inbounds i8, ptr %3, i64 12
  %210 = zext i32 %200 to i64
  %211 = getelementptr inbounds i8, ptr %1, i64 4
  %212 = getelementptr inbounds i8, ptr %2, i64 12
  %213 = getelementptr inbounds i8, ptr %3, i64 28
  %214 = getelementptr inbounds i8, ptr %1, i64 24
  %215 = zext i32 %.0474 to i64
  %216 = getelementptr inbounds i8, ptr %2, i64 56
  br i1 %.not537, label %.loopexit, label %.preheader.us

.preheader.us:                                    ; preds = %.preheader527, %._crit_edge534.us
  %.0467535.us = phi i32 [ %347, %._crit_edge534.us ], [ 0, %.preheader527 ]
  %217 = mul nuw nsw i32 %.0467535.us, %200
  %218 = icmp eq i32 %.0467535.us, %206
  %219 = mul nuw nsw i32 %.0467535.us, %13
  %220 = add i32 %188, %219
  br label %221

221:                                              ; preds = %.preheader.us, %._crit_edge.us
  %.0532.us = phi i32 [ 0, %.preheader.us ], [ %278, %._crit_edge.us ]
  %222 = load i8, ptr %90, align 4, !tbaa !20
  %223 = load i32, ptr %198, align 4, !tbaa !22
  %224 = icmp eq i8 %222, 122
  %225 = select i1 %224, i8 121, i8 120
  %.0471.us = select i1 %or.cond515, i8 %225, i8 %222
  %.0470.us = select i1 %or.cond31.not, i32 %223, i32 537209209
  %226 = load i32, ptr %35, align 1, !tbaa !14
  %227 = and i32 %226, 2
  %.not498.us = icmp eq i32 %227, 0
  br i1 %.not498.us, label %233, label %228

228:                                              ; preds = %221
  %229 = load i32, ptr %201, align 8, !tbaa !23
  %230 = mul i32 %.0532.us, %200
  %231 = load i32, ptr %202, align 1, !tbaa !24
  %232 = mul i32 %231, %.0467535.us
  %reass.add.us = add i32 %230, %232
  %reass.mul.us = mul i32 %reass.add.us, %229
  br label %239

233:                                              ; preds = %221
  %234 = load i32, ptr %202, align 1, !tbaa !24
  %235 = mul i32 %234, %.0532.us
  %236 = load i32, ptr %201, align 8, !tbaa !23
  %237 = add i32 %235, %217
  %238 = mul i32 %237, %236
  br label %239

239:                                              ; preds = %233, %228
  %.0472.us = phi i32 [ %reass.mul.us, %228 ], [ %238, %233 ]
  %240 = tail call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef nonnull %18) #4
  %241 = icmp eq i32 %240, 2
  br i1 %241, label %242, label %248

242:                                              ; preds = %239
  %243 = load i32, ptr %35, align 1, !tbaa !14
  %244 = and i32 %243, 8388608
  %.not499.us = icmp eq i32 %244, 0
  br i1 %.not499.us, label %248, label %245

245:                                              ; preds = %242
  %246 = icmp eq i8 %.0471.us, 122
  %247 = select i1 %246, i8 121, i8 120
  br label %248

248:                                              ; preds = %245, %242, %239
  %249 = phi i8 [ %247, %245 ], [ %.0471.us, %242 ], [ %.0471.us, %239 ]
  %250 = load i32, ptr %2, align 8, !tbaa !25
  %251 = load i32, ptr %203, align 4, !tbaa !26
  tail call void @libxsmm_x86_instruction_vec_move(ptr noundef %0, i32 noundef %250, i32 noundef %.0470.us, i32 noundef %251, i32 noundef 127, i32 noundef 0, i32 noundef %.0472.us, i8 noundef signext %249, i32 noundef %.3, i32 noundef 0, i32 noundef 1, i32 noundef 0) #4
  %252 = load i32, ptr %35, align 1, !tbaa !14
  %253 = and i32 %252, 8388608
  %.not500.us = icmp eq i32 %253, 0
  br i1 %.not500.us, label %259, label %254

254:                                              ; preds = %248
  %255 = tail call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef nonnull %18) #4
  %256 = icmp eq i32 %255, 2
  br i1 %256, label %257, label %259

257:                                              ; preds = %254
  %258 = load i8, ptr %90, align 4, !tbaa !20
  tail call void @libxsmm_generator_cvtbf16ps_sse_avx2_avx512(ptr noundef %0, i8 noundef signext %258, i32 noundef %.3, i32 noundef %.3) #4
  br label %259

259:                                              ; preds = %257, %254, %248
  br i1 %or.cond516, label %260, label %261

260:                                              ; preds = %259
  tail call void @libxsmm_x86_instruction_vec_compute_2reg(ptr noundef %0, i32 noundef 537208083, i8 noundef signext %.1476, i32 noundef %.3, i32 noundef %.3) #4
  br label %261

261:                                              ; preds = %260, %259
  br i1 %or.cond31.not, label %264, label %262

262:                                              ; preds = %261
  %263 = load i8, ptr %90, align 4, !tbaa !20
  tail call void @libxsmm_x86_instruction_vec_compute_2reg_imm8(ptr noundef %0, i32 noundef 611128946, i8 noundef signext %263, i32 noundef %.3, i32 noundef %.3, i32 noundef 16) #4
  br label %264

264:                                              ; preds = %262, %261
  %265 = icmp eq i32 %.0532.us, %204
  br i1 %265, label %266, label %.lr.ph531.us

266:                                              ; preds = %264
  %267 = load i32, ptr %35, align 1, !tbaa !14
  %268 = and i32 %267, 2
  %.not501.us = icmp eq i32 %268, 0
  br i1 %.not501.us, label %271, label %269

269:                                              ; preds = %266
  %270 = load i32, ptr %202, align 1, !tbaa !24
  br label %271

271:                                              ; preds = %266, %269
  %.sink544 = phi i32 [ %270, %269 ], [ %200, %266 ]
  br i1 %218, label %272, label %.lr.ph531.us

272:                                              ; preds = %271
  %273 = load i32, ptr %201, align 8, !tbaa !23
  %274 = mul i32 %273, %.sink544
  %.1473.us = shl i32 %274, %205
  %275 = load i32, ptr %207, align 8, !tbaa !28
  %276 = load i32, ptr %203, align 4, !tbaa !26
  %277 = sext i32 %.1473.us to i64
  tail call void @libxsmm_x86_instruction_alu_imm(ptr noundef %0, i32 noundef %275, i32 noundef %276, i64 noundef %277) #4
  br label %.lr.ph531.us

._crit_edge.us:                                   ; preds = %343
  %278 = add nuw i32 %.0532.us, 1
  %exitcond541.not = icmp eq i32 %278, %5
  br i1 %exitcond541.not, label %._crit_edge534.us, label %221, !llvm.loop !29

279:                                              ; preds = %.lr.ph531.us, %343
  %.1530.us = phi i32 [ 0, %.lr.ph531.us ], [ %344, %343 ]
  %280 = or i32 %.1530.us, %.0467535.us
  %281 = icmp eq i32 %280, 0
  %or.cond517.us = and i1 %265, %281
  br i1 %or.cond517.us, label %282, label %311

282:                                              ; preds = %279
  %283 = load i32, ptr %35, align 1, !tbaa !14
  %284 = and i32 %283, 8388608
  %.not502.us = icmp eq i32 %284, 0
  %285 = load i32, ptr %207, align 8, !tbaa !28
  %286 = load i32, ptr %209, align 1, !tbaa !31
  br i1 %.not502.us, label %292, label %287

287:                                              ; preds = %282
  %288 = load i32, ptr %208, align 4, !tbaa !32
  %289 = lshr i32 %286, 3
  %290 = zext nneg i32 %289 to i64
  %291 = mul nuw nsw i64 %290, %210
  tail call void @libxsmm_x86_instruction_alu_imm(ptr noundef %0, i32 noundef %285, i32 noundef %288, i64 noundef %291) #4
  br label %299

292:                                              ; preds = %282
  %293 = load i32, ptr %211, align 4, !tbaa !33
  %294 = zext i32 %286 to i64
  %295 = load i32, ptr %212, align 4, !tbaa !34
  %296 = zext i32 %295 to i64
  %297 = mul nuw i64 %294, %210
  %298 = mul i64 %297, %296
  tail call void @libxsmm_x86_instruction_alu_imm(ptr noundef %0, i32 noundef %285, i32 noundef %293, i64 noundef %298) #4
  br label %299

299:                                              ; preds = %292, %287
  %300 = load i8, ptr %213, align 1, !tbaa !35
  %301 = icmp eq i8 %300, 1
  br i1 %301, label %302, label %311

302:                                              ; preds = %299
  %303 = load i32, ptr %207, align 8, !tbaa !28
  %304 = load i32, ptr %214, align 4, !tbaa !36
  %305 = load i32, ptr %209, align 1, !tbaa !31
  %306 = zext i32 %305 to i64
  %307 = load i32, ptr %212, align 4, !tbaa !34
  %308 = zext i32 %307 to i64
  %309 = mul nuw i64 %306, %215
  %310 = mul i64 %309, %308
  tail call void @libxsmm_x86_instruction_alu_imm(ptr noundef %0, i32 noundef %303, i32 noundef %304, i64 noundef %310) #4
  br label %311

311:                                              ; preds = %302, %299, %279
  %312 = tail call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef nonnull %18) #4
  %313 = icmp eq i32 %312, 12
  br i1 %313, label %328, label %314

314:                                              ; preds = %311
  br i1 %87, label %320, label %315

315:                                              ; preds = %314
  %316 = load i32, ptr %216, align 8, !tbaa !17
  %317 = load i8, ptr %90, align 4, !tbaa !20
  %318 = add i32 %220, %.1530.us
  %319 = add i32 %346, %.1530.us
  tail call void @libxsmm_x86_instruction_vec_compute_3reg(ptr noundef %0, i32 noundef %316, i8 noundef signext %317, i32 noundef %318, i32 noundef %.3, i32 noundef %319) #4
  br label %343

320:                                              ; preds = %314
  %321 = add i32 %346, %.1530.us
  tail call void @libxsmm_x86_instruction_vec_compute_2reg(ptr noundef %0, i32 noundef 537208083, i8 noundef signext %.1476, i32 noundef %321, i32 noundef %321) #4
  %322 = load i32, ptr %216, align 8, !tbaa !17
  %323 = add i32 %220, %.1530.us
  tail call void @libxsmm_x86_instruction_vec_compute_3reg(ptr noundef %0, i32 noundef %322, i8 noundef signext %.1476, i32 noundef %323, i32 noundef %.3, i32 noundef %321) #4
  %324 = load i32, ptr %116, align 4, !tbaa !18
  %325 = icmp ugt i32 %324, 1100
  %326 = zext i1 %325 to i32
  %327 = zext i1 %325 to i8
  tail call void @libxsmm_x86_instruction_vec_compute_2reg_mask_sae_imm8(ptr noundef %0, i32 noundef 671954205, i8 noundef signext %.1476, i32 noundef %321, i32 noundef %321, i32 noundef 0, i32 noundef %326, i8 noundef zeroext %327, i32 noundef 0) #4
  br label %343

328:                                              ; preds = %311
  %329 = load i32, ptr %35, align 1, !tbaa !14
  %330 = and i32 %329, 256
  %.not503.us = icmp eq i32 %330, 0
  br i1 %.not503.us, label %336, label %331

331:                                              ; preds = %328
  %332 = load i32, ptr %216, align 8, !tbaa !17
  %333 = load i8, ptr %90, align 4, !tbaa !20
  %334 = add i32 %220, %.1530.us
  %335 = add i32 %346, %.1530.us
  tail call void @libxsmm_x86_instruction_vec_compute_3reg(ptr noundef %0, i32 noundef %332, i8 noundef signext %333, i32 noundef %.3, i32 noundef %334, i32 noundef %335) #4
  br label %343

336:                                              ; preds = %328
  %337 = and i32 %329, 512
  %.not504.us = icmp eq i32 %337, 0
  br i1 %.not504.us, label %343, label %338

338:                                              ; preds = %336
  %339 = load i32, ptr %216, align 8, !tbaa !17
  %340 = load i8, ptr %90, align 4, !tbaa !20
  %341 = add i32 %220, %.1530.us
  %342 = add i32 %346, %.1530.us
  tail call void @libxsmm_x86_instruction_vec_compute_3reg(ptr noundef %0, i32 noundef %339, i8 noundef signext %340, i32 noundef %341, i32 noundef %.3, i32 noundef %342) #4
  br label %343

343:                                              ; preds = %338, %336, %331, %320, %315
  %344 = add nuw i32 %.1530.us, 1
  %exitcond540.not = icmp eq i32 %344, %13
  br i1 %exitcond540.not, label %._crit_edge.us, label %279, !llvm.loop !37

.lr.ph531.us:                                     ; preds = %264, %271, %272
  %345 = mul i32 %.0532.us, %13
  %346 = add i32 %345, %17
  br label %279

._crit_edge534.us:                                ; preds = %._crit_edge.us
  %347 = add nuw nsw i32 %.0467535.us, 1
  %exitcond542.not = icmp eq i32 %347, %55
  br i1 %exitcond542.not, label %.loopexit, label %.preheader.us, !llvm.loop !38

348:                                              ; preds = %.lr.ph, %485
  %.0466529 = phi i32 [ 0, %.lr.ph ], [ %486, %485 ]
  %.0475528 = phi i8 [ %91, %.lr.ph ], [ %.1476, %485 ]
  %349 = tail call ptr @getenv(ptr noundef nonnull @.str.1) #4
  %350 = icmp eq ptr %349, null
  br i1 %350, label %353, label %351

351:                                              ; preds = %348
  %352 = tail call i32 @atoi(ptr nocapture noundef %349) #5
  br label %353

353:                                              ; preds = %348, %351
  %354 = phi i32 [ %352, %351 ], [ 0, %348 ]
  br i1 %or.cond, label %355, label %360

355:                                              ; preds = %353
  br i1 %brmerge, label %362, label %356

356:                                              ; preds = %355
  %357 = load i8, ptr %90, align 4, !tbaa !20
  %358 = icmp eq i8 %357, 122
  %359 = select i1 %358, i8 121, i8 120
  br label %362

360:                                              ; preds = %353
  %361 = load i8, ptr %90, align 4, !tbaa !20
  br label %365

362:                                              ; preds = %355, %356
  %.ph522 = phi i8 [ 120, %355 ], [ %359, %356 ]
  %363 = load i32, ptr %116, align 4, !tbaa !18
  %364 = icmp ugt i32 %363, 1100
  %.not505 = icmp eq i32 %.0466529, %186
  %or.cond513 = or i1 %.not505, %364
  br i1 %or.cond513, label %365, label %368

365:                                              ; preds = %360, %362
  %366 = phi i8 [ %361, %360 ], [ %.ph522, %362 ]
  %367 = load i32, ptr %187, align 8, !tbaa !39
  br label %368

368:                                              ; preds = %362, %365
  %369 = phi i8 [ %366, %365 ], [ %.ph522, %362 ]
  %370 = phi i32 [ %367, %365 ], [ 545725200, %362 ]
  br i1 %or.cond514, label %371, label %375

371:                                              ; preds = %368
  %372 = load i8, ptr %90, align 4, !tbaa !20
  %373 = icmp eq i8 %372, 122
  %374 = select i1 %373, i8 121, i8 120
  br label %375

375:                                              ; preds = %371, %368
  %.0477 = phi i8 [ %374, %371 ], [ %369, %368 ]
  br i1 %87, label %376, label %383

376:                                              ; preds = %375
  switch i8 %.0477, label %381 [
    i8 121, label %383
    i8 120, label %377
  ]

377:                                              ; preds = %376
  %378 = load i32, ptr %116, align 4, !tbaa !18
  %379 = icmp ult i32 %378, 1101
  %380 = select i1 %379, i8 121, i8 122
  br label %383

381:                                              ; preds = %376
  %382 = load i8, ptr %90, align 4, !tbaa !20
  br label %383

383:                                              ; preds = %381, %377, %376, %375
  %.1476 = phi i8 [ %.0475528, %375 ], [ 122, %376 ], [ %380, %377 ], [ %382, %381 ]
  br i1 %.not526, label %386, label %384

384:                                              ; preds = %383
  %385 = add i32 %188, %.0466529
  tail call void @libxsmm_generator_gemm_avx512_microkernel_loadNinterleave_A_pair_k_i8_to_bf16(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef nonnull %3, i32 noundef %385, i32 noundef %.3, i32 noundef 0, i32 noundef %13, i32 noundef %.0466529)
  br label %471

386:                                              ; preds = %383
  %387 = load i32, ptr %35, align 1, !tbaa !14
  %388 = and i32 %387, 8388608
  %.not506 = icmp eq i32 %388, 0
  br i1 %.not506, label %444, label %389

389:                                              ; preds = %386
  %390 = add i32 %.0466529, 3
  %391 = and i32 %390, 7
  %392 = tail call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef nonnull %18) #4
  %393 = icmp eq i32 %392, 2
  br i1 %393, label %394, label %401

394:                                              ; preds = %389
  %395 = load i32, ptr %35, align 1, !tbaa !14
  %396 = and i32 %395, 8388608
  %.not507 = icmp eq i32 %396, 0
  br i1 %.not507, label %401, label %397

397:                                              ; preds = %394
  %398 = load i8, ptr %90, align 4, !tbaa !20
  %399 = icmp eq i8 %398, 122
  %400 = select i1 %399, i8 121, i8 120
  br label %403

401:                                              ; preds = %394, %389
  %402 = load i8, ptr %90, align 4, !tbaa !20
  br label %403

403:                                              ; preds = %401, %397
  %404 = phi i8 [ %400, %397 ], [ %402, %401 ]
  %405 = tail call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef nonnull %18) #4
  %406 = icmp eq i32 %405, 3
  %407 = select i1 %406, i32 -1601891952, i32 -1610346096
  %408 = load i32, ptr %189, align 4, !tbaa !32
  %409 = load i32, ptr %7, align 8, !tbaa !5
  %410 = lshr i32 %409, 3
  %411 = mul i32 %.0466529, %.0474
  %412 = mul i32 %411, %410
  tail call void @libxsmm_x86_instruction_mask_move_mem(ptr noundef %0, i32 noundef %407, i32 noundef %408, i32 noundef 127, i32 noundef 0, i32 noundef %412, i32 noundef %391) #4
  %413 = load i32, ptr %189, align 4, !tbaa !32
  %414 = load i32, ptr %7, align 8, !tbaa !5
  %415 = lshr i32 %414, 3
  %416 = mul i32 %411, %415
  %417 = add i32 %416, 1024
  tail call void @libxsmm_x86_instruction_prefetch(ptr noundef %0, i32 noundef -1810624488, i32 noundef %413, i32 noundef 127, i32 noundef 0, i32 noundef %417) #4
  %418 = tail call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef nonnull %18) #4
  %419 = icmp eq i32 %418, 3
  br i1 %419, label %.thread524, label %420

420:                                              ; preds = %403
  %421 = tail call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef nonnull %18) #4
  %.fr = freeze i32 %421
  %422 = icmp eq i32 %.fr, 2
  br i1 %422, label %.thread524, label %423

.thread524:                                       ; preds = %403, %420
  br label %423

423:                                              ; preds = %420, %.thread524
  %424 = phi i32 [ -528144030, %.thread524 ], [ -536532343, %420 ]
  %425 = load i32, ptr %190, align 4, !tbaa !33
  %426 = load i32, ptr %191, align 4, !tbaa !40
  %427 = load i32, ptr %192, align 4, !tbaa !34
  %428 = add i32 %188, %.0466529
  tail call void @libxsmm_x86_instruction_vec_compute_mem_2reg_mask_imm8(ptr noundef %0, i32 noundef %424, i8 noundef signext %404, i32 noundef %425, i32 noundef %426, i32 noundef %427, i32 noundef 0, i32 noundef 0, i32 noundef 255, i32 noundef %428, i32 noundef %391, i32 noundef 1, i32 noundef 0) #4
  %429 = tail call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef nonnull %18) #4
  %430 = icmp eq i32 %429, 2
  br i1 %430, label %431, label %433

431:                                              ; preds = %423
  %432 = load i8, ptr %90, align 4, !tbaa !20
  tail call void @libxsmm_generator_cvtbf16ps_sse_avx2_avx512(ptr noundef %0, i8 noundef signext %432, i32 noundef %428, i32 noundef %428) #4
  br label %433

433:                                              ; preds = %431, %423
  %434 = load i32, ptr %190, align 4, !tbaa !33
  %435 = load i32, ptr %191, align 4, !tbaa !40
  %436 = load i32, ptr %192, align 4, !tbaa !34
  tail call void @libxsmm_x86_instruction_prefetch(ptr noundef %0, i32 noundef -1810624488, i32 noundef %434, i32 noundef %435, i32 noundef %436, i32 noundef 1024) #4
  %437 = tail call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef nonnull %18) #4
  %438 = icmp eq i32 %437, 3
  %439 = select i1 %438, i32 -1475931757, i32 -1476128365
  %440 = load i32, ptr %193, align 4, !tbaa !41
  tail call void @libxsmm_x86_instruction_mask_move(ptr noundef %0, i32 noundef %439, i32 noundef %440, i32 noundef %391) #4
  %441 = load i32, ptr %193, align 4, !tbaa !41
  tail call void @libxsmm_x86_instruction_alu_reg(ptr noundef %0, i32 noundef 30004, i32 noundef %441, i32 noundef %441) #4
  %442 = load i32, ptr %193, align 4, !tbaa !41
  %443 = load i32, ptr %191, align 4, !tbaa !40
  tail call void @libxsmm_x86_instruction_alu_reg(ptr noundef %0, i32 noundef 30000, i32 noundef %442, i32 noundef %443) #4
  br label %471

444:                                              ; preds = %386
  %445 = load i32, ptr %2, align 8, !tbaa !25
  %446 = load i32, ptr %190, align 4, !tbaa !33
  %447 = load i32, ptr %192, align 4, !tbaa !34
  %448 = load i32, ptr %7, align 8, !tbaa !5
  %449 = mul i32 %.0466529, %.0474
  %450 = mul i32 %449, %447
  %451 = mul i32 %450, %448
  %452 = add i32 %188, %.0466529
  %453 = icmp eq i32 %.0466529, %186
  br i1 %453, label %454, label %456

454:                                              ; preds = %444
  %455 = load i32, ptr %194, align 4, !tbaa !42
  br label %456

456:                                              ; preds = %444, %454
  %457 = phi i32 [ %455, %454 ], [ 0, %444 ]
  tail call void @libxsmm_x86_instruction_vec_move(ptr noundef %0, i32 noundef %445, i32 noundef %370, i32 noundef %446, i32 noundef 127, i32 noundef 0, i32 noundef %451, i8 noundef signext %.0477, i32 noundef %452, i32 noundef %457, i32 noundef 1, i32 noundef 0) #4
  %458 = load i32, ptr %192, align 4, !tbaa !34
  %459 = load i32, ptr %7, align 8, !tbaa !5
  %460 = mul i32 %449, %458
  %461 = mul i32 %460, %459
  %462 = and i32 %461, 63
  %463 = icmp eq i32 %462, 0
  %464 = icmp ne i32 %354, 0
  %or.cond23 = select i1 %463, i1 %464, i1 false
  br i1 %or.cond23, label %465, label %471

465:                                              ; preds = %456
  %466 = load i32, ptr %190, align 4, !tbaa !33
  %467 = load i32, ptr %195, align 1, !tbaa !31
  %468 = mul i32 %458, %354
  %469 = mul i32 %468, %467
  %470 = add i32 %469, %461
  tail call void @libxsmm_x86_instruction_prefetch(ptr noundef %0, i32 noundef -1810624488, i32 noundef %466, i32 noundef 127, i32 noundef 0, i32 noundef %470) #4
  br label %471

471:                                              ; preds = %433, %465, %456, %384
  %472 = add i32 %188, %.0466529
  br i1 %53, label %473, label %474

473:                                              ; preds = %471
  tail call void @libxsmm_generator_gemm_avx512_microkernel_process_vreg_A_for_i4i8(ptr noundef %0, ptr noundef %2, ptr noundef nonnull %3, i32 noundef %.0466529, i32 noundef %13, i32 noundef %472)
  br label %475

474:                                              ; preds = %471
  tail call void @libxsmm_generator_gemm_avx512_microkernel_process_vreg_A(ptr noundef %0, ptr noundef %2, ptr noundef nonnull %3, i8 noundef signext %.1476, i32 noundef %34, i32 noundef %26, i32 noundef %63, i32 noundef %86, i32 noundef %89, i32 noundef %.0466529, i32 noundef %13, i32 noundef %472)
  br label %475

475:                                              ; preds = %474, %473
  %476 = load i8, ptr %196, align 1, !tbaa !35
  %477 = icmp eq i8 %476, 1
  br i1 %477, label %478, label %485

478:                                              ; preds = %475
  %479 = load i32, ptr %197, align 4, !tbaa !36
  %480 = load i32, ptr %192, align 4, !tbaa !34
  %481 = load i32, ptr %7, align 8, !tbaa !5
  %482 = mul i32 %.0466529, %.0474
  %483 = mul i32 %482, %480
  %484 = mul i32 %483, %481
  tail call void @libxsmm_x86_instruction_prefetch(ptr noundef %0, i32 noundef -1809575912, i32 noundef %479, i32 noundef 127, i32 noundef 0, i32 noundef %484) #4
  br label %485

485:                                              ; preds = %478, %475
  %486 = add nuw i32 %.0466529, 1
  %exitcond.not = icmp eq i32 %486, %13
  br i1 %exitcond.not, label %.preheader527, label %348, !llvm.loop !43

.loopexit:                                        ; preds = %._crit_edge534.us, %.preheader527, %144, %175, %166, %159, %153, %124, %110
  ret void
}

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

declare void @libxsmm_x86_instruction_vec_move(ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i8 noundef signext, i32 noundef, i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #0

declare void @libxsmm_x86_instruction_vec_compute_2reg(ptr noundef, i32 noundef, i8 noundef signext, i32 noundef, i32 noundef) local_unnamed_addr #0

declare void @libxsmm_x86_instruction_vec_compute_3reg(ptr noundef, i32 noundef, i8 noundef signext, i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #0

declare void @libxsmm_x86_instruction_vec_compute_2reg_imm8(ptr noundef, i32 noundef, i8 noundef signext, i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #0

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

; Function Attrs: nounwind uwtable
declare dso_local void @libxsmm_generator_gemm_avx512_microkernel_process_vreg_A(ptr noundef, ptr noundef, ptr noundef, i8 noundef signext, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #1

declare void @libxsmm_x86_instruction_vec_compute_2reg_mask_sae_imm8(ptr noundef, i32 noundef, i8 noundef signext, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i8 noundef zeroext, i32 noundef) local_unnamed_addr #0

declare i32 @LIBXSMM_GEMM_GETENUM_COMP_PREC(ptr noundef) local_unnamed_addr #0

declare void @libxsmm_handle_error(ptr noundef, i32 noundef, ptr noundef, ptr noundef, i32 noundef, i32 noundef) local_unnamed_addr #0

; Function Attrs: nofree nounwind memory(read)
declare noundef ptr @getenv(ptr nocapture noundef) local_unnamed_addr #2

; Function Attrs: inlinehint mustprogress nofree nounwind willreturn memory(read) uwtable
declare i32 @atoi(ptr nocapture noundef nonnull) local_unnamed_addr #3

declare void @libxsmm_x86_instruction_mask_move_mem(ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #0

declare void @libxsmm_x86_instruction_prefetch(ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #0

declare void @libxsmm_x86_instruction_vec_compute_mem_2reg_mask_imm8(ptr noundef, i32 noundef, i8 noundef signext, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #0

declare void @libxsmm_generator_cvtbf16ps_sse_avx2_avx512(ptr noundef, i8 noundef signext, i32 noundef, i32 noundef) local_unnamed_addr #0

declare void @libxsmm_x86_instruction_mask_move(ptr noundef, i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #0

declare void @libxsmm_x86_instruction_alu_reg(ptr noundef, i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #0

declare void @libxsmm_x86_instruction_alu_imm(ptr noundef, i32 noundef, i32 noundef, i64 noundef) local_unnamed_addr #0

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

!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, !7, i64 8}
!6 = !{!"libxsmm_micro_kernel_config", !7, i64 0, !7, i64 4, !7, i64 8, !7, i64 12, !7, i64 16, !7, i64 20, !7, i64 24, !7, i64 28, !7, i64 32, !7, i64 36, !7, i64 40, !7, i64 44, !7, i64 48, !7, i64 52, !7, i64 56, !7, i64 60, !7, i64 64, !7, i64 68, !7, i64 72, !7, i64 76, !7, i64 80, !8, i64 84, !7, i64 88, !7, i64 92, !7, i64 96, !7, i64 100, !7, i64 104, !7, i64 108, !7, i64 112, !7, i64 116, !7, i64 120, !7, i64 124, !7, i64 128, !7, i64 132, !7, i64 136, !7, i64 140, !7, i64 144, !7, i64 148, !7, i64 152, !7, i64 156, !7, i64 160, !7, i64 164, !7, i64 168, !7, i64 172, !7, i64 176, !7, i64 180, !7, i64 184, !7, i64 188, !7, i64 192, !7, i64 196, !7, i64 200, !7, i64 204, !7, i64 208, !7, i64 212, !7, i64 216, !7, i64 220, !7, i64 224, !7, i64 228, !7, i64 232, !7, i64 236, !7, i64 240, !7, i64 244, !7, i64 248, !7, i64 252, !7, i64 256, !7, i64 260, !7, i64 264, !7, i64 268, !7, i64 272, !7, i64 276, !7, i64 280, !7, i64 284, !7, i64 288, !7, i64 292, !7, i64 296, !7, i64 300, !7, i64 304, !7, i64 308, !7, i64 312, !7, i64 316, !7, i64 320, !7, i64 324, !7, i64 328, !7, i64 332, !7, i64 336, !7, i64 340, !7, i64 344, !7, i64 348, !7, i64 352, !7, i64 356, !7, i64 360, !8, i64 364, !8, i64 380, !8, i64 396, !8, i64 412, !8, i64 428, !8, i64 444, !7, i64 460, !8, i64 464, !10, i64 520, !7, i64 556, !7, i64 560, !7, i64 564, !7, i64 568, !7, i64 572, !7, i64 576, !7, i64 580, !7, i64 584, !12, i64 592, !7, i64 600, !7, i64 604, !7, i64 608, !7, i64 612, !12, i64 616, !7, i64 624, !7, i64 628, !7, i64 632, !7, i64 636, !7, i64 640, !7, i64 644, !7, i64 648, !7, i64 652, !7, i64 656, !7, i64 660, !7, i64 664, !7, i64 668, !7, i64 672, !7, i64 676, !7, i64 680}
!7 = !{!"int", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!"libxsmm_tile_config", !8, i64 0, !11, i64 2, !8, i64 4, !11, i64 6, !8, i64 8, !11, i64 10, !8, i64 12, !11, i64 14, !8, i64 16, !11, i64 18, !8, i64 20, !11, i64 22, !8, i64 24, !11, i64 26, !8, i64 28, !11, i64 30, !8, i64 32}
!11 = !{!"short", !8, i64 0}
!12 = !{!"any pointer", !8, i64 0}
!13 = !{!6, !7, i64 4}
!14 = !{!15, !7, i64 24}
!15 = !{!"libxsmm_gemm_descriptor", !7, i64 0, !7, i64 4, !7, i64 8, !7, i64 12, !7, i64 16, !7, i64 20, !7, i64 24, !8, i64 28, !8, i64 29, !8, i64 32, !16, i64 33, !16, i64 41, !8, i64 49, !7, i64 50, !7, i64 54, !7, i64 58, !11, i64 62, !11, i64 64, !8, i64 66, !8, i64 67, !8, i64 68, !8, i64 69, !11, i64 70, !11, i64 72, !11, i64 74, !11, i64 76, !11, i64 78, !11, i64 80, !7, i64 82, !7, i64 86, !7, i64 90, !8, i64 94}
!16 = !{!"long long", !8, i64 0}
!17 = !{!6, !7, i64 56}
!18 = !{!19, !7, i64 28}
!19 = !{!"libxsmm_generated_code", !12, i64 0, !7, i64 8, !7, i64 12, !7, i64 16, !7, i64 20, !7, i64 24, !7, i64 28}
!20 = !{!6, !8, i64 84}
!21 = !{!7, !7, i64 0}
!22 = !{!6, !7, i64 28}
!23 = !{!6, !7, i64 16}
!24 = !{!15, !7, i64 16}
!25 = !{!6, !7, i64 0}
!26 = !{!27, !7, i64 12}
!27 = !{!"libxsmm_gp_reg_mapping_struct", !7, i64 0, !7, i64 4, !7, i64 8, !7, i64 12, !7, i64 16, !7, i64 20, !7, i64 24, !7, i64 28, !7, i64 32, !7, i64 36, !7, i64 40, !7, i64 44, !7, i64 48, !7, i64 52, !7, i64 56, !7, i64 60, !7, i64 64, !7, i64 68, !7, i64 72, !7, i64 76, !7, i64 80, !7, i64 84, !7, i64 88, !7, i64 92, !7, i64 96, !7, i64 100, !7, i64 104, !7, i64 108, !7, i64 112, !7, i64 116, !7, i64 120, !7, i64 124, !7, i64 128}
!28 = !{!6, !7, i64 64}
!29 = distinct !{!29, !30}
!30 = !{!"llvm.loop.mustprogress"}
!31 = !{!15, !7, i64 12}
!32 = !{!27, !7, i64 116}
!33 = !{!27, !7, i64 4}
!34 = !{!6, !7, i64 12}
!35 = !{!15, !8, i64 28}
!36 = !{!27, !7, i64 24}
!37 = distinct !{!37, !30}
!38 = distinct !{!38, !30}
!39 = !{!6, !7, i64 24}
!40 = !{!27, !7, i64 124}
!41 = !{!27, !7, i64 128}
!42 = !{!6, !7, i64 44}
!43 = distinct !{!43, !30}


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