; 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_add_colbias_to_2D_block = external hidden unnamed_addr constant [47 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_compute_3reg(ptr noundef, i32 noundef, i8 noundef signext, 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) #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

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

; Function Attrs: nounwind uwtable
define dso_local void @libxsmm_generator_gemm_add_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
  %28 = alloca i32, align 4
  %29 = 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
  %30 = load ptr, ptr %10, align 8, !tbaa !5
  %31 = load ptr, ptr %11, align 8, !tbaa !5
  %32 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %31, i32 0, i32 24
  %33 = load i32, ptr %32, align 4, !tbaa !11
  call void @libxsmm_x86_instruction_push_reg(ptr noundef %30, i32 noundef %33)
  %34 = load i32, ptr %13, align 4, !tbaa !9
  %35 = icmp eq i32 %34, 5
  br i1 %35, label %36, label %41

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

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

47:                                               ; preds = %672, %41
  %48 = load i32, ptr %20, align 4, !tbaa !9
  %49 = load i32, ptr %16, align 4, !tbaa !9
  %50 = icmp ult i32 %48, %49
  br i1 %50, label %51, label %675

51:                                               ; preds = %47
  %52 = load i32, ptr %13, align 4, !tbaa !9
  %53 = icmp eq i32 %52, 2
  br i1 %53, label %57, label %54

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

57:                                               ; preds = %54, %51
  %58 = load ptr, ptr %12, align 8, !tbaa !5
  %59 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %58, i32 0, i32 11
  %60 = load i32, ptr %59, align 4, !tbaa !13
  %61 = icmp ne i32 %60, 0
  br i1 %61, label %62, label %159

62:                                               ; preds = %57
  %63 = load i32, ptr %20, align 4, !tbaa !9
  %64 = load i32, ptr %16, align 4, !tbaa !9
  %65 = sub i32 %64, 1
  %66 = icmp eq i32 %63, %65
  br i1 %66, label %67, label %159

67:                                               ; preds = %62
  %68 = load ptr, ptr %12, align 8, !tbaa !5
  %69 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %68, i32 0, i32 0
  %70 = load i32, ptr %69, align 8, !tbaa !17
  %71 = icmp ult i32 %70, 1005
  br i1 %71, label %72, label %87

72:                                               ; preds = %67
  %73 = load ptr, ptr %10, align 8, !tbaa !5
  %74 = load ptr, ptr %11, align 8, !tbaa !5
  %75 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %74, i32 0, i32 22
  %76 = load i32, ptr %75, align 4, !tbaa !18
  %77 = load ptr, ptr %11, align 8, !tbaa !5
  %78 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %77, i32 0, i32 24
  %79 = load i32, ptr %78, align 4, !tbaa !11
  %80 = load i32, ptr %20, align 4, !tbaa !9
  %81 = load ptr, ptr %12, align 8, !tbaa !5
  %82 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %81, i32 0, i32 2
  %83 = load i32, ptr %82, align 8, !tbaa !19
  %84 = mul i32 %80, %83
  %85 = mul i32 %84, 2
  %86 = load i32, ptr %18, align 4, !tbaa !9
  call void @libxsmm_generator_maskedload_16bit_sse(ptr noundef %73, i32 noundef %76, i32 noundef 0, i32 noundef %79, i32 noundef 127, i32 noundef 0, i32 noundef %85, i32 noundef 0, i32 noundef %86)
  br label %158

87:                                               ; preds = %67
  %88 = load ptr, ptr %12, align 8, !tbaa !5
  %89 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %88, i32 0, i32 0
  %90 = load i32, ptr %89, align 8, !tbaa !17
  %91 = icmp uge i32 %90, 1006
  br i1 %91, label %92, label %112

92:                                               ; preds = %87
  %93 = load ptr, ptr %12, align 8, !tbaa !5
  %94 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %93, i32 0, i32 0
  %95 = load i32, ptr %94, align 8, !tbaa !17
  %96 = icmp ult i32 %95, 1051
  br i1 %96, label %97, label %112

97:                                               ; preds = %92
  %98 = load ptr, ptr %10, align 8, !tbaa !5
  %99 = load ptr, ptr %11, align 8, !tbaa !5
  %100 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %99, i32 0, i32 22
  %101 = load i32, ptr %100, align 4, !tbaa !18
  %102 = load ptr, ptr %11, align 8, !tbaa !5
  %103 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %102, i32 0, i32 24
  %104 = load i32, ptr %103, align 4, !tbaa !11
  %105 = load i32, ptr %20, align 4, !tbaa !9
  %106 = load ptr, ptr %12, align 8, !tbaa !5
  %107 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %106, i32 0, i32 2
  %108 = load i32, ptr %107, align 8, !tbaa !19
  %109 = mul i32 %105, %108
  %110 = mul i32 %109, 2
  %111 = load i32, ptr %18, align 4, !tbaa !9
  call void @libxsmm_generator_maskedload_16bit_avx2(ptr noundef %98, i32 noundef %101, i32 noundef %104, i32 noundef 127, i32 noundef 0, i32 noundef %110, i32 noundef 0, i32 noundef %111)
  br label %157

112:                                              ; preds = %92, %87
  call void @llvm.lifetime.start.p0(i64 1, ptr %21) #3
  %113 = load ptr, ptr %12, align 8, !tbaa !5
  %114 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %113, i32 0, i32 0
  %115 = load i32, ptr %114, align 8, !tbaa !17
  %116 = icmp uge i32 %115, 1051
  br i1 %116, label %117, label %122

117:                                              ; preds = %112
  %118 = load ptr, ptr %12, align 8, !tbaa !5
  %119 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %118, i32 0, i32 0
  %120 = load i32, ptr %119, align 8, !tbaa !17
  %121 = icmp ult i32 %120, 1101
  br label %122

122:                                              ; preds = %117, %112
  %123 = phi i1 [ false, %112 ], [ %121, %117 ]
  %124 = zext i1 %123 to i64
  %125 = select i1 %123, i32 120, i32 121
  %126 = trunc i32 %125 to i8
  store i8 %126, ptr %21, align 1, !tbaa !20
  %127 = load i32, ptr %13, align 4, !tbaa !9
  %128 = icmp eq i32 %127, 3
  br i1 %128, label %129, label %138

129:                                              ; preds = %122
  %130 = load i32, ptr %14, align 4, !tbaa !9
  %131 = icmp eq i32 %130, 3
  br i1 %131, label %132, label %138

132:                                              ; preds = %129
  %133 = load ptr, ptr %12, align 8, !tbaa !5
  %134 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %133, i32 0, i32 0
  %135 = load i32, ptr %134, align 8, !tbaa !17
  %136 = icmp uge i32 %135, 1104
  br i1 %136, label %137, label %138

137:                                              ; preds = %132
  store i8 122, ptr %21, align 1, !tbaa !20
  br label %138

138:                                              ; preds = %137, %132, %129, %122
  %139 = load ptr, ptr %10, align 8, !tbaa !5
  %140 = load ptr, ptr %12, align 8, !tbaa !5
  %141 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %140, i32 0, i32 0
  %142 = load i32, ptr %141, align 8, !tbaa !17
  %143 = load ptr, ptr %11, align 8, !tbaa !5
  %144 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %143, i32 0, i32 24
  %145 = load i32, ptr %144, align 4, !tbaa !11
  %146 = load i32, ptr %20, align 4, !tbaa !9
  %147 = load ptr, ptr %12, align 8, !tbaa !5
  %148 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %147, i32 0, i32 2
  %149 = load i32, ptr %148, align 8, !tbaa !19
  %150 = mul i32 %146, %149
  %151 = mul i32 %150, 2
  %152 = load i8, ptr %21, align 1, !tbaa !20
  %153 = load i32, ptr %13, align 4, !tbaa !9
  %154 = icmp eq i32 %153, 2
  %155 = zext i1 %154 to i64
  %156 = select i1 %154, i32 2, i32 1
  call void @libxsmm_x86_instruction_vec_move(ptr noundef %139, i32 noundef %142, i32 noundef -528017809, i32 noundef %145, i32 noundef 127, i32 noundef 0, i32 noundef %151, i8 noundef signext %152, i32 noundef 0, i32 noundef %156, i32 noundef 1, i32 noundef 0)
  call void @llvm.lifetime.end.p0(i64 1, ptr %21) #3
  br label %157

157:                                              ; preds = %138, %97
  br label %158

158:                                              ; preds = %157, %72
  br label %232

159:                                              ; preds = %62, %57
  call void @llvm.lifetime.start.p0(i64 1, ptr %22) #3
  %160 = load ptr, ptr %12, align 8, !tbaa !5
  %161 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %160, i32 0, i32 0
  %162 = load i32, ptr %161, align 8, !tbaa !17
  %163 = icmp ult i32 %162, 1005
  br i1 %163, label %164, label %165

164:                                              ; preds = %159
  br label %192

165:                                              ; preds = %159
  %166 = load ptr, ptr %12, align 8, !tbaa !5
  %167 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %166, i32 0, i32 0
  %168 = load i32, ptr %167, align 8, !tbaa !17
  %169 = icmp uge i32 %168, 1006
  br i1 %169, label %170, label %176

170:                                              ; preds = %165
  %171 = load ptr, ptr %12, align 8, !tbaa !5
  %172 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %171, i32 0, i32 0
  %173 = load i32, ptr %172, align 8, !tbaa !17
  %174 = icmp ult i32 %173, 1051
  br i1 %174, label %175, label %176

175:                                              ; preds = %170
  br label %190

176:                                              ; preds = %170, %165
  %177 = load ptr, ptr %12, align 8, !tbaa !5
  %178 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %177, i32 0, i32 0
  %179 = load i32, ptr %178, align 8, !tbaa !17
  %180 = icmp uge i32 %179, 1051
  br i1 %180, label %181, label %186

181:                                              ; preds = %176
  %182 = load ptr, ptr %12, align 8, !tbaa !5
  %183 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %182, i32 0, i32 0
  %184 = load i32, ptr %183, align 8, !tbaa !17
  %185 = icmp ult i32 %184, 1101
  br label %186

186:                                              ; preds = %181, %176
  %187 = phi i1 [ false, %176 ], [ %185, %181 ]
  %188 = zext i1 %187 to i64
  %189 = select i1 %187, i32 120, i32 121
  br label %190

190:                                              ; preds = %186, %175
  %191 = phi i32 [ 120, %175 ], [ %189, %186 ]
  br label %192

192:                                              ; preds = %190, %164
  %193 = phi i32 [ 120, %164 ], [ %191, %190 ]
  %194 = trunc i32 %193 to i8
  store i8 %194, ptr %22, align 1, !tbaa !20
  %195 = load i32, ptr %13, align 4, !tbaa !9
  %196 = icmp eq i32 %195, 3
  br i1 %196, label %197, label %206

197:                                              ; preds = %192
  %198 = load i32, ptr %14, align 4, !tbaa !9
  %199 = icmp eq i32 %198, 3
  br i1 %199, label %200, label %206

200:                                              ; preds = %197
  %201 = load ptr, ptr %12, align 8, !tbaa !5
  %202 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %201, i32 0, i32 0
  %203 = load i32, ptr %202, align 8, !tbaa !17
  %204 = icmp uge i32 %203, 1104
  br i1 %204, label %205, label %206

205:                                              ; preds = %200
  store i8 122, ptr %22, align 1, !tbaa !20
  br label %206

206:                                              ; preds = %205, %200, %197, %192
  %207 = load ptr, ptr %10, align 8, !tbaa !5
  %208 = load ptr, ptr %12, align 8, !tbaa !5
  %209 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %208, i32 0, i32 0
  %210 = load i32, ptr %209, align 8, !tbaa !17
  %211 = load ptr, ptr %12, align 8, !tbaa !5
  %212 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %211, i32 0, i32 0
  %213 = load i32, ptr %212, align 8, !tbaa !17
  %214 = icmp ult i32 %213, 1005
  br i1 %214, label %215, label %216

215:                                              ; preds = %206
  br label %220

216:                                              ; preds = %206
  %217 = load ptr, ptr %12, align 8, !tbaa !5
  %218 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %217, i32 0, i32 9
  %219 = load i32, ptr %218, align 4, !tbaa !21
  br label %220

220:                                              ; preds = %216, %215
  %221 = phi i32 [ -1610149872, %215 ], [ %219, %216 ]
  %222 = load ptr, ptr %11, align 8, !tbaa !5
  %223 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %222, i32 0, i32 24
  %224 = load i32, ptr %223, align 4, !tbaa !11
  %225 = load i32, ptr %20, align 4, !tbaa !9
  %226 = load ptr, ptr %12, align 8, !tbaa !5
  %227 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %226, i32 0, i32 2
  %228 = load i32, ptr %227, align 8, !tbaa !19
  %229 = mul i32 %225, %228
  %230 = mul i32 %229, 2
  %231 = load i8, ptr %22, align 1, !tbaa !20
  call void @libxsmm_x86_instruction_vec_move(ptr noundef %207, i32 noundef %210, i32 noundef %221, i32 noundef %224, i32 noundef 127, i32 noundef 0, i32 noundef %230, i8 noundef signext %231, i32 noundef 0, i32 noundef 0, i32 noundef 1, i32 noundef 0)
  call void @llvm.lifetime.end.p0(i64 1, ptr %22) #3
  br label %232

232:                                              ; preds = %220, %158
  %233 = load i32, ptr %13, align 4, !tbaa !9
  %234 = icmp eq i32 %233, 2
  br i1 %234, label %235, label %240

235:                                              ; preds = %232
  %236 = load ptr, ptr %10, align 8, !tbaa !5
  %237 = load ptr, ptr %12, align 8, !tbaa !5
  %238 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %237, i32 0, i32 21
  %239 = load i8, ptr %238, align 4, !tbaa !22
  call void @libxsmm_generator_cvtbf16ps_sse_avx2_avx512(ptr noundef %236, i8 noundef signext %239, i32 noundef 0, i32 noundef 0)
  br label %240

240:                                              ; preds = %235, %232
  %241 = load i32, ptr %13, align 4, !tbaa !9
  %242 = icmp eq i32 %241, 3
  br i1 %242, label %243, label %268

243:                                              ; preds = %240
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #3
  %244 = load i32, ptr %14, align 4, !tbaa !9
  %245 = icmp eq i32 %244, 1
  br i1 %245, label %256, label %246

246:                                              ; preds = %243
  %247 = load i32, ptr %14, align 4, !tbaa !9
  %248 = icmp eq i32 %247, 3
  br i1 %248, label %249, label %254

249:                                              ; preds = %246
  %250 = load ptr, ptr %12, align 8, !tbaa !5
  %251 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %250, i32 0, i32 0
  %252 = load i32, ptr %251, align 8, !tbaa !17
  %253 = icmp ult i32 %252, 1104
  br label %254

254:                                              ; preds = %249, %246
  %255 = phi i1 [ false, %246 ], [ %253, %249 ]
  br label %256

256:                                              ; preds = %254, %243
  %257 = phi i1 [ true, %243 ], [ %255, %254 ]
  %258 = zext i1 %257 to i64
  %259 = select i1 %257, i32 1, i32 0
  store i32 %259, ptr %23, align 4, !tbaa !9
  %260 = load i32, ptr %23, align 4, !tbaa !9
  %261 = icmp ne i32 %260, 0
  br i1 %261, label %262, label %267

262:                                              ; preds = %256
  %263 = load ptr, ptr %10, align 8, !tbaa !5
  %264 = load ptr, ptr %12, align 8, !tbaa !5
  %265 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %264, i32 0, i32 21
  %266 = load i8, ptr %265, align 4, !tbaa !22
  call void @libxsmm_x86_instruction_vec_compute_2reg(ptr noundef %263, i32 noundef 537208083, i8 noundef signext %266, i32 noundef 0, i32 noundef 0)
  br label %267

267:                                              ; preds = %262, %256
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #3
  br label %268

268:                                              ; preds = %267, %240
  br label %548

269:                                              ; preds = %54
  %270 = load i32, ptr %13, align 4, !tbaa !9
  %271 = icmp eq i32 %270, 4
  br i1 %271, label %272, label %364

272:                                              ; preds = %269
  %273 = load ptr, ptr %12, align 8, !tbaa !5
  %274 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %273, i32 0, i32 11
  %275 = load i32, ptr %274, align 4, !tbaa !13
  %276 = icmp ne i32 %275, 0
  br i1 %276, label %277, label %335

277:                                              ; preds = %272
  %278 = load i32, ptr %20, align 4, !tbaa !9
  %279 = load i32, ptr %16, align 4, !tbaa !9
  %280 = sub i32 %279, 1
  %281 = icmp eq i32 %278, %280
  br i1 %281, label %282, label %335

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

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

292:                                              ; preds = %287
  %293 = load ptr, ptr %10, align 8, !tbaa !5
  %294 = load ptr, ptr %11, align 8, !tbaa !5
  %295 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %294, i32 0, i32 22
  %296 = load i32, ptr %295, align 4, !tbaa !18
  %297 = load ptr, ptr %11, align 8, !tbaa !5
  %298 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %297, i32 0, i32 24
  %299 = load i32, ptr %298, align 4, !tbaa !11
  %300 = load i32, ptr %20, align 4, !tbaa !9
  %301 = load ptr, ptr %12, align 8, !tbaa !5
  %302 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %301, i32 0, i32 2
  %303 = load i32, ptr %302, align 8, !tbaa !19
  %304 = mul i32 %300, %303
  %305 = mul i32 %304, 2
  %306 = load i32, ptr %18, align 4, !tbaa !9
  call void @libxsmm_generator_maskedload_16bit_avx2(ptr noundef %293, i32 noundef %296, i32 noundef %299, i32 noundef 127, i32 noundef 0, i32 noundef %305, i32 noundef 0, i32 noundef %306)
  br label %334

307:                                              ; preds = %287, %282
  %308 = load ptr, ptr %10, align 8, !tbaa !5
  %309 = load ptr, ptr %12, align 8, !tbaa !5
  %310 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %309, i32 0, i32 0
  %311 = load i32, ptr %310, align 8, !tbaa !17
  %312 = load ptr, ptr %11, align 8, !tbaa !5
  %313 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %312, i32 0, i32 24
  %314 = load i32, ptr %313, align 4, !tbaa !11
  %315 = load i32, ptr %20, align 4, !tbaa !9
  %316 = load ptr, ptr %12, align 8, !tbaa !5
  %317 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %316, i32 0, i32 2
  %318 = load i32, ptr %317, align 8, !tbaa !19
  %319 = mul i32 %315, %318
  %320 = load ptr, ptr %12, align 8, !tbaa !5
  %321 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %320, i32 0, i32 0
  %322 = load i32, ptr %321, align 8, !tbaa !17
  %323 = icmp uge i32 %322, 1051
  br i1 %323, label %324, label %329

324:                                              ; preds = %307
  %325 = load ptr, ptr %12, align 8, !tbaa !5
  %326 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %325, i32 0, i32 0
  %327 = load i32, ptr %326, align 8, !tbaa !17
  %328 = icmp ult i32 %327, 1101
  br label %329

329:                                              ; preds = %324, %307
  %330 = phi i1 [ false, %307 ], [ %328, %324 ]
  %331 = zext i1 %330 to i64
  %332 = select i1 %330, i32 121, i32 122
  %333 = trunc i32 %332 to i8
  call void @libxsmm_x86_instruction_vec_move(ptr noundef %308, i32 noundef %311, i32 noundef -536406417, i32 noundef %314, i32 noundef 127, i32 noundef 0, i32 noundef %319, i8 noundef signext %333, i32 noundef 0, i32 noundef 2, i32 noundef 1, i32 noundef 0)
  br label %334

334:                                              ; preds = %329, %292
  br label %359

335:                                              ; preds = %277, %272
  %336 = load ptr, ptr %10, align 8, !tbaa !5
  %337 = load ptr, ptr %12, align 8, !tbaa !5
  %338 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %337, i32 0, i32 0
  %339 = load i32, ptr %338, align 8, !tbaa !17
  %340 = load ptr, ptr %10, align 8, !tbaa !5
  %341 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %340, i32 0, i32 6
  %342 = load i32, ptr %341, align 4, !tbaa !23
  %343 = icmp ult i32 %342, 1101
  br i1 %343, label %344, label %345

344:                                              ; preds = %335
  br label %349

345:                                              ; preds = %335
  %346 = load ptr, ptr %12, align 8, !tbaa !5
  %347 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %346, i32 0, i32 9
  %348 = load i32, ptr %347, align 4, !tbaa !21
  br label %349

349:                                              ; preds = %345, %344
  %350 = phi i32 [ 545725200, %344 ], [ %348, %345 ]
  %351 = load ptr, ptr %11, align 8, !tbaa !5
  %352 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %351, i32 0, i32 24
  %353 = load i32, ptr %352, align 4, !tbaa !11
  %354 = load i32, ptr %20, align 4, !tbaa !9
  %355 = load ptr, ptr %12, align 8, !tbaa !5
  %356 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %355, i32 0, i32 2
  %357 = load i32, ptr %356, align 8, !tbaa !19
  %358 = mul i32 %354, %357
  call void @libxsmm_x86_instruction_vec_move(ptr noundef %336, i32 noundef %339, i32 noundef %350, i32 noundef %353, i32 noundef 127, i32 noundef 0, i32 noundef %358, i8 noundef signext 120, i32 noundef 0, i32 noundef 0, i32 noundef 1, i32 noundef 0)
  br label %359

359:                                              ; preds = %349, %334
  %360 = load ptr, ptr %10, align 8, !tbaa !5
  %361 = load ptr, ptr %12, align 8, !tbaa !5
  %362 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %361, i32 0, i32 21
  %363 = load i8, ptr %362, align 4, !tbaa !22
  call void @libxsmm_generator_cvtbf8ps_avx512(ptr noundef %360, i8 noundef signext %363, i32 noundef 0, i32 noundef 0)
  br label %547

364:                                              ; preds = %269
  %365 = load i32, ptr %13, align 4, !tbaa !9
  %366 = icmp eq i32 %365, 5
  br i1 %366, label %367, label %459

367:                                              ; preds = %364
  %368 = load ptr, ptr %12, align 8, !tbaa !5
  %369 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %368, i32 0, i32 11
  %370 = load i32, ptr %369, align 4, !tbaa !13
  %371 = icmp ne i32 %370, 0
  br i1 %371, label %372, label %430

372:                                              ; preds = %367
  %373 = load i32, ptr %20, align 4, !tbaa !9
  %374 = load i32, ptr %16, align 4, !tbaa !9
  %375 = sub i32 %374, 1
  %376 = icmp eq i32 %373, %375
  br i1 %376, label %377, label %430

377:                                              ; preds = %372
  %378 = load ptr, ptr %12, align 8, !tbaa !5
  %379 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %378, i32 0, i32 0
  %380 = load i32, ptr %379, align 8, !tbaa !17
  %381 = icmp uge i32 %380, 1006
  br i1 %381, label %382, label %402

382:                                              ; preds = %377
  %383 = load ptr, ptr %12, align 8, !tbaa !5
  %384 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %383, i32 0, i32 0
  %385 = load i32, ptr %384, align 8, !tbaa !17
  %386 = icmp ult i32 %385, 1051
  br i1 %386, label %387, label %402

387:                                              ; preds = %382
  %388 = load ptr, ptr %10, align 8, !tbaa !5
  %389 = load ptr, ptr %11, align 8, !tbaa !5
  %390 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %389, i32 0, i32 22
  %391 = load i32, ptr %390, align 4, !tbaa !18
  %392 = load ptr, ptr %11, align 8, !tbaa !5
  %393 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %392, i32 0, i32 24
  %394 = load i32, ptr %393, align 4, !tbaa !11
  %395 = load i32, ptr %20, align 4, !tbaa !9
  %396 = load ptr, ptr %12, align 8, !tbaa !5
  %397 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %396, i32 0, i32 2
  %398 = load i32, ptr %397, align 8, !tbaa !19
  %399 = mul i32 %395, %398
  %400 = mul i32 %399, 2
  %401 = load i32, ptr %18, align 4, !tbaa !9
  call void @libxsmm_generator_maskedload_16bit_avx2(ptr noundef %388, i32 noundef %391, i32 noundef %394, i32 noundef 127, i32 noundef 0, i32 noundef %400, i32 noundef 0, i32 noundef %401)
  br label %429

402:                                              ; preds = %382, %377
  %403 = load ptr, ptr %10, align 8, !tbaa !5
  %404 = load ptr, ptr %12, align 8, !tbaa !5
  %405 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %404, i32 0, i32 0
  %406 = load i32, ptr %405, align 8, !tbaa !17
  %407 = load ptr, ptr %11, align 8, !tbaa !5
  %408 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %407, i32 0, i32 24
  %409 = load i32, ptr %408, align 4, !tbaa !11
  %410 = load i32, ptr %20, align 4, !tbaa !9
  %411 = load ptr, ptr %12, align 8, !tbaa !5
  %412 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %411, i32 0, i32 2
  %413 = load i32, ptr %412, align 8, !tbaa !19
  %414 = mul i32 %410, %413
  %415 = load ptr, ptr %12, align 8, !tbaa !5
  %416 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %415, i32 0, i32 0
  %417 = load i32, ptr %416, align 8, !tbaa !17
  %418 = icmp uge i32 %417, 1051
  br i1 %418, label %419, label %424

419:                                              ; preds = %402
  %420 = load ptr, ptr %12, align 8, !tbaa !5
  %421 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %420, i32 0, i32 0
  %422 = load i32, ptr %421, align 8, !tbaa !17
  %423 = icmp ult i32 %422, 1101
  br label %424

424:                                              ; preds = %419, %402
  %425 = phi i1 [ false, %402 ], [ %423, %419 ]
  %426 = zext i1 %425 to i64
  %427 = select i1 %425, i32 121, i32 122
  %428 = trunc i32 %427 to i8
  call void @libxsmm_x86_instruction_vec_move(ptr noundef %403, i32 noundef %406, i32 noundef -536406417, i32 noundef %409, i32 noundef 127, i32 noundef 0, i32 noundef %414, i8 noundef signext %428, i32 noundef 0, i32 noundef 2, i32 noundef 1, i32 noundef 0)
  br label %429

429:                                              ; preds = %424, %387
  br label %454

430:                                              ; preds = %372, %367
  %431 = load ptr, ptr %10, align 8, !tbaa !5
  %432 = load ptr, ptr %12, align 8, !tbaa !5
  %433 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %432, i32 0, i32 0
  %434 = load i32, ptr %433, align 8, !tbaa !17
  %435 = load ptr, ptr %10, align 8, !tbaa !5
  %436 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %435, i32 0, i32 6
  %437 = load i32, ptr %436, align 4, !tbaa !23
  %438 = icmp ult i32 %437, 1101
  br i1 %438, label %439, label %440

439:                                              ; preds = %430
  br label %444

440:                                              ; preds = %430
  %441 = load ptr, ptr %12, align 8, !tbaa !5
  %442 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %441, i32 0, i32 9
  %443 = load i32, ptr %442, align 4, !tbaa !21
  br label %444

444:                                              ; preds = %440, %439
  %445 = phi i32 [ 545725200, %439 ], [ %443, %440 ]
  %446 = load ptr, ptr %11, align 8, !tbaa !5
  %447 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %446, i32 0, i32 24
  %448 = load i32, ptr %447, align 4, !tbaa !11
  %449 = load i32, ptr %20, align 4, !tbaa !9
  %450 = load ptr, ptr %12, align 8, !tbaa !5
  %451 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %450, i32 0, i32 2
  %452 = load i32, ptr %451, align 8, !tbaa !19
  %453 = mul i32 %449, %452
  call void @libxsmm_x86_instruction_vec_move(ptr noundef %431, i32 noundef %434, i32 noundef %445, i32 noundef %448, i32 noundef 127, i32 noundef 0, i32 noundef %453, i8 noundef signext 120, i32 noundef 0, i32 noundef 0, i32 noundef 1, i32 noundef 0)
  br label %454

454:                                              ; preds = %444, %429
  %455 = load ptr, ptr %10, align 8, !tbaa !5
  %456 = load ptr, ptr %12, align 8, !tbaa !5
  %457 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %456, i32 0, i32 21
  %458 = load i8, ptr %457, align 4, !tbaa !22
  call void @libxsmm_generator_vcvthf8_to_f32_avx512_preppedstack(ptr noundef %455, i8 noundef signext %458, i32 noundef 0, i32 noundef 0, i32 noundef 1, i32 noundef 2, i32 noundef 6, i32 noundef 7)
  br label %546

459:                                              ; preds = %364
  %460 = load i32, ptr %13, align 4, !tbaa !9
  %461 = icmp eq i32 %460, 1
  br i1 %461, label %462, label %536

462:                                              ; preds = %459
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #3
  %463 = load ptr, ptr %12, align 8, !tbaa !5
  %464 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %463, i32 0, i32 11
  %465 = load i32, ptr %464, align 4, !tbaa !13
  store i32 %465, ptr %24, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #3
  %466 = load ptr, ptr %11, align 8, !tbaa !5
  %467 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %466, i32 0, i32 22
  %468 = load i32, ptr %467, align 4, !tbaa !18
  store i32 %468, ptr %25, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #3
  %469 = load ptr, ptr %12, align 8, !tbaa !5
  %470 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %469, i32 0, i32 0
  %471 = load i32, ptr %470, align 8, !tbaa !17
  %472 = icmp uge i32 %471, 1005
  br i1 %472, label %473, label %474

473:                                              ; preds = %462
  br label %476

474:                                              ; preds = %462
  %475 = load i32, ptr %18, align 4, !tbaa !9
  br label %476

476:                                              ; preds = %474, %473
  %477 = phi i32 [ 1, %473 ], [ %475, %474 ]
  store i32 %477, ptr %26, align 4, !tbaa !9
  %478 = load ptr, ptr %12, align 8, !tbaa !5
  %479 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %478, i32 0, i32 0
  %480 = load i32, ptr %479, align 8, !tbaa !17
  %481 = icmp uge i32 %480, 1005
  br i1 %481, label %482, label %507

482:                                              ; preds = %476
  %483 = load ptr, ptr %12, align 8, !tbaa !5
  %484 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %483, i32 0, i32 0
  %485 = load i32, ptr %484, align 8, !tbaa !17
  %486 = icmp ult i32 %485, 1051
  br i1 %486, label %487, label %507

487:                                              ; preds = %482
  %488 = load ptr, ptr %12, align 8, !tbaa !5
  %489 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %488, i32 0, i32 11
  %490 = load i32, ptr %489, align 4, !tbaa !13
  %491 = icmp ne i32 %490, 0
  br i1 %491, label %492, label %507

492:                                              ; preds = %487
  %493 = load i32, ptr %20, align 4, !tbaa !9
  %494 = load i32, ptr %16, align 4, !tbaa !9
  %495 = sub i32 %494, 1
  %496 = icmp eq i32 %493, %495
  br i1 %496, label %497, label %507

497:                                              ; preds = %492
  %498 = load ptr, ptr %10, align 8, !tbaa !5
  %499 = load ptr, ptr %12, align 8, !tbaa !5
  %500 = load i32, ptr %25, align 4, !tbaa !9
  call void @libxsmm_generator_gemm_getval_stack_var(ptr noundef %498, ptr noundef %499, i32 noundef 22, i32 noundef %500)
  %501 = load ptr, ptr %10, align 8, !tbaa !5
  %502 = load ptr, ptr %12, align 8, !tbaa !5
  %503 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %502, i32 0, i32 0
  %504 = load i32, ptr %503, align 8, !tbaa !17
  %505 = load i32, ptr %25, align 4, !tbaa !9
  %506 = load i32, ptr %24, align 4, !tbaa !9
  call void @libxsmm_x86_instruction_vec_move(ptr noundef %501, i32 noundef %504, i32 noundef 537138704, i32 noundef %505, i32 noundef 127, i32 noundef 0, i32 noundef 0, i8 noundef signext 121, i32 noundef %506, i32 noundef 0, i32 noundef 0, i32 noundef 0)
  br label %507

507:                                              ; preds = %497, %492, %487, %482, %476
  %508 = load ptr, ptr %10, align 8, !tbaa !5
  %509 = load ptr, ptr %12, align 8, !tbaa !5
  %510 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %509, i32 0, i32 9
  %511 = load i32, ptr %510, align 4, !tbaa !21
  %512 = load ptr, ptr %11, align 8, !tbaa !5
  %513 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %512, i32 0, i32 24
  %514 = load i32, ptr %513, align 4, !tbaa !11
  %515 = load i32, ptr %20, align 4, !tbaa !9
  %516 = load ptr, ptr %12, align 8, !tbaa !5
  %517 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %516, i32 0, i32 2
  %518 = load i32, ptr %517, align 8, !tbaa !19
  %519 = mul i32 %515, %518
  %520 = mul i32 %519, 4
  %521 = load ptr, ptr %12, align 8, !tbaa !5
  %522 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %521, i32 0, i32 21
  %523 = load i8, ptr %522, align 4, !tbaa !22
  %524 = load i32, ptr %20, align 4, !tbaa !9
  %525 = load i32, ptr %16, align 4, !tbaa !9
  %526 = sub i32 %525, 1
  %527 = icmp eq i32 %524, %526
  br i1 %527, label %528, label %532

528:                                              ; preds = %507
  %529 = load ptr, ptr %12, align 8, !tbaa !5
  %530 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %529, i32 0, i32 11
  %531 = load i32, ptr %530, align 4, !tbaa !13
  br label %533

532:                                              ; preds = %507
  br label %533

533:                                              ; preds = %532, %528
  %534 = phi i32 [ %531, %528 ], [ 0, %532 ]
  %535 = load i32, ptr %26, align 4, !tbaa !9
  call void @libxsmm_x86_instruction_unified_vec_move(ptr noundef %508, i32 noundef %511, i32 noundef %514, i32 noundef 127, i32 noundef 0, i32 noundef %520, i8 noundef signext %523, i32 noundef 0, i32 noundef %534, i32 noundef %535, i32 noundef 0)
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #3
  br label %545

536:                                              ; preds = %459
  %537 = load ptr, ptr %10, align 8, !tbaa !5
  %538 = load i32, ptr @libxsmm_ninit, align 4, !tbaa !9
  %539 = icmp ult i32 1, %538
  br i1 %539, label %540, label %542

540:                                              ; preds = %536
  %541 = load i32, ptr @libxsmm_verbosity, align 4, !tbaa !9
  br label %543

542:                                              ; preds = %536
  br label %543

543:                                              ; preds = %542, %540
  %544 = phi i32 [ %541, %540 ], [ 1, %542 ]
  call void @libxsmm_handle_error(ptr noundef %537, i32 noundef 90033, ptr noundef @__func__.libxsmm_generator_gemm_add_colbias_to_2D_block, ptr noundef @.str.1, i32 noundef 1133, i32 noundef %544)
  store i32 1, ptr %27, align 4
  br label %688

545:                                              ; preds = %533
  br label %546

546:                                              ; preds = %545, %454
  br label %547

547:                                              ; preds = %546, %359
  br label %548

548:                                              ; preds = %547, %268
  store i32 0, ptr %19, align 4, !tbaa !9
  br label %549

549:                                              ; preds = %668, %548
  %550 = load i32, ptr %19, align 4, !tbaa !9
  %551 = load i32, ptr %17, align 4, !tbaa !9
  %552 = icmp ult i32 %550, %551
  br i1 %552, label %553, label %671

553:                                              ; preds = %549
  %554 = load ptr, ptr %12, align 8, !tbaa !5
  %555 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %554, i32 0, i32 0
  %556 = load i32, ptr %555, align 8, !tbaa !17
  %557 = icmp ult i32 %556, 1005
  br i1 %557, label %558, label %570

558:                                              ; preds = %553
  %559 = load ptr, ptr %10, align 8, !tbaa !5
  %560 = load ptr, ptr %12, align 8, !tbaa !5
  %561 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %560, i32 0, i32 21
  %562 = load i8, ptr %561, align 4, !tbaa !22
  %563 = load i32, ptr %15, align 4, !tbaa !9
  %564 = load i32, ptr %20, align 4, !tbaa !9
  %565 = add i32 %563, %564
  %566 = load i32, ptr %16, align 4, !tbaa !9
  %567 = load i32, ptr %19, align 4, !tbaa !9
  %568 = mul i32 %566, %567
  %569 = add i32 %565, %568
  call void @libxsmm_x86_instruction_vec_compute_2reg(ptr noundef %559, i32 noundef -1610346408, i8 noundef signext %562, i32 noundef 0, i32 noundef %569)
  br label %667

570:                                              ; preds = %553
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #3
  store i32 805574232, ptr %28, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #3
  store i32 0, ptr %29, align 4, !tbaa !9
  %571 = load i32, ptr %13, align 4, !tbaa !9
  %572 = icmp eq i32 %571, 3
  br i1 %572, label %573, label %582

573:                                              ; preds = %570
  %574 = load i32, ptr %14, align 4, !tbaa !9
  %575 = icmp eq i32 %574, 3
  br i1 %575, label %576, label %582

576:                                              ; preds = %573
  %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 = icmp uge i32 %579, 1104
  br i1 %580, label %581, label %582

581:                                              ; preds = %576
  store i32 -251373992, ptr %28, align 4, !tbaa !9
  br label %582

582:                                              ; preds = %581, %576, %573, %570
  %583 = load i32, ptr %13, align 4, !tbaa !9
  %584 = icmp eq i32 %583, 3
  br i1 %584, label %585, label %612

585:                                              ; preds = %582
  %586 = load i32, ptr %14, align 4, !tbaa !9
  %587 = icmp eq i32 %586, 3
  br i1 %587, label %588, label %612

588:                                              ; preds = %585
  %589 = load ptr, ptr %12, align 8, !tbaa !5
  %590 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %589, i32 0, i32 0
  %591 = load i32, ptr %590, align 8, !tbaa !17
  %592 = icmp ult i32 %591, 1104
  br i1 %592, label %593, label %612

593:                                              ; preds = %588
  store i32 1, ptr %29, align 4, !tbaa !9
  %594 = load ptr, ptr %10, align 8, !tbaa !5
  %595 = load ptr, ptr %12, align 8, !tbaa !5
  %596 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %595, i32 0, i32 21
  %597 = load i8, ptr %596, align 4, !tbaa !22
  %598 = load i32, ptr %15, align 4, !tbaa !9
  %599 = load i32, ptr %20, align 4, !tbaa !9
  %600 = add i32 %598, %599
  %601 = load i32, ptr %16, align 4, !tbaa !9
  %602 = load i32, ptr %19, align 4, !tbaa !9
  %603 = mul i32 %601, %602
  %604 = add i32 %600, %603
  %605 = load i32, ptr %15, align 4, !tbaa !9
  %606 = load i32, ptr %20, align 4, !tbaa !9
  %607 = add i32 %605, %606
  %608 = load i32, ptr %16, align 4, !tbaa !9
  %609 = load i32, ptr %19, align 4, !tbaa !9
  %610 = mul i32 %608, %609
  %611 = add i32 %607, %610
  call void @libxsmm_x86_instruction_vec_compute_2reg(ptr noundef %594, i32 noundef 537208083, i8 noundef signext %597, i32 noundef %604, i32 noundef %611)
  br label %612

612:                                              ; preds = %593, %588, %585, %582
  %613 = load ptr, ptr %10, align 8, !tbaa !5
  %614 = load i32, ptr %28, align 4, !tbaa !9
  %615 = load ptr, ptr %12, align 8, !tbaa !5
  %616 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %615, i32 0, i32 21
  %617 = load i8, ptr %616, align 4, !tbaa !22
  %618 = load i32, ptr %15, align 4, !tbaa !9
  %619 = load i32, ptr %20, align 4, !tbaa !9
  %620 = add i32 %618, %619
  %621 = load i32, ptr %16, align 4, !tbaa !9
  %622 = load i32, ptr %19, align 4, !tbaa !9
  %623 = mul i32 %621, %622
  %624 = add i32 %620, %623
  %625 = load i32, ptr %15, align 4, !tbaa !9
  %626 = load i32, ptr %20, align 4, !tbaa !9
  %627 = add i32 %625, %626
  %628 = load i32, ptr %16, align 4, !tbaa !9
  %629 = load i32, ptr %19, align 4, !tbaa !9
  %630 = mul i32 %628, %629
  %631 = add i32 %627, %630
  call void @libxsmm_x86_instruction_vec_compute_3reg(ptr noundef %613, i32 noundef %614, i8 noundef signext %617, i32 noundef %624, i32 noundef 0, i32 noundef %631)
  %632 = load i32, ptr %29, align 4, !tbaa !9
  %633 = icmp ne i32 %632, 0
  br i1 %633, label %634, label %666

634:                                              ; preds = %612
  %635 = load ptr, ptr %10, align 8, !tbaa !5
  %636 = load ptr, ptr %12, align 8, !tbaa !5
  %637 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %636, i32 0, i32 21
  %638 = load i8, ptr %637, align 4, !tbaa !22
  %639 = load i32, ptr %15, align 4, !tbaa !9
  %640 = load i32, ptr %20, align 4, !tbaa !9
  %641 = add i32 %639, %640
  %642 = load i32, ptr %16, align 4, !tbaa !9
  %643 = load i32, ptr %19, align 4, !tbaa !9
  %644 = mul i32 %642, %643
  %645 = add i32 %641, %644
  %646 = load i32, ptr %15, align 4, !tbaa !9
  %647 = load i32, ptr %20, align 4, !tbaa !9
  %648 = add i32 %646, %647
  %649 = load i32, ptr %16, align 4, !tbaa !9
  %650 = load i32, ptr %19, align 4, !tbaa !9
  %651 = mul i32 %649, %650
  %652 = add i32 %648, %651
  %653 = load ptr, ptr %10, align 8, !tbaa !5
  %654 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %653, i32 0, i32 6
  %655 = load i32, ptr %654, align 4, !tbaa !23
  %656 = icmp ult i32 %655, 1101
  %657 = zext i1 %656 to i64
  %658 = select i1 %656, i32 0, i32 1
  %659 = load ptr, ptr %10, align 8, !tbaa !5
  %660 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %659, i32 0, i32 6
  %661 = load i32, ptr %660, align 4, !tbaa !23
  %662 = icmp ult i32 %661, 1101
  %663 = zext i1 %662 to i64
  %664 = select i1 %662, i32 0, i32 1
  %665 = trunc i32 %664 to i8
  call void @libxsmm_x86_instruction_vec_compute_2reg_mask_sae_imm8(ptr noundef %635, i32 noundef 671954205, i8 noundef signext %638, i32 noundef %645, i32 noundef %652, i32 noundef 0, i32 noundef %658, i8 noundef zeroext %665, i32 noundef 0)
  br label %666

666:                                              ; preds = %634, %612
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #3
  br label %667

667:                                              ; preds = %666, %558
  br label %668

668:                                              ; preds = %667
  %669 = load i32, ptr %19, align 4, !tbaa !9
  %670 = add i32 %669, 1
  store i32 %670, ptr %19, align 4, !tbaa !9
  br label %549, !llvm.loop !25

671:                                              ; preds = %549
  br label %672

672:                                              ; preds = %671
  %673 = load i32, ptr %20, align 4, !tbaa !9
  %674 = add i32 %673, 1
  store i32 %674, ptr %20, align 4, !tbaa !9
  br label %47, !llvm.loop !27

675:                                              ; preds = %47
  %676 = load i32, ptr %13, align 4, !tbaa !9
  %677 = icmp eq i32 %676, 5
  br i1 %677, label %678, label %683

678:                                              ; preds = %675
  %679 = load ptr, ptr %10, align 8, !tbaa !5
  %680 = load ptr, ptr %11, align 8, !tbaa !5
  %681 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %680, i32 0, i32 24
  %682 = load i32, ptr %681, align 4, !tbaa !11
  call void @libxsmm_generator_vcvt_hf8_tofrom_f32_avx512_clean_stack(ptr noundef %679, i32 noundef %682)
  br label %683

683:                                              ; preds = %678, %675
  %684 = load ptr, ptr %10, align 8, !tbaa !5
  %685 = load ptr, ptr %11, align 8, !tbaa !5
  %686 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %685, i32 0, i32 24
  %687 = load i32, ptr %686, align 4, !tbaa !11
  call void @libxsmm_x86_instruction_pop_reg(ptr noundef %684, i32 noundef %687)
  store i32 0, ptr %27, align 4
  br label %688

688:                                              ; preds = %683, %543
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #3
  %689 = load i32, ptr %27, align 4
  switch i32 %689, label %691 [
    i32 0, label %690
    i32 1, label %690
  ]

690:                                              ; preds = %688, %688
  ret void

691:                                              ; preds = %688
  unreachable
}

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) #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_add_colbias_to_2D_block = external hidden unnamed_addr constant [47 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_compute_3reg(ptr noundef, i32 noundef, i8 noundef signext, 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 #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

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

; Function Attrs: nounwind uwtable
define dso_local void @libxsmm_generator_gemm_add_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)
  %.not271 = icmp eq i32 %6, 0
  br i1 %.not271, label %._crit_edge270, label %.lr.ph269

.lr.ph269:                                        ; preds = %15
  %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 44
  %23 = add i32 %6, -1
  %24 = getelementptr inbounds i8, ptr %1, i64 88
  %25 = getelementptr inbounds i8, ptr %2, i64 36
  %26 = getelementptr inbounds i8, ptr %2, i64 8
  %27 = getelementptr inbounds i8, ptr %2, i64 84
  %28 = getelementptr inbounds i8, ptr %0, i64 28
  %29 = icmp eq i32 %4, 3
  %30 = select i1 %17, i32 2, i32 1
  %.not272 = icmp eq i32 %7, 0
  %or.cond7 = and i1 %18, %29
  %31 = shl i32 %23, 1
  %32 = shl i32 %23, 1
  %33 = shl i32 %23, 1
  %34 = shl i32 %23, 1
  %35 = shl i32 %23, 1
  br label %36

36:                                               ; preds = %.lr.ph269, %._crit_edge
  %.0218266 = phi i32 [ 0, %.lr.ph269 ], [ %206, %._crit_edge ]
  br i1 %or.cond, label %37, label %87

37:                                               ; preds = %36
  %38 = load i32, ptr %22, align 4, !tbaa !10
  %.not237 = icmp ne i32 %38, 0
  %39 = icmp eq i32 %.0218266, %23
  %or.cond242 = and i1 %39, %.not237
  %40 = load i32, ptr %2, align 8, !tbaa !15
  %41 = icmp ult i32 %40, 1005
  br i1 %or.cond242, label %42, label %64

42:                                               ; preds = %37
  br i1 %41, label %43, label %48

43:                                               ; preds = %42
  %44 = load i32, ptr %24, align 4, !tbaa !16
  %45 = load i32, ptr %10, align 4, !tbaa !5
  %46 = load i32, ptr %26, align 8, !tbaa !17
  %47 = mul i32 %35, %46
  tail call void @libxsmm_generator_maskedload_16bit_sse(ptr noundef %0, i32 noundef %44, i32 noundef 0, i32 noundef %45, i32 noundef 127, i32 noundef 0, i32 noundef %47, i32 noundef 0, i32 noundef %8) #2
  br label %79

48:                                               ; preds = %42
  %.not239 = icmp ne i32 %40, 1005
  %49 = icmp ult i32 %40, 1051
  %or.cond243 = and i1 %.not239, %49
  br i1 %or.cond243, label %50, label %55

50:                                               ; preds = %48
  %51 = load i32, ptr %24, align 4, !tbaa !16
  %52 = load i32, ptr %10, align 4, !tbaa !5
  %53 = load i32, ptr %26, align 8, !tbaa !17
  %54 = mul i32 %34, %53
  tail call void @libxsmm_generator_maskedload_16bit_avx2(ptr noundef %0, i32 noundef %51, i32 noundef %52, i32 noundef 127, i32 noundef 0, i32 noundef %54, i32 noundef 0, i32 noundef %8) #2
  br label %79

55:                                               ; preds = %48
  %56 = add i32 %40, -1051
  %spec.select = icmp ult i32 %56, 50
  %57 = select i1 %spec.select, i8 120, i8 121
  %58 = icmp ugt i32 %40, 1103
  %59 = and i1 %29, %58
  %60 = and i1 %18, %59
  %.0219 = select i1 %60, i8 122, i8 %57
  %61 = load i32, ptr %10, align 4, !tbaa !5
  %62 = load i32, ptr %26, align 8, !tbaa !17
  %63 = mul i32 %33, %62
  tail call void @libxsmm_x86_instruction_vec_move(ptr noundef %0, i32 noundef %40, i32 noundef -528017809, i32 noundef %61, i32 noundef 127, i32 noundef 0, i32 noundef %63, i8 noundef signext %.0219, i32 noundef 0, i32 noundef %30, i32 noundef 1, i32 noundef 0) #2
  br label %79

64:                                               ; preds = %37
  br i1 %41, label %73, label %65

65:                                               ; preds = %64
  %.not238 = icmp ne i32 %40, 1005
  %66 = icmp ult i32 %40, 1051
  %or.cond245 = and i1 %.not238, %66
  %67 = add i32 %40, -1051
  %spec.select246 = icmp ult i32 %67, 50
  %68 = or i1 %or.cond245, %spec.select246
  %.ph = select i1 %68, i8 120, i8 121
  %69 = icmp ugt i32 %40, 1103
  %70 = and i1 %29, %69
  %71 = and i1 %18, %70
  %.0220279 = select i1 %71, i8 122, i8 %.ph
  %72 = load i32, ptr %25, align 4, !tbaa !18
  br label %73

73:                                               ; preds = %64, %65
  %.0220281 = phi i8 [ %.0220279, %65 ], [ 120, %64 ]
  %74 = phi i32 [ %72, %65 ], [ -1610149872, %64 ]
  %75 = load i32, ptr %10, align 4, !tbaa !5
  %76 = load i32, ptr %26, align 8, !tbaa !17
  %77 = shl i32 %.0218266, 1
  %78 = mul i32 %77, %76
  tail call void @libxsmm_x86_instruction_vec_move(ptr noundef %0, i32 noundef %40, i32 noundef %74, i32 noundef %75, i32 noundef 127, i32 noundef 0, i32 noundef %78, i8 noundef signext %.0220281, i32 noundef 0, i32 noundef 0, i32 noundef 1, i32 noundef 0) #2
  br label %79

79:                                               ; preds = %43, %55, %50, %73
  br i1 %17, label %80, label %82

80:                                               ; preds = %79
  %81 = load i8, ptr %27, align 4, !tbaa !19
  tail call void @libxsmm_generator_cvtbf16ps_sse_avx2_avx512(ptr noundef %0, i8 noundef signext %81, i32 noundef 0, i32 noundef 0) #2
  br label %.fold.split

82:                                               ; preds = %79
  switch i32 %4, label %.fold.split [
    i32 1, label %.critedge
    i32 3, label %83
  ]

83:                                               ; preds = %82
  %84 = load i32, ptr %2, align 8, !tbaa !15
  %85 = icmp ult i32 %84, 1104
  br i1 %85, label %.critedge, label %.fold.split

.critedge:                                        ; preds = %82, %83
  %86 = load i8, ptr %27, align 4, !tbaa !19
  tail call void @libxsmm_x86_instruction_vec_compute_2reg(ptr noundef %0, i32 noundef 537208083, i8 noundef signext %86, i32 noundef 0, i32 noundef 0) #2
  br label %.fold.split

87:                                               ; preds = %36
  br i1 %20, label %88, label %117

88:                                               ; preds = %87
  %89 = load i32, ptr %22, align 4, !tbaa !10
  %.not236 = icmp ne i32 %89, 0
  %90 = icmp eq i32 %.0218266, %23
  %or.cond251 = and i1 %90, %.not236
  %91 = load i32, ptr %2, align 8, !tbaa !15
  br i1 %or.cond251, label %92, label %105

92:                                               ; preds = %88
  %93 = add i32 %91, -1006
  %or.cond252 = icmp ult i32 %93, 45
  br i1 %or.cond252, label %94, label %99

94:                                               ; preds = %92
  %95 = load i32, ptr %24, align 4, !tbaa !16
  %96 = load i32, ptr %10, align 4, !tbaa !5
  %97 = load i32, ptr %26, align 8, !tbaa !17
  %98 = mul i32 %32, %97
  tail call void @libxsmm_generator_maskedload_16bit_avx2(ptr noundef %0, i32 noundef %95, i32 noundef %96, i32 noundef 127, i32 noundef 0, i32 noundef %98, i32 noundef 0, i32 noundef %8) #2
  br label %115

99:                                               ; preds = %92
  %100 = load i32, ptr %10, align 4, !tbaa !5
  %101 = load i32, ptr %26, align 8, !tbaa !17
  %102 = mul i32 %101, %23
  %103 = add i32 %91, -1051
  %spec.select253 = icmp ult i32 %103, 50
  %104 = select i1 %spec.select253, i8 121, i8 122
  tail call void @libxsmm_x86_instruction_vec_move(ptr noundef %0, i32 noundef %91, i32 noundef -536406417, i32 noundef %100, i32 noundef 127, i32 noundef 0, i32 noundef %102, i8 noundef signext %104, i32 noundef 0, i32 noundef 2, i32 noundef 1, i32 noundef 0) #2
  br label %115

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

108:                                              ; preds = %105
  %109 = load i32, ptr %25, align 4, !tbaa !18
  br label %110

110:                                              ; preds = %105, %108
  %111 = phi i32 [ %109, %108 ], [ 545725200, %105 ]
  %112 = load i32, ptr %10, align 4, !tbaa !5
  %113 = load i32, ptr %26, align 8, !tbaa !17
  %114 = mul i32 %113, %.0218266
  tail call void @libxsmm_x86_instruction_vec_move(ptr noundef nonnull %0, i32 noundef %91, i32 noundef %111, i32 noundef %112, i32 noundef 127, i32 noundef 0, i32 noundef %114, i8 noundef signext 120, i32 noundef 0, i32 noundef 0, i32 noundef 1, i32 noundef 0) #2
  br label %115

115:                                              ; preds = %94, %99, %110
  %116 = load i8, ptr %27, align 4, !tbaa !19
  tail call void @libxsmm_generator_cvtbf8ps_avx512(ptr noundef %0, i8 noundef signext %116, i32 noundef 0, i32 noundef 0) #2
  br label %.fold.split

117:                                              ; preds = %87
  br i1 %12, label %118, label %147

118:                                              ; preds = %117
  %119 = load i32, ptr %22, align 4, !tbaa !10
  %.not235 = icmp ne i32 %119, 0
  %120 = icmp eq i32 %.0218266, %23
  %or.cond255 = and i1 %120, %.not235
  %121 = load i32, ptr %2, align 8, !tbaa !15
  br i1 %or.cond255, label %122, label %135

122:                                              ; preds = %118
  %123 = add i32 %121, -1006
  %or.cond256 = icmp ult i32 %123, 45
  br i1 %or.cond256, label %124, label %129

124:                                              ; preds = %122
  %125 = load i32, ptr %24, align 4, !tbaa !16
  %126 = load i32, ptr %10, align 4, !tbaa !5
  %127 = load i32, ptr %26, align 8, !tbaa !17
  %128 = mul i32 %31, %127
  tail call void @libxsmm_generator_maskedload_16bit_avx2(ptr noundef %0, i32 noundef %125, i32 noundef %126, i32 noundef 127, i32 noundef 0, i32 noundef %128, i32 noundef 0, i32 noundef %8) #2
  br label %145

129:                                              ; preds = %122
  %130 = load i32, ptr %10, align 4, !tbaa !5
  %131 = load i32, ptr %26, align 8, !tbaa !17
  %132 = mul i32 %131, %23
  %133 = add i32 %121, -1051
  %spec.select257 = icmp ult i32 %133, 50
  %134 = select i1 %spec.select257, i8 121, i8 122
  tail call void @libxsmm_x86_instruction_vec_move(ptr noundef %0, i32 noundef %121, i32 noundef -536406417, i32 noundef %130, i32 noundef 127, i32 noundef 0, i32 noundef %132, i8 noundef signext %134, i32 noundef 0, i32 noundef 2, i32 noundef 1, i32 noundef 0) #2
  br label %145

135:                                              ; preds = %118
  %136 = load i32, ptr %28, align 4, !tbaa !20
  %137 = icmp ult i32 %136, 1101
  br i1 %137, label %140, label %138

138:                                              ; preds = %135
  %139 = load i32, ptr %25, align 4, !tbaa !18
  br label %140

140:                                              ; preds = %135, %138
  %141 = phi i32 [ %139, %138 ], [ 545725200, %135 ]
  %142 = load i32, ptr %10, align 4, !tbaa !5
  %143 = load i32, ptr %26, align 8, !tbaa !17
  %144 = mul i32 %143, %.0218266
  tail call void @libxsmm_x86_instruction_vec_move(ptr noundef nonnull %0, i32 noundef %121, i32 noundef %141, i32 noundef %142, i32 noundef 127, i32 noundef 0, i32 noundef %144, i8 noundef signext 120, i32 noundef 0, i32 noundef 0, i32 noundef 1, i32 noundef 0) #2
  br label %145

145:                                              ; preds = %124, %129, %140
  %146 = load i8, ptr %27, align 4, !tbaa !19
  tail call void @libxsmm_generator_vcvthf8_to_f32_avx512_preppedstack(ptr noundef %0, i8 noundef signext %146, i32 noundef 0, i32 noundef 0, i32 noundef 1, i32 noundef 2, i32 noundef 6, i32 noundef 7) #2
  br label %.fold.split

147:                                              ; preds = %117
  br i1 %21, label %148, label %169

148:                                              ; preds = %147
  %149 = load i32, ptr %22, align 4, !tbaa !10
  %150 = load i32, ptr %2, align 8, !tbaa !15
  %151 = icmp ugt i32 %150, 1004
  %152 = select i1 %151, i32 1, i32 %8
  %153 = add i32 %150, -1005
  %or.cond258 = icmp ult i32 %153, 46
  %.not = icmp ne i32 %149, 0
  %or.cond259.not264 = select i1 %or.cond258, i1 %.not, i1 false
  %154 = icmp eq i32 %.0218266, %23
  %or.cond261 = and i1 %154, %or.cond259.not264
  br i1 %or.cond261, label %155, label %158

155:                                              ; preds = %148
  %156 = load i32, ptr %24, align 4, !tbaa !16
  tail call void @libxsmm_generator_gemm_getval_stack_var(ptr noundef %0, ptr noundef nonnull %2, i32 noundef 22, i32 noundef %156)
  %157 = load i32, ptr %2, align 8, !tbaa !15
  tail call void @libxsmm_x86_instruction_vec_move(ptr noundef %0, i32 noundef %157, i32 noundef 537138704, i32 noundef %156, i32 noundef 127, i32 noundef 0, i32 noundef 0, i8 noundef signext 121, i32 noundef %149, i32 noundef 0, i32 noundef 0, i32 noundef 0) #2
  br label %158

158:                                              ; preds = %155, %148
  %159 = load i32, ptr %25, align 4, !tbaa !18
  %160 = load i32, ptr %10, align 4, !tbaa !5
  %161 = load i32, ptr %26, align 8, !tbaa !17
  %162 = shl i32 %.0218266, 2
  %163 = mul i32 %162, %161
  %164 = load i8, ptr %27, align 4, !tbaa !19
  br i1 %154, label %165, label %167

165:                                              ; preds = %158
  %166 = load i32, ptr %22, align 4, !tbaa !10
  br label %167

167:                                              ; preds = %158, %165
  %168 = phi i32 [ %166, %165 ], [ 0, %158 ]
  tail call void @libxsmm_x86_instruction_unified_vec_move(ptr noundef %0, i32 noundef %159, i32 noundef %160, i32 noundef 127, i32 noundef 0, i32 noundef %163, i8 noundef signext %164, i32 noundef 0, i32 noundef %168, i32 noundef %152, i32 noundef 0) #2
  br label %.fold.split

169:                                              ; preds = %147
  %170 = load i32, ptr @libxsmm_ninit, align 4, !tbaa !22
  %171 = icmp ugt i32 %170, 1
  %172 = load i32, ptr @libxsmm_verbosity, align 4
  %173 = select i1 %171, i32 %172, i32 1
  tail call void @libxsmm_handle_error(ptr noundef %0, i32 noundef 90033, ptr noundef nonnull @__func__.libxsmm_generator_gemm_add_colbias_to_2D_block, ptr noundef nonnull @.str.1, i32 noundef 1133, i32 noundef %173) #2
  br label %211

.fold.split:                                      ; preds = %80, %82, %83, %.critedge, %115, %167, %145
  br i1 %.not272, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %.fold.split
  %174 = add i32 %.0218266, %5
  br i1 %or.cond7, label %.lr.ph.split, label %.lr.ph.split.us

.lr.ph.split.us:                                  ; preds = %.lr.ph, %182
  %.0217265.us = phi i32 [ %183, %182 ], [ 0, %.lr.ph ]
  %175 = load i32, ptr %2, align 8, !tbaa !15
  %176 = icmp ult i32 %175, 1005
  %177 = load i8, ptr %27, align 4, !tbaa !19
  %178 = mul i32 %.0217265.us, %6
  %179 = add i32 %174, %178
  br i1 %176, label %181, label %180

180:                                              ; preds = %.lr.ph.split.us
  tail call void @libxsmm_x86_instruction_vec_compute_3reg(ptr noundef %0, i32 noundef 805574232, i8 noundef signext %177, i32 noundef %179, i32 noundef 0, i32 noundef %179) #2
  br label %182

181:                                              ; preds = %.lr.ph.split.us
  tail call void @libxsmm_x86_instruction_vec_compute_2reg(ptr noundef %0, i32 noundef -1610346408, i8 noundef signext %177, i32 noundef 0, i32 noundef %179) #2
  br label %182

182:                                              ; preds = %180, %181
  %183 = add nuw i32 %.0217265.us, 1
  %exitcond.not = icmp eq i32 %183, %7
  br i1 %exitcond.not, label %._crit_edge, label %.lr.ph.split.us, !llvm.loop !23

.lr.ph.split:                                     ; preds = %.lr.ph, %204
  %.0217265 = phi i32 [ %205, %204 ], [ 0, %.lr.ph ]
  %184 = load i32, ptr %2, align 8, !tbaa !15
  %185 = icmp ult i32 %184, 1005
  br i1 %185, label %186, label %190

186:                                              ; preds = %.lr.ph.split
  %187 = load i8, ptr %27, align 4, !tbaa !19
  %188 = mul i32 %.0217265, %6
  %189 = add i32 %174, %188
  tail call void @libxsmm_x86_instruction_vec_compute_2reg(ptr noundef %0, i32 noundef -1610346408, i8 noundef signext %187, i32 noundef 0, i32 noundef %189) #2
  br label %204

190:                                              ; preds = %.lr.ph.split
  %191 = icmp ult i32 %184, 1104
  br i1 %191, label %194, label %192

192:                                              ; preds = %190
  %.pre = mul i32 %.0217265, %6
  %.pre277 = add i32 %174, %.pre
  %193 = load i8, ptr %27, align 4, !tbaa !19
  tail call void @libxsmm_x86_instruction_vec_compute_3reg(ptr noundef %0, i32 noundef -251373992, i8 noundef signext %193, i32 noundef %.pre277, i32 noundef 0, i32 noundef %.pre277) #2
  br label %204

194:                                              ; preds = %190
  %195 = load i8, ptr %27, align 4, !tbaa !19
  %196 = mul i32 %.0217265, %6
  %197 = add i32 %174, %196
  tail call void @libxsmm_x86_instruction_vec_compute_2reg(ptr noundef %0, i32 noundef 537208083, i8 noundef signext %195, i32 noundef %197, i32 noundef %197) #2
  %198 = load i8, ptr %27, align 4, !tbaa !19
  tail call void @libxsmm_x86_instruction_vec_compute_3reg(ptr noundef %0, i32 noundef 805574232, i8 noundef signext %198, i32 noundef %197, i32 noundef 0, i32 noundef %197) #2
  %199 = load i8, ptr %27, align 4, !tbaa !19
  %200 = load i32, ptr %28, align 4, !tbaa !20
  %201 = icmp ugt i32 %200, 1100
  %202 = zext i1 %201 to i32
  %203 = zext i1 %201 to i8
  tail call void @libxsmm_x86_instruction_vec_compute_2reg_mask_sae_imm8(ptr noundef %0, i32 noundef 671954205, i8 noundef signext %199, i32 noundef %197, i32 noundef %197, i32 noundef 0, i32 noundef %202, i8 noundef zeroext %203, i32 noundef 0) #2
  br label %204

204:                                              ; preds = %192, %194, %186
  %205 = add nuw i32 %.0217265, 1
  %exitcond274.not = icmp eq i32 %205, %7
  br i1 %exitcond274.not, label %._crit_edge, label %.lr.ph.split, !llvm.loop !23

._crit_edge:                                      ; preds = %182, %204, %.fold.split
  %206 = add nuw i32 %.0218266, 1
  %exitcond275.not = icmp eq i32 %206, %6
  br i1 %exitcond275.not, label %._crit_edge270, label %36, !llvm.loop !25

._crit_edge270:                                   ; preds = %._crit_edge, %15
  br i1 %12, label %207, label %209

207:                                              ; preds = %._crit_edge270
  %208 = 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 %208) #2
  br label %209

209:                                              ; preds = %207, %._crit_edge270
  %210 = load i32, ptr %10, align 4, !tbaa !5
  tail call void @libxsmm_x86_instruction_pop_reg(ptr noundef %0, i32 noundef %210) #2
  br label %211

211:                                              ; preds = %209, %169
  ret void
}

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 #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 44}
!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, !7, i64 0}
!16 = !{!6, !7, i64 88}
!17 = !{!11, !7, i64 8}
!18 = !{!11, !7, i64 36}
!19 = !{!11, !8, i64 84}
!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 = !{!7, !7, i64 0}
!23 = distinct !{!23, !24}
!24 = !{!"llvm.loop.mustprogress"}
!25 = distinct !{!25, !24}


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