; 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_micro_kernel_config = type { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i8, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, [4 x i32], [4 x i32], [4 x i32], [4 x i32], [4 x i32], [4 x i32], i32, [2 x %struct.libxsmm_blocking_info_t], %struct.libxsmm_tile_config, i32, i32, i32, i32, i32, i32, i32, i32, ptr, i32, i32, i32, i32, ptr, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 }
%struct.libxsmm_blocking_info_t = type { i32, [4 x i32], i32, i32 }
%struct.libxsmm_tile_config = type { i8, i16, i8, i16, i8, i16, i8, i16, i8, i16, i8, i16, i8, i16, i8, i16, i8 }
%struct.libxsmm_gemm_descriptor = type <{ i32, i32, i32, i32, i32, i32, i32, i8, [3 x i8], i8, i64, i64, i8, i32, i32, i32, i16, i16, i8, i8, i8, i8, i16, i16, i16, i16, i16, i16, i32, i32, i32, i8 }>
%struct.libxsmm_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_generated_code = type { ptr, i32, i32, i32, i32, i32, i32 }

; Function Attrs: nounwind uwtable
declare dso_local i32 @libxsmm_x86_is_Amxfp4_Bi8_gemm(ptr noundef) #0

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

declare i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef) #2

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

; Function Attrs: nounwind uwtable
declare dso_local i32 @libxsmm_x86_is_Amxfp4_Bfp32_gemm(ptr noundef) #0

; Function Attrs: nounwind uwtable
declare dso_local i32 @libxsmm_x86_is_Amxfp4_Bbf16_gemm(ptr noundef) #0

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

declare i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef) #2

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

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_2reg_imm8(ptr noundef, i32 noundef, i8 noundef signext, i32 noundef, 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

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

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

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

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

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

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

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

declare void @libxsmm_generator_vcvt_hf8_tofrom_f32_avx512_prep_stack(ptr 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

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

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #3

declare i32 @LIBXSMM_GEMM_GETENUM_COMP_PREC(ptr noundef) #2

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

100:                                              ; preds = %6
  %101 = load i32, ptr %11, align 4, !tbaa !9
  %102 = load ptr, ptr %9, align 8, !tbaa !5
  %103 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %102, i32 0, i32 2
  %104 = load i32, ptr %103, align 8, !tbaa !11
  %105 = udiv i32 %101, %104
  br label %113

106:                                              ; preds = %6
  %107 = load i32, ptr %11, align 4, !tbaa !9
  %108 = load ptr, ptr %9, align 8, !tbaa !5
  %109 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %108, i32 0, i32 2
  %110 = load i32, ptr %109, align 8, !tbaa !11
  %111 = udiv i32 %107, %110
  %112 = add i32 %111, 1
  br label %113

113:                                              ; preds = %106, %100
  %114 = phi i32 [ %105, %100 ], [ %112, %106 ]
  store i32 %114, ptr %16, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #4
  %115 = load ptr, ptr %9, align 8, !tbaa !5
  %116 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %115, i32 0, i32 1
  %117 = load i32, ptr %116, align 4, !tbaa !15
  %118 = load i32, ptr %12, align 4, !tbaa !9
  %119 = load i32, ptr %16, align 4, !tbaa !9
  %120 = mul i32 %118, %119
  %121 = sub i32 %117, %120
  store i32 %121, ptr %17, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #4
  %122 = load ptr, ptr %10, align 8, !tbaa !5
  %123 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %122, i32 0, i32 6
  %124 = load i32, ptr %123, align 1, !tbaa !16
  %125 = and i32 48, %124
  %126 = icmp eq i32 48, %125
  br i1 %126, label %127, label %131

127:                                              ; preds = %113
  %128 = load ptr, ptr %9, align 8, !tbaa !5
  %129 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %128, i32 0, i32 10
  %130 = load i32, ptr %129, align 8, !tbaa !19
  br label %135

131:                                              ; preds = %113
  %132 = load ptr, ptr %9, align 8, !tbaa !5
  %133 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %132, i32 0, i32 9
  %134 = load i32, ptr %133, align 4, !tbaa !20
  br label %135

135:                                              ; preds = %131, %127
  %136 = phi i32 [ %130, %127 ], [ %134, %131 ]
  store i32 %136, ptr %18, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #4
  store i32 0, ptr %19, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #4
  store i32 0, ptr %20, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 688, ptr %21) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #4
  store ptr %21, ptr %22, align 8, !tbaa !5
  %137 = load ptr, ptr %22, align 8, !tbaa !5
  %138 = load ptr, ptr %9, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %137, ptr align 8 %138, i64 688, i1 false)
  %139 = load ptr, ptr %9, align 8, !tbaa !5
  %140 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %139, i32 0, i32 0
  %141 = load i32, ptr %140, align 8, !tbaa !21
  %142 = icmp ult i32 %141, 1005
  br i1 %142, label %173, label %143

143:                                              ; preds = %135
  %144 = load ptr, ptr %9, align 8, !tbaa !5
  %145 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %144, i32 0, i32 0
  %146 = load i32, ptr %145, align 8, !tbaa !21
  %147 = icmp uge i32 %146, 1006
  br i1 %147, label %148, label %153

148:                                              ; preds = %143
  %149 = load ptr, ptr %9, align 8, !tbaa !5
  %150 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %149, i32 0, i32 0
  %151 = load i32, ptr %150, align 8, !tbaa !21
  %152 = icmp ult i32 %151, 1051
  br i1 %152, label %173, label %153

153:                                              ; preds = %148, %143
  %154 = load ptr, ptr %9, align 8, !tbaa !5
  %155 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %154, i32 0, i32 0
  %156 = load i32, ptr %155, align 8, !tbaa !21
  %157 = icmp eq i32 %156, 1101
  br i1 %157, label %173, label %158

158:                                              ; preds = %153
  %159 = load ptr, ptr %9, align 8, !tbaa !5
  %160 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %159, i32 0, i32 0
  %161 = load i32, ptr %160, align 8, !tbaa !21
  %162 = icmp eq i32 %161, 1102
  br i1 %162, label %173, label %163

163:                                              ; preds = %158
  %164 = load ptr, ptr %9, align 8, !tbaa !5
  %165 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %164, i32 0, i32 0
  %166 = load i32, ptr %165, align 8, !tbaa !21
  %167 = icmp eq i32 %166, 1052
  br i1 %167, label %173, label %168

168:                                              ; preds = %163
  %169 = load ptr, ptr %9, align 8, !tbaa !5
  %170 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %169, i32 0, i32 0
  %171 = load i32, ptr %170, align 8, !tbaa !21
  %172 = icmp eq i32 %171, 1051
  br i1 %172, label %173, label %783

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

179:                                              ; preds = %173
  %180 = load ptr, ptr %10, align 8, !tbaa !5
  %181 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %180, i32 0, i32 8
  %182 = getelementptr inbounds [3 x i8], ptr %181, i64 0, i64 0
  %183 = call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef %182)
  %184 = icmp eq i32 2, %183
  br i1 %184, label %185, label %783

185:                                              ; preds = %179
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #4
  %186 = load ptr, ptr %8, align 8, !tbaa !5
  %187 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %186, i32 0, i32 24
  %188 = load i32, ptr %187, align 4, !tbaa !22
  store i32 %188, ptr %23, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #4
  %189 = load ptr, ptr %8, align 8, !tbaa !5
  %190 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %189, i32 0, i32 24
  %191 = load i32, ptr %190, align 4, !tbaa !22
  store i32 %191, ptr %24, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #4
  %192 = load ptr, ptr %8, align 8, !tbaa !5
  %193 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %192, i32 0, i32 23
  %194 = load i32, ptr %193, align 4, !tbaa !24
  store i32 %194, ptr %25, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #4
  store i32 1, ptr %26, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #4
  store i32 0, ptr %27, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #4
  %195 = load ptr, ptr %8, align 8, !tbaa !5
  %196 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %195, i32 0, i32 22
  %197 = load i32, ptr %196, align 4, !tbaa !25
  store i32 %197, ptr %28, align 4, !tbaa !9
  %198 = load ptr, ptr %9, align 8, !tbaa !5
  %199 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %198, i32 0, i32 31
  %200 = load i32, ptr %199, align 4, !tbaa !26
  %201 = icmp eq i32 %200, 1
  br i1 %201, label %207, label %202

202:                                              ; preds = %185
  %203 = load ptr, ptr %9, align 8, !tbaa !5
  %204 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %203, i32 0, i32 30
  %205 = load i32, ptr %204, align 8, !tbaa !27
  %206 = icmp eq i32 %205, 1
  br i1 %206, label %207, label %215

207:                                              ; preds = %202, %185
  %208 = load ptr, ptr %7, align 8, !tbaa !5
  %209 = load ptr, ptr %9, align 8, !tbaa !5
  %210 = load ptr, ptr %9, align 8, !tbaa !5
  %211 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %210, i32 0, i32 30
  %212 = load i32, ptr %211, align 8, !tbaa !27
  %213 = load i32, ptr %23, align 4, !tbaa !9
  %214 = load i32, ptr %25, align 4, !tbaa !9
  call void @libxsmm_generator_gemm_prepare_relu_fusion(ptr noundef %208, ptr noundef %209, i32 noundef 0, i32 noundef %212, i32 noundef %213, i32 noundef 127, i32 noundef %214)
  br label %229

215:                                              ; preds = %202
  %216 = load ptr, ptr %9, align 8, !tbaa !5
  %217 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %216, i32 0, i32 33
  %218 = load i32, ptr %217, align 4, !tbaa !28
  %219 = icmp eq i32 %218, 1
  br i1 %219, label %220, label %228

220:                                              ; preds = %215
  %221 = load ptr, ptr %7, align 8, !tbaa !5
  %222 = load ptr, ptr %22, align 8, !tbaa !5
  %223 = load i32, ptr %17, align 4, !tbaa !9
  %224 = load i32, ptr %16, align 4, !tbaa !9
  %225 = load i32, ptr %12, align 4, !tbaa !9
  %226 = load i32, ptr %24, align 4, !tbaa !9
  %227 = load i32, ptr %25, align 4, !tbaa !9
  call void @libxsmm_generator_gemm_dump_2D_block_and_prepare_sigmoid_fusion(ptr noundef %221, ptr noundef %222, i32 noundef %223, i32 noundef %224, i32 noundef %225, i32 noundef %226, i32 noundef %227)
  br label %228

228:                                              ; preds = %220, %215
  br label %229

229:                                              ; preds = %228, %207
  store i32 0, ptr %19, align 4, !tbaa !9
  br label %230

230:                                              ; preds = %388, %229
  %231 = load i32, ptr %19, align 4, !tbaa !9
  %232 = load i32, ptr %12, align 4, !tbaa !9
  %233 = icmp ult i32 %231, %232
  br i1 %233, label %234, label %391

234:                                              ; preds = %230
  store i32 0, ptr %20, align 4, !tbaa !9
  br label %235

235:                                              ; preds = %384, %234
  %236 = load i32, ptr %20, align 4, !tbaa !9
  %237 = load i32, ptr %16, align 4, !tbaa !9
  %238 = icmp ult i32 %236, %237
  br i1 %238, label %239, label %387

239:                                              ; preds = %235
  %240 = load ptr, ptr %9, align 8, !tbaa !5
  %241 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %240, i32 0, i32 31
  %242 = load i32, ptr %241, align 4, !tbaa !26
  %243 = icmp eq i32 %242, 1
  br i1 %243, label %249, label %244

244:                                              ; preds = %239
  %245 = load ptr, ptr %9, align 8, !tbaa !5
  %246 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %245, i32 0, i32 30
  %247 = load i32, ptr %246, align 8, !tbaa !27
  %248 = icmp eq i32 %247, 1
  br i1 %248, label %249, label %342

249:                                              ; preds = %244, %239
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #4
  %250 = load ptr, ptr %9, align 8, !tbaa !5
  %251 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %250, i32 0, i32 11
  %252 = load i32, ptr %251, align 4, !tbaa !29
  %253 = icmp ne i32 %252, 0
  br i1 %253, label %254, label %263

254:                                              ; preds = %249
  %255 = load i32, ptr %20, align 4, !tbaa !9
  %256 = load i32, ptr %16, align 4, !tbaa !9
  %257 = sub i32 %256, 1
  %258 = icmp eq i32 %255, %257
  br i1 %258, label %259, label %263

259:                                              ; preds = %254
  %260 = load ptr, ptr %9, align 8, !tbaa !5
  %261 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %260, i32 0, i32 11
  %262 = load i32, ptr %261, align 4, !tbaa !29
  br label %264

263:                                              ; preds = %254, %249
  br label %264

264:                                              ; preds = %263, %259
  %265 = phi i32 [ %262, %259 ], [ 0, %263 ]
  store i32 %265, ptr %29, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #4
  %266 = load ptr, ptr %9, align 8, !tbaa !5
  %267 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %266, i32 0, i32 0
  %268 = load i32, ptr %267, align 8, !tbaa !21
  %269 = icmp ult i32 %268, 1101
  br i1 %269, label %270, label %282

270:                                              ; preds = %264
  %271 = load i32, ptr %19, align 4, !tbaa !9
  %272 = load ptr, ptr %10, align 8, !tbaa !5
  %273 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %272, i32 0, i32 30
  %274 = load i32, ptr %273, align 1, !tbaa !30
  %275 = mul i32 %271, %274
  %276 = udiv i32 %275, 8
  %277 = load i32, ptr %20, align 4, !tbaa !9
  %278 = mul i32 %277, 8
  %279 = add i32 %278, 7
  %280 = udiv i32 %279, 8
  %281 = add i32 %276, %280
  br label %294

282:                                              ; preds = %264
  %283 = load i32, ptr %19, align 4, !tbaa !9
  %284 = load ptr, ptr %10, align 8, !tbaa !5
  %285 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %284, i32 0, i32 30
  %286 = load i32, ptr %285, align 1, !tbaa !30
  %287 = mul i32 %283, %286
  %288 = udiv i32 %287, 8
  %289 = load i32, ptr %20, align 4, !tbaa !9
  %290 = mul i32 %289, 16
  %291 = add i32 %290, 7
  %292 = udiv i32 %291, 8
  %293 = add i32 %288, %292
  br label %294

294:                                              ; preds = %282, %270
  %295 = phi i32 [ %281, %270 ], [ %293, %282 ]
  store i32 %295, ptr %30, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #4
  %296 = load i32, ptr %20, align 4, !tbaa !9
  %297 = mul i32 %296, 4
  %298 = load ptr, ptr %9, align 8, !tbaa !5
  %299 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %298, i32 0, i32 41
  %300 = load i32, ptr %299, align 4, !tbaa !31
  %301 = add i32 %297, %300
  %302 = urem i32 %301, 8
  store i32 %302, ptr %31, align 4, !tbaa !9
  %303 = load ptr, ptr %9, align 8, !tbaa !5
  %304 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %303, i32 0, i32 0
  %305 = load i32, ptr %304, align 8, !tbaa !21
  %306 = icmp ult i32 %305, 1005
  br i1 %306, label %307, label %320

307:                                              ; preds = %294
  %308 = load i32, ptr %19, align 4, !tbaa !9
  %309 = load ptr, ptr %10, align 8, !tbaa !5
  %310 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %309, i32 0, i32 30
  %311 = load i32, ptr %310, align 1, !tbaa !30
  %312 = mul i32 %308, %311
  %313 = udiv i32 %312, 8
  %314 = load i32, ptr %20, align 4, !tbaa !9
  %315 = udiv i32 %314, 2
  %316 = mul i32 %315, 8
  %317 = add i32 %316, 7
  %318 = udiv i32 %317, 8
  %319 = add i32 %313, %318
  br label %322

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

322:                                              ; preds = %320, %307
  %323 = phi i32 [ %319, %307 ], [ %321, %320 ]
  store i32 %323, ptr %30, align 4, !tbaa !9
  %324 = load ptr, ptr %7, align 8, !tbaa !5
  %325 = load ptr, ptr %9, align 8, !tbaa !5
  %326 = load i32, ptr %17, align 4, !tbaa !9
  %327 = load i32, ptr %20, align 4, !tbaa !9
  %328 = add i32 %326, %327
  %329 = load i32, ptr %16, align 4, !tbaa !9
  %330 = load i32, ptr %19, align 4, !tbaa !9
  %331 = mul i32 %329, %330
  %332 = add i32 %328, %331
  %333 = load ptr, ptr %9, align 8, !tbaa !5
  %334 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %333, i32 0, i32 30
  %335 = load i32, ptr %334, align 8, !tbaa !27
  %336 = load i32, ptr %23, align 4, !tbaa !9
  %337 = load i32, ptr %30, align 4, !tbaa !9
  %338 = load i32, ptr %28, align 4, !tbaa !9
  %339 = load i32, ptr %25, align 4, !tbaa !9
  %340 = load i32, ptr %29, align 4, !tbaa !9
  %341 = load i32, ptr %31, align 4, !tbaa !9
  call void @libxsmm_generator_gemm_apply_relu_to_vreg(ptr noundef %324, ptr noundef %325, i32 noundef 0, i32 noundef %332, i32 noundef %335, i32 noundef %336, i32 noundef %337, i32 noundef 1, i32 noundef %338, i32 noundef %339, i32 noundef 1, i32 noundef %340, i32 noundef %341)
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #4
  br label %383

342:                                              ; preds = %244
  %343 = load ptr, ptr %9, align 8, !tbaa !5
  %344 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %343, i32 0, i32 33
  %345 = load i32, ptr %344, align 4, !tbaa !28
  %346 = icmp eq i32 %345, 1
  br i1 %346, label %347, label %382

347:                                              ; preds = %342
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #4
  store i32 0, ptr %32, align 4, !tbaa !9
  %348 = load ptr, ptr %7, align 8, !tbaa !5
  %349 = load ptr, ptr %22, align 8, !tbaa !5
  %350 = load i32, ptr %24, align 4, !tbaa !9
  %351 = load i32, ptr %17, align 4, !tbaa !9
  %352 = load i32, ptr %20, align 4, !tbaa !9
  %353 = add i32 %351, %352
  %354 = load i32, ptr %16, align 4, !tbaa !9
  %355 = load i32, ptr %19, align 4, !tbaa !9
  %356 = mul i32 %354, %355
  %357 = add i32 %353, %356
  %358 = load i32, ptr %32, align 4, !tbaa !9
  call void @libxsmm_generator_gemm_apply_sigmoid_to_vreg_from_scratch(ptr noundef %348, ptr noundef %349, i32 noundef %350, i32 noundef %357, i32 noundef %358)
  %359 = load ptr, ptr %7, align 8, !tbaa !5
  %360 = load ptr, ptr %9, align 8, !tbaa !5
  %361 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %360, i32 0, i32 0
  %362 = load i32, ptr %361, align 8, !tbaa !21
  %363 = load ptr, ptr %9, align 8, !tbaa !5
  %364 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %363, i32 0, i32 0
  %365 = load i32, ptr %364, align 8, !tbaa !21
  %366 = icmp ult i32 %365, 1005
  %367 = zext i1 %366 to i64
  %368 = select i1 %366, i32 -1610346480, i32 537138704
  %369 = load i32, ptr %24, align 4, !tbaa !9
  %370 = load i32, ptr %17, align 4, !tbaa !9
  %371 = load i32, ptr %20, align 4, !tbaa !9
  %372 = add i32 %370, %371
  %373 = load i32, ptr %16, align 4, !tbaa !9
  %374 = load i32, ptr %19, align 4, !tbaa !9
  %375 = mul i32 %373, %374
  %376 = add i32 %372, %375
  %377 = mul i32 %376, 64
  %378 = load ptr, ptr %9, align 8, !tbaa !5
  %379 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %378, i32 0, i32 21
  %380 = load i8, ptr %379, align 4, !tbaa !32
  %381 = load i32, ptr %32, align 4, !tbaa !9
  call void @libxsmm_x86_instruction_vec_move(ptr noundef %359, i32 noundef %362, i32 noundef %368, i32 noundef %369, i32 noundef 127, i32 noundef 0, i32 noundef %377, i8 noundef signext %380, i32 noundef %381, i32 noundef 0, i32 noundef 0, i32 noundef 1)
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #4
  br label %382

382:                                              ; preds = %347, %342
  br label %383

383:                                              ; preds = %382, %322
  br label %384

384:                                              ; preds = %383
  %385 = load i32, ptr %20, align 4, !tbaa !9
  %386 = add i32 %385, 1
  store i32 %386, ptr %20, align 4, !tbaa !9
  br label %235, !llvm.loop !33

387:                                              ; preds = %235
  br label %388

388:                                              ; preds = %387
  %389 = load i32, ptr %19, align 4, !tbaa !9
  %390 = add i32 %389, 1
  store i32 %390, ptr %19, align 4, !tbaa !9
  br label %230, !llvm.loop !35

391:                                              ; preds = %230
  %392 = load ptr, ptr %9, align 8, !tbaa !5
  %393 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %392, i32 0, i32 31
  %394 = load i32, ptr %393, align 4, !tbaa !26
  %395 = icmp eq i32 %394, 1
  br i1 %395, label %401, label %396

396:                                              ; preds = %391
  %397 = load ptr, ptr %9, align 8, !tbaa !5
  %398 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %397, i32 0, i32 30
  %399 = load i32, ptr %398, align 8, !tbaa !27
  %400 = icmp eq i32 %399, 1
  br i1 %400, label %401, label %408

401:                                              ; preds = %396, %391
  %402 = load ptr, ptr %7, align 8, !tbaa !5
  %403 = load ptr, ptr %9, align 8, !tbaa !5
  %404 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %403, i32 0, i32 30
  %405 = load i32, ptr %404, align 8, !tbaa !27
  %406 = load i32, ptr %23, align 4, !tbaa !9
  %407 = load i32, ptr %25, align 4, !tbaa !9
  call void @libxsmm_generator_gemm_cleanup_relu_fusion(ptr noundef %402, i32 noundef %405, i32 noundef %406, i32 noundef 127, i32 noundef %407)
  br label %424

408:                                              ; preds = %396
  %409 = load ptr, ptr %9, align 8, !tbaa !5
  %410 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %409, i32 0, i32 33
  %411 = load i32, ptr %410, align 4, !tbaa !28
  %412 = icmp eq i32 %411, 1
  br i1 %412, label %413, label %423

413:                                              ; preds = %408
  %414 = load ptr, ptr %7, align 8, !tbaa !5
  %415 = load ptr, ptr %9, align 8, !tbaa !5
  %416 = load i32, ptr %24, align 4, !tbaa !9
  %417 = load i32, ptr %17, align 4, !tbaa !9
  %418 = load i32, ptr %16, align 4, !tbaa !9
  %419 = load i32, ptr %12, align 4, !tbaa !9
  call void @libxsmm_generator_gemm_restore_2D_regblock_from_scratch(ptr noundef %414, ptr noundef %415, i32 noundef %416, i32 noundef %417, i32 noundef %418, i32 noundef %419)
  %420 = load ptr, ptr %7, align 8, !tbaa !5
  %421 = load i32, ptr %24, align 4, !tbaa !9
  %422 = load i32, ptr %25, align 4, !tbaa !9
  call void @libxsmm_generator_gemm_cleanup_sigmoid_fusion(ptr noundef %420, i32 noundef %421, i32 noundef %422)
  br label %423

423:                                              ; preds = %413, %408
  br label %424

424:                                              ; preds = %423, %401
  %425 = load ptr, ptr %9, align 8, !tbaa !5
  %426 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %425, i32 0, i32 0
  %427 = load i32, ptr %426, align 8, !tbaa !21
  %428 = icmp ult i32 %427, 1005
  br i1 %428, label %429, label %520

429:                                              ; preds = %424
  %430 = load ptr, ptr %7, align 8, !tbaa !5
  call void @libxsmm_generator_vcvtneps2bf16_sse_prep_stack(ptr noundef %430, i32 noundef 0)
  store i32 0, ptr %19, align 4, !tbaa !9
  br label %431

431:                                              ; preds = %515, %429
  %432 = load i32, ptr %19, align 4, !tbaa !9
  %433 = load i32, ptr %12, align 4, !tbaa !9
  %434 = icmp ult i32 %432, %433
  br i1 %434, label %435, label %518

435:                                              ; preds = %431
  store i32 0, ptr %20, align 4, !tbaa !9
  br label %436

436:                                              ; preds = %511, %435
  %437 = load i32, ptr %20, align 4, !tbaa !9
  %438 = load i32, ptr %16, align 4, !tbaa !9
  %439 = icmp ult i32 %437, %438
  br i1 %439, label %440, label %514

440:                                              ; preds = %436
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #4
  %441 = load i32, ptr %17, align 4, !tbaa !9
  %442 = load i32, ptr %20, align 4, !tbaa !9
  %443 = add i32 %441, %442
  %444 = load i32, ptr %16, align 4, !tbaa !9
  %445 = load i32, ptr %19, align 4, !tbaa !9
  %446 = mul i32 %444, %445
  %447 = add i32 %443, %446
  store i32 %447, ptr %33, align 4, !tbaa !9
  %448 = load ptr, ptr %7, align 8, !tbaa !5
  %449 = load i32, ptr %33, align 4, !tbaa !9
  call void @libxsmm_generator_vcvtneps2bf16_sse_preppedstack(ptr noundef %448, i8 noundef signext 120, i32 noundef %449, i32 noundef 1, i32 noundef 0, i32 noundef 2, i32 noundef 0)
  %450 = load ptr, ptr %9, align 8, !tbaa !5
  %451 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %450, i32 0, i32 11
  %452 = load i32, ptr %451, align 4, !tbaa !29
  %453 = icmp ne i32 %452, 0
  br i1 %453, label %454, label %487

454:                                              ; preds = %440
  %455 = load i32, ptr %20, align 4, !tbaa !9
  %456 = load i32, ptr %16, align 4, !tbaa !9
  %457 = sub i32 %456, 1
  %458 = icmp eq i32 %455, %457
  br i1 %458, label %459, label %487

459:                                              ; preds = %454
  %460 = load ptr, ptr %7, align 8, !tbaa !5
  %461 = load ptr, ptr %8, align 8, !tbaa !5
  %462 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %461, i32 0, i32 22
  %463 = load i32, ptr %462, align 4, !tbaa !25
  %464 = load ptr, ptr %8, align 8, !tbaa !5
  %465 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %464, i32 0, i32 5
  %466 = load i32, ptr %465, align 4, !tbaa !36
  %467 = load i32, ptr %19, align 4, !tbaa !9
  %468 = load ptr, ptr %10, align 8, !tbaa !5
  %469 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %468, i32 0, i32 5
  %470 = load i32, ptr %469, align 1, !tbaa !37
  %471 = mul i32 %467, %470
  %472 = load i32, ptr %20, align 4, !tbaa !9
  %473 = load ptr, ptr %9, align 8, !tbaa !5
  %474 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %473, i32 0, i32 2
  %475 = load i32, ptr %474, align 8, !tbaa !11
  %476 = mul i32 %472, %475
  %477 = add i32 %471, %476
  %478 = load ptr, ptr %9, align 8, !tbaa !5
  %479 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %478, i32 0, i32 5
  %480 = load i32, ptr %479, align 4, !tbaa !38
  %481 = mul i32 %477, %480
  %482 = load i32, ptr %11, align 4, !tbaa !9
  %483 = load ptr, ptr %9, align 8, !tbaa !5
  %484 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %483, i32 0, i32 2
  %485 = load i32, ptr %484, align 8, !tbaa !11
  %486 = urem i32 %482, %485
  call void @libxsmm_generator_maskedstore_16bit_sse(ptr noundef %460, i32 noundef %463, i32 noundef 0, i32 noundef 1, i32 noundef %466, i32 noundef 127, i32 noundef 0, i32 noundef %481, i32 noundef %486)
  br label %510

487:                                              ; preds = %454, %440
  %488 = load ptr, ptr %7, align 8, !tbaa !5
  %489 = load ptr, ptr %9, align 8, !tbaa !5
  %490 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %489, i32 0, i32 0
  %491 = load i32, ptr %490, align 8, !tbaa !21
  %492 = load ptr, ptr %8, align 8, !tbaa !5
  %493 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %492, i32 0, i32 5
  %494 = load i32, ptr %493, align 4, !tbaa !36
  %495 = load i32, ptr %19, align 4, !tbaa !9
  %496 = load ptr, ptr %10, align 8, !tbaa !5
  %497 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %496, i32 0, i32 5
  %498 = load i32, ptr %497, align 1, !tbaa !37
  %499 = mul i32 %495, %498
  %500 = load i32, ptr %20, align 4, !tbaa !9
  %501 = load ptr, ptr %9, align 8, !tbaa !5
  %502 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %501, i32 0, i32 2
  %503 = load i32, ptr %502, align 8, !tbaa !11
  %504 = mul i32 %500, %503
  %505 = add i32 %499, %504
  %506 = load ptr, ptr %9, align 8, !tbaa !5
  %507 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %506, i32 0, i32 5
  %508 = load i32, ptr %507, align 4, !tbaa !38
  %509 = mul i32 %505, %508
  call void @libxsmm_x86_instruction_vec_move(ptr noundef %488, i32 noundef %491, i32 noundef -1610149872, i32 noundef %494, i32 noundef 127, i32 noundef 0, i32 noundef %509, i8 noundef signext 120, i32 noundef 1, i32 noundef 0, i32 noundef 0, i32 noundef 1)
  br label %510

510:                                              ; preds = %487, %459
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #4
  br label %511

511:                                              ; preds = %510
  %512 = load i32, ptr %20, align 4, !tbaa !9
  %513 = add i32 %512, 1
  store i32 %513, ptr %20, align 4, !tbaa !9
  br label %436, !llvm.loop !39

514:                                              ; preds = %436
  br label %515

515:                                              ; preds = %514
  %516 = load i32, ptr %19, align 4, !tbaa !9
  %517 = add i32 %516, 1
  store i32 %517, ptr %19, align 4, !tbaa !9
  br label %431, !llvm.loop !40

518:                                              ; preds = %431
  %519 = load ptr, ptr %7, align 8, !tbaa !5
  call void @libxsmm_generator_vcvtneps2bf16_sse_clean_stack(ptr noundef %519)
  br label %782

520:                                              ; preds = %424
  %521 = load ptr, ptr %9, align 8, !tbaa !5
  %522 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %521, i32 0, i32 0
  %523 = load i32, ptr %522, align 8, !tbaa !21
  %524 = icmp uge i32 %523, 1006
  br i1 %524, label %525, label %646

525:                                              ; preds = %520
  %526 = load ptr, ptr %9, align 8, !tbaa !5
  %527 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %526, i32 0, i32 0
  %528 = load i32, ptr %527, align 8, !tbaa !21
  %529 = icmp ult i32 %528, 1051
  br i1 %529, label %530, label %646

530:                                              ; preds = %525
  %531 = load ptr, ptr %9, align 8, !tbaa !5
  %532 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %531, i32 0, i32 0
  %533 = load i32, ptr %532, align 8, !tbaa !21
  %534 = icmp ne i32 %533, 1008
  br i1 %534, label %535, label %537

535:                                              ; preds = %530
  %536 = load ptr, ptr %7, align 8, !tbaa !5
  call void @libxsmm_generator_vcvtneps2bf16_avx2_prep_stack(ptr noundef %536, i32 noundef 0)
  br label %537

537:                                              ; preds = %535, %530
  store i32 0, ptr %19, align 4, !tbaa !9
  br label %538

538:                                              ; preds = %635, %537
  %539 = load i32, ptr %19, align 4, !tbaa !9
  %540 = load i32, ptr %12, align 4, !tbaa !9
  %541 = icmp ult i32 %539, %540
  br i1 %541, label %542, label %638

542:                                              ; preds = %538
  store i32 0, ptr %20, align 4, !tbaa !9
  br label %543

543:                                              ; preds = %631, %542
  %544 = load i32, ptr %20, align 4, !tbaa !9
  %545 = load i32, ptr %16, align 4, !tbaa !9
  %546 = icmp ult i32 %544, %545
  br i1 %546, label %547, label %634

547:                                              ; preds = %543
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #4
  %548 = load i32, ptr %17, align 4, !tbaa !9
  %549 = load i32, ptr %20, align 4, !tbaa !9
  %550 = add i32 %548, %549
  %551 = load i32, ptr %16, align 4, !tbaa !9
  %552 = load i32, ptr %19, align 4, !tbaa !9
  %553 = mul i32 %551, %552
  %554 = add i32 %550, %553
  store i32 %554, ptr %34, align 4, !tbaa !9
  %555 = load ptr, ptr %9, align 8, !tbaa !5
  %556 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %555, i32 0, i32 0
  %557 = load i32, ptr %556, align 8, !tbaa !21
  %558 = icmp ne i32 %557, 1008
  br i1 %558, label %559, label %562

559:                                              ; preds = %547
  %560 = load ptr, ptr %7, align 8, !tbaa !5
  %561 = load i32, ptr %34, align 4, !tbaa !9
  call void @libxsmm_generator_vcvtneps2bf16_avx2_preppedstack(ptr noundef %560, i8 noundef signext 121, i32 noundef %561, i32 noundef 0, i32 noundef 1, i32 noundef 2, i32 noundef 0)
  br label %568

562:                                              ; preds = %547
  %563 = load ptr, ptr %7, align 8, !tbaa !5
  %564 = load ptr, ptr %9, align 8, !tbaa !5
  %565 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %564, i32 0, i32 21
  %566 = load i8, ptr %565, align 4, !tbaa !32
  %567 = load i32, ptr %34, align 4, !tbaa !9
  call void @libxsmm_x86_instruction_vec_compute_2reg(ptr noundef %563, i32 noundef 537273970, i8 noundef signext %566, i32 noundef %567, i32 noundef 0)
  br label %568

568:                                              ; preds = %562, %559
  %569 = load ptr, ptr %9, align 8, !tbaa !5
  %570 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %569, i32 0, i32 11
  %571 = load i32, ptr %570, align 4, !tbaa !29
  %572 = icmp ne i32 %571, 0
  br i1 %572, label %573, label %606

573:                                              ; preds = %568
  %574 = load i32, ptr %20, align 4, !tbaa !9
  %575 = load i32, ptr %16, align 4, !tbaa !9
  %576 = sub i32 %575, 1
  %577 = icmp eq i32 %574, %576
  br i1 %577, label %578, label %606

578:                                              ; preds = %573
  %579 = load ptr, ptr %7, align 8, !tbaa !5
  %580 = load ptr, ptr %8, align 8, !tbaa !5
  %581 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %580, i32 0, i32 22
  %582 = load i32, ptr %581, align 4, !tbaa !25
  %583 = load ptr, ptr %8, align 8, !tbaa !5
  %584 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %583, i32 0, i32 5
  %585 = load i32, ptr %584, align 4, !tbaa !36
  %586 = load i32, ptr %19, align 4, !tbaa !9
  %587 = load ptr, ptr %10, align 8, !tbaa !5
  %588 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %587, i32 0, i32 5
  %589 = load i32, ptr %588, align 1, !tbaa !37
  %590 = mul i32 %586, %589
  %591 = load i32, ptr %20, align 4, !tbaa !9
  %592 = load ptr, ptr %9, align 8, !tbaa !5
  %593 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %592, i32 0, i32 2
  %594 = load i32, ptr %593, align 8, !tbaa !11
  %595 = mul i32 %591, %594
  %596 = add i32 %590, %595
  %597 = load ptr, ptr %9, align 8, !tbaa !5
  %598 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %597, i32 0, i32 5
  %599 = load i32, ptr %598, align 4, !tbaa !38
  %600 = mul i32 %596, %599
  %601 = load i32, ptr %11, align 4, !tbaa !9
  %602 = load ptr, ptr %9, align 8, !tbaa !5
  %603 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %602, i32 0, i32 2
  %604 = load i32, ptr %603, align 8, !tbaa !11
  %605 = urem i32 %601, %604
  call void @libxsmm_generator_maskedstore_16bit_avx2(ptr noundef %579, i32 noundef %582, i32 noundef 0, i32 noundef %585, i32 noundef 127, i32 noundef 0, i32 noundef %600, i32 noundef %605)
  br label %630

606:                                              ; preds = %573, %568
  %607 = load ptr, ptr %7, align 8, !tbaa !5
  %608 = load ptr, ptr %9, align 8, !tbaa !5
  %609 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %608, i32 0, i32 0
  %610 = load i32, ptr %609, align 8, !tbaa !21
  %611 = load i32, ptr %18, align 4, !tbaa !9
  %612 = load ptr, ptr %8, align 8, !tbaa !5
  %613 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %612, i32 0, i32 5
  %614 = load i32, ptr %613, align 4, !tbaa !36
  %615 = load i32, ptr %19, align 4, !tbaa !9
  %616 = load ptr, ptr %10, align 8, !tbaa !5
  %617 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %616, i32 0, i32 5
  %618 = load i32, ptr %617, align 1, !tbaa !37
  %619 = mul i32 %615, %618
  %620 = load i32, ptr %20, align 4, !tbaa !9
  %621 = load ptr, ptr %9, align 8, !tbaa !5
  %622 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %621, i32 0, i32 2
  %623 = load i32, ptr %622, align 8, !tbaa !11
  %624 = mul i32 %620, %623
  %625 = add i32 %619, %624
  %626 = load ptr, ptr %9, align 8, !tbaa !5
  %627 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %626, i32 0, i32 5
  %628 = load i32, ptr %627, align 4, !tbaa !38
  %629 = mul i32 %625, %628
  call void @libxsmm_x86_instruction_vec_move(ptr noundef %607, i32 noundef %610, i32 noundef %611, i32 noundef %614, i32 noundef 127, i32 noundef 0, i32 noundef %629, i8 noundef signext 120, i32 noundef 0, i32 noundef 0, i32 noundef 0, i32 noundef 1)
  br label %630

630:                                              ; preds = %606, %578
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #4
  br label %631

631:                                              ; preds = %630
  %632 = load i32, ptr %20, align 4, !tbaa !9
  %633 = add i32 %632, 1
  store i32 %633, ptr %20, align 4, !tbaa !9
  br label %543, !llvm.loop !41

634:                                              ; preds = %543
  br label %635

635:                                              ; preds = %634
  %636 = load i32, ptr %19, align 4, !tbaa !9
  %637 = add i32 %636, 1
  store i32 %637, ptr %19, align 4, !tbaa !9
  br label %538, !llvm.loop !42

638:                                              ; preds = %538
  %639 = load ptr, ptr %9, align 8, !tbaa !5
  %640 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %639, i32 0, i32 0
  %641 = load i32, ptr %640, align 8, !tbaa !21
  %642 = icmp ne i32 %641, 1008
  br i1 %642, label %643, label %645

643:                                              ; preds = %638
  %644 = load ptr, ptr %7, align 8, !tbaa !5
  call void @libxsmm_generator_vcvtneps2bf16_avx2_clean_stack(ptr noundef %644)
  br label %645

645:                                              ; preds = %643, %638
  br label %781

646:                                              ; preds = %525, %520
  %647 = load ptr, ptr %7, align 8, !tbaa !5
  %648 = load ptr, ptr %8, align 8, !tbaa !5
  %649 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %648, i32 0, i32 24
  %650 = load i32, ptr %649, align 4, !tbaa !22
  call void @libxsmm_generator_vcvtneps2bf16_avx512_prep_stack(ptr noundef %647, i32 noundef %650)
  store i32 0, ptr %19, align 4, !tbaa !9
  br label %651

651:                                              ; preds = %773, %646
  %652 = load i32, ptr %19, align 4, !tbaa !9
  %653 = load i32, ptr %12, align 4, !tbaa !9
  %654 = icmp ult i32 %652, %653
  br i1 %654, label %655, label %776

655:                                              ; preds = %651
  store i32 0, ptr %20, align 4, !tbaa !9
  br label %656

656:                                              ; preds = %769, %655
  %657 = load i32, ptr %20, align 4, !tbaa !9
  %658 = load i32, ptr %16, align 4, !tbaa !9
  %659 = icmp ult i32 %657, %658
  br i1 %659, label %660, label %772

660:                                              ; preds = %656
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #4
  %661 = load i32, ptr %17, align 4, !tbaa !9
  %662 = load i32, ptr %20, align 4, !tbaa !9
  %663 = add i32 %661, %662
  %664 = load i32, ptr %16, align 4, !tbaa !9
  %665 = load i32, ptr %19, align 4, !tbaa !9
  %666 = mul i32 %664, %665
  %667 = add i32 %663, %666
  store i32 %667, ptr %35, align 4, !tbaa !9
  %668 = load ptr, ptr %7, align 8, !tbaa !5
  %669 = load ptr, ptr %9, align 8, !tbaa !5
  %670 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %669, i32 0, i32 0
  %671 = load i32, ptr %670, align 8, !tbaa !21
  %672 = icmp uge i32 %671, 1051
  br i1 %672, label %673, label %678

673:                                              ; preds = %660
  %674 = load ptr, ptr %9, align 8, !tbaa !5
  %675 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %674, i32 0, i32 0
  %676 = load i32, ptr %675, align 8, !tbaa !21
  %677 = icmp ult i32 %676, 1101
  br label %678

678:                                              ; preds = %673, %660
  %679 = phi i1 [ false, %660 ], [ %677, %673 ]
  %680 = zext i1 %679 to i64
  %681 = select i1 %679, i32 121, i32 122
  %682 = trunc i32 %681 to i8
  %683 = load i32, ptr %35, align 4, !tbaa !9
  call void @libxsmm_generator_vcvtneps2bf16_avx512_preppedstack(ptr noundef %668, i8 noundef signext %682, i32 noundef %683, i32 noundef 0, i32 noundef 1, i32 noundef 2, i32 noundef 6, i32 noundef 7, i32 noundef 0)
  %684 = load ptr, ptr %9, align 8, !tbaa !5
  %685 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %684, i32 0, i32 11
  %686 = load i32, ptr %685, align 4, !tbaa !29
  %687 = icmp ne i32 %686, 0
  br i1 %687, label %688, label %730

688:                                              ; preds = %678
  %689 = load i32, ptr %20, align 4, !tbaa !9
  %690 = load i32, ptr %16, align 4, !tbaa !9
  %691 = sub i32 %690, 1
  %692 = icmp eq i32 %689, %691
  br i1 %692, label %693, label %730

693:                                              ; preds = %688
  %694 = load ptr, ptr %7, align 8, !tbaa !5
  %695 = load ptr, ptr %9, align 8, !tbaa !5
  %696 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %695, i32 0, i32 0
  %697 = load i32, ptr %696, align 8, !tbaa !21
  %698 = load ptr, ptr %8, align 8, !tbaa !5
  %699 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %698, i32 0, i32 5
  %700 = load i32, ptr %699, align 4, !tbaa !36
  %701 = load i32, ptr %19, align 4, !tbaa !9
  %702 = load ptr, ptr %10, align 8, !tbaa !5
  %703 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %702, i32 0, i32 5
  %704 = load i32, ptr %703, align 1, !tbaa !37
  %705 = mul i32 %701, %704
  %706 = load i32, ptr %20, align 4, !tbaa !9
  %707 = load ptr, ptr %9, align 8, !tbaa !5
  %708 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %707, i32 0, i32 2
  %709 = load i32, ptr %708, align 8, !tbaa !11
  %710 = mul i32 %706, %709
  %711 = add i32 %705, %710
  %712 = load ptr, ptr %9, align 8, !tbaa !5
  %713 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %712, i32 0, i32 5
  %714 = load i32, ptr %713, align 4, !tbaa !38
  %715 = mul i32 %711, %714
  %716 = load ptr, ptr %9, align 8, !tbaa !5
  %717 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %716, i32 0, i32 0
  %718 = load i32, ptr %717, align 8, !tbaa !21
  %719 = icmp uge i32 %718, 1051
  br i1 %719, label %720, label %725

720:                                              ; preds = %693
  %721 = load ptr, ptr %9, align 8, !tbaa !5
  %722 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %721, i32 0, i32 0
  %723 = load i32, ptr %722, align 8, !tbaa !21
  %724 = icmp ult i32 %723, 1101
  br label %725

725:                                              ; preds = %720, %693
  %726 = phi i1 [ false, %693 ], [ %724, %720 ]
  %727 = zext i1 %726 to i64
  %728 = select i1 %726, i32 121, i32 122
  %729 = trunc i32 %728 to i8
  call void @libxsmm_x86_instruction_vec_move(ptr noundef %694, i32 noundef %697, i32 noundef -528017809, i32 noundef %700, i32 noundef 127, i32 noundef 0, i32 noundef %715, i8 noundef signext %729, i32 noundef 0, i32 noundef 2, i32 noundef 0, i32 noundef 1)
  br label %768

730:                                              ; preds = %688, %678
  %731 = load ptr, ptr %7, align 8, !tbaa !5
  %732 = load ptr, ptr %9, align 8, !tbaa !5
  %733 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %732, i32 0, i32 0
  %734 = load i32, ptr %733, align 8, !tbaa !21
  %735 = load i32, ptr %18, align 4, !tbaa !9
  %736 = load ptr, ptr %8, align 8, !tbaa !5
  %737 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %736, i32 0, i32 5
  %738 = load i32, ptr %737, align 4, !tbaa !36
  %739 = load i32, ptr %19, align 4, !tbaa !9
  %740 = load ptr, ptr %10, align 8, !tbaa !5
  %741 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %740, i32 0, i32 5
  %742 = load i32, ptr %741, align 1, !tbaa !37
  %743 = mul i32 %739, %742
  %744 = load i32, ptr %20, align 4, !tbaa !9
  %745 = load ptr, ptr %9, align 8, !tbaa !5
  %746 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %745, i32 0, i32 2
  %747 = load i32, ptr %746, align 8, !tbaa !11
  %748 = mul i32 %744, %747
  %749 = add i32 %743, %748
  %750 = load ptr, ptr %9, align 8, !tbaa !5
  %751 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %750, i32 0, i32 5
  %752 = load i32, ptr %751, align 4, !tbaa !38
  %753 = mul i32 %749, %752
  %754 = load ptr, ptr %9, align 8, !tbaa !5
  %755 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %754, i32 0, i32 0
  %756 = load i32, ptr %755, align 8, !tbaa !21
  %757 = icmp uge i32 %756, 1051
  br i1 %757, label %758, label %763

758:                                              ; preds = %730
  %759 = load ptr, ptr %9, align 8, !tbaa !5
  %760 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %759, i32 0, i32 0
  %761 = load i32, ptr %760, align 8, !tbaa !21
  %762 = icmp ult i32 %761, 1101
  br label %763

763:                                              ; preds = %758, %730
  %764 = phi i1 [ false, %730 ], [ %762, %758 ]
  %765 = zext i1 %764 to i64
  %766 = select i1 %764, i32 120, i32 121
  %767 = trunc i32 %766 to i8
  call void @libxsmm_x86_instruction_vec_move(ptr noundef %731, i32 noundef %734, i32 noundef %735, i32 noundef %738, i32 noundef 127, i32 noundef 0, i32 noundef %753, i8 noundef signext %767, i32 noundef 0, i32 noundef 0, i32 noundef 0, i32 noundef 1)
  br label %768

768:                                              ; preds = %763, %725
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #4
  br label %769

769:                                              ; preds = %768
  %770 = load i32, ptr %20, align 4, !tbaa !9
  %771 = add i32 %770, 1
  store i32 %771, ptr %20, align 4, !tbaa !9
  br label %656, !llvm.loop !43

772:                                              ; preds = %656
  br label %773

773:                                              ; preds = %772
  %774 = load i32, ptr %19, align 4, !tbaa !9
  %775 = add i32 %774, 1
  store i32 %775, ptr %19, align 4, !tbaa !9
  br label %651, !llvm.loop !44

776:                                              ; preds = %651
  %777 = load ptr, ptr %7, align 8, !tbaa !5
  %778 = load ptr, ptr %8, align 8, !tbaa !5
  %779 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %778, i32 0, i32 24
  %780 = load i32, ptr %779, align 4, !tbaa !22
  call void @libxsmm_generator_vcvtneps2bf16_avx512_clean_stack(ptr noundef %777, i32 noundef %780)
  br label %781

781:                                              ; preds = %776, %645
  br label %782

782:                                              ; preds = %781, %518
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #4
  br label %2889

783:                                              ; preds = %179, %173, %168
  %784 = load ptr, ptr %9, align 8, !tbaa !5
  %785 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %784, i32 0, i32 0
  %786 = load i32, ptr %785, align 8, !tbaa !21
  %787 = icmp ule i32 %786, 1999
  br i1 %787, label %788, label %793

788:                                              ; preds = %783
  %789 = load ptr, ptr %9, align 8, !tbaa !5
  %790 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %789, i32 0, i32 0
  %791 = load i32, ptr %790, align 8, !tbaa !21
  %792 = icmp uge i32 %791, 1103
  br i1 %792, label %803, label %793

793:                                              ; preds = %788, %783
  %794 = load ptr, ptr %9, align 8, !tbaa !5
  %795 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %794, i32 0, i32 0
  %796 = load i32, ptr %795, align 8, !tbaa !21
  %797 = icmp ult i32 %796, 1101
  br i1 %797, label %798, label %1345

798:                                              ; preds = %793
  %799 = load ptr, ptr %9, align 8, !tbaa !5
  %800 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %799, i32 0, i32 0
  %801 = load i32, ptr %800, align 8, !tbaa !21
  %802 = icmp uge i32 %801, 1053
  br i1 %802, label %803, label %1345

803:                                              ; preds = %798, %788
  %804 = load ptr, ptr %10, align 8, !tbaa !5
  %805 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %804, i32 0, i32 8
  %806 = getelementptr inbounds [3 x i8], ptr %805, i64 0, i64 0
  %807 = call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef %806)
  %808 = icmp eq i32 2, %807
  br i1 %808, label %809, label %1345

809:                                              ; preds = %803
  %810 = load ptr, ptr %10, align 8, !tbaa !5
  %811 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %810, i32 0, i32 8
  %812 = getelementptr inbounds [3 x i8], ptr %811, i64 0, i64 0
  %813 = call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef %812)
  %814 = icmp eq i32 2, %813
  br i1 %814, label %815, label %1345

815:                                              ; preds = %809
  call void @llvm.lifetime.start.p0(i64 4, ptr %36) #4
  %816 = load ptr, ptr %8, align 8, !tbaa !5
  %817 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %816, i32 0, i32 24
  %818 = load i32, ptr %817, align 4, !tbaa !22
  store i32 %818, ptr %36, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %37) #4
  %819 = load ptr, ptr %8, align 8, !tbaa !5
  %820 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %819, i32 0, i32 24
  %821 = load i32, ptr %820, align 4, !tbaa !22
  store i32 %821, ptr %37, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %38) #4
  %822 = load ptr, ptr %8, align 8, !tbaa !5
  %823 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %822, i32 0, i32 23
  %824 = load i32, ptr %823, align 4, !tbaa !24
  store i32 %824, ptr %38, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %39) #4
  store i32 1, ptr %39, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %40) #4
  store i32 2, ptr %40, align 4, !tbaa !9
  %825 = load ptr, ptr %9, align 8, !tbaa !5
  %826 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %825, i32 0, i32 31
  %827 = load i32, ptr %826, align 4, !tbaa !26
  %828 = icmp eq i32 %827, 1
  br i1 %828, label %834, label %829

829:                                              ; preds = %815
  %830 = load ptr, ptr %9, align 8, !tbaa !5
  %831 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %830, i32 0, i32 30
  %832 = load i32, ptr %831, align 8, !tbaa !27
  %833 = icmp eq i32 %832, 1
  br i1 %833, label %834, label %842

834:                                              ; preds = %829, %815
  %835 = load ptr, ptr %7, align 8, !tbaa !5
  %836 = load ptr, ptr %9, align 8, !tbaa !5
  %837 = load ptr, ptr %9, align 8, !tbaa !5
  %838 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %837, i32 0, i32 30
  %839 = load i32, ptr %838, align 8, !tbaa !27
  %840 = load i32, ptr %36, align 4, !tbaa !9
  %841 = load i32, ptr %38, align 4, !tbaa !9
  call void @libxsmm_generator_gemm_prepare_relu_fusion(ptr noundef %835, ptr noundef %836, i32 noundef 1, i32 noundef %839, i32 noundef %840, i32 noundef 127, i32 noundef %841)
  br label %856

842:                                              ; preds = %829
  %843 = load ptr, ptr %9, align 8, !tbaa !5
  %844 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %843, i32 0, i32 33
  %845 = load i32, ptr %844, align 4, !tbaa !28
  %846 = icmp eq i32 %845, 1
  br i1 %846, label %847, label %855

847:                                              ; preds = %842
  %848 = load ptr, ptr %7, align 8, !tbaa !5
  %849 = load ptr, ptr %22, align 8, !tbaa !5
  %850 = load i32, ptr %17, align 4, !tbaa !9
  %851 = load i32, ptr %16, align 4, !tbaa !9
  %852 = load i32, ptr %12, align 4, !tbaa !9
  %853 = load i32, ptr %37, align 4, !tbaa !9
  %854 = load i32, ptr %38, align 4, !tbaa !9
  call void @libxsmm_generator_gemm_dump_2D_block_and_prepare_sigmoid_fusion(ptr noundef %848, ptr noundef %849, i32 noundef %850, i32 noundef %851, i32 noundef %852, i32 noundef %853, i32 noundef %854)
  br label %855

855:                                              ; preds = %847, %842
  br label %856

856:                                              ; preds = %855, %834
  store i32 0, ptr %19, align 4, !tbaa !9
  br label %857

857:                                              ; preds = %1314, %856
  %858 = load i32, ptr %19, align 4, !tbaa !9
  %859 = load i32, ptr %12, align 4, !tbaa !9
  %860 = icmp ult i32 %858, %859
  br i1 %860, label %861, label %1317

861:                                              ; preds = %857
  call void @llvm.lifetime.start.p0(i64 4, ptr %41) #4
  %862 = load i32, ptr %16, align 4, !tbaa !9
  %863 = udiv i32 %862, 2
  %864 = mul i32 %863, 2
  store i32 %864, ptr %41, align 4, !tbaa !9
  store i32 0, ptr %20, align 4, !tbaa !9
  %865 = load ptr, ptr %9, align 8, !tbaa !5
  %866 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %865, i32 0, i32 11
  %867 = load i32, ptr %866, align 4, !tbaa !29
  %868 = icmp ne i32 %867, 0
  br i1 %868, label %869, label %1037

869:                                              ; preds = %861
  store i32 0, ptr %20, align 4, !tbaa !9
  br label %870

870:                                              ; preds = %1033, %869
  %871 = load i32, ptr %20, align 4, !tbaa !9
  %872 = load i32, ptr %16, align 4, !tbaa !9
  %873 = icmp ult i32 %871, %872
  br i1 %873, label %874, label %1036

874:                                              ; preds = %870
  call void @llvm.lifetime.start.p0(i64 4, ptr %42) #4
  %875 = load i32, ptr %17, align 4, !tbaa !9
  %876 = load i32, ptr %20, align 4, !tbaa !9
  %877 = add i32 %875, %876
  %878 = load i32, ptr %16, align 4, !tbaa !9
  %879 = load i32, ptr %19, align 4, !tbaa !9
  %880 = mul i32 %878, %879
  %881 = add i32 %877, %880
  store i32 %881, ptr %42, align 4, !tbaa !9
  %882 = load ptr, ptr %9, align 8, !tbaa !5
  %883 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %882, i32 0, i32 31
  %884 = load i32, ptr %883, align 4, !tbaa !26
  %885 = icmp eq i32 %884, 1
  br i1 %885, label %891, label %886

886:                                              ; preds = %874
  %887 = load ptr, ptr %9, align 8, !tbaa !5
  %888 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %887, i32 0, i32 30
  %889 = load i32, ptr %888, align 8, !tbaa !27
  %890 = icmp eq i32 %889, 1
  br i1 %890, label %891, label %948

891:                                              ; preds = %886, %874
  call void @llvm.lifetime.start.p0(i64 4, ptr %43) #4
  %892 = load ptr, ptr %9, align 8, !tbaa !5
  %893 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %892, i32 0, i32 11
  %894 = load i32, ptr %893, align 4, !tbaa !29
  %895 = icmp ne i32 %894, 0
  br i1 %895, label %896, label %905

896:                                              ; preds = %891
  %897 = load i32, ptr %20, align 4, !tbaa !9
  %898 = load i32, ptr %16, align 4, !tbaa !9
  %899 = sub i32 %898, 1
  %900 = icmp eq i32 %897, %899
  br i1 %900, label %901, label %905

901:                                              ; preds = %896
  %902 = load ptr, ptr %9, align 8, !tbaa !5
  %903 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %902, i32 0, i32 11
  %904 = load i32, ptr %903, align 4, !tbaa !29
  br label %906

905:                                              ; preds = %896, %891
  br label %906

906:                                              ; preds = %905, %901
  %907 = phi i32 [ %904, %901 ], [ 0, %905 ]
  store i32 %907, ptr %43, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %44) #4
  %908 = load ptr, ptr %9, align 8, !tbaa !5
  %909 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %908, i32 0, i32 0
  %910 = load i32, ptr %909, align 8, !tbaa !21
  %911 = icmp ult i32 %910, 1101
  br i1 %911, label %912, label %924

912:                                              ; preds = %906
  %913 = load i32, ptr %19, align 4, !tbaa !9
  %914 = load ptr, ptr %10, align 8, !tbaa !5
  %915 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %914, i32 0, i32 30
  %916 = load i32, ptr %915, align 1, !tbaa !30
  %917 = mul i32 %913, %916
  %918 = udiv i32 %917, 8
  %919 = load i32, ptr %20, align 4, !tbaa !9
  %920 = mul i32 %919, 8
  %921 = add i32 %920, 7
  %922 = udiv i32 %921, 8
  %923 = add i32 %918, %922
  br label %936

924:                                              ; preds = %906
  %925 = load i32, ptr %19, align 4, !tbaa !9
  %926 = load ptr, ptr %10, align 8, !tbaa !5
  %927 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %926, i32 0, i32 30
  %928 = load i32, ptr %927, align 1, !tbaa !30
  %929 = mul i32 %925, %928
  %930 = udiv i32 %929, 8
  %931 = load i32, ptr %20, align 4, !tbaa !9
  %932 = mul i32 %931, 16
  %933 = add i32 %932, 7
  %934 = udiv i32 %933, 8
  %935 = add i32 %930, %934
  br label %936

936:                                              ; preds = %924, %912
  %937 = phi i32 [ %923, %912 ], [ %935, %924 ]
  store i32 %937, ptr %44, align 4, !tbaa !9
  %938 = load ptr, ptr %7, align 8, !tbaa !5
  %939 = load ptr, ptr %9, align 8, !tbaa !5
  %940 = load i32, ptr %42, align 4, !tbaa !9
  %941 = load ptr, ptr %9, align 8, !tbaa !5
  %942 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %941, i32 0, i32 30
  %943 = load i32, ptr %942, align 8, !tbaa !27
  %944 = load i32, ptr %36, align 4, !tbaa !9
  %945 = load i32, ptr %44, align 4, !tbaa !9
  %946 = load i32, ptr %38, align 4, !tbaa !9
  %947 = load i32, ptr %43, align 4, !tbaa !9
  call void @libxsmm_generator_gemm_apply_relu_to_vreg(ptr noundef %938, ptr noundef %939, i32 noundef 1, i32 noundef %940, i32 noundef %943, i32 noundef %944, i32 noundef %945, i32 noundef 1, i32 noundef 127, i32 noundef %946, i32 noundef 2, i32 noundef %947, i32 noundef 0)
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #4
  br label %961

948:                                              ; preds = %886
  %949 = load ptr, ptr %9, align 8, !tbaa !5
  %950 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %949, i32 0, i32 33
  %951 = load i32, ptr %950, align 4, !tbaa !28
  %952 = icmp eq i32 %951, 1
  br i1 %952, label %953, label %960

953:                                              ; preds = %948
  call void @llvm.lifetime.start.p0(i64 4, ptr %45) #4
  store i32 0, ptr %45, align 4, !tbaa !9
  %954 = load ptr, ptr %7, align 8, !tbaa !5
  %955 = load ptr, ptr %22, align 8, !tbaa !5
  %956 = load i32, ptr %37, align 4, !tbaa !9
  %957 = load i32, ptr %42, align 4, !tbaa !9
  %958 = load i32, ptr %45, align 4, !tbaa !9
  call void @libxsmm_generator_gemm_apply_sigmoid_to_vreg_from_scratch(ptr noundef %954, ptr noundef %955, i32 noundef %956, i32 noundef %957, i32 noundef %958)
  %959 = load i32, ptr %45, align 4, !tbaa !9
  store i32 %959, ptr %42, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 4, ptr %45) #4
  br label %960

960:                                              ; preds = %953, %948
  br label %961

961:                                              ; preds = %960, %936
  %962 = load ptr, ptr %7, align 8, !tbaa !5
  %963 = load ptr, ptr %9, align 8, !tbaa !5
  %964 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %963, i32 0, i32 21
  %965 = load i8, ptr %964, align 4, !tbaa !32
  %966 = load i32, ptr %42, align 4, !tbaa !9
  call void @libxsmm_x86_instruction_vec_compute_2reg(ptr noundef %962, i32 noundef 537273970, i8 noundef signext %965, i32 noundef %966, i32 noundef 0)
  %967 = load i32, ptr %20, align 4, !tbaa !9
  %968 = load i32, ptr %16, align 4, !tbaa !9
  %969 = sub i32 %968, 1
  %970 = icmp eq i32 %967, %969
  br i1 %970, label %971, label %1001

971:                                              ; preds = %961
  %972 = load ptr, ptr %7, align 8, !tbaa !5
  %973 = load ptr, ptr %9, align 8, !tbaa !5
  %974 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %973, i32 0, i32 0
  %975 = load i32, ptr %974, align 8, !tbaa !21
  %976 = load ptr, ptr %8, align 8, !tbaa !5
  %977 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %976, i32 0, i32 5
  %978 = load i32, ptr %977, align 4, !tbaa !36
  %979 = load i32, ptr %19, align 4, !tbaa !9
  %980 = load ptr, ptr %10, align 8, !tbaa !5
  %981 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %980, i32 0, i32 5
  %982 = load i32, ptr %981, align 1, !tbaa !37
  %983 = mul i32 %979, %982
  %984 = load i32, ptr %20, align 4, !tbaa !9
  %985 = load ptr, ptr %9, align 8, !tbaa !5
  %986 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %985, i32 0, i32 2
  %987 = load i32, ptr %986, align 8, !tbaa !11
  %988 = mul i32 %984, %987
  %989 = add i32 %983, %988
  %990 = load ptr, ptr %9, align 8, !tbaa !5
  %991 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %990, i32 0, i32 5
  %992 = load i32, ptr %991, align 4, !tbaa !38
  %993 = mul i32 %989, %992
  %994 = load ptr, ptr %9, align 8, !tbaa !5
  %995 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %994, i32 0, i32 0
  %996 = load i32, ptr %995, align 8, !tbaa !21
  %997 = icmp eq i32 %996, 1053
  %998 = zext i1 %997 to i64
  %999 = select i1 %997, i32 121, i32 122
  %1000 = trunc i32 %999 to i8
  call void @libxsmm_x86_instruction_vec_move(ptr noundef %972, i32 noundef %975, i32 noundef -528017809, i32 noundef %978, i32 noundef 127, i32 noundef 0, i32 noundef %993, i8 noundef signext %1000, i32 noundef 0, i32 noundef 2, i32 noundef 0, i32 noundef 1)
  br label %1032

1001:                                             ; preds = %961
  %1002 = load ptr, ptr %7, align 8, !tbaa !5
  %1003 = load ptr, ptr %9, align 8, !tbaa !5
  %1004 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1003, i32 0, i32 0
  %1005 = load i32, ptr %1004, align 8, !tbaa !21
  %1006 = load i32, ptr %18, align 4, !tbaa !9
  %1007 = load ptr, ptr %8, align 8, !tbaa !5
  %1008 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %1007, i32 0, i32 5
  %1009 = load i32, ptr %1008, align 4, !tbaa !36
  %1010 = load i32, ptr %19, align 4, !tbaa !9
  %1011 = load ptr, ptr %10, align 8, !tbaa !5
  %1012 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %1011, i32 0, i32 5
  %1013 = load i32, ptr %1012, align 1, !tbaa !37
  %1014 = mul i32 %1010, %1013
  %1015 = load i32, ptr %20, align 4, !tbaa !9
  %1016 = load ptr, ptr %9, align 8, !tbaa !5
  %1017 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1016, i32 0, i32 2
  %1018 = load i32, ptr %1017, align 8, !tbaa !11
  %1019 = mul i32 %1015, %1018
  %1020 = add i32 %1014, %1019
  %1021 = load ptr, ptr %9, align 8, !tbaa !5
  %1022 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1021, i32 0, i32 5
  %1023 = load i32, ptr %1022, align 4, !tbaa !38
  %1024 = mul i32 %1020, %1023
  %1025 = load ptr, ptr %9, align 8, !tbaa !5
  %1026 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1025, i32 0, i32 0
  %1027 = load i32, ptr %1026, align 8, !tbaa !21
  %1028 = icmp eq i32 %1027, 1053
  %1029 = zext i1 %1028 to i64
  %1030 = select i1 %1028, i32 120, i32 121
  %1031 = trunc i32 %1030 to i8
  call void @libxsmm_x86_instruction_vec_move(ptr noundef %1002, i32 noundef %1005, i32 noundef %1006, i32 noundef %1009, i32 noundef 127, i32 noundef 0, i32 noundef %1024, i8 noundef signext %1031, i32 noundef 0, i32 noundef 0, i32 noundef 0, i32 noundef 1)
  br label %1032

1032:                                             ; preds = %1001, %971
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #4
  br label %1033

1033:                                             ; preds = %1032
  %1034 = load i32, ptr %20, align 4, !tbaa !9
  %1035 = add i32 %1034, 1
  store i32 %1035, ptr %20, align 4, !tbaa !9
  br label %870, !llvm.loop !45

1036:                                             ; preds = %870
  br label %1313

1037:                                             ; preds = %861
  br label %1038

1038:                                             ; preds = %1178, %1037
  %1039 = load i32, ptr %20, align 4, !tbaa !9
  %1040 = load i32, ptr %41, align 4, !tbaa !9
  %1041 = icmp ult i32 %1039, %1040
  br i1 %1041, label %1042, label %1181

1042:                                             ; preds = %1038
  call void @llvm.lifetime.start.p0(i64 4, ptr %46) #4
  %1043 = load i32, ptr %17, align 4, !tbaa !9
  %1044 = load i32, ptr %20, align 4, !tbaa !9
  %1045 = add i32 %1043, %1044
  %1046 = load i32, ptr %16, align 4, !tbaa !9
  %1047 = load i32, ptr %19, align 4, !tbaa !9
  %1048 = mul i32 %1046, %1047
  %1049 = add i32 %1045, %1048
  store i32 %1049, ptr %46, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %47) #4
  %1050 = load i32, ptr %17, align 4, !tbaa !9
  %1051 = load i32, ptr %20, align 4, !tbaa !9
  %1052 = add i32 %1050, %1051
  %1053 = add i32 %1052, 1
  %1054 = load i32, ptr %16, align 4, !tbaa !9
  %1055 = load i32, ptr %19, align 4, !tbaa !9
  %1056 = mul i32 %1054, %1055
  %1057 = add i32 %1053, %1056
  store i32 %1057, ptr %47, align 4, !tbaa !9
  %1058 = load ptr, ptr %9, align 8, !tbaa !5
  %1059 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1058, i32 0, i32 33
  %1060 = load i32, ptr %1059, align 4, !tbaa !28
  %1061 = icmp eq i32 %1060, 1
  br i1 %1061, label %1062, label %1075

1062:                                             ; preds = %1042
  call void @llvm.lifetime.start.p0(i64 4, ptr %48) #4
  store i32 0, ptr %48, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %49) #4
  store i32 1, ptr %49, align 4, !tbaa !9
  %1063 = load ptr, ptr %7, align 8, !tbaa !5
  %1064 = load ptr, ptr %22, align 8, !tbaa !5
  %1065 = load i32, ptr %37, align 4, !tbaa !9
  %1066 = load i32, ptr %46, align 4, !tbaa !9
  %1067 = load i32, ptr %48, align 4, !tbaa !9
  call void @libxsmm_generator_gemm_apply_sigmoid_to_vreg_from_scratch(ptr noundef %1063, ptr noundef %1064, i32 noundef %1065, i32 noundef %1066, i32 noundef %1067)
  %1068 = load ptr, ptr %7, align 8, !tbaa !5
  %1069 = load ptr, ptr %22, align 8, !tbaa !5
  %1070 = load i32, ptr %37, align 4, !tbaa !9
  %1071 = load i32, ptr %47, align 4, !tbaa !9
  %1072 = load i32, ptr %49, align 4, !tbaa !9
  call void @libxsmm_generator_gemm_apply_sigmoid_to_vreg_from_scratch(ptr noundef %1068, ptr noundef %1069, i32 noundef %1070, i32 noundef %1071, i32 noundef %1072)
  %1073 = load i32, ptr %48, align 4, !tbaa !9
  store i32 %1073, ptr %46, align 4, !tbaa !9
  %1074 = load i32, ptr %49, align 4, !tbaa !9
  store i32 %1074, ptr %47, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 4, ptr %49) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %48) #4
  br label %1075

1075:                                             ; preds = %1062, %1042
  %1076 = load ptr, ptr %7, align 8, !tbaa !5
  %1077 = load ptr, ptr %9, align 8, !tbaa !5
  %1078 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1077, i32 0, i32 21
  %1079 = load i8, ptr %1078, align 4, !tbaa !32
  %1080 = load i32, ptr %46, align 4, !tbaa !9
  %1081 = load i32, ptr %47, align 4, !tbaa !9
  call void @libxsmm_x86_instruction_vec_compute_3reg(ptr noundef %1076, i32 noundef -267966862, i8 noundef signext %1079, i32 noundef %1080, i32 noundef %1081, i32 noundef 0)
  %1082 = load ptr, ptr %9, align 8, !tbaa !5
  %1083 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1082, i32 0, i32 31
  %1084 = load i32, ptr %1083, align 4, !tbaa !26
  %1085 = icmp eq i32 %1084, 1
  br i1 %1085, label %1091, label %1086

1086:                                             ; preds = %1075
  %1087 = load ptr, ptr %9, align 8, !tbaa !5
  %1088 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1087, i32 0, i32 30
  %1089 = load i32, ptr %1088, align 8, !tbaa !27
  %1090 = icmp eq i32 %1089, 1
  br i1 %1090, label %1091, label %1147

1091:                                             ; preds = %1086, %1075
  call void @llvm.lifetime.start.p0(i64 4, ptr %50) #4
  %1092 = load ptr, ptr %9, align 8, !tbaa !5
  %1093 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1092, i32 0, i32 11
  %1094 = load i32, ptr %1093, align 4, !tbaa !29
  %1095 = icmp ne i32 %1094, 0
  br i1 %1095, label %1096, label %1105

1096:                                             ; preds = %1091
  %1097 = load i32, ptr %20, align 4, !tbaa !9
  %1098 = load i32, ptr %16, align 4, !tbaa !9
  %1099 = sub i32 %1098, 1
  %1100 = icmp eq i32 %1097, %1099
  br i1 %1100, label %1101, label %1105

1101:                                             ; preds = %1096
  %1102 = load ptr, ptr %9, align 8, !tbaa !5
  %1103 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1102, i32 0, i32 11
  %1104 = load i32, ptr %1103, align 4, !tbaa !29
  br label %1106

1105:                                             ; preds = %1096, %1091
  br label %1106

1106:                                             ; preds = %1105, %1101
  %1107 = phi i32 [ %1104, %1101 ], [ 0, %1105 ]
  store i32 %1107, ptr %50, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %51) #4
  %1108 = load ptr, ptr %9, align 8, !tbaa !5
  %1109 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1108, i32 0, i32 0
  %1110 = load i32, ptr %1109, align 8, !tbaa !21
  %1111 = icmp ult i32 %1110, 1101
  br i1 %1111, label %1112, label %1124

1112:                                             ; preds = %1106
  %1113 = load i32, ptr %19, align 4, !tbaa !9
  %1114 = load ptr, ptr %10, align 8, !tbaa !5
  %1115 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %1114, i32 0, i32 30
  %1116 = load i32, ptr %1115, align 1, !tbaa !30
  %1117 = mul i32 %1113, %1116
  %1118 = udiv i32 %1117, 8
  %1119 = load i32, ptr %20, align 4, !tbaa !9
  %1120 = mul i32 %1119, 8
  %1121 = add i32 %1120, 7
  %1122 = udiv i32 %1121, 8
  %1123 = add i32 %1118, %1122
  br label %1136

1124:                                             ; preds = %1106
  %1125 = load i32, ptr %19, align 4, !tbaa !9
  %1126 = load ptr, ptr %10, align 8, !tbaa !5
  %1127 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %1126, i32 0, i32 30
  %1128 = load i32, ptr %1127, align 1, !tbaa !30
  %1129 = mul i32 %1125, %1128
  %1130 = udiv i32 %1129, 8
  %1131 = load i32, ptr %20, align 4, !tbaa !9
  %1132 = mul i32 %1131, 16
  %1133 = add i32 %1132, 7
  %1134 = udiv i32 %1133, 8
  %1135 = add i32 %1130, %1134
  br label %1136

1136:                                             ; preds = %1124, %1112
  %1137 = phi i32 [ %1123, %1112 ], [ %1135, %1124 ]
  store i32 %1137, ptr %51, align 4, !tbaa !9
  %1138 = load ptr, ptr %7, align 8, !tbaa !5
  %1139 = load ptr, ptr %9, align 8, !tbaa !5
  %1140 = load ptr, ptr %9, align 8, !tbaa !5
  %1141 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1140, i32 0, i32 30
  %1142 = load i32, ptr %1141, align 8, !tbaa !27
  %1143 = load i32, ptr %36, align 4, !tbaa !9
  %1144 = load i32, ptr %51, align 4, !tbaa !9
  %1145 = load i32, ptr %38, align 4, !tbaa !9
  %1146 = load i32, ptr %50, align 4, !tbaa !9
  call void @libxsmm_generator_gemm_apply_relu_to_vreg(ptr noundef %1138, ptr noundef %1139, i32 noundef 1, i32 noundef 0, i32 noundef %1142, i32 noundef %1143, i32 noundef %1144, i32 noundef 0, i32 noundef 127, i32 noundef %1145, i32 noundef 2, i32 noundef %1146, i32 noundef 0)
  call void @llvm.lifetime.end.p0(i64 4, ptr %51) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %50) #4
  br label %1147

1147:                                             ; preds = %1136, %1086
  %1148 = load ptr, ptr %7, align 8, !tbaa !5
  %1149 = load ptr, ptr %9, align 8, !tbaa !5
  %1150 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1149, i32 0, i32 0
  %1151 = load i32, ptr %1150, align 8, !tbaa !21
  %1152 = load i32, ptr %18, align 4, !tbaa !9
  %1153 = load ptr, ptr %8, align 8, !tbaa !5
  %1154 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %1153, i32 0, i32 5
  %1155 = load i32, ptr %1154, align 4, !tbaa !36
  %1156 = load i32, ptr %19, align 4, !tbaa !9
  %1157 = load ptr, ptr %10, align 8, !tbaa !5
  %1158 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %1157, i32 0, i32 5
  %1159 = load i32, ptr %1158, align 1, !tbaa !37
  %1160 = mul i32 %1156, %1159
  %1161 = load i32, ptr %20, align 4, !tbaa !9
  %1162 = load ptr, ptr %9, align 8, !tbaa !5
  %1163 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1162, i32 0, i32 2
  %1164 = load i32, ptr %1163, align 8, !tbaa !11
  %1165 = mul i32 %1161, %1164
  %1166 = add i32 %1160, %1165
  %1167 = load ptr, ptr %9, align 8, !tbaa !5
  %1168 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1167, i32 0, i32 5
  %1169 = load i32, ptr %1168, align 4, !tbaa !38
  %1170 = mul i32 %1166, %1169
  %1171 = load ptr, ptr %9, align 8, !tbaa !5
  %1172 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1171, i32 0, i32 0
  %1173 = load i32, ptr %1172, align 8, !tbaa !21
  %1174 = icmp eq i32 %1173, 1053
  %1175 = zext i1 %1174 to i64
  %1176 = select i1 %1174, i32 121, i32 122
  %1177 = trunc i32 %1176 to i8
  call void @libxsmm_x86_instruction_vec_move(ptr noundef %1148, i32 noundef %1151, i32 noundef %1152, i32 noundef %1155, i32 noundef 127, i32 noundef 0, i32 noundef %1170, i8 noundef signext %1177, i32 noundef 0, i32 noundef 0, i32 noundef 0, i32 noundef 1)
  call void @llvm.lifetime.end.p0(i64 4, ptr %47) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %46) #4
  br label %1178

1178:                                             ; preds = %1147
  %1179 = load i32, ptr %20, align 4, !tbaa !9
  %1180 = add i32 %1179, 2
  store i32 %1180, ptr %20, align 4, !tbaa !9
  br label %1038, !llvm.loop !46

1181:                                             ; preds = %1038
  br label %1182

1182:                                             ; preds = %1309, %1181
  %1183 = load i32, ptr %20, align 4, !tbaa !9
  %1184 = load i32, ptr %16, align 4, !tbaa !9
  %1185 = icmp ult i32 %1183, %1184
  br i1 %1185, label %1186, label %1312

1186:                                             ; preds = %1182
  call void @llvm.lifetime.start.p0(i64 4, ptr %52) #4
  %1187 = load i32, ptr %17, align 4, !tbaa !9
  %1188 = load i32, ptr %20, align 4, !tbaa !9
  %1189 = add i32 %1187, %1188
  %1190 = load i32, ptr %16, align 4, !tbaa !9
  %1191 = load i32, ptr %19, align 4, !tbaa !9
  %1192 = mul i32 %1190, %1191
  %1193 = add i32 %1189, %1192
  store i32 %1193, ptr %52, align 4, !tbaa !9
  %1194 = load ptr, ptr %9, align 8, !tbaa !5
  %1195 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1194, i32 0, i32 31
  %1196 = load i32, ptr %1195, align 4, !tbaa !26
  %1197 = icmp eq i32 %1196, 1
  br i1 %1197, label %1203, label %1198

1198:                                             ; preds = %1186
  %1199 = load ptr, ptr %9, align 8, !tbaa !5
  %1200 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1199, i32 0, i32 30
  %1201 = load i32, ptr %1200, align 8, !tbaa !27
  %1202 = icmp eq i32 %1201, 1
  br i1 %1202, label %1203, label %1260

1203:                                             ; preds = %1198, %1186
  call void @llvm.lifetime.start.p0(i64 4, ptr %53) #4
  %1204 = load ptr, ptr %9, align 8, !tbaa !5
  %1205 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1204, i32 0, i32 11
  %1206 = load i32, ptr %1205, align 4, !tbaa !29
  %1207 = icmp ne i32 %1206, 0
  br i1 %1207, label %1208, label %1217

1208:                                             ; preds = %1203
  %1209 = load i32, ptr %20, align 4, !tbaa !9
  %1210 = load i32, ptr %16, align 4, !tbaa !9
  %1211 = sub i32 %1210, 1
  %1212 = icmp eq i32 %1209, %1211
  br i1 %1212, label %1213, label %1217

1213:                                             ; preds = %1208
  %1214 = load ptr, ptr %9, align 8, !tbaa !5
  %1215 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1214, i32 0, i32 11
  %1216 = load i32, ptr %1215, align 4, !tbaa !29
  br label %1218

1217:                                             ; preds = %1208, %1203
  br label %1218

1218:                                             ; preds = %1217, %1213
  %1219 = phi i32 [ %1216, %1213 ], [ 0, %1217 ]
  store i32 %1219, ptr %53, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %54) #4
  %1220 = load ptr, ptr %9, align 8, !tbaa !5
  %1221 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1220, i32 0, i32 0
  %1222 = load i32, ptr %1221, align 8, !tbaa !21
  %1223 = icmp ult i32 %1222, 1101
  br i1 %1223, label %1224, label %1236

1224:                                             ; preds = %1218
  %1225 = load i32, ptr %19, align 4, !tbaa !9
  %1226 = load ptr, ptr %10, align 8, !tbaa !5
  %1227 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %1226, i32 0, i32 30
  %1228 = load i32, ptr %1227, align 1, !tbaa !30
  %1229 = mul i32 %1225, %1228
  %1230 = udiv i32 %1229, 8
  %1231 = load i32, ptr %20, align 4, !tbaa !9
  %1232 = mul i32 %1231, 8
  %1233 = add i32 %1232, 7
  %1234 = udiv i32 %1233, 8
  %1235 = add i32 %1230, %1234
  br label %1248

1236:                                             ; preds = %1218
  %1237 = load i32, ptr %19, align 4, !tbaa !9
  %1238 = load ptr, ptr %10, align 8, !tbaa !5
  %1239 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %1238, i32 0, i32 30
  %1240 = load i32, ptr %1239, align 1, !tbaa !30
  %1241 = mul i32 %1237, %1240
  %1242 = udiv i32 %1241, 8
  %1243 = load i32, ptr %20, align 4, !tbaa !9
  %1244 = mul i32 %1243, 16
  %1245 = add i32 %1244, 7
  %1246 = udiv i32 %1245, 8
  %1247 = add i32 %1242, %1246
  br label %1248

1248:                                             ; preds = %1236, %1224
  %1249 = phi i32 [ %1235, %1224 ], [ %1247, %1236 ]
  store i32 %1249, ptr %54, align 4, !tbaa !9
  %1250 = load ptr, ptr %7, align 8, !tbaa !5
  %1251 = load ptr, ptr %9, align 8, !tbaa !5
  %1252 = load i32, ptr %52, align 4, !tbaa !9
  %1253 = load ptr, ptr %9, align 8, !tbaa !5
  %1254 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1253, i32 0, i32 30
  %1255 = load i32, ptr %1254, align 8, !tbaa !27
  %1256 = load i32, ptr %36, align 4, !tbaa !9
  %1257 = load i32, ptr %54, align 4, !tbaa !9
  %1258 = load i32, ptr %38, align 4, !tbaa !9
  %1259 = load i32, ptr %53, align 4, !tbaa !9
  call void @libxsmm_generator_gemm_apply_relu_to_vreg(ptr noundef %1250, ptr noundef %1251, i32 noundef 1, i32 noundef %1252, i32 noundef %1255, i32 noundef %1256, i32 noundef %1257, i32 noundef 1, i32 noundef 127, i32 noundef %1258, i32 noundef 2, i32 noundef %1259, i32 noundef 0)
  call void @llvm.lifetime.end.p0(i64 4, ptr %54) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %53) #4
  br label %1273

1260:                                             ; preds = %1198
  %1261 = load ptr, ptr %9, align 8, !tbaa !5
  %1262 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1261, i32 0, i32 33
  %1263 = load i32, ptr %1262, align 4, !tbaa !28
  %1264 = icmp eq i32 %1263, 1
  br i1 %1264, label %1265, label %1272

1265:                                             ; preds = %1260
  call void @llvm.lifetime.start.p0(i64 4, ptr %55) #4
  store i32 0, ptr %55, align 4, !tbaa !9
  %1266 = load ptr, ptr %7, align 8, !tbaa !5
  %1267 = load ptr, ptr %22, align 8, !tbaa !5
  %1268 = load i32, ptr %37, align 4, !tbaa !9
  %1269 = load i32, ptr %52, align 4, !tbaa !9
  %1270 = load i32, ptr %55, align 4, !tbaa !9
  call void @libxsmm_generator_gemm_apply_sigmoid_to_vreg_from_scratch(ptr noundef %1266, ptr noundef %1267, i32 noundef %1268, i32 noundef %1269, i32 noundef %1270)
  %1271 = load i32, ptr %55, align 4, !tbaa !9
  store i32 %1271, ptr %52, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 4, ptr %55) #4
  br label %1272

1272:                                             ; preds = %1265, %1260
  br label %1273

1273:                                             ; preds = %1272, %1248
  %1274 = load ptr, ptr %7, align 8, !tbaa !5
  %1275 = load ptr, ptr %9, align 8, !tbaa !5
  %1276 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1275, i32 0, i32 21
  %1277 = load i8, ptr %1276, align 4, !tbaa !32
  %1278 = load i32, ptr %52, align 4, !tbaa !9
  call void @libxsmm_x86_instruction_vec_compute_2reg(ptr noundef %1274, i32 noundef 537273970, i8 noundef signext %1277, i32 noundef %1278, i32 noundef 0)
  %1279 = load ptr, ptr %7, align 8, !tbaa !5
  %1280 = load ptr, ptr %9, align 8, !tbaa !5
  %1281 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1280, i32 0, i32 0
  %1282 = load i32, ptr %1281, align 8, !tbaa !21
  %1283 = load i32, ptr %18, align 4, !tbaa !9
  %1284 = load ptr, ptr %8, align 8, !tbaa !5
  %1285 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %1284, i32 0, i32 5
  %1286 = load i32, ptr %1285, align 4, !tbaa !36
  %1287 = load i32, ptr %19, align 4, !tbaa !9
  %1288 = load ptr, ptr %10, align 8, !tbaa !5
  %1289 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %1288, i32 0, i32 5
  %1290 = load i32, ptr %1289, align 1, !tbaa !37
  %1291 = mul i32 %1287, %1290
  %1292 = load i32, ptr %20, align 4, !tbaa !9
  %1293 = load ptr, ptr %9, align 8, !tbaa !5
  %1294 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1293, i32 0, i32 2
  %1295 = load i32, ptr %1294, align 8, !tbaa !11
  %1296 = mul i32 %1292, %1295
  %1297 = add i32 %1291, %1296
  %1298 = load ptr, ptr %9, align 8, !tbaa !5
  %1299 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1298, i32 0, i32 5
  %1300 = load i32, ptr %1299, align 4, !tbaa !38
  %1301 = mul i32 %1297, %1300
  %1302 = load ptr, ptr %9, align 8, !tbaa !5
  %1303 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1302, i32 0, i32 0
  %1304 = load i32, ptr %1303, align 8, !tbaa !21
  %1305 = icmp eq i32 %1304, 1053
  %1306 = zext i1 %1305 to i64
  %1307 = select i1 %1305, i32 120, i32 121
  %1308 = trunc i32 %1307 to i8
  call void @libxsmm_x86_instruction_vec_move(ptr noundef %1279, i32 noundef %1282, i32 noundef %1283, i32 noundef %1286, i32 noundef 127, i32 noundef 0, i32 noundef %1301, i8 noundef signext %1308, i32 noundef 0, i32 noundef 0, i32 noundef 0, i32 noundef 1)
  call void @llvm.lifetime.end.p0(i64 4, ptr %52) #4
  br label %1309

1309:                                             ; preds = %1273
  %1310 = load i32, ptr %20, align 4, !tbaa !9
  %1311 = add i32 %1310, 1
  store i32 %1311, ptr %20, align 4, !tbaa !9
  br label %1182, !llvm.loop !47

1312:                                             ; preds = %1182
  br label %1313

1313:                                             ; preds = %1312, %1036
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #4
  br label %1314

1314:                                             ; preds = %1313
  %1315 = load i32, ptr %19, align 4, !tbaa !9
  %1316 = add i32 %1315, 1
  store i32 %1316, ptr %19, align 4, !tbaa !9
  br label %857, !llvm.loop !48

1317:                                             ; preds = %857
  %1318 = load ptr, ptr %9, align 8, !tbaa !5
  %1319 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1318, i32 0, i32 31
  %1320 = load i32, ptr %1319, align 4, !tbaa !26
  %1321 = icmp eq i32 %1320, 1
  br i1 %1321, label %1327, label %1322

1322:                                             ; preds = %1317
  %1323 = load ptr, ptr %9, align 8, !tbaa !5
  %1324 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1323, i32 0, i32 30
  %1325 = load i32, ptr %1324, align 8, !tbaa !27
  %1326 = icmp eq i32 %1325, 1
  br i1 %1326, label %1327, label %1334

1327:                                             ; preds = %1322, %1317
  %1328 = load ptr, ptr %7, align 8, !tbaa !5
  %1329 = load ptr, ptr %9, align 8, !tbaa !5
  %1330 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1329, i32 0, i32 30
  %1331 = load i32, ptr %1330, align 8, !tbaa !27
  %1332 = load i32, ptr %36, align 4, !tbaa !9
  %1333 = load i32, ptr %38, align 4, !tbaa !9
  call void @libxsmm_generator_gemm_cleanup_relu_fusion(ptr noundef %1328, i32 noundef %1331, i32 noundef %1332, i32 noundef 127, i32 noundef %1333)
  br label %1344

1334:                                             ; preds = %1322
  %1335 = load ptr, ptr %9, align 8, !tbaa !5
  %1336 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1335, i32 0, i32 33
  %1337 = load i32, ptr %1336, align 4, !tbaa !28
  %1338 = icmp eq i32 %1337, 1
  br i1 %1338, label %1339, label %1343

1339:                                             ; preds = %1334
  %1340 = load ptr, ptr %7, align 8, !tbaa !5
  %1341 = load i32, ptr %37, align 4, !tbaa !9
  %1342 = load i32, ptr %38, align 4, !tbaa !9
  call void @libxsmm_generator_gemm_cleanup_sigmoid_fusion(ptr noundef %1340, i32 noundef %1341, i32 noundef %1342)
  br label %1343

1343:                                             ; preds = %1339, %1334
  br label %1344

1344:                                             ; preds = %1343, %1327
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #4
  br label %2888

1345:                                             ; preds = %809, %803, %798, %793
  %1346 = load ptr, ptr %9, align 8, !tbaa !5
  %1347 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1346, i32 0, i32 0
  %1348 = load i32, ptr %1347, align 8, !tbaa !21
  %1349 = icmp uge i32 %1348, 1051
  br i1 %1349, label %1350, label %1391

1350:                                             ; preds = %1345
  %1351 = load ptr, ptr %9, align 8, !tbaa !5
  %1352 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1351, i32 0, i32 0
  %1353 = load i32, ptr %1352, align 8, !tbaa !21
  %1354 = icmp ule i32 %1353, 1999
  br i1 %1354, label %1355, label %1391

1355:                                             ; preds = %1350
  %1356 = load ptr, ptr %10, align 8, !tbaa !5
  %1357 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %1356, i32 0, i32 8
  %1358 = getelementptr inbounds [3 x i8], ptr %1357, i64 0, i64 0
  %1359 = call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef %1358)
  %1360 = icmp eq i32 4, %1359
  br i1 %1360, label %1361, label %1367

1361:                                             ; preds = %1355
  %1362 = load ptr, ptr %10, align 8, !tbaa !5
  %1363 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %1362, i32 0, i32 8
  %1364 = getelementptr inbounds [3 x i8], ptr %1363, i64 0, i64 0
  %1365 = call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef %1364)
  %1366 = icmp eq i32 4, %1365
  br i1 %1366, label %1437, label %1367

1367:                                             ; preds = %1361, %1355
  %1368 = load ptr, ptr %10, align 8, !tbaa !5
  %1369 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %1368, i32 0, i32 8
  %1370 = getelementptr inbounds [3 x i8], ptr %1369, i64 0, i64 0
  %1371 = call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef %1370)
  %1372 = icmp eq i32 2, %1371
  br i1 %1372, label %1373, label %1379

1373:                                             ; preds = %1367
  %1374 = load ptr, ptr %10, align 8, !tbaa !5
  %1375 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %1374, i32 0, i32 8
  %1376 = getelementptr inbounds [3 x i8], ptr %1375, i64 0, i64 0
  %1377 = call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef %1376)
  %1378 = icmp eq i32 4, %1377
  br i1 %1378, label %1437, label %1379

1379:                                             ; preds = %1373, %1367
  %1380 = load ptr, ptr %10, align 8, !tbaa !5
  %1381 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %1380, i32 0, i32 8
  %1382 = getelementptr inbounds [3 x i8], ptr %1381, i64 0, i64 0
  %1383 = call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef %1382)
  %1384 = icmp eq i32 1, %1383
  br i1 %1384, label %1385, label %1391

1385:                                             ; preds = %1379
  %1386 = load ptr, ptr %10, align 8, !tbaa !5
  %1387 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %1386, i32 0, i32 8
  %1388 = getelementptr inbounds [3 x i8], ptr %1387, i64 0, i64 0
  %1389 = call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef %1388)
  %1390 = icmp eq i32 4, %1389
  br i1 %1390, label %1437, label %1391

1391:                                             ; preds = %1385, %1379, %1350, %1345
  %1392 = load ptr, ptr %9, align 8, !tbaa !5
  %1393 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1392, i32 0, i32 0
  %1394 = load i32, ptr %1393, align 8, !tbaa !21
  %1395 = icmp uge i32 %1394, 1051
  br i1 %1395, label %1396, label %1835

1396:                                             ; preds = %1391
  %1397 = load ptr, ptr %9, align 8, !tbaa !5
  %1398 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1397, i32 0, i32 0
  %1399 = load i32, ptr %1398, align 8, !tbaa !21
  %1400 = icmp ule i32 %1399, 1999
  br i1 %1400, label %1401, label %1835

1401:                                             ; preds = %1396
  %1402 = load ptr, ptr %10, align 8, !tbaa !5
  %1403 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %1402, i32 0, i32 8
  %1404 = getelementptr inbounds [3 x i8], ptr %1403, i64 0, i64 0
  %1405 = call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef %1404)
  %1406 = icmp eq i32 5, %1405
  br i1 %1406, label %1407, label %1413

1407:                                             ; preds = %1401
  %1408 = load ptr, ptr %10, align 8, !tbaa !5
  %1409 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %1408, i32 0, i32 8
  %1410 = getelementptr inbounds [3 x i8], ptr %1409, i64 0, i64 0
  %1411 = call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef %1410)
  %1412 = icmp eq i32 5, %1411
  br i1 %1412, label %1437, label %1413

1413:                                             ; preds = %1407, %1401
  %1414 = load ptr, ptr %10, align 8, !tbaa !5
  %1415 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %1414, i32 0, i32 8
  %1416 = getelementptr inbounds [3 x i8], ptr %1415, i64 0, i64 0
  %1417 = call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef %1416)
  %1418 = icmp eq i32 2, %1417
  br i1 %1418, label %1419, label %1425

1419:                                             ; preds = %1413
  %1420 = load ptr, ptr %10, align 8, !tbaa !5
  %1421 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %1420, i32 0, i32 8
  %1422 = getelementptr inbounds [3 x i8], ptr %1421, i64 0, i64 0
  %1423 = call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef %1422)
  %1424 = icmp eq i32 5, %1423
  br i1 %1424, label %1437, label %1425

1425:                                             ; preds = %1419, %1413
  %1426 = load ptr, ptr %10, align 8, !tbaa !5
  %1427 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %1426, i32 0, i32 8
  %1428 = getelementptr inbounds [3 x i8], ptr %1427, i64 0, i64 0
  %1429 = call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef %1428)
  %1430 = icmp eq i32 1, %1429
  br i1 %1430, label %1431, label %1835

1431:                                             ; preds = %1425
  %1432 = load ptr, ptr %10, align 8, !tbaa !5
  %1433 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %1432, i32 0, i32 8
  %1434 = getelementptr inbounds [3 x i8], ptr %1433, i64 0, i64 0
  %1435 = call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef %1434)
  %1436 = icmp eq i32 5, %1435
  br i1 %1436, label %1437, label %1835

1437:                                             ; preds = %1431, %1419, %1407, %1385, %1373, %1361
  call void @llvm.lifetime.start.p0(i64 4, ptr %56) #4
  %1438 = load ptr, ptr %8, align 8, !tbaa !5
  %1439 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %1438, i32 0, i32 24
  %1440 = load i32, ptr %1439, align 4, !tbaa !22
  store i32 %1440, ptr %56, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %57) #4
  %1441 = load ptr, ptr %8, align 8, !tbaa !5
  %1442 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %1441, i32 0, i32 24
  %1443 = load i32, ptr %1442, align 4, !tbaa !22
  store i32 %1443, ptr %57, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %58) #4
  %1444 = load ptr, ptr %8, align 8, !tbaa !5
  %1445 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %1444, i32 0, i32 23
  %1446 = load i32, ptr %1445, align 4, !tbaa !24
  store i32 %1446, ptr %58, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %59) #4
  store i32 1, ptr %59, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %60) #4
  store i32 0, ptr %60, align 4, !tbaa !9
  %1447 = load ptr, ptr %9, align 8, !tbaa !5
  %1448 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1447, i32 0, i32 31
  %1449 = load i32, ptr %1448, align 4, !tbaa !26
  %1450 = icmp eq i32 %1449, 1
  br i1 %1450, label %1456, label %1451

1451:                                             ; preds = %1437
  %1452 = load ptr, ptr %9, align 8, !tbaa !5
  %1453 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1452, i32 0, i32 30
  %1454 = load i32, ptr %1453, align 8, !tbaa !27
  %1455 = icmp eq i32 %1454, 1
  br i1 %1455, label %1456, label %1464

1456:                                             ; preds = %1451, %1437
  %1457 = load ptr, ptr %7, align 8, !tbaa !5
  %1458 = load ptr, ptr %9, align 8, !tbaa !5
  %1459 = load ptr, ptr %9, align 8, !tbaa !5
  %1460 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1459, i32 0, i32 30
  %1461 = load i32, ptr %1460, align 8, !tbaa !27
  %1462 = load i32, ptr %56, align 4, !tbaa !9
  %1463 = load i32, ptr %58, align 4, !tbaa !9
  call void @libxsmm_generator_gemm_prepare_relu_fusion(ptr noundef %1457, ptr noundef %1458, i32 noundef 0, i32 noundef %1461, i32 noundef %1462, i32 noundef 127, i32 noundef %1463)
  br label %1478

1464:                                             ; preds = %1451
  %1465 = load ptr, ptr %9, align 8, !tbaa !5
  %1466 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1465, i32 0, i32 33
  %1467 = load i32, ptr %1466, align 4, !tbaa !28
  %1468 = icmp eq i32 %1467, 1
  br i1 %1468, label %1469, label %1477

1469:                                             ; preds = %1464
  %1470 = load ptr, ptr %7, align 8, !tbaa !5
  %1471 = load ptr, ptr %22, align 8, !tbaa !5
  %1472 = load i32, ptr %17, align 4, !tbaa !9
  %1473 = load i32, ptr %16, align 4, !tbaa !9
  %1474 = load i32, ptr %12, align 4, !tbaa !9
  %1475 = load i32, ptr %57, align 4, !tbaa !9
  %1476 = load i32, ptr %58, align 4, !tbaa !9
  call void @libxsmm_generator_gemm_dump_2D_block_and_prepare_sigmoid_fusion(ptr noundef %1470, ptr noundef %1471, i32 noundef %1472, i32 noundef %1473, i32 noundef %1474, i32 noundef %1475, i32 noundef %1476)
  br label %1477

1477:                                             ; preds = %1469, %1464
  br label %1478

1478:                                             ; preds = %1477, %1456
  store i32 0, ptr %19, align 4, !tbaa !9
  br label %1479

1479:                                             ; preds = %1601, %1478
  %1480 = load i32, ptr %19, align 4, !tbaa !9
  %1481 = load i32, ptr %12, align 4, !tbaa !9
  %1482 = icmp ult i32 %1480, %1481
  br i1 %1482, label %1483, label %1604

1483:                                             ; preds = %1479
  store i32 0, ptr %20, align 4, !tbaa !9
  br label %1484

1484:                                             ; preds = %1597, %1483
  %1485 = load i32, ptr %20, align 4, !tbaa !9
  %1486 = load i32, ptr %16, align 4, !tbaa !9
  %1487 = icmp ult i32 %1485, %1486
  br i1 %1487, label %1488, label %1600

1488:                                             ; preds = %1484
  %1489 = load ptr, ptr %9, align 8, !tbaa !5
  %1490 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1489, i32 0, i32 31
  %1491 = load i32, ptr %1490, align 4, !tbaa !26
  %1492 = icmp eq i32 %1491, 1
  br i1 %1492, label %1498, label %1493

1493:                                             ; preds = %1488
  %1494 = load ptr, ptr %9, align 8, !tbaa !5
  %1495 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1494, i32 0, i32 30
  %1496 = load i32, ptr %1495, align 8, !tbaa !27
  %1497 = icmp eq i32 %1496, 1
  br i1 %1497, label %1498, label %1561

1498:                                             ; preds = %1493, %1488
  call void @llvm.lifetime.start.p0(i64 4, ptr %61) #4
  %1499 = load ptr, ptr %9, align 8, !tbaa !5
  %1500 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1499, i32 0, i32 11
  %1501 = load i32, ptr %1500, align 4, !tbaa !29
  %1502 = icmp ne i32 %1501, 0
  br i1 %1502, label %1503, label %1512

1503:                                             ; preds = %1498
  %1504 = load i32, ptr %20, align 4, !tbaa !9
  %1505 = load i32, ptr %16, align 4, !tbaa !9
  %1506 = sub i32 %1505, 1
  %1507 = icmp eq i32 %1504, %1506
  br i1 %1507, label %1508, label %1512

1508:                                             ; preds = %1503
  %1509 = load ptr, ptr %9, align 8, !tbaa !5
  %1510 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1509, i32 0, i32 11
  %1511 = load i32, ptr %1510, align 4, !tbaa !29
  br label %1513

1512:                                             ; preds = %1503, %1498
  br label %1513

1513:                                             ; preds = %1512, %1508
  %1514 = phi i32 [ %1511, %1508 ], [ 0, %1512 ]
  store i32 %1514, ptr %61, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %62) #4
  %1515 = load ptr, ptr %9, align 8, !tbaa !5
  %1516 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1515, i32 0, i32 0
  %1517 = load i32, ptr %1516, align 8, !tbaa !21
  %1518 = icmp ult i32 %1517, 1101
  br i1 %1518, label %1519, label %1531

1519:                                             ; preds = %1513
  %1520 = load i32, ptr %19, align 4, !tbaa !9
  %1521 = load ptr, ptr %10, align 8, !tbaa !5
  %1522 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %1521, i32 0, i32 30
  %1523 = load i32, ptr %1522, align 1, !tbaa !30
  %1524 = mul i32 %1520, %1523
  %1525 = udiv i32 %1524, 8
  %1526 = load i32, ptr %20, align 4, !tbaa !9
  %1527 = mul i32 %1526, 8
  %1528 = add i32 %1527, 7
  %1529 = udiv i32 %1528, 8
  %1530 = add i32 %1525, %1529
  br label %1543

1531:                                             ; preds = %1513
  %1532 = load i32, ptr %19, align 4, !tbaa !9
  %1533 = load ptr, ptr %10, align 8, !tbaa !5
  %1534 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %1533, i32 0, i32 30
  %1535 = load i32, ptr %1534, align 1, !tbaa !30
  %1536 = mul i32 %1532, %1535
  %1537 = udiv i32 %1536, 8
  %1538 = load i32, ptr %20, align 4, !tbaa !9
  %1539 = mul i32 %1538, 16
  %1540 = add i32 %1539, 7
  %1541 = udiv i32 %1540, 8
  %1542 = add i32 %1537, %1541
  br label %1543

1543:                                             ; preds = %1531, %1519
  %1544 = phi i32 [ %1530, %1519 ], [ %1542, %1531 ]
  store i32 %1544, ptr %62, align 4, !tbaa !9
  %1545 = load ptr, ptr %7, align 8, !tbaa !5
  %1546 = load ptr, ptr %9, align 8, !tbaa !5
  %1547 = load i32, ptr %17, align 4, !tbaa !9
  %1548 = load i32, ptr %20, align 4, !tbaa !9
  %1549 = add i32 %1547, %1548
  %1550 = load i32, ptr %16, align 4, !tbaa !9
  %1551 = load i32, ptr %19, align 4, !tbaa !9
  %1552 = mul i32 %1550, %1551
  %1553 = add i32 %1549, %1552
  %1554 = load ptr, ptr %9, align 8, !tbaa !5
  %1555 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1554, i32 0, i32 30
  %1556 = load i32, ptr %1555, align 8, !tbaa !27
  %1557 = load i32, ptr %56, align 4, !tbaa !9
  %1558 = load i32, ptr %62, align 4, !tbaa !9
  %1559 = load i32, ptr %58, align 4, !tbaa !9
  %1560 = load i32, ptr %61, align 4, !tbaa !9
  call void @libxsmm_generator_gemm_apply_relu_to_vreg(ptr noundef %1545, ptr noundef %1546, i32 noundef 0, i32 noundef %1553, i32 noundef %1556, i32 noundef %1557, i32 noundef %1558, i32 noundef 1, i32 noundef 127, i32 noundef %1559, i32 noundef 1, i32 noundef %1560, i32 noundef 0)
  call void @llvm.lifetime.end.p0(i64 4, ptr %62) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %61) #4
  br label %1596

1561:                                             ; preds = %1493
  %1562 = load ptr, ptr %9, align 8, !tbaa !5
  %1563 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1562, i32 0, i32 33
  %1564 = load i32, ptr %1563, align 4, !tbaa !28
  %1565 = icmp eq i32 %1564, 1
  br i1 %1565, label %1566, label %1595

1566:                                             ; preds = %1561
  call void @llvm.lifetime.start.p0(i64 4, ptr %63) #4
  store i32 0, ptr %63, align 4, !tbaa !9
  %1567 = load ptr, ptr %7, align 8, !tbaa !5
  %1568 = load ptr, ptr %22, align 8, !tbaa !5
  %1569 = load i32, ptr %57, align 4, !tbaa !9
  %1570 = load i32, ptr %17, align 4, !tbaa !9
  %1571 = load i32, ptr %20, align 4, !tbaa !9
  %1572 = add i32 %1570, %1571
  %1573 = load i32, ptr %16, align 4, !tbaa !9
  %1574 = load i32, ptr %19, align 4, !tbaa !9
  %1575 = mul i32 %1573, %1574
  %1576 = add i32 %1572, %1575
  %1577 = load i32, ptr %63, align 4, !tbaa !9
  call void @libxsmm_generator_gemm_apply_sigmoid_to_vreg_from_scratch(ptr noundef %1567, ptr noundef %1568, i32 noundef %1569, i32 noundef %1576, i32 noundef %1577)
  %1578 = load ptr, ptr %7, align 8, !tbaa !5
  %1579 = load ptr, ptr %9, align 8, !tbaa !5
  %1580 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1579, i32 0, i32 0
  %1581 = load i32, ptr %1580, align 8, !tbaa !21
  %1582 = load i32, ptr %57, align 4, !tbaa !9
  %1583 = load i32, ptr %17, align 4, !tbaa !9
  %1584 = load i32, ptr %20, align 4, !tbaa !9
  %1585 = add i32 %1583, %1584
  %1586 = load i32, ptr %16, align 4, !tbaa !9
  %1587 = load i32, ptr %19, align 4, !tbaa !9
  %1588 = mul i32 %1586, %1587
  %1589 = add i32 %1585, %1588
  %1590 = mul i32 %1589, 64
  %1591 = load ptr, ptr %9, align 8, !tbaa !5
  %1592 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1591, i32 0, i32 21
  %1593 = load i8, ptr %1592, align 4, !tbaa !32
  %1594 = load i32, ptr %63, align 4, !tbaa !9
  call void @libxsmm_x86_instruction_vec_move(ptr noundef %1578, i32 noundef %1581, i32 noundef 537138704, i32 noundef %1582, i32 noundef 127, i32 noundef 0, i32 noundef %1590, i8 noundef signext %1593, i32 noundef %1594, i32 noundef 0, i32 noundef 0, i32 noundef 1)
  call void @llvm.lifetime.end.p0(i64 4, ptr %63) #4
  br label %1595

1595:                                             ; preds = %1566, %1561
  br label %1596

1596:                                             ; preds = %1595, %1543
  br label %1597

1597:                                             ; preds = %1596
  %1598 = load i32, ptr %20, align 4, !tbaa !9
  %1599 = add i32 %1598, 1
  store i32 %1599, ptr %20, align 4, !tbaa !9
  br label %1484, !llvm.loop !49

1600:                                             ; preds = %1484
  br label %1601

1601:                                             ; preds = %1600
  %1602 = load i32, ptr %19, align 4, !tbaa !9
  %1603 = add i32 %1602, 1
  store i32 %1603, ptr %19, align 4, !tbaa !9
  br label %1479, !llvm.loop !50

1604:                                             ; preds = %1479
  %1605 = load ptr, ptr %9, align 8, !tbaa !5
  %1606 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1605, i32 0, i32 31
  %1607 = load i32, ptr %1606, align 4, !tbaa !26
  %1608 = icmp eq i32 %1607, 1
  br i1 %1608, label %1614, label %1609

1609:                                             ; preds = %1604
  %1610 = load ptr, ptr %9, align 8, !tbaa !5
  %1611 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1610, i32 0, i32 30
  %1612 = load i32, ptr %1611, align 8, !tbaa !27
  %1613 = icmp eq i32 %1612, 1
  br i1 %1613, label %1614, label %1621

1614:                                             ; preds = %1609, %1604
  %1615 = load ptr, ptr %7, align 8, !tbaa !5
  %1616 = load ptr, ptr %9, align 8, !tbaa !5
  %1617 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1616, i32 0, i32 30
  %1618 = load i32, ptr %1617, align 8, !tbaa !27
  %1619 = load i32, ptr %56, align 4, !tbaa !9
  %1620 = load i32, ptr %58, align 4, !tbaa !9
  call void @libxsmm_generator_gemm_cleanup_relu_fusion(ptr noundef %1615, i32 noundef %1618, i32 noundef %1619, i32 noundef 127, i32 noundef %1620)
  br label %1637

1621:                                             ; preds = %1609
  %1622 = load ptr, ptr %9, align 8, !tbaa !5
  %1623 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1622, i32 0, i32 33
  %1624 = load i32, ptr %1623, align 4, !tbaa !28
  %1625 = icmp eq i32 %1624, 1
  br i1 %1625, label %1626, label %1636

1626:                                             ; preds = %1621
  %1627 = load ptr, ptr %7, align 8, !tbaa !5
  %1628 = load ptr, ptr %9, align 8, !tbaa !5
  %1629 = load i32, ptr %57, align 4, !tbaa !9
  %1630 = load i32, ptr %17, align 4, !tbaa !9
  %1631 = load i32, ptr %16, align 4, !tbaa !9
  %1632 = load i32, ptr %12, align 4, !tbaa !9
  call void @libxsmm_generator_gemm_restore_2D_regblock_from_scratch(ptr noundef %1627, ptr noundef %1628, i32 noundef %1629, i32 noundef %1630, i32 noundef %1631, i32 noundef %1632)
  %1633 = load ptr, ptr %7, align 8, !tbaa !5
  %1634 = load i32, ptr %57, align 4, !tbaa !9
  %1635 = load i32, ptr %58, align 4, !tbaa !9
  call void @libxsmm_generator_gemm_cleanup_sigmoid_fusion(ptr noundef %1633, i32 noundef %1634, i32 noundef %1635)
  br label %1636

1636:                                             ; preds = %1626, %1621
  br label %1637

1637:                                             ; preds = %1636, %1614
  %1638 = load ptr, ptr %10, align 8, !tbaa !5
  %1639 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %1638, i32 0, i32 8
  %1640 = getelementptr inbounds [3 x i8], ptr %1639, i64 0, i64 0
  %1641 = call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef %1640)
  %1642 = icmp eq i32 4, %1641
  br i1 %1642, label %1643, label %1648

1643:                                             ; preds = %1637
  %1644 = load ptr, ptr %7, align 8, !tbaa !5
  %1645 = load ptr, ptr %8, align 8, !tbaa !5
  %1646 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %1645, i32 0, i32 24
  %1647 = load i32, ptr %1646, align 4, !tbaa !22
  call void @libxsmm_generator_vcvtneps2bf8_avx512_prep_stack(ptr noundef %1644, i32 noundef %1647)
  br label %1660

1648:                                             ; preds = %1637
  %1649 = load ptr, ptr %10, align 8, !tbaa !5
  %1650 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %1649, i32 0, i32 8
  %1651 = getelementptr inbounds [3 x i8], ptr %1650, i64 0, i64 0
  %1652 = call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef %1651)
  %1653 = icmp eq i32 5, %1652
  br i1 %1653, label %1654, label %1659

1654:                                             ; preds = %1648
  %1655 = load ptr, ptr %7, align 8, !tbaa !5
  %1656 = load ptr, ptr %8, align 8, !tbaa !5
  %1657 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %1656, i32 0, i32 24
  %1658 = load i32, ptr %1657, align 4, !tbaa !22
  call void @libxsmm_generator_vcvt_hf8_tofrom_f32_avx512_prep_stack(ptr noundef %1655, i32 noundef %1658)
  br label %1659

1659:                                             ; preds = %1654, %1648
  br label %1660

1660:                                             ; preds = %1659, %1643
  store i32 0, ptr %19, align 4, !tbaa !9
  br label %1661

1661:                                             ; preds = %1808, %1660
  %1662 = load i32, ptr %19, align 4, !tbaa !9
  %1663 = load i32, ptr %12, align 4, !tbaa !9
  %1664 = icmp ult i32 %1662, %1663
  br i1 %1664, label %1665, label %1811

1665:                                             ; preds = %1661
  store i32 0, ptr %20, align 4, !tbaa !9
  br label %1666

1666:                                             ; preds = %1804, %1665
  %1667 = load i32, ptr %20, align 4, !tbaa !9
  %1668 = load i32, ptr %16, align 4, !tbaa !9
  %1669 = icmp ult i32 %1667, %1668
  br i1 %1669, label %1670, label %1807

1670:                                             ; preds = %1666
  call void @llvm.lifetime.start.p0(i64 4, ptr %64) #4
  %1671 = load i32, ptr %17, align 4, !tbaa !9
  %1672 = load i32, ptr %20, align 4, !tbaa !9
  %1673 = add i32 %1671, %1672
  %1674 = load i32, ptr %16, align 4, !tbaa !9
  %1675 = load i32, ptr %19, align 4, !tbaa !9
  %1676 = mul i32 %1674, %1675
  %1677 = add i32 %1673, %1676
  store i32 %1677, ptr %64, align 4, !tbaa !9
  %1678 = load ptr, ptr %10, align 8, !tbaa !5
  %1679 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %1678, i32 0, i32 8
  %1680 = getelementptr inbounds [3 x i8], ptr %1679, i64 0, i64 0
  %1681 = call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef %1680)
  %1682 = icmp eq i32 4, %1681
  br i1 %1682, label %1683, label %1700

1683:                                             ; preds = %1670
  %1684 = load ptr, ptr %7, align 8, !tbaa !5
  %1685 = load ptr, ptr %7, align 8, !tbaa !5
  %1686 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %1685, i32 0, i32 6
  %1687 = load i32, ptr %1686, align 4, !tbaa !51
  %1688 = icmp uge i32 %1687, 1051
  br i1 %1688, label %1689, label %1694

1689:                                             ; preds = %1683
  %1690 = load ptr, ptr %7, align 8, !tbaa !5
  %1691 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %1690, i32 0, i32 6
  %1692 = load i32, ptr %1691, align 4, !tbaa !51
  %1693 = icmp ult i32 %1692, 1101
  br label %1694

1694:                                             ; preds = %1689, %1683
  %1695 = phi i1 [ false, %1683 ], [ %1693, %1689 ]
  %1696 = zext i1 %1695 to i64
  %1697 = select i1 %1695, i32 121, i32 122
  %1698 = trunc i32 %1697 to i8
  %1699 = load i32, ptr %64, align 4, !tbaa !9
  call void @libxsmm_generator_vcvtneps2bf8_avx512_preppedstack(ptr noundef %1684, i8 noundef signext %1698, i32 noundef %1699, i32 noundef 0, i32 noundef 2, i32 noundef 3, i32 noundef 6, i32 noundef 7, i32 noundef 0, i32 noundef 0)
  br label %1724

1700:                                             ; preds = %1670
  %1701 = load ptr, ptr %10, align 8, !tbaa !5
  %1702 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %1701, i32 0, i32 8
  %1703 = getelementptr inbounds [3 x i8], ptr %1702, i64 0, i64 0
  %1704 = call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef %1703)
  %1705 = icmp eq i32 5, %1704
  br i1 %1705, label %1706, label %1723

1706:                                             ; preds = %1700
  %1707 = load ptr, ptr %7, align 8, !tbaa !5
  %1708 = load ptr, ptr %7, align 8, !tbaa !5
  %1709 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %1708, i32 0, i32 6
  %1710 = load i32, ptr %1709, align 4, !tbaa !51
  %1711 = icmp uge i32 %1710, 1051
  br i1 %1711, label %1712, label %1717

1712:                                             ; preds = %1706
  %1713 = load ptr, ptr %7, align 8, !tbaa !5
  %1714 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %1713, i32 0, i32 6
  %1715 = load i32, ptr %1714, align 4, !tbaa !51
  %1716 = icmp ult i32 %1715, 1101
  br label %1717

1717:                                             ; preds = %1712, %1706
  %1718 = phi i1 [ false, %1706 ], [ %1716, %1712 ]
  %1719 = zext i1 %1718 to i64
  %1720 = select i1 %1718, i32 121, i32 122
  %1721 = trunc i32 %1720 to i8
  %1722 = load i32, ptr %64, align 4, !tbaa !9
  call void @libxsmm_generator_vcvtf32_to_hf8_avx512_preppedstack(ptr noundef %1707, i8 noundef signext %1721, i32 noundef %1722, i32 noundef 0, i32 noundef 0, i32 noundef 1, i32 noundef 2, i32 noundef 3, i32 noundef 7, i32 noundef 6, i32 noundef 5)
  br label %1723

1723:                                             ; preds = %1717, %1700
  br label %1724

1724:                                             ; preds = %1723, %1694
  %1725 = load ptr, ptr %9, align 8, !tbaa !5
  %1726 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1725, i32 0, i32 11
  %1727 = load i32, ptr %1726, align 4, !tbaa !29
  %1728 = icmp ne i32 %1727, 0
  br i1 %1728, label %1729, label %1771

1729:                                             ; preds = %1724
  %1730 = load i32, ptr %20, align 4, !tbaa !9
  %1731 = load i32, ptr %16, align 4, !tbaa !9
  %1732 = sub i32 %1731, 1
  %1733 = icmp eq i32 %1730, %1732
  br i1 %1733, label %1734, label %1771

1734:                                             ; preds = %1729
  %1735 = load ptr, ptr %7, align 8, !tbaa !5
  %1736 = load ptr, ptr %7, align 8, !tbaa !5
  %1737 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %1736, i32 0, i32 6
  %1738 = load i32, ptr %1737, align 4, !tbaa !51
  %1739 = load ptr, ptr %8, align 8, !tbaa !5
  %1740 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %1739, i32 0, i32 5
  %1741 = load i32, ptr %1740, align 4, !tbaa !36
  %1742 = load i32, ptr %19, align 4, !tbaa !9
  %1743 = load ptr, ptr %10, align 8, !tbaa !5
  %1744 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %1743, i32 0, i32 5
  %1745 = load i32, ptr %1744, align 1, !tbaa !37
  %1746 = mul i32 %1742, %1745
  %1747 = load i32, ptr %20, align 4, !tbaa !9
  %1748 = load ptr, ptr %9, align 8, !tbaa !5
  %1749 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1748, i32 0, i32 2
  %1750 = load i32, ptr %1749, align 8, !tbaa !11
  %1751 = mul i32 %1747, %1750
  %1752 = add i32 %1746, %1751
  %1753 = load ptr, ptr %9, align 8, !tbaa !5
  %1754 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1753, i32 0, i32 5
  %1755 = load i32, ptr %1754, align 4, !tbaa !38
  %1756 = mul i32 %1752, %1755
  %1757 = load ptr, ptr %7, align 8, !tbaa !5
  %1758 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %1757, i32 0, i32 6
  %1759 = load i32, ptr %1758, align 4, !tbaa !51
  %1760 = icmp uge i32 %1759, 1051
  br i1 %1760, label %1761, label %1766

1761:                                             ; preds = %1734
  %1762 = load ptr, ptr %7, align 8, !tbaa !5
  %1763 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %1762, i32 0, i32 6
  %1764 = load i32, ptr %1763, align 4, !tbaa !51
  %1765 = icmp ult i32 %1764, 1101
  br label %1766

1766:                                             ; preds = %1761, %1734
  %1767 = phi i1 [ false, %1734 ], [ %1765, %1761 ]
  %1768 = zext i1 %1767 to i64
  %1769 = select i1 %1767, i32 121, i32 122
  %1770 = trunc i32 %1769 to i8
  call void @libxsmm_x86_instruction_vec_move(ptr noundef %1735, i32 noundef %1738, i32 noundef -536406417, i32 noundef %1741, i32 noundef 127, i32 noundef 0, i32 noundef %1756, i8 noundef signext %1770, i32 noundef 0, i32 noundef 2, i32 noundef 0, i32 noundef 1)
  br label %1803

1771:                                             ; preds = %1729, %1724
  %1772 = load ptr, ptr %7, align 8, !tbaa !5
  %1773 = load ptr, ptr %7, align 8, !tbaa !5
  %1774 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %1773, i32 0, i32 6
  %1775 = load i32, ptr %1774, align 4, !tbaa !51
  %1776 = load ptr, ptr %7, align 8, !tbaa !5
  %1777 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %1776, i32 0, i32 6
  %1778 = load i32, ptr %1777, align 4, !tbaa !51
  %1779 = icmp ult i32 %1778, 1101
  br i1 %1779, label %1780, label %1781

1780:                                             ; preds = %1771
  br label %1783

1781:                                             ; preds = %1771
  %1782 = load i32, ptr %18, align 4, !tbaa !9
  br label %1783

1783:                                             ; preds = %1781, %1780
  %1784 = phi i32 [ 545725200, %1780 ], [ %1782, %1781 ]
  %1785 = load ptr, ptr %8, align 8, !tbaa !5
  %1786 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %1785, i32 0, i32 5
  %1787 = load i32, ptr %1786, align 4, !tbaa !36
  %1788 = load i32, ptr %19, align 4, !tbaa !9
  %1789 = load ptr, ptr %10, align 8, !tbaa !5
  %1790 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %1789, i32 0, i32 5
  %1791 = load i32, ptr %1790, align 1, !tbaa !37
  %1792 = mul i32 %1788, %1791
  %1793 = load i32, ptr %20, align 4, !tbaa !9
  %1794 = load ptr, ptr %9, align 8, !tbaa !5
  %1795 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1794, i32 0, i32 2
  %1796 = load i32, ptr %1795, align 8, !tbaa !11
  %1797 = mul i32 %1793, %1796
  %1798 = add i32 %1792, %1797
  %1799 = load ptr, ptr %9, align 8, !tbaa !5
  %1800 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1799, i32 0, i32 5
  %1801 = load i32, ptr %1800, align 4, !tbaa !38
  %1802 = mul i32 %1798, %1801
  call void @libxsmm_x86_instruction_vec_move(ptr noundef %1772, i32 noundef %1775, i32 noundef %1784, i32 noundef %1787, i32 noundef 127, i32 noundef 0, i32 noundef %1802, i8 noundef signext 120, i32 noundef 0, i32 noundef 0, i32 noundef 0, i32 noundef 1)
  br label %1803

1803:                                             ; preds = %1783, %1766
  call void @llvm.lifetime.end.p0(i64 4, ptr %64) #4
  br label %1804

1804:                                             ; preds = %1803
  %1805 = load i32, ptr %20, align 4, !tbaa !9
  %1806 = add i32 %1805, 1
  store i32 %1806, ptr %20, align 4, !tbaa !9
  br label %1666, !llvm.loop !53

1807:                                             ; preds = %1666
  br label %1808

1808:                                             ; preds = %1807
  %1809 = load i32, ptr %19, align 4, !tbaa !9
  %1810 = add i32 %1809, 1
  store i32 %1810, ptr %19, align 4, !tbaa !9
  br label %1661, !llvm.loop !54

1811:                                             ; preds = %1661
  %1812 = load ptr, ptr %10, align 8, !tbaa !5
  %1813 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %1812, i32 0, i32 8
  %1814 = getelementptr inbounds [3 x i8], ptr %1813, i64 0, i64 0
  %1815 = call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef %1814)
  %1816 = icmp eq i32 4, %1815
  br i1 %1816, label %1817, label %1822

1817:                                             ; preds = %1811
  %1818 = load ptr, ptr %7, align 8, !tbaa !5
  %1819 = load ptr, ptr %8, align 8, !tbaa !5
  %1820 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %1819, i32 0, i32 24
  %1821 = load i32, ptr %1820, align 4, !tbaa !22
  call void @libxsmm_generator_vcvtneps2bf8_avx512_clean_stack(ptr noundef %1818, i32 noundef %1821)
  br label %1834

1822:                                             ; preds = %1811
  %1823 = load ptr, ptr %10, align 8, !tbaa !5
  %1824 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %1823, i32 0, i32 8
  %1825 = getelementptr inbounds [3 x i8], ptr %1824, i64 0, i64 0
  %1826 = call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef %1825)
  %1827 = icmp eq i32 5, %1826
  br i1 %1827, label %1828, label %1833

1828:                                             ; preds = %1822
  %1829 = load ptr, ptr %7, align 8, !tbaa !5
  %1830 = load ptr, ptr %8, align 8, !tbaa !5
  %1831 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %1830, i32 0, i32 24
  %1832 = load i32, ptr %1831, align 4, !tbaa !22
  call void @libxsmm_generator_vcvt_hf8_tofrom_f32_avx512_clean_stack(ptr noundef %1829, i32 noundef %1832)
  br label %1833

1833:                                             ; preds = %1828, %1822
  br label %1834

1834:                                             ; preds = %1833, %1817
  call void @llvm.lifetime.end.p0(i64 4, ptr %60) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %59) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %58) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %57) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %56) #4
  br label %2887

1835:                                             ; preds = %1431, %1425, %1396, %1391
  %1836 = load ptr, ptr %9, align 8, !tbaa !5
  %1837 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1836, i32 0, i32 0
  %1838 = load i32, ptr %1837, align 8, !tbaa !21
  %1839 = icmp uge i32 %1838, 1006
  br i1 %1839, label %1840, label %2017

1840:                                             ; preds = %1835
  %1841 = load ptr, ptr %9, align 8, !tbaa !5
  %1842 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1841, i32 0, i32 0
  %1843 = load i32, ptr %1842, align 8, !tbaa !21
  %1844 = icmp ule i32 %1843, 1999
  br i1 %1844, label %1845, label %2017

1845:                                             ; preds = %1840
  %1846 = load ptr, ptr %10, align 8, !tbaa !5
  %1847 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %1846, i32 0, i32 8
  %1848 = getelementptr inbounds [3 x i8], ptr %1847, i64 0, i64 0
  %1849 = call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef %1848)
  %1850 = icmp eq i32 12, %1849
  br i1 %1850, label %1851, label %2017

1851:                                             ; preds = %1845
  %1852 = load ptr, ptr %10, align 8, !tbaa !5
  %1853 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %1852, i32 0, i32 8
  %1854 = getelementptr inbounds [3 x i8], ptr %1853, i64 0, i64 0
  %1855 = call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef %1854)
  %1856 = icmp eq i32 1, %1855
  br i1 %1856, label %1857, label %2017

1857:                                             ; preds = %1851
  %1858 = load i32, ptr %15, align 4, !tbaa !9
  %1859 = icmp eq i32 %1858, 0
  br i1 %1859, label %1860, label %2017

1860:                                             ; preds = %1857
  call void @llvm.lifetime.start.p0(i64 4, ptr %65) #4
  store i32 1, ptr %65, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %66) #4
  %1861 = load ptr, ptr %8, align 8, !tbaa !5
  %1862 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %1861, i32 0, i32 22
  %1863 = load i32, ptr %1862, align 4, !tbaa !25
  store i32 %1863, ptr %66, align 4, !tbaa !9
  %1864 = load ptr, ptr %9, align 8, !tbaa !5
  %1865 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1864, i32 0, i32 0
  %1866 = load i32, ptr %1865, align 8, !tbaa !21
  %1867 = icmp uge i32 %1866, 1005
  br i1 %1867, label %1868, label %1887

1868:                                             ; preds = %1860
  %1869 = load ptr, ptr %9, align 8, !tbaa !5
  %1870 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1869, i32 0, i32 0
  %1871 = load i32, ptr %1870, align 8, !tbaa !21
  %1872 = icmp ult i32 %1871, 1051
  br i1 %1872, label %1873, label %1887

1873:                                             ; preds = %1868
  %1874 = load ptr, ptr %9, align 8, !tbaa !5
  %1875 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1874, i32 0, i32 11
  %1876 = load i32, ptr %1875, align 4, !tbaa !29
  %1877 = icmp ne i32 %1876, 0
  br i1 %1877, label %1878, label %1887

1878:                                             ; preds = %1873
  %1879 = load ptr, ptr %7, align 8, !tbaa !5
  %1880 = load ptr, ptr %9, align 8, !tbaa !5
  %1881 = load i32, ptr %66, align 4, !tbaa !9
  call void @libxsmm_generator_gemm_getval_stack_var(ptr noundef %1879, ptr noundef %1880, i32 noundef 22, i32 noundef %1881)
  %1882 = load ptr, ptr %7, align 8, !tbaa !5
  %1883 = load ptr, ptr %9, align 8, !tbaa !5
  %1884 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1883, i32 0, i32 0
  %1885 = load i32, ptr %1884, align 8, !tbaa !21
  %1886 = load i32, ptr %66, align 4, !tbaa !9
  call void @libxsmm_x86_instruction_vec_move(ptr noundef %1882, i32 noundef %1885, i32 noundef 537138704, i32 noundef %1886, i32 noundef 127, i32 noundef 0, i32 noundef 0, i8 noundef signext 121, i32 noundef 1, i32 noundef 0, i32 noundef 0, i32 noundef 0)
  br label %1887

1887:                                             ; preds = %1878, %1873, %1868, %1860
  %1888 = load ptr, ptr %7, align 8, !tbaa !5
  %1889 = load ptr, ptr %9, align 8, !tbaa !5
  %1890 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1889, i32 0, i32 0
  %1891 = load i32, ptr %1890, align 8, !tbaa !21
  %1892 = load ptr, ptr %8, align 8, !tbaa !5
  %1893 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %1892, i32 0, i32 20
  %1894 = load i32, ptr %1893, align 4, !tbaa !55
  %1895 = load ptr, ptr %9, align 8, !tbaa !5
  %1896 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1895, i32 0, i32 21
  %1897 = load i8, ptr %1896, align 4, !tbaa !32
  call void @libxsmm_x86_instruction_vec_move(ptr noundef %1888, i32 noundef %1891, i32 noundef 537209368, i32 noundef %1894, i32 noundef 127, i32 noundef 0, i32 noundef 0, i8 noundef signext %1897, i32 noundef 3, i32 noundef 0, i32 noundef 1, i32 noundef 0)
  store i32 0, ptr %19, align 4, !tbaa !9
  br label %1898

1898:                                             ; preds = %2013, %1887
  %1899 = load i32, ptr %19, align 4, !tbaa !9
  %1900 = load i32, ptr %12, align 4, !tbaa !9
  %1901 = icmp ult i32 %1899, %1900
  br i1 %1901, label %1902, label %2016

1902:                                             ; preds = %1898
  store i32 0, ptr %20, align 4, !tbaa !9
  br label %1903

1903:                                             ; preds = %2009, %1902
  %1904 = load i32, ptr %20, align 4, !tbaa !9
  %1905 = load i32, ptr %16, align 4, !tbaa !9
  %1906 = icmp ult i32 %1904, %1905
  br i1 %1906, label %1907, label %2012

1907:                                             ; preds = %1903
  call void @llvm.lifetime.start.p0(i64 4, ptr %67) #4
  %1908 = load i32, ptr %17, align 4, !tbaa !9
  %1909 = load i32, ptr %20, align 4, !tbaa !9
  %1910 = add i32 %1908, %1909
  %1911 = load i32, ptr %16, align 4, !tbaa !9
  %1912 = load i32, ptr %19, align 4, !tbaa !9
  %1913 = mul i32 %1911, %1912
  %1914 = add i32 %1910, %1913
  store i32 %1914, ptr %67, align 4, !tbaa !9
  %1915 = load ptr, ptr %7, align 8, !tbaa !5
  %1916 = load ptr, ptr %9, align 8, !tbaa !5
  %1917 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1916, i32 0, i32 21
  %1918 = load i8, ptr %1917, align 4, !tbaa !32
  %1919 = load i32, ptr %67, align 4, !tbaa !9
  %1920 = load i32, ptr %67, align 4, !tbaa !9
  call void @libxsmm_x86_instruction_vec_compute_2reg(ptr noundef %1915, i32 noundef 537138779, i8 noundef signext %1918, i32 noundef %1919, i32 noundef %1920)
  %1921 = load ptr, ptr %7, align 8, !tbaa !5
  %1922 = load ptr, ptr %9, align 8, !tbaa !5
  %1923 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1922, i32 0, i32 21
  %1924 = load i8, ptr %1923, align 4, !tbaa !32
  %1925 = load i32, ptr %67, align 4, !tbaa !9
  %1926 = load i32, ptr %67, align 4, !tbaa !9
  call void @libxsmm_x86_instruction_vec_compute_3reg(ptr noundef %1921, i32 noundef 805574233, i8 noundef signext %1924, i32 noundef %1925, i32 noundef 3, i32 noundef %1926)
  %1927 = load ptr, ptr %10, align 8, !tbaa !5
  %1928 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %1927, i32 0, i32 6
  %1929 = load i32, ptr %1928, align 1, !tbaa !16
  %1930 = and i32 4, %1929
  %1931 = icmp eq i32 0, %1930
  br i1 %1931, label %1932, label %1973

1932:                                             ; preds = %1907
  %1933 = load ptr, ptr %7, align 8, !tbaa !5
  %1934 = load i32, ptr %18, align 4, !tbaa !9
  %1935 = load ptr, ptr %8, align 8, !tbaa !5
  %1936 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %1935, i32 0, i32 5
  %1937 = load i32, ptr %1936, align 4, !tbaa !36
  %1938 = load i32, ptr %19, align 4, !tbaa !9
  %1939 = load ptr, ptr %10, align 8, !tbaa !5
  %1940 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %1939, i32 0, i32 5
  %1941 = load i32, ptr %1940, align 1, !tbaa !37
  %1942 = mul i32 %1938, %1941
  %1943 = load i32, ptr %20, align 4, !tbaa !9
  %1944 = load ptr, ptr %9, align 8, !tbaa !5
  %1945 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1944, i32 0, i32 2
  %1946 = load i32, ptr %1945, align 8, !tbaa !11
  %1947 = mul i32 %1943, %1946
  %1948 = add i32 %1942, %1947
  %1949 = load ptr, ptr %9, align 8, !tbaa !5
  %1950 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1949, i32 0, i32 5
  %1951 = load i32, ptr %1950, align 4, !tbaa !38
  %1952 = mul i32 %1948, %1951
  %1953 = load ptr, ptr %9, align 8, !tbaa !5
  %1954 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1953, i32 0, i32 21
  %1955 = load i8, ptr %1954, align 4, !tbaa !32
  %1956 = load i32, ptr %20, align 4, !tbaa !9
  %1957 = load i32, ptr %16, align 4, !tbaa !9
  %1958 = sub i32 %1957, 1
  %1959 = icmp eq i32 %1956, %1958
  br i1 %1959, label %1960, label %1964

1960:                                             ; preds = %1932
  %1961 = load ptr, ptr %9, align 8, !tbaa !5
  %1962 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1961, i32 0, i32 11
  %1963 = load i32, ptr %1962, align 4, !tbaa !29
  br label %1965

1964:                                             ; preds = %1932
  br label %1965

1965:                                             ; preds = %1964, %1960
  %1966 = phi i32 [ %1963, %1960 ], [ 0, %1964 ]
  call void @libxsmm_x86_instruction_unified_vec_move(ptr noundef %1933, i32 noundef %1934, i32 noundef %1937, i32 noundef 127, i32 noundef 0, i32 noundef %1952, i8 noundef signext %1955, i32 noundef 2, i32 noundef %1966, i32 noundef 1, i32 noundef 0)
  %1967 = load ptr, ptr %7, align 8, !tbaa !5
  %1968 = load ptr, ptr %9, align 8, !tbaa !5
  %1969 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1968, i32 0, i32 21
  %1970 = load i8, ptr %1969, align 4, !tbaa !32
  %1971 = load i32, ptr %67, align 4, !tbaa !9
  %1972 = load i32, ptr %67, align 4, !tbaa !9
  call void @libxsmm_x86_instruction_vec_compute_3reg(ptr noundef %1967, i32 noundef 805574232, i8 noundef signext %1970, i32 noundef %1971, i32 noundef 2, i32 noundef %1972)
  br label %1973

1973:                                             ; preds = %1965, %1907
  %1974 = load ptr, ptr %7, align 8, !tbaa !5
  %1975 = load i32, ptr %18, align 4, !tbaa !9
  %1976 = load ptr, ptr %8, align 8, !tbaa !5
  %1977 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %1976, i32 0, i32 5
  %1978 = load i32, ptr %1977, align 4, !tbaa !36
  %1979 = load i32, ptr %19, align 4, !tbaa !9
  %1980 = load ptr, ptr %10, align 8, !tbaa !5
  %1981 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %1980, i32 0, i32 5
  %1982 = load i32, ptr %1981, align 1, !tbaa !37
  %1983 = mul i32 %1979, %1982
  %1984 = load i32, ptr %20, align 4, !tbaa !9
  %1985 = load ptr, ptr %9, align 8, !tbaa !5
  %1986 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1985, i32 0, i32 2
  %1987 = load i32, ptr %1986, align 8, !tbaa !11
  %1988 = mul i32 %1984, %1987
  %1989 = add i32 %1983, %1988
  %1990 = load ptr, ptr %9, align 8, !tbaa !5
  %1991 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1990, i32 0, i32 5
  %1992 = load i32, ptr %1991, align 4, !tbaa !38
  %1993 = mul i32 %1989, %1992
  %1994 = load ptr, ptr %9, align 8, !tbaa !5
  %1995 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1994, i32 0, i32 21
  %1996 = load i8, ptr %1995, align 4, !tbaa !32
  %1997 = load i32, ptr %67, align 4, !tbaa !9
  %1998 = load i32, ptr %20, align 4, !tbaa !9
  %1999 = load i32, ptr %16, align 4, !tbaa !9
  %2000 = sub i32 %1999, 1
  %2001 = icmp eq i32 %1998, %2000
  br i1 %2001, label %2002, label %2006

2002:                                             ; preds = %1973
  %2003 = load ptr, ptr %9, align 8, !tbaa !5
  %2004 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %2003, i32 0, i32 11
  %2005 = load i32, ptr %2004, align 4, !tbaa !29
  br label %2007

2006:                                             ; preds = %1973
  br label %2007

2007:                                             ; preds = %2006, %2002
  %2008 = phi i32 [ %2005, %2002 ], [ 0, %2006 ]
  call void @libxsmm_x86_instruction_unified_vec_move(ptr noundef %1974, i32 noundef %1975, i32 noundef %1978, i32 noundef 127, i32 noundef 0, i32 noundef %1993, i8 noundef signext %1996, i32 noundef %1997, i32 noundef %2008, i32 noundef 1, i32 noundef 1)
  call void @llvm.lifetime.end.p0(i64 4, ptr %67) #4
  br label %2009

2009:                                             ; preds = %2007
  %2010 = load i32, ptr %20, align 4, !tbaa !9
  %2011 = add i32 %2010, 1
  store i32 %2011, ptr %20, align 4, !tbaa !9
  br label %1903, !llvm.loop !56

2012:                                             ; preds = %1903
  br label %2013

2013:                                             ; preds = %2012
  %2014 = load i32, ptr %19, align 4, !tbaa !9
  %2015 = add i32 %2014, 1
  store i32 %2015, ptr %19, align 4, !tbaa !9
  br label %1898, !llvm.loop !57

2016:                                             ; preds = %1898
  call void @llvm.lifetime.end.p0(i64 4, ptr %66) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %65) #4
  br label %2886

2017:                                             ; preds = %1857, %1851, %1845, %1840, %1835
  %2018 = load ptr, ptr %9, align 8, !tbaa !5
  %2019 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %2018, i32 0, i32 0
  %2020 = load i32, ptr %2019, align 8, !tbaa !21
  %2021 = icmp ult i32 %2020, 1005
  br i1 %2021, label %2022, label %2173

2022:                                             ; preds = %2017
  %2023 = load ptr, ptr %10, align 8, !tbaa !5
  %2024 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %2023, i32 0, i32 8
  %2025 = getelementptr inbounds [3 x i8], ptr %2024, i64 0, i64 0
  %2026 = call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef %2025)
  %2027 = icmp eq i32 12, %2026
  br i1 %2027, label %2028, label %2173

2028:                                             ; preds = %2022
  %2029 = load ptr, ptr %10, align 8, !tbaa !5
  %2030 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %2029, i32 0, i32 8
  %2031 = getelementptr inbounds [3 x i8], ptr %2030, i64 0, i64 0
  %2032 = call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef %2031)
  %2033 = icmp eq i32 1, %2032
  br i1 %2033, label %2034, label %2173

2034:                                             ; preds = %2028
  call void @llvm.lifetime.start.p0(i64 4, ptr %68) #4
  %2035 = load i32, ptr %11, align 4, !tbaa !9
  %2036 = load ptr, ptr %9, align 8, !tbaa !5
  %2037 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %2036, i32 0, i32 2
  %2038 = load i32, ptr %2037, align 8, !tbaa !11
  %2039 = urem i32 %2035, %2038
  store i32 %2039, ptr %68, align 4, !tbaa !9
  %2040 = load ptr, ptr %7, align 8, !tbaa !5
  %2041 = load ptr, ptr %9, align 8, !tbaa !5
  %2042 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %2041, i32 0, i32 0
  %2043 = load i32, ptr %2042, align 8, !tbaa !21
  %2044 = load ptr, ptr %8, align 8, !tbaa !5
  %2045 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %2044, i32 0, i32 20
  %2046 = load i32, ptr %2045, align 4, !tbaa !55
  %2047 = load ptr, ptr %9, align 8, !tbaa !5
  %2048 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %2047, i32 0, i32 21
  %2049 = load i8, ptr %2048, align 4, !tbaa !32
  call void @libxsmm_x86_instruction_vec_move(ptr noundef %2040, i32 noundef %2043, i32 noundef -1610215408, i32 noundef %2046, i32 noundef 127, i32 noundef 0, i32 noundef 0, i8 noundef signext %2049, i32 noundef 3, i32 noundef 0, i32 noundef 1, i32 noundef 0)
  %2050 = load ptr, ptr %7, align 8, !tbaa !5
  %2051 = load ptr, ptr %9, align 8, !tbaa !5
  %2052 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %2051, i32 0, i32 21
  %2053 = load i8, ptr %2052, align 4, !tbaa !32
  call void @libxsmm_x86_instruction_vec_compute_2reg_imm8(ptr noundef %2050, i32 noundef -1609822010, i8 noundef signext %2053, i32 noundef 3, i32 noundef 3, i32 noundef 0)
  store i32 0, ptr %19, align 4, !tbaa !9
  br label %2054

2054:                                             ; preds = %2169, %2034
  %2055 = load i32, ptr %19, align 4, !tbaa !9
  %2056 = load i32, ptr %12, align 4, !tbaa !9
  %2057 = icmp ult i32 %2055, %2056
  br i1 %2057, label %2058, label %2172

2058:                                             ; preds = %2054
  store i32 0, ptr %20, align 4, !tbaa !9
  br label %2059

2059:                                             ; preds = %2165, %2058
  %2060 = load i32, ptr %20, align 4, !tbaa !9
  %2061 = load i32, ptr %16, align 4, !tbaa !9
  %2062 = icmp ult i32 %2060, %2061
  br i1 %2062, label %2063, label %2168

2063:                                             ; preds = %2059
  call void @llvm.lifetime.start.p0(i64 4, ptr %69) #4
  %2064 = load i32, ptr %17, align 4, !tbaa !9
  %2065 = load i32, ptr %20, align 4, !tbaa !9
  %2066 = add i32 %2064, %2065
  %2067 = load i32, ptr %16, align 4, !tbaa !9
  %2068 = load i32, ptr %19, align 4, !tbaa !9
  %2069 = mul i32 %2067, %2068
  %2070 = add i32 %2066, %2069
  store i32 %2070, ptr %69, align 4, !tbaa !9
  %2071 = load ptr, ptr %7, align 8, !tbaa !5
  %2072 = load ptr, ptr %9, align 8, !tbaa !5
  %2073 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %2072, i32 0, i32 21
  %2074 = load i8, ptr %2073, align 4, !tbaa !32
  %2075 = load i32, ptr %69, align 4, !tbaa !9
  %2076 = load i32, ptr %69, align 4, !tbaa !9
  call void @libxsmm_x86_instruction_vec_compute_2reg(ptr noundef %2071, i32 noundef -1610346405, i8 noundef signext %2074, i32 noundef %2075, i32 noundef %2076)
  %2077 = load ptr, ptr %7, align 8, !tbaa !5
  %2078 = load ptr, ptr %9, align 8, !tbaa !5
  %2079 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %2078, i32 0, i32 21
  %2080 = load i8, ptr %2079, align 4, !tbaa !32
  %2081 = load i32, ptr %69, align 4, !tbaa !9
  call void @libxsmm_x86_instruction_vec_compute_2reg(ptr noundef %2077, i32 noundef -1610346407, i8 noundef signext %2080, i32 noundef 3, i32 noundef %2081)
  %2082 = load ptr, ptr %10, align 8, !tbaa !5
  %2083 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %2082, i32 0, i32 6
  %2084 = load i32, ptr %2083, align 1, !tbaa !16
  %2085 = and i32 4, %2084
  %2086 = icmp eq i32 0, %2085
  br i1 %2086, label %2087, label %2128

2087:                                             ; preds = %2063
  %2088 = load ptr, ptr %7, align 8, !tbaa !5
  %2089 = load i32, ptr %18, align 4, !tbaa !9
  %2090 = load ptr, ptr %8, align 8, !tbaa !5
  %2091 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %2090, i32 0, i32 5
  %2092 = load i32, ptr %2091, align 4, !tbaa !36
  %2093 = load i32, ptr %19, align 4, !tbaa !9
  %2094 = load ptr, ptr %10, align 8, !tbaa !5
  %2095 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %2094, i32 0, i32 5
  %2096 = load i32, ptr %2095, align 1, !tbaa !37
  %2097 = mul i32 %2093, %2096
  %2098 = load i32, ptr %20, align 4, !tbaa !9
  %2099 = load ptr, ptr %9, align 8, !tbaa !5
  %2100 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %2099, i32 0, i32 2
  %2101 = load i32, ptr %2100, align 8, !tbaa !11
  %2102 = mul i32 %2098, %2101
  %2103 = add i32 %2097, %2102
  %2104 = load ptr, ptr %9, align 8, !tbaa !5
  %2105 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %2104, i32 0, i32 5
  %2106 = load i32, ptr %2105, align 4, !tbaa !38
  %2107 = mul i32 %2103, %2106
  %2108 = load ptr, ptr %9, align 8, !tbaa !5
  %2109 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %2108, i32 0, i32 21
  %2110 = load i8, ptr %2109, align 4, !tbaa !32
  %2111 = load i32, ptr %20, align 4, !tbaa !9
  %2112 = load i32, ptr %16, align 4, !tbaa !9
  %2113 = sub i32 %2112, 1
  %2114 = icmp eq i32 %2111, %2113
  br i1 %2114, label %2115, label %2119

2115:                                             ; preds = %2087
  %2116 = load ptr, ptr %9, align 8, !tbaa !5
  %2117 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %2116, i32 0, i32 11
  %2118 = load i32, ptr %2117, align 4, !tbaa !29
  br label %2120

2119:                                             ; preds = %2087
  br label %2120

2120:                                             ; preds = %2119, %2115
  %2121 = phi i32 [ %2118, %2115 ], [ 0, %2119 ]
  %2122 = load i32, ptr %68, align 4, !tbaa !9
  call void @libxsmm_x86_instruction_unified_vec_move(ptr noundef %2088, i32 noundef %2089, i32 noundef %2092, i32 noundef 127, i32 noundef 0, i32 noundef %2107, i8 noundef signext %2110, i32 noundef 2, i32 noundef %2121, i32 noundef %2122, i32 noundef 0)
  %2123 = load ptr, ptr %7, align 8, !tbaa !5
  %2124 = load ptr, ptr %9, align 8, !tbaa !5
  %2125 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %2124, i32 0, i32 21
  %2126 = load i8, ptr %2125, align 4, !tbaa !32
  %2127 = load i32, ptr %69, align 4, !tbaa !9
  call void @libxsmm_x86_instruction_vec_compute_2reg(ptr noundef %2123, i32 noundef -1610346408, i8 noundef signext %2126, i32 noundef 2, i32 noundef %2127)
  br label %2128

2128:                                             ; preds = %2120, %2063
  %2129 = load ptr, ptr %7, align 8, !tbaa !5
  %2130 = load i32, ptr %18, align 4, !tbaa !9
  %2131 = load ptr, ptr %8, align 8, !tbaa !5
  %2132 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %2131, i32 0, i32 5
  %2133 = load i32, ptr %2132, align 4, !tbaa !36
  %2134 = load i32, ptr %19, align 4, !tbaa !9
  %2135 = load ptr, ptr %10, align 8, !tbaa !5
  %2136 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %2135, i32 0, i32 5
  %2137 = load i32, ptr %2136, align 1, !tbaa !37
  %2138 = mul i32 %2134, %2137
  %2139 = load i32, ptr %20, align 4, !tbaa !9
  %2140 = load ptr, ptr %9, align 8, !tbaa !5
  %2141 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %2140, i32 0, i32 2
  %2142 = load i32, ptr %2141, align 8, !tbaa !11
  %2143 = mul i32 %2139, %2142
  %2144 = add i32 %2138, %2143
  %2145 = load ptr, ptr %9, align 8, !tbaa !5
  %2146 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %2145, i32 0, i32 5
  %2147 = load i32, ptr %2146, align 4, !tbaa !38
  %2148 = mul i32 %2144, %2147
  %2149 = load ptr, ptr %9, align 8, !tbaa !5
  %2150 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %2149, i32 0, i32 21
  %2151 = load i8, ptr %2150, align 4, !tbaa !32
  %2152 = load i32, ptr %69, align 4, !tbaa !9
  %2153 = load i32, ptr %20, align 4, !tbaa !9
  %2154 = load i32, ptr %16, align 4, !tbaa !9
  %2155 = sub i32 %2154, 1
  %2156 = icmp eq i32 %2153, %2155
  br i1 %2156, label %2157, label %2161

2157:                                             ; preds = %2128
  %2158 = load ptr, ptr %9, align 8, !tbaa !5
  %2159 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %2158, i32 0, i32 11
  %2160 = load i32, ptr %2159, align 4, !tbaa !29
  br label %2162

2161:                                             ; preds = %2128
  br label %2162

2162:                                             ; preds = %2161, %2157
  %2163 = phi i32 [ %2160, %2157 ], [ 0, %2161 ]
  %2164 = load i32, ptr %68, align 4, !tbaa !9
  call void @libxsmm_x86_instruction_unified_vec_move(ptr noundef %2129, i32 noundef %2130, i32 noundef %2133, i32 noundef 127, i32 noundef 0, i32 noundef %2148, i8 noundef signext %2151, i32 noundef %2152, i32 noundef %2163, i32 noundef %2164, i32 noundef 1)
  call void @llvm.lifetime.end.p0(i64 4, ptr %69) #4
  br label %2165

2165:                                             ; preds = %2162
  %2166 = load i32, ptr %20, align 4, !tbaa !9
  %2167 = add i32 %2166, 1
  store i32 %2167, ptr %20, align 4, !tbaa !9
  br label %2059, !llvm.loop !58

2168:                                             ; preds = %2059
  br label %2169

2169:                                             ; preds = %2168
  %2170 = load i32, ptr %19, align 4, !tbaa !9
  %2171 = add i32 %2170, 1
  store i32 %2171, ptr %19, align 4, !tbaa !9
  br label %2054, !llvm.loop !59

2172:                                             ; preds = %2054
  call void @llvm.lifetime.end.p0(i64 4, ptr %68) #4
  br label %2885

2173:                                             ; preds = %2028, %2022, %2017
  call void @llvm.lifetime.start.p0(i64 4, ptr %70) #4
  %2174 = load ptr, ptr %8, align 8, !tbaa !5
  %2175 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %2174, i32 0, i32 24
  %2176 = load i32, ptr %2175, align 4, !tbaa !22
  store i32 %2176, ptr %70, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %71) #4
  %2177 = load ptr, ptr %8, align 8, !tbaa !5
  %2178 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %2177, i32 0, i32 24
  %2179 = load i32, ptr %2178, align 4, !tbaa !22
  store i32 %2179, ptr %71, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %72) #4
  %2180 = load ptr, ptr %8, align 8, !tbaa !5
  %2181 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %2180, i32 0, i32 23
  %2182 = load i32, ptr %2181, align 4, !tbaa !24
  store i32 %2182, ptr %72, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %73) #4
  store i32 0, ptr %73, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %74) #4
  %2183 = load i32, ptr %13, align 4, !tbaa !9
  %2184 = icmp ugt i32 %2183, 0
  br i1 %2184, label %2191, label %2185

2185:                                             ; preds = %2173
  %2186 = load i32, ptr %14, align 4, !tbaa !9
  %2187 = icmp ugt i32 %2186, 0
  br i1 %2187, label %2191, label %2188

2188:                                             ; preds = %2185
  %2189 = load i32, ptr %15, align 4, !tbaa !9
  %2190 = icmp ugt i32 %2189, 0
  br label %2191

2191:                                             ; preds = %2188, %2185, %2173
  %2192 = phi i1 [ true, %2185 ], [ true, %2173 ], [ %2190, %2188 ]
  %2193 = zext i1 %2192 to i64
  %2194 = select i1 %2192, i32 2, i32 1
  store i32 %2194, ptr %74, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %75) #4
  %2195 = load ptr, ptr %8, align 8, !tbaa !5
  %2196 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %2195, i32 0, i32 22
  %2197 = load i32, ptr %2196, align 4, !tbaa !25
  store i32 %2197, ptr %75, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %76) #4
  %2198 = load ptr, ptr %8, align 8, !tbaa !5
  %2199 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %2198, i32 0, i32 22
  %2200 = load i32, ptr %2199, align 4, !tbaa !25
  store i32 %2200, ptr %76, align 4, !tbaa !9
  %2201 = load ptr, ptr %9, align 8, !tbaa !5
  %2202 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %2201, i32 0, i32 0
  %2203 = load i32, ptr %2202, align 8, !tbaa !21
  %2204 = icmp uge i32 %2203, 1005
  br i1 %2204, label %2205, label %2219

2205:                                             ; preds = %2191
  %2206 = load ptr, ptr %9, align 8, !tbaa !5
  %2207 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %2206, i32 0, i32 0
  %2208 = load i32, ptr %2207, align 8, !tbaa !21
  %2209 = icmp ult i32 %2208, 1051
  br i1 %2209, label %2210, label %2219

2210:                                             ; preds = %2205
  %2211 = load ptr, ptr %9, align 8, !tbaa !5
  %2212 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %2211, i32 0, i32 11
  %2213 = load i32, ptr %2212, align 4, !tbaa !29
  %2214 = icmp ne i32 %2213, 0
  br i1 %2214, label %2215, label %2219

2215:                                             ; preds = %2210
  %2216 = load ptr, ptr %7, align 8, !tbaa !5
  %2217 = load ptr, ptr %9, align 8, !tbaa !5
  %2218 = load i32, ptr %75, align 4, !tbaa !9
  call void @libxsmm_generator_gemm_getval_stack_var(ptr noundef %2216, ptr noundef %2217, i32 noundef 22, i32 noundef %2218)
  br label %2219

2219:                                             ; preds = %2215, %2210, %2205, %2191
  %2220 = load ptr, ptr %9, align 8, !tbaa !5
  %2221 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %2220, i32 0, i32 31
  %2222 = load i32, ptr %2221, align 4, !tbaa !26
  %2223 = icmp eq i32 %2222, 1
  br i1 %2223, label %2229, label %2224

2224:                                             ; preds = %2219
  %2225 = load ptr, ptr %9, align 8, !tbaa !5
  %2226 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %2225, i32 0, i32 30
  %2227 = load i32, ptr %2226, align 8, !tbaa !27
  %2228 = icmp eq i32 %2227, 1
  br i1 %2228, label %2229, label %2238

2229:                                             ; preds = %2224, %2219
  %2230 = load ptr, ptr %7, align 8, !tbaa !5
  %2231 = load ptr, ptr %9, align 8, !tbaa !5
  %2232 = load ptr, ptr %9, align 8, !tbaa !5
  %2233 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %2232, i32 0, i32 30
  %2234 = load i32, ptr %2233, align 8, !tbaa !27
  %2235 = load i32, ptr %70, align 4, !tbaa !9
  %2236 = load i32, ptr %76, align 4, !tbaa !9
  %2237 = load i32, ptr %72, align 4, !tbaa !9
  call void @libxsmm_generator_gemm_prepare_relu_fusion(ptr noundef %2230, ptr noundef %2231, i32 noundef 0, i32 noundef %2234, i32 noundef %2235, i32 noundef %2236, i32 noundef %2237)
  br label %2252

2238:                                             ; preds = %2224
  %2239 = load ptr, ptr %9, align 8, !tbaa !5
  %2240 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %2239, i32 0, i32 33
  %2241 = load i32, ptr %2240, align 4, !tbaa !28
  %2242 = icmp eq i32 %2241, 1
  br i1 %2242, label %2243, label %2251

2243:                                             ; preds = %2238
  %2244 = load ptr, ptr %7, align 8, !tbaa !5
  %2245 = load ptr, ptr %22, align 8, !tbaa !5
  %2246 = load i32, ptr %17, align 4, !tbaa !9
  %2247 = load i32, ptr %16, align 4, !tbaa !9
  %2248 = load i32, ptr %12, align 4, !tbaa !9
  %2249 = load i32, ptr %71, align 4, !tbaa !9
  %2250 = load i32, ptr %72, align 4, !tbaa !9
  call void @libxsmm_generator_gemm_dump_2D_block_and_prepare_sigmoid_fusion(ptr noundef %2244, ptr noundef %2245, i32 noundef %2246, i32 noundef %2247, i32 noundef %2248, i32 noundef %2249, i32 noundef %2250)
  br label %2251

2251:                                             ; preds = %2243, %2238
  br label %2252

2252:                                             ; preds = %2251, %2229
  %2253 = load ptr, ptr %10, align 8, !tbaa !5
  %2254 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %2253, i32 0, i32 8
  %2255 = getelementptr inbounds [3 x i8], ptr %2254, i64 0, i64 0
  %2256 = call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef %2255)
  %2257 = icmp eq i32 1, %2256
  br i1 %2257, label %2258, label %2407

2258:                                             ; preds = %2252
  %2259 = load ptr, ptr %10, align 8, !tbaa !5
  %2260 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %2259, i32 0, i32 8
  %2261 = getelementptr inbounds [3 x i8], ptr %2260, i64 0, i64 0
  %2262 = call i32 @LIBXSMM_GEMM_GETENUM_COMP_PREC(ptr noundef %2261)
  %2263 = icmp eq i32 3, %2262
  br i1 %2263, label %2264, label %2407

2264:                                             ; preds = %2258
  %2265 = load ptr, ptr %7, align 8, !tbaa !5
  %2266 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %2265, i32 0, i32 6
  %2267 = load i32, ptr %2266, align 4, !tbaa !51
  %2268 = icmp uge i32 %2267, 1104
  br i1 %2268, label %2269, label %2407

2269:                                             ; preds = %2264
  store i32 0, ptr %19, align 4, !tbaa !9
  br label %2270

2270:                                             ; preds = %2403, %2269
  %2271 = load i32, ptr %19, align 4, !tbaa !9
  %2272 = load i32, ptr %12, align 4, !tbaa !9
  %2273 = icmp ult i32 %2271, %2272
  br i1 %2273, label %2274, label %2406

2274:                                             ; preds = %2270
  store i32 0, ptr %20, align 4, !tbaa !9
  br label %2275

2275:                                             ; preds = %2399, %2274
  %2276 = load i32, ptr %20, align 4, !tbaa !9
  %2277 = load i32, ptr %16, align 4, !tbaa !9
  %2278 = icmp ult i32 %2276, %2277
  br i1 %2278, label %2279, label %2402

2279:                                             ; preds = %2275
  call void @llvm.lifetime.start.p0(i64 4, ptr %77) #4
  %2280 = load i32, ptr %17, align 4, !tbaa !9
  %2281 = load i32, ptr %20, align 4, !tbaa !9
  %2282 = add i32 %2280, %2281
  %2283 = load i32, ptr %16, align 4, !tbaa !9
  %2284 = load i32, ptr %19, align 4, !tbaa !9
  %2285 = mul i32 %2283, %2284
  %2286 = add i32 %2282, %2285
  store i32 %2286, ptr %77, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %78) #4
  %2287 = load i32, ptr %17, align 4, !tbaa !9
  %2288 = sub i32 %2287, 1
  store i32 %2288, ptr %78, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 1, ptr %79) #4
  %2289 = load ptr, ptr %9, align 8, !tbaa !5
  %2290 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %2289, i32 0, i32 21
  %2291 = load i8, ptr %2290, align 4, !tbaa !32
  %2292 = sext i8 %2291 to i32
  %2293 = icmp eq i32 %2292, 121
  br i1 %2293, label %2294, label %2295

2294:                                             ; preds = %2279
  br label %2309

2295:                                             ; preds = %2279
  %2296 = load ptr, ptr %9, align 8, !tbaa !5
  %2297 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %2296, i32 0, i32 21
  %2298 = load i8, ptr %2297, align 4, !tbaa !32
  %2299 = sext i8 %2298 to i32
  %2300 = icmp eq i32 %2299, 120
  br i1 %2300, label %2301, label %2302

2301:                                             ; preds = %2295
  br label %2307

2302:                                             ; preds = %2295
  %2303 = load ptr, ptr %9, align 8, !tbaa !5
  %2304 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %2303, i32 0, i32 21
  %2305 = load i8, ptr %2304, align 4, !tbaa !32
  %2306 = sext i8 %2305 to i32
  br label %2307

2307:                                             ; preds = %2302, %2301
  %2308 = phi i32 [ 121, %2301 ], [ %2306, %2302 ]
  br label %2309

2309:                                             ; preds = %2307, %2294
  %2310 = phi i32 [ 122, %2294 ], [ %2308, %2307 ]
  %2311 = trunc i32 %2310 to i8
  store i8 %2311, ptr %79, align 1, !tbaa !60
  %2312 = load ptr, ptr %7, align 8, !tbaa !5
  %2313 = load i8, ptr %79, align 1, !tbaa !60
  %2314 = load i32, ptr %77, align 4, !tbaa !9
  %2315 = load i32, ptr %78, align 4, !tbaa !9
  call void @libxsmm_x86_instruction_vec_compute_2reg_imm8(ptr noundef %2312, i32 noundef -393396933, i8 noundef signext %2313, i32 noundef %2314, i32 noundef %2315, i32 noundef 1)
  %2316 = load ptr, ptr %7, align 8, !tbaa !5
  %2317 = load i8, ptr %79, align 1, !tbaa !60
  %2318 = load i32, ptr %77, align 4, !tbaa !9
  %2319 = load i32, ptr %77, align 4, !tbaa !9
  call void @libxsmm_x86_instruction_vec_compute_2reg(ptr noundef %2316, i32 noundef 537208083, i8 noundef signext %2317, i32 noundef %2318, i32 noundef %2319)
  %2320 = load ptr, ptr %7, align 8, !tbaa !5
  %2321 = load i32, ptr %18, align 4, !tbaa !9
  %2322 = load ptr, ptr %8, align 8, !tbaa !5
  %2323 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %2322, i32 0, i32 5
  %2324 = load i32, ptr %2323, align 4, !tbaa !36
  %2325 = load i32, ptr %19, align 4, !tbaa !9
  %2326 = load ptr, ptr %10, align 8, !tbaa !5
  %2327 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %2326, i32 0, i32 5
  %2328 = load i32, ptr %2327, align 1, !tbaa !37
  %2329 = mul i32 %2325, %2328
  %2330 = load i32, ptr %20, align 4, !tbaa !9
  %2331 = mul i32 2, %2330
  %2332 = load ptr, ptr %9, align 8, !tbaa !5
  %2333 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %2332, i32 0, i32 2
  %2334 = load i32, ptr %2333, align 8, !tbaa !11
  %2335 = udiv i32 %2334, 2
  %2336 = mul i32 %2331, %2335
  %2337 = add i32 %2329, %2336
  %2338 = load ptr, ptr %9, align 8, !tbaa !5
  %2339 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %2338, i32 0, i32 5
  %2340 = load i32, ptr %2339, align 4, !tbaa !38
  %2341 = mul i32 %2337, %2340
  %2342 = load ptr, ptr %9, align 8, !tbaa !5
  %2343 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %2342, i32 0, i32 21
  %2344 = load i8, ptr %2343, align 4, !tbaa !32
  %2345 = load i32, ptr %77, align 4, !tbaa !9
  %2346 = load i32, ptr %20, align 4, !tbaa !9
  %2347 = load i32, ptr %16, align 4, !tbaa !9
  %2348 = sub i32 %2347, 1
  %2349 = icmp eq i32 %2346, %2348
  br i1 %2349, label %2350, label %2354

2350:                                             ; preds = %2309
  %2351 = load ptr, ptr %9, align 8, !tbaa !5
  %2352 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %2351, i32 0, i32 11
  %2353 = load i32, ptr %2352, align 4, !tbaa !29
  br label %2355

2354:                                             ; preds = %2309
  br label %2355

2355:                                             ; preds = %2354, %2350
  %2356 = phi i32 [ %2353, %2350 ], [ 0, %2354 ]
  call void @libxsmm_x86_instruction_unified_vec_move(ptr noundef %2320, i32 noundef %2321, i32 noundef %2324, i32 noundef 127, i32 noundef 0, i32 noundef %2341, i8 noundef signext %2344, i32 noundef %2345, i32 noundef %2356, i32 noundef 2, i32 noundef 1)
  %2357 = load ptr, ptr %7, align 8, !tbaa !5
  %2358 = load i8, ptr %79, align 1, !tbaa !60
  %2359 = load i32, ptr %78, align 4, !tbaa !9
  %2360 = load i32, ptr %78, align 4, !tbaa !9
  call void @libxsmm_x86_instruction_vec_compute_2reg(ptr noundef %2357, i32 noundef 537208083, i8 noundef signext %2358, i32 noundef %2359, i32 noundef %2360)
  %2361 = load ptr, ptr %7, align 8, !tbaa !5
  %2362 = load i32, ptr %18, align 4, !tbaa !9
  %2363 = load ptr, ptr %8, align 8, !tbaa !5
  %2364 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %2363, i32 0, i32 5
  %2365 = load i32, ptr %2364, align 4, !tbaa !36
  %2366 = load i32, ptr %19, align 4, !tbaa !9
  %2367 = load ptr, ptr %10, align 8, !tbaa !5
  %2368 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %2367, i32 0, i32 5
  %2369 = load i32, ptr %2368, align 1, !tbaa !37
  %2370 = mul i32 %2366, %2369
  %2371 = load i32, ptr %20, align 4, !tbaa !9
  %2372 = mul i32 2, %2371
  %2373 = add i32 %2372, 1
  %2374 = load ptr, ptr %9, align 8, !tbaa !5
  %2375 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %2374, i32 0, i32 2
  %2376 = load i32, ptr %2375, align 8, !tbaa !11
  %2377 = udiv i32 %2376, 2
  %2378 = mul i32 %2373, %2377
  %2379 = add i32 %2370, %2378
  %2380 = load ptr, ptr %9, align 8, !tbaa !5
  %2381 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %2380, i32 0, i32 5
  %2382 = load i32, ptr %2381, align 4, !tbaa !38
  %2383 = mul i32 %2379, %2382
  %2384 = load ptr, ptr %9, align 8, !tbaa !5
  %2385 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %2384, i32 0, i32 21
  %2386 = load i8, ptr %2385, align 4, !tbaa !32
  %2387 = load i32, ptr %78, align 4, !tbaa !9
  %2388 = load i32, ptr %20, align 4, !tbaa !9
  %2389 = load i32, ptr %16, align 4, !tbaa !9
  %2390 = sub i32 %2389, 1
  %2391 = icmp eq i32 %2388, %2390
  br i1 %2391, label %2392, label %2396

2392:                                             ; preds = %2355
  %2393 = load ptr, ptr %9, align 8, !tbaa !5
  %2394 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %2393, i32 0, i32 11
  %2395 = load i32, ptr %2394, align 4, !tbaa !29
  br label %2397

2396:                                             ; preds = %2355
  br label %2397

2397:                                             ; preds = %2396, %2392
  %2398 = phi i32 [ %2395, %2392 ], [ 0, %2396 ]
  call void @libxsmm_x86_instruction_unified_vec_move(ptr noundef %2361, i32 noundef %2362, i32 noundef %2365, i32 noundef 127, i32 noundef 0, i32 noundef %2383, i8 noundef signext %2386, i32 noundef %2387, i32 noundef %2398, i32 noundef 3, i32 noundef 1)
  call void @llvm.lifetime.end.p0(i64 1, ptr %79) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %78) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %77) #4
  br label %2399

2399:                                             ; preds = %2397
  %2400 = load i32, ptr %20, align 4, !tbaa !9
  %2401 = add i32 %2400, 1
  store i32 %2401, ptr %20, align 4, !tbaa !9
  br label %2275, !llvm.loop !61

2402:                                             ; preds = %2275
  br label %2403

2403:                                             ; preds = %2402
  %2404 = load i32, ptr %19, align 4, !tbaa !9
  %2405 = add i32 %2404, 1
  store i32 %2405, ptr %19, align 4, !tbaa !9
  br label %2270, !llvm.loop !62

2406:                                             ; preds = %2270
  br label %2856

2407:                                             ; preds = %2264, %2258, %2252
  call void @llvm.lifetime.start.p0(i64 4, ptr %80) #4
  store i32 0, ptr %80, align 4, !tbaa !9
  %2408 = load ptr, ptr %10, align 8, !tbaa !5
  %2409 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %2408, i32 0, i32 8
  %2410 = getelementptr inbounds [3 x i8], ptr %2409, i64 0, i64 0
  %2411 = call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef %2410)
  %2412 = icmp eq i32 2, %2411
  br i1 %2412, label %2413, label %2435

2413:                                             ; preds = %2407
  %2414 = load ptr, ptr %10, align 8, !tbaa !5
  %2415 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %2414, i32 0, i32 8
  %2416 = getelementptr inbounds [3 x i8], ptr %2415, i64 0, i64 0
  %2417 = call i32 @LIBXSMM_GEMM_GETENUM_COMP_PREC(ptr noundef %2416)
  %2418 = icmp eq i32 1, %2417
  br i1 %2418, label %2419, label %2435

2419:                                             ; preds = %2413
  %2420 = load ptr, ptr %9, align 8, !tbaa !5
  %2421 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %2420, i32 0, i32 14
  %2422 = load i32, ptr %2421, align 8, !tbaa !63
  %2423 = icmp ne i32 %2422, -268032430
  br i1 %2423, label %2424, label %2434

2424:                                             ; preds = %2419
  %2425 = load ptr, ptr %7, align 8, !tbaa !5
  %2426 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %2425, i32 0, i32 6
  %2427 = load i32, ptr %2426, align 4, !tbaa !51
  %2428 = icmp ne i32 %2427, 1008
  br i1 %2428, label %2429, label %2434

2429:                                             ; preds = %2424
  store i32 1, ptr %80, align 4, !tbaa !9
  %2430 = load ptr, ptr %7, align 8, !tbaa !5
  %2431 = load ptr, ptr %8, align 8, !tbaa !5
  %2432 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %2431, i32 0, i32 24
  %2433 = load i32, ptr %2432, align 4, !tbaa !22
  call void @libxsmm_generator_vcvtneps2bf16_avx512_prep_stack(ptr noundef %2430, i32 noundef %2433)
  br label %2434

2434:                                             ; preds = %2429, %2424, %2419
  br label %2435

2435:                                             ; preds = %2434, %2413, %2407
  store i32 0, ptr %19, align 4, !tbaa !9
  br label %2436

2436:                                             ; preds = %2844, %2435
  %2437 = load i32, ptr %19, align 4, !tbaa !9
  %2438 = load i32, ptr %12, align 4, !tbaa !9
  %2439 = icmp ult i32 %2437, %2438
  br i1 %2439, label %2440, label %2847

2440:                                             ; preds = %2436
  store i32 0, ptr %20, align 4, !tbaa !9
  br label %2441

2441:                                             ; preds = %2840, %2440
  %2442 = load i32, ptr %20, align 4, !tbaa !9
  %2443 = load i32, ptr %16, align 4, !tbaa !9
  %2444 = icmp ult i32 %2442, %2443
  br i1 %2444, label %2445, label %2843

2445:                                             ; preds = %2441
  call void @llvm.lifetime.start.p0(i64 4, ptr %81) #4
  %2446 = load i32, ptr %17, align 4, !tbaa !9
  %2447 = load i32, ptr %20, align 4, !tbaa !9
  %2448 = add i32 %2446, %2447
  %2449 = load i32, ptr %16, align 4, !tbaa !9
  %2450 = load i32, ptr %19, align 4, !tbaa !9
  %2451 = mul i32 %2449, %2450
  %2452 = add i32 %2448, %2451
  store i32 %2452, ptr %81, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %82) #4
  %2453 = load ptr, ptr %9, align 8, !tbaa !5
  %2454 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %2453, i32 0, i32 0
  %2455 = load i32, ptr %2454, align 8, !tbaa !21
  %2456 = icmp uge i32 %2455, 1005
  br i1 %2456, label %2457, label %2470

2457:                                             ; preds = %2445
  %2458 = load i32, ptr %13, align 4, !tbaa !9
  %2459 = icmp ugt i32 %2458, 0
  br i1 %2459, label %2466, label %2460

2460:                                             ; preds = %2457
  %2461 = load i32, ptr %14, align 4, !tbaa !9
  %2462 = icmp ugt i32 %2461, 0
  br i1 %2462, label %2466, label %2463

2463:                                             ; preds = %2460
  %2464 = load i32, ptr %15, align 4, !tbaa !9
  %2465 = icmp ugt i32 %2464, 0
  br label %2466

2466:                                             ; preds = %2463, %2460, %2457
  %2467 = phi i1 [ true, %2460 ], [ true, %2457 ], [ %2465, %2463 ]
  %2468 = zext i1 %2467 to i64
  %2469 = select i1 %2467, i32 2, i32 1
  br label %2476

2470:                                             ; preds = %2445
  %2471 = load i32, ptr %11, align 4, !tbaa !9
  %2472 = load ptr, ptr %9, align 8, !tbaa !5
  %2473 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %2472, i32 0, i32 2
  %2474 = load i32, ptr %2473, align 8, !tbaa !11
  %2475 = urem i32 %2471, %2474
  br label %2476

2476:                                             ; preds = %2470, %2466
  %2477 = phi i32 [ %2469, %2466 ], [ %2475, %2470 ]
  store i32 %2477, ptr %82, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 1, ptr %83) #4
  %2478 = load ptr, ptr %9, align 8, !tbaa !5
  %2479 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %2478, i32 0, i32 21
  %2480 = load i8, ptr %2479, align 4, !tbaa !32
  store i8 %2480, ptr %83, align 1, !tbaa !60
  %2481 = load ptr, ptr %9, align 8, !tbaa !5
  %2482 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %2481, i32 0, i32 31
  %2483 = load i32, ptr %2482, align 4, !tbaa !26
  %2484 = icmp eq i32 %2483, 1
  br i1 %2484, label %2490, label %2485

2485:                                             ; preds = %2476
  %2486 = load ptr, ptr %9, align 8, !tbaa !5
  %2487 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %2486, i32 0, i32 30
  %2488 = load i32, ptr %2487, align 8, !tbaa !27
  %2489 = icmp eq i32 %2488, 1
  br i1 %2489, label %2490, label %2578

2490:                                             ; preds = %2485, %2476
  call void @llvm.lifetime.start.p0(i64 4, ptr %84) #4
  %2491 = load ptr, ptr %9, align 8, !tbaa !5
  %2492 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %2491, i32 0, i32 11
  %2493 = load i32, ptr %2492, align 4, !tbaa !29
  %2494 = icmp ne i32 %2493, 0
  br i1 %2494, label %2495, label %2504

2495:                                             ; preds = %2490
  %2496 = load i32, ptr %20, align 4, !tbaa !9
  %2497 = load i32, ptr %16, align 4, !tbaa !9
  %2498 = sub i32 %2497, 1
  %2499 = icmp eq i32 %2496, %2498
  br i1 %2499, label %2500, label %2504

2500:                                             ; preds = %2495
  %2501 = load ptr, ptr %9, align 8, !tbaa !5
  %2502 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %2501, i32 0, i32 11
  %2503 = load i32, ptr %2502, align 4, !tbaa !29
  br label %2505

2504:                                             ; preds = %2495, %2490
  br label %2505

2505:                                             ; preds = %2504, %2500
  %2506 = phi i32 [ %2503, %2500 ], [ 0, %2504 ]
  store i32 %2506, ptr %84, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %85) #4
  %2507 = load ptr, ptr %9, align 8, !tbaa !5
  %2508 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %2507, i32 0, i32 0
  %2509 = load i32, ptr %2508, align 8, !tbaa !21
  %2510 = icmp ult i32 %2509, 1101
  br i1 %2510, label %2511, label %2523

2511:                                             ; preds = %2505
  %2512 = load i32, ptr %19, align 4, !tbaa !9
  %2513 = load ptr, ptr %10, align 8, !tbaa !5
  %2514 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %2513, i32 0, i32 30
  %2515 = load i32, ptr %2514, align 1, !tbaa !30
  %2516 = mul i32 %2512, %2515
  %2517 = udiv i32 %2516, 8
  %2518 = load i32, ptr %20, align 4, !tbaa !9
  %2519 = mul i32 %2518, 8
  %2520 = add i32 %2519, 7
  %2521 = udiv i32 %2520, 8
  %2522 = add i32 %2517, %2521
  br label %2535

2523:                                             ; preds = %2505
  %2524 = load i32, ptr %19, align 4, !tbaa !9
  %2525 = load ptr, ptr %10, align 8, !tbaa !5
  %2526 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %2525, i32 0, i32 30
  %2527 = load i32, ptr %2526, align 1, !tbaa !30
  %2528 = mul i32 %2524, %2527
  %2529 = udiv i32 %2528, 8
  %2530 = load i32, ptr %20, align 4, !tbaa !9
  %2531 = mul i32 %2530, 16
  %2532 = add i32 %2531, 7
  %2533 = udiv i32 %2532, 8
  %2534 = add i32 %2529, %2533
  br label %2535

2535:                                             ; preds = %2523, %2511
  %2536 = phi i32 [ %2522, %2511 ], [ %2534, %2523 ]
  store i32 %2536, ptr %85, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %86) #4
  %2537 = load i32, ptr %20, align 4, !tbaa !9
  %2538 = mul i32 %2537, 4
  %2539 = load ptr, ptr %9, align 8, !tbaa !5
  %2540 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %2539, i32 0, i32 41
  %2541 = load i32, ptr %2540, align 4, !tbaa !31
  %2542 = add i32 %2538, %2541
  %2543 = urem i32 %2542, 8
  store i32 %2543, ptr %86, align 4, !tbaa !9
  %2544 = load ptr, ptr %9, align 8, !tbaa !5
  %2545 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %2544, i32 0, i32 0
  %2546 = load i32, ptr %2545, align 8, !tbaa !21
  %2547 = icmp ult i32 %2546, 1005
  br i1 %2547, label %2548, label %2561

2548:                                             ; preds = %2535
  %2549 = load i32, ptr %19, align 4, !tbaa !9
  %2550 = load ptr, ptr %10, align 8, !tbaa !5
  %2551 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %2550, i32 0, i32 30
  %2552 = load i32, ptr %2551, align 1, !tbaa !30
  %2553 = mul i32 %2549, %2552
  %2554 = udiv i32 %2553, 8
  %2555 = load i32, ptr %20, align 4, !tbaa !9
  %2556 = udiv i32 %2555, 2
  %2557 = mul i32 %2556, 8
  %2558 = add i32 %2557, 7
  %2559 = udiv i32 %2558, 8
  %2560 = add i32 %2554, %2559
  br label %2563

2561:                                             ; preds = %2535
  %2562 = load i32, ptr %85, align 4, !tbaa !9
  br label %2563

2563:                                             ; preds = %2561, %2548
  %2564 = phi i32 [ %2560, %2548 ], [ %2562, %2561 ]
  store i32 %2564, ptr %85, align 4, !tbaa !9
  %2565 = load ptr, ptr %7, align 8, !tbaa !5
  %2566 = load ptr, ptr %9, align 8, !tbaa !5
  %2567 = load i32, ptr %81, align 4, !tbaa !9
  %2568 = load ptr, ptr %9, align 8, !tbaa !5
  %2569 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %2568, i32 0, i32 30
  %2570 = load i32, ptr %2569, align 8, !tbaa !27
  %2571 = load i32, ptr %70, align 4, !tbaa !9
  %2572 = load i32, ptr %85, align 4, !tbaa !9
  %2573 = load i32, ptr %76, align 4, !tbaa !9
  %2574 = load i32, ptr %72, align 4, !tbaa !9
  %2575 = load i32, ptr %74, align 4, !tbaa !9
  %2576 = load i32, ptr %84, align 4, !tbaa !9
  %2577 = load i32, ptr %86, align 4, !tbaa !9
  call void @libxsmm_generator_gemm_apply_relu_to_vreg(ptr noundef %2565, ptr noundef %2566, i32 noundef 0, i32 noundef %2567, i32 noundef %2570, i32 noundef %2571, i32 noundef %2572, i32 noundef 1, i32 noundef %2573, i32 noundef %2574, i32 noundef %2575, i32 noundef %2576, i32 noundef %2577)
  call void @llvm.lifetime.end.p0(i64 4, ptr %86) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %85) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %84) #4
  br label %2591

2578:                                             ; preds = %2485
  %2579 = load ptr, ptr %9, align 8, !tbaa !5
  %2580 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %2579, i32 0, i32 33
  %2581 = load i32, ptr %2580, align 4, !tbaa !28
  %2582 = icmp eq i32 %2581, 1
  br i1 %2582, label %2583, label %2590

2583:                                             ; preds = %2578
  call void @llvm.lifetime.start.p0(i64 4, ptr %87) #4
  store i32 0, ptr %87, align 4, !tbaa !9
  %2584 = load ptr, ptr %7, align 8, !tbaa !5
  %2585 = load ptr, ptr %22, align 8, !tbaa !5
  %2586 = load i32, ptr %71, align 4, !tbaa !9
  %2587 = load i32, ptr %81, align 4, !tbaa !9
  %2588 = load i32, ptr %87, align 4, !tbaa !9
  call void @libxsmm_generator_gemm_apply_sigmoid_to_vreg_from_scratch(ptr noundef %2584, ptr noundef %2585, i32 noundef %2586, i32 noundef %2587, i32 noundef %2588)
  %2589 = load i32, ptr %87, align 4, !tbaa !9
  store i32 %2589, ptr %81, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 4, ptr %87) #4
  br label %2590

2590:                                             ; preds = %2583, %2578
  br label %2591

2591:                                             ; preds = %2590, %2563
  %2592 = load ptr, ptr %9, align 8, !tbaa !5
  %2593 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %2592, i32 0, i32 0
  %2594 = load i32, ptr %2593, align 8, !tbaa !21
  %2595 = icmp uge i32 %2594, 1005
  br i1 %2595, label %2596, label %2618

2596:                                             ; preds = %2591
  %2597 = load ptr, ptr %9, align 8, !tbaa !5
  %2598 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %2597, i32 0, i32 0
  %2599 = load i32, ptr %2598, align 8, !tbaa !21
  %2600 = icmp ult i32 %2599, 1051
  br i1 %2600, label %2601, label %2618

2601:                                             ; preds = %2596
  %2602 = load ptr, ptr %9, align 8, !tbaa !5
  %2603 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %2602, i32 0, i32 11
  %2604 = load i32, ptr %2603, align 4, !tbaa !29
  %2605 = icmp ne i32 %2604, 0
  br i1 %2605, label %2606, label %2618

2606:                                             ; preds = %2601
  %2607 = load i32, ptr %20, align 4, !tbaa !9
  %2608 = load i32, ptr %16, align 4, !tbaa !9
  %2609 = sub i32 %2608, 1
  %2610 = icmp eq i32 %2607, %2609
  br i1 %2610, label %2611, label %2618

2611:                                             ; preds = %2606
  %2612 = load ptr, ptr %7, align 8, !tbaa !5
  %2613 = load ptr, ptr %9, align 8, !tbaa !5
  %2614 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %2613, i32 0, i32 0
  %2615 = load i32, ptr %2614, align 8, !tbaa !21
  %2616 = load i32, ptr %75, align 4, !tbaa !9
  %2617 = load i32, ptr %74, align 4, !tbaa !9
  call void @libxsmm_x86_instruction_vec_move(ptr noundef %2612, i32 noundef %2615, i32 noundef 537138704, i32 noundef %2616, i32 noundef 127, i32 noundef 0, i32 noundef 0, i8 noundef signext 121, i32 noundef %2617, i32 noundef 0, i32 noundef 0, i32 noundef 0)
  br label %2618

2618:                                             ; preds = %2611, %2606, %2601, %2596, %2591
  %2619 = load ptr, ptr %10, align 8, !tbaa !5
  %2620 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %2619, i32 0, i32 8
  %2621 = getelementptr inbounds [3 x i8], ptr %2620, i64 0, i64 0
  %2622 = call i32 @LIBXSMM_GEMM_GETENUM_COMP_PREC(ptr noundef %2621)
  %2623 = icmp eq i32 1, %2622
  br i1 %2623, label %2624, label %2630

2624:                                             ; preds = %2618
  %2625 = load ptr, ptr %10, align 8, !tbaa !5
  %2626 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %2625, i32 0, i32 8
  %2627 = getelementptr inbounds [3 x i8], ptr %2626, i64 0, i64 0
  %2628 = call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef %2627)
  %2629 = icmp eq i32 3, %2628
  br i1 %2629, label %2647, label %2630

2630:                                             ; preds = %2624, %2618
  %2631 = load ptr, ptr %10, align 8, !tbaa !5
  %2632 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %2631, i32 0, i32 8
  %2633 = getelementptr inbounds [3 x i8], ptr %2632, i64 0, i64 0
  %2634 = call i32 @LIBXSMM_GEMM_GETENUM_COMP_PREC(ptr noundef %2633)
  %2635 = icmp eq i32 3, %2634
  br i1 %2635, label %2636, label %2686

2636:                                             ; preds = %2630
  %2637 = load ptr, ptr %10, align 8, !tbaa !5
  %2638 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %2637, i32 0, i32 8
  %2639 = getelementptr inbounds [3 x i8], ptr %2638, i64 0, i64 0
  %2640 = call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef %2639)
  %2641 = icmp eq i32 3, %2640
  br i1 %2641, label %2642, label %2686

2642:                                             ; preds = %2636
  %2643 = load ptr, ptr %7, align 8, !tbaa !5
  %2644 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %2643, i32 0, i32 6
  %2645 = load i32, ptr %2644, align 4, !tbaa !51
  %2646 = icmp ult i32 %2645, 1104
  br i1 %2646, label %2647, label %2686

2647:                                             ; preds = %2642, %2624
  %2648 = load i8, ptr %83, align 1, !tbaa !60
  %2649 = sext i8 %2648 to i32
  %2650 = icmp eq i32 %2649, 122
  %2651 = zext i1 %2650 to i64
  %2652 = select i1 %2650, i32 121, i32 120
  %2653 = trunc i32 %2652 to i8
  store i8 %2653, ptr %83, align 1, !tbaa !60
  %2654 = load ptr, ptr %10, align 8, !tbaa !5
  %2655 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %2654, i32 0, i32 8
  %2656 = getelementptr inbounds [3 x i8], ptr %2655, i64 0, i64 0
  %2657 = call i32 @LIBXSMM_GEMM_GETENUM_COMP_PREC(ptr noundef %2656)
  %2658 = icmp eq i32 1, %2657
  br i1 %2658, label %2659, label %2685

2659:                                             ; preds = %2647
  %2660 = load ptr, ptr %10, align 8, !tbaa !5
  %2661 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %2660, i32 0, i32 8
  %2662 = getelementptr inbounds [3 x i8], ptr %2661, i64 0, i64 0
  %2663 = call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef %2662)
  %2664 = icmp eq i32 3, %2663
  br i1 %2664, label %2665, label %2685

2665:                                             ; preds = %2659
  %2666 = load ptr, ptr %7, align 8, !tbaa !5
  %2667 = load ptr, ptr %9, align 8, !tbaa !5
  %2668 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %2667, i32 0, i32 21
  %2669 = load i8, ptr %2668, align 4, !tbaa !32
  %2670 = load i32, ptr %81, align 4, !tbaa !9
  %2671 = load i32, ptr %81, align 4, !tbaa !9
  %2672 = load ptr, ptr %7, align 8, !tbaa !5
  %2673 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %2672, i32 0, i32 6
  %2674 = load i32, ptr %2673, align 4, !tbaa !51
  %2675 = icmp ult i32 %2674, 1101
  %2676 = zext i1 %2675 to i64
  %2677 = select i1 %2675, i32 0, i32 1
  %2678 = load ptr, ptr %7, align 8, !tbaa !5
  %2679 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %2678, i32 0, i32 6
  %2680 = load i32, ptr %2679, align 4, !tbaa !51
  %2681 = icmp ult i32 %2680, 1101
  %2682 = zext i1 %2681 to i64
  %2683 = select i1 %2681, i32 0, i32 1
  %2684 = trunc i32 %2683 to i8
  call void @libxsmm_x86_instruction_vec_compute_2reg_mask_sae_imm8(ptr noundef %2666, i32 noundef 671954205, i8 noundef signext %2669, i32 noundef %2670, i32 noundef %2671, i32 noundef 0, i32 noundef %2677, i8 noundef zeroext %2684, i32 noundef 0)
  br label %2685

2685:                                             ; preds = %2665, %2659, %2647
  br label %2686

2686:                                             ; preds = %2685, %2642, %2636, %2630
  %2687 = load ptr, ptr %10, align 8, !tbaa !5
  %2688 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %2687, i32 0, i32 8
  %2689 = getelementptr inbounds [3 x i8], ptr %2688, i64 0, i64 0
  %2690 = call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef %2689)
  %2691 = icmp eq i32 1, %2690
  br i1 %2691, label %2692, label %2705

2692:                                             ; preds = %2686
  %2693 = load ptr, ptr %10, align 8, !tbaa !5
  %2694 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %2693, i32 0, i32 8
  %2695 = getelementptr inbounds [3 x i8], ptr %2694, i64 0, i64 0
  %2696 = call i32 @LIBXSMM_GEMM_GETENUM_COMP_PREC(ptr noundef %2695)
  %2697 = icmp eq i32 3, %2696
  br i1 %2697, label %2698, label %2705

2698:                                             ; preds = %2692
  %2699 = load ptr, ptr %7, align 8, !tbaa !5
  %2700 = load ptr, ptr %9, align 8, !tbaa !5
  %2701 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %2700, i32 0, i32 21
  %2702 = load i8, ptr %2701, align 4, !tbaa !32
  %2703 = load i32, ptr %81, align 4, !tbaa !9
  %2704 = load i32, ptr %81, align 4, !tbaa !9
  call void @libxsmm_x86_instruction_vec_compute_2reg(ptr noundef %2699, i32 noundef 537208083, i8 noundef signext %2702, i32 noundef %2703, i32 noundef %2704)
  br label %2705

2705:                                             ; preds = %2698, %2692, %2686
  %2706 = load ptr, ptr %10, align 8, !tbaa !5
  %2707 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %2706, i32 0, i32 8
  %2708 = getelementptr inbounds [3 x i8], ptr %2707, i64 0, i64 0
  %2709 = call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef %2708)
  %2710 = icmp eq i32 2, %2709
  br i1 %2710, label %2711, label %2751

2711:                                             ; preds = %2705
  %2712 = load ptr, ptr %10, align 8, !tbaa !5
  %2713 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %2712, i32 0, i32 8
  %2714 = getelementptr inbounds [3 x i8], ptr %2713, i64 0, i64 0
  %2715 = call i32 @LIBXSMM_GEMM_GETENUM_COMP_PREC(ptr noundef %2714)
  %2716 = icmp eq i32 1, %2715
  br i1 %2716, label %2723, label %2717

2717:                                             ; preds = %2711
  %2718 = load ptr, ptr %10, align 8, !tbaa !5
  %2719 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %2718, i32 0, i32 8
  %2720 = getelementptr inbounds [3 x i8], ptr %2719, i64 0, i64 0
  %2721 = call i32 @LIBXSMM_GEMM_GETENUM_COMP_PREC(ptr noundef %2720)
  %2722 = icmp eq i32 8, %2721
  br i1 %2722, label %2723, label %2751

2723:                                             ; preds = %2717, %2711
  %2724 = load i8, ptr %83, align 1, !tbaa !60
  %2725 = sext i8 %2724 to i32
  %2726 = icmp eq i32 %2725, 122
  %2727 = zext i1 %2726 to i64
  %2728 = select i1 %2726, i32 121, i32 120
  %2729 = trunc i32 %2728 to i8
  store i8 %2729, ptr %83, align 1, !tbaa !60
  %2730 = load i32, ptr %80, align 4, !tbaa !9
  %2731 = icmp eq i32 %2730, 0
  br i1 %2731, label %2732, label %2739

2732:                                             ; preds = %2723
  %2733 = load ptr, ptr %7, align 8, !tbaa !5
  %2734 = load ptr, ptr %9, align 8, !tbaa !5
  %2735 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %2734, i32 0, i32 21
  %2736 = load i8, ptr %2735, align 4, !tbaa !32
  %2737 = load i32, ptr %81, align 4, !tbaa !9
  %2738 = load i32, ptr %81, align 4, !tbaa !9
  call void @libxsmm_x86_instruction_vec_compute_2reg(ptr noundef %2733, i32 noundef 537273970, i8 noundef signext %2736, i32 noundef %2737, i32 noundef %2738)
  br label %2750

2739:                                             ; preds = %2723
  %2740 = load ptr, ptr %7, align 8, !tbaa !5
  %2741 = load ptr, ptr %9, align 8, !tbaa !5
  %2742 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %2741, i32 0, i32 21
  %2743 = load i8, ptr %2742, align 4, !tbaa !32
  %2744 = load i32, ptr %81, align 4, !tbaa !9
  %2745 = load i32, ptr %81, align 4, !tbaa !9
  %2746 = load i32, ptr %17, align 4, !tbaa !9
  %2747 = sub i32 %2746, 2
  %2748 = load i32, ptr %17, align 4, !tbaa !9
  %2749 = sub i32 %2748, 1
  call void @libxsmm_generator_vcvtneps2bf16_avx512_preppedstack(ptr noundef %2740, i8 noundef signext %2743, i32 noundef %2744, i32 noundef %2745, i32 noundef %2747, i32 noundef %2749, i32 noundef 6, i32 noundef 7, i32 noundef 0)
  br label %2750

2750:                                             ; preds = %2739, %2732
  br label %2751

2751:                                             ; preds = %2750, %2717, %2705
  %2752 = load ptr, ptr %10, align 8, !tbaa !5
  %2753 = call i32 @libxsmm_x86_is_Amxfp4_Bbf16_gemm(ptr noundef %2752)
  %2754 = icmp ugt i32 %2753, 0
  br i1 %2754, label %2759, label %2755

2755:                                             ; preds = %2751
  %2756 = load ptr, ptr %10, align 8, !tbaa !5
  %2757 = call i32 @libxsmm_x86_is_Amxfp4_Bi8_gemm(ptr noundef %2756)
  %2758 = icmp ugt i32 %2757, 0
  br i1 %2758, label %2759, label %2804

2759:                                             ; preds = %2755, %2751
  %2760 = load ptr, ptr %10, align 8, !tbaa !5
  %2761 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %2760, i32 0, i32 8
  %2762 = getelementptr inbounds [3 x i8], ptr %2761, i64 0, i64 0
  %2763 = call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef %2762)
  %2764 = icmp eq i32 2, %2763
  br i1 %2764, label %2765, label %2804

2765:                                             ; preds = %2759
  %2766 = load ptr, ptr %9, align 8, !tbaa !5
  %2767 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %2766, i32 0, i32 11
  %2768 = load i32, ptr %2767, align 4, !tbaa !29
  %2769 = icmp ne i32 %2768, 0
  br i1 %2769, label %2770, label %2804

2770:                                             ; preds = %2765
  %2771 = load i32, ptr %20, align 4, !tbaa !9
  %2772 = load i32, ptr %16, align 4, !tbaa !9
  %2773 = sub i32 %2772, 1
  %2774 = icmp eq i32 %2771, %2773
  br i1 %2774, label %2775, label %2804

2775:                                             ; preds = %2770
  %2776 = load ptr, ptr %7, align 8, !tbaa !5
  %2777 = load ptr, ptr %8, align 8, !tbaa !5
  %2778 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %2777, i32 0, i32 24
  %2779 = load i32, ptr %2778, align 4, !tbaa !22
  %2780 = load i32, ptr %81, align 4, !tbaa !9
  %2781 = load ptr, ptr %8, align 8, !tbaa !5
  %2782 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %2781, i32 0, i32 5
  %2783 = load i32, ptr %2782, align 4, !tbaa !36
  %2784 = load i32, ptr %19, align 4, !tbaa !9
  %2785 = load ptr, ptr %10, align 8, !tbaa !5
  %2786 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %2785, i32 0, i32 5
  %2787 = load i32, ptr %2786, align 1, !tbaa !37
  %2788 = mul i32 %2784, %2787
  %2789 = load i32, ptr %20, align 4, !tbaa !9
  %2790 = load ptr, ptr %9, align 8, !tbaa !5
  %2791 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %2790, i32 0, i32 2
  %2792 = load i32, ptr %2791, align 8, !tbaa !11
  %2793 = mul i32 %2789, %2792
  %2794 = add i32 %2788, %2793
  %2795 = load ptr, ptr %9, align 8, !tbaa !5
  %2796 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %2795, i32 0, i32 5
  %2797 = load i32, ptr %2796, align 4, !tbaa !38
  %2798 = mul i32 %2794, %2797
  %2799 = load i32, ptr %11, align 4, !tbaa !9
  %2800 = load ptr, ptr %9, align 8, !tbaa !5
  %2801 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %2800, i32 0, i32 2
  %2802 = load i32, ptr %2801, align 8, !tbaa !11
  %2803 = urem i32 %2799, %2802
  call void @libxsmm_generator_maskedstore_16bit_avx2(ptr noundef %2776, i32 noundef %2779, i32 noundef %2780, i32 noundef %2783, i32 noundef 127, i32 noundef 0, i32 noundef %2798, i32 noundef %2803)
  br label %2839

2804:                                             ; preds = %2770, %2765, %2759, %2755
  %2805 = load ptr, ptr %7, align 8, !tbaa !5
  %2806 = load i32, ptr %18, align 4, !tbaa !9
  %2807 = load ptr, ptr %8, align 8, !tbaa !5
  %2808 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %2807, i32 0, i32 5
  %2809 = load i32, ptr %2808, align 4, !tbaa !36
  %2810 = load i32, ptr %19, align 4, !tbaa !9
  %2811 = load ptr, ptr %10, align 8, !tbaa !5
  %2812 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %2811, i32 0, i32 5
  %2813 = load i32, ptr %2812, align 1, !tbaa !37
  %2814 = mul i32 %2810, %2813
  %2815 = load i32, ptr %20, align 4, !tbaa !9
  %2816 = load ptr, ptr %9, align 8, !tbaa !5
  %2817 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %2816, i32 0, i32 2
  %2818 = load i32, ptr %2817, align 8, !tbaa !11
  %2819 = mul i32 %2815, %2818
  %2820 = add i32 %2814, %2819
  %2821 = load ptr, ptr %9, align 8, !tbaa !5
  %2822 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %2821, i32 0, i32 5
  %2823 = load i32, ptr %2822, align 4, !tbaa !38
  %2824 = mul i32 %2820, %2823
  %2825 = load i8, ptr %83, align 1, !tbaa !60
  %2826 = load i32, ptr %81, align 4, !tbaa !9
  %2827 = load i32, ptr %20, align 4, !tbaa !9
  %2828 = load i32, ptr %16, align 4, !tbaa !9
  %2829 = sub i32 %2828, 1
  %2830 = icmp eq i32 %2827, %2829
  br i1 %2830, label %2831, label %2835

2831:                                             ; preds = %2804
  %2832 = load ptr, ptr %9, align 8, !tbaa !5
  %2833 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %2832, i32 0, i32 11
  %2834 = load i32, ptr %2833, align 4, !tbaa !29
  br label %2836

2835:                                             ; preds = %2804
  br label %2836

2836:                                             ; preds = %2835, %2831
  %2837 = phi i32 [ %2834, %2831 ], [ 0, %2835 ]
  %2838 = load i32, ptr %82, align 4, !tbaa !9
  call void @libxsmm_x86_instruction_unified_vec_move(ptr noundef %2805, i32 noundef %2806, i32 noundef %2809, i32 noundef 127, i32 noundef 0, i32 noundef %2824, i8 noundef signext %2825, i32 noundef %2826, i32 noundef %2837, i32 noundef %2838, i32 noundef 1)
  br label %2839

2839:                                             ; preds = %2836, %2775
  call void @llvm.lifetime.end.p0(i64 1, ptr %83) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %82) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %81) #4
  br label %2840

2840:                                             ; preds = %2839
  %2841 = load i32, ptr %20, align 4, !tbaa !9
  %2842 = add i32 %2841, 1
  store i32 %2842, ptr %20, align 4, !tbaa !9
  br label %2441, !llvm.loop !64

2843:                                             ; preds = %2441
  br label %2844

2844:                                             ; preds = %2843
  %2845 = load i32, ptr %19, align 4, !tbaa !9
  %2846 = add i32 %2845, 1
  store i32 %2846, ptr %19, align 4, !tbaa !9
  br label %2436, !llvm.loop !65

2847:                                             ; preds = %2436
  %2848 = load i32, ptr %80, align 4, !tbaa !9
  %2849 = icmp ugt i32 %2848, 0
  br i1 %2849, label %2850, label %2855

2850:                                             ; preds = %2847
  %2851 = load ptr, ptr %7, align 8, !tbaa !5
  %2852 = load ptr, ptr %8, align 8, !tbaa !5
  %2853 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %2852, i32 0, i32 24
  %2854 = load i32, ptr %2853, align 4, !tbaa !22
  call void @libxsmm_generator_vcvtneps2bf16_avx512_clean_stack(ptr noundef %2851, i32 noundef %2854)
  br label %2855

2855:                                             ; preds = %2850, %2847
  call void @llvm.lifetime.end.p0(i64 4, ptr %80) #4
  br label %2856

2856:                                             ; preds = %2855, %2406
  %2857 = load ptr, ptr %9, align 8, !tbaa !5
  %2858 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %2857, i32 0, i32 31
  %2859 = load i32, ptr %2858, align 4, !tbaa !26
  %2860 = icmp eq i32 %2859, 1
  br i1 %2860, label %2866, label %2861

2861:                                             ; preds = %2856
  %2862 = load ptr, ptr %9, align 8, !tbaa !5
  %2863 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %2862, i32 0, i32 30
  %2864 = load i32, ptr %2863, align 8, !tbaa !27
  %2865 = icmp eq i32 %2864, 1
  br i1 %2865, label %2866, label %2874

2866:                                             ; preds = %2861, %2856
  %2867 = load ptr, ptr %7, align 8, !tbaa !5
  %2868 = load ptr, ptr %9, align 8, !tbaa !5
  %2869 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %2868, i32 0, i32 30
  %2870 = load i32, ptr %2869, align 8, !tbaa !27
  %2871 = load i32, ptr %70, align 4, !tbaa !9
  %2872 = load i32, ptr %76, align 4, !tbaa !9
  %2873 = load i32, ptr %72, align 4, !tbaa !9
  call void @libxsmm_generator_gemm_cleanup_relu_fusion(ptr noundef %2867, i32 noundef %2870, i32 noundef %2871, i32 noundef %2872, i32 noundef %2873)
  br label %2884

2874:                                             ; preds = %2861
  %2875 = load ptr, ptr %9, align 8, !tbaa !5
  %2876 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %2875, i32 0, i32 33
  %2877 = load i32, ptr %2876, align 4, !tbaa !28
  %2878 = icmp eq i32 %2877, 1
  br i1 %2878, label %2879, label %2883

2879:                                             ; preds = %2874
  %2880 = load ptr, ptr %7, align 8, !tbaa !5
  %2881 = load i32, ptr %71, align 4, !tbaa !9
  %2882 = load i32, ptr %72, align 4, !tbaa !9
  call void @libxsmm_generator_gemm_cleanup_sigmoid_fusion(ptr noundef %2880, i32 noundef %2881, i32 noundef %2882)
  br label %2883

2883:                                             ; preds = %2879, %2874
  br label %2884

2884:                                             ; preds = %2883, %2866
  call void @llvm.lifetime.end.p0(i64 4, ptr %76) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %75) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %74) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %73) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %72) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %71) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %70) #4
  br label %2885

2885:                                             ; preds = %2884, %2172
  br label %2886

2886:                                             ; preds = %2885, %2016
  br label %2887

2887:                                             ; preds = %2886, %1834
  br label %2888

2888:                                             ; preds = %2887, %1344
  br label %2889

2889:                                             ; preds = %2888, %782
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #4
  call void @llvm.lifetime.end.p0(i64 688, ptr %21) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #4
  ret void
}

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

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

declare void @libxsmm_generator_maskedstore_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_vcvtneps2bf16_sse_clean_stack(ptr noundef) #2

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

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

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

declare void @libxsmm_generator_vcvtneps2bf16_avx2_clean_stack(ptr noundef) #2

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

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

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

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

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

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

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

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

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

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


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

%struct.libxsmm_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 }

; Function Attrs: nounwind uwtable
declare dso_local i32 @libxsmm_x86_is_Amxfp4_Bi8_gemm(ptr noundef) local_unnamed_addr #0

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

declare i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef) local_unnamed_addr #2

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

; Function Attrs: nounwind uwtable
declare dso_local i32 @libxsmm_x86_is_Amxfp4_Bfp32_gemm(ptr noundef) local_unnamed_addr #0

; Function Attrs: nounwind uwtable
declare dso_local i32 @libxsmm_x86_is_Amxfp4_Bbf16_gemm(ptr noundef) local_unnamed_addr #0

; 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 i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef) local_unnamed_addr #2

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

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

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

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

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

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

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

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

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

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

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

declare void @libxsmm_generator_vcvt_hf8_tofrom_f32_avx512_prep_stack(ptr noundef, i32 noundef) local_unnamed_addr #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) local_unnamed_addr #2

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

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

; Function Attrs: mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #3

declare i32 @LIBXSMM_GEMM_GETENUM_COMP_PREC(ptr noundef) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
define dso_local void @libxsmm_generator_gemm_store_C(ptr noundef %0, ptr nocapture noundef readonly %1, ptr noundef %2, ptr noundef %3, i32 noundef %4, i32 noundef %5) local_unnamed_addr #0 {
  %7 = alloca %struct.libxsmm_micro_kernel_config, align 8
  %8 = tail call i32 @libxsmm_x86_is_Amxfp4_Bbf16_gemm(ptr noundef %3)
  %9 = tail call i32 @libxsmm_x86_is_Amxfp4_Bfp32_gemm(ptr noundef %3)
  %10 = tail call i32 @libxsmm_x86_is_Amxfp4_Bi8_gemm(ptr noundef %3)
  %11 = getelementptr inbounds i8, ptr %2, i64 8
  %12 = load i32, ptr %11, align 8, !tbaa !5
  %13 = urem i32 %4, %12
  %14 = icmp ne i32 %13, 0
  %15 = udiv i32 %4, %12
  %16 = zext i1 %14 to i32
  %17 = add i32 %15, %16
  %18 = getelementptr inbounds i8, ptr %2, i64 4
  %19 = load i32, ptr %18, align 4, !tbaa !13
  %20 = mul i32 %17, %5
  %21 = sub i32 %19, %20
  %22 = getelementptr inbounds i8, ptr %3, i64 24
  %23 = load i32, ptr %22, align 1, !tbaa !14
  %24 = and i32 %23, 48
  %25 = icmp eq i32 %24, 48
  %.in.v = select i1 %25, i64 40, i64 36
  %.in = getelementptr inbounds i8, ptr %2, i64 %.in.v
  %26 = load i32, ptr %.in, align 4, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 688, ptr nonnull %7) #4
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(688) %7, ptr noundef nonnull align 8 dereferenceable(688) %2, i64 688, i1 false)
  %27 = load i32, ptr %2, align 8, !tbaa !18
  %28 = icmp ult i32 %27, 1005
  br i1 %28, label %32, label %29

29:                                               ; preds = %6
  %.not = icmp ne i32 %27, 1005
  %30 = icmp ult i32 %27, 1051
  %or.cond1043 = and i1 %.not, %30
  br i1 %or.cond1043, label %32, label %31

31:                                               ; preds = %29
  switch i32 %27, label %238 [
    i32 1101, label %32
    i32 1102, label %32
    i32 1052, label %32
    i32 1051, label %32
  ]

32:                                               ; preds = %31, %31, %31, %31, %29, %6
  %33 = getelementptr inbounds i8, ptr %3, i64 29
  %34 = tail call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef nonnull %33) #4
  %35 = icmp eq i32 %34, 2
  br i1 %35, label %36, label %238

36:                                               ; preds = %32
  %37 = tail call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef nonnull %33) #4
  %38 = icmp eq i32 %37, 2
  br i1 %38, label %39, label %238

39:                                               ; preds = %36
  %40 = getelementptr inbounds i8, ptr %1, i64 96
  %41 = load i32, ptr %40, align 4, !tbaa !19
  %42 = getelementptr inbounds i8, ptr %1, i64 92
  %43 = load i32, ptr %42, align 4, !tbaa !21
  %44 = getelementptr inbounds i8, ptr %1, i64 88
  %45 = load i32, ptr %44, align 4, !tbaa !22
  %46 = getelementptr inbounds i8, ptr %2, i64 124
  %47 = load i32, ptr %46, align 4, !tbaa !23
  %48 = icmp eq i32 %47, 1
  %.phi.trans.insert1233 = getelementptr inbounds i8, ptr %2, i64 120
  %.pre1234 = load i32, ptr %.phi.trans.insert1233, align 8, !tbaa !24
  br i1 %48, label %._crit_edge1232, label %49

49:                                               ; preds = %39
  %50 = icmp eq i32 %.pre1234, 1
  br i1 %50, label %._crit_edge1232, label %52

._crit_edge1232:                                  ; preds = %39, %49
  %51 = phi i32 [ 1, %49 ], [ %.pre1234, %39 ]
  tail call void @libxsmm_generator_gemm_prepare_relu_fusion(ptr noundef %0, ptr noundef nonnull %2, i32 noundef 0, i32 noundef %51, i32 noundef %41, i32 noundef 127, i32 noundef %43)
  br label %57

52:                                               ; preds = %49
  %53 = getelementptr inbounds i8, ptr %2, i64 132
  %54 = load i32, ptr %53, align 4, !tbaa !25
  %55 = icmp eq i32 %54, 1
  br i1 %55, label %56, label %57

56:                                               ; preds = %52
  call void @libxsmm_generator_gemm_dump_2D_block_and_prepare_sigmoid_fusion(ptr noundef %0, ptr noundef nonnull %7, i32 noundef %21, i32 noundef %17, i32 noundef %5, i32 noundef %41, i32 noundef %43)
  br label %57

57:                                               ; preds = %52, %56, %._crit_edge1232
  %.not1173 = icmp eq i32 %5, 0
  br i1 %.not1173, label %._crit_edge1142, label %.preheader1090.lr.ph

.preheader1090.lr.ph:                             ; preds = %57
  %.not1174 = icmp eq i32 %17, 0
  %58 = getelementptr inbounds i8, ptr %2, i64 120
  %59 = getelementptr inbounds i8, ptr %2, i64 132
  %60 = getelementptr inbounds i8, ptr %2, i64 84
  %61 = getelementptr inbounds i8, ptr %2, i64 44
  %62 = add i32 %17, -1
  %63 = getelementptr inbounds i8, ptr %3, i64 90
  %64 = getelementptr inbounds i8, ptr %2, i64 164
  br i1 %.not1174, label %._crit_edge1142, label %.preheader1090.us

.preheader1090.us:                                ; preds = %.preheader1090.lr.ph, %._crit_edge1140.us
  %.01141.us = phi i32 [ %113, %._crit_edge1140.us ], [ 0, %.preheader1090.lr.ph ]
  %65 = mul i32 %.01141.us, %17
  %66 = add i32 %65, %21
  br label %67

67:                                               ; preds = %.preheader1090.us, %111
  %.09631138.us = phi i32 [ 0, %.preheader1090.us ], [ %112, %111 ]
  %68 = load i32, ptr %46, align 4, !tbaa !23
  %69 = icmp eq i32 %68, 1
  br i1 %69, label %83, label %70

70:                                               ; preds = %67
  %71 = load i32, ptr %58, align 8, !tbaa !24
  %72 = icmp eq i32 %71, 1
  br i1 %72, label %83, label %73

73:                                               ; preds = %70
  %74 = load i32, ptr %59, align 4, !tbaa !25
  %75 = icmp eq i32 %74, 1
  br i1 %75, label %76, label %111

76:                                               ; preds = %73
  %77 = add i32 %66, %.09631138.us
  call void @libxsmm_generator_gemm_apply_sigmoid_to_vreg_from_scratch(ptr noundef %0, ptr noundef nonnull %7, i32 noundef %41, i32 noundef %77, i32 noundef 0)
  %78 = load i32, ptr %2, align 8, !tbaa !18
  %79 = icmp ult i32 %78, 1005
  %80 = select i1 %79, i32 -1610346480, i32 537138704
  %81 = shl i32 %77, 6
  %82 = load i8, ptr %60, align 4, !tbaa !26
  call void @libxsmm_x86_instruction_vec_move(ptr noundef %0, i32 noundef %78, i32 noundef %80, i32 noundef %41, i32 noundef 127, i32 noundef 0, i32 noundef %81, i8 noundef signext %82, i32 noundef 0, i32 noundef 0, i32 noundef 0, i32 noundef 1) #4
  br label %111

83:                                               ; preds = %70, %67
  %84 = load i32, ptr %61, align 4, !tbaa !27
  %85 = icmp eq i32 %.09631138.us, %62
  %86 = select i1 %85, i32 %84, i32 0
  %87 = load i32, ptr %2, align 8, !tbaa !18
  %88 = icmp ult i32 %87, 1101
  %89 = load i32, ptr %63, align 1, !tbaa !28
  %90 = mul i32 %89, %.01141.us
  %91 = lshr i32 %90, 3
  br i1 %88, label %97, label %.thread.us

.thread.us:                                       ; preds = %83
  %92 = shl i32 %.09631138.us, 1
  %93 = and i32 %92, 536870910
  %94 = shl i32 %.09631138.us, 2
  %95 = load i32, ptr %64, align 4, !tbaa !29
  %96 = add i32 %95, %94
  br label %106

97:                                               ; preds = %83
  %98 = and i32 %.09631138.us, 536870911
  %99 = shl i32 %.09631138.us, 2
  %100 = load i32, ptr %64, align 4, !tbaa !29
  %101 = add i32 %100, %99
  %102 = icmp ult i32 %87, 1005
  br i1 %102, label %103, label %106

103:                                              ; preds = %97
  %104 = lshr i32 %.09631138.us, 1
  %105 = and i32 %104, 536870911
  br label %106

106:                                              ; preds = %103, %97, %.thread.us
  %.in1086.us = phi i32 [ %101, %103 ], [ %101, %97 ], [ %96, %.thread.us ]
  %.pn1242 = phi i32 [ %105, %103 ], [ %98, %97 ], [ %93, %.thread.us ]
  %107 = add nuw nsw i32 %91, %.pn1242
  %108 = and i32 %.in1086.us, 7
  %109 = add i32 %66, %.09631138.us
  %110 = load i32, ptr %58, align 8, !tbaa !24
  call void @libxsmm_generator_gemm_apply_relu_to_vreg(ptr noundef %0, ptr noundef nonnull %2, i32 noundef 0, i32 noundef %109, i32 noundef %110, i32 noundef %41, i32 noundef %107, i32 noundef 1, i32 noundef %45, i32 noundef %43, i32 noundef 1, i32 noundef %86, i32 noundef %108)
  br label %111

111:                                              ; preds = %106, %76, %73
  %112 = add nuw i32 %.09631138.us, 1
  %exitcond1207.not = icmp eq i32 %112, %17
  br i1 %exitcond1207.not, label %._crit_edge1140.us, label %67, !llvm.loop !30

._crit_edge1140.us:                               ; preds = %111
  %113 = add nuw i32 %.01141.us, 1
  %exitcond1208.not = icmp eq i32 %113, %5
  br i1 %exitcond1208.not, label %._crit_edge1142, label %.preheader1090.us, !llvm.loop !32

._crit_edge1142:                                  ; preds = %._crit_edge1140.us, %.preheader1090.lr.ph, %57
  %114 = load i32, ptr %46, align 4, !tbaa !23
  %115 = icmp eq i32 %114, 1
  %.phi.trans.insert1235 = getelementptr inbounds i8, ptr %2, i64 120
  %.pre1236 = load i32, ptr %.phi.trans.insert1235, align 8, !tbaa !24
  br i1 %115, label %._crit_edge1142._crit_edge, label %116

116:                                              ; preds = %._crit_edge1142
  %117 = icmp eq i32 %.pre1236, 1
  br i1 %117, label %._crit_edge1142._crit_edge, label %119

._crit_edge1142._crit_edge:                       ; preds = %._crit_edge1142, %116
  %118 = phi i32 [ 1, %116 ], [ %.pre1236, %._crit_edge1142 ]
  call void @libxsmm_generator_gemm_cleanup_relu_fusion(ptr noundef %0, i32 noundef %118, i32 noundef %41, i32 noundef 127, i32 noundef %43)
  br label %124

119:                                              ; preds = %116
  %120 = getelementptr inbounds i8, ptr %2, i64 132
  %121 = load i32, ptr %120, align 4, !tbaa !25
  %122 = icmp eq i32 %121, 1
  br i1 %122, label %123, label %124

123:                                              ; preds = %119
  call void @libxsmm_generator_gemm_restore_2D_regblock_from_scratch(ptr noundef %0, ptr noundef nonnull %2, i32 noundef %41, i32 noundef %21, i32 noundef %17, i32 noundef %5)
  call void @libxsmm_generator_gemm_cleanup_sigmoid_fusion(ptr noundef %0, i32 noundef %41, i32 noundef %43)
  br label %124

124:                                              ; preds = %119, %123, %._crit_edge1142._crit_edge
  %125 = load i32, ptr %2, align 8, !tbaa !18
  %126 = icmp ult i32 %125, 1005
  br i1 %126, label %127, label %158

127:                                              ; preds = %124
  call void @libxsmm_generator_vcvtneps2bf16_sse_prep_stack(ptr noundef %0, i32 noundef 0) #4
  br i1 %.not1173, label %._crit_edge1157, label %.preheader.lr.ph

.preheader.lr.ph:                                 ; preds = %127
  %.not1180 = icmp eq i32 %17, 0
  %128 = getelementptr inbounds i8, ptr %2, i64 44
  %129 = add i32 %17, -1
  %130 = getelementptr inbounds i8, ptr %1, i64 20
  %131 = getelementptr inbounds i8, ptr %3, i64 20
  %132 = getelementptr inbounds i8, ptr %2, i64 20
  br i1 %.not1180, label %._crit_edge1157, label %.preheader.us

.preheader.us:                                    ; preds = %.preheader.lr.ph, %._crit_edge1155.us
  %.11156.us = phi i32 [ %157, %._crit_edge1155.us ], [ 0, %.preheader.lr.ph ]
  %133 = mul i32 %.11156.us, %17
  %134 = add i32 %133, %21
  br label %135

135:                                              ; preds = %.preheader.us, %155
  %.19641153.us = phi i32 [ 0, %.preheader.us ], [ %156, %155 ]
  %136 = add i32 %134, %.19641153.us
  call void @libxsmm_generator_vcvtneps2bf16_sse_preppedstack(ptr noundef %0, i8 noundef signext 120, i32 noundef %136, i32 noundef 1, i32 noundef 0, i32 noundef 2, i32 noundef 0) #4
  %137 = load i32, ptr %128, align 4, !tbaa !27
  %.not1041.us = icmp ne i32 %137, 0
  %138 = icmp eq i32 %.19641153.us, %129
  %or.cond1047.us = and i1 %138, %.not1041.us
  %139 = load i32, ptr %130, align 4, !tbaa !33
  %140 = load i32, ptr %131, align 1, !tbaa !34
  %141 = mul i32 %140, %.11156.us
  %142 = load i32, ptr %11, align 8, !tbaa !5
  %143 = load i32, ptr %132, align 4, !tbaa !35
  br i1 %or.cond1047.us, label %149, label %144

144:                                              ; preds = %135
  %145 = load i32, ptr %2, align 8, !tbaa !18
  %146 = mul i32 %142, %.19641153.us
  %147 = add i32 %146, %141
  %148 = mul i32 %147, %143
  call void @libxsmm_x86_instruction_vec_move(ptr noundef %0, i32 noundef %145, i32 noundef -1610149872, i32 noundef %139, i32 noundef 127, i32 noundef 0, i32 noundef %148, i8 noundef signext 120, i32 noundef 1, i32 noundef 0, i32 noundef 0, i32 noundef 1) #4
  br label %155

149:                                              ; preds = %135
  %150 = load i32, ptr %44, align 4, !tbaa !22
  %151 = mul i32 %142, %129
  %152 = add i32 %151, %141
  %153 = mul i32 %152, %143
  %154 = urem i32 %4, %142
  call void @libxsmm_generator_maskedstore_16bit_sse(ptr noundef %0, i32 noundef %150, i32 noundef 0, i32 noundef 1, i32 noundef %139, i32 noundef 127, i32 noundef 0, i32 noundef %153, i32 noundef %154) #4
  br label %155

155:                                              ; preds = %149, %144
  %156 = add nuw i32 %.19641153.us, 1
  %exitcond1213.not = icmp eq i32 %156, %17
  br i1 %exitcond1213.not, label %._crit_edge1155.us, label %135, !llvm.loop !36

._crit_edge1155.us:                               ; preds = %155
  %157 = add nuw i32 %.11156.us, 1
  %exitcond1214.not = icmp eq i32 %157, %5
  br i1 %exitcond1214.not, label %._crit_edge1157, label %.preheader.us, !llvm.loop !37

._crit_edge1157:                                  ; preds = %._crit_edge1155.us, %.preheader.lr.ph, %127
  call void @libxsmm_generator_vcvtneps2bf16_sse_clean_stack(ptr noundef %0) #4
  br label %.loopexit1098

158:                                              ; preds = %124
  %.not1035 = icmp ne i32 %125, 1005
  %159 = icmp ult i32 %125, 1051
  %or.cond1048 = and i1 %.not1035, %159
  br i1 %or.cond1048, label %160, label %201

160:                                              ; preds = %158
  %.not1037 = icmp eq i32 %125, 1008
  br i1 %.not1037, label %162, label %161

161:                                              ; preds = %160
  call void @libxsmm_generator_vcvtneps2bf16_avx2_prep_stack(ptr noundef %0, i32 noundef 0) #4
  br label %162

162:                                              ; preds = %161, %160
  br i1 %.not1173, label %._crit_edge1152, label %.preheader1088.lr.ph

.preheader1088.lr.ph:                             ; preds = %162
  %.not1178 = icmp eq i32 %17, 0
  %163 = getelementptr inbounds i8, ptr %2, i64 84
  %164 = getelementptr inbounds i8, ptr %2, i64 44
  %165 = add i32 %17, -1
  %166 = getelementptr inbounds i8, ptr %1, i64 20
  %167 = getelementptr inbounds i8, ptr %3, i64 20
  %168 = getelementptr inbounds i8, ptr %2, i64 20
  br i1 %.not1178, label %._crit_edge1152, label %.preheader1088.us

.preheader1088.us:                                ; preds = %.preheader1088.lr.ph, %._crit_edge1150.us
  %.21151.us = phi i32 [ %198, %._crit_edge1150.us ], [ 0, %.preheader1088.lr.ph ]
  %169 = mul i32 %.21151.us, %17
  %170 = add i32 %169, %21
  br label %171

171:                                              ; preds = %.preheader1088.us, %196
  %.29651148.us = phi i32 [ 0, %.preheader1088.us ], [ %197, %196 ]
  %172 = add i32 %170, %.29651148.us
  %173 = load i32, ptr %2, align 8, !tbaa !18
  %.not1039.us = icmp eq i32 %173, 1008
  br i1 %.not1039.us, label %175, label %174

174:                                              ; preds = %171
  call void @libxsmm_generator_vcvtneps2bf16_avx2_preppedstack(ptr noundef %0, i8 noundef signext 121, i32 noundef %172, i32 noundef 0, i32 noundef 1, i32 noundef 2, i32 noundef 0) #4
  br label %177

175:                                              ; preds = %171
  %176 = load i8, ptr %163, align 4, !tbaa !26
  call void @libxsmm_x86_instruction_vec_compute_2reg(ptr noundef %0, i32 noundef 537273970, i8 noundef signext %176, i32 noundef %172, i32 noundef 0) #4
  br label %177

177:                                              ; preds = %175, %174
  %178 = load i32, ptr %164, align 4, !tbaa !27
  %.not1040.us = icmp ne i32 %178, 0
  %179 = icmp eq i32 %.29651148.us, %165
  %or.cond1050.us = and i1 %179, %.not1040.us
  %180 = load i32, ptr %166, align 4, !tbaa !33
  %181 = load i32, ptr %167, align 1, !tbaa !34
  %182 = mul i32 %181, %.21151.us
  %183 = load i32, ptr %11, align 8, !tbaa !5
  %184 = load i32, ptr %168, align 4, !tbaa !35
  br i1 %or.cond1050.us, label %190, label %185

185:                                              ; preds = %177
  %186 = load i32, ptr %2, align 8, !tbaa !18
  %187 = mul i32 %183, %.29651148.us
  %188 = add i32 %187, %182
  %189 = mul i32 %188, %184
  call void @libxsmm_x86_instruction_vec_move(ptr noundef %0, i32 noundef %186, i32 noundef %26, i32 noundef %180, i32 noundef 127, i32 noundef 0, i32 noundef %189, i8 noundef signext 120, i32 noundef 0, i32 noundef 0, i32 noundef 0, i32 noundef 1) #4
  br label %196

190:                                              ; preds = %177
  %191 = load i32, ptr %44, align 4, !tbaa !22
  %192 = mul i32 %183, %165
  %193 = add i32 %192, %182
  %194 = mul i32 %193, %184
  %195 = urem i32 %4, %183
  call void @libxsmm_generator_maskedstore_16bit_avx2(ptr noundef %0, i32 noundef %191, i32 noundef 0, i32 noundef %180, i32 noundef 127, i32 noundef 0, i32 noundef %194, i32 noundef %195) #4
  br label %196

196:                                              ; preds = %190, %185
  %197 = add nuw i32 %.29651148.us, 1
  %exitcond1211.not = icmp eq i32 %197, %17
  br i1 %exitcond1211.not, label %._crit_edge1150.us, label %171, !llvm.loop !38

._crit_edge1150.us:                               ; preds = %196
  %198 = add nuw i32 %.21151.us, 1
  %exitcond1212.not = icmp eq i32 %198, %5
  br i1 %exitcond1212.not, label %._crit_edge1152, label %.preheader1088.us, !llvm.loop !39

._crit_edge1152:                                  ; preds = %._crit_edge1150.us, %.preheader1088.lr.ph, %162
  %199 = load i32, ptr %2, align 8, !tbaa !18
  %.not1038 = icmp eq i32 %199, 1008
  br i1 %.not1038, label %.loopexit1098, label %200

200:                                              ; preds = %._crit_edge1152
  call void @libxsmm_generator_vcvtneps2bf16_avx2_clean_stack(ptr noundef %0) #4
  br label %.loopexit1098

201:                                              ; preds = %158
  %202 = load i32, ptr %40, align 4, !tbaa !19
  call void @libxsmm_generator_vcvtneps2bf16_avx512_prep_stack(ptr noundef %0, i32 noundef %202) #4
  br i1 %.not1173, label %._crit_edge1147, label %.preheader1089.lr.ph

.preheader1089.lr.ph:                             ; preds = %201
  %.not1176 = icmp eq i32 %17, 0
  %203 = getelementptr inbounds i8, ptr %2, i64 44
  %204 = add i32 %17, -1
  %205 = getelementptr inbounds i8, ptr %1, i64 20
  %206 = getelementptr inbounds i8, ptr %3, i64 20
  %207 = getelementptr inbounds i8, ptr %2, i64 20
  br i1 %.not1176, label %._crit_edge1147, label %.preheader1089.us

.preheader1089.us:                                ; preds = %.preheader1089.lr.ph, %._crit_edge1145.us
  %.31146.us = phi i32 [ %236, %._crit_edge1145.us ], [ 0, %.preheader1089.lr.ph ]
  %208 = mul i32 %.31146.us, %17
  %209 = add i32 %208, %21
  br label %210

210:                                              ; preds = %.preheader1089.us, %234
  %.39661143.us = phi i32 [ 0, %.preheader1089.us ], [ %235, %234 ]
  %211 = add i32 %209, %.39661143.us
  %212 = load i32, ptr %2, align 8, !tbaa !18
  %213 = add i32 %212, -1051
  %spec.select.us = icmp ult i32 %213, 50
  %214 = select i1 %spec.select.us, i8 121, i8 122
  call void @libxsmm_generator_vcvtneps2bf16_avx512_preppedstack(ptr noundef %0, i8 noundef signext %214, i32 noundef %211, i32 noundef 0, i32 noundef 1, i32 noundef 2, i32 noundef 6, i32 noundef 7, i32 noundef 0) #4
  %215 = load i32, ptr %203, align 4, !tbaa !27
  %.not1036.us = icmp ne i32 %215, 0
  %216 = icmp eq i32 %.39661143.us, %204
  %or.cond1052.us = and i1 %216, %.not1036.us
  %217 = load i32, ptr %2, align 8, !tbaa !18
  %218 = load i32, ptr %205, align 4, !tbaa !33
  %219 = load i32, ptr %206, align 1, !tbaa !34
  %220 = mul i32 %219, %.31146.us
  %221 = load i32, ptr %11, align 8, !tbaa !5
  %222 = load i32, ptr %207, align 4, !tbaa !35
  %223 = add i32 %217, -1051
  %spec.select1053.us = icmp ult i32 %223, 50
  br i1 %or.cond1052.us, label %229, label %224

224:                                              ; preds = %210
  %225 = mul i32 %221, %.39661143.us
  %226 = add i32 %225, %220
  %227 = mul i32 %226, %222
  %228 = select i1 %spec.select1053.us, i8 120, i8 121
  call void @libxsmm_x86_instruction_vec_move(ptr noundef %0, i32 noundef %217, i32 noundef %26, i32 noundef %218, i32 noundef 127, i32 noundef 0, i32 noundef %227, i8 noundef signext %228, i32 noundef 0, i32 noundef 0, i32 noundef 0, i32 noundef 1) #4
  br label %234

229:                                              ; preds = %210
  %230 = mul i32 %221, %204
  %231 = add i32 %230, %220
  %232 = mul i32 %231, %222
  %233 = select i1 %spec.select1053.us, i8 121, i8 122
  call void @libxsmm_x86_instruction_vec_move(ptr noundef %0, i32 noundef %217, i32 noundef -528017809, i32 noundef %218, i32 noundef 127, i32 noundef 0, i32 noundef %232, i8 noundef signext %233, i32 noundef 0, i32 noundef 2, i32 noundef 0, i32 noundef 1) #4
  br label %234

234:                                              ; preds = %229, %224
  %235 = add nuw i32 %.39661143.us, 1
  %exitcond1209.not = icmp eq i32 %235, %17
  br i1 %exitcond1209.not, label %._crit_edge1145.us, label %210, !llvm.loop !40

._crit_edge1145.us:                               ; preds = %234
  %236 = add nuw i32 %.31146.us, 1
  %exitcond1210.not = icmp eq i32 %236, %5
  br i1 %exitcond1210.not, label %._crit_edge1147, label %.preheader1089.us, !llvm.loop !41

._crit_edge1147:                                  ; preds = %._crit_edge1145.us, %.preheader1089.lr.ph, %201
  %237 = load i32, ptr %40, align 4, !tbaa !19
  call void @libxsmm_generator_vcvtneps2bf16_avx512_clean_stack(ptr noundef %0, i32 noundef %237) #4
  br label %.loopexit1098

238:                                              ; preds = %31, %36, %32
  %239 = load i32, ptr %2, align 8, !tbaa !18
  %240 = add i32 %239, -1103
  %or.cond1055 = icmp ult i32 %240, 897
  %241 = add i32 %239, -1053
  %or.cond1056 = icmp ult i32 %241, 48
  %or.cond1087 = or i1 %or.cond1055, %or.cond1056
  br i1 %or.cond1087, label %242, label %423

242:                                              ; preds = %238
  %243 = getelementptr inbounds i8, ptr %3, i64 29
  %244 = tail call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef nonnull %243) #4
  %245 = icmp eq i32 %244, 2
  br i1 %245, label %246, label %423

246:                                              ; preds = %242
  %247 = tail call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef nonnull %243) #4
  %248 = icmp eq i32 %247, 2
  br i1 %248, label %249, label %423

249:                                              ; preds = %246
  %250 = getelementptr inbounds i8, ptr %1, i64 96
  %251 = load i32, ptr %250, align 4, !tbaa !19
  %252 = getelementptr inbounds i8, ptr %1, i64 92
  %253 = load i32, ptr %252, align 4, !tbaa !21
  %254 = getelementptr inbounds i8, ptr %2, i64 124
  %255 = load i32, ptr %254, align 4, !tbaa !23
  %256 = icmp eq i32 %255, 1
  %.phi.trans.insert1228 = getelementptr inbounds i8, ptr %2, i64 120
  %.pre1229 = load i32, ptr %.phi.trans.insert1228, align 8, !tbaa !24
  br i1 %256, label %._crit_edge1227, label %257

257:                                              ; preds = %249
  %258 = icmp eq i32 %.pre1229, 1
  br i1 %258, label %._crit_edge1227, label %260

._crit_edge1227:                                  ; preds = %249, %257
  %259 = phi i32 [ 1, %257 ], [ %.pre1229, %249 ]
  tail call void @libxsmm_generator_gemm_prepare_relu_fusion(ptr noundef %0, ptr noundef nonnull %2, i32 noundef 1, i32 noundef %259, i32 noundef %251, i32 noundef 127, i32 noundef %253)
  br label %265

260:                                              ; preds = %257
  %261 = getelementptr inbounds i8, ptr %2, i64 132
  %262 = load i32, ptr %261, align 4, !tbaa !25
  %263 = icmp eq i32 %262, 1
  br i1 %263, label %264, label %265

264:                                              ; preds = %260
  call void @libxsmm_generator_gemm_dump_2D_block_and_prepare_sigmoid_fusion(ptr noundef %0, ptr noundef nonnull %7, i32 noundef %21, i32 noundef %17, i32 noundef %5, i32 noundef %251, i32 noundef %253)
  br label %265

265:                                              ; preds = %260, %264, %._crit_edge1227
  %.not1170 = icmp eq i32 %5, 0
  br i1 %.not1170, label %._crit_edge, label %.lr.ph1137

.lr.ph1137:                                       ; preds = %265
  %266 = and i32 %17, -2
  %267 = getelementptr inbounds i8, ptr %2, i64 44
  %.not1171 = icmp eq i32 %17, 0
  %268 = getelementptr inbounds i8, ptr %2, i64 120
  %269 = getelementptr inbounds i8, ptr %2, i64 132
  %270 = add i32 %17, -1
  %271 = getelementptr inbounds i8, ptr %3, i64 90
  %272 = getelementptr inbounds i8, ptr %2, i64 84
  %273 = getelementptr inbounds i8, ptr %1, i64 20
  %274 = getelementptr inbounds i8, ptr %3, i64 20
  %275 = getelementptr inbounds i8, ptr %2, i64 20
  %.not1172 = icmp eq i32 %266, 0
  br label %276

276:                                              ; preds = %.lr.ph1137, %.loopexit
  %.41135 = phi i32 [ 0, %.lr.ph1137 ], [ %412, %.loopexit ]
  %277 = load i32, ptr %267, align 4, !tbaa !27
  %.not1031 = icmp eq i32 %277, 0
  br i1 %.not1031, label %.preheader1092, label %.preheader1093

.preheader1093:                                   ; preds = %276
  br i1 %.not1171, label %.loopexit, label %.lr.ph

.lr.ph:                                           ; preds = %.preheader1093
  %278 = mul i32 %.41135, %17
  %279 = add i32 %278, %21
  br label %281

.preheader1092:                                   ; preds = %276
  br i1 %.not1172, label %.preheader1091, label %.lr.ph1131

.lr.ph1131:                                       ; preds = %.preheader1092
  %280 = mul i32 %.41135, %17
  br label %331

281:                                              ; preds = %.lr.ph, %326
  %.49671127 = phi i32 [ 0, %.lr.ph ], [ %327, %326 ]
  %282 = add i32 %279, %.49671127
  %283 = load i32, ptr %254, align 4, !tbaa !23
  %284 = icmp eq i32 %283, 1
  br i1 %284, label %288, label %285

285:                                              ; preds = %281
  %286 = load i32, ptr %268, align 8, !tbaa !24
  %287 = icmp eq i32 %286, 1
  br i1 %287, label %288, label %302

288:                                              ; preds = %285, %281
  %289 = load i32, ptr %267, align 4, !tbaa !27
  %290 = icmp eq i32 %.49671127, %270
  %291 = select i1 %290, i32 %289, i32 0
  %292 = load i32, ptr %2, align 8, !tbaa !18
  %293 = icmp ult i32 %292, 1101
  %294 = load i32, ptr %271, align 1, !tbaa !28
  %295 = mul i32 %294, %.41135
  %296 = lshr i32 %295, 3
  %297 = shl i32 %.49671127, 1
  %298 = and i32 %297, 536870910
  %299 = and i32 %.49671127, 536870911
  %.sink = select i1 %293, i32 %299, i32 %298
  %300 = add nuw nsw i32 %296, %.sink
  %301 = load i32, ptr %268, align 8, !tbaa !24
  call void @libxsmm_generator_gemm_apply_relu_to_vreg(ptr noundef %0, ptr noundef nonnull %2, i32 noundef 1, i32 noundef %282, i32 noundef %301, i32 noundef %251, i32 noundef %300, i32 noundef 1, i32 noundef 127, i32 noundef %253, i32 noundef 2, i32 noundef %291, i32 noundef 0)
  br label %306

302:                                              ; preds = %285
  %303 = load i32, ptr %269, align 4, !tbaa !25
  %304 = icmp eq i32 %303, 1
  br i1 %304, label %305, label %306

305:                                              ; preds = %302
  call void @libxsmm_generator_gemm_apply_sigmoid_to_vreg_from_scratch(ptr noundef %0, ptr noundef nonnull %7, i32 noundef %251, i32 noundef %282, i32 noundef 0)
  br label %306

306:                                              ; preds = %302, %305, %288
  %.0976 = phi i32 [ %282, %288 ], [ 0, %305 ], [ %282, %302 ]
  %307 = load i8, ptr %272, align 4, !tbaa !26
  call void @libxsmm_x86_instruction_vec_compute_2reg(ptr noundef %0, i32 noundef 537273970, i8 noundef signext %307, i32 noundef %.0976, i32 noundef 0) #4
  %308 = icmp eq i32 %.49671127, %270
  %309 = load i32, ptr %2, align 8, !tbaa !18
  %310 = load i32, ptr %273, align 4, !tbaa !33
  %311 = load i32, ptr %274, align 1, !tbaa !34
  %312 = mul i32 %311, %.41135
  %313 = load i32, ptr %11, align 8, !tbaa !5
  %314 = load i32, ptr %275, align 4, !tbaa !35
  %315 = icmp eq i32 %309, 1053
  br i1 %308, label %316, label %321

316:                                              ; preds = %306
  %317 = mul i32 %313, %270
  %318 = add i32 %317, %312
  %319 = mul i32 %318, %314
  %320 = select i1 %315, i8 121, i8 122
  call void @libxsmm_x86_instruction_vec_move(ptr noundef %0, i32 noundef %309, i32 noundef -528017809, i32 noundef %310, i32 noundef 127, i32 noundef 0, i32 noundef %319, i8 noundef signext %320, i32 noundef 0, i32 noundef 2, i32 noundef 0, i32 noundef 1) #4
  br label %326

321:                                              ; preds = %306
  %322 = mul i32 %313, %.49671127
  %323 = add i32 %322, %312
  %324 = mul i32 %323, %314
  %325 = select i1 %315, i8 120, i8 121
  call void @libxsmm_x86_instruction_vec_move(ptr noundef %0, i32 noundef %309, i32 noundef %26, i32 noundef %310, i32 noundef 127, i32 noundef 0, i32 noundef %324, i8 noundef signext %325, i32 noundef 0, i32 noundef 0, i32 noundef 0, i32 noundef 1) #4
  br label %326

326:                                              ; preds = %321, %316
  %327 = add nuw i32 %.49671127, 1
  %exitcond1204.not = icmp eq i32 %327, %17
  br i1 %exitcond1204.not, label %.loopexit, label %281, !llvm.loop !42

.preheader1091:                                   ; preds = %359, %.preheader1092
  %.5968.lcssa = phi i32 [ 0, %.preheader1092 ], [ %371, %359 ]
  %328 = icmp ult i32 %.5968.lcssa, %17
  br i1 %328, label %.lr.ph1134, label %.loopexit

.lr.ph1134:                                       ; preds = %.preheader1091
  %329 = mul i32 %.41135, %17
  %330 = add i32 %329, %21
  br label %373

331:                                              ; preds = %.lr.ph1131, %359
  %.59681129 = phi i32 [ 0, %.lr.ph1131 ], [ %371, %359 ]
  %332 = add i32 %.59681129, %21
  %333 = add i32 %332, %280
  %334 = add i32 %333, 1
  %335 = load i32, ptr %269, align 4, !tbaa !25
  %336 = icmp eq i32 %335, 1
  br i1 %336, label %337, label %338

337:                                              ; preds = %331
  call void @libxsmm_generator_gemm_apply_sigmoid_to_vreg_from_scratch(ptr noundef %0, ptr noundef nonnull %7, i32 noundef %251, i32 noundef %333, i32 noundef 0)
  call void @libxsmm_generator_gemm_apply_sigmoid_to_vreg_from_scratch(ptr noundef %0, ptr noundef nonnull %7, i32 noundef %251, i32 noundef %334, i32 noundef 1)
  br label %338

338:                                              ; preds = %337, %331
  %.0980 = phi i32 [ 1, %337 ], [ %334, %331 ]
  %.0979 = phi i32 [ 0, %337 ], [ %333, %331 ]
  %339 = load i8, ptr %272, align 4, !tbaa !26
  call void @libxsmm_x86_instruction_vec_compute_3reg(ptr noundef %0, i32 noundef -267966862, i8 noundef signext %339, i32 noundef %.0979, i32 noundef %.0980, i32 noundef 0) #4
  %340 = load i32, ptr %254, align 4, !tbaa !23
  %341 = icmp eq i32 %340, 1
  br i1 %341, label %345, label %342

342:                                              ; preds = %338
  %343 = load i32, ptr %268, align 8, !tbaa !24
  %344 = icmp eq i32 %343, 1
  br i1 %344, label %345, label %359

345:                                              ; preds = %342, %338
  %346 = load i32, ptr %267, align 4, !tbaa !27
  %347 = icmp eq i32 %.59681129, %270
  %348 = select i1 %347, i32 %346, i32 0
  %349 = load i32, ptr %2, align 8, !tbaa !18
  %350 = icmp ult i32 %349, 1101
  %351 = load i32, ptr %271, align 1, !tbaa !28
  %352 = mul i32 %351, %.41135
  %353 = lshr i32 %352, 3
  %354 = shl i32 %.59681129, 1
  %355 = and i32 %354, 536870908
  %356 = and i32 %.59681129, 536870910
  %.sink1239 = select i1 %350, i32 %356, i32 %355
  %357 = add nuw nsw i32 %353, %.sink1239
  %358 = load i32, ptr %268, align 8, !tbaa !24
  call void @libxsmm_generator_gemm_apply_relu_to_vreg(ptr noundef %0, ptr noundef nonnull %2, i32 noundef 1, i32 noundef 0, i32 noundef %358, i32 noundef %251, i32 noundef %357, i32 noundef 0, i32 noundef 127, i32 noundef %253, i32 noundef 2, i32 noundef %348, i32 noundef 0)
  br label %359

359:                                              ; preds = %345, %342
  %360 = load i32, ptr %2, align 8, !tbaa !18
  %361 = load i32, ptr %273, align 4, !tbaa !33
  %362 = load i32, ptr %274, align 1, !tbaa !34
  %363 = mul i32 %362, %.41135
  %364 = load i32, ptr %11, align 8, !tbaa !5
  %365 = mul i32 %364, %.59681129
  %366 = add i32 %365, %363
  %367 = load i32, ptr %275, align 4, !tbaa !35
  %368 = mul i32 %366, %367
  %369 = icmp eq i32 %360, 1053
  %370 = select i1 %369, i8 121, i8 122
  call void @libxsmm_x86_instruction_vec_move(ptr noundef %0, i32 noundef %360, i32 noundef %26, i32 noundef %361, i32 noundef 127, i32 noundef 0, i32 noundef %368, i8 noundef signext %370, i32 noundef 0, i32 noundef 0, i32 noundef 0, i32 noundef 1) #4
  %371 = add nuw i32 %.59681129, 2
  %372 = icmp ult i32 %371, %266
  br i1 %372, label %331, label %.preheader1091, !llvm.loop !43

373:                                              ; preds = %.lr.ph1134, %398
  %.69691132 = phi i32 [ %.5968.lcssa, %.lr.ph1134 ], [ %411, %398 ]
  %374 = add i32 %330, %.69691132
  %375 = load i32, ptr %254, align 4, !tbaa !23
  %376 = icmp eq i32 %375, 1
  br i1 %376, label %380, label %377

377:                                              ; preds = %373
  %378 = load i32, ptr %268, align 8, !tbaa !24
  %379 = icmp eq i32 %378, 1
  br i1 %379, label %380, label %394

380:                                              ; preds = %377, %373
  %381 = load i32, ptr %267, align 4, !tbaa !27
  %382 = icmp eq i32 %.69691132, %270
  %383 = select i1 %382, i32 %381, i32 0
  %384 = load i32, ptr %2, align 8, !tbaa !18
  %385 = icmp ult i32 %384, 1101
  %386 = load i32, ptr %271, align 1, !tbaa !28
  %387 = mul i32 %386, %.41135
  %388 = lshr i32 %387, 3
  %389 = shl i32 %.69691132, 1
  %390 = and i32 %389, 536870910
  %391 = and i32 %.69691132, 536870911
  %.sink1240 = select i1 %385, i32 %391, i32 %390
  %392 = add nuw nsw i32 %388, %.sink1240
  %393 = load i32, ptr %268, align 8, !tbaa !24
  call void @libxsmm_generator_gemm_apply_relu_to_vreg(ptr noundef %0, ptr noundef nonnull %2, i32 noundef 1, i32 noundef %374, i32 noundef %393, i32 noundef %251, i32 noundef %392, i32 noundef 1, i32 noundef 127, i32 noundef %253, i32 noundef 2, i32 noundef %383, i32 noundef 0)
  br label %398

394:                                              ; preds = %377
  %395 = load i32, ptr %269, align 4, !tbaa !25
  %396 = icmp eq i32 %395, 1
  br i1 %396, label %397, label %398

397:                                              ; preds = %394
  call void @libxsmm_generator_gemm_apply_sigmoid_to_vreg_from_scratch(ptr noundef %0, ptr noundef nonnull %7, i32 noundef %251, i32 noundef %374, i32 noundef 0)
  br label %398

398:                                              ; preds = %394, %397, %380
  %.0981 = phi i32 [ %374, %380 ], [ 0, %397 ], [ %374, %394 ]
  %399 = load i8, ptr %272, align 4, !tbaa !26
  call void @libxsmm_x86_instruction_vec_compute_2reg(ptr noundef %0, i32 noundef 537273970, i8 noundef signext %399, i32 noundef %.0981, i32 noundef 0) #4
  %400 = load i32, ptr %2, align 8, !tbaa !18
  %401 = load i32, ptr %273, align 4, !tbaa !33
  %402 = load i32, ptr %274, align 1, !tbaa !34
  %403 = mul i32 %402, %.41135
  %404 = load i32, ptr %11, align 8, !tbaa !5
  %405 = mul i32 %404, %.69691132
  %406 = add i32 %405, %403
  %407 = load i32, ptr %275, align 4, !tbaa !35
  %408 = mul i32 %406, %407
  %409 = icmp eq i32 %400, 1053
  %410 = select i1 %409, i8 120, i8 121
  call void @libxsmm_x86_instruction_vec_move(ptr noundef %0, i32 noundef %400, i32 noundef %26, i32 noundef %401, i32 noundef 127, i32 noundef 0, i32 noundef %408, i8 noundef signext %410, i32 noundef 0, i32 noundef 0, i32 noundef 0, i32 noundef 1) #4
  %411 = add i32 %.69691132, 1
  %exitcond1205.not = icmp eq i32 %411, %17
  br i1 %exitcond1205.not, label %.loopexit, label %373, !llvm.loop !44

.loopexit:                                        ; preds = %326, %398, %.preheader1093, %.preheader1091
  %412 = add nuw i32 %.41135, 1
  %exitcond1206.not = icmp eq i32 %412, %5
  br i1 %exitcond1206.not, label %._crit_edge, label %276, !llvm.loop !45

._crit_edge:                                      ; preds = %.loopexit, %265
  %413 = load i32, ptr %254, align 4, !tbaa !23
  %414 = icmp eq i32 %413, 1
  %.phi.trans.insert1230 = getelementptr inbounds i8, ptr %2, i64 120
  %.pre1231 = load i32, ptr %.phi.trans.insert1230, align 8, !tbaa !24
  br i1 %414, label %._crit_edge._crit_edge, label %415

415:                                              ; preds = %._crit_edge
  %416 = icmp eq i32 %.pre1231, 1
  br i1 %416, label %._crit_edge._crit_edge, label %418

._crit_edge._crit_edge:                           ; preds = %._crit_edge, %415
  %417 = phi i32 [ 1, %415 ], [ %.pre1231, %._crit_edge ]
  call void @libxsmm_generator_gemm_cleanup_relu_fusion(ptr noundef %0, i32 noundef %417, i32 noundef %251, i32 noundef 127, i32 noundef %253)
  br label %.loopexit1098

418:                                              ; preds = %415
  %419 = getelementptr inbounds i8, ptr %2, i64 132
  %420 = load i32, ptr %419, align 4, !tbaa !25
  %421 = icmp eq i32 %420, 1
  br i1 %421, label %422, label %.loopexit1098

422:                                              ; preds = %418
  call void @libxsmm_generator_gemm_cleanup_sigmoid_fusion(ptr noundef %0, i32 noundef %251, i32 noundef %253)
  br label %.loopexit1098

423:                                              ; preds = %238, %246, %242
  %424 = load i32, ptr %2, align 8, !tbaa !18
  %425 = add i32 %424, -1051
  %or.cond1063 = icmp ult i32 %425, 949
  br i1 %or.cond1063, label %426, label %445

426:                                              ; preds = %423
  %427 = getelementptr inbounds i8, ptr %3, i64 29
  %428 = tail call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef nonnull %427) #4
  %429 = icmp eq i32 %428, 4
  br i1 %429, label %430, label %433

430:                                              ; preds = %426
  %431 = tail call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef nonnull %427) #4
  %432 = icmp eq i32 %431, 4
  br i1 %432, label %467, label %433

433:                                              ; preds = %430, %426
  %434 = tail call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef nonnull %427) #4
  %435 = icmp eq i32 %434, 2
  br i1 %435, label %436, label %439

436:                                              ; preds = %433
  %437 = tail call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef nonnull %427) #4
  %438 = icmp eq i32 %437, 4
  br i1 %438, label %467, label %439

439:                                              ; preds = %436, %433
  %440 = tail call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef nonnull %427) #4
  %441 = icmp eq i32 %440, 1
  br i1 %441, label %442, label %445

442:                                              ; preds = %439
  %443 = tail call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef nonnull %427) #4
  %444 = icmp eq i32 %443, 4
  br i1 %444, label %467, label %445

445:                                              ; preds = %442, %439, %423
  %446 = load i32, ptr %2, align 8, !tbaa !18
  %447 = add i32 %446, -1051
  %or.cond1064 = icmp ult i32 %447, 949
  br i1 %or.cond1064, label %448, label %607

448:                                              ; preds = %445
  %449 = getelementptr inbounds i8, ptr %3, i64 29
  %450 = tail call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef nonnull %449) #4
  %451 = icmp eq i32 %450, 5
  br i1 %451, label %452, label %455

452:                                              ; preds = %448
  %453 = tail call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef nonnull %449) #4
  %454 = icmp eq i32 %453, 5
  br i1 %454, label %467, label %455

455:                                              ; preds = %452, %448
  %456 = tail call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef nonnull %449) #4
  %457 = icmp eq i32 %456, 2
  br i1 %457, label %458, label %461

458:                                              ; preds = %455
  %459 = tail call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef nonnull %449) #4
  %460 = icmp eq i32 %459, 5
  br i1 %460, label %467, label %461

461:                                              ; preds = %458, %455
  %462 = tail call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef nonnull %449) #4
  %463 = icmp eq i32 %462, 1
  br i1 %463, label %464, label %607

464:                                              ; preds = %461
  %465 = tail call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef nonnull %449) #4
  %466 = icmp eq i32 %465, 5
  br i1 %466, label %467, label %607

467:                                              ; preds = %464, %458, %452, %442, %436, %430
  %468 = getelementptr inbounds i8, ptr %1, i64 96
  %469 = load i32, ptr %468, align 4, !tbaa !19
  %470 = getelementptr inbounds i8, ptr %1, i64 92
  %471 = load i32, ptr %470, align 4, !tbaa !21
  %472 = getelementptr inbounds i8, ptr %2, i64 124
  %473 = load i32, ptr %472, align 4, !tbaa !23
  %474 = icmp eq i32 %473, 1
  %.phi.trans.insert1223 = getelementptr inbounds i8, ptr %2, i64 120
  %.pre1224 = load i32, ptr %.phi.trans.insert1223, align 8, !tbaa !24
  br i1 %474, label %._crit_edge1222, label %475

475:                                              ; preds = %467
  %476 = icmp eq i32 %.pre1224, 1
  br i1 %476, label %._crit_edge1222, label %478

._crit_edge1222:                                  ; preds = %467, %475
  %477 = phi i32 [ 1, %475 ], [ %.pre1224, %467 ]
  tail call void @libxsmm_generator_gemm_prepare_relu_fusion(ptr noundef %0, ptr noundef nonnull %2, i32 noundef 0, i32 noundef %477, i32 noundef %469, i32 noundef 127, i32 noundef %471)
  br label %483

478:                                              ; preds = %475
  %479 = getelementptr inbounds i8, ptr %2, i64 132
  %480 = load i32, ptr %479, align 4, !tbaa !25
  %481 = icmp eq i32 %480, 1
  br i1 %481, label %482, label %483

482:                                              ; preds = %478
  call void @libxsmm_generator_gemm_dump_2D_block_and_prepare_sigmoid_fusion(ptr noundef %0, ptr noundef nonnull %7, i32 noundef %21, i32 noundef %17, i32 noundef %5, i32 noundef %469, i32 noundef %471)
  br label %483

483:                                              ; preds = %478, %482, %._crit_edge1222
  %.not1166 = icmp eq i32 %5, 0
  br i1 %.not1166, label %._crit_edge1121, label %.preheader1096.lr.ph

.preheader1096.lr.ph:                             ; preds = %483
  %.not1167 = icmp eq i32 %17, 0
  %484 = getelementptr inbounds i8, ptr %2, i64 120
  %485 = getelementptr inbounds i8, ptr %2, i64 132
  %486 = getelementptr inbounds i8, ptr %2, i64 84
  %487 = getelementptr inbounds i8, ptr %2, i64 44
  %488 = add i32 %17, -1
  %489 = getelementptr inbounds i8, ptr %3, i64 90
  br i1 %.not1167, label %._crit_edge1121, label %.preheader1096.us

.preheader1096.us:                                ; preds = %.preheader1096.lr.ph, %._crit_edge.us1122
  %.51120.us = phi i32 [ %523, %._crit_edge.us1122 ], [ 0, %.preheader1096.lr.ph ]
  %490 = mul i32 %.51120.us, %17
  %491 = add i32 %490, %21
  br label %492

492:                                              ; preds = %.preheader1096.us, %521
  %.79701119.us = phi i32 [ 0, %.preheader1096.us ], [ %522, %521 ]
  %493 = load i32, ptr %472, align 4, !tbaa !23
  %494 = icmp eq i32 %493, 1
  br i1 %494, label %506, label %495

495:                                              ; preds = %492
  %496 = load i32, ptr %484, align 8, !tbaa !24
  %497 = icmp eq i32 %496, 1
  br i1 %497, label %506, label %498

498:                                              ; preds = %495
  %499 = load i32, ptr %485, align 4, !tbaa !25
  %500 = icmp eq i32 %499, 1
  br i1 %500, label %501, label %521

501:                                              ; preds = %498
  %502 = add i32 %491, %.79701119.us
  call void @libxsmm_generator_gemm_apply_sigmoid_to_vreg_from_scratch(ptr noundef %0, ptr noundef nonnull %7, i32 noundef %469, i32 noundef %502, i32 noundef 0)
  %503 = load i32, ptr %2, align 8, !tbaa !18
  %504 = shl i32 %502, 6
  %505 = load i8, ptr %486, align 4, !tbaa !26
  call void @libxsmm_x86_instruction_vec_move(ptr noundef %0, i32 noundef %503, i32 noundef 537138704, i32 noundef %469, i32 noundef 127, i32 noundef 0, i32 noundef %504, i8 noundef signext %505, i32 noundef 0, i32 noundef 0, i32 noundef 0, i32 noundef 1) #4
  br label %521

506:                                              ; preds = %495, %492
  %507 = load i32, ptr %487, align 4, !tbaa !27
  %508 = icmp eq i32 %.79701119.us, %488
  %509 = select i1 %508, i32 %507, i32 0
  %510 = load i32, ptr %2, align 8, !tbaa !18
  %511 = icmp ult i32 %510, 1101
  %512 = load i32, ptr %489, align 1, !tbaa !28
  %513 = mul i32 %512, %.51120.us
  %514 = lshr i32 %513, 3
  %515 = and i32 %.79701119.us, 536870911
  %516 = shl i32 %.79701119.us, 1
  %517 = and i32 %516, 536870910
  %.sink1241 = select i1 %511, i32 %515, i32 %517
  %518 = add nuw nsw i32 %514, %.sink1241
  %519 = add i32 %491, %.79701119.us
  %520 = load i32, ptr %484, align 8, !tbaa !24
  call void @libxsmm_generator_gemm_apply_relu_to_vreg(ptr noundef %0, ptr noundef nonnull %2, i32 noundef 0, i32 noundef %519, i32 noundef %520, i32 noundef %469, i32 noundef %518, i32 noundef 1, i32 noundef 127, i32 noundef %471, i32 noundef 1, i32 noundef %509, i32 noundef 0)
  br label %521

521:                                              ; preds = %506, %501, %498
  %522 = add nuw i32 %.79701119.us, 1
  %exitcond1200.not = icmp eq i32 %522, %17
  br i1 %exitcond1200.not, label %._crit_edge.us1122, label %492, !llvm.loop !46

._crit_edge.us1122:                               ; preds = %521
  %523 = add nuw i32 %.51120.us, 1
  %exitcond1201.not = icmp eq i32 %523, %5
  br i1 %exitcond1201.not, label %._crit_edge1121, label %.preheader1096.us, !llvm.loop !47

._crit_edge1121:                                  ; preds = %._crit_edge.us1122, %.preheader1096.lr.ph, %483
  %524 = load i32, ptr %472, align 4, !tbaa !23
  %525 = icmp eq i32 %524, 1
  %.phi.trans.insert1225 = getelementptr inbounds i8, ptr %2, i64 120
  %.pre1226 = load i32, ptr %.phi.trans.insert1225, align 8, !tbaa !24
  br i1 %525, label %._crit_edge1121._crit_edge, label %526

526:                                              ; preds = %._crit_edge1121
  %527 = icmp eq i32 %.pre1226, 1
  br i1 %527, label %._crit_edge1121._crit_edge, label %529

._crit_edge1121._crit_edge:                       ; preds = %._crit_edge1121, %526
  %528 = phi i32 [ 1, %526 ], [ %.pre1226, %._crit_edge1121 ]
  call void @libxsmm_generator_gemm_cleanup_relu_fusion(ptr noundef %0, i32 noundef %528, i32 noundef %469, i32 noundef 127, i32 noundef %471)
  br label %534

529:                                              ; preds = %526
  %530 = getelementptr inbounds i8, ptr %2, i64 132
  %531 = load i32, ptr %530, align 4, !tbaa !25
  %532 = icmp eq i32 %531, 1
  br i1 %532, label %533, label %534

533:                                              ; preds = %529
  call void @libxsmm_generator_gemm_restore_2D_regblock_from_scratch(ptr noundef %0, ptr noundef nonnull %2, i32 noundef %469, i32 noundef %21, i32 noundef %17, i32 noundef %5)
  call void @libxsmm_generator_gemm_cleanup_sigmoid_fusion(ptr noundef %0, i32 noundef %469, i32 noundef %471)
  br label %534

534:                                              ; preds = %529, %533, %._crit_edge1121._crit_edge
  %535 = getelementptr inbounds i8, ptr %3, i64 29
  %536 = call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef nonnull %535) #4
  %537 = icmp eq i32 %536, 4
  br i1 %537, label %538, label %540

538:                                              ; preds = %534
  %539 = load i32, ptr %468, align 4, !tbaa !19
  call void @libxsmm_generator_vcvtneps2bf8_avx512_prep_stack(ptr noundef %0, i32 noundef %539) #4
  br label %545

540:                                              ; preds = %534
  %541 = call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef nonnull %535) #4
  %542 = icmp eq i32 %541, 5
  br i1 %542, label %543, label %545

543:                                              ; preds = %540
  %544 = load i32, ptr %468, align 4, !tbaa !19
  call void @libxsmm_generator_vcvt_hf8_tofrom_f32_avx512_prep_stack(ptr noundef %0, i32 noundef %544) #4
  br label %545

545:                                              ; preds = %540, %543, %538
  br i1 %.not1166, label %._crit_edge1125, label %.preheader1095.lr.ph

.preheader1095.lr.ph:                             ; preds = %545
  %.not1169 = icmp eq i32 %17, 0
  %546 = getelementptr inbounds i8, ptr %0, i64 28
  %547 = getelementptr inbounds i8, ptr %2, i64 44
  %548 = add i32 %17, -1
  %549 = getelementptr inbounds i8, ptr %1, i64 20
  %550 = getelementptr inbounds i8, ptr %3, i64 20
  %551 = getelementptr inbounds i8, ptr %2, i64 20
  br i1 %.not1169, label %._crit_edge1125, label %.preheader1095.us

.preheader1095.us:                                ; preds = %.preheader1095.lr.ph, %._crit_edge.us1126
  %.61124.us = phi i32 [ %597, %._crit_edge.us1126 ], [ 0, %.preheader1095.lr.ph ]
  %552 = mul i32 %.61124.us, %17
  %553 = add i32 %552, %21
  br label %554

554:                                              ; preds = %.preheader1095.us, %595
  %.89711123.us = phi i32 [ 0, %.preheader1095.us ], [ %596, %595 ]
  %555 = add i32 %553, %.89711123.us
  %556 = call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef nonnull %535) #4
  %557 = icmp eq i32 %556, 4
  br i1 %557, label %565, label %558

558:                                              ; preds = %554
  %559 = call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef nonnull %535) #4
  %560 = icmp eq i32 %559, 5
  br i1 %560, label %561, label %569

561:                                              ; preds = %558
  %562 = load i32, ptr %546, align 4, !tbaa !48
  %563 = add i32 %562, -1051
  %spec.select1068.us = icmp ult i32 %563, 50
  %564 = select i1 %spec.select1068.us, i8 121, i8 122
  call void @libxsmm_generator_vcvtf32_to_hf8_avx512_preppedstack(ptr noundef %0, i8 noundef signext %564, i32 noundef %555, i32 noundef 0, i32 noundef 0, i32 noundef 1, i32 noundef 2, i32 noundef 3, i32 noundef 7, i32 noundef 6, i32 noundef 5) #4
  br label %569

565:                                              ; preds = %554
  %566 = load i32, ptr %546, align 4, !tbaa !48
  %567 = add i32 %566, -1051
  %spec.select1067.us = icmp ult i32 %567, 50
  %568 = select i1 %spec.select1067.us, i8 121, i8 122
  call void @libxsmm_generator_vcvtneps2bf8_avx512_preppedstack(ptr noundef %0, i8 noundef signext %568, i32 noundef %555, i32 noundef 0, i32 noundef 2, i32 noundef 3, i32 noundef 6, i32 noundef 7, i32 noundef 0, i32 noundef 0) #4
  br label %569

569:                                              ; preds = %565, %561, %558
  %570 = load i32, ptr %547, align 4, !tbaa !27
  %.not1029.us = icmp ne i32 %570, 0
  %571 = icmp eq i32 %.89711123.us, %548
  %or.cond1070.us = and i1 %571, %.not1029.us
  %572 = load i32, ptr %546, align 4, !tbaa !48
  br i1 %or.cond1070.us, label %584, label %573

573:                                              ; preds = %569
  %574 = icmp ult i32 %572, 1101
  %575 = select i1 %574, i32 545725200, i32 %26
  %576 = load i32, ptr %549, align 4, !tbaa !33
  %577 = load i32, ptr %550, align 1, !tbaa !34
  %578 = mul i32 %577, %.61124.us
  %579 = load i32, ptr %11, align 8, !tbaa !5
  %580 = mul i32 %579, %.89711123.us
  %581 = add i32 %580, %578
  %582 = load i32, ptr %551, align 4, !tbaa !35
  %583 = mul i32 %581, %582
  call void @libxsmm_x86_instruction_vec_move(ptr noundef %0, i32 noundef %572, i32 noundef %575, i32 noundef %576, i32 noundef 127, i32 noundef 0, i32 noundef %583, i8 noundef signext 120, i32 noundef 0, i32 noundef 0, i32 noundef 0, i32 noundef 1) #4
  br label %595

584:                                              ; preds = %569
  %585 = load i32, ptr %549, align 4, !tbaa !33
  %586 = load i32, ptr %550, align 1, !tbaa !34
  %587 = mul i32 %586, %.61124.us
  %588 = load i32, ptr %11, align 8, !tbaa !5
  %589 = mul i32 %588, %548
  %590 = add i32 %589, %587
  %591 = load i32, ptr %551, align 4, !tbaa !35
  %592 = mul i32 %590, %591
  %593 = add i32 %572, -1051
  %spec.select1071.us = icmp ult i32 %593, 50
  %594 = select i1 %spec.select1071.us, i8 121, i8 122
  call void @libxsmm_x86_instruction_vec_move(ptr noundef %0, i32 noundef %572, i32 noundef -536406417, i32 noundef %585, i32 noundef 127, i32 noundef 0, i32 noundef %592, i8 noundef signext %594, i32 noundef 0, i32 noundef 2, i32 noundef 0, i32 noundef 1) #4
  br label %595

595:                                              ; preds = %584, %573
  %596 = add nuw i32 %.89711123.us, 1
  %exitcond1202.not = icmp eq i32 %596, %17
  br i1 %exitcond1202.not, label %._crit_edge.us1126, label %554, !llvm.loop !50

._crit_edge.us1126:                               ; preds = %595
  %597 = add nuw i32 %.61124.us, 1
  %exitcond1203.not = icmp eq i32 %597, %5
  br i1 %exitcond1203.not, label %._crit_edge1125, label %.preheader1095.us, !llvm.loop !51

._crit_edge1125:                                  ; preds = %._crit_edge.us1126, %.preheader1095.lr.ph, %545
  %598 = call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef nonnull %535) #4
  %599 = icmp eq i32 %598, 4
  br i1 %599, label %600, label %602

600:                                              ; preds = %._crit_edge1125
  %601 = load i32, ptr %468, align 4, !tbaa !19
  call void @libxsmm_generator_vcvtneps2bf8_avx512_clean_stack(ptr noundef %0, i32 noundef %601) #4
  br label %.loopexit1098

602:                                              ; preds = %._crit_edge1125
  %603 = call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef nonnull %535) #4
  %604 = icmp eq i32 %603, 5
  br i1 %604, label %605, label %.loopexit1098

605:                                              ; preds = %602
  %606 = load i32, ptr %468, align 4, !tbaa !19
  call void @libxsmm_generator_vcvt_hf8_tofrom_f32_avx512_clean_stack(ptr noundef %0, i32 noundef %606) #4
  br label %.loopexit1098

607:                                              ; preds = %464, %461, %445
  %608 = load i32, ptr %2, align 8, !tbaa !18
  %609 = add i32 %608, -1006
  %or.cond1072 = icmp ult i32 %609, 994
  br i1 %or.cond1072, label %610, label %681

610:                                              ; preds = %607
  %611 = getelementptr inbounds i8, ptr %3, i64 29
  %612 = tail call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef nonnull %611) #4
  %613 = icmp eq i32 %612, 12
  br i1 %613, label %614, label %thread-pre-split

614:                                              ; preds = %610
  %615 = tail call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef nonnull %611) #4
  %616 = icmp eq i32 %615, 1
  %617 = icmp eq i32 %10, 0
  %or.cond = select i1 %616, i1 %617, i1 false
  br i1 %or.cond, label %618, label %thread-pre-split

618:                                              ; preds = %614
  %619 = getelementptr inbounds i8, ptr %1, i64 88
  %620 = load i32, ptr %619, align 4, !tbaa !22
  %621 = load i32, ptr %2, align 8, !tbaa !18
  %622 = add i32 %621, -1005
  %or.cond1073 = icmp ult i32 %622, 46
  br i1 %or.cond1073, label %623, label %628

623:                                              ; preds = %618
  %624 = getelementptr inbounds i8, ptr %2, i64 44
  %625 = load i32, ptr %624, align 4, !tbaa !27
  %.not1028 = icmp eq i32 %625, 0
  br i1 %.not1028, label %628, label %626

626:                                              ; preds = %623
  tail call void @libxsmm_generator_gemm_getval_stack_var(ptr noundef %0, ptr noundef nonnull %2, i32 noundef 22, i32 noundef %620)
  %627 = load i32, ptr %2, align 8, !tbaa !18
  tail call void @libxsmm_x86_instruction_vec_move(ptr noundef %0, i32 noundef %627, i32 noundef 537138704, i32 noundef %620, i32 noundef 127, i32 noundef 0, i32 noundef 0, i8 noundef signext 121, i32 noundef 1, i32 noundef 0, i32 noundef 0, i32 noundef 0) #4
  %.pre1221 = load i32, ptr %2, align 8, !tbaa !18
  br label %628

628:                                              ; preds = %626, %623, %618
  %629 = phi i32 [ %.pre1221, %626 ], [ %621, %623 ], [ %621, %618 ]
  %630 = getelementptr inbounds i8, ptr %1, i64 80
  %631 = load i32, ptr %630, align 4, !tbaa !52
  %632 = getelementptr inbounds i8, ptr %2, i64 84
  %633 = load i8, ptr %632, align 4, !tbaa !26
  tail call void @libxsmm_x86_instruction_vec_move(ptr noundef %0, i32 noundef %629, i32 noundef 537209368, i32 noundef %631, i32 noundef 127, i32 noundef 0, i32 noundef 0, i8 noundef signext %633, i32 noundef 3, i32 noundef 0, i32 noundef 1, i32 noundef 0) #4
  %.not1164 = icmp eq i32 %5, 0
  br i1 %.not1164, label %.loopexit1098, label %.preheader1097.lr.ph

.preheader1097.lr.ph:                             ; preds = %628
  %.not1165 = icmp eq i32 %17, 0
  %634 = getelementptr inbounds i8, ptr %1, i64 20
  %635 = getelementptr inbounds i8, ptr %3, i64 20
  %636 = getelementptr inbounds i8, ptr %2, i64 20
  %637 = add i32 %17, -1
  %638 = getelementptr inbounds i8, ptr %2, i64 44
  br i1 %.not1165, label %.loopexit1098, label %.preheader1097.us

.preheader1097.us:                                ; preds = %.preheader1097.lr.ph, %._crit_edge.us1118
  %.71117.us = phi i32 [ %680, %._crit_edge.us1118 ], [ 0, %.preheader1097.lr.ph ]
  %639 = mul i32 %.71117.us, %17
  %640 = add i32 %639, %21
  br label %641

641:                                              ; preds = %.preheader1097.us, %677
  %.99721116.us = phi i32 [ 0, %.preheader1097.us ], [ %679, %677 ]
  %642 = add i32 %640, %.99721116.us
  %643 = load i8, ptr %632, align 4, !tbaa !26
  tail call void @libxsmm_x86_instruction_vec_compute_2reg(ptr noundef %0, i32 noundef 537138779, i8 noundef signext %643, i32 noundef %642, i32 noundef %642) #4
  %644 = load i8, ptr %632, align 4, !tbaa !26
  tail call void @libxsmm_x86_instruction_vec_compute_3reg(ptr noundef %0, i32 noundef 805574233, i8 noundef signext %644, i32 noundef %642, i32 noundef 3, i32 noundef %642) #4
  %645 = load i32, ptr %22, align 1, !tbaa !14
  %646 = and i32 %645, 4
  %647 = icmp eq i32 %646, 0
  br i1 %647, label %648, label %664

648:                                              ; preds = %641
  %649 = load i32, ptr %634, align 4, !tbaa !33
  %650 = load i32, ptr %635, align 1, !tbaa !34
  %651 = mul i32 %650, %.71117.us
  %652 = load i32, ptr %11, align 8, !tbaa !5
  %653 = mul i32 %652, %.99721116.us
  %654 = add i32 %653, %651
  %655 = load i32, ptr %636, align 4, !tbaa !35
  %656 = mul i32 %654, %655
  %657 = load i8, ptr %632, align 4, !tbaa !26
  %658 = icmp eq i32 %.99721116.us, %637
  br i1 %658, label %659, label %661

659:                                              ; preds = %648
  %660 = load i32, ptr %638, align 4, !tbaa !27
  br label %661

661:                                              ; preds = %659, %648
  %662 = phi i32 [ %660, %659 ], [ 0, %648 ]
  tail call void @libxsmm_x86_instruction_unified_vec_move(ptr noundef %0, i32 noundef %26, i32 noundef %649, i32 noundef 127, i32 noundef 0, i32 noundef %656, i8 noundef signext %657, i32 noundef 2, i32 noundef %662, i32 noundef 1, i32 noundef 0) #4
  %663 = load i8, ptr %632, align 4, !tbaa !26
  tail call void @libxsmm_x86_instruction_vec_compute_3reg(ptr noundef %0, i32 noundef 805574232, i8 noundef signext %663, i32 noundef %642, i32 noundef 2, i32 noundef %642) #4
  br label %664

664:                                              ; preds = %661, %641
  %665 = load i32, ptr %634, align 4, !tbaa !33
  %666 = load i32, ptr %635, align 1, !tbaa !34
  %667 = mul i32 %666, %.71117.us
  %668 = load i32, ptr %11, align 8, !tbaa !5
  %669 = mul i32 %668, %.99721116.us
  %670 = add i32 %669, %667
  %671 = load i32, ptr %636, align 4, !tbaa !35
  %672 = mul i32 %670, %671
  %673 = load i8, ptr %632, align 4, !tbaa !26
  %674 = icmp eq i32 %.99721116.us, %637
  br i1 %674, label %675, label %677

675:                                              ; preds = %664
  %676 = load i32, ptr %638, align 4, !tbaa !27
  br label %677

677:                                              ; preds = %675, %664
  %678 = phi i32 [ %676, %675 ], [ 0, %664 ]
  tail call void @libxsmm_x86_instruction_unified_vec_move(ptr noundef %0, i32 noundef %26, i32 noundef %665, i32 noundef 127, i32 noundef 0, i32 noundef %672, i8 noundef signext %673, i32 noundef %642, i32 noundef %678, i32 noundef 1, i32 noundef 1) #4
  %679 = add nuw i32 %.99721116.us, 1
  %exitcond1198.not = icmp eq i32 %679, %17
  br i1 %exitcond1198.not, label %._crit_edge.us1118, label %641, !llvm.loop !53

._crit_edge.us1118:                               ; preds = %677
  %680 = add nuw i32 %.71117.us, 1
  %exitcond1199.not = icmp eq i32 %680, %5
  br i1 %exitcond1199.not, label %.loopexit1098, label %.preheader1097.us, !llvm.loop !54

thread-pre-split:                                 ; preds = %610, %614
  %.pr = load i32, ptr %2, align 8, !tbaa !18
  br label %681

681:                                              ; preds = %thread-pre-split, %607
  %682 = phi i32 [ %.pr, %thread-pre-split ], [ %608, %607 ]
  %683 = icmp ult i32 %682, 1005
  br i1 %683, label %684, label %746

684:                                              ; preds = %681
  %685 = getelementptr inbounds i8, ptr %3, i64 29
  %686 = tail call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef nonnull %685) #4
  %687 = icmp eq i32 %686, 12
  br i1 %687, label %688, label %._crit_edge1215

._crit_edge1215:                                  ; preds = %684
  %.pre = load i32, ptr %2, align 8, !tbaa !18
  br label %746

688:                                              ; preds = %684
  %689 = tail call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef nonnull %685) #4
  %690 = icmp eq i32 %689, 1
  %.pre1216 = load i32, ptr %2, align 8, !tbaa !18
  br i1 %690, label %691, label %746

691:                                              ; preds = %688
  %692 = load i32, ptr %11, align 8, !tbaa !5
  %693 = urem i32 %4, %692
  %694 = getelementptr inbounds i8, ptr %1, i64 80
  %695 = load i32, ptr %694, align 4, !tbaa !52
  %696 = getelementptr inbounds i8, ptr %2, i64 84
  %697 = load i8, ptr %696, align 4, !tbaa !26
  tail call void @libxsmm_x86_instruction_vec_move(ptr noundef %0, i32 noundef %.pre1216, i32 noundef -1610215408, i32 noundef %695, i32 noundef 127, i32 noundef 0, i32 noundef 0, i8 noundef signext %697, i32 noundef 3, i32 noundef 0, i32 noundef 1, i32 noundef 0) #4
  %698 = load i8, ptr %696, align 4, !tbaa !26
  tail call void @libxsmm_x86_instruction_vec_compute_2reg_imm8(ptr noundef %0, i32 noundef -1609822010, i8 noundef signext %698, i32 noundef 3, i32 noundef 3, i32 noundef 0) #4
  %.not1162 = icmp eq i32 %5, 0
  br i1 %.not1162, label %.loopexit1098, label %.preheader1099.lr.ph

.preheader1099.lr.ph:                             ; preds = %691
  %.not1163 = icmp eq i32 %17, 0
  %699 = getelementptr inbounds i8, ptr %1, i64 20
  %700 = getelementptr inbounds i8, ptr %3, i64 20
  %701 = getelementptr inbounds i8, ptr %2, i64 20
  %702 = add i32 %17, -1
  %703 = getelementptr inbounds i8, ptr %2, i64 44
  br i1 %.not1163, label %.loopexit1098, label %.preheader1099.us

.preheader1099.us:                                ; preds = %.preheader1099.lr.ph, %._crit_edge.us1115
  %.81114.us = phi i32 [ %745, %._crit_edge.us1115 ], [ 0, %.preheader1099.lr.ph ]
  %704 = mul i32 %.81114.us, %17
  %705 = add i32 %704, %21
  br label %706

706:                                              ; preds = %.preheader1099.us, %742
  %.109731113.us = phi i32 [ 0, %.preheader1099.us ], [ %744, %742 ]
  %707 = add i32 %705, %.109731113.us
  %708 = load i8, ptr %696, align 4, !tbaa !26
  tail call void @libxsmm_x86_instruction_vec_compute_2reg(ptr noundef %0, i32 noundef -1610346405, i8 noundef signext %708, i32 noundef %707, i32 noundef %707) #4
  %709 = load i8, ptr %696, align 4, !tbaa !26
  tail call void @libxsmm_x86_instruction_vec_compute_2reg(ptr noundef %0, i32 noundef -1610346407, i8 noundef signext %709, i32 noundef 3, i32 noundef %707) #4
  %710 = load i32, ptr %22, align 1, !tbaa !14
  %711 = and i32 %710, 4
  %712 = icmp eq i32 %711, 0
  br i1 %712, label %713, label %729

713:                                              ; preds = %706
  %714 = load i32, ptr %699, align 4, !tbaa !33
  %715 = load i32, ptr %700, align 1, !tbaa !34
  %716 = mul i32 %715, %.81114.us
  %717 = load i32, ptr %11, align 8, !tbaa !5
  %718 = mul i32 %717, %.109731113.us
  %719 = add i32 %718, %716
  %720 = load i32, ptr %701, align 4, !tbaa !35
  %721 = mul i32 %719, %720
  %722 = load i8, ptr %696, align 4, !tbaa !26
  %723 = icmp eq i32 %.109731113.us, %702
  br i1 %723, label %724, label %726

724:                                              ; preds = %713
  %725 = load i32, ptr %703, align 4, !tbaa !27
  br label %726

726:                                              ; preds = %724, %713
  %727 = phi i32 [ %725, %724 ], [ 0, %713 ]
  tail call void @libxsmm_x86_instruction_unified_vec_move(ptr noundef %0, i32 noundef %26, i32 noundef %714, i32 noundef 127, i32 noundef 0, i32 noundef %721, i8 noundef signext %722, i32 noundef 2, i32 noundef %727, i32 noundef %693, i32 noundef 0) #4
  %728 = load i8, ptr %696, align 4, !tbaa !26
  tail call void @libxsmm_x86_instruction_vec_compute_2reg(ptr noundef %0, i32 noundef -1610346408, i8 noundef signext %728, i32 noundef 2, i32 noundef %707) #4
  br label %729

729:                                              ; preds = %726, %706
  %730 = load i32, ptr %699, align 4, !tbaa !33
  %731 = load i32, ptr %700, align 1, !tbaa !34
  %732 = mul i32 %731, %.81114.us
  %733 = load i32, ptr %11, align 8, !tbaa !5
  %734 = mul i32 %733, %.109731113.us
  %735 = add i32 %734, %732
  %736 = load i32, ptr %701, align 4, !tbaa !35
  %737 = mul i32 %735, %736
  %738 = load i8, ptr %696, align 4, !tbaa !26
  %739 = icmp eq i32 %.109731113.us, %702
  br i1 %739, label %740, label %742

740:                                              ; preds = %729
  %741 = load i32, ptr %703, align 4, !tbaa !27
  br label %742

742:                                              ; preds = %740, %729
  %743 = phi i32 [ %741, %740 ], [ 0, %729 ]
  tail call void @libxsmm_x86_instruction_unified_vec_move(ptr noundef %0, i32 noundef %26, i32 noundef %730, i32 noundef 127, i32 noundef 0, i32 noundef %737, i8 noundef signext %738, i32 noundef %707, i32 noundef %743, i32 noundef %693, i32 noundef 1) #4
  %744 = add nuw i32 %.109731113.us, 1
  %exitcond1196.not = icmp eq i32 %744, %17
  br i1 %exitcond1196.not, label %._crit_edge.us1115, label %706, !llvm.loop !55

._crit_edge.us1115:                               ; preds = %742
  %745 = add nuw i32 %.81114.us, 1
  %exitcond1197.not = icmp eq i32 %745, %5
  br i1 %exitcond1197.not, label %.loopexit1098, label %.preheader1099.us, !llvm.loop !56

746:                                              ; preds = %._crit_edge1215, %688, %681
  %747 = phi i32 [ %.pre, %._crit_edge1215 ], [ %.pre1216, %688 ], [ %682, %681 ]
  %748 = getelementptr inbounds i8, ptr %1, i64 96
  %749 = load i32, ptr %748, align 4, !tbaa !19
  %750 = getelementptr inbounds i8, ptr %1, i64 92
  %751 = load i32, ptr %750, align 4, !tbaa !21
  %752 = icmp ne i32 %8, 0
  %753 = icmp ne i32 %9, 0
  %or.cond3 = select i1 %752, i1 true, i1 %753
  %754 = icmp ne i32 %10, 0
  %spec.select1074 = select i1 %or.cond3, i1 true, i1 %754
  %755 = select i1 %spec.select1074, i32 2, i32 1
  %756 = getelementptr inbounds i8, ptr %1, i64 88
  %757 = load i32, ptr %756, align 4, !tbaa !22
  %758 = add i32 %747, -1005
  %or.cond1075 = icmp ult i32 %758, 46
  br i1 %or.cond1075, label %759, label %763

759:                                              ; preds = %746
  %760 = getelementptr inbounds i8, ptr %2, i64 44
  %761 = load i32, ptr %760, align 4, !tbaa !27
  %.not1020 = icmp eq i32 %761, 0
  br i1 %.not1020, label %763, label %762

762:                                              ; preds = %759
  tail call void @libxsmm_generator_gemm_getval_stack_var(ptr noundef %0, ptr noundef nonnull %2, i32 noundef 22, i32 noundef %757)
  br label %763

763:                                              ; preds = %762, %759, %746
  %764 = getelementptr inbounds i8, ptr %2, i64 124
  %765 = load i32, ptr %764, align 4, !tbaa !23
  %766 = icmp eq i32 %765, 1
  %.phi.trans.insert = getelementptr inbounds i8, ptr %2, i64 120
  %.pre1218 = load i32, ptr %.phi.trans.insert, align 8, !tbaa !24
  br i1 %766, label %._crit_edge1217, label %767

767:                                              ; preds = %763
  %768 = icmp eq i32 %.pre1218, 1
  br i1 %768, label %._crit_edge1217, label %770

._crit_edge1217:                                  ; preds = %763, %767
  %769 = phi i32 [ 1, %767 ], [ %.pre1218, %763 ]
  tail call void @libxsmm_generator_gemm_prepare_relu_fusion(ptr noundef %0, ptr noundef nonnull %2, i32 noundef 0, i32 noundef %769, i32 noundef %749, i32 noundef %757, i32 noundef %751)
  br label %775

770:                                              ; preds = %767
  %771 = getelementptr inbounds i8, ptr %2, i64 132
  %772 = load i32, ptr %771, align 4, !tbaa !25
  %773 = icmp eq i32 %772, 1
  br i1 %773, label %774, label %775

774:                                              ; preds = %770
  call void @libxsmm_generator_gemm_dump_2D_block_and_prepare_sigmoid_fusion(ptr noundef %0, ptr noundef nonnull %7, i32 noundef %21, i32 noundef %17, i32 noundef %5, i32 noundef %749, i32 noundef %751)
  br label %775

775:                                              ; preds = %770, %774, %._crit_edge1217
  %776 = getelementptr inbounds i8, ptr %3, i64 29
  %777 = call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef nonnull %776) #4
  %778 = icmp eq i32 %777, 1
  br i1 %778, label %779, label %834

779:                                              ; preds = %775
  %780 = call i32 @LIBXSMM_GEMM_GETENUM_COMP_PREC(ptr noundef nonnull %776) #4
  %781 = icmp eq i32 %780, 3
  br i1 %781, label %782, label %834

782:                                              ; preds = %779
  %783 = getelementptr inbounds i8, ptr %0, i64 28
  %784 = load i32, ptr %783, align 4, !tbaa !48
  %785 = icmp ugt i32 %784, 1103
  br i1 %785, label %.preheader1102, label %834

.preheader1102:                                   ; preds = %782
  %.not1160 = icmp eq i32 %5, 0
  br i1 %.not1160, label %.loopexit1103, label %.preheader1101.lr.ph

.preheader1101.lr.ph:                             ; preds = %.preheader1102
  %.not1161 = icmp eq i32 %17, 0
  %786 = add i32 %21, -1
  %787 = getelementptr inbounds i8, ptr %2, i64 84
  %788 = getelementptr inbounds i8, ptr %1, i64 20
  %789 = getelementptr inbounds i8, ptr %3, i64 20
  %790 = getelementptr inbounds i8, ptr %2, i64 20
  %791 = add i32 %17, -1
  %792 = getelementptr inbounds i8, ptr %2, i64 44
  br i1 %.not1161, label %.loopexit1103, label %.preheader1101.us

.preheader1101.us:                                ; preds = %.preheader1101.lr.ph, %._crit_edge.us1112
  %.91111.us = phi i32 [ %833, %._crit_edge.us1112 ], [ 0, %.preheader1101.lr.ph ]
  %793 = mul i32 %.91111.us, %17
  %794 = add i32 %793, %21
  br label %795

795:                                              ; preds = %.preheader1101.us, %830
  %.111110.us = phi i32 [ 0, %.preheader1101.us ], [ %832, %830 ]
  %796 = add i32 %794, %.111110.us
  %797 = load i8, ptr %787, align 4, !tbaa !26
  switch i8 %797, label %798 [
    i8 121, label %799
    i8 120, label %.fold.split.us
  ]

.fold.split.us:                                   ; preds = %795
  br label %799

798:                                              ; preds = %795
  br label %799

799:                                              ; preds = %798, %.fold.split.us, %795
  %800 = phi i8 [ 122, %795 ], [ %797, %798 ], [ 121, %.fold.split.us ]
  call void @libxsmm_x86_instruction_vec_compute_2reg_imm8(ptr noundef %0, i32 noundef -393396933, i8 noundef signext %800, i32 noundef %796, i32 noundef %786, i32 noundef 1) #4
  call void @libxsmm_x86_instruction_vec_compute_2reg(ptr noundef %0, i32 noundef 537208083, i8 noundef signext %800, i32 noundef %796, i32 noundef %796) #4
  %801 = load i32, ptr %788, align 4, !tbaa !33
  %802 = load i32, ptr %789, align 1, !tbaa !34
  %803 = mul i32 %802, %.91111.us
  %804 = shl i32 %.111110.us, 1
  %805 = load i32, ptr %11, align 8, !tbaa !5
  %806 = lshr i32 %805, 1
  %807 = mul i32 %806, %804
  %808 = add i32 %807, %803
  %809 = load i32, ptr %790, align 4, !tbaa !35
  %810 = mul i32 %808, %809
  %811 = load i8, ptr %787, align 4, !tbaa !26
  %812 = icmp eq i32 %.111110.us, %791
  br i1 %812, label %813, label %815

813:                                              ; preds = %799
  %814 = load i32, ptr %792, align 4, !tbaa !27
  br label %815

815:                                              ; preds = %813, %799
  %816 = phi i32 [ %814, %813 ], [ 0, %799 ]
  call void @libxsmm_x86_instruction_unified_vec_move(ptr noundef %0, i32 noundef %26, i32 noundef %801, i32 noundef 127, i32 noundef 0, i32 noundef %810, i8 noundef signext %811, i32 noundef %796, i32 noundef %816, i32 noundef 2, i32 noundef 1) #4
  call void @libxsmm_x86_instruction_vec_compute_2reg(ptr noundef %0, i32 noundef 537208083, i8 noundef signext %800, i32 noundef %786, i32 noundef %786) #4
  %817 = load i32, ptr %788, align 4, !tbaa !33
  %818 = load i32, ptr %789, align 1, !tbaa !34
  %819 = mul i32 %818, %.91111.us
  %820 = or disjoint i32 %804, 1
  %821 = load i32, ptr %11, align 8, !tbaa !5
  %822 = lshr i32 %821, 1
  %823 = mul i32 %822, %820
  %824 = add i32 %823, %819
  %825 = load i32, ptr %790, align 4, !tbaa !35
  %826 = mul i32 %824, %825
  %827 = load i8, ptr %787, align 4, !tbaa !26
  br i1 %812, label %828, label %830

828:                                              ; preds = %815
  %829 = load i32, ptr %792, align 4, !tbaa !27
  br label %830

830:                                              ; preds = %828, %815
  %831 = phi i32 [ %829, %828 ], [ 0, %815 ]
  call void @libxsmm_x86_instruction_unified_vec_move(ptr noundef %0, i32 noundef %26, i32 noundef %817, i32 noundef 127, i32 noundef 0, i32 noundef %826, i8 noundef signext %827, i32 noundef %786, i32 noundef %831, i32 noundef 3, i32 noundef 1) #4
  %832 = add nuw i32 %.111110.us, 1
  %exitcond1194.not = icmp eq i32 %832, %17
  br i1 %exitcond1194.not, label %._crit_edge.us1112, label %795, !llvm.loop !57

._crit_edge.us1112:                               ; preds = %830
  %833 = add nuw i32 %.91111.us, 1
  %exitcond1195.not = icmp eq i32 %833, %5
  br i1 %exitcond1195.not, label %.loopexit1103, label %.preheader1101.us, !llvm.loop !58

834:                                              ; preds = %782, %779, %775
  %835 = call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef nonnull %776) #4
  %836 = icmp eq i32 %835, 2
  br i1 %836, label %837, label %848

837:                                              ; preds = %834
  %838 = call i32 @LIBXSMM_GEMM_GETENUM_COMP_PREC(ptr noundef nonnull %776) #4
  %839 = icmp eq i32 %838, 1
  br i1 %839, label %840, label %848

840:                                              ; preds = %837
  %841 = getelementptr inbounds i8, ptr %2, i64 56
  %842 = load i32, ptr %841, align 8, !tbaa !59
  %.not1021 = icmp eq i32 %842, -268032430
  br i1 %.not1021, label %848, label %843

843:                                              ; preds = %840
  %844 = getelementptr inbounds i8, ptr %0, i64 28
  %845 = load i32, ptr %844, align 4, !tbaa !48
  %.not1022 = icmp eq i32 %845, 1008
  br i1 %.not1022, label %848, label %846

846:                                              ; preds = %843
  %847 = load i32, ptr %748, align 4, !tbaa !19
  call void @libxsmm_generator_vcvtneps2bf16_avx512_prep_stack(ptr noundef nonnull %0, i32 noundef %847) #4
  br label %848

848:                                              ; preds = %840, %843, %846, %837, %834
  %849 = phi i1 [ true, %846 ], [ false, %843 ], [ false, %840 ], [ false, %837 ], [ false, %834 ]
  %850 = phi i1 [ false, %846 ], [ true, %843 ], [ true, %840 ], [ true, %837 ], [ true, %834 ]
  %.not1158 = icmp eq i32 %5, 0
  br i1 %.not1158, label %._crit_edge1109, label %.preheader1104.lr.ph

.preheader1104.lr.ph:                             ; preds = %848
  %.not1159 = icmp eq i32 %17, 0
  %851 = getelementptr inbounds i8, ptr %2, i64 84
  %852 = getelementptr inbounds i8, ptr %2, i64 120
  %853 = getelementptr inbounds i8, ptr %2, i64 132
  %854 = getelementptr inbounds i8, ptr %2, i64 44
  %855 = add i32 %17, -1
  %856 = getelementptr inbounds i8, ptr %3, i64 90
  %857 = getelementptr inbounds i8, ptr %2, i64 164
  %858 = getelementptr inbounds i8, ptr %0, i64 28
  %859 = add i32 %21, -2
  %860 = add i32 %21, -1
  %861 = getelementptr inbounds i8, ptr %1, i64 20
  %862 = getelementptr inbounds i8, ptr %3, i64 20
  %863 = getelementptr inbounds i8, ptr %2, i64 20
  br i1 %.not1159, label %._crit_edge1109, label %.preheader1104.us

.preheader1104.us:                                ; preds = %.preheader1104.lr.ph, %._crit_edge.us
  %.101108.us = phi i32 [ %1007, %._crit_edge.us ], [ 0, %.preheader1104.lr.ph ]
  %864 = mul i32 %.101108.us, %17
  %865 = add i32 %864, %21
  br label %866

866:                                              ; preds = %.preheader1104.us, %1005
  %.121105.us = phi i32 [ 0, %.preheader1104.us ], [ %1006, %1005 ]
  %867 = add i32 %865, %.121105.us
  %868 = load i32, ptr %2, align 8, !tbaa !18
  %869 = icmp ugt i32 %868, 1004
  br i1 %869, label %873, label %870

870:                                              ; preds = %866
  %871 = load i32, ptr %11, align 8, !tbaa !5
  %872 = urem i32 %4, %871
  br label %873

873:                                              ; preds = %870, %866
  %874 = phi i32 [ %872, %870 ], [ %755, %866 ]
  %875 = load i8, ptr %851, align 4, !tbaa !26
  %876 = load i32, ptr %764, align 4, !tbaa !23
  %877 = icmp eq i32 %876, 1
  br i1 %877, label %885, label %878

878:                                              ; preds = %873
  %879 = load i32, ptr %852, align 8, !tbaa !24
  %880 = icmp eq i32 %879, 1
  br i1 %880, label %885, label %881

881:                                              ; preds = %878
  %882 = load i32, ptr %853, align 4, !tbaa !25
  %883 = icmp eq i32 %882, 1
  br i1 %883, label %884, label %911

884:                                              ; preds = %881
  call void @libxsmm_generator_gemm_apply_sigmoid_to_vreg_from_scratch(ptr noundef %0, ptr noundef nonnull %7, i32 noundef %749, i32 noundef %867, i32 noundef 0)
  br label %911

885:                                              ; preds = %878, %873
  %886 = load i32, ptr %854, align 4, !tbaa !27
  %887 = icmp eq i32 %.121105.us, %855
  %888 = select i1 %887, i32 %886, i32 0
  %889 = icmp ult i32 %868, 1101
  %890 = load i32, ptr %856, align 1, !tbaa !28
  %891 = mul i32 %890, %.101108.us
  %892 = lshr i32 %891, 3
  br i1 %889, label %898, label %.thread1084.us

.thread1084.us:                                   ; preds = %885
  %893 = shl i32 %.121105.us, 1
  %894 = and i32 %893, 536870910
  %895 = shl i32 %.121105.us, 2
  %896 = load i32, ptr %857, align 4, !tbaa !29
  %897 = add i32 %896, %895
  br label %907

898:                                              ; preds = %885
  %899 = and i32 %.121105.us, 536870911
  %900 = shl i32 %.121105.us, 2
  %901 = load i32, ptr %857, align 4, !tbaa !29
  %902 = add i32 %901, %900
  %903 = icmp ult i32 %868, 1005
  br i1 %903, label %904, label %907

904:                                              ; preds = %898
  %905 = lshr i32 %.121105.us, 1
  %906 = and i32 %905, 536870911
  br label %907

907:                                              ; preds = %904, %898, %.thread1084.us
  %.in1085.us = phi i32 [ %902, %904 ], [ %902, %898 ], [ %897, %.thread1084.us ]
  %.pn = phi i32 [ %906, %904 ], [ %899, %898 ], [ %894, %.thread1084.us ]
  %908 = add nuw nsw i32 %892, %.pn
  %909 = and i32 %.in1085.us, 7
  %910 = load i32, ptr %852, align 8, !tbaa !24
  call void @libxsmm_generator_gemm_apply_relu_to_vreg(ptr noundef %0, ptr noundef nonnull %2, i32 noundef 0, i32 noundef %867, i32 noundef %910, i32 noundef %749, i32 noundef %908, i32 noundef 1, i32 noundef %757, i32 noundef %751, i32 noundef %755, i32 noundef %888, i32 noundef %909)
  br label %911

911:                                              ; preds = %907, %884, %881
  %.0977.us = phi i32 [ %867, %907 ], [ 0, %884 ], [ %867, %881 ]
  %912 = load i32, ptr %2, align 8, !tbaa !18
  %913 = add i32 %912, -1005
  %or.cond1079.us = icmp ult i32 %913, 46
  br i1 %or.cond1079.us, label %914, label %918

914:                                              ; preds = %911
  %915 = load i32, ptr %854, align 4, !tbaa !27
  %.not1024.us = icmp ne i32 %915, 0
  %916 = icmp eq i32 %.121105.us, %855
  %or.cond1081.us = and i1 %916, %.not1024.us
  br i1 %or.cond1081.us, label %917, label %918

917:                                              ; preds = %914
  call void @libxsmm_x86_instruction_vec_move(ptr noundef %0, i32 noundef %912, i32 noundef 537138704, i32 noundef %757, i32 noundef 127, i32 noundef 0, i32 noundef 0, i8 noundef signext 121, i32 noundef %755, i32 noundef 0, i32 noundef 0, i32 noundef 0) #4
  br label %918

918:                                              ; preds = %917, %914, %911
  %919 = call i32 @LIBXSMM_GEMM_GETENUM_COMP_PREC(ptr noundef nonnull %776) #4
  %920 = icmp eq i32 %919, 1
  br i1 %920, label %921, label %924

921:                                              ; preds = %918
  %922 = call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef nonnull %776) #4
  %923 = icmp eq i32 %922, 3
  br i1 %923, label %933, label %924

924:                                              ; preds = %921, %918
  %925 = call i32 @LIBXSMM_GEMM_GETENUM_COMP_PREC(ptr noundef nonnull %776) #4
  %926 = icmp eq i32 %925, 3
  br i1 %926, label %927, label %947

927:                                              ; preds = %924
  %928 = call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef nonnull %776) #4
  %929 = icmp eq i32 %928, 3
  br i1 %929, label %930, label %947

930:                                              ; preds = %927
  %931 = load i32, ptr %858, align 4, !tbaa !48
  %932 = icmp ult i32 %931, 1104
  br i1 %932, label %933, label %947

933:                                              ; preds = %930, %921
  %934 = icmp eq i8 %875, 122
  %935 = select i1 %934, i8 121, i8 120
  %936 = call i32 @LIBXSMM_GEMM_GETENUM_COMP_PREC(ptr noundef nonnull %776) #4
  %937 = icmp eq i32 %936, 1
  br i1 %937, label %938, label %947

938:                                              ; preds = %933
  %939 = call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef nonnull %776) #4
  %940 = icmp eq i32 %939, 3
  br i1 %940, label %941, label %947

941:                                              ; preds = %938
  %942 = load i8, ptr %851, align 4, !tbaa !26
  %943 = load i32, ptr %858, align 4, !tbaa !48
  %944 = icmp ugt i32 %943, 1100
  %945 = zext i1 %944 to i32
  %946 = zext i1 %944 to i8
  call void @libxsmm_x86_instruction_vec_compute_2reg_mask_sae_imm8(ptr noundef %0, i32 noundef 671954205, i8 noundef signext %942, i32 noundef %.0977.us, i32 noundef %.0977.us, i32 noundef 0, i32 noundef %945, i8 noundef zeroext %946, i32 noundef 0) #4
  br label %947

947:                                              ; preds = %941, %938, %933, %930, %927, %924
  %.0974.us = phi i8 [ %935, %941 ], [ %935, %938 ], [ %935, %933 ], [ %875, %930 ], [ %875, %927 ], [ %875, %924 ]
  %948 = call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef nonnull %776) #4
  %949 = icmp eq i32 %948, 1
  br i1 %949, label %950, label %955

950:                                              ; preds = %947
  %951 = call i32 @LIBXSMM_GEMM_GETENUM_COMP_PREC(ptr noundef nonnull %776) #4
  %952 = icmp eq i32 %951, 3
  br i1 %952, label %953, label %955

953:                                              ; preds = %950
  %954 = load i8, ptr %851, align 4, !tbaa !26
  call void @libxsmm_x86_instruction_vec_compute_2reg(ptr noundef %0, i32 noundef 537208083, i8 noundef signext %954, i32 noundef %.0977.us, i32 noundef %.0977.us) #4
  br label %955

955:                                              ; preds = %953, %950, %947
  %956 = call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef nonnull %776) #4
  %957 = icmp eq i32 %956, 2
  br i1 %957, label %958, label %970

958:                                              ; preds = %955
  %959 = call i32 @LIBXSMM_GEMM_GETENUM_COMP_PREC(ptr noundef nonnull %776) #4
  %960 = icmp eq i32 %959, 1
  br i1 %960, label %964, label %961

961:                                              ; preds = %958
  %962 = call i32 @LIBXSMM_GEMM_GETENUM_COMP_PREC(ptr noundef nonnull %776) #4
  %963 = icmp eq i32 %962, 8
  br i1 %963, label %964, label %970

964:                                              ; preds = %961, %958
  %965 = icmp eq i8 %.0974.us, 122
  %966 = select i1 %965, i8 121, i8 120
  %967 = load i8, ptr %851, align 4, !tbaa !26
  br i1 %850, label %969, label %968

968:                                              ; preds = %964
  call void @libxsmm_generator_vcvtneps2bf16_avx512_preppedstack(ptr noundef %0, i8 noundef signext %967, i32 noundef %.0977.us, i32 noundef %.0977.us, i32 noundef %859, i32 noundef %860, i32 noundef 6, i32 noundef 7, i32 noundef 0) #4
  br label %970

969:                                              ; preds = %964
  call void @libxsmm_x86_instruction_vec_compute_2reg(ptr noundef %0, i32 noundef 537273970, i8 noundef signext %967, i32 noundef %.0977.us, i32 noundef %.0977.us) #4
  br label %970

970:                                              ; preds = %969, %968, %961, %955
  %.1975.us = phi i8 [ %966, %969 ], [ %966, %968 ], [ %.0974.us, %961 ], [ %.0974.us, %955 ]
  %971 = call i32 @libxsmm_x86_is_Amxfp4_Bbf16_gemm(ptr noundef nonnull %3)
  %.not1025.us = icmp eq i32 %971, 0
  br i1 %.not1025.us, label %972, label %974

972:                                              ; preds = %970
  %973 = call i32 @libxsmm_x86_is_Amxfp4_Bi8_gemm(ptr noundef %3)
  %.not1026.us = icmp eq i32 %973, 0
  br i1 %.not1026.us, label %991, label %974

974:                                              ; preds = %972, %970
  %975 = call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef nonnull %776) #4
  %976 = icmp eq i32 %975, 2
  br i1 %976, label %977, label %991

977:                                              ; preds = %974
  %978 = load i32, ptr %854, align 4, !tbaa !27
  %.not1027.us = icmp ne i32 %978, 0
  %979 = icmp eq i32 %.121105.us, %855
  %or.cond1083.us = and i1 %979, %.not1027.us
  br i1 %or.cond1083.us, label %980, label %991

980:                                              ; preds = %977
  %981 = load i32, ptr %748, align 4, !tbaa !19
  %982 = load i32, ptr %861, align 4, !tbaa !33
  %983 = load i32, ptr %862, align 1, !tbaa !34
  %984 = mul i32 %983, %.101108.us
  %985 = load i32, ptr %11, align 8, !tbaa !5
  %986 = mul i32 %985, %855
  %987 = add i32 %986, %984
  %988 = load i32, ptr %863, align 4, !tbaa !35
  %989 = mul i32 %987, %988
  %990 = urem i32 %4, %985
  call void @libxsmm_generator_maskedstore_16bit_avx2(ptr noundef %0, i32 noundef %981, i32 noundef %.0977.us, i32 noundef %982, i32 noundef 127, i32 noundef 0, i32 noundef %989, i32 noundef %990) #4
  br label %1005

991:                                              ; preds = %977, %974, %972
  %992 = load i32, ptr %861, align 4, !tbaa !33
  %993 = load i32, ptr %862, align 1, !tbaa !34
  %994 = mul i32 %993, %.101108.us
  %995 = load i32, ptr %11, align 8, !tbaa !5
  %996 = mul i32 %995, %.121105.us
  %997 = add i32 %996, %994
  %998 = load i32, ptr %863, align 4, !tbaa !35
  %999 = mul i32 %997, %998
  %1000 = icmp eq i32 %.121105.us, %855
  br i1 %1000, label %1001, label %1003

1001:                                             ; preds = %991
  %1002 = load i32, ptr %854, align 4, !tbaa !27
  br label %1003

1003:                                             ; preds = %1001, %991
  %1004 = phi i32 [ %1002, %1001 ], [ 0, %991 ]
  call void @libxsmm_x86_instruction_unified_vec_move(ptr noundef %0, i32 noundef %26, i32 noundef %992, i32 noundef 127, i32 noundef 0, i32 noundef %999, i8 noundef signext %.1975.us, i32 noundef %.0977.us, i32 noundef %1004, i32 noundef %874, i32 noundef 1) #4
  br label %1005

1005:                                             ; preds = %1003, %980
  %1006 = add nuw i32 %.121105.us, 1
  %exitcond.not = icmp eq i32 %1006, %17
  br i1 %exitcond.not, label %._crit_edge.us, label %866, !llvm.loop !60

._crit_edge.us:                                   ; preds = %1005
  %1007 = add nuw i32 %.101108.us, 1
  %exitcond1193.not = icmp eq i32 %1007, %5
  br i1 %exitcond1193.not, label %._crit_edge1109, label %.preheader1104.us, !llvm.loop !61

._crit_edge1109:                                  ; preds = %._crit_edge.us, %.preheader1104.lr.ph, %848
  br i1 %849, label %1008, label %.loopexit1103

1008:                                             ; preds = %._crit_edge1109
  %1009 = load i32, ptr %748, align 4, !tbaa !19
  call void @libxsmm_generator_vcvtneps2bf16_avx512_clean_stack(ptr noundef %0, i32 noundef %1009) #4
  br label %.loopexit1103

.loopexit1103:                                    ; preds = %._crit_edge.us1112, %.preheader1101.lr.ph, %.preheader1102, %._crit_edge1109, %1008
  %1010 = load i32, ptr %764, align 4, !tbaa !23
  %1011 = icmp eq i32 %1010, 1
  %.phi.trans.insert1219 = getelementptr inbounds i8, ptr %2, i64 120
  %.pre1220 = load i32, ptr %.phi.trans.insert1219, align 8, !tbaa !24
  br i1 %1011, label %.loopexit1103._crit_edge, label %1012

1012:                                             ; preds = %.loopexit1103
  %1013 = icmp eq i32 %.pre1220, 1
  br i1 %1013, label %.loopexit1103._crit_edge, label %1015

.loopexit1103._crit_edge:                         ; preds = %.loopexit1103, %1012
  %1014 = phi i32 [ 1, %1012 ], [ %.pre1220, %.loopexit1103 ]
  call void @libxsmm_generator_gemm_cleanup_relu_fusion(ptr noundef %0, i32 noundef %1014, i32 noundef %749, i32 noundef %757, i32 noundef %751)
  br label %.loopexit1098

1015:                                             ; preds = %1012
  %1016 = getelementptr inbounds i8, ptr %2, i64 132
  %1017 = load i32, ptr %1016, align 4, !tbaa !25
  %1018 = icmp eq i32 %1017, 1
  br i1 %1018, label %1019, label %.loopexit1098

1019:                                             ; preds = %1015
  call void @libxsmm_generator_gemm_cleanup_sigmoid_fusion(ptr noundef %0, i32 noundef %749, i32 noundef %751)
  br label %.loopexit1098

.loopexit1098:                                    ; preds = %._crit_edge.us1115, %._crit_edge.us1118, %.preheader1099.lr.ph, %.preheader1097.lr.ph, %691, %628, %.loopexit1103._crit_edge, %1019, %1015, %600, %605, %602, %._crit_edge._crit_edge, %422, %418, %._crit_edge1157, %._crit_edge1152, %200, %._crit_edge1147
  call void @llvm.lifetime.end.p0(i64 688, ptr nonnull %7) #4
  ret void
}

declare void @libxsmm_generator_vcvtneps2bf16_sse_prep_stack(ptr noundef, i32 noundef) local_unnamed_addr #2

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

declare void @libxsmm_generator_maskedstore_16bit_sse(ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #2

declare void @libxsmm_generator_vcvtneps2bf16_sse_clean_stack(ptr noundef) local_unnamed_addr #2

declare void @libxsmm_generator_vcvtneps2bf16_avx2_prep_stack(ptr noundef, i32 noundef) local_unnamed_addr #2

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

declare void @libxsmm_generator_maskedstore_16bit_avx2(ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #2

declare void @libxsmm_generator_vcvtneps2bf16_avx2_clean_stack(ptr noundef) local_unnamed_addr #2

declare void @libxsmm_generator_vcvtneps2bf16_avx512_prep_stack(ptr noundef, i32 noundef) local_unnamed_addr #2

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

declare void @libxsmm_generator_vcvtneps2bf16_avx512_clean_stack(ptr noundef, i32 noundef) local_unnamed_addr #2

declare void @libxsmm_generator_vcvtneps2bf8_avx512_prep_stack(ptr noundef, i32 noundef) local_unnamed_addr #2

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

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

declare void @libxsmm_generator_vcvtneps2bf8_avx512_clean_stack(ptr noundef, i32 noundef) local_unnamed_addr #2

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

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

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


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