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

; 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_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 }
%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_generated_code = type { ptr, i32, i32, i32, i32, i32, i32 }

@.str.1 = external hidden unnamed_addr constant [77 x i8], align 1
@libxsmm_ninit = external global i32, align 4
@libxsmm_verbosity = external global i32, align 4
@__func__.libxsmm_generator_gemm_load_colbias_to_2D_block = external hidden unnamed_addr constant [48 x i8], align 1

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

; Function Attrs: 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_getval_stack_var(ptr noundef, ptr noundef, i32 noundef, i32 noundef) #1

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

declare void @libxsmm_x86_instruction_vec_compute_2reg(ptr noundef, i32 noundef, i8 noundef signext, 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) #2

declare void @libxsmm_x86_instruction_push_reg(ptr noundef, i32 noundef) #2

declare void @libxsmm_x86_instruction_pop_reg(ptr noundef, i32 noundef) #2

; Function Attrs: nounwind uwtable
define dso_local void @libxsmm_generator_gemm_load_colbias_to_2D_block(ptr noundef %0, ptr noundef %1, ptr noundef %2, i32 noundef %3, i32 noundef %4, i32 noundef %5, i32 noundef %6, i32 noundef %7, i32 noundef %8) #1 {
  %10 = alloca ptr, align 8
  %11 = alloca ptr, align 8
  %12 = alloca ptr, align 8
  %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 i8, align 1
  %22 = alloca i8, align 1
  %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
  store ptr %0, ptr %10, align 8, !tbaa !5
  store ptr %1, ptr %11, align 8, !tbaa !5
  store ptr %2, ptr %12, align 8, !tbaa !5
  store i32 %3, ptr %13, align 4, !tbaa !9
  store i32 %4, ptr %14, align 4, !tbaa !9
  store i32 %5, ptr %15, align 4, !tbaa !9
  store i32 %6, ptr %16, align 4, !tbaa !9
  store i32 %7, ptr %17, align 4, !tbaa !9
  store i32 %8, ptr %18, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #3
  store i32 0, ptr %19, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #3
  store i32 0, ptr %20, align 4, !tbaa !9
  %28 = load ptr, ptr %10, align 8, !tbaa !5
  %29 = load ptr, ptr %11, align 8, !tbaa !5
  %30 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %29, i32 0, i32 24
  %31 = load i32, ptr %30, align 4, !tbaa !11
  call void @libxsmm_x86_instruction_push_reg(ptr noundef %28, i32 noundef %31)
  %32 = load i32, ptr %13, align 4, !tbaa !9
  %33 = icmp eq i32 %32, 5
  br i1 %33, label %34, label %39

34:                                               ; preds = %9
  %35 = load ptr, ptr %10, align 8, !tbaa !5
  %36 = load ptr, ptr %11, align 8, !tbaa !5
  %37 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %36, i32 0, i32 24
  %38 = load i32, ptr %37, align 4, !tbaa !11
  call void @libxsmm_generator_vcvt_hf8_tofrom_f32_avx512_prep_stack(ptr noundef %35, i32 noundef %38)
  br label %39

39:                                               ; preds = %34, %9
  %40 = load ptr, ptr %10, align 8, !tbaa !5
  %41 = load ptr, ptr %12, align 8, !tbaa !5
  %42 = load ptr, ptr %11, align 8, !tbaa !5
  %43 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %42, i32 0, i32 24
  %44 = load i32, ptr %43, align 4, !tbaa !11
  call void @libxsmm_generator_gemm_getval_stack_var(ptr noundef %40, ptr noundef %41, i32 noundef 7, i32 noundef %44)
  store i32 0, ptr %20, align 4, !tbaa !9
  br label %45

45:                                               ; preds = %654, %39
  %46 = load i32, ptr %20, align 4, !tbaa !9
  %47 = load i32, ptr %16, align 4, !tbaa !9
  %48 = icmp ult i32 %46, %47
  br i1 %48, label %49, label %657

49:                                               ; preds = %45
  store i32 0, ptr %19, align 4, !tbaa !9
  br label %50

50:                                               ; preds = %650, %49
  %51 = load i32, ptr %19, align 4, !tbaa !9
  %52 = load i32, ptr %17, align 4, !tbaa !9
  %53 = icmp ult i32 %51, %52
  br i1 %53, label %54, label %653

54:                                               ; preds = %50
  %55 = load i32, ptr %13, align 4, !tbaa !9
  %56 = icmp eq i32 %55, 2
  br i1 %56, label %60, label %57

57:                                               ; preds = %54
  %58 = load i32, ptr %13, align 4, !tbaa !9
  %59 = icmp eq i32 %58, 3
  br i1 %59, label %60, label %309

60:                                               ; preds = %57, %54
  %61 = load i32, ptr %19, align 4, !tbaa !9
  %62 = icmp eq i32 %61, 0
  br i1 %62, label %63, label %282

63:                                               ; preds = %60
  %64 = load ptr, ptr %12, align 8, !tbaa !5
  %65 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %64, i32 0, i32 11
  %66 = load i32, ptr %65, align 4, !tbaa !13
  %67 = icmp ne i32 %66, 0
  br i1 %67, label %68, label %174

68:                                               ; preds = %63
  %69 = load i32, ptr %20, align 4, !tbaa !9
  %70 = load i32, ptr %16, align 4, !tbaa !9
  %71 = sub i32 %70, 1
  %72 = icmp eq i32 %69, %71
  br i1 %72, label %73, label %174

73:                                               ; preds = %68
  %74 = load ptr, ptr %12, align 8, !tbaa !5
  %75 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %74, i32 0, i32 0
  %76 = load i32, ptr %75, align 8, !tbaa !17
  %77 = icmp ult i32 %76, 1005
  br i1 %77, label %78, label %96

78:                                               ; preds = %73
  %79 = load ptr, ptr %10, align 8, !tbaa !5
  %80 = load ptr, ptr %11, align 8, !tbaa !5
  %81 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %80, i32 0, i32 22
  %82 = load i32, ptr %81, align 4, !tbaa !18
  %83 = load ptr, ptr %11, align 8, !tbaa !5
  %84 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %83, i32 0, i32 24
  %85 = load i32, ptr %84, align 4, !tbaa !11
  %86 = load i32, ptr %20, align 4, !tbaa !9
  %87 = load ptr, ptr %12, align 8, !tbaa !5
  %88 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %87, i32 0, i32 2
  %89 = load i32, ptr %88, align 8, !tbaa !19
  %90 = mul i32 %86, %89
  %91 = mul i32 %90, 2
  %92 = load i32, ptr %15, align 4, !tbaa !9
  %93 = load i32, ptr %20, align 4, !tbaa !9
  %94 = add i32 %92, %93
  %95 = load i32, ptr %18, align 4, !tbaa !9
  call void @libxsmm_generator_maskedload_16bit_sse(ptr noundef %79, i32 noundef %82, i32 noundef 0, i32 noundef %85, i32 noundef 127, i32 noundef 0, i32 noundef %91, i32 noundef %94, i32 noundef %95)
  br label %173

96:                                               ; preds = %73
  %97 = load ptr, ptr %12, align 8, !tbaa !5
  %98 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %97, i32 0, i32 0
  %99 = load i32, ptr %98, align 8, !tbaa !17
  %100 = icmp uge i32 %99, 1006
  br i1 %100, label %101, label %124

101:                                              ; preds = %96
  %102 = load ptr, ptr %12, align 8, !tbaa !5
  %103 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %102, i32 0, i32 0
  %104 = load i32, ptr %103, align 8, !tbaa !17
  %105 = icmp ult i32 %104, 1051
  br i1 %105, label %106, label %124

106:                                              ; preds = %101
  %107 = load ptr, ptr %10, align 8, !tbaa !5
  %108 = load ptr, ptr %11, align 8, !tbaa !5
  %109 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %108, i32 0, i32 22
  %110 = load i32, ptr %109, align 4, !tbaa !18
  %111 = load ptr, ptr %11, align 8, !tbaa !5
  %112 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %111, i32 0, i32 24
  %113 = load i32, ptr %112, align 4, !tbaa !11
  %114 = load i32, ptr %20, align 4, !tbaa !9
  %115 = load ptr, ptr %12, align 8, !tbaa !5
  %116 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %115, i32 0, i32 2
  %117 = load i32, ptr %116, align 8, !tbaa !19
  %118 = mul i32 %114, %117
  %119 = mul i32 %118, 2
  %120 = load i32, ptr %15, align 4, !tbaa !9
  %121 = load i32, ptr %20, align 4, !tbaa !9
  %122 = add i32 %120, %121
  %123 = load i32, ptr %18, align 4, !tbaa !9
  call void @libxsmm_generator_maskedload_16bit_avx2(ptr noundef %107, i32 noundef %110, i32 noundef %113, i32 noundef 127, i32 noundef 0, i32 noundef %119, i32 noundef %122, i32 noundef %123)
  br label %172

124:                                              ; preds = %101, %96
  call void @llvm.lifetime.start.p0(i64 1, ptr %21) #3
  %125 = load ptr, ptr %12, align 8, !tbaa !5
  %126 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %125, i32 0, i32 0
  %127 = load i32, ptr %126, align 8, !tbaa !17
  %128 = icmp uge i32 %127, 1051
  br i1 %128, label %129, label %134

129:                                              ; preds = %124
  %130 = load ptr, ptr %12, align 8, !tbaa !5
  %131 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %130, i32 0, i32 0
  %132 = load i32, ptr %131, align 8, !tbaa !17
  %133 = icmp ult i32 %132, 1101
  br label %134

134:                                              ; preds = %129, %124
  %135 = phi i1 [ false, %124 ], [ %133, %129 ]
  %136 = zext i1 %135 to i64
  %137 = select i1 %135, i32 120, i32 121
  %138 = trunc i32 %137 to i8
  store i8 %138, ptr %21, align 1, !tbaa !20
  %139 = load i32, ptr %13, align 4, !tbaa !9
  %140 = icmp eq i32 %139, 3
  br i1 %140, label %141, label %150

141:                                              ; preds = %134
  %142 = load i32, ptr %14, align 4, !tbaa !9
  %143 = icmp eq i32 %142, 3
  br i1 %143, label %144, label %150

144:                                              ; preds = %141
  %145 = load ptr, ptr %12, align 8, !tbaa !5
  %146 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %145, i32 0, i32 0
  %147 = load i32, ptr %146, align 8, !tbaa !17
  %148 = icmp uge i32 %147, 1104
  br i1 %148, label %149, label %150

149:                                              ; preds = %144
  store i8 122, ptr %21, align 1, !tbaa !20
  br label %150

150:                                              ; preds = %149, %144, %141, %134
  %151 = load ptr, ptr %10, align 8, !tbaa !5
  %152 = load ptr, ptr %12, align 8, !tbaa !5
  %153 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %152, i32 0, i32 0
  %154 = load i32, ptr %153, align 8, !tbaa !17
  %155 = load ptr, ptr %11, align 8, !tbaa !5
  %156 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %155, i32 0, i32 24
  %157 = load i32, ptr %156, align 4, !tbaa !11
  %158 = load i32, ptr %20, align 4, !tbaa !9
  %159 = load ptr, ptr %12, align 8, !tbaa !5
  %160 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %159, i32 0, i32 2
  %161 = load i32, ptr %160, align 8, !tbaa !19
  %162 = mul i32 %158, %161
  %163 = mul i32 %162, 2
  %164 = load i8, ptr %21, align 1, !tbaa !20
  %165 = load i32, ptr %15, align 4, !tbaa !9
  %166 = load i32, ptr %20, align 4, !tbaa !9
  %167 = add i32 %165, %166
  %168 = load i32, ptr %13, align 4, !tbaa !9
  %169 = icmp eq i32 %168, 2
  %170 = zext i1 %169 to i64
  %171 = select i1 %169, i32 2, i32 1
  call void @libxsmm_x86_instruction_vec_move(ptr noundef %151, i32 noundef %154, i32 noundef -528017809, i32 noundef %157, i32 noundef 127, i32 noundef 0, i32 noundef %163, i8 noundef signext %164, i32 noundef %167, i32 noundef %171, i32 noundef 1, i32 noundef 0)
  call void @llvm.lifetime.end.p0(i64 1, ptr %21) #3
  br label %172

172:                                              ; preds = %150, %106
  br label %173

173:                                              ; preds = %172, %78
  br label %250

174:                                              ; preds = %68, %63
  call void @llvm.lifetime.start.p0(i64 1, ptr %22) #3
  %175 = load ptr, ptr %12, align 8, !tbaa !5
  %176 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %175, i32 0, i32 0
  %177 = load i32, ptr %176, align 8, !tbaa !17
  %178 = icmp ult i32 %177, 1005
  br i1 %178, label %179, label %180

179:                                              ; preds = %174
  br label %207

180:                                              ; preds = %174
  %181 = load ptr, ptr %12, align 8, !tbaa !5
  %182 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %181, i32 0, i32 0
  %183 = load i32, ptr %182, align 8, !tbaa !17
  %184 = icmp uge i32 %183, 1006
  br i1 %184, label %185, label %191

185:                                              ; preds = %180
  %186 = load ptr, ptr %12, align 8, !tbaa !5
  %187 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %186, i32 0, i32 0
  %188 = load i32, ptr %187, align 8, !tbaa !17
  %189 = icmp ult i32 %188, 1051
  br i1 %189, label %190, label %191

190:                                              ; preds = %185
  br label %205

191:                                              ; preds = %185, %180
  %192 = load ptr, ptr %12, align 8, !tbaa !5
  %193 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %192, i32 0, i32 0
  %194 = load i32, ptr %193, align 8, !tbaa !17
  %195 = icmp uge i32 %194, 1051
  br i1 %195, label %196, label %201

196:                                              ; preds = %191
  %197 = load ptr, ptr %12, align 8, !tbaa !5
  %198 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %197, i32 0, i32 0
  %199 = load i32, ptr %198, align 8, !tbaa !17
  %200 = icmp ult i32 %199, 1101
  br label %201

201:                                              ; preds = %196, %191
  %202 = phi i1 [ false, %191 ], [ %200, %196 ]
  %203 = zext i1 %202 to i64
  %204 = select i1 %202, i32 120, i32 121
  br label %205

205:                                              ; preds = %201, %190
  %206 = phi i32 [ 120, %190 ], [ %204, %201 ]
  br label %207

207:                                              ; preds = %205, %179
  %208 = phi i32 [ 120, %179 ], [ %206, %205 ]
  %209 = trunc i32 %208 to i8
  store i8 %209, ptr %22, align 1, !tbaa !20
  %210 = load i32, ptr %13, align 4, !tbaa !9
  %211 = icmp eq i32 %210, 3
  br i1 %211, label %212, label %221

212:                                              ; preds = %207
  %213 = load i32, ptr %14, align 4, !tbaa !9
  %214 = icmp eq i32 %213, 3
  br i1 %214, label %215, label %221

215:                                              ; preds = %212
  %216 = load ptr, ptr %12, align 8, !tbaa !5
  %217 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %216, i32 0, i32 0
  %218 = load i32, ptr %217, align 8, !tbaa !17
  %219 = icmp uge i32 %218, 1104
  br i1 %219, label %220, label %221

220:                                              ; preds = %215
  store i8 122, ptr %22, align 1, !tbaa !20
  br label %221

221:                                              ; preds = %220, %215, %212, %207
  %222 = load ptr, ptr %10, align 8, !tbaa !5
  %223 = load ptr, ptr %12, align 8, !tbaa !5
  %224 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %223, i32 0, i32 0
  %225 = load i32, ptr %224, align 8, !tbaa !17
  %226 = load ptr, ptr %12, align 8, !tbaa !5
  %227 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %226, i32 0, i32 0
  %228 = load i32, ptr %227, align 8, !tbaa !17
  %229 = icmp ult i32 %228, 1005
  br i1 %229, label %230, label %231

230:                                              ; preds = %221
  br label %235

231:                                              ; preds = %221
  %232 = load ptr, ptr %12, align 8, !tbaa !5
  %233 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %232, i32 0, i32 9
  %234 = load i32, ptr %233, align 4, !tbaa !21
  br label %235

235:                                              ; preds = %231, %230
  %236 = phi i32 [ -1610149872, %230 ], [ %234, %231 ]
  %237 = load ptr, ptr %11, align 8, !tbaa !5
  %238 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %237, i32 0, i32 24
  %239 = load i32, ptr %238, align 4, !tbaa !11
  %240 = load i32, ptr %20, align 4, !tbaa !9
  %241 = load ptr, ptr %12, align 8, !tbaa !5
  %242 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %241, i32 0, i32 2
  %243 = load i32, ptr %242, align 8, !tbaa !19
  %244 = mul i32 %240, %243
  %245 = mul i32 %244, 2
  %246 = load i8, ptr %22, align 1, !tbaa !20
  %247 = load i32, ptr %15, align 4, !tbaa !9
  %248 = load i32, ptr %20, align 4, !tbaa !9
  %249 = add i32 %247, %248
  call void @libxsmm_x86_instruction_vec_move(ptr noundef %222, i32 noundef %225, i32 noundef %236, i32 noundef %239, i32 noundef 127, i32 noundef 0, i32 noundef %245, i8 noundef signext %246, i32 noundef %249, i32 noundef 0, i32 noundef 1, i32 noundef 0)
  call void @llvm.lifetime.end.p0(i64 1, ptr %22) #3
  br label %250

250:                                              ; preds = %235, %173
  %251 = load i32, ptr %13, align 4, !tbaa !9
  %252 = icmp eq i32 %251, 2
  br i1 %252, label %253, label %264

253:                                              ; preds = %250
  %254 = load ptr, ptr %10, align 8, !tbaa !5
  %255 = load ptr, ptr %12, align 8, !tbaa !5
  %256 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %255, i32 0, i32 21
  %257 = load i8, ptr %256, align 4, !tbaa !22
  %258 = load i32, ptr %15, align 4, !tbaa !9
  %259 = load i32, ptr %20, align 4, !tbaa !9
  %260 = add i32 %258, %259
  %261 = load i32, ptr %15, align 4, !tbaa !9
  %262 = load i32, ptr %20, align 4, !tbaa !9
  %263 = add i32 %261, %262
  call void @libxsmm_generator_cvtbf16ps_sse_avx2_avx512(ptr noundef %254, i8 noundef signext %257, i32 noundef %260, i32 noundef %263)
  br label %264

264:                                              ; preds = %253, %250
  %265 = load i32, ptr %13, align 4, !tbaa !9
  %266 = icmp eq i32 %265, 3
  br i1 %266, label %267, label %281

267:                                              ; preds = %264
  %268 = load i32, ptr %14, align 4, !tbaa !9
  %269 = icmp eq i32 %268, 1
  br i1 %269, label %270, label %281

270:                                              ; preds = %267
  %271 = load ptr, ptr %10, align 8, !tbaa !5
  %272 = load ptr, ptr %12, align 8, !tbaa !5
  %273 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %272, i32 0, i32 21
  %274 = load i8, ptr %273, align 4, !tbaa !22
  %275 = load i32, ptr %15, align 4, !tbaa !9
  %276 = load i32, ptr %20, align 4, !tbaa !9
  %277 = add i32 %275, %276
  %278 = load i32, ptr %15, align 4, !tbaa !9
  %279 = load i32, ptr %20, align 4, !tbaa !9
  %280 = add i32 %278, %279
  call void @libxsmm_x86_instruction_vec_compute_2reg(ptr noundef %271, i32 noundef 537208083, i8 noundef signext %274, i32 noundef %277, i32 noundef %280)
  br label %281

281:                                              ; preds = %270, %267, %264
  br label %308

282:                                              ; preds = %60
  %283 = load ptr, ptr %10, align 8, !tbaa !5
  %284 = load ptr, ptr %12, align 8, !tbaa !5
  %285 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %284, i32 0, i32 0
  %286 = load i32, ptr %285, align 8, !tbaa !17
  %287 = icmp uge i32 %286, 1006
  br i1 %287, label %288, label %293

288:                                              ; preds = %282
  %289 = load ptr, ptr %12, align 8, !tbaa !5
  %290 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %289, i32 0, i32 0
  %291 = load i32, ptr %290, align 8, !tbaa !17
  %292 = icmp ult i32 %291, 1101
  br label %293

293:                                              ; preds = %288, %282
  %294 = phi i1 [ false, %282 ], [ %292, %288 ]
  %295 = zext i1 %294 to i64
  %296 = select i1 %294, i32 121, i32 122
  %297 = trunc i32 %296 to i8
  %298 = load i32, ptr %15, align 4, !tbaa !9
  %299 = load i32, ptr %20, align 4, !tbaa !9
  %300 = add i32 %298, %299
  %301 = load i32, ptr %15, align 4, !tbaa !9
  %302 = load i32, ptr %20, align 4, !tbaa !9
  %303 = add i32 %301, %302
  %304 = load i32, ptr %16, align 4, !tbaa !9
  %305 = load i32, ptr %19, align 4, !tbaa !9
  %306 = mul i32 %304, %305
  %307 = add i32 %303, %306
  call void @libxsmm_x86_instruction_vec_compute_2reg(ptr noundef %283, i32 noundef 537138704, i8 noundef signext %297, i32 noundef %300, i32 noundef %307)
  br label %308

308:                                              ; preds = %293, %281
  br label %649

309:                                              ; preds = %57
  %310 = load i32, ptr %13, align 4, !tbaa !9
  %311 = icmp eq i32 %310, 4
  br i1 %311, label %312, label %420

312:                                              ; preds = %309
  %313 = load i32, ptr %19, align 4, !tbaa !9
  %314 = icmp eq i32 %313, 0
  br i1 %314, label %315, label %393

315:                                              ; preds = %312
  %316 = load ptr, ptr %12, align 8, !tbaa !5
  %317 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %316, i32 0, i32 11
  %318 = load i32, ptr %317, align 4, !tbaa !13
  %319 = icmp ne i32 %318, 0
  br i1 %319, label %320, label %355

320:                                              ; preds = %315
  %321 = load i32, ptr %20, align 4, !tbaa !9
  %322 = load i32, ptr %16, align 4, !tbaa !9
  %323 = sub i32 %322, 1
  %324 = icmp eq i32 %321, %323
  br i1 %324, label %325, label %355

325:                                              ; preds = %320
  %326 = load ptr, ptr %10, align 8, !tbaa !5
  %327 = load ptr, ptr %12, align 8, !tbaa !5
  %328 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %327, i32 0, i32 0
  %329 = load i32, ptr %328, align 8, !tbaa !17
  %330 = load ptr, ptr %11, align 8, !tbaa !5
  %331 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %330, i32 0, i32 24
  %332 = load i32, ptr %331, align 4, !tbaa !11
  %333 = load i32, ptr %20, align 4, !tbaa !9
  %334 = load ptr, ptr %12, align 8, !tbaa !5
  %335 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %334, i32 0, i32 2
  %336 = load i32, ptr %335, align 8, !tbaa !19
  %337 = mul i32 %333, %336
  %338 = load ptr, ptr %12, align 8, !tbaa !5
  %339 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %338, i32 0, i32 0
  %340 = load i32, ptr %339, align 8, !tbaa !17
  %341 = icmp uge i32 %340, 1051
  br i1 %341, label %342, label %347

342:                                              ; preds = %325
  %343 = load ptr, ptr %12, align 8, !tbaa !5
  %344 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %343, i32 0, i32 0
  %345 = load i32, ptr %344, align 8, !tbaa !17
  %346 = icmp ult i32 %345, 1101
  br label %347

347:                                              ; preds = %342, %325
  %348 = phi i1 [ false, %325 ], [ %346, %342 ]
  %349 = zext i1 %348 to i64
  %350 = select i1 %348, i32 121, i32 122
  %351 = trunc i32 %350 to i8
  %352 = load i32, ptr %15, align 4, !tbaa !9
  %353 = load i32, ptr %20, align 4, !tbaa !9
  %354 = add i32 %352, %353
  call void @libxsmm_x86_instruction_vec_move(ptr noundef %326, i32 noundef %329, i32 noundef -536406417, i32 noundef %332, i32 noundef 127, i32 noundef 0, i32 noundef %337, i8 noundef signext %351, i32 noundef %354, i32 noundef 2, i32 noundef 1, i32 noundef 0)
  br label %382

355:                                              ; preds = %320, %315
  %356 = load ptr, ptr %10, align 8, !tbaa !5
  %357 = load ptr, ptr %12, align 8, !tbaa !5
  %358 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %357, i32 0, i32 0
  %359 = load i32, ptr %358, align 8, !tbaa !17
  %360 = load ptr, ptr %10, align 8, !tbaa !5
  %361 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %360, i32 0, i32 6
  %362 = load i32, ptr %361, align 4, !tbaa !23
  %363 = icmp ult i32 %362, 1101
  br i1 %363, label %364, label %365

364:                                              ; preds = %355
  br label %369

365:                                              ; preds = %355
  %366 = load ptr, ptr %12, align 8, !tbaa !5
  %367 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %366, i32 0, i32 9
  %368 = load i32, ptr %367, align 4, !tbaa !21
  br label %369

369:                                              ; preds = %365, %364
  %370 = phi i32 [ 545725200, %364 ], [ %368, %365 ]
  %371 = load ptr, ptr %11, align 8, !tbaa !5
  %372 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %371, i32 0, i32 24
  %373 = load i32, ptr %372, align 4, !tbaa !11
  %374 = load i32, ptr %20, align 4, !tbaa !9
  %375 = load ptr, ptr %12, align 8, !tbaa !5
  %376 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %375, i32 0, i32 2
  %377 = load i32, ptr %376, align 8, !tbaa !19
  %378 = mul i32 %374, %377
  %379 = load i32, ptr %15, align 4, !tbaa !9
  %380 = load i32, ptr %20, align 4, !tbaa !9
  %381 = add i32 %379, %380
  call void @libxsmm_x86_instruction_vec_move(ptr noundef %356, i32 noundef %359, i32 noundef %370, i32 noundef %373, i32 noundef 127, i32 noundef 0, i32 noundef %378, i8 noundef signext 120, i32 noundef %381, i32 noundef 0, i32 noundef 1, i32 noundef 0)
  br label %382

382:                                              ; preds = %369, %347
  %383 = load ptr, ptr %10, align 8, !tbaa !5
  %384 = load ptr, ptr %12, align 8, !tbaa !5
  %385 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %384, i32 0, i32 21
  %386 = load i8, ptr %385, align 4, !tbaa !22
  %387 = load i32, ptr %15, align 4, !tbaa !9
  %388 = load i32, ptr %20, align 4, !tbaa !9
  %389 = add i32 %387, %388
  %390 = load i32, ptr %15, align 4, !tbaa !9
  %391 = load i32, ptr %20, align 4, !tbaa !9
  %392 = add i32 %390, %391
  call void @libxsmm_generator_cvtbf8ps_avx512(ptr noundef %383, i8 noundef signext %386, i32 noundef %389, i32 noundef %392)
  br label %419

393:                                              ; preds = %312
  %394 = load ptr, ptr %10, align 8, !tbaa !5
  %395 = load ptr, ptr %12, align 8, !tbaa !5
  %396 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %395, i32 0, i32 0
  %397 = load i32, ptr %396, align 8, !tbaa !17
  %398 = icmp uge i32 %397, 1051
  br i1 %398, label %399, label %404

399:                                              ; preds = %393
  %400 = load ptr, ptr %12, align 8, !tbaa !5
  %401 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %400, i32 0, i32 0
  %402 = load i32, ptr %401, align 8, !tbaa !17
  %403 = icmp ult i32 %402, 1101
  br label %404

404:                                              ; preds = %399, %393
  %405 = phi i1 [ false, %393 ], [ %403, %399 ]
  %406 = zext i1 %405 to i64
  %407 = select i1 %405, i32 121, i32 122
  %408 = trunc i32 %407 to i8
  %409 = load i32, ptr %15, align 4, !tbaa !9
  %410 = load i32, ptr %20, align 4, !tbaa !9
  %411 = add i32 %409, %410
  %412 = load i32, ptr %15, align 4, !tbaa !9
  %413 = load i32, ptr %20, align 4, !tbaa !9
  %414 = add i32 %412, %413
  %415 = load i32, ptr %16, align 4, !tbaa !9
  %416 = load i32, ptr %19, align 4, !tbaa !9
  %417 = mul i32 %415, %416
  %418 = add i32 %414, %417
  call void @libxsmm_x86_instruction_vec_compute_2reg(ptr noundef %394, i32 noundef 537138704, i8 noundef signext %408, i32 noundef %411, i32 noundef %418)
  br label %419

419:                                              ; preds = %404, %382
  br label %648

420:                                              ; preds = %309
  %421 = load i32, ptr %13, align 4, !tbaa !9
  %422 = icmp eq i32 %421, 5
  br i1 %422, label %423, label %531

423:                                              ; preds = %420
  %424 = load i32, ptr %19, align 4, !tbaa !9
  %425 = icmp eq i32 %424, 0
  br i1 %425, label %426, label %504

426:                                              ; preds = %423
  %427 = load ptr, ptr %12, align 8, !tbaa !5
  %428 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %427, i32 0, i32 11
  %429 = load i32, ptr %428, align 4, !tbaa !13
  %430 = icmp ne i32 %429, 0
  br i1 %430, label %431, label %466

431:                                              ; preds = %426
  %432 = load i32, ptr %20, align 4, !tbaa !9
  %433 = load i32, ptr %16, align 4, !tbaa !9
  %434 = sub i32 %433, 1
  %435 = icmp eq i32 %432, %434
  br i1 %435, label %436, label %466

436:                                              ; preds = %431
  %437 = load ptr, ptr %10, align 8, !tbaa !5
  %438 = load ptr, ptr %12, align 8, !tbaa !5
  %439 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %438, i32 0, i32 0
  %440 = load i32, ptr %439, align 8, !tbaa !17
  %441 = load ptr, ptr %11, align 8, !tbaa !5
  %442 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %441, i32 0, i32 24
  %443 = load i32, ptr %442, align 4, !tbaa !11
  %444 = load i32, ptr %20, align 4, !tbaa !9
  %445 = load ptr, ptr %12, align 8, !tbaa !5
  %446 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %445, i32 0, i32 2
  %447 = load i32, ptr %446, align 8, !tbaa !19
  %448 = mul i32 %444, %447
  %449 = load ptr, ptr %12, align 8, !tbaa !5
  %450 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %449, i32 0, i32 0
  %451 = load i32, ptr %450, align 8, !tbaa !17
  %452 = icmp uge i32 %451, 1051
  br i1 %452, label %453, label %458

453:                                              ; preds = %436
  %454 = load ptr, ptr %12, align 8, !tbaa !5
  %455 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %454, i32 0, i32 0
  %456 = load i32, ptr %455, align 8, !tbaa !17
  %457 = icmp ult i32 %456, 1101
  br label %458

458:                                              ; preds = %453, %436
  %459 = phi i1 [ false, %436 ], [ %457, %453 ]
  %460 = zext i1 %459 to i64
  %461 = select i1 %459, i32 121, i32 122
  %462 = trunc i32 %461 to i8
  %463 = load i32, ptr %15, align 4, !tbaa !9
  %464 = load i32, ptr %20, align 4, !tbaa !9
  %465 = add i32 %463, %464
  call void @libxsmm_x86_instruction_vec_move(ptr noundef %437, i32 noundef %440, i32 noundef -536406417, i32 noundef %443, i32 noundef 127, i32 noundef 0, i32 noundef %448, i8 noundef signext %462, i32 noundef %465, i32 noundef 2, i32 noundef 1, i32 noundef 0)
  br label %493

466:                                              ; preds = %431, %426
  %467 = load ptr, ptr %10, align 8, !tbaa !5
  %468 = load ptr, ptr %12, align 8, !tbaa !5
  %469 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %468, i32 0, i32 0
  %470 = load i32, ptr %469, align 8, !tbaa !17
  %471 = load ptr, ptr %10, align 8, !tbaa !5
  %472 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %471, i32 0, i32 6
  %473 = load i32, ptr %472, align 4, !tbaa !23
  %474 = icmp ult i32 %473, 1101
  br i1 %474, label %475, label %476

475:                                              ; preds = %466
  br label %480

476:                                              ; preds = %466
  %477 = load ptr, ptr %12, align 8, !tbaa !5
  %478 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %477, i32 0, i32 9
  %479 = load i32, ptr %478, align 4, !tbaa !21
  br label %480

480:                                              ; preds = %476, %475
  %481 = phi i32 [ 545725200, %475 ], [ %479, %476 ]
  %482 = load ptr, ptr %11, align 8, !tbaa !5
  %483 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %482, i32 0, i32 24
  %484 = load i32, ptr %483, align 4, !tbaa !11
  %485 = load i32, ptr %20, align 4, !tbaa !9
  %486 = load ptr, ptr %12, align 8, !tbaa !5
  %487 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %486, i32 0, i32 2
  %488 = load i32, ptr %487, align 8, !tbaa !19
  %489 = mul i32 %485, %488
  %490 = load i32, ptr %15, align 4, !tbaa !9
  %491 = load i32, ptr %20, align 4, !tbaa !9
  %492 = add i32 %490, %491
  call void @libxsmm_x86_instruction_vec_move(ptr noundef %467, i32 noundef %470, i32 noundef %481, i32 noundef %484, i32 noundef 127, i32 noundef 0, i32 noundef %489, i8 noundef signext 120, i32 noundef %492, i32 noundef 0, i32 noundef 1, i32 noundef 0)
  br label %493

493:                                              ; preds = %480, %458
  %494 = load ptr, ptr %10, align 8, !tbaa !5
  %495 = load ptr, ptr %12, align 8, !tbaa !5
  %496 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %495, i32 0, i32 21
  %497 = load i8, ptr %496, align 4, !tbaa !22
  %498 = load i32, ptr %15, align 4, !tbaa !9
  %499 = load i32, ptr %20, align 4, !tbaa !9
  %500 = add i32 %498, %499
  %501 = load i32, ptr %15, align 4, !tbaa !9
  %502 = load i32, ptr %20, align 4, !tbaa !9
  %503 = add i32 %501, %502
  call void @libxsmm_generator_vcvthf8_to_f32_avx512_preppedstack(ptr noundef %494, i8 noundef signext %497, i32 noundef %500, i32 noundef %503, i32 noundef 0, i32 noundef 1, i32 noundef 6, i32 noundef 7)
  br label %530

504:                                              ; preds = %423
  %505 = load ptr, ptr %10, align 8, !tbaa !5
  %506 = load ptr, ptr %12, align 8, !tbaa !5
  %507 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %506, i32 0, i32 0
  %508 = load i32, ptr %507, align 8, !tbaa !17
  %509 = icmp uge i32 %508, 1051
  br i1 %509, label %510, label %515

510:                                              ; preds = %504
  %511 = load ptr, ptr %12, align 8, !tbaa !5
  %512 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %511, i32 0, i32 0
  %513 = load i32, ptr %512, align 8, !tbaa !17
  %514 = icmp ult i32 %513, 1101
  br label %515

515:                                              ; preds = %510, %504
  %516 = phi i1 [ false, %504 ], [ %514, %510 ]
  %517 = zext i1 %516 to i64
  %518 = select i1 %516, i32 121, i32 122
  %519 = trunc i32 %518 to i8
  %520 = load i32, ptr %15, align 4, !tbaa !9
  %521 = load i32, ptr %20, align 4, !tbaa !9
  %522 = add i32 %520, %521
  %523 = load i32, ptr %15, align 4, !tbaa !9
  %524 = load i32, ptr %20, align 4, !tbaa !9
  %525 = add i32 %523, %524
  %526 = load i32, ptr %16, align 4, !tbaa !9
  %527 = load i32, ptr %19, align 4, !tbaa !9
  %528 = mul i32 %526, %527
  %529 = add i32 %525, %528
  call void @libxsmm_x86_instruction_vec_compute_2reg(ptr noundef %505, i32 noundef 537138704, i8 noundef signext %519, i32 noundef %522, i32 noundef %529)
  br label %530

530:                                              ; preds = %515, %493
  br label %647

531:                                              ; preds = %420
  %532 = load i32, ptr %13, align 4, !tbaa !9
  %533 = icmp eq i32 %532, 1
  br i1 %533, label %534, label %637

534:                                              ; preds = %531
  %535 = load i32, ptr %19, align 4, !tbaa !9
  %536 = icmp eq i32 %535, 0
  br i1 %536, label %537, label %614

537:                                              ; preds = %534
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #3
  %538 = load ptr, ptr %12, align 8, !tbaa !5
  %539 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %538, i32 0, i32 11
  %540 = load i32, ptr %539, align 4, !tbaa !13
  store i32 %540, ptr %23, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #3
  %541 = load ptr, ptr %11, align 8, !tbaa !5
  %542 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %541, i32 0, i32 22
  %543 = load i32, ptr %542, align 4, !tbaa !18
  store i32 %543, ptr %24, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #3
  %544 = load ptr, ptr %12, align 8, !tbaa !5
  %545 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %544, i32 0, i32 0
  %546 = load i32, ptr %545, align 8, !tbaa !17
  %547 = icmp uge i32 %546, 1005
  br i1 %547, label %548, label %549

548:                                              ; preds = %537
  br label %551

549:                                              ; preds = %537
  %550 = load i32, ptr %18, align 4, !tbaa !9
  br label %551

551:                                              ; preds = %549, %548
  %552 = phi i32 [ 1, %548 ], [ %550, %549 ]
  store i32 %552, ptr %25, align 4, !tbaa !9
  %553 = load ptr, ptr %12, align 8, !tbaa !5
  %554 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %553, i32 0, i32 0
  %555 = load i32, ptr %554, align 8, !tbaa !17
  %556 = icmp uge i32 %555, 1005
  br i1 %556, label %557, label %582

557:                                              ; preds = %551
  %558 = load ptr, ptr %12, align 8, !tbaa !5
  %559 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %558, i32 0, i32 0
  %560 = load i32, ptr %559, align 8, !tbaa !17
  %561 = icmp ult i32 %560, 1051
  br i1 %561, label %562, label %582

562:                                              ; preds = %557
  %563 = load ptr, ptr %12, align 8, !tbaa !5
  %564 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %563, i32 0, i32 11
  %565 = load i32, ptr %564, align 4, !tbaa !13
  %566 = icmp ne i32 %565, 0
  br i1 %566, label %567, label %582

567:                                              ; preds = %562
  %568 = load i32, ptr %20, align 4, !tbaa !9
  %569 = load i32, ptr %16, align 4, !tbaa !9
  %570 = sub i32 %569, 1
  %571 = icmp eq i32 %568, %570
  br i1 %571, label %572, label %582

572:                                              ; preds = %567
  %573 = load ptr, ptr %10, align 8, !tbaa !5
  %574 = load ptr, ptr %12, align 8, !tbaa !5
  %575 = load i32, ptr %24, align 4, !tbaa !9
  call void @libxsmm_generator_gemm_getval_stack_var(ptr noundef %573, ptr noundef %574, i32 noundef 22, i32 noundef %575)
  %576 = load ptr, ptr %10, align 8, !tbaa !5
  %577 = load ptr, ptr %12, align 8, !tbaa !5
  %578 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %577, i32 0, i32 0
  %579 = load i32, ptr %578, align 8, !tbaa !17
  %580 = load i32, ptr %24, align 4, !tbaa !9
  %581 = load i32, ptr %23, align 4, !tbaa !9
  call void @libxsmm_x86_instruction_vec_move(ptr noundef %576, i32 noundef %579, i32 noundef 537138704, i32 noundef %580, i32 noundef 127, i32 noundef 0, i32 noundef 0, i8 noundef signext 121, i32 noundef %581, i32 noundef 0, i32 noundef 0, i32 noundef 0)
  br label %582

582:                                              ; preds = %572, %567, %562, %557, %551
  %583 = load ptr, ptr %10, align 8, !tbaa !5
  %584 = load ptr, ptr %12, align 8, !tbaa !5
  %585 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %584, i32 0, i32 9
  %586 = load i32, ptr %585, align 4, !tbaa !21
  %587 = load ptr, ptr %11, align 8, !tbaa !5
  %588 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %587, i32 0, i32 24
  %589 = load i32, ptr %588, align 4, !tbaa !11
  %590 = load i32, ptr %20, align 4, !tbaa !9
  %591 = load ptr, ptr %12, align 8, !tbaa !5
  %592 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %591, i32 0, i32 2
  %593 = load i32, ptr %592, align 8, !tbaa !19
  %594 = mul i32 %590, %593
  %595 = mul i32 %594, 4
  %596 = load ptr, ptr %12, align 8, !tbaa !5
  %597 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %596, i32 0, i32 21
  %598 = load i8, ptr %597, align 4, !tbaa !22
  %599 = load i32, ptr %15, align 4, !tbaa !9
  %600 = load i32, ptr %20, align 4, !tbaa !9
  %601 = add i32 %599, %600
  %602 = load i32, ptr %20, align 4, !tbaa !9
  %603 = load i32, ptr %16, align 4, !tbaa !9
  %604 = sub i32 %603, 1
  %605 = icmp eq i32 %602, %604
  br i1 %605, label %606, label %610

606:                                              ; preds = %582
  %607 = load ptr, ptr %12, align 8, !tbaa !5
  %608 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %607, i32 0, i32 11
  %609 = load i32, ptr %608, align 4, !tbaa !13
  br label %611

610:                                              ; preds = %582
  br label %611

611:                                              ; preds = %610, %606
  %612 = phi i32 [ %609, %606 ], [ 0, %610 ]
  %613 = load i32, ptr %25, align 4, !tbaa !9
  call void @libxsmm_x86_instruction_unified_vec_move(ptr noundef %583, i32 noundef %586, i32 noundef %589, i32 noundef 127, i32 noundef 0, i32 noundef %595, i8 noundef signext %598, i32 noundef %601, i32 noundef %612, i32 noundef %613, i32 noundef 0)
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #3
  br label %636

614:                                              ; preds = %534
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #3
  %615 = load ptr, ptr %12, align 8, !tbaa !5
  %616 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %615, i32 0, i32 0
  %617 = load i32, ptr %616, align 8, !tbaa !17
  %618 = icmp ult i32 %617, 1005
  %619 = zext i1 %618 to i64
  %620 = select i1 %618, i32 -1610346480, i32 537138704
  store i32 %620, ptr %26, align 4, !tbaa !9
  %621 = load ptr, ptr %10, align 8, !tbaa !5
  %622 = load i32, ptr %26, align 4, !tbaa !9
  %623 = load ptr, ptr %12, align 8, !tbaa !5
  %624 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %623, i32 0, i32 21
  %625 = load i8, ptr %624, align 4, !tbaa !22
  %626 = load i32, ptr %15, align 4, !tbaa !9
  %627 = load i32, ptr %20, align 4, !tbaa !9
  %628 = add i32 %626, %627
  %629 = load i32, ptr %15, align 4, !tbaa !9
  %630 = load i32, ptr %20, align 4, !tbaa !9
  %631 = add i32 %629, %630
  %632 = load i32, ptr %16, align 4, !tbaa !9
  %633 = load i32, ptr %19, align 4, !tbaa !9
  %634 = mul i32 %632, %633
  %635 = add i32 %631, %634
  call void @libxsmm_x86_instruction_vec_compute_2reg(ptr noundef %621, i32 noundef %622, i8 noundef signext %625, i32 noundef %628, i32 noundef %635)
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #3
  br label %636

636:                                              ; preds = %614, %611
  br label %646

637:                                              ; preds = %531
  %638 = load ptr, ptr %10, align 8, !tbaa !5
  %639 = load i32, ptr @libxsmm_ninit, align 4, !tbaa !9
  %640 = icmp ult i32 1, %639
  br i1 %640, label %641, label %643

641:                                              ; preds = %637
  %642 = load i32, ptr @libxsmm_verbosity, align 4, !tbaa !9
  br label %644

643:                                              ; preds = %637
  br label %644

644:                                              ; preds = %643, %641
  %645 = phi i32 [ %642, %641 ], [ 1, %643 ]
  call void @libxsmm_handle_error(ptr noundef %638, i32 noundef 90033, ptr noundef @__func__.libxsmm_generator_gemm_load_colbias_to_2D_block, ptr noundef @.str.1, i32 noundef 961, i32 noundef %645)
  store i32 1, ptr %27, align 4
  br label %670

646:                                              ; preds = %636
  br label %647

647:                                              ; preds = %646, %530
  br label %648

648:                                              ; preds = %647, %419
  br label %649

649:                                              ; preds = %648, %308
  br label %650

650:                                              ; preds = %649
  %651 = load i32, ptr %19, align 4, !tbaa !9
  %652 = add i32 %651, 1
  store i32 %652, ptr %19, align 4, !tbaa !9
  br label %50, !llvm.loop !25

653:                                              ; preds = %50
  br label %654

654:                                              ; preds = %653
  %655 = load i32, ptr %20, align 4, !tbaa !9
  %656 = add i32 %655, 1
  store i32 %656, ptr %20, align 4, !tbaa !9
  br label %45, !llvm.loop !27

657:                                              ; preds = %45
  %658 = load i32, ptr %13, align 4, !tbaa !9
  %659 = icmp eq i32 %658, 5
  br i1 %659, label %660, label %665

660:                                              ; preds = %657
  %661 = load ptr, ptr %10, align 8, !tbaa !5
  %662 = load ptr, ptr %11, align 8, !tbaa !5
  %663 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %662, i32 0, i32 24
  %664 = load i32, ptr %663, align 4, !tbaa !11
  call void @libxsmm_generator_vcvt_hf8_tofrom_f32_avx512_clean_stack(ptr noundef %661, i32 noundef %664)
  br label %665

665:                                              ; preds = %660, %657
  %666 = load ptr, ptr %10, align 8, !tbaa !5
  %667 = load ptr, ptr %11, align 8, !tbaa !5
  %668 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %667, i32 0, i32 24
  %669 = load i32, ptr %668, align 4, !tbaa !11
  call void @libxsmm_x86_instruction_pop_reg(ptr noundef %666, i32 noundef %669)
  store i32 0, ptr %27, align 4
  br label %670

670:                                              ; preds = %665, %644
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #3
  %671 = load i32, ptr %27, align 4
  switch i32 %671, label %673 [
    i32 0, label %672
    i32 1, label %672
  ]

672:                                              ; preds = %670, %670
  ret void

673:                                              ; preds = %670
  unreachable
}

declare void @libxsmm_generator_vcvt_hf8_tofrom_f32_avx512_prep_stack(ptr noundef, i32 noundef) #2

declare void @libxsmm_generator_maskedload_16bit_sse(ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef) #2

declare void @libxsmm_generator_maskedload_16bit_avx2(ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef) #2

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

declare void @libxsmm_generator_cvtbf8ps_avx512(ptr noundef, i8 noundef signext, i32 noundef, i32 noundef) #2

declare void @libxsmm_generator_vcvthf8_to_f32_avx512_preppedstack(ptr noundef, i8 noundef signext, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef) #2

declare void @libxsmm_x86_instruction_unified_vec_move(ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i8 noundef signext, i32 noundef, i32 noundef, i32 noundef, i32 noundef) #2

declare void @libxsmm_generator_vcvt_hf8_tofrom_f32_avx512_clean_stack(ptr noundef, i32 noundef) #2

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

!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 96}
!12 = !{!"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}
!13 = !{!14, !10, i64 44}
!14 = !{!"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, !15, 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}
!15 = !{!"libxsmm_tile_config", !7, i64 0, !16, i64 2, !7, i64 4, !16, i64 6, !7, i64 8, !16, i64 10, !7, i64 12, !16, i64 14, !7, i64 16, !16, i64 18, !7, i64 20, !16, i64 22, !7, i64 24, !16, i64 26, !7, i64 28, !16, i64 30, !7, i64 32}
!16 = !{!"short", !7, i64 0}
!17 = !{!14, !10, i64 0}
!18 = !{!12, !10, i64 88}
!19 = !{!14, !10, i64 8}
!20 = !{!7, !7, i64 0}
!21 = !{!14, !10, i64 36}
!22 = !{!14, !7, i64 84}
!23 = !{!24, !10, i64 28}
!24 = !{!"libxsmm_generated_code", !6, i64 0, !10, i64 8, !10, i64 12, !10, i64 16, !10, i64 20, !10, i64 24, !10, i64 28}
!25 = distinct !{!25, !26}
!26 = !{!"llvm.loop.mustprogress"}
!27 = distinct !{!27, !26}


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

@.str.1 = external hidden unnamed_addr constant [77 x i8], align 1
@libxsmm_ninit = external local_unnamed_addr global i32, align 4
@libxsmm_verbosity = external local_unnamed_addr global i32, align 4
@__func__.libxsmm_generator_gemm_load_colbias_to_2D_block = external hidden unnamed_addr constant [48 x i8], align 1

; Function Attrs: nounwind uwtable
declare dso_local void @libxsmm_generator_gemm_getval_stack_var(ptr noundef, ptr noundef, i32 noundef, i32 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 #1

declare void @libxsmm_x86_instruction_vec_compute_2reg(ptr noundef, i32 noundef, i8 noundef signext, 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 #1

declare void @libxsmm_x86_instruction_push_reg(ptr noundef, i32 noundef) local_unnamed_addr #1

declare void @libxsmm_x86_instruction_pop_reg(ptr noundef, i32 noundef) local_unnamed_addr #1

; Function Attrs: nounwind uwtable
define dso_local void @libxsmm_generator_gemm_load_colbias_to_2D_block(ptr noundef %0, ptr nocapture noundef readonly %1, ptr noundef %2, i32 noundef %3, i32 noundef %4, i32 noundef %5, i32 noundef %6, i32 noundef %7, i32 noundef %8) local_unnamed_addr #0 {
  %10 = getelementptr inbounds i8, ptr %1, i64 96
  %11 = load i32, ptr %10, align 4, !tbaa !5
  tail call void @libxsmm_x86_instruction_push_reg(ptr noundef %0, i32 noundef %11) #2
  %12 = icmp eq i32 %3, 5
  br i1 %12, label %13, label %15

13:                                               ; preds = %9
  %14 = load i32, ptr %10, align 4, !tbaa !5
  tail call void @libxsmm_generator_vcvt_hf8_tofrom_f32_avx512_prep_stack(ptr noundef %0, i32 noundef %14) #2
  br label %15

15:                                               ; preds = %13, %9
  %16 = load i32, ptr %10, align 4, !tbaa !5
  tail call void @libxsmm_generator_gemm_getval_stack_var(ptr noundef %0, ptr noundef %2, i32 noundef 7, i32 noundef %16)
  %.not = icmp eq i32 %6, 0
  br i1 %.not, label %._crit_edge268, label %.preheader.lr.ph

.preheader.lr.ph:                                 ; preds = %15
  %.not269 = icmp eq i32 %7, 0
  %17 = icmp eq i32 %3, 2
  %18 = icmp eq i32 %3, 3
  %19 = and i32 %3, -2
  %or.cond = icmp eq i32 %19, 2
  %20 = icmp eq i32 %3, 4
  %21 = icmp eq i32 %3, 1
  %22 = getelementptr inbounds i8, ptr %2, i64 84
  %23 = getelementptr inbounds i8, ptr %2, i64 44
  %24 = add i32 %6, -1
  %25 = getelementptr inbounds i8, ptr %1, i64 88
  %26 = getelementptr inbounds i8, ptr %2, i64 36
  %27 = getelementptr inbounds i8, ptr %2, i64 8
  %28 = getelementptr inbounds i8, ptr %0, i64 28
  %29 = icmp eq i32 %4, 3
  %30 = select i1 %17, i32 2, i32 1
  %31 = icmp eq i32 %4, 1
  %or.cond7 = and i1 %18, %31
  br i1 %.not269, label %._crit_edge268, label %.preheader.us

.preheader.us:                                    ; preds = %.preheader.lr.ph, %._crit_edge.us
  %.0223267.us = phi i32 [ %181, %._crit_edge.us ], [ 0, %.preheader.lr.ph ]
  %32 = add i32 %.0223267.us, %5
  %33 = icmp eq i32 %.0223267.us, %24
  %34 = shl i32 %.0223267.us, 2
  %35 = shl i32 %.0223267.us, 1
  br label %36

36:                                               ; preds = %.preheader.us, %179
  %.0266.us = phi i32 [ 0, %.preheader.us ], [ %180, %179 ]
  br i1 %or.cond, label %126, label %37

37:                                               ; preds = %36
  br i1 %20, label %97, label %38

38:                                               ; preds = %37
  br i1 %12, label %68, label %39

39:                                               ; preds = %38
  br i1 %21, label %40, label %.split.us

40:                                               ; preds = %39
  %41 = icmp eq i32 %.0266.us, 0
  br i1 %41, label %49, label %42

42:                                               ; preds = %40
  %43 = load i32, ptr %2, align 8, !tbaa !10
  %44 = icmp ult i32 %43, 1005
  %45 = select i1 %44, i32 -1610346480, i32 537138704
  %46 = load i8, ptr %22, align 4, !tbaa !15
  %47 = mul i32 %.0266.us, %6
  %48 = add i32 %47, %32
  tail call void @libxsmm_x86_instruction_vec_compute_2reg(ptr noundef %0, i32 noundef %45, i8 noundef signext %46, i32 noundef %32, i32 noundef %48) #2
  br label %179

49:                                               ; preds = %40
  %50 = load i32, ptr %23, align 4, !tbaa !16
  %51 = load i32, ptr %2, align 8, !tbaa !10
  %52 = icmp ugt i32 %51, 1004
  %53 = select i1 %52, i32 1, i32 %8
  %54 = add i32 %51, -1005
  %or.cond260.us = icmp ult i32 %54, 46
  %.not.us = icmp ne i32 %50, 0
  %or.cond261.not265.us = select i1 %or.cond260.us, i1 %.not.us, i1 false
  %or.cond263.us = and i1 %33, %or.cond261.not265.us
  br i1 %or.cond263.us, label %55, label %58

55:                                               ; preds = %49
  %56 = load i32, ptr %25, align 4, !tbaa !17
  tail call void @libxsmm_generator_gemm_getval_stack_var(ptr noundef %0, ptr noundef nonnull %2, i32 noundef 22, i32 noundef %56)
  %57 = load i32, ptr %2, align 8, !tbaa !10
  tail call void @libxsmm_x86_instruction_vec_move(ptr noundef %0, i32 noundef %57, i32 noundef 537138704, i32 noundef %56, i32 noundef 127, i32 noundef 0, i32 noundef 0, i8 noundef signext 121, i32 noundef %50, i32 noundef 0, i32 noundef 0, i32 noundef 0) #2
  br label %58

58:                                               ; preds = %55, %49
  %59 = load i32, ptr %26, align 4, !tbaa !18
  %60 = load i32, ptr %10, align 4, !tbaa !5
  %61 = load i32, ptr %27, align 8, !tbaa !19
  %62 = mul i32 %34, %61
  %63 = load i8, ptr %22, align 4, !tbaa !15
  br i1 %33, label %64, label %66

64:                                               ; preds = %58
  %65 = load i32, ptr %23, align 4, !tbaa !16
  br label %66

66:                                               ; preds = %64, %58
  %67 = phi i32 [ %65, %64 ], [ 0, %58 ]
  tail call void @libxsmm_x86_instruction_unified_vec_move(ptr noundef %0, i32 noundef %59, i32 noundef %60, i32 noundef 127, i32 noundef 0, i32 noundef %62, i8 noundef signext %63, i32 noundef %32, i32 noundef %67, i32 noundef %53, i32 noundef 0) #2
  br label %179

68:                                               ; preds = %38
  %69 = icmp eq i32 %.0266.us, 0
  br i1 %69, label %76, label %70

70:                                               ; preds = %68
  %71 = load i32, ptr %2, align 8, !tbaa !10
  %72 = add i32 %71, -1051
  %spec.select259.us = icmp ult i32 %72, 50
  %73 = select i1 %spec.select259.us, i8 121, i8 122
  %74 = mul i32 %.0266.us, %6
  %75 = add i32 %74, %32
  tail call void @libxsmm_x86_instruction_vec_compute_2reg(ptr noundef %0, i32 noundef 537138704, i8 noundef signext %73, i32 noundef %32, i32 noundef %75) #2
  br label %179

76:                                               ; preds = %68
  %77 = load i32, ptr %23, align 4, !tbaa !16
  %.not239.us = icmp ne i32 %77, 0
  %or.cond257.us = and i1 %33, %.not239.us
  %78 = load i32, ptr %2, align 8, !tbaa !10
  br i1 %or.cond257.us, label %89, label %79

79:                                               ; preds = %76
  %80 = load i32, ptr %28, align 4, !tbaa !20
  %81 = icmp ult i32 %80, 1101
  br i1 %81, label %84, label %82

82:                                               ; preds = %79
  %83 = load i32, ptr %26, align 4, !tbaa !18
  br label %84

84:                                               ; preds = %82, %79
  %85 = phi i32 [ %83, %82 ], [ 545725200, %79 ]
  %86 = load i32, ptr %10, align 4, !tbaa !5
  %87 = load i32, ptr %27, align 8, !tbaa !19
  %88 = mul i32 %87, %.0223267.us
  tail call void @libxsmm_x86_instruction_vec_move(ptr noundef nonnull %0, i32 noundef %78, i32 noundef %85, i32 noundef %86, i32 noundef 127, i32 noundef 0, i32 noundef %88, i8 noundef signext 120, i32 noundef %32, i32 noundef 0, i32 noundef 1, i32 noundef 0) #2
  br label %95

89:                                               ; preds = %76
  %90 = load i32, ptr %10, align 4, !tbaa !5
  %91 = load i32, ptr %27, align 8, !tbaa !19
  %92 = mul i32 %91, %24
  %93 = add i32 %78, -1051
  %spec.select258.us = icmp ult i32 %93, 50
  %94 = select i1 %spec.select258.us, i8 121, i8 122
  tail call void @libxsmm_x86_instruction_vec_move(ptr noundef %0, i32 noundef %78, i32 noundef -536406417, i32 noundef %90, i32 noundef 127, i32 noundef 0, i32 noundef %92, i8 noundef signext %94, i32 noundef %32, i32 noundef 2, i32 noundef 1, i32 noundef 0) #2
  br label %95

95:                                               ; preds = %89, %84
  %96 = load i8, ptr %22, align 4, !tbaa !15
  tail call void @libxsmm_generator_vcvthf8_to_f32_avx512_preppedstack(ptr noundef %0, i8 noundef signext %96, i32 noundef %32, i32 noundef %32, i32 noundef 0, i32 noundef 1, i32 noundef 6, i32 noundef 7) #2
  br label %179

97:                                               ; preds = %37
  %98 = icmp eq i32 %.0266.us, 0
  br i1 %98, label %105, label %99

99:                                               ; preds = %97
  %100 = load i32, ptr %2, align 8, !tbaa !10
  %101 = add i32 %100, -1051
  %spec.select255.us = icmp ult i32 %101, 50
  %102 = select i1 %spec.select255.us, i8 121, i8 122
  %103 = mul i32 %.0266.us, %6
  %104 = add i32 %103, %32
  tail call void @libxsmm_x86_instruction_vec_compute_2reg(ptr noundef %0, i32 noundef 537138704, i8 noundef signext %102, i32 noundef %32, i32 noundef %104) #2
  br label %179

105:                                              ; preds = %97
  %106 = load i32, ptr %23, align 4, !tbaa !16
  %.not240.us = icmp ne i32 %106, 0
  %or.cond253.us = and i1 %33, %.not240.us
  %107 = load i32, ptr %2, align 8, !tbaa !10
  br i1 %or.cond253.us, label %118, label %108

108:                                              ; preds = %105
  %109 = load i32, ptr %28, align 4, !tbaa !20
  %110 = icmp ult i32 %109, 1101
  br i1 %110, label %113, label %111

111:                                              ; preds = %108
  %112 = load i32, ptr %26, align 4, !tbaa !18
  br label %113

113:                                              ; preds = %111, %108
  %114 = phi i32 [ %112, %111 ], [ 545725200, %108 ]
  %115 = load i32, ptr %10, align 4, !tbaa !5
  %116 = load i32, ptr %27, align 8, !tbaa !19
  %117 = mul i32 %116, %.0223267.us
  tail call void @libxsmm_x86_instruction_vec_move(ptr noundef nonnull %0, i32 noundef %107, i32 noundef %114, i32 noundef %115, i32 noundef 127, i32 noundef 0, i32 noundef %117, i8 noundef signext 120, i32 noundef %32, i32 noundef 0, i32 noundef 1, i32 noundef 0) #2
  br label %124

118:                                              ; preds = %105
  %119 = load i32, ptr %10, align 4, !tbaa !5
  %120 = load i32, ptr %27, align 8, !tbaa !19
  %121 = mul i32 %120, %24
  %122 = add i32 %107, -1051
  %spec.select254.us = icmp ult i32 %122, 50
  %123 = select i1 %spec.select254.us, i8 121, i8 122
  tail call void @libxsmm_x86_instruction_vec_move(ptr noundef %0, i32 noundef %107, i32 noundef -536406417, i32 noundef %119, i32 noundef 127, i32 noundef 0, i32 noundef %121, i8 noundef signext %123, i32 noundef %32, i32 noundef 2, i32 noundef 1, i32 noundef 0) #2
  br label %124

124:                                              ; preds = %118, %113
  %125 = load i8, ptr %22, align 4, !tbaa !15
  tail call void @libxsmm_generator_cvtbf8ps_avx512(ptr noundef %0, i8 noundef signext %125, i32 noundef %32, i32 noundef %32) #2
  br label %179

126:                                              ; preds = %36
  %127 = icmp eq i32 %.0266.us, 0
  br i1 %127, label %134, label %128

128:                                              ; preds = %126
  %129 = load i32, ptr %2, align 8, !tbaa !10
  %130 = add i32 %129, -1006
  %spec.select251.us = icmp ult i32 %130, 95
  %131 = select i1 %spec.select251.us, i8 121, i8 122
  %132 = mul i32 %.0266.us, %6
  %133 = add i32 %132, %32
  tail call void @libxsmm_x86_instruction_vec_compute_2reg(ptr noundef %0, i32 noundef 537138704, i8 noundef signext %131, i32 noundef %32, i32 noundef %133) #2
  br label %179

134:                                              ; preds = %126
  %135 = load i32, ptr %23, align 4, !tbaa !16
  %.not241.us = icmp ne i32 %135, 0
  %or.cond245.us = and i1 %33, %.not241.us
  %136 = load i32, ptr %2, align 8, !tbaa !10
  %137 = icmp ult i32 %136, 1005
  br i1 %or.cond245.us, label %152, label %138

138:                                              ; preds = %134
  br i1 %137, label %147, label %139

139:                                              ; preds = %138
  %.not242.us = icmp ne i32 %136, 1005
  %140 = icmp ult i32 %136, 1051
  %or.cond248.us = and i1 %.not242.us, %140
  %141 = add i32 %136, -1051
  %spec.select249.us = icmp ult i32 %141, 50
  %142 = or i1 %or.cond248.us, %spec.select249.us
  %.ph = select i1 %142, i8 120, i8 121
  %143 = icmp ugt i32 %136, 1103
  %144 = and i1 %29, %143
  %145 = and i1 %18, %144
  %.0225.us272 = select i1 %145, i8 122, i8 %.ph
  %146 = load i32, ptr %26, align 4, !tbaa !18
  br label %147

147:                                              ; preds = %138, %139
  %.0225.us274 = phi i8 [ %.0225.us272, %139 ], [ 120, %138 ]
  %148 = phi i32 [ %146, %139 ], [ -1610149872, %138 ]
  %149 = load i32, ptr %10, align 4, !tbaa !5
  %150 = load i32, ptr %27, align 8, !tbaa !19
  %151 = mul i32 %35, %150
  tail call void @libxsmm_x86_instruction_vec_move(ptr noundef %0, i32 noundef %136, i32 noundef %148, i32 noundef %149, i32 noundef 127, i32 noundef 0, i32 noundef %151, i8 noundef signext %.0225.us274, i32 noundef %32, i32 noundef 0, i32 noundef 1, i32 noundef 0) #2
  br label %174

152:                                              ; preds = %134
  br i1 %137, label %169, label %153

153:                                              ; preds = %152
  %.not243.us = icmp ne i32 %136, 1005
  %154 = icmp ult i32 %136, 1051
  %or.cond246.us = and i1 %.not243.us, %154
  br i1 %or.cond246.us, label %164, label %155

155:                                              ; preds = %153
  %156 = add i32 %136, -1051
  %spec.select.us = icmp ult i32 %156, 50
  %157 = select i1 %spec.select.us, i8 120, i8 121
  %158 = icmp ugt i32 %136, 1103
  %159 = and i1 %29, %158
  %160 = and i1 %18, %159
  %.0224.us = select i1 %160, i8 122, i8 %157
  %161 = load i32, ptr %10, align 4, !tbaa !5
  %162 = load i32, ptr %27, align 8, !tbaa !19
  %163 = mul i32 %35, %162
  tail call void @libxsmm_x86_instruction_vec_move(ptr noundef %0, i32 noundef %136, i32 noundef -528017809, i32 noundef %161, i32 noundef 127, i32 noundef 0, i32 noundef %163, i8 noundef signext %.0224.us, i32 noundef %32, i32 noundef %30, i32 noundef 1, i32 noundef 0) #2
  br label %174

164:                                              ; preds = %153
  %165 = load i32, ptr %25, align 4, !tbaa !17
  %166 = load i32, ptr %10, align 4, !tbaa !5
  %167 = load i32, ptr %27, align 8, !tbaa !19
  %168 = mul i32 %35, %167
  tail call void @libxsmm_generator_maskedload_16bit_avx2(ptr noundef %0, i32 noundef %165, i32 noundef %166, i32 noundef 127, i32 noundef 0, i32 noundef %168, i32 noundef %32, i32 noundef %8) #2
  br label %174

169:                                              ; preds = %152
  %170 = load i32, ptr %25, align 4, !tbaa !17
  %171 = load i32, ptr %10, align 4, !tbaa !5
  %172 = load i32, ptr %27, align 8, !tbaa !19
  %173 = mul i32 %35, %172
  tail call void @libxsmm_generator_maskedload_16bit_sse(ptr noundef %0, i32 noundef %170, i32 noundef 0, i32 noundef %171, i32 noundef 127, i32 noundef 0, i32 noundef %173, i32 noundef %32, i32 noundef %8) #2
  br label %174

174:                                              ; preds = %169, %164, %155, %147
  br i1 %17, label %.thread.us, label %175

175:                                              ; preds = %174
  br i1 %or.cond7, label %176, label %179

176:                                              ; preds = %175
  %177 = load i8, ptr %22, align 4, !tbaa !15
  tail call void @libxsmm_x86_instruction_vec_compute_2reg(ptr noundef %0, i32 noundef 537208083, i8 noundef signext %177, i32 noundef %32, i32 noundef %32) #2
  br label %179

.thread.us:                                       ; preds = %174
  %178 = load i8, ptr %22, align 4, !tbaa !15
  tail call void @libxsmm_generator_cvtbf16ps_sse_avx2_avx512(ptr noundef %0, i8 noundef signext %178, i32 noundef %32, i32 noundef %32) #2
  br label %179

179:                                              ; preds = %.thread.us, %176, %175, %128, %124, %99, %95, %70, %66, %42
  %180 = add nuw i32 %.0266.us, 1
  %exitcond.not = icmp eq i32 %180, %7
  br i1 %exitcond.not, label %._crit_edge.us, label %36, !llvm.loop !22

._crit_edge.us:                                   ; preds = %179
  %181 = add nuw i32 %.0223267.us, 1
  %exitcond271.not = icmp eq i32 %181, %6
  br i1 %exitcond271.not, label %._crit_edge268, label %.preheader.us, !llvm.loop !24

.split.us:                                        ; preds = %39
  %182 = load i32, ptr @libxsmm_ninit, align 4, !tbaa !25
  %183 = icmp ugt i32 %182, 1
  %184 = load i32, ptr @libxsmm_verbosity, align 4
  %185 = select i1 %183, i32 %184, i32 1
  tail call void @libxsmm_handle_error(ptr noundef %0, i32 noundef 90033, ptr noundef nonnull @__func__.libxsmm_generator_gemm_load_colbias_to_2D_block, ptr noundef nonnull @.str.1, i32 noundef 961, i32 noundef %185) #2
  br label %190

._crit_edge268:                                   ; preds = %._crit_edge.us, %.preheader.lr.ph, %15
  br i1 %12, label %186, label %188

186:                                              ; preds = %._crit_edge268
  %187 = load i32, ptr %10, align 4, !tbaa !5
  tail call void @libxsmm_generator_vcvt_hf8_tofrom_f32_avx512_clean_stack(ptr noundef %0, i32 noundef %187) #2
  br label %188

188:                                              ; preds = %186, %._crit_edge268
  %189 = load i32, ptr %10, align 4, !tbaa !5
  tail call void @libxsmm_x86_instruction_pop_reg(ptr noundef %0, i32 noundef %189) #2
  br label %190

190:                                              ; preds = %188, %.split.us
  ret void
}

declare void @libxsmm_generator_vcvt_hf8_tofrom_f32_avx512_prep_stack(ptr noundef, i32 noundef) local_unnamed_addr #1

declare void @libxsmm_generator_maskedload_16bit_sse(ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #1

declare void @libxsmm_generator_maskedload_16bit_avx2(ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #1

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

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

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

declare void @libxsmm_x86_instruction_unified_vec_move(ptr 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 #1

declare void @libxsmm_generator_vcvt_hf8_tofrom_f32_avx512_clean_stack(ptr noundef, i32 noundef) local_unnamed_addr #1

attributes #0 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { "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 }

!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 96}
!6 = !{!"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}
!7 = !{!"int", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!11, !7, i64 0}
!11 = !{!"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, !12, 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, !14, i64 592, !7, i64 600, !7, i64 604, !7, i64 608, !7, i64 612, !14, 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}
!12 = !{!"libxsmm_tile_config", !8, i64 0, !13, i64 2, !8, i64 4, !13, i64 6, !8, i64 8, !13, i64 10, !8, i64 12, !13, i64 14, !8, i64 16, !13, i64 18, !8, i64 20, !13, i64 22, !8, i64 24, !13, i64 26, !8, i64 28, !13, i64 30, !8, i64 32}
!13 = !{!"short", !8, i64 0}
!14 = !{!"any pointer", !8, i64 0}
!15 = !{!11, !8, i64 84}
!16 = !{!11, !7, i64 44}
!17 = !{!6, !7, i64 88}
!18 = !{!11, !7, i64 36}
!19 = !{!11, !7, i64 8}
!20 = !{!21, !7, i64 28}
!21 = !{!"libxsmm_generated_code", !14, i64 0, !7, i64 8, !7, i64 12, !7, i64 16, !7, i64 20, !7, i64 24, !7, i64 28}
!22 = distinct !{!22, !23}
!23 = !{!"llvm.loop.mustprogress"}
!24 = distinct !{!24, !23}
!25 = !{!7, !7, i64 0}


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