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

; 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_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_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_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 }

@.str.2 = external hidden unnamed_addr constant [112 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [22 x i8], align 1
@__PRETTY_FUNCTION__.libxsmm_generator_packed_spgemm_bcsc_bsparse_kloop_bfdot_avx512 = external hidden unnamed_addr constant [417 x i8], align 1

; Function Attrs: nounwind uwtable
declare dso_local i32 @libxsmm_generator_x86_packed_spgemm_bcsc_pf_dist_B() #0

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

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

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

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

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

declare i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef) #3

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

declare void @libxsmm_x86_instruction_jump_to_label(ptr noundef, i32 noundef, i32 noundef, ptr noundef) #3

declare void @libxsmm_x86_instruction_register_jump_label(ptr noundef, i32 noundef, ptr noundef) #3

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

declare void @libxsmm_x86_instruction_alu_mem(ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef) #3

declare i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef) #3

declare void @libxsmm_x86_instruction_register_jump_back_label(ptr noundef, ptr noundef) #3

; Function Attrs: nounwind uwtable
define dso_local void @libxsmm_generator_packed_spgemm_bcsc_bsparse_kloop_bfdot_avx512(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %4, ptr noundef %5, i32 noundef %6, i32 noundef %7, i32 noundef %8, i32 noundef %9, i32 noundef %10, i32 noundef %11, i32 noundef %12, i32 noundef %13) #0 {
  %15 = alloca ptr, align 8
  %16 = alloca ptr, align 8
  %17 = alloca ptr, align 8
  %18 = alloca ptr, align 8
  %19 = alloca ptr, align 8
  %20 = alloca ptr, align 8
  %21 = alloca i32, align 4
  %22 = alloca i32, align 4
  %23 = alloca i32, align 4
  %24 = alloca i32, align 4
  %25 = alloca i32, align 4
  %26 = alloca i32, align 4
  %27 = alloca i32, align 4
  %28 = alloca i32, align 4
  %29 = alloca i32, align 4
  %30 = alloca i32, align 4
  %31 = alloca 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 i8, align 1
  %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
  store ptr %0, ptr %15, align 8, !tbaa !5
  store ptr %1, ptr %16, align 8, !tbaa !5
  store ptr %2, ptr %17, align 8, !tbaa !5
  store ptr %3, ptr %18, align 8, !tbaa !5
  store ptr %4, ptr %19, align 8, !tbaa !5
  store ptr %5, ptr %20, align 8, !tbaa !5
  store i32 %6, ptr %21, align 4, !tbaa !9
  store i32 %7, ptr %22, align 4, !tbaa !9
  store i32 %8, ptr %23, align 4, !tbaa !9
  store i32 %9, ptr %24, align 4, !tbaa !9
  store i32 %10, ptr %25, align 4, !tbaa !9
  store i32 %11, ptr %26, align 4, !tbaa !9
  store i32 %12, ptr %27, align 4, !tbaa !9
  store i32 %13, ptr %28, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #4
  store i32 0, ptr %29, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #4
  store i32 0, ptr %30, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #4
  store i32 0, ptr %31, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #4
  store i32 0, ptr %32, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #4
  store i32 0, ptr %33, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #4
  %70 = load ptr, ptr %20, align 8, !tbaa !5
  %71 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %70, i32 0, i32 6
  %72 = load i32, ptr %71, align 1, !tbaa !11
  %73 = and i32 4, %72
  %74 = icmp ne i32 0, %73
  %75 = zext i1 %74 to i64
  %76 = select i1 %74, i32 1, i32 0
  store i32 %76, ptr %34, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #4
  %77 = load ptr, ptr %20, align 8, !tbaa !5
  %78 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %77, i32 0, i32 8
  %79 = getelementptr inbounds [3 x i8], ptr %78, i64 0, i64 0
  %80 = call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef %79)
  %81 = icmp eq i32 2, %80
  %82 = zext i1 %81 to i64
  %83 = select i1 %81, i32 1, i32 0
  store i32 %83, ptr %35, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 1, ptr %36) #4
  %84 = load ptr, ptr %20, align 8, !tbaa !5
  %85 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %84, i32 0, i32 8
  %86 = getelementptr inbounds [3 x i8], ptr %85, i64 0, i64 0
  %87 = call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef %86)
  %88 = icmp eq i32 2, %87
  br i1 %88, label %89, label %90

89:                                               ; preds = %14
  br label %95

90:                                               ; preds = %14
  %91 = load ptr, ptr %19, align 8, !tbaa !5
  %92 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %91, i32 0, i32 21
  %93 = load i8, ptr %92, align 4, !tbaa !15
  %94 = sext i8 %93 to i32
  br label %95

95:                                               ; preds = %90, %89
  %96 = phi i32 [ 121, %89 ], [ %94, %90 ]
  %97 = trunc i32 %96 to i8
  store i8 %97, ptr %36, align 1, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 4, ptr %37) #4
  %98 = load ptr, ptr %20, align 8, !tbaa !5
  %99 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %98, i32 0, i32 8
  %100 = getelementptr inbounds [3 x i8], ptr %99, i64 0, i64 0
  %101 = call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef %100)
  %102 = icmp eq i32 2, %101
  %103 = zext i1 %102 to i64
  %104 = select i1 %102, i32 -528017809, i32 537138704
  store i32 %104, ptr %37, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %38) #4
  %105 = load ptr, ptr %20, align 8, !tbaa !5
  %106 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %105, i32 0, i32 8
  %107 = getelementptr inbounds [3 x i8], ptr %106, i64 0, i64 0
  %108 = call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef %107)
  %109 = icmp eq i32 12, %108
  br i1 %109, label %110, label %116

110:                                              ; preds = %95
  %111 = load ptr, ptr %20, align 8, !tbaa !5
  %112 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %111, i32 0, i32 8
  %113 = getelementptr inbounds [3 x i8], ptr %112, i64 0, i64 0
  %114 = call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef %113)
  %115 = icmp eq i32 8, %114
  br label %116

116:                                              ; preds = %110, %95
  %117 = phi i1 [ false, %95 ], [ %115, %110 ]
  %118 = zext i1 %117 to i64
  %119 = select i1 %117, i32 1, i32 0
  store i32 %119, ptr %38, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %39) #4
  %120 = load i32, ptr %38, align 4, !tbaa !9
  %121 = icmp ugt i32 %120, 0
  br i1 %121, label %122, label %134

122:                                              ; preds = %116
  %123 = load ptr, ptr %20, align 8, !tbaa !5
  %124 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %123, i32 0, i32 6
  %125 = load i32, ptr %124, align 1, !tbaa !11
  %126 = and i32 256, %125
  %127 = icmp eq i32 %126, 0
  br i1 %127, label %128, label %134

128:                                              ; preds = %122
  %129 = load ptr, ptr %20, align 8, !tbaa !5
  %130 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %129, i32 0, i32 6
  %131 = load i32, ptr %130, align 1, !tbaa !11
  %132 = and i32 512, %131
  %133 = icmp ugt i32 %132, 0
  br label %134

134:                                              ; preds = %128, %122, %116
  %135 = phi i1 [ false, %122 ], [ false, %116 ], [ %133, %128 ]
  %136 = zext i1 %135 to i64
  %137 = select i1 %135, i32 1, i32 0
  store i32 %137, ptr %39, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %40) #4
  store i32 0, ptr %40, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %41) #4
  store i32 1, ptr %41, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %42) #4
  store i32 2, ptr %42, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %43) #4
  store i32 3, ptr %43, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %44) #4
  %138 = load ptr, ptr %18, align 8, !tbaa !5
  %139 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %138, i32 0, i32 25
  %140 = load i32, ptr %139, align 4, !tbaa !19
  store i32 %140, ptr %44, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %45) #4
  %141 = load ptr, ptr %18, align 8, !tbaa !5
  %142 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %141, i32 0, i32 26
  %143 = load i32, ptr %142, align 4, !tbaa !21
  store i32 %143, ptr %45, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %46) #4
  %144 = load ptr, ptr %18, align 8, !tbaa !5
  %145 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %144, i32 0, i32 27
  %146 = load i32, ptr %145, align 4, !tbaa !22
  store i32 %146, ptr %46, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %47) #4
  %147 = load i32, ptr %27, align 4, !tbaa !9
  %148 = add i32 %147, 1
  %149 = udiv i32 %148, 2
  store i32 %149, ptr %47, align 4, !tbaa !9
  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 -268032430, ptr %49, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %50) #4
  %150 = load i32, ptr %21, align 4, !tbaa !9
  %151 = icmp eq i32 %150, 0
  %152 = zext i1 %151 to i64
  %153 = select i1 %151, i32 0, i32 1
  store i32 %153, ptr %50, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %51) #4
  store i32 0, ptr %51, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %52) #4
  store i32 2, ptr %52, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %53) #4
  store i32 0, ptr %53, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %54) #4
  store i32 0, ptr %54, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %55) #4
  %154 = load ptr, ptr %18, align 8, !tbaa !5
  %155 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %154, i32 0, i32 10
  %156 = load i32, ptr %155, align 4, !tbaa !23
  store i32 %156, ptr %55, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %56) #4
  store i32 1, ptr %56, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %57) #4
  store i32 0, ptr %57, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %58) #4
  store i32 0, ptr %58, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %59) #4
  store i32 0, ptr %59, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %60) #4
  %157 = load ptr, ptr %19, align 8, !tbaa !5
  %158 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %157, i32 0, i32 21
  %159 = load i8, ptr %158, align 4, !tbaa !15
  %160 = sext i8 %159 to i32
  store i32 %160, ptr %60, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %61) #4
  store i32 537138704, ptr %61, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %62) #4
  %161 = call i32 @libxsmm_generator_x86_packed_spgemm_bcsc_pf_dist_B()
  store i32 %161, ptr %62, align 4, !tbaa !9
  %162 = load ptr, ptr %15, align 8, !tbaa !5
  %163 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %162, i32 0, i32 6
  %164 = load i32, ptr %163, align 4, !tbaa !24
  %165 = icmp ult i32 %164, 1101
  br i1 %165, label %166, label %167

166:                                              ; preds = %134
  store i32 14, ptr %43, align 4, !tbaa !9
  br label %167

167:                                              ; preds = %166, %134
  %168 = load ptr, ptr %20, align 8, !tbaa !5
  %169 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %168, i32 0, i32 8
  %170 = getelementptr inbounds [3 x i8], ptr %169, i64 0, i64 0
  %171 = call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef %170)
  %172 = icmp eq i32 1, %171
  br i1 %172, label %173, label %174

173:                                              ; preds = %167
  store i32 1, ptr %52, align 4, !tbaa !9
  br label %182

174:                                              ; preds = %167
  %175 = load ptr, ptr %20, align 8, !tbaa !5
  %176 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %175, i32 0, i32 8
  %177 = getelementptr inbounds [3 x i8], ptr %176, i64 0, i64 0
  %178 = call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef %177)
  %179 = icmp eq i32 12, %178
  br i1 %179, label %180, label %181

180:                                              ; preds = %174
  store i32 4, ptr %52, align 4, !tbaa !9
  br label %181

181:                                              ; preds = %180, %174
  br label %182

182:                                              ; preds = %181, %173
  %183 = load ptr, ptr %20, align 8, !tbaa !5
  %184 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %183, i32 0, i32 6
  %185 = load i32, ptr %184, align 1, !tbaa !11
  %186 = and i32 %185, 1
  %187 = icmp ugt i32 %186, 0
  br i1 %187, label %188, label %194

188:                                              ; preds = %182
  store i32 1, ptr %57, align 4, !tbaa !9
  %189 = load i32, ptr %27, align 4, !tbaa !9
  %190 = load i32, ptr %52, align 4, !tbaa !9
  %191 = udiv i32 %189, %190
  %192 = load i32, ptr %26, align 4, !tbaa !9
  %193 = urem i32 %191, %192
  store i32 %193, ptr %58, align 4, !tbaa !9
  br label %194

194:                                              ; preds = %188, %182
  %195 = load ptr, ptr %20, align 8, !tbaa !5
  %196 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %195, i32 0, i32 8
  %197 = getelementptr inbounds [3 x i8], ptr %196, i64 0, i64 0
  %198 = call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef %197)
  %199 = icmp eq i32 1, %198
  br i1 %199, label %200, label %213

200:                                              ; preds = %194
  %201 = load i32, ptr %57, align 4, !tbaa !9
  %202 = icmp ugt i32 %201, 0
  br i1 %202, label %203, label %210

203:                                              ; preds = %200
  store i32 537209368, ptr %40, align 4, !tbaa !9
  %204 = load i32, ptr %27, align 4, !tbaa !9
  %205 = load i32, ptr %26, align 4, !tbaa !9
  %206 = add i32 %204, %205
  %207 = sub i32 %206, 1
  %208 = load i32, ptr %26, align 4, !tbaa !9
  %209 = udiv i32 %207, %208
  store i32 %209, ptr %47, align 4, !tbaa !9
  br label %212

210:                                              ; preds = %200
  %211 = load i32, ptr %27, align 4, !tbaa !9
  store i32 %211, ptr %47, align 4, !tbaa !9
  br label %212

212:                                              ; preds = %210, %203
  store i32 805643960, ptr %49, align 4, !tbaa !9
  br label %261

213:                                              ; preds = %194
  %214 = load ptr, ptr %20, align 8, !tbaa !5
  %215 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %214, i32 0, i32 8
  %216 = getelementptr inbounds [3 x i8], ptr %215, i64 0, i64 0
  %217 = call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef %216)
  %218 = icmp eq i32 12, %217
  br i1 %218, label %219, label %236

219:                                              ; preds = %213
  %220 = load i32, ptr %57, align 4, !tbaa !9
  %221 = icmp ugt i32 %220, 0
  br i1 %221, label %222, label %231

222:                                              ; preds = %219
  store i32 537209368, ptr %40, align 4, !tbaa !9
  %223 = load i32, ptr %27, align 4, !tbaa !9
  %224 = add i32 %223, 3
  %225 = udiv i32 %224, 4
  %226 = load i32, ptr %26, align 4, !tbaa !9
  %227 = add i32 %225, %226
  %228 = sub i32 %227, 1
  %229 = load i32, ptr %26, align 4, !tbaa !9
  %230 = udiv i32 %228, %229
  store i32 %230, ptr %47, align 4, !tbaa !9
  br label %235

231:                                              ; preds = %219
  %232 = load i32, ptr %27, align 4, !tbaa !9
  %233 = add i32 %232, 3
  %234 = udiv i32 %233, 4
  store i32 %234, ptr %47, align 4, !tbaa !9
  br label %235

235:                                              ; preds = %231, %222
  store i32 805643856, ptr %49, align 4, !tbaa !9
  br label %260

236:                                              ; preds = %213
  %237 = load ptr, ptr %20, align 8, !tbaa !5
  %238 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %237, i32 0, i32 8
  %239 = getelementptr inbounds [3 x i8], ptr %238, i64 0, i64 0
  %240 = call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef %239)
  %241 = icmp eq i32 2, %240
  br i1 %241, label %242, label %259

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

245:                                              ; preds = %242
  store i32 537209209, ptr %40, align 4, !tbaa !9
  %246 = load i32, ptr %27, align 4, !tbaa !9
  %247 = add i32 %246, 1
  %248 = udiv i32 %247, 2
  %249 = load i32, ptr %26, align 4, !tbaa !9
  %250 = add i32 %248, %249
  %251 = sub i32 %250, 1
  %252 = load i32, ptr %26, align 4, !tbaa !9
  %253 = udiv i32 %251, %252
  store i32 %253, ptr %47, align 4, !tbaa !9
  br label %258

254:                                              ; preds = %242
  %255 = load i32, ptr %27, align 4, !tbaa !9
  %256 = add i32 %255, 1
  %257 = udiv i32 %256, 2
  store i32 %257, ptr %47, align 4, !tbaa !9
  br label %258

258:                                              ; preds = %254, %245
  store i32 -268032430, ptr %49, align 4, !tbaa !9
  br label %259

259:                                              ; preds = %258, %236
  br label %260

260:                                              ; preds = %259, %235
  br label %261

261:                                              ; preds = %260, %212
  %262 = load i32, ptr %57, align 4, !tbaa !9
  %263 = icmp ugt i32 %262, 0
  br i1 %263, label %264, label %340

264:                                              ; preds = %261
  %265 = load i32, ptr %58, align 4, !tbaa !9
  %266 = load i32, ptr %26, align 4, !tbaa !9
  %267 = udiv i32 %266, 2
  %268 = icmp eq i32 %265, %267
  br i1 %268, label %269, label %280

269:                                              ; preds = %264
  store i32 1, ptr %59, align 4, !tbaa !9
  %270 = load i32, ptr %60, align 4, !tbaa !9
  %271 = icmp eq i32 %270, 122
  br i1 %271, label %272, label %273

272:                                              ; preds = %269
  br label %278

273:                                              ; preds = %269
  %274 = load i32, ptr %60, align 4, !tbaa !9
  %275 = icmp eq i32 %274, 121
  %276 = zext i1 %275 to i64
  %277 = select i1 %275, i32 120, i32 120
  br label %278

278:                                              ; preds = %273, %272
  %279 = phi i32 [ 121, %272 ], [ %277, %273 ]
  store i32 %279, ptr %60, align 4, !tbaa !9
  br label %339

280:                                              ; preds = %264
  %281 = load i32, ptr %58, align 4, !tbaa !9
  %282 = load i32, ptr %26, align 4, !tbaa !9
  %283 = udiv i32 %282, 4
  %284 = icmp eq i32 %281, %283
  br i1 %284, label %285, label %296

285:                                              ; preds = %280
  store i32 1, ptr %59, align 4, !tbaa !9
  %286 = load i32, ptr %60, align 4, !tbaa !9
  %287 = icmp eq i32 %286, 122
  br i1 %287, label %288, label %289

288:                                              ; preds = %285
  br label %294

289:                                              ; preds = %285
  %290 = load i32, ptr %60, align 4, !tbaa !9
  %291 = icmp eq i32 %290, 121
  %292 = zext i1 %291 to i64
  %293 = select i1 %291, i32 120, i32 120
  br label %294

294:                                              ; preds = %289, %288
  %295 = phi i32 [ 120, %288 ], [ %293, %289 ]
  store i32 %295, ptr %60, align 4, !tbaa !9
  br label %338

296:                                              ; preds = %280
  %297 = load i32, ptr %58, align 4, !tbaa !9
  %298 = load i32, ptr %26, align 4, !tbaa !9
  %299 = udiv i32 %298, 8
  %300 = icmp eq i32 %297, %299
  br i1 %300, label %301, label %316

301:                                              ; preds = %296
  store i32 1, ptr %59, align 4, !tbaa !9
  %302 = load i32, ptr %60, align 4, !tbaa !9
  %303 = icmp eq i32 %302, 122
  br i1 %303, label %304, label %305

304:                                              ; preds = %301
  br label %310

305:                                              ; preds = %301
  %306 = load i32, ptr %60, align 4, !tbaa !9
  %307 = icmp eq i32 %306, 121
  %308 = zext i1 %307 to i64
  %309 = select i1 %307, i32 120, i32 120
  br label %310

310:                                              ; preds = %305, %304
  %311 = phi i32 [ 120, %304 ], [ %309, %305 ]
  store i32 %311, ptr %60, align 4, !tbaa !9
  %312 = load i32, ptr %58, align 4, !tbaa !9
  %313 = icmp eq i32 %312, 2
  %314 = zext i1 %313 to i64
  %315 = select i1 %313, i32 545725200, i32 537270800
  store i32 %315, ptr %61, align 4, !tbaa !9
  br label %337

316:                                              ; preds = %296
  %317 = load i32, ptr %58, align 4, !tbaa !9
  %318 = load i32, ptr %26, align 4, !tbaa !9
  %319 = udiv i32 %318, 16
  %320 = icmp eq i32 %317, %319
  br i1 %320, label %321, label %335

321:                                              ; preds = %316
  %322 = load i32, ptr %58, align 4, !tbaa !9
  %323 = icmp ugt i32 %322, 0
  br i1 %323, label %324, label %335

324:                                              ; preds = %321
  store i32 1, ptr %59, align 4, !tbaa !9
  %325 = load i32, ptr %60, align 4, !tbaa !9
  %326 = icmp eq i32 %325, 122
  br i1 %326, label %327, label %328

327:                                              ; preds = %324
  br label %333

328:                                              ; preds = %324
  %329 = load i32, ptr %60, align 4, !tbaa !9
  %330 = icmp eq i32 %329, 121
  %331 = zext i1 %330 to i64
  %332 = select i1 %330, i32 120, i32 120
  br label %333

333:                                              ; preds = %328, %327
  %334 = phi i32 [ 120, %327 ], [ %332, %328 ]
  store i32 %334, ptr %60, align 4, !tbaa !9
  store i32 537270800, ptr %61, align 4, !tbaa !9
  br label %336

335:                                              ; preds = %321, %316
  br label %336

336:                                              ; preds = %335, %333
  br label %337

337:                                              ; preds = %336, %310
  br label %338

338:                                              ; preds = %337, %294
  br label %339

339:                                              ; preds = %338, %278
  br label %340

340:                                              ; preds = %339, %261
  %341 = load i32, ptr %57, align 4, !tbaa !9
  %342 = icmp eq i32 %341, 0
  br i1 %342, label %343, label %361

343:                                              ; preds = %340
  %344 = load i32, ptr %47, align 4, !tbaa !9
  %345 = icmp ugt i32 %344, 4
  br i1 %345, label %346, label %360

346:                                              ; preds = %343
  %347 = load i32, ptr %47, align 4, !tbaa !9
  store i32 %347, ptr %56, align 4, !tbaa !9
  store i32 4, ptr %47, align 4, !tbaa !9
  br label %348

348:                                              ; preds = %353, %346
  %349 = load i32, ptr %56, align 4, !tbaa !9
  %350 = load i32, ptr %47, align 4, !tbaa !9
  %351 = urem i32 %349, %350
  %352 = icmp ne i32 %351, 0
  br i1 %352, label %353, label %356

353:                                              ; preds = %348
  %354 = load i32, ptr %47, align 4, !tbaa !9
  %355 = add i32 %354, -1
  store i32 %355, ptr %47, align 4, !tbaa !9
  br label %348, !llvm.loop !26

356:                                              ; preds = %348
  %357 = load i32, ptr %56, align 4, !tbaa !9
  %358 = load i32, ptr %47, align 4, !tbaa !9
  %359 = udiv i32 %357, %358
  store i32 %359, ptr %56, align 4, !tbaa !9
  br label %360

360:                                              ; preds = %356, %343
  br label %361

361:                                              ; preds = %360, %340
  %362 = load ptr, ptr %15, align 8, !tbaa !5
  %363 = load i32, ptr %28, align 4, !tbaa !9
  call void @libxsmm_spgemm_max_mn_blocking_factors_x86(ptr noundef %362, i32 noundef %363, ptr noundef %30, ptr noundef %33)
  %364 = load i32, ptr %23, align 4, !tbaa !9
  %365 = load i32, ptr %33, align 4, !tbaa !9
  %366 = mul i32 %364, %365
  store i32 %366, ptr %32, align 4, !tbaa !9
  %367 = load i32, ptr %28, align 4, !tbaa !9
  %368 = load i32, ptr %33, align 4, !tbaa !9
  %369 = udiv i32 %367, %368
  store i32 %369, ptr %53, align 4, !tbaa !9
  %370 = load i32, ptr %21, align 4, !tbaa !9
  %371 = icmp eq i32 %370, 0
  br i1 %371, label %372, label %373

372:                                              ; preds = %361
  br label %376

373:                                              ; preds = %361
  %374 = load i32, ptr %53, align 4, !tbaa !9
  %375 = add i32 2, %374
  br label %376

376:                                              ; preds = %373, %372
  %377 = phi i32 [ 2, %372 ], [ %375, %373 ]
  store i32 %377, ptr %51, align 4, !tbaa !9
  %378 = load ptr, ptr %15, align 8, !tbaa !5
  %379 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %378, i32 0, i32 6
  %380 = load i32, ptr %379, align 4, !tbaa !24
  %381 = icmp ult i32 %380, 1101
  br i1 %381, label %382, label %383

382:                                              ; preds = %376
  store i32 15, ptr %42, align 4, !tbaa !9
  store i32 15, ptr %41, align 4, !tbaa !9
  br label %383

383:                                              ; preds = %382, %376
  %384 = load i32, ptr %23, align 4, !tbaa !9
  %385 = icmp ugt i32 %384, 0
  br i1 %385, label %386, label %387

386:                                              ; preds = %383
  br label %388

387:                                              ; preds = %383
  call void @__assert_fail(ptr noundef @.str.3, ptr noundef @.str.2, i32 noundef 927, ptr noundef @__PRETTY_FUNCTION__.libxsmm_generator_packed_spgemm_bcsc_bsparse_kloop_bfdot_avx512) #5
  unreachable

388:                                              ; preds = %386
  %389 = load ptr, ptr %15, align 8, !tbaa !5
  %390 = load ptr, ptr %18, align 8, !tbaa !5
  %391 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %390, i32 0, i32 12
  %392 = load i32, ptr %391, align 4, !tbaa !28
  call void @libxsmm_x86_instruction_push_reg(ptr noundef %389, i32 noundef %392)
  %393 = load i32, ptr %34, align 4, !tbaa !9
  %394 = icmp eq i32 %393, 0
  br i1 %394, label %395, label %405

395:                                              ; preds = %388
  %396 = load ptr, ptr %15, align 8, !tbaa !5
  %397 = load ptr, ptr %19, align 8, !tbaa !5
  %398 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %397, i32 0, i32 18
  %399 = load i32, ptr %398, align 8, !tbaa !29
  %400 = load i32, ptr %45, align 4, !tbaa !9
  %401 = load i32, ptr %46, align 4, !tbaa !9
  call void @libxsmm_x86_instruction_alu_reg(ptr noundef %396, i32 noundef %399, i32 noundef %400, i32 noundef %401)
  %402 = load ptr, ptr %15, align 8, !tbaa !5
  %403 = load i32, ptr %50, align 4, !tbaa !9
  %404 = load ptr, ptr %17, align 8, !tbaa !5
  call void @libxsmm_x86_instruction_jump_to_label(ptr noundef %402, i32 noundef 30101, i32 noundef %403, ptr noundef %404)
  br label %405

405:                                              ; preds = %395, %388
  %406 = load i32, ptr %22, align 4, !tbaa !9
  %407 = load i32, ptr %23, align 4, !tbaa !9
  %408 = udiv i32 %406, %407
  %409 = icmp ugt i32 %408, 1
  br i1 %409, label %410, label %429

410:                                              ; preds = %405
  %411 = load ptr, ptr %15, align 8, !tbaa !5
  %412 = load ptr, ptr %19, align 8, !tbaa !5
  %413 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %412, i32 0, i32 20
  %414 = load i32, ptr %413, align 8, !tbaa !30
  %415 = load ptr, ptr %18, align 8, !tbaa !5
  %416 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %415, i32 0, i32 22
  %417 = load i32, ptr %416, align 4, !tbaa !31
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef %411, i32 noundef %414, i32 noundef %417, i64 noundef 0)
  %418 = load ptr, ptr %15, align 8, !tbaa !5
  %419 = load ptr, ptr %16, align 8, !tbaa !5
  call void @libxsmm_x86_instruction_register_jump_back_label(ptr noundef %418, ptr noundef %419)
  %420 = load ptr, ptr %15, align 8, !tbaa !5
  %421 = load ptr, ptr %19, align 8, !tbaa !5
  %422 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %421, i32 0, i32 16
  %423 = load i32, ptr %422, align 8, !tbaa !32
  %424 = load ptr, ptr %18, align 8, !tbaa !5
  %425 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %424, i32 0, i32 22
  %426 = load i32, ptr %425, align 4, !tbaa !31
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef %420, i32 noundef %423, i32 noundef %426, i64 noundef 1)
  %427 = load ptr, ptr %15, align 8, !tbaa !5
  %428 = load i32, ptr %45, align 4, !tbaa !9
  call void @libxsmm_x86_instruction_push_reg(ptr noundef %427, i32 noundef %428)
  br label %429

429:                                              ; preds = %410, %405
  store i32 0, ptr %54, align 4, !tbaa !9
  br label %430

430:                                              ; preds = %1560, %429
  %431 = load i32, ptr %54, align 4, !tbaa !9
  %432 = load i32, ptr %53, align 4, !tbaa !9
  %433 = icmp ult i32 %431, %432
  br i1 %433, label %434, label %1563

434:                                              ; preds = %430
  %435 = load i32, ptr %53, align 4, !tbaa !9
  %436 = icmp ugt i32 %435, 1
  br i1 %436, label %437, label %440

437:                                              ; preds = %434
  %438 = load ptr, ptr %15, align 8, !tbaa !5
  %439 = load i32, ptr %45, align 4, !tbaa !9
  call void @libxsmm_x86_instruction_push_reg(ptr noundef %438, i32 noundef %439)
  br label %440

440:                                              ; preds = %437, %434
  %441 = load i32, ptr %34, align 4, !tbaa !9
  %442 = icmp ugt i32 %441, 0
  br i1 %442, label %443, label %477

443:                                              ; preds = %440
  store i32 0, ptr %30, align 4, !tbaa !9
  br label %444

444:                                              ; preds = %473, %443
  %445 = load i32, ptr %30, align 4, !tbaa !9
  %446 = load i32, ptr %33, align 4, !tbaa !9
  %447 = icmp ult i32 %445, %446
  br i1 %447, label %448, label %476

448:                                              ; preds = %444
  store i32 0, ptr %31, align 4, !tbaa !9
  br label %449

449:                                              ; preds = %469, %448
  %450 = load i32, ptr %31, align 4, !tbaa !9
  %451 = load i32, ptr %23, align 4, !tbaa !9
  %452 = icmp ult i32 %450, %451
  br i1 %452, label %453, label %472

453:                                              ; preds = %449
  call void @llvm.lifetime.start.p0(i64 4, ptr %63) #4
  %454 = load i32, ptr %30, align 4, !tbaa !9
  %455 = load i32, ptr %23, align 4, !tbaa !9
  %456 = mul i32 %454, %455
  %457 = load i32, ptr %31, align 4, !tbaa !9
  %458 = add i32 %456, %457
  store i32 %458, ptr %63, align 4, !tbaa !9
  %459 = load ptr, ptr %15, align 8, !tbaa !5
  %460 = load ptr, ptr %19, align 8, !tbaa !5
  %461 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %460, i32 0, i32 13
  %462 = load i32, ptr %461, align 4, !tbaa !33
  %463 = load ptr, ptr %19, align 8, !tbaa !5
  %464 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %463, i32 0, i32 21
  %465 = load i8, ptr %464, align 4, !tbaa !15
  %466 = load i32, ptr %63, align 4, !tbaa !9
  %467 = load i32, ptr %63, align 4, !tbaa !9
  %468 = load i32, ptr %63, align 4, !tbaa !9
  call void @libxsmm_x86_instruction_vec_compute_3reg(ptr noundef %459, i32 noundef %462, i8 noundef signext %465, i32 noundef %466, i32 noundef %467, i32 noundef %468)
  call void @llvm.lifetime.end.p0(i64 4, ptr %63) #4
  br label %469

469:                                              ; preds = %453
  %470 = load i32, ptr %31, align 4, !tbaa !9
  %471 = add i32 %470, 1
  store i32 %471, ptr %31, align 4, !tbaa !9
  br label %449, !llvm.loop !34

472:                                              ; preds = %449
  br label %473

473:                                              ; preds = %472
  %474 = load i32, ptr %30, align 4, !tbaa !9
  %475 = add i32 %474, 1
  store i32 %475, ptr %30, align 4, !tbaa !9
  br label %444, !llvm.loop !35

476:                                              ; preds = %444
  br label %607

477:                                              ; preds = %440
  %478 = load i32, ptr %57, align 4, !tbaa !9
  %479 = icmp ugt i32 %478, 0
  br i1 %479, label %480, label %514

480:                                              ; preds = %477
  store i32 0, ptr %30, align 4, !tbaa !9
  br label %481

481:                                              ; preds = %510, %480
  %482 = load i32, ptr %30, align 4, !tbaa !9
  %483 = load i32, ptr %33, align 4, !tbaa !9
  %484 = icmp ult i32 %482, %483
  br i1 %484, label %485, label %513

485:                                              ; preds = %481
  store i32 0, ptr %31, align 4, !tbaa !9
  br label %486

486:                                              ; preds = %506, %485
  %487 = load i32, ptr %31, align 4, !tbaa !9
  %488 = load i32, ptr %23, align 4, !tbaa !9
  %489 = icmp ult i32 %487, %488
  br i1 %489, label %490, label %509

490:                                              ; preds = %486
  call void @llvm.lifetime.start.p0(i64 4, ptr %64) #4
  %491 = load i32, ptr %30, align 4, !tbaa !9
  %492 = load i32, ptr %23, align 4, !tbaa !9
  %493 = mul i32 %491, %492
  %494 = load i32, ptr %31, align 4, !tbaa !9
  %495 = add i32 %493, %494
  store i32 %495, ptr %64, align 4, !tbaa !9
  %496 = load ptr, ptr %15, align 8, !tbaa !5
  %497 = load ptr, ptr %19, align 8, !tbaa !5
  %498 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %497, i32 0, i32 13
  %499 = load i32, ptr %498, align 4, !tbaa !33
  %500 = load ptr, ptr %19, align 8, !tbaa !5
  %501 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %500, i32 0, i32 21
  %502 = load i8, ptr %501, align 4, !tbaa !15
  %503 = load i32, ptr %64, align 4, !tbaa !9
  %504 = load i32, ptr %64, align 4, !tbaa !9
  %505 = load i32, ptr %64, align 4, !tbaa !9
  call void @libxsmm_x86_instruction_vec_compute_3reg(ptr noundef %496, i32 noundef %499, i8 noundef signext %502, i32 noundef %503, i32 noundef %504, i32 noundef %505)
  call void @llvm.lifetime.end.p0(i64 4, ptr %64) #4
  br label %506

506:                                              ; preds = %490
  %507 = load i32, ptr %31, align 4, !tbaa !9
  %508 = add i32 %507, 1
  store i32 %508, ptr %31, align 4, !tbaa !9
  br label %486, !llvm.loop !36

509:                                              ; preds = %486
  br label %510

510:                                              ; preds = %509
  %511 = load i32, ptr %30, align 4, !tbaa !9
  %512 = add i32 %511, 1
  store i32 %512, ptr %30, align 4, !tbaa !9
  br label %481, !llvm.loop !37

513:                                              ; preds = %481
  br label %606

514:                                              ; preds = %477
  store i32 0, ptr %30, align 4, !tbaa !9
  br label %515

515:                                              ; preds = %602, %514
  %516 = load i32, ptr %30, align 4, !tbaa !9
  %517 = load i32, ptr %33, align 4, !tbaa !9
  %518 = icmp ult i32 %516, %517
  br i1 %518, label %519, label %605

519:                                              ; preds = %515
  store i32 0, ptr %31, align 4, !tbaa !9
  br label %520

520:                                              ; preds = %598, %519
  %521 = load i32, ptr %31, align 4, !tbaa !9
  %522 = load i32, ptr %23, align 4, !tbaa !9
  %523 = icmp ult i32 %521, %522
  br i1 %523, label %524, label %601

524:                                              ; preds = %520
  call void @llvm.lifetime.start.p0(i64 4, ptr %65) #4
  %525 = load i32, ptr %30, align 4, !tbaa !9
  %526 = load i32, ptr %23, align 4, !tbaa !9
  %527 = mul i32 %525, %526
  %528 = load i32, ptr %31, align 4, !tbaa !9
  %529 = add i32 %527, %528
  store i32 %529, ptr %65, align 4, !tbaa !9
  %530 = load ptr, ptr %15, align 8, !tbaa !5
  %531 = load i32, ptr %37, align 4, !tbaa !9
  %532 = load ptr, ptr %18, align 8, !tbaa !5
  %533 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %532, i32 0, i32 5
  %534 = load i32, ptr %533, align 4, !tbaa !38
  %535 = load i32, ptr %21, align 4, !tbaa !9
  %536 = zext i32 %535 to i64
  %537 = mul i64 1, %536
  %538 = load i32, ptr %26, align 4, !tbaa !9
  %539 = zext i32 %538 to i64
  %540 = mul i64 %537, %539
  %541 = load i32, ptr %25, align 4, !tbaa !9
  %542 = zext i32 %541 to i64
  %543 = mul i64 1, %542
  %544 = load i32, ptr %30, align 4, !tbaa !9
  %545 = zext i32 %544 to i64
  %546 = mul i64 %543, %545
  %547 = add i64 %540, %546
  %548 = load i32, ptr %31, align 4, !tbaa !9
  %549 = load i32, ptr %26, align 4, !tbaa !9
  %550 = mul i32 %548, %549
  %551 = zext i32 %550 to i64
  %552 = add i64 %547, %551
  %553 = load i32, ptr %54, align 4, !tbaa !9
  %554 = load i32, ptr %33, align 4, !tbaa !9
  %555 = mul i32 %553, %554
  %556 = load i32, ptr %25, align 4, !tbaa !9
  %557 = mul i32 %555, %556
  %558 = zext i32 %557 to i64
  %559 = add i64 %552, %558
  %560 = load ptr, ptr %19, align 8, !tbaa !5
  %561 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %560, i32 0, i32 5
  %562 = load i32, ptr %561, align 4, !tbaa !39
  %563 = zext i32 %562 to i64
  %564 = mul i64 %559, %563
  %565 = trunc i64 %564 to i32
  %566 = load i8, ptr %36, align 1, !tbaa !18
  %567 = load i32, ptr %65, align 4, !tbaa !9
  %568 = load i32, ptr %24, align 4, !tbaa !9
  %569 = icmp ugt i32 %568, 0
  br i1 %569, label %570, label %575

570:                                              ; preds = %524
  %571 = load i32, ptr %31, align 4, !tbaa !9
  %572 = load i32, ptr %23, align 4, !tbaa !9
  %573 = sub i32 %572, 1
  %574 = icmp eq i32 %571, %573
  br label %575

575:                                              ; preds = %570, %524
  %576 = phi i1 [ false, %524 ], [ %574, %570 ]
  %577 = zext i1 %576 to i64
  %578 = select i1 %576, i32 1, i32 0
  %579 = load i32, ptr %24, align 4, !tbaa !9
  %580 = icmp ugt i32 %579, 0
  br i1 %580, label %581, label %588

581:                                              ; preds = %575
  %582 = load i32, ptr %31, align 4, !tbaa !9
  %583 = load i32, ptr %23, align 4, !tbaa !9
  %584 = sub i32 %583, 1
  %585 = icmp eq i32 %582, %584
  br i1 %585, label %586, label %588

586:                                              ; preds = %581
  %587 = load i32, ptr %41, align 4, !tbaa !9
  br label %589

588:                                              ; preds = %581, %575
  br label %589

589:                                              ; preds = %588, %586
  %590 = phi i32 [ %587, %586 ], [ 0, %588 ]
  call void @libxsmm_x86_instruction_unified_vec_move(ptr noundef %530, i32 noundef %531, i32 noundef %534, i32 noundef 127, i32 noundef 0, i32 noundef %565, i8 noundef signext %566, i32 noundef %567, i32 noundef %578, i32 noundef %590, i32 noundef 0)
  %591 = load i32, ptr %35, align 4, !tbaa !9
  %592 = icmp ugt i32 %591, 0
  br i1 %592, label %593, label %597

593:                                              ; preds = %589
  %594 = load ptr, ptr %15, align 8, !tbaa !5
  %595 = load i32, ptr %65, align 4, !tbaa !9
  %596 = load i32, ptr %65, align 4, !tbaa !9
  call void @libxsmm_generator_cvtbf16ps_sse_avx2_avx512(ptr noundef %594, i8 noundef signext 122, i32 noundef %595, i32 noundef %596)
  br label %597

597:                                              ; preds = %593, %589
  call void @llvm.lifetime.end.p0(i64 4, ptr %65) #4
  br label %598

598:                                              ; preds = %597
  %599 = load i32, ptr %31, align 4, !tbaa !9
  %600 = add i32 %599, 1
  store i32 %600, ptr %31, align 4, !tbaa !9
  br label %520, !llvm.loop !40

601:                                              ; preds = %520
  br label %602

602:                                              ; preds = %601
  %603 = load i32, ptr %30, align 4, !tbaa !9
  %604 = add i32 %603, 1
  store i32 %604, ptr %30, align 4, !tbaa !9
  br label %515, !llvm.loop !41

605:                                              ; preds = %515
  br label %606

606:                                              ; preds = %605, %513
  br label %607

607:                                              ; preds = %606, %476
  %608 = load i32, ptr %34, align 4, !tbaa !9
  %609 = icmp ugt i32 %608, 0
  br i1 %609, label %610, label %620

610:                                              ; preds = %607
  %611 = load ptr, ptr %15, align 8, !tbaa !5
  %612 = load ptr, ptr %19, align 8, !tbaa !5
  %613 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %612, i32 0, i32 18
  %614 = load i32, ptr %613, align 8, !tbaa !29
  %615 = load i32, ptr %45, align 4, !tbaa !9
  %616 = load i32, ptr %46, align 4, !tbaa !9
  call void @libxsmm_x86_instruction_alu_reg(ptr noundef %611, i32 noundef %614, i32 noundef %615, i32 noundef %616)
  %617 = load ptr, ptr %15, align 8, !tbaa !5
  %618 = load i32, ptr %51, align 4, !tbaa !9
  %619 = load ptr, ptr %17, align 8, !tbaa !5
  call void @libxsmm_x86_instruction_jump_to_label(ptr noundef %617, i32 noundef 30101, i32 noundef %618, ptr noundef %619)
  br label %620

620:                                              ; preds = %610, %607
  %621 = load ptr, ptr %15, align 8, !tbaa !5
  %622 = load ptr, ptr %16, align 8, !tbaa !5
  call void @libxsmm_x86_instruction_register_jump_back_label(ptr noundef %621, ptr noundef %622)
  %623 = load ptr, ptr %15, align 8, !tbaa !5
  %624 = load i32, ptr %44, align 4, !tbaa !9
  %625 = load i32, ptr %45, align 4, !tbaa !9
  %626 = load ptr, ptr %18, align 8, !tbaa !5
  %627 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %626, i32 0, i32 12
  %628 = load i32, ptr %627, align 4, !tbaa !28
  call void @libxsmm_x86_instruction_alu_mem(ptr noundef %623, i32 noundef -1610350453, i32 noundef %624, i32 noundef %625, i32 noundef 4, i32 noundef 0, i32 noundef %628, i32 noundef 0)
  %629 = load i32, ptr %57, align 4, !tbaa !9
  %630 = icmp ugt i32 %629, 0
  br i1 %630, label %631, label %653

631:                                              ; preds = %620
  %632 = load ptr, ptr %15, align 8, !tbaa !5
  %633 = load ptr, ptr %18, align 8, !tbaa !5
  %634 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %633, i32 0, i32 12
  %635 = load i32, ptr %634, align 4, !tbaa !28
  %636 = load i32, ptr %27, align 4, !tbaa !9
  %637 = zext i32 %636 to i64
  %638 = load ptr, ptr %19, align 8, !tbaa !5
  %639 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %638, i32 0, i32 3
  %640 = load i32, ptr %639, align 4, !tbaa !42
  %641 = zext i32 %640 to i64
  %642 = mul nsw i64 %637, %641
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef %632, i32 noundef 30003, i32 noundef %635, i64 noundef %642)
  %643 = load ptr, ptr %15, align 8, !tbaa !5
  %644 = load ptr, ptr %19, align 8, !tbaa !5
  %645 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %644, i32 0, i32 16
  %646 = load i32, ptr %645, align 8, !tbaa !32
  %647 = load ptr, ptr %18, align 8, !tbaa !5
  %648 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %647, i32 0, i32 1
  %649 = load i32, ptr %648, align 4, !tbaa !43
  %650 = load ptr, ptr %18, align 8, !tbaa !5
  %651 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %650, i32 0, i32 12
  %652 = load i32, ptr %651, align 4, !tbaa !28
  call void @libxsmm_x86_instruction_alu_reg(ptr noundef %643, i32 noundef %646, i32 noundef %649, i32 noundef %652)
  br label %678

653:                                              ; preds = %620
  %654 = load ptr, ptr %15, align 8, !tbaa !5
  %655 = load ptr, ptr %18, align 8, !tbaa !5
  %656 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %655, i32 0, i32 12
  %657 = load i32, ptr %656, align 4, !tbaa !28
  %658 = load i32, ptr %27, align 4, !tbaa !9
  %659 = zext i32 %658 to i64
  %660 = load i32, ptr %25, align 4, !tbaa !9
  %661 = zext i32 %660 to i64
  %662 = mul nsw i64 %659, %661
  %663 = load ptr, ptr %19, align 8, !tbaa !5
  %664 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %663, i32 0, i32 3
  %665 = load i32, ptr %664, align 4, !tbaa !42
  %666 = zext i32 %665 to i64
  %667 = mul nsw i64 %662, %666
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef %654, i32 noundef 30003, i32 noundef %657, i64 noundef %667)
  %668 = load ptr, ptr %15, align 8, !tbaa !5
  %669 = load ptr, ptr %19, align 8, !tbaa !5
  %670 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %669, i32 0, i32 16
  %671 = load i32, ptr %670, align 8, !tbaa !32
  %672 = load ptr, ptr %18, align 8, !tbaa !5
  %673 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %672, i32 0, i32 1
  %674 = load i32, ptr %673, align 4, !tbaa !43
  %675 = load ptr, ptr %18, align 8, !tbaa !5
  %676 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %675, i32 0, i32 12
  %677 = load i32, ptr %676, align 4, !tbaa !28
  call void @libxsmm_x86_instruction_alu_reg(ptr noundef %668, i32 noundef %671, i32 noundef %674, i32 noundef %677)
  br label %678

678:                                              ; preds = %653, %631
  %679 = load ptr, ptr %15, align 8, !tbaa !5
  %680 = load ptr, ptr %19, align 8, !tbaa !5
  %681 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %680, i32 0, i32 20
  %682 = load i32, ptr %681, align 8, !tbaa !30
  %683 = load i32, ptr %45, align 4, !tbaa !9
  %684 = load ptr, ptr %18, align 8, !tbaa !5
  %685 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %684, i32 0, i32 24
  %686 = load i32, ptr %685, align 4, !tbaa !44
  call void @libxsmm_x86_instruction_alu_reg(ptr noundef %679, i32 noundef %682, i32 noundef %683, i32 noundef %686)
  %687 = load ptr, ptr %15, align 8, !tbaa !5
  %688 = load ptr, ptr %18, align 8, !tbaa !5
  %689 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %688, i32 0, i32 24
  %690 = load i32, ptr %689, align 4, !tbaa !44
  %691 = load i32, ptr %27, align 4, !tbaa !9
  %692 = load i32, ptr %28, align 4, !tbaa !9
  %693 = mul i32 %691, %692
  %694 = load ptr, ptr %19, align 8, !tbaa !5
  %695 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %694, i32 0, i32 3
  %696 = load i32, ptr %695, align 4, !tbaa !42
  %697 = mul i32 %693, %696
  %698 = zext i32 %697 to i64
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef %687, i32 noundef 30003, i32 noundef %690, i64 noundef %698)
  %699 = load ptr, ptr %15, align 8, !tbaa !5
  %700 = load ptr, ptr %19, align 8, !tbaa !5
  %701 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %700, i32 0, i32 16
  %702 = load i32, ptr %701, align 8, !tbaa !32
  %703 = load ptr, ptr %18, align 8, !tbaa !5
  %704 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %703, i32 0, i32 3
  %705 = load i32, ptr %704, align 4, !tbaa !45
  %706 = load ptr, ptr %18, align 8, !tbaa !5
  %707 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %706, i32 0, i32 24
  %708 = load i32, ptr %707, align 4, !tbaa !44
  call void @libxsmm_x86_instruction_alu_reg(ptr noundef %699, i32 noundef %702, i32 noundef %705, i32 noundef %708)
  %709 = load i32, ptr %57, align 4, !tbaa !9
  %710 = icmp ugt i32 %709, 0
  br i1 %710, label %711, label %955

711:                                              ; preds = %678
  store i32 0, ptr %48, align 4, !tbaa !9
  br label %712

712:                                              ; preds = %951, %711
  %713 = load i32, ptr %48, align 4, !tbaa !9
  %714 = load i32, ptr %47, align 4, !tbaa !9
  %715 = icmp ult i32 %713, %714
  br i1 %715, label %716, label %954

716:                                              ; preds = %712
  store i32 0, ptr %31, align 4, !tbaa !9
  br label %717

717:                                              ; preds = %789, %716
  %718 = load i32, ptr %31, align 4, !tbaa !9
  %719 = load i32, ptr %23, align 4, !tbaa !9
  %720 = icmp ult i32 %718, %719
  br i1 %720, label %721, label %792

721:                                              ; preds = %717
  %722 = load ptr, ptr %15, align 8, !tbaa !5
  %723 = load i32, ptr %61, align 4, !tbaa !9
  %724 = load ptr, ptr %18, align 8, !tbaa !5
  %725 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %724, i32 0, i32 12
  %726 = load i32, ptr %725, align 4, !tbaa !28
  %727 = load i32, ptr %21, align 4, !tbaa !9
  %728 = zext i32 %727 to i64
  %729 = mul i64 1, %728
  %730 = load ptr, ptr %20, align 8, !tbaa !5
  %731 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %730, i32 0, i32 3
  %732 = load i32, ptr %731, align 1, !tbaa !46
  %733 = zext i32 %732 to i64
  %734 = mul i64 %729, %733
  %735 = load i32, ptr %48, align 4, !tbaa !9
  %736 = load i32, ptr %52, align 4, !tbaa !9
  %737 = mul i32 %735, %736
  %738 = load i32, ptr %26, align 4, !tbaa !9
  %739 = mul i32 %737, %738
  %740 = zext i32 %739 to i64
  %741 = add i64 %734, %740
  %742 = load i32, ptr %31, align 4, !tbaa !9
  %743 = load ptr, ptr %20, align 8, !tbaa !5
  %744 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %743, i32 0, i32 3
  %745 = load i32, ptr %744, align 1, !tbaa !46
  %746 = mul i32 %742, %745
  %747 = zext i32 %746 to i64
  %748 = add i64 %741, %747
  %749 = load ptr, ptr %19, align 8, !tbaa !5
  %750 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %749, i32 0, i32 3
  %751 = load i32, ptr %750, align 4, !tbaa !42
  %752 = zext i32 %751 to i64
  %753 = mul i64 %748, %752
  %754 = trunc i64 %753 to i32
  %755 = load i32, ptr %60, align 4, !tbaa !9
  %756 = trunc i32 %755 to i8
  %757 = load i32, ptr %32, align 4, !tbaa !9
  %758 = load i32, ptr %31, align 4, !tbaa !9
  %759 = add i32 %757, %758
  %760 = load i32, ptr %58, align 4, !tbaa !9
  %761 = icmp ugt i32 %760, 0
  br i1 %761, label %762, label %770

762:                                              ; preds = %721
  %763 = load i32, ptr %48, align 4, !tbaa !9
  %764 = load i32, ptr %47, align 4, !tbaa !9
  %765 = sub i32 %764, 1
  %766 = icmp eq i32 %763, %765
  br i1 %766, label %767, label %770

767:                                              ; preds = %762
  %768 = load i32, ptr %59, align 4, !tbaa !9
  %769 = icmp eq i32 %768, 0
  br label %770

770:                                              ; preds = %767, %762, %721
  %771 = phi i1 [ false, %762 ], [ false, %721 ], [ %769, %767 ]
  %772 = zext i1 %771 to i64
  %773 = select i1 %771, i32 1, i32 0
  %774 = load i32, ptr %58, align 4, !tbaa !9
  %775 = icmp ugt i32 %774, 0
  br i1 %775, label %776, label %786

776:                                              ; preds = %770
  %777 = load i32, ptr %48, align 4, !tbaa !9
  %778 = load i32, ptr %47, align 4, !tbaa !9
  %779 = sub i32 %778, 1
  %780 = icmp eq i32 %777, %779
  br i1 %780, label %781, label %786

781:                                              ; preds = %776
  %782 = load i32, ptr %59, align 4, !tbaa !9
  %783 = icmp eq i32 %782, 0
  br i1 %783, label %784, label %786

784:                                              ; preds = %781
  %785 = load i32, ptr %42, align 4, !tbaa !9
  br label %787

786:                                              ; preds = %781, %776, %770
  br label %787

787:                                              ; preds = %786, %784
  %788 = phi i32 [ %785, %784 ], [ 0, %786 ]
  call void @libxsmm_x86_instruction_unified_vec_move(ptr noundef %722, i32 noundef %723, i32 noundef %726, i32 noundef 127, i32 noundef 0, i32 noundef %754, i8 noundef signext %756, i32 noundef %759, i32 noundef %773, i32 noundef %788, i32 noundef 0)
  br label %789

789:                                              ; preds = %787
  %790 = load i32, ptr %31, align 4, !tbaa !9
  %791 = add i32 %790, 1
  store i32 %791, ptr %31, align 4, !tbaa !9
  br label %717, !llvm.loop !47

792:                                              ; preds = %717
  store i32 0, ptr %29, align 4, !tbaa !9
  br label %793

793:                                              ; preds = %947, %792
  %794 = load i32, ptr %29, align 4, !tbaa !9
  %795 = load i32, ptr %33, align 4, !tbaa !9
  %796 = icmp ult i32 %794, %795
  br i1 %796, label %797, label %950

797:                                              ; preds = %793
  %798 = load i32, ptr %29, align 4, !tbaa !9
  store i32 %798, ptr %30, align 4, !tbaa !9
  %799 = load ptr, ptr %15, align 8, !tbaa !5
  %800 = load i32, ptr %61, align 4, !tbaa !9
  %801 = load ptr, ptr %18, align 8, !tbaa !5
  %802 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %801, i32 0, i32 24
  %803 = load i32, ptr %802, align 4, !tbaa !44
  %804 = load i32, ptr %27, align 4, !tbaa !9
  %805 = zext i32 %804 to i64
  %806 = load i32, ptr %29, align 4, !tbaa !9
  %807 = zext i32 %806 to i64
  %808 = mul nsw i64 %805, %807
  %809 = load i32, ptr %48, align 4, !tbaa !9
  %810 = zext i32 %809 to i64
  %811 = load i32, ptr %52, align 4, !tbaa !9
  %812 = zext i32 %811 to i64
  %813 = mul nsw i64 %810, %812
  %814 = load i32, ptr %26, align 4, !tbaa !9
  %815 = zext i32 %814 to i64
  %816 = mul nsw i64 %813, %815
  %817 = add nsw i64 %808, %816
  %818 = load i32, ptr %54, align 4, !tbaa !9
  %819 = zext i32 %818 to i64
  %820 = load i32, ptr %33, align 4, !tbaa !9
  %821 = zext i32 %820 to i64
  %822 = mul nsw i64 %819, %821
  %823 = load i32, ptr %27, align 4, !tbaa !9
  %824 = zext i32 %823 to i64
  %825 = mul nsw i64 %822, %824
  %826 = add nsw i64 %817, %825
  %827 = load ptr, ptr %19, align 8, !tbaa !5
  %828 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %827, i32 0, i32 3
  %829 = load i32, ptr %828, align 4, !tbaa !42
  %830 = zext i32 %829 to i64
  %831 = mul nsw i64 %826, %830
  %832 = trunc i64 %831 to i32
  %833 = load i32, ptr %60, align 4, !tbaa !9
  %834 = trunc i32 %833 to i8
  %835 = load i32, ptr %32, align 4, !tbaa !9
  %836 = load i32, ptr %23, align 4, !tbaa !9
  %837 = add i32 %835, %836
  %838 = load i32, ptr %58, align 4, !tbaa !9
  %839 = icmp ugt i32 %838, 0
  br i1 %839, label %840, label %848

840:                                              ; preds = %797
  %841 = load i32, ptr %48, align 4, !tbaa !9
  %842 = load i32, ptr %47, align 4, !tbaa !9
  %843 = sub i32 %842, 1
  %844 = icmp eq i32 %841, %843
  br i1 %844, label %845, label %848

845:                                              ; preds = %840
  %846 = load i32, ptr %59, align 4, !tbaa !9
  %847 = icmp eq i32 %846, 0
  br label %848

848:                                              ; preds = %845, %840, %797
  %849 = phi i1 [ false, %840 ], [ false, %797 ], [ %847, %845 ]
  %850 = zext i1 %849 to i64
  %851 = select i1 %849, i32 1, i32 0
  %852 = load i32, ptr %58, align 4, !tbaa !9
  %853 = icmp ugt i32 %852, 0
  br i1 %853, label %854, label %864

854:                                              ; preds = %848
  %855 = load i32, ptr %48, align 4, !tbaa !9
  %856 = load i32, ptr %47, align 4, !tbaa !9
  %857 = sub i32 %856, 1
  %858 = icmp eq i32 %855, %857
  br i1 %858, label %859, label %864

859:                                              ; preds = %854
  %860 = load i32, ptr %59, align 4, !tbaa !9
  %861 = icmp eq i32 %860, 0
  br i1 %861, label %862, label %864

862:                                              ; preds = %859
  %863 = load i32, ptr %42, align 4, !tbaa !9
  br label %865

864:                                              ; preds = %859, %854, %848
  br label %865

865:                                              ; preds = %864, %862
  %866 = phi i32 [ %863, %862 ], [ 0, %864 ]
  call void @libxsmm_x86_instruction_unified_vec_move(ptr noundef %799, i32 noundef %800, i32 noundef %803, i32 noundef 127, i32 noundef 0, i32 noundef %832, i8 noundef signext %834, i32 noundef %837, i32 noundef %851, i32 noundef %866, i32 noundef 0)
  %867 = load i32, ptr %62, align 4, !tbaa !9
  %868 = icmp ugt i32 %867, 0
  br i1 %868, label %869, label %904

869:                                              ; preds = %865
  %870 = load i32, ptr %48, align 4, !tbaa !9
  %871 = icmp eq i32 %870, 0
  br i1 %871, label %872, label %903

872:                                              ; preds = %869
  %873 = load i32, ptr %54, align 4, !tbaa !9
  %874 = icmp eq i32 %873, 0
  br i1 %874, label %875, label %903

875:                                              ; preds = %872
  %876 = load i32, ptr %29, align 4, !tbaa !9
  %877 = icmp eq i32 %876, 0
  br i1 %877, label %878, label %903

878:                                              ; preds = %875
  %879 = load ptr, ptr %15, align 8, !tbaa !5
  %880 = load i32, ptr %27, align 4, !tbaa !9
  %881 = load i32, ptr %28, align 4, !tbaa !9
  %882 = mul i32 %880, %881
  %883 = load ptr, ptr %19, align 8, !tbaa !5
  %884 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %883, i32 0, i32 3
  %885 = load i32, ptr %884, align 4, !tbaa !42
  %886 = mul i32 %882, %885
  %887 = load ptr, ptr %18, align 8, !tbaa !5
  %888 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %887, i32 0, i32 24
  %889 = load i32, ptr %888, align 4, !tbaa !44
  %890 = load i32, ptr %62, align 4, !tbaa !9
  %891 = zext i32 %890 to i64
  %892 = load i32, ptr %27, align 4, !tbaa !9
  %893 = zext i32 %892 to i64
  %894 = mul nsw i64 %891, %893
  %895 = load i32, ptr %28, align 4, !tbaa !9
  %896 = zext i32 %895 to i64
  %897 = mul nsw i64 %894, %896
  %898 = load ptr, ptr %19, align 8, !tbaa !5
  %899 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %898, i32 0, i32 3
  %900 = load i32, ptr %899, align 4, !tbaa !42
  %901 = zext i32 %900 to i64
  %902 = mul nsw i64 %897, %901
  call void @libxsmm_generator_packed_spgemm_bcsc_prefetch_B_block_in_L1(ptr noundef %879, i32 noundef %886, i32 noundef %889, i64 noundef %902)
  br label %903

903:                                              ; preds = %878, %875, %872, %869
  br label %904

904:                                              ; preds = %903, %865
  store i32 0, ptr %31, align 4, !tbaa !9
  br label %905

905:                                              ; preds = %943, %904
  %906 = load i32, ptr %31, align 4, !tbaa !9
  %907 = load i32, ptr %23, align 4, !tbaa !9
  %908 = icmp ult i32 %906, %907
  br i1 %908, label %909, label %946

909:                                              ; preds = %905
  %910 = load ptr, ptr %15, align 8, !tbaa !5
  %911 = load i32, ptr %49, align 4, !tbaa !9
  %912 = load i32, ptr %60, align 4, !tbaa !9
  %913 = trunc i32 %912 to i8
  %914 = load i32, ptr %39, align 4, !tbaa !9
  %915 = icmp ugt i32 %914, 0
  br i1 %915, label %916, label %920

916:                                              ; preds = %909
  %917 = load i32, ptr %32, align 4, !tbaa !9
  %918 = load i32, ptr %31, align 4, !tbaa !9
  %919 = add i32 %917, %918
  br label %924

920:                                              ; preds = %909
  %921 = load i32, ptr %32, align 4, !tbaa !9
  %922 = load i32, ptr %23, align 4, !tbaa !9
  %923 = add i32 %921, %922
  br label %924

924:                                              ; preds = %920, %916
  %925 = phi i32 [ %919, %916 ], [ %923, %920 ]
  %926 = load i32, ptr %39, align 4, !tbaa !9
  %927 = icmp ugt i32 %926, 0
  br i1 %927, label %928, label %932

928:                                              ; preds = %924
  %929 = load i32, ptr %32, align 4, !tbaa !9
  %930 = load i32, ptr %23, align 4, !tbaa !9
  %931 = add i32 %929, %930
  br label %936

932:                                              ; preds = %924
  %933 = load i32, ptr %32, align 4, !tbaa !9
  %934 = load i32, ptr %31, align 4, !tbaa !9
  %935 = add i32 %933, %934
  br label %936

936:                                              ; preds = %932, %928
  %937 = phi i32 [ %931, %928 ], [ %935, %932 ]
  %938 = load i32, ptr %30, align 4, !tbaa !9
  %939 = load i32, ptr %23, align 4, !tbaa !9
  %940 = mul i32 %938, %939
  %941 = load i32, ptr %31, align 4, !tbaa !9
  %942 = add i32 %940, %941
  call void @libxsmm_x86_instruction_vec_compute_3reg(ptr noundef %910, i32 noundef %911, i8 noundef signext %913, i32 noundef %925, i32 noundef %937, i32 noundef %942)
  br label %943

943:                                              ; preds = %936
  %944 = load i32, ptr %31, align 4, !tbaa !9
  %945 = add i32 %944, 1
  store i32 %945, ptr %31, align 4, !tbaa !9
  br label %905, !llvm.loop !48

946:                                              ; preds = %905
  br label %947

947:                                              ; preds = %946
  %948 = load i32, ptr %29, align 4, !tbaa !9
  %949 = add i32 %948, 1
  store i32 %949, ptr %29, align 4, !tbaa !9
  br label %793, !llvm.loop !49

950:                                              ; preds = %793
  br label %951

951:                                              ; preds = %950
  %952 = load i32, ptr %48, align 4, !tbaa !9
  %953 = add i32 %952, 1
  store i32 %953, ptr %48, align 4, !tbaa !9
  br label %712, !llvm.loop !50

954:                                              ; preds = %712
  br label %1239

955:                                              ; preds = %678
  %956 = load i32, ptr %56, align 4, !tbaa !9
  %957 = icmp ugt i32 %956, 1
  br i1 %957, label %958, label %973

958:                                              ; preds = %955
  %959 = load ptr, ptr %15, align 8, !tbaa !5
  %960 = load i32, ptr %55, align 4, !tbaa !9
  call void @libxsmm_x86_instruction_push_reg(ptr noundef %959, i32 noundef %960)
  %961 = load ptr, ptr %15, align 8, !tbaa !5
  %962 = load ptr, ptr %19, align 8, !tbaa !5
  %963 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %962, i32 0, i32 20
  %964 = load i32, ptr %963, align 8, !tbaa !30
  %965 = load i32, ptr %55, align 4, !tbaa !9
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef %961, i32 noundef %964, i32 noundef %965, i64 noundef 0)
  %966 = load ptr, ptr %15, align 8, !tbaa !5
  %967 = load ptr, ptr %16, align 8, !tbaa !5
  call void @libxsmm_x86_instruction_register_jump_back_label(ptr noundef %966, ptr noundef %967)
  %968 = load ptr, ptr %15, align 8, !tbaa !5
  %969 = load ptr, ptr %19, align 8, !tbaa !5
  %970 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %969, i32 0, i32 16
  %971 = load i32, ptr %970, align 8, !tbaa !32
  %972 = load i32, ptr %55, align 4, !tbaa !9
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef %968, i32 noundef %971, i32 noundef %972, i64 noundef 1)
  br label %973

973:                                              ; preds = %958, %955
  store i32 0, ptr %48, align 4, !tbaa !9
  br label %974

974:                                              ; preds = %1180, %973
  %975 = load i32, ptr %48, align 4, !tbaa !9
  %976 = load i32, ptr %47, align 4, !tbaa !9
  %977 = icmp ult i32 %975, %976
  br i1 %977, label %978, label %1183

978:                                              ; preds = %974
  store i32 0, ptr %31, align 4, !tbaa !9
  br label %979

979:                                              ; preds = %1046, %978
  %980 = load i32, ptr %31, align 4, !tbaa !9
  %981 = load i32, ptr %23, align 4, !tbaa !9
  %982 = icmp ult i32 %980, %981
  br i1 %982, label %983, label %1049

983:                                              ; preds = %979
  %984 = load ptr, ptr %15, align 8, !tbaa !5
  %985 = load ptr, ptr %18, align 8, !tbaa !5
  %986 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %985, i32 0, i32 12
  %987 = load i32, ptr %986, align 4, !tbaa !28
  %988 = load i32, ptr %21, align 4, !tbaa !9
  %989 = zext i32 %988 to i64
  %990 = mul i64 1, %989
  %991 = load i32, ptr %26, align 4, !tbaa !9
  %992 = zext i32 %991 to i64
  %993 = mul i64 %990, %992
  %994 = load i32, ptr %52, align 4, !tbaa !9
  %995 = zext i32 %994 to i64
  %996 = mul i64 %993, %995
  %997 = load i32, ptr %48, align 4, !tbaa !9
  %998 = load i32, ptr %25, align 4, !tbaa !9
  %999 = mul i32 %997, %998
  %1000 = load i32, ptr %52, align 4, !tbaa !9
  %1001 = mul i32 %999, %1000
  %1002 = zext i32 %1001 to i64
  %1003 = add i64 %996, %1002
  %1004 = load i32, ptr %31, align 4, !tbaa !9
  %1005 = load i32, ptr %26, align 4, !tbaa !9
  %1006 = mul i32 %1004, %1005
  %1007 = load i32, ptr %52, align 4, !tbaa !9
  %1008 = mul i32 %1006, %1007
  %1009 = zext i32 %1008 to i64
  %1010 = add i64 %1003, %1009
  %1011 = load ptr, ptr %19, align 8, !tbaa !5
  %1012 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1011, i32 0, i32 3
  %1013 = load i32, ptr %1012, align 4, !tbaa !42
  %1014 = zext i32 %1013 to i64
  %1015 = mul i64 %1010, %1014
  %1016 = trunc i64 %1015 to i32
  %1017 = load ptr, ptr %19, align 8, !tbaa !5
  %1018 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1017, i32 0, i32 21
  %1019 = load i8, ptr %1018, align 4, !tbaa !15
  %1020 = load i32, ptr %32, align 4, !tbaa !9
  %1021 = load i32, ptr %31, align 4, !tbaa !9
  %1022 = add i32 %1020, %1021
  %1023 = load i32, ptr %24, align 4, !tbaa !9
  %1024 = icmp ugt i32 %1023, 0
  br i1 %1024, label %1025, label %1030

1025:                                             ; preds = %983
  %1026 = load i32, ptr %31, align 4, !tbaa !9
  %1027 = load i32, ptr %23, align 4, !tbaa !9
  %1028 = sub i32 %1027, 1
  %1029 = icmp eq i32 %1026, %1028
  br label %1030

1030:                                             ; preds = %1025, %983
  %1031 = phi i1 [ false, %983 ], [ %1029, %1025 ]
  %1032 = zext i1 %1031 to i64
  %1033 = select i1 %1031, i32 1, i32 0
  %1034 = load i32, ptr %24, align 4, !tbaa !9
  %1035 = icmp ugt i32 %1034, 0
  br i1 %1035, label %1036, label %1043

1036:                                             ; preds = %1030
  %1037 = load i32, ptr %31, align 4, !tbaa !9
  %1038 = load i32, ptr %23, align 4, !tbaa !9
  %1039 = sub i32 %1038, 1
  %1040 = icmp eq i32 %1037, %1039
  br i1 %1040, label %1041, label %1043

1041:                                             ; preds = %1036
  %1042 = load i32, ptr %42, align 4, !tbaa !9
  br label %1044

1043:                                             ; preds = %1036, %1030
  br label %1044

1044:                                             ; preds = %1043, %1041
  %1045 = phi i32 [ %1042, %1041 ], [ 0, %1043 ]
  call void @libxsmm_x86_instruction_unified_vec_move(ptr noundef %984, i32 noundef 537138704, i32 noundef %987, i32 noundef 127, i32 noundef 0, i32 noundef %1016, i8 noundef signext %1019, i32 noundef %1022, i32 noundef %1033, i32 noundef %1045, i32 noundef 0)
  br label %1046

1046:                                             ; preds = %1044
  %1047 = load i32, ptr %31, align 4, !tbaa !9
  %1048 = add i32 %1047, 1
  store i32 %1048, ptr %31, align 4, !tbaa !9
  br label %979, !llvm.loop !51

1049:                                             ; preds = %979
  store i32 0, ptr %29, align 4, !tbaa !9
  br label %1050

1050:                                             ; preds = %1176, %1049
  %1051 = load i32, ptr %29, align 4, !tbaa !9
  %1052 = load i32, ptr %33, align 4, !tbaa !9
  %1053 = icmp ult i32 %1051, %1052
  br i1 %1053, label %1054, label %1179

1054:                                             ; preds = %1050
  %1055 = load i32, ptr %29, align 4, !tbaa !9
  store i32 %1055, ptr %30, align 4, !tbaa !9
  %1056 = load ptr, ptr %15, align 8, !tbaa !5
  %1057 = load ptr, ptr %19, align 8, !tbaa !5
  %1058 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1057, i32 0, i32 0
  %1059 = load i32, ptr %1058, align 8, !tbaa !52
  %1060 = load ptr, ptr %18, align 8, !tbaa !5
  %1061 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %1060, i32 0, i32 24
  %1062 = load i32, ptr %1061, align 4, !tbaa !44
  %1063 = load i32, ptr %27, align 4, !tbaa !9
  %1064 = zext i32 %1063 to i64
  %1065 = load i32, ptr %29, align 4, !tbaa !9
  %1066 = zext i32 %1065 to i64
  %1067 = mul nsw i64 %1064, %1066
  %1068 = load i32, ptr %48, align 4, !tbaa !9
  %1069 = zext i32 %1068 to i64
  %1070 = load i32, ptr %52, align 4, !tbaa !9
  %1071 = zext i32 %1070 to i64
  %1072 = mul nsw i64 %1069, %1071
  %1073 = add nsw i64 %1067, %1072
  %1074 = load i32, ptr %54, align 4, !tbaa !9
  %1075 = zext i32 %1074 to i64
  %1076 = load i32, ptr %33, align 4, !tbaa !9
  %1077 = zext i32 %1076 to i64
  %1078 = mul nsw i64 %1075, %1077
  %1079 = load i32, ptr %27, align 4, !tbaa !9
  %1080 = zext i32 %1079 to i64
  %1081 = mul nsw i64 %1078, %1080
  %1082 = add nsw i64 %1073, %1081
  %1083 = load ptr, ptr %19, align 8, !tbaa !5
  %1084 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1083, i32 0, i32 3
  %1085 = load i32, ptr %1084, align 4, !tbaa !42
  %1086 = zext i32 %1085 to i64
  %1087 = mul nsw i64 %1082, %1086
  %1088 = trunc i64 %1087 to i32
  %1089 = load ptr, ptr %19, align 8, !tbaa !5
  %1090 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1089, i32 0, i32 21
  %1091 = load i8, ptr %1090, align 4, !tbaa !15
  %1092 = load i32, ptr %32, align 4, !tbaa !9
  %1093 = load i32, ptr %23, align 4, !tbaa !9
  %1094 = add i32 %1092, %1093
  call void @libxsmm_x86_instruction_vec_move(ptr noundef %1056, i32 noundef %1059, i32 noundef 537209368, i32 noundef %1062, i32 noundef 127, i32 noundef 0, i32 noundef %1088, i8 noundef signext %1091, i32 noundef %1094, i32 noundef 0, i32 noundef 1, i32 noundef 0)
  %1095 = load i32, ptr %62, align 4, !tbaa !9
  %1096 = icmp ugt i32 %1095, 0
  br i1 %1096, label %1097, label %1132

1097:                                             ; preds = %1054
  %1098 = load i32, ptr %48, align 4, !tbaa !9
  %1099 = icmp eq i32 %1098, 0
  br i1 %1099, label %1100, label %1131

1100:                                             ; preds = %1097
  %1101 = load i32, ptr %54, align 4, !tbaa !9
  %1102 = icmp eq i32 %1101, 0
  br i1 %1102, label %1103, label %1131

1103:                                             ; preds = %1100
  %1104 = load i32, ptr %29, align 4, !tbaa !9
  %1105 = icmp eq i32 %1104, 0
  br i1 %1105, label %1106, label %1131

1106:                                             ; preds = %1103
  %1107 = load ptr, ptr %15, align 8, !tbaa !5
  %1108 = load i32, ptr %27, align 4, !tbaa !9
  %1109 = load i32, ptr %28, align 4, !tbaa !9
  %1110 = mul i32 %1108, %1109
  %1111 = load ptr, ptr %19, align 8, !tbaa !5
  %1112 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1111, i32 0, i32 3
  %1113 = load i32, ptr %1112, align 4, !tbaa !42
  %1114 = mul i32 %1110, %1113
  %1115 = load ptr, ptr %18, align 8, !tbaa !5
  %1116 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %1115, i32 0, i32 24
  %1117 = load i32, ptr %1116, align 4, !tbaa !44
  %1118 = load i32, ptr %62, align 4, !tbaa !9
  %1119 = zext i32 %1118 to i64
  %1120 = load i32, ptr %27, align 4, !tbaa !9
  %1121 = zext i32 %1120 to i64
  %1122 = mul nsw i64 %1119, %1121
  %1123 = load i32, ptr %28, align 4, !tbaa !9
  %1124 = zext i32 %1123 to i64
  %1125 = mul nsw i64 %1122, %1124
  %1126 = load ptr, ptr %19, align 8, !tbaa !5
  %1127 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1126, i32 0, i32 3
  %1128 = load i32, ptr %1127, align 4, !tbaa !42
  %1129 = zext i32 %1128 to i64
  %1130 = mul nsw i64 %1125, %1129
  call void @libxsmm_generator_packed_spgemm_bcsc_prefetch_B_block_in_L1(ptr noundef %1107, i32 noundef %1114, i32 noundef %1117, i64 noundef %1130)
  br label %1131

1131:                                             ; preds = %1106, %1103, %1100, %1097
  br label %1132

1132:                                             ; preds = %1131, %1054
  store i32 0, ptr %31, align 4, !tbaa !9
  br label %1133

1133:                                             ; preds = %1172, %1132
  %1134 = load i32, ptr %31, align 4, !tbaa !9
  %1135 = load i32, ptr %23, align 4, !tbaa !9
  %1136 = icmp ult i32 %1134, %1135
  br i1 %1136, label %1137, label %1175

1137:                                             ; preds = %1133
  %1138 = load ptr, ptr %15, align 8, !tbaa !5
  %1139 = load i32, ptr %49, align 4, !tbaa !9
  %1140 = load ptr, ptr %19, align 8, !tbaa !5
  %1141 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1140, i32 0, i32 21
  %1142 = load i8, ptr %1141, align 4, !tbaa !15
  %1143 = load i32, ptr %39, align 4, !tbaa !9
  %1144 = icmp ugt i32 %1143, 0
  br i1 %1144, label %1145, label %1149

1145:                                             ; preds = %1137
  %1146 = load i32, ptr %32, align 4, !tbaa !9
  %1147 = load i32, ptr %31, align 4, !tbaa !9
  %1148 = add i32 %1146, %1147
  br label %1153

1149:                                             ; preds = %1137
  %1150 = load i32, ptr %32, align 4, !tbaa !9
  %1151 = load i32, ptr %23, align 4, !tbaa !9
  %1152 = add i32 %1150, %1151
  br label %1153

1153:                                             ; preds = %1149, %1145
  %1154 = phi i32 [ %1148, %1145 ], [ %1152, %1149 ]
  %1155 = load i32, ptr %39, align 4, !tbaa !9
  %1156 = icmp ugt i32 %1155, 0
  br i1 %1156, label %1157, label %1161

1157:                                             ; preds = %1153
  %1158 = load i32, ptr %32, align 4, !tbaa !9
  %1159 = load i32, ptr %23, align 4, !tbaa !9
  %1160 = add i32 %1158, %1159
  br label %1165

1161:                                             ; preds = %1153
  %1162 = load i32, ptr %32, align 4, !tbaa !9
  %1163 = load i32, ptr %31, align 4, !tbaa !9
  %1164 = add i32 %1162, %1163
  br label %1165

1165:                                             ; preds = %1161, %1157
  %1166 = phi i32 [ %1160, %1157 ], [ %1164, %1161 ]
  %1167 = load i32, ptr %30, align 4, !tbaa !9
  %1168 = load i32, ptr %23, align 4, !tbaa !9
  %1169 = mul i32 %1167, %1168
  %1170 = load i32, ptr %31, align 4, !tbaa !9
  %1171 = add i32 %1169, %1170
  call void @libxsmm_x86_instruction_vec_compute_3reg(ptr noundef %1138, i32 noundef %1139, i8 noundef signext %1142, i32 noundef %1154, i32 noundef %1166, i32 noundef %1171)
  br label %1172

1172:                                             ; preds = %1165
  %1173 = load i32, ptr %31, align 4, !tbaa !9
  %1174 = add i32 %1173, 1
  store i32 %1174, ptr %31, align 4, !tbaa !9
  br label %1133, !llvm.loop !53

1175:                                             ; preds = %1133
  br label %1176

1176:                                             ; preds = %1175
  %1177 = load i32, ptr %29, align 4, !tbaa !9
  %1178 = add i32 %1177, 1
  store i32 %1178, ptr %29, align 4, !tbaa !9
  br label %1050, !llvm.loop !54

1179:                                             ; preds = %1050
  br label %1180

1180:                                             ; preds = %1179
  %1181 = load i32, ptr %48, align 4, !tbaa !9
  %1182 = add i32 %1181, 1
  store i32 %1182, ptr %48, align 4, !tbaa !9
  br label %974, !llvm.loop !55

1183:                                             ; preds = %974
  %1184 = load i32, ptr %56, align 4, !tbaa !9
  %1185 = icmp ugt i32 %1184, 1
  br i1 %1185, label %1186, label %1238

1186:                                             ; preds = %1183
  %1187 = load ptr, ptr %15, align 8, !tbaa !5
  %1188 = load ptr, ptr %19, align 8, !tbaa !5
  %1189 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1188, i32 0, i32 16
  %1190 = load i32, ptr %1189, align 8, !tbaa !32
  %1191 = load ptr, ptr %18, align 8, !tbaa !5
  %1192 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %1191, i32 0, i32 24
  %1193 = load i32, ptr %1192, align 4, !tbaa !44
  %1194 = load i32, ptr %47, align 4, !tbaa !9
  %1195 = zext i32 %1194 to i64
  %1196 = load i32, ptr %52, align 4, !tbaa !9
  %1197 = zext i32 %1196 to i64
  %1198 = mul nsw i64 %1195, %1197
  %1199 = load ptr, ptr %19, align 8, !tbaa !5
  %1200 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1199, i32 0, i32 3
  %1201 = load i32, ptr %1200, align 4, !tbaa !42
  %1202 = zext i32 %1201 to i64
  %1203 = mul nsw i64 %1198, %1202
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef %1187, i32 noundef %1190, i32 noundef %1193, i64 noundef %1203)
  %1204 = load ptr, ptr %15, align 8, !tbaa !5
  %1205 = load ptr, ptr %19, align 8, !tbaa !5
  %1206 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1205, i32 0, i32 16
  %1207 = load i32, ptr %1206, align 8, !tbaa !32
  %1208 = load ptr, ptr %18, align 8, !tbaa !5
  %1209 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %1208, i32 0, i32 12
  %1210 = load i32, ptr %1209, align 4, !tbaa !28
  %1211 = load i32, ptr %47, align 4, !tbaa !9
  %1212 = zext i32 %1211 to i64
  %1213 = load i32, ptr %25, align 4, !tbaa !9
  %1214 = zext i32 %1213 to i64
  %1215 = mul nsw i64 %1212, %1214
  %1216 = load i32, ptr %52, align 4, !tbaa !9
  %1217 = zext i32 %1216 to i64
  %1218 = mul nsw i64 %1215, %1217
  %1219 = load ptr, ptr %19, align 8, !tbaa !5
  %1220 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1219, i32 0, i32 3
  %1221 = load i32, ptr %1220, align 4, !tbaa !42
  %1222 = zext i32 %1221 to i64
  %1223 = mul nsw i64 %1218, %1222
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef %1204, i32 noundef %1207, i32 noundef %1210, i64 noundef %1223)
  %1224 = load ptr, ptr %15, align 8, !tbaa !5
  %1225 = load ptr, ptr %19, align 8, !tbaa !5
  %1226 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1225, i32 0, i32 18
  %1227 = load i32, ptr %1226, align 8, !tbaa !29
  %1228 = load i32, ptr %55, align 4, !tbaa !9
  %1229 = load i32, ptr %56, align 4, !tbaa !9
  %1230 = zext i32 %1229 to i64
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef %1224, i32 noundef %1227, i32 noundef %1228, i64 noundef %1230)
  %1231 = load ptr, ptr %15, align 8, !tbaa !5
  %1232 = load ptr, ptr %19, align 8, !tbaa !5
  %1233 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1232, i32 0, i32 19
  %1234 = load i32, ptr %1233, align 4, !tbaa !56
  %1235 = load ptr, ptr %16, align 8, !tbaa !5
  call void @libxsmm_x86_instruction_jump_back_to_label(ptr noundef %1231, i32 noundef %1234, ptr noundef %1235)
  %1236 = load ptr, ptr %15, align 8, !tbaa !5
  %1237 = load i32, ptr %55, align 4, !tbaa !9
  call void @libxsmm_x86_instruction_pop_reg(ptr noundef %1236, i32 noundef %1237)
  br label %1238

1238:                                             ; preds = %1186, %1183
  br label %1239

1239:                                             ; preds = %1238, %954
  %1240 = load ptr, ptr %15, align 8, !tbaa !5
  %1241 = load ptr, ptr %19, align 8, !tbaa !5
  %1242 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1241, i32 0, i32 16
  %1243 = load i32, ptr %1242, align 8, !tbaa !32
  %1244 = load i32, ptr %45, align 4, !tbaa !9
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef %1240, i32 noundef %1243, i32 noundef %1244, i64 noundef 1)
  %1245 = load ptr, ptr %15, align 8, !tbaa !5
  %1246 = load ptr, ptr %19, align 8, !tbaa !5
  %1247 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1246, i32 0, i32 18
  %1248 = load i32, ptr %1247, align 8, !tbaa !29
  %1249 = load i32, ptr %46, align 4, !tbaa !9
  %1250 = load i32, ptr %45, align 4, !tbaa !9
  call void @libxsmm_x86_instruction_alu_reg(ptr noundef %1245, i32 noundef %1248, i32 noundef %1249, i32 noundef %1250)
  %1251 = load ptr, ptr %15, align 8, !tbaa !5
  %1252 = load ptr, ptr %19, align 8, !tbaa !5
  %1253 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1252, i32 0, i32 19
  %1254 = load i32, ptr %1253, align 4, !tbaa !56
  %1255 = load ptr, ptr %16, align 8, !tbaa !5
  call void @libxsmm_x86_instruction_jump_back_to_label(ptr noundef %1251, i32 noundef %1254, ptr noundef %1255)
  %1256 = load i32, ptr %57, align 4, !tbaa !9
  %1257 = icmp ugt i32 %1256, 0
  br i1 %1257, label %1258, label %1374

1258:                                             ; preds = %1239
  store i32 0, ptr %30, align 4, !tbaa !9
  br label %1259

1259:                                             ; preds = %1370, %1258
  %1260 = load i32, ptr %30, align 4, !tbaa !9
  %1261 = load i32, ptr %33, align 4, !tbaa !9
  %1262 = icmp ult i32 %1260, %1261
  br i1 %1262, label %1263, label %1373

1263:                                             ; preds = %1259
  store i32 0, ptr %31, align 4, !tbaa !9
  br label %1264

1264:                                             ; preds = %1366, %1263
  %1265 = load i32, ptr %31, align 4, !tbaa !9
  %1266 = load i32, ptr %23, align 4, !tbaa !9
  %1267 = icmp ult i32 %1265, %1266
  br i1 %1267, label %1268, label %1369

1268:                                             ; preds = %1264
  call void @llvm.lifetime.start.p0(i64 4, ptr %66) #4
  %1269 = load i32, ptr %30, align 4, !tbaa !9
  %1270 = load i32, ptr %23, align 4, !tbaa !9
  %1271 = mul i32 %1269, %1270
  %1272 = load i32, ptr %31, align 4, !tbaa !9
  %1273 = add i32 %1271, %1272
  store i32 %1273, ptr %66, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %67) #4
  %1274 = load ptr, ptr %20, align 8, !tbaa !5
  %1275 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %1274, i32 0, i32 8
  %1276 = getelementptr inbounds [3 x i8], ptr %1275, i64 0, i64 0
  %1277 = call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef %1276)
  %1278 = icmp eq i32 8, %1277
  %1279 = zext i1 %1278 to i64
  %1280 = select i1 %1278, i32 805639934, i32 805574232
  store i32 %1280, ptr %67, align 4, !tbaa !9
  %1281 = load ptr, ptr %15, align 8, !tbaa !5
  %1282 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %1281, i32 0, i32 6
  %1283 = load i32, ptr %1282, align 4, !tbaa !24
  %1284 = icmp ult i32 %1283, 1101
  br i1 %1284, label %1285, label %1292

1285:                                             ; preds = %1268
  %1286 = load ptr, ptr %15, align 8, !tbaa !5
  %1287 = load i32, ptr %67, align 4, !tbaa !9
  %1288 = load i32, ptr %66, align 4, !tbaa !9
  %1289 = load i32, ptr %32, align 4, !tbaa !9
  %1290 = add i32 %1289, 1
  %1291 = load i32, ptr %32, align 4, !tbaa !9
  call void @libxsmm_generator_hinstrps_avx(ptr noundef %1286, i32 noundef %1287, i32 noundef %1288, i32 noundef %1290, i32 noundef %1291)
  br label %1299

1292:                                             ; preds = %1268
  %1293 = load ptr, ptr %15, align 8, !tbaa !5
  %1294 = load i32, ptr %67, align 4, !tbaa !9
  %1295 = load i32, ptr %66, align 4, !tbaa !9
  %1296 = load i32, ptr %32, align 4, !tbaa !9
  %1297 = add i32 %1296, 1
  %1298 = load i32, ptr %32, align 4, !tbaa !9
  call void @libxsmm_generator_hinstrps_avx512(ptr noundef %1293, i32 noundef %1294, i32 noundef %1295, i32 noundef %1297, i32 noundef %1298)
  br label %1299

1299:                                             ; preds = %1292, %1285
  %1300 = load i32, ptr %34, align 4, !tbaa !9
  %1301 = icmp eq i32 %1300, 0
  br i1 %1301, label %1302, label %1365

1302:                                             ; preds = %1299
  %1303 = load ptr, ptr %15, align 8, !tbaa !5
  %1304 = load ptr, ptr %19, align 8, !tbaa !5
  %1305 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1304, i32 0, i32 0
  %1306 = load i32, ptr %1305, align 8, !tbaa !52
  %1307 = load i32, ptr %40, align 4, !tbaa !9
  %1308 = load ptr, ptr %18, align 8, !tbaa !5
  %1309 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %1308, i32 0, i32 5
  %1310 = load i32, ptr %1309, align 4, !tbaa !38
  %1311 = load i32, ptr %21, align 4, !tbaa !9
  %1312 = zext i32 %1311 to i64
  %1313 = mul i64 1, %1312
  %1314 = load ptr, ptr %20, align 8, !tbaa !5
  %1315 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %1314, i32 0, i32 5
  %1316 = load i32, ptr %1315, align 1, !tbaa !57
  %1317 = zext i32 %1316 to i64
  %1318 = mul i64 %1313, %1317
  %1319 = load i32, ptr %30, align 4, !tbaa !9
  %1320 = zext i32 %1319 to i64
  %1321 = mul i64 1, %1320
  %1322 = add i64 %1318, %1321
  %1323 = load i32, ptr %31, align 4, !tbaa !9
  %1324 = load ptr, ptr %20, align 8, !tbaa !5
  %1325 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %1324, i32 0, i32 5
  %1326 = load i32, ptr %1325, align 1, !tbaa !57
  %1327 = mul i32 %1323, %1326
  %1328 = zext i32 %1327 to i64
  %1329 = add i64 %1322, %1328
  %1330 = load i32, ptr %54, align 4, !tbaa !9
  %1331 = load i32, ptr %33, align 4, !tbaa !9
  %1332 = mul i32 %1330, %1331
  %1333 = zext i32 %1332 to i64
  %1334 = add i64 %1329, %1333
  %1335 = load ptr, ptr %19, align 8, !tbaa !5
  %1336 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1335, i32 0, i32 5
  %1337 = load i32, ptr %1336, align 4, !tbaa !39
  %1338 = zext i32 %1337 to i64
  %1339 = mul i64 %1334, %1338
  %1340 = trunc i64 %1339 to i32
  %1341 = load i8, ptr %36, align 1, !tbaa !18
  %1342 = load i32, ptr %32, align 4, !tbaa !9
  %1343 = load i32, ptr %23, align 4, !tbaa !9
  %1344 = add i32 %1342, %1343
  call void @libxsmm_x86_instruction_vec_move(ptr noundef %1303, i32 noundef %1306, i32 noundef %1307, i32 noundef %1310, i32 noundef 127, i32 noundef 0, i32 noundef %1340, i8 noundef signext %1341, i32 noundef %1344, i32 noundef 0, i32 noundef 1, i32 noundef 0)
  %1345 = load i32, ptr %35, align 4, !tbaa !9
  %1346 = icmp ugt i32 %1345, 0
  br i1 %1346, label %1347, label %1356

1347:                                             ; preds = %1302
  %1348 = load ptr, ptr %15, align 8, !tbaa !5
  %1349 = load i8, ptr %36, align 1, !tbaa !18
  %1350 = load i32, ptr %32, align 4, !tbaa !9
  %1351 = load i32, ptr %23, align 4, !tbaa !9
  %1352 = add i32 %1350, %1351
  %1353 = load i32, ptr %32, align 4, !tbaa !9
  %1354 = load i32, ptr %23, align 4, !tbaa !9
  %1355 = add i32 %1353, %1354
  call void @libxsmm_x86_instruction_vec_compute_2reg_imm8(ptr noundef %1348, i32 noundef 611128946, i8 noundef signext %1349, i32 noundef %1352, i32 noundef %1355, i32 noundef 16)
  br label %1356

1356:                                             ; preds = %1347, %1302
  %1357 = load ptr, ptr %15, align 8, !tbaa !5
  %1358 = load i32, ptr %67, align 4, !tbaa !9
  %1359 = load i8, ptr %36, align 1, !tbaa !18
  %1360 = load i32, ptr %66, align 4, !tbaa !9
  %1361 = load i32, ptr %32, align 4, !tbaa !9
  %1362 = load i32, ptr %23, align 4, !tbaa !9
  %1363 = add i32 %1361, %1362
  %1364 = load i32, ptr %66, align 4, !tbaa !9
  call void @libxsmm_x86_instruction_vec_compute_3reg(ptr noundef %1357, i32 noundef %1358, i8 noundef signext %1359, i32 noundef %1360, i32 noundef %1363, i32 noundef %1364)
  br label %1365

1365:                                             ; preds = %1356, %1299
  call void @llvm.lifetime.end.p0(i64 4, ptr %67) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %66) #4
  br label %1366

1366:                                             ; preds = %1365
  %1367 = load i32, ptr %31, align 4, !tbaa !9
  %1368 = add i32 %1367, 1
  store i32 %1368, ptr %31, align 4, !tbaa !9
  br label %1264, !llvm.loop !58

1369:                                             ; preds = %1264
  br label %1370

1370:                                             ; preds = %1369
  %1371 = load i32, ptr %30, align 4, !tbaa !9
  %1372 = add i32 %1371, 1
  store i32 %1372, ptr %30, align 4, !tbaa !9
  br label %1259, !llvm.loop !59

1373:                                             ; preds = %1259
  br label %1374

1374:                                             ; preds = %1373, %1239
  %1375 = load i32, ptr %34, align 4, !tbaa !9
  %1376 = icmp ugt i32 %1375, 0
  br i1 %1376, label %1377, label %1381

1377:                                             ; preds = %1374
  %1378 = load ptr, ptr %15, align 8, !tbaa !5
  %1379 = load i32, ptr %51, align 4, !tbaa !9
  %1380 = load ptr, ptr %17, align 8, !tbaa !5
  call void @libxsmm_x86_instruction_register_jump_label(ptr noundef %1378, i32 noundef %1379, ptr noundef %1380)
  br label %1381

1381:                                             ; preds = %1377, %1374
  %1382 = load i32, ptr %57, align 4, !tbaa !9
  %1383 = icmp ugt i32 %1382, 0
  br i1 %1383, label %1384, label %1456

1384:                                             ; preds = %1381
  store i32 0, ptr %30, align 4, !tbaa !9
  br label %1385

1385:                                             ; preds = %1452, %1384
  %1386 = load i32, ptr %30, align 4, !tbaa !9
  %1387 = load i32, ptr %33, align 4, !tbaa !9
  %1388 = icmp ult i32 %1386, %1387
  br i1 %1388, label %1389, label %1455

1389:                                             ; preds = %1385
  store i32 0, ptr %31, align 4, !tbaa !9
  br label %1390

1390:                                             ; preds = %1448, %1389
  %1391 = load i32, ptr %31, align 4, !tbaa !9
  %1392 = load i32, ptr %23, align 4, !tbaa !9
  %1393 = icmp ult i32 %1391, %1392
  br i1 %1393, label %1394, label %1451

1394:                                             ; preds = %1390
  call void @llvm.lifetime.start.p0(i64 4, ptr %68) #4
  %1395 = load i32, ptr %30, align 4, !tbaa !9
  %1396 = load i32, ptr %23, align 4, !tbaa !9
  %1397 = mul i32 %1395, %1396
  %1398 = load i32, ptr %31, align 4, !tbaa !9
  %1399 = add i32 %1397, %1398
  store i32 %1399, ptr %68, align 4, !tbaa !9
  %1400 = load i32, ptr %35, align 4, !tbaa !9
  %1401 = icmp ugt i32 %1400, 0
  br i1 %1401, label %1402, label %1409

1402:                                             ; preds = %1394
  %1403 = load ptr, ptr %15, align 8, !tbaa !5
  %1404 = load ptr, ptr %19, align 8, !tbaa !5
  %1405 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1404, i32 0, i32 21
  %1406 = load i8, ptr %1405, align 4, !tbaa !15
  %1407 = load i32, ptr %68, align 4, !tbaa !9
  %1408 = load i32, ptr %68, align 4, !tbaa !9
  call void @libxsmm_x86_instruction_vec_compute_2reg(ptr noundef %1403, i32 noundef 537273970, i8 noundef signext %1406, i32 noundef %1407, i32 noundef %1408)
  br label %1409

1409:                                             ; preds = %1402, %1394
  %1410 = load ptr, ptr %15, align 8, !tbaa !5
  %1411 = load i32, ptr %37, align 4, !tbaa !9
  %1412 = load ptr, ptr %18, align 8, !tbaa !5
  %1413 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %1412, i32 0, i32 5
  %1414 = load i32, ptr %1413, align 4, !tbaa !38
  %1415 = load i32, ptr %21, align 4, !tbaa !9
  %1416 = zext i32 %1415 to i64
  %1417 = mul i64 1, %1416
  %1418 = load ptr, ptr %20, align 8, !tbaa !5
  %1419 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %1418, i32 0, i32 5
  %1420 = load i32, ptr %1419, align 1, !tbaa !57
  %1421 = zext i32 %1420 to i64
  %1422 = mul i64 %1417, %1421
  %1423 = load i32, ptr %30, align 4, !tbaa !9
  %1424 = zext i32 %1423 to i64
  %1425 = mul i64 1, %1424
  %1426 = add i64 %1422, %1425
  %1427 = load i32, ptr %31, align 4, !tbaa !9
  %1428 = load ptr, ptr %20, align 8, !tbaa !5
  %1429 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %1428, i32 0, i32 5
  %1430 = load i32, ptr %1429, align 1, !tbaa !57
  %1431 = mul i32 %1427, %1430
  %1432 = zext i32 %1431 to i64
  %1433 = add i64 %1426, %1432
  %1434 = load i32, ptr %54, align 4, !tbaa !9
  %1435 = load i32, ptr %33, align 4, !tbaa !9
  %1436 = mul i32 %1434, %1435
  %1437 = zext i32 %1436 to i64
  %1438 = add i64 %1433, %1437
  %1439 = load ptr, ptr %19, align 8, !tbaa !5
  %1440 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1439, i32 0, i32 5
  %1441 = load i32, ptr %1440, align 4, !tbaa !39
  %1442 = zext i32 %1441 to i64
  %1443 = mul i64 %1438, %1442
  %1444 = trunc i64 %1443 to i32
  %1445 = load i8, ptr %36, align 1, !tbaa !18
  %1446 = load i32, ptr %68, align 4, !tbaa !9
  %1447 = load i32, ptr %43, align 4, !tbaa !9
  call void @libxsmm_x86_instruction_unified_vec_move(ptr noundef %1410, i32 noundef %1411, i32 noundef %1414, i32 noundef 127, i32 noundef 0, i32 noundef %1444, i8 noundef signext %1445, i32 noundef %1446, i32 noundef 1, i32 noundef %1447, i32 noundef 1)
  call void @llvm.lifetime.end.p0(i64 4, ptr %68) #4
  br label %1448

1448:                                             ; preds = %1409
  %1449 = load i32, ptr %31, align 4, !tbaa !9
  %1450 = add i32 %1449, 1
  store i32 %1450, ptr %31, align 4, !tbaa !9
  br label %1390, !llvm.loop !60

1451:                                             ; preds = %1390
  br label %1452

1452:                                             ; preds = %1451
  %1453 = load i32, ptr %30, align 4, !tbaa !9
  %1454 = add i32 %1453, 1
  store i32 %1454, ptr %30, align 4, !tbaa !9
  br label %1385, !llvm.loop !61

1455:                                             ; preds = %1385
  br label %1551

1456:                                             ; preds = %1381
  store i32 0, ptr %30, align 4, !tbaa !9
  br label %1457

1457:                                             ; preds = %1547, %1456
  %1458 = load i32, ptr %30, align 4, !tbaa !9
  %1459 = load i32, ptr %33, align 4, !tbaa !9
  %1460 = icmp ult i32 %1458, %1459
  br i1 %1460, label %1461, label %1550

1461:                                             ; preds = %1457
  store i32 0, ptr %31, align 4, !tbaa !9
  br label %1462

1462:                                             ; preds = %1543, %1461
  %1463 = load i32, ptr %31, align 4, !tbaa !9
  %1464 = load i32, ptr %23, align 4, !tbaa !9
  %1465 = icmp ult i32 %1463, %1464
  br i1 %1465, label %1466, label %1546

1466:                                             ; preds = %1462
  call void @llvm.lifetime.start.p0(i64 4, ptr %69) #4
  %1467 = load i32, ptr %30, align 4, !tbaa !9
  %1468 = load i32, ptr %23, align 4, !tbaa !9
  %1469 = mul i32 %1467, %1468
  %1470 = load i32, ptr %31, align 4, !tbaa !9
  %1471 = add i32 %1469, %1470
  store i32 %1471, ptr %69, align 4, !tbaa !9
  %1472 = load i32, ptr %35, align 4, !tbaa !9
  %1473 = icmp ugt i32 %1472, 0
  br i1 %1473, label %1474, label %1481

1474:                                             ; preds = %1466
  %1475 = load ptr, ptr %15, align 8, !tbaa !5
  %1476 = load ptr, ptr %19, align 8, !tbaa !5
  %1477 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1476, i32 0, i32 21
  %1478 = load i8, ptr %1477, align 4, !tbaa !15
  %1479 = load i32, ptr %69, align 4, !tbaa !9
  %1480 = load i32, ptr %69, align 4, !tbaa !9
  call void @libxsmm_x86_instruction_vec_compute_2reg(ptr noundef %1475, i32 noundef 537273970, i8 noundef signext %1478, i32 noundef %1479, i32 noundef %1480)
  br label %1481

1481:                                             ; preds = %1474, %1466
  %1482 = load ptr, ptr %15, align 8, !tbaa !5
  %1483 = load i32, ptr %37, align 4, !tbaa !9
  %1484 = load ptr, ptr %18, align 8, !tbaa !5
  %1485 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %1484, i32 0, i32 5
  %1486 = load i32, ptr %1485, align 4, !tbaa !38
  %1487 = load i32, ptr %21, align 4, !tbaa !9
  %1488 = zext i32 %1487 to i64
  %1489 = mul i64 1, %1488
  %1490 = load i32, ptr %26, align 4, !tbaa !9
  %1491 = zext i32 %1490 to i64
  %1492 = mul i64 %1489, %1491
  %1493 = load i32, ptr %25, align 4, !tbaa !9
  %1494 = zext i32 %1493 to i64
  %1495 = mul i64 1, %1494
  %1496 = load i32, ptr %30, align 4, !tbaa !9
  %1497 = zext i32 %1496 to i64
  %1498 = mul i64 %1495, %1497
  %1499 = add i64 %1492, %1498
  %1500 = load i32, ptr %31, align 4, !tbaa !9
  %1501 = load i32, ptr %26, align 4, !tbaa !9
  %1502 = mul i32 %1500, %1501
  %1503 = zext i32 %1502 to i64
  %1504 = add i64 %1499, %1503
  %1505 = load i32, ptr %54, align 4, !tbaa !9
  %1506 = load i32, ptr %33, align 4, !tbaa !9
  %1507 = mul i32 %1505, %1506
  %1508 = load i32, ptr %25, align 4, !tbaa !9
  %1509 = mul i32 %1507, %1508
  %1510 = zext i32 %1509 to i64
  %1511 = add i64 %1504, %1510
  %1512 = load ptr, ptr %19, align 8, !tbaa !5
  %1513 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1512, i32 0, i32 5
  %1514 = load i32, ptr %1513, align 4, !tbaa !39
  %1515 = zext i32 %1514 to i64
  %1516 = mul i64 %1511, %1515
  %1517 = trunc i64 %1516 to i32
  %1518 = load i8, ptr %36, align 1, !tbaa !18
  %1519 = load i32, ptr %69, align 4, !tbaa !9
  %1520 = load i32, ptr %24, align 4, !tbaa !9
  %1521 = icmp ugt i32 %1520, 0
  br i1 %1521, label %1522, label %1527

1522:                                             ; preds = %1481
  %1523 = load i32, ptr %31, align 4, !tbaa !9
  %1524 = load i32, ptr %23, align 4, !tbaa !9
  %1525 = sub i32 %1524, 1
  %1526 = icmp eq i32 %1523, %1525
  br label %1527

1527:                                             ; preds = %1522, %1481
  %1528 = phi i1 [ false, %1481 ], [ %1526, %1522 ]
  %1529 = zext i1 %1528 to i64
  %1530 = select i1 %1528, i32 1, i32 0
  %1531 = load i32, ptr %24, align 4, !tbaa !9
  %1532 = icmp ugt i32 %1531, 0
  br i1 %1532, label %1533, label %1540

1533:                                             ; preds = %1527
  %1534 = load i32, ptr %31, align 4, !tbaa !9
  %1535 = load i32, ptr %23, align 4, !tbaa !9
  %1536 = sub i32 %1535, 1
  %1537 = icmp eq i32 %1534, %1536
  br i1 %1537, label %1538, label %1540

1538:                                             ; preds = %1533
  %1539 = load i32, ptr %41, align 4, !tbaa !9
  br label %1541

1540:                                             ; preds = %1533, %1527
  br label %1541

1541:                                             ; preds = %1540, %1538
  %1542 = phi i32 [ %1539, %1538 ], [ 0, %1540 ]
  call void @libxsmm_x86_instruction_unified_vec_move(ptr noundef %1482, i32 noundef %1483, i32 noundef %1486, i32 noundef 127, i32 noundef 0, i32 noundef %1517, i8 noundef signext %1518, i32 noundef %1519, i32 noundef %1530, i32 noundef %1542, i32 noundef 1)
  call void @llvm.lifetime.end.p0(i64 4, ptr %69) #4
  br label %1543

1543:                                             ; preds = %1541
  %1544 = load i32, ptr %31, align 4, !tbaa !9
  %1545 = add i32 %1544, 1
  store i32 %1545, ptr %31, align 4, !tbaa !9
  br label %1462, !llvm.loop !62

1546:                                             ; preds = %1462
  br label %1547

1547:                                             ; preds = %1546
  %1548 = load i32, ptr %30, align 4, !tbaa !9
  %1549 = add i32 %1548, 1
  store i32 %1549, ptr %30, align 4, !tbaa !9
  br label %1457, !llvm.loop !63

1550:                                             ; preds = %1457
  br label %1551

1551:                                             ; preds = %1550, %1455
  %1552 = load i32, ptr %51, align 4, !tbaa !9
  %1553 = add i32 %1552, 1
  store i32 %1553, ptr %51, align 4, !tbaa !9
  %1554 = load i32, ptr %53, align 4, !tbaa !9
  %1555 = icmp ugt i32 %1554, 1
  br i1 %1555, label %1556, label %1559

1556:                                             ; preds = %1551
  %1557 = load ptr, ptr %15, align 8, !tbaa !5
  %1558 = load i32, ptr %45, align 4, !tbaa !9
  call void @libxsmm_x86_instruction_pop_reg(ptr noundef %1557, i32 noundef %1558)
  br label %1559

1559:                                             ; preds = %1556, %1551
  br label %1560

1560:                                             ; preds = %1559
  %1561 = load i32, ptr %54, align 4, !tbaa !9
  %1562 = add i32 %1561, 1
  store i32 %1562, ptr %54, align 4, !tbaa !9
  br label %430, !llvm.loop !64

1563:                                             ; preds = %430
  %1564 = load i32, ptr %22, align 4, !tbaa !9
  %1565 = load i32, ptr %23, align 4, !tbaa !9
  %1566 = udiv i32 %1564, %1565
  %1567 = icmp ugt i32 %1566, 1
  br i1 %1567, label %1568, label %1786

1568:                                             ; preds = %1563
  %1569 = load i32, ptr %57, align 4, !tbaa !9
  %1570 = icmp ugt i32 %1569, 0
  br i1 %1570, label %1571, label %1679

1571:                                             ; preds = %1568
  %1572 = load ptr, ptr %15, align 8, !tbaa !5
  %1573 = load ptr, ptr %19, align 8, !tbaa !5
  %1574 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1573, i32 0, i32 16
  %1575 = load i32, ptr %1574, align 8, !tbaa !32
  %1576 = load ptr, ptr %18, align 8, !tbaa !5
  %1577 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %1576, i32 0, i32 1
  %1578 = load i32, ptr %1577, align 4, !tbaa !43
  %1579 = load i32, ptr %23, align 4, !tbaa !9
  %1580 = zext i32 %1579 to i64
  %1581 = load ptr, ptr %20, align 8, !tbaa !5
  %1582 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %1581, i32 0, i32 3
  %1583 = load i32, ptr %1582, align 1, !tbaa !46
  %1584 = zext i32 %1583 to i64
  %1585 = mul nsw i64 %1580, %1584
  %1586 = load ptr, ptr %19, align 8, !tbaa !5
  %1587 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1586, i32 0, i32 3
  %1588 = load i32, ptr %1587, align 4, !tbaa !42
  %1589 = zext i32 %1588 to i64
  %1590 = mul nsw i64 %1585, %1589
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef %1572, i32 noundef %1575, i32 noundef %1578, i64 noundef %1590)
  %1591 = load ptr, ptr %15, align 8, !tbaa !5
  %1592 = load ptr, ptr %19, align 8, !tbaa !5
  %1593 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1592, i32 0, i32 16
  %1594 = load i32, ptr %1593, align 8, !tbaa !32
  %1595 = load ptr, ptr %18, align 8, !tbaa !5
  %1596 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %1595, i32 0, i32 5
  %1597 = load i32, ptr %1596, align 4, !tbaa !38
  %1598 = load i32, ptr %23, align 4, !tbaa !9
  %1599 = zext i32 %1598 to i64
  %1600 = load ptr, ptr %20, align 8, !tbaa !5
  %1601 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %1600, i32 0, i32 5
  %1602 = load i32, ptr %1601, align 1, !tbaa !57
  %1603 = zext i32 %1602 to i64
  %1604 = mul nsw i64 %1599, %1603
  %1605 = load ptr, ptr %19, align 8, !tbaa !5
  %1606 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1605, i32 0, i32 5
  %1607 = load i32, ptr %1606, align 4, !tbaa !39
  %1608 = zext i32 %1607 to i64
  %1609 = mul nsw i64 %1604, %1608
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef %1591, i32 noundef %1594, i32 noundef %1597, i64 noundef %1609)
  %1610 = load ptr, ptr %15, align 8, !tbaa !5
  %1611 = load i32, ptr %45, align 4, !tbaa !9
  call void @libxsmm_x86_instruction_pop_reg(ptr noundef %1610, i32 noundef %1611)
  %1612 = load ptr, ptr %15, align 8, !tbaa !5
  %1613 = load ptr, ptr %19, align 8, !tbaa !5
  %1614 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1613, i32 0, i32 18
  %1615 = load i32, ptr %1614, align 8, !tbaa !29
  %1616 = load ptr, ptr %18, align 8, !tbaa !5
  %1617 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %1616, i32 0, i32 22
  %1618 = load i32, ptr %1617, align 4, !tbaa !31
  %1619 = load i32, ptr %22, align 4, !tbaa !9
  %1620 = zext i32 %1619 to i64
  %1621 = load i32, ptr %23, align 4, !tbaa !9
  %1622 = zext i32 %1621 to i64
  %1623 = sdiv i64 %1620, %1622
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef %1612, i32 noundef %1615, i32 noundef %1618, i64 noundef %1623)
  %1624 = load ptr, ptr %15, align 8, !tbaa !5
  %1625 = load ptr, ptr %19, align 8, !tbaa !5
  %1626 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1625, i32 0, i32 19
  %1627 = load i32, ptr %1626, align 4, !tbaa !56
  %1628 = load ptr, ptr %16, align 8, !tbaa !5
  call void @libxsmm_x86_instruction_jump_back_to_label(ptr noundef %1624, i32 noundef %1627, ptr noundef %1628)
  %1629 = load ptr, ptr %15, align 8, !tbaa !5
  %1630 = load ptr, ptr %19, align 8, !tbaa !5
  %1631 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1630, i32 0, i32 17
  %1632 = load i32, ptr %1631, align 4, !tbaa !65
  %1633 = load ptr, ptr %18, align 8, !tbaa !5
  %1634 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %1633, i32 0, i32 1
  %1635 = load i32, ptr %1634, align 4, !tbaa !43
  %1636 = load i32, ptr %22, align 4, !tbaa !9
  %1637 = zext i32 %1636 to i64
  %1638 = load i32, ptr %23, align 4, !tbaa !9
  %1639 = zext i32 %1638 to i64
  %1640 = sdiv i64 %1637, %1639
  %1641 = load i32, ptr %23, align 4, !tbaa !9
  %1642 = zext i32 %1641 to i64
  %1643 = mul nsw i64 %1640, %1642
  %1644 = load ptr, ptr %20, align 8, !tbaa !5
  %1645 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %1644, i32 0, i32 3
  %1646 = load i32, ptr %1645, align 1, !tbaa !46
  %1647 = zext i32 %1646 to i64
  %1648 = mul nsw i64 %1643, %1647
  %1649 = load ptr, ptr %19, align 8, !tbaa !5
  %1650 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1649, i32 0, i32 3
  %1651 = load i32, ptr %1650, align 4, !tbaa !42
  %1652 = zext i32 %1651 to i64
  %1653 = mul nsw i64 %1648, %1652
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef %1629, i32 noundef %1632, i32 noundef %1635, i64 noundef %1653)
  %1654 = load ptr, ptr %15, align 8, !tbaa !5
  %1655 = load ptr, ptr %19, align 8, !tbaa !5
  %1656 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1655, i32 0, i32 17
  %1657 = load i32, ptr %1656, align 4, !tbaa !65
  %1658 = load ptr, ptr %18, align 8, !tbaa !5
  %1659 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %1658, i32 0, i32 5
  %1660 = load i32, ptr %1659, align 4, !tbaa !38
  %1661 = load i32, ptr %22, align 4, !tbaa !9
  %1662 = zext i32 %1661 to i64
  %1663 = load i32, ptr %23, align 4, !tbaa !9
  %1664 = zext i32 %1663 to i64
  %1665 = sdiv i64 %1662, %1664
  %1666 = load i32, ptr %23, align 4, !tbaa !9
  %1667 = zext i32 %1666 to i64
  %1668 = mul nsw i64 %1665, %1667
  %1669 = load ptr, ptr %20, align 8, !tbaa !5
  %1670 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %1669, i32 0, i32 5
  %1671 = load i32, ptr %1670, align 1, !tbaa !57
  %1672 = zext i32 %1671 to i64
  %1673 = mul nsw i64 %1668, %1672
  %1674 = load ptr, ptr %19, align 8, !tbaa !5
  %1675 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1674, i32 0, i32 5
  %1676 = load i32, ptr %1675, align 4, !tbaa !39
  %1677 = zext i32 %1676 to i64
  %1678 = mul nsw i64 %1673, %1677
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef %1654, i32 noundef %1657, i32 noundef %1660, i64 noundef %1678)
  br label %1785

1679:                                             ; preds = %1568
  %1680 = load ptr, ptr %15, align 8, !tbaa !5
  %1681 = load ptr, ptr %19, align 8, !tbaa !5
  %1682 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1681, i32 0, i32 16
  %1683 = load i32, ptr %1682, align 8, !tbaa !32
  %1684 = load ptr, ptr %18, align 8, !tbaa !5
  %1685 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %1684, i32 0, i32 1
  %1686 = load i32, ptr %1685, align 4, !tbaa !43
  %1687 = load i32, ptr %23, align 4, !tbaa !9
  %1688 = zext i32 %1687 to i64
  %1689 = load i32, ptr %26, align 4, !tbaa !9
  %1690 = zext i32 %1689 to i64
  %1691 = mul nsw i64 %1688, %1690
  %1692 = load i32, ptr %52, align 4, !tbaa !9
  %1693 = zext i32 %1692 to i64
  %1694 = mul nsw i64 %1691, %1693
  %1695 = load ptr, ptr %19, align 8, !tbaa !5
  %1696 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1695, i32 0, i32 3
  %1697 = load i32, ptr %1696, align 4, !tbaa !42
  %1698 = zext i32 %1697 to i64
  %1699 = mul nsw i64 %1694, %1698
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef %1680, i32 noundef %1683, i32 noundef %1686, i64 noundef %1699)
  %1700 = load ptr, ptr %15, align 8, !tbaa !5
  %1701 = load ptr, ptr %19, align 8, !tbaa !5
  %1702 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1701, i32 0, i32 16
  %1703 = load i32, ptr %1702, align 8, !tbaa !32
  %1704 = load ptr, ptr %18, align 8, !tbaa !5
  %1705 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %1704, i32 0, i32 5
  %1706 = load i32, ptr %1705, align 4, !tbaa !38
  %1707 = load i32, ptr %23, align 4, !tbaa !9
  %1708 = zext i32 %1707 to i64
  %1709 = load i32, ptr %26, align 4, !tbaa !9
  %1710 = zext i32 %1709 to i64
  %1711 = mul nsw i64 %1708, %1710
  %1712 = load ptr, ptr %19, align 8, !tbaa !5
  %1713 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1712, i32 0, i32 5
  %1714 = load i32, ptr %1713, align 4, !tbaa !39
  %1715 = zext i32 %1714 to i64
  %1716 = mul nsw i64 %1711, %1715
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef %1700, i32 noundef %1703, i32 noundef %1706, i64 noundef %1716)
  %1717 = load ptr, ptr %15, align 8, !tbaa !5
  %1718 = load i32, ptr %45, align 4, !tbaa !9
  call void @libxsmm_x86_instruction_pop_reg(ptr noundef %1717, i32 noundef %1718)
  %1719 = load ptr, ptr %15, align 8, !tbaa !5
  %1720 = load ptr, ptr %19, align 8, !tbaa !5
  %1721 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1720, i32 0, i32 18
  %1722 = load i32, ptr %1721, align 8, !tbaa !29
  %1723 = load ptr, ptr %18, align 8, !tbaa !5
  %1724 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %1723, i32 0, i32 22
  %1725 = load i32, ptr %1724, align 4, !tbaa !31
  %1726 = load i32, ptr %22, align 4, !tbaa !9
  %1727 = zext i32 %1726 to i64
  %1728 = load i32, ptr %23, align 4, !tbaa !9
  %1729 = zext i32 %1728 to i64
  %1730 = sdiv i64 %1727, %1729
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef %1719, i32 noundef %1722, i32 noundef %1725, i64 noundef %1730)
  %1731 = load ptr, ptr %15, align 8, !tbaa !5
  %1732 = load ptr, ptr %19, align 8, !tbaa !5
  %1733 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1732, i32 0, i32 19
  %1734 = load i32, ptr %1733, align 4, !tbaa !56
  %1735 = load ptr, ptr %16, align 8, !tbaa !5
  call void @libxsmm_x86_instruction_jump_back_to_label(ptr noundef %1731, i32 noundef %1734, ptr noundef %1735)
  %1736 = load ptr, ptr %15, align 8, !tbaa !5
  %1737 = load ptr, ptr %19, align 8, !tbaa !5
  %1738 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1737, i32 0, i32 17
  %1739 = load i32, ptr %1738, align 4, !tbaa !65
  %1740 = load ptr, ptr %18, align 8, !tbaa !5
  %1741 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %1740, i32 0, i32 1
  %1742 = load i32, ptr %1741, align 4, !tbaa !43
  %1743 = load i32, ptr %22, align 4, !tbaa !9
  %1744 = zext i32 %1743 to i64
  %1745 = load i32, ptr %23, align 4, !tbaa !9
  %1746 = zext i32 %1745 to i64
  %1747 = sdiv i64 %1744, %1746
  %1748 = load i32, ptr %23, align 4, !tbaa !9
  %1749 = zext i32 %1748 to i64
  %1750 = mul nsw i64 %1747, %1749
  %1751 = load i32, ptr %26, align 4, !tbaa !9
  %1752 = zext i32 %1751 to i64
  %1753 = mul nsw i64 %1750, %1752
  %1754 = load i32, ptr %52, align 4, !tbaa !9
  %1755 = zext i32 %1754 to i64
  %1756 = mul nsw i64 %1753, %1755
  %1757 = load ptr, ptr %19, align 8, !tbaa !5
  %1758 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1757, i32 0, i32 3
  %1759 = load i32, ptr %1758, align 4, !tbaa !42
  %1760 = zext i32 %1759 to i64
  %1761 = mul nsw i64 %1756, %1760
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef %1736, i32 noundef %1739, i32 noundef %1742, i64 noundef %1761)
  %1762 = load ptr, ptr %15, align 8, !tbaa !5
  %1763 = load ptr, ptr %19, align 8, !tbaa !5
  %1764 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1763, i32 0, i32 17
  %1765 = load i32, ptr %1764, align 4, !tbaa !65
  %1766 = load ptr, ptr %18, align 8, !tbaa !5
  %1767 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %1766, i32 0, i32 5
  %1768 = load i32, ptr %1767, align 4, !tbaa !38
  %1769 = load i32, ptr %22, align 4, !tbaa !9
  %1770 = zext i32 %1769 to i64
  %1771 = load i32, ptr %23, align 4, !tbaa !9
  %1772 = zext i32 %1771 to i64
  %1773 = sdiv i64 %1770, %1772
  %1774 = load i32, ptr %23, align 4, !tbaa !9
  %1775 = zext i32 %1774 to i64
  %1776 = mul nsw i64 %1773, %1775
  %1777 = load i32, ptr %26, align 4, !tbaa !9
  %1778 = zext i32 %1777 to i64
  %1779 = mul nsw i64 %1776, %1778
  %1780 = load ptr, ptr %19, align 8, !tbaa !5
  %1781 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1780, i32 0, i32 5
  %1782 = load i32, ptr %1781, align 4, !tbaa !39
  %1783 = zext i32 %1782 to i64
  %1784 = mul nsw i64 %1779, %1783
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef %1762, i32 noundef %1765, i32 noundef %1768, i64 noundef %1784)
  br label %1785

1785:                                             ; preds = %1679, %1571
  br label %1786

1786:                                             ; preds = %1785, %1563
  %1787 = load i32, ptr %34, align 4, !tbaa !9
  %1788 = icmp eq i32 %1787, 0
  br i1 %1788, label %1789, label %1793

1789:                                             ; preds = %1786
  %1790 = load ptr, ptr %15, align 8, !tbaa !5
  %1791 = load i32, ptr %50, align 4, !tbaa !9
  %1792 = load ptr, ptr %17, align 8, !tbaa !5
  call void @libxsmm_x86_instruction_register_jump_label(ptr noundef %1790, i32 noundef %1791, ptr noundef %1792)
  br label %1793

1793:                                             ; preds = %1789, %1786
  %1794 = load ptr, ptr %15, align 8, !tbaa !5
  %1795 = load ptr, ptr %18, align 8, !tbaa !5
  %1796 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %1795, i32 0, i32 12
  %1797 = load i32, ptr %1796, align 4, !tbaa !28
  call void @libxsmm_x86_instruction_pop_reg(ptr noundef %1794, i32 noundef %1797)
  call void @llvm.lifetime.end.p0(i64 4, ptr %62) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %61) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %60) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %59) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %58) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %57) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %56) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %55) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %54) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %53) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %52) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %51) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %50) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %49) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %48) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %47) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %46) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %45) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #4
  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 1, ptr %36) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #4
  ret void
}

declare void @libxsmm_x86_instruction_jump_back_to_label(ptr noundef, i32 noundef, ptr noundef) #3

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

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

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) #3

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

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) #3

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

declare void @libxsmm_generator_hinstrps_avx(ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef) #3

declare void @libxsmm_generator_hinstrps_avx512(ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef) #3

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

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

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 = { noreturn nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { nounwind }
attributes #5 = { noreturn nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!12, !10, i64 24}
!12 = !{!"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, !13, i64 33, !13, 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}
!13 = !{!"long long", !7, i64 0}
!14 = !{!"short", !7, i64 0}
!15 = !{!16, !7, i64 84}
!16 = !{!"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, !17, 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}
!17 = !{!"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}
!18 = !{!7, !7, i64 0}
!19 = !{!20, !10, i64 100}
!20 = !{!"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}
!21 = !{!20, !10, i64 104}
!22 = !{!20, !10, i64 108}
!23 = !{!20, !10, i64 40}
!24 = !{!25, !10, i64 28}
!25 = !{!"libxsmm_generated_code", !6, i64 0, !10, i64 8, !10, i64 12, !10, i64 16, !10, i64 20, !10, i64 24, !10, i64 28}
!26 = distinct !{!26, !27}
!27 = !{!"llvm.loop.mustprogress"}
!28 = !{!20, !10, i64 48}
!29 = !{!16, !10, i64 72}
!30 = !{!16, !10, i64 80}
!31 = !{!20, !10, i64 88}
!32 = !{!16, !10, i64 64}
!33 = !{!16, !10, i64 52}
!34 = distinct !{!34, !27}
!35 = distinct !{!35, !27}
!36 = distinct !{!36, !27}
!37 = distinct !{!37, !27}
!38 = !{!20, !10, i64 20}
!39 = !{!16, !10, i64 20}
!40 = distinct !{!40, !27}
!41 = distinct !{!41, !27}
!42 = !{!16, !10, i64 12}
!43 = !{!20, !10, i64 4}
!44 = !{!20, !10, i64 96}
!45 = !{!20, !10, i64 12}
!46 = !{!12, !10, i64 12}
!47 = distinct !{!47, !27}
!48 = distinct !{!48, !27}
!49 = distinct !{!49, !27}
!50 = distinct !{!50, !27}
!51 = distinct !{!51, !27}
!52 = !{!16, !10, i64 0}
!53 = distinct !{!53, !27}
!54 = distinct !{!54, !27}
!55 = distinct !{!55, !27}
!56 = !{!16, !10, i64 76}
!57 = !{!12, !10, i64 20}
!58 = distinct !{!58, !27}
!59 = distinct !{!59, !27}
!60 = distinct !{!60, !27}
!61 = distinct !{!61, !27}
!62 = distinct !{!62, !27}
!63 = distinct !{!63, !27}
!64 = distinct !{!64, !27}
!65 = !{!16, !10, i64 68}


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

@.str.2 = external hidden unnamed_addr constant [112 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [22 x i8], align 1
@__PRETTY_FUNCTION__.libxsmm_generator_packed_spgemm_bcsc_bsparse_kloop_bfdot_avx512 = external hidden unnamed_addr constant [417 x i8], align 1

; Function Attrs: nounwind uwtable
declare dso_local i32 @libxsmm_generator_x86_packed_spgemm_bcsc_pf_dist_B() local_unnamed_addr #0

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

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

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

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

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

declare i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef) local_unnamed_addr #3

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

declare void @libxsmm_x86_instruction_jump_to_label(ptr noundef, i32 noundef, i32 noundef, ptr noundef) local_unnamed_addr #3

declare void @libxsmm_x86_instruction_register_jump_label(ptr noundef, i32 noundef, ptr noundef) local_unnamed_addr #3

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

declare void @libxsmm_x86_instruction_alu_mem(ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #3

declare i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef) local_unnamed_addr #3

declare void @libxsmm_x86_instruction_register_jump_back_label(ptr noundef, ptr noundef) local_unnamed_addr #3

; Function Attrs: nounwind uwtable
define dso_local void @libxsmm_generator_packed_spgemm_bcsc_bsparse_kloop_bfdot_avx512(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr nocapture noundef readonly %3, ptr nocapture noundef readonly %4, ptr noundef %5, i32 noundef %6, i32 noundef %7, i32 noundef %8, i32 noundef %9, i32 noundef %10, i32 noundef %11, i32 noundef %12, i32 noundef %13) local_unnamed_addr #0 {
  %15 = alloca i32, align 4
  %16 = alloca i32, align 4
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %15) #4
  store i32 0, ptr %15, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %16) #4
  store i32 0, ptr %16, align 4, !tbaa !5
  %17 = getelementptr inbounds i8, ptr %5, i64 24
  %18 = load i32, ptr %17, align 1, !tbaa !9
  %19 = and i32 %18, 4
  %.not.not = icmp eq i32 %19, 0
  %20 = getelementptr inbounds i8, ptr %5, i64 29
  %21 = tail call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef nonnull %20) #4
  %.fr805 = freeze i32 %21
  %22 = icmp eq i32 %.fr805, 2
  %23 = tail call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef nonnull %20) #4
  %24 = icmp eq i32 %23, 2
  br i1 %24, label %28, label %25

25:                                               ; preds = %14
  %26 = getelementptr inbounds i8, ptr %4, i64 84
  %27 = load i8, ptr %26, align 4, !tbaa !13
  br label %28

28:                                               ; preds = %14, %25
  %29 = phi i8 [ %27, %25 ], [ 121, %14 ]
  %30 = tail call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef nonnull %20) #4
  %31 = icmp eq i32 %30, 2
  %32 = select i1 %31, i32 -528017809, i32 537138704
  %33 = tail call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef nonnull %20) #4
  %34 = icmp eq i32 %33, 12
  br i1 %34, label %35, label %.critedge

35:                                               ; preds = %28
  %36 = tail call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef nonnull %20) #4
  %37 = icmp eq i32 %36, 8
  br i1 %37, label %38, label %.critedge

38:                                               ; preds = %35
  %39 = load i32, ptr %17, align 1, !tbaa !9
  %40 = and i32 %39, 256
  %41 = icmp eq i32 %40, 0
  br i1 %41, label %42, label %.critedge

42:                                               ; preds = %38
  %43 = and i32 %39, 512
  %44 = icmp ne i32 %43, 0
  br label %.critedge

.critedge:                                        ; preds = %28, %42, %38, %35
  %45 = phi i1 [ false, %38 ], [ false, %35 ], [ %44, %42 ], [ false, %28 ]
  %.fr772 = freeze i1 %45
  %46 = getelementptr inbounds i8, ptr %3, i64 100
  %47 = load i32, ptr %46, align 4, !tbaa !17
  %48 = getelementptr inbounds i8, ptr %3, i64 104
  %49 = load i32, ptr %48, align 4, !tbaa !19
  %50 = getelementptr inbounds i8, ptr %3, i64 108
  %51 = load i32, ptr %50, align 4, !tbaa !20
  %52 = add i32 %12, 1
  %53 = lshr i32 %52, 1
  %54 = icmp ne i32 %6, 0
  %55 = zext i1 %54 to i32
  %56 = getelementptr inbounds i8, ptr %3, i64 40
  %57 = load i32, ptr %56, align 4, !tbaa !21
  %58 = getelementptr inbounds i8, ptr %4, i64 84
  %59 = load i8, ptr %58, align 4, !tbaa !13
  %60 = tail call i32 @libxsmm_generator_x86_packed_spgemm_bcsc_pf_dist_B()
  %61 = getelementptr inbounds i8, ptr %0, i64 28
  %62 = load i32, ptr %61, align 4, !tbaa !22
  %63 = icmp ult i32 %62, 1101
  %spec.select667 = select i1 %63, i32 14, i32 3
  %64 = tail call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef nonnull %20) #4
  %65 = icmp eq i32 %64, 1
  br i1 %65, label %69, label %66

66:                                               ; preds = %.critedge
  %67 = tail call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef nonnull %20) #4
  %68 = icmp eq i32 %67, 12
  %spec.select668 = select i1 %68, i32 4, i32 2
  br label %69

69:                                               ; preds = %66, %.critedge
  %.0645 = phi i32 [ 1, %.critedge ], [ %spec.select668, %66 ]
  %70 = load i32, ptr %17, align 1, !tbaa !9
  %71 = and i32 %70, 1
  %.not.not656.not.not.not = icmp eq i32 %71, 0
  br i1 %.not.not656.not.not.not, label %72, label %.thread

72:                                               ; preds = %69
  %73 = tail call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef nonnull %20) #4
  %74 = icmp eq i32 %73, 1
  br i1 %74, label %116, label %79

.thread:                                          ; preds = %69
  %75 = udiv i32 %12, %.0645
  %76 = urem i32 %75, %11
  %77 = tail call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef nonnull %20) #4
  %78 = icmp eq i32 %77, 1
  br i1 %78, label %.thread695.sink.split, label %.thread688

79:                                               ; preds = %72
  %80 = tail call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef nonnull %20) #4
  %81 = icmp eq i32 %80, 12
  br i1 %81, label %88, label %.thread844

.thread844:                                       ; preds = %79
  %82 = tail call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef nonnull %20) #4
  br label %116

.thread688:                                       ; preds = %.thread
  %83 = tail call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef nonnull %20) #4
  %84 = icmp eq i32 %83, 12
  br i1 %84, label %85, label %91

85:                                               ; preds = %.thread688
  %86 = add i32 %12, 3
  %87 = lshr i32 %86, 2
  br label %.thread695.sink.split

88:                                               ; preds = %79
  %89 = add i32 %12, 3
  %90 = lshr i32 %89, 2
  br label %116

91:                                               ; preds = %.thread688
  %92 = tail call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef nonnull %20) #4
  %93 = icmp ne i32 %92, 2
  %brmerge = or i1 %.not.not656.not.not.not, %93
  br i1 %brmerge, label %.thread695, label %.thread695.sink.split

.thread695.sink.split:                            ; preds = %91, %.thread, %85
  %.sink865 = phi i32 [ %87, %85 ], [ %12, %.thread ], [ %53, %91 ]
  %.3626706.ph = phi i32 [ 537209368, %85 ], [ 537209368, %.thread ], [ 537209209, %91 ]
  %.0647702.ph = phi i32 [ 805643856, %85 ], [ 805643960, %.thread ], [ -268032430, %91 ]
  %94 = add i32 %11, -1
  %95 = add i32 %94, %.sink865
  %96 = udiv i32 %95, %11
  br label %.thread695

.thread695:                                       ; preds = %.thread695.sink.split, %91
  %.3626706 = phi i32 [ 0, %91 ], [ %.3626706.ph, %.thread695.sink.split ]
  %.3633704 = phi i32 [ %53, %91 ], [ %96, %.thread695.sink.split ]
  %.0647702 = phi i32 [ -268032430, %91 ], [ %.0647702.ph, %.thread695.sink.split ]
  %97 = lshr i32 %11, 1
  %98 = icmp eq i32 %76, %97
  br i1 %98, label %99, label %102

99:                                               ; preds = %.thread695
  %100 = icmp eq i8 %59, 122
  %101 = select i1 %100, i8 121, i8 120
  br label %.thread710

102:                                              ; preds = %.thread695
  %103 = lshr i32 %11, 2
  %104 = icmp eq i32 %76, %103
  br i1 %104, label %.thread710, label %105

105:                                              ; preds = %102
  %106 = lshr i32 %11, 3
  %107 = icmp eq i32 %76, %106
  br i1 %107, label %108, label %111

108:                                              ; preds = %105
  %109 = icmp eq i32 %76, 2
  %110 = select i1 %109, i32 545725200, i32 537270800
  br label %.thread710

111:                                              ; preds = %105
  %112 = lshr i32 %11, 4
  %113 = icmp eq i32 %76, %112
  %114 = icmp ne i32 %76, 0
  %or.cond = and i1 %113, %114
  br i1 %or.cond, label %115, label %.thread710

115:                                              ; preds = %111
  br label %.thread710

116:                                              ; preds = %.thread844, %72, %88
  %.0647.ph = phi i32 [ -268032430, %.thread844 ], [ 805643960, %72 ], [ 805643856, %88 ]
  %.3633.ph = phi i32 [ %53, %.thread844 ], [ %12, %72 ], [ %90, %88 ]
  %117 = icmp ugt i32 %.3633.ph, 4
  br i1 %117, label %.preheader763, label %.thread710

.preheader763:                                    ; preds = %116, %.preheader763
  %.4634 = phi i32 [ %120, %.preheader763 ], [ 4, %116 ]
  %118 = urem i32 %.3633.ph, %.4634
  %119 = udiv i32 %.3633.ph, %.4634
  %.not = icmp eq i32 %118, 0
  %120 = add i32 %.4634, -1
  br i1 %.not, label %.thread710, label %.preheader763, !llvm.loop !24

.thread710:                                       ; preds = %.preheader763, %115, %111, %108, %99, %102, %116
  %.0636722 = phi i32 [ 537138704, %116 ], [ 537138704, %102 ], [ 537138704, %111 ], [ 537270800, %115 ], [ %110, %108 ], [ 537138704, %99 ], [ 537138704, %.preheader763 ]
  %.0637721 = phi i8 [ %59, %116 ], [ 120, %102 ], [ %59, %111 ], [ 120, %115 ], [ 120, %108 ], [ %101, %99 ], [ %59, %.preheader763 ]
  %121 = phi i1 [ true, %116 ], [ false, %102 ], [ true, %111 ], [ false, %115 ], [ false, %108 ], [ false, %99 ], [ true, %.preheader763 ]
  %122 = phi i32 [ 1, %116 ], [ 0, %102 ], [ 1, %111 ], [ 0, %115 ], [ 0, %108 ], [ 0, %99 ], [ 1, %.preheader763 ]
  %.0639682701720 = phi i32 [ 0, %116 ], [ %76, %102 ], [ %76, %111 ], [ 1, %115 ], [ %76, %108 ], [ %76, %99 ], [ 0, %.preheader763 ]
  %.0647703719 = phi i32 [ %.0647.ph, %116 ], [ %.0647702, %102 ], [ %.0647702, %111 ], [ %.0647702, %115 ], [ %.0647702, %108 ], [ %.0647702, %99 ], [ %.0647.ph, %.preheader763 ]
  %.3626707718 = phi i32 [ 0, %116 ], [ %.3626706, %102 ], [ %.3626706, %111 ], [ %.3626706, %115 ], [ %.3626706, %108 ], [ %.3626706, %99 ], [ 0, %.preheader763 ]
  %.0641 = phi i32 [ 1, %116 ], [ 1, %102 ], [ 1, %111 ], [ 1, %115 ], [ 1, %108 ], [ 1, %99 ], [ %119, %.preheader763 ]
  %.5635 = phi i32 [ %.3633.ph, %116 ], [ %.3633704, %102 ], [ %.3633704, %111 ], [ %.3633704, %115 ], [ %.3633704, %108 ], [ %.3633704, %99 ], [ %.4634, %.preheader763 ]
  call void @libxsmm_spgemm_max_mn_blocking_factors_x86(ptr noundef %0, i32 noundef %13, ptr noundef nonnull %15, ptr noundef nonnull %16)
  %123 = load i32, ptr %16, align 4, !tbaa !5
  %124 = mul i32 %123, %8
  %125 = udiv i32 %13, %123
  %126 = add i32 %125, 2
  %127 = select i1 %54, i32 %126, i32 2
  %128 = load i32, ptr %61, align 4, !tbaa !22
  %129 = icmp ult i32 %128, 1101
  %spec.select670 = select i1 %129, i32 15, i32 2
  %spec.select671 = select i1 %129, i32 15, i32 1
  %.not657 = icmp eq i32 %8, 0
  br i1 %.not657, label %130, label %131

130:                                              ; preds = %.thread710
  call void @__assert_fail(ptr noundef nonnull @.str.3, ptr noundef nonnull @.str.2, i32 noundef 927, ptr noundef nonnull @__PRETTY_FUNCTION__.libxsmm_generator_packed_spgemm_bcsc_bsparse_kloop_bfdot_avx512) #5
  unreachable

131:                                              ; preds = %.thread710
  %132 = getelementptr inbounds i8, ptr %3, i64 48
  %133 = load i32, ptr %132, align 4, !tbaa !26
  call void @libxsmm_x86_instruction_push_reg(ptr noundef nonnull %0, i32 noundef %133) #4
  br i1 %.not.not, label %134, label %137

134:                                              ; preds = %131
  %135 = getelementptr inbounds i8, ptr %4, i64 72
  %136 = load i32, ptr %135, align 8, !tbaa !27
  call void @libxsmm_x86_instruction_alu_reg(ptr noundef nonnull %0, i32 noundef %136, i32 noundef %49, i32 noundef %51) #4
  call void @libxsmm_x86_instruction_jump_to_label(ptr noundef nonnull %0, i32 noundef 30101, i32 noundef %55, ptr noundef %2) #4
  br label %137

137:                                              ; preds = %134, %131
  %138 = udiv i32 %7, %8
  %139 = icmp ugt i32 %138, 1
  br i1 %139, label %140, label %148

140:                                              ; preds = %137
  %141 = getelementptr inbounds i8, ptr %4, i64 80
  %142 = load i32, ptr %141, align 8, !tbaa !28
  %143 = getelementptr inbounds i8, ptr %3, i64 88
  %144 = load i32, ptr %143, align 4, !tbaa !29
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef nonnull %0, i32 noundef %142, i32 noundef %144, i64 noundef 0) #4
  call void @libxsmm_x86_instruction_register_jump_back_label(ptr noundef nonnull %0, ptr noundef %1) #4
  %145 = getelementptr inbounds i8, ptr %4, i64 64
  %146 = load i32, ptr %145, align 8, !tbaa !30
  %147 = load i32, ptr %143, align 4, !tbaa !29
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef nonnull %0, i32 noundef %146, i32 noundef %147, i64 noundef 1) #4
  call void @libxsmm_x86_instruction_push_reg(ptr noundef nonnull %0, i32 noundef %49) #4
  br label %148

148:                                              ; preds = %140, %137
  %.not804 = icmp ugt i32 %123, %13
  br i1 %.not804, label %._crit_edge801, label %.lr.ph800

.lr.ph800:                                        ; preds = %148
  %149 = icmp ugt i32 %125, 1
  %150 = getelementptr inbounds i8, ptr %4, i64 52
  %151 = getelementptr inbounds i8, ptr %3, i64 20
  %152 = getelementptr inbounds i8, ptr %4, i64 20
  %153 = icmp ne i32 %9, 0
  %154 = add i32 %8, -1
  %155 = getelementptr inbounds i8, ptr %4, i64 72
  %156 = zext i32 %12 to i64
  %157 = getelementptr inbounds i8, ptr %4, i64 12
  %158 = getelementptr inbounds i8, ptr %4, i64 64
  %159 = getelementptr inbounds i8, ptr %3, i64 4
  %160 = zext i32 %10 to i64
  %161 = getelementptr inbounds i8, ptr %4, i64 80
  %162 = getelementptr inbounds i8, ptr %3, i64 96
  %163 = mul i32 %13, %12
  %164 = getelementptr inbounds i8, ptr %3, i64 12
  %factor.op.mul774 = mul i32 %.0645, %11
  %.not806 = icmp eq i32 %.5635, 0
  %165 = getelementptr inbounds i8, ptr %5, i64 12
  %.not666 = icmp ne i32 %.0639682701720, 0
  %166 = add i32 %.5635, -1
  %167 = add i32 %124, %8
  %.not665 = icmp ne i32 %60, 0
  %168 = zext i32 %60 to i64
  %169 = zext i32 %13 to i64
  %170 = mul nuw i64 %169, %156
  %171 = mul i64 %170, %168
  %172 = icmp ugt i32 %.0641, 1
  %173 = zext i32 %.5635 to i64
  %174 = zext nneg i32 %.0645 to i64
  %175 = mul nuw nsw i64 %173, %174
  %176 = mul i64 %175, %160
  %177 = zext i32 %.0641 to i64
  %178 = getelementptr inbounds i8, ptr %4, i64 76
  %179 = add i32 %124, 1
  %180 = getelementptr inbounds i8, ptr %5, i64 20
  %181 = select i1 %.not.not656.not.not.not, i64 %160, i64 1
  %.sink.v = mul nuw nsw i64 %181, %156
  br label %182

182:                                              ; preds = %.lr.ph800, %479
  %.0644797 = phi i32 [ 0, %.lr.ph800 ], [ %480, %479 ]
  %.0646796 = phi i32 [ %127, %.lr.ph800 ], [ %477, %479 ]
  br i1 %149, label %183, label %184

183:                                              ; preds = %182
  call void @libxsmm_x86_instruction_push_reg(ptr noundef %0, i32 noundef %49) #4
  br label %184

184:                                              ; preds = %183, %182
  store i32 0, ptr %15, align 4, !tbaa !5
  %185 = load i32, ptr %16, align 4, !tbaa !5
  %.not810 = icmp eq i32 %185, 0
  br i1 %.not.not, label %197, label %.preheader761

.preheader761:                                    ; preds = %184
  br i1 %.not810, label %.loopexit758.thread854, label %.preheader749

.preheader749:                                    ; preds = %.preheader761, %.preheader749.backedge
  %.0621764 = phi i32 [ %.0621764.be, %.preheader749.backedge ], [ 0, %.preheader761 ]
  %186 = load i32, ptr %15, align 4, !tbaa !5
  %187 = mul i32 %186, %8
  %188 = add i32 %187, %.0621764
  %189 = load i32, ptr %150, align 4, !tbaa !31
  %190 = load i8, ptr %58, align 4, !tbaa !13
  call void @libxsmm_x86_instruction_vec_compute_3reg(ptr noundef %0, i32 noundef %189, i8 noundef signext %190, i32 noundef %188, i32 noundef %188, i32 noundef %188) #4
  %191 = add nuw i32 %.0621764, 1
  %exitcond.not = icmp eq i32 %191, %8
  br i1 %exitcond.not, label %192, label %.preheader749.backedge

.preheader749.backedge:                           ; preds = %.preheader749, %192
  %.0621764.be = phi i32 [ %191, %.preheader749 ], [ 0, %192 ]
  br label %.preheader749, !llvm.loop !32

192:                                              ; preds = %.preheader749
  %193 = load i32, ptr %15, align 4, !tbaa !5
  %194 = add i32 %193, 1
  store i32 %194, ptr %15, align 4, !tbaa !5
  %195 = load i32, ptr %16, align 4, !tbaa !5
  %196 = icmp ult i32 %194, %195
  br i1 %196, label %.preheader749.backedge, label %.loopexit758

197:                                              ; preds = %184
  br i1 %.not.not656.not.not.not, label %.preheader757, label %.preheader759

.preheader759:                                    ; preds = %197
  br i1 %.not810, label %.loopexit758.thread, label %.preheader748

.preheader757:                                    ; preds = %197
  br i1 %.not810, label %.loopexit758.thread, label %.preheader747

.preheader748:                                    ; preds = %.preheader759, %.preheader748.backedge
  %.1622765 = phi i32 [ %.1622765.be, %.preheader748.backedge ], [ 0, %.preheader759 ]
  %198 = load i32, ptr %15, align 4, !tbaa !5
  %199 = mul i32 %198, %8
  %200 = add i32 %199, %.1622765
  %201 = load i32, ptr %150, align 4, !tbaa !31
  %202 = load i8, ptr %58, align 4, !tbaa !13
  call void @libxsmm_x86_instruction_vec_compute_3reg(ptr noundef %0, i32 noundef %201, i8 noundef signext %202, i32 noundef %200, i32 noundef %200, i32 noundef %200) #4
  %203 = add nuw i32 %.1622765, 1
  %exitcond826.not = icmp eq i32 %203, %8
  br i1 %exitcond826.not, label %204, label %.preheader748.backedge

.preheader748.backedge:                           ; preds = %.preheader748, %204
  %.1622765.be = phi i32 [ %203, %.preheader748 ], [ 0, %204 ]
  br label %.preheader748, !llvm.loop !33

204:                                              ; preds = %.preheader748
  %205 = load i32, ptr %15, align 4, !tbaa !5
  %206 = add i32 %205, 1
  store i32 %206, ptr %15, align 4, !tbaa !5
  %207 = load i32, ptr %16, align 4, !tbaa !5
  %208 = icmp ult i32 %206, %207
  br i1 %208, label %.preheader748.backedge, label %.loopexit758

.preheader747:                                    ; preds = %.preheader757, %.split.us
  br i1 %22, label %.preheader747.split.us, label %.preheader747.split

.preheader747.split.us:                           ; preds = %.preheader747, %.preheader747.split.us
  %.2766.us = phi i32 [ %221, %.preheader747.split.us ], [ 0, %.preheader747 ]
  %209 = load i32, ptr %15, align 4, !tbaa !5
  %210 = mul i32 %209, %8
  %211 = add i32 %210, %.2766.us
  %212 = load i32, ptr %151, align 4, !tbaa !34
  %213 = load i32, ptr %16, align 4, !tbaa !5
  %214 = mul i32 %213, %.0644797
  %reass.add737.us = add i32 %214, %209
  %reass.mul738.us = mul i32 %reass.add737.us, %10
  %reass.add739.us = add i32 %.2766.us, %6
  %reass.mul740.us = mul i32 %reass.add739.us, %11
  %215 = add i32 %reass.mul738.us, %reass.mul740.us
  %216 = load i32, ptr %152, align 4, !tbaa !35
  %217 = mul i32 %215, %216
  %218 = icmp eq i32 %.2766.us, %154
  %219 = and i1 %153, %218
  %220 = zext i1 %219 to i32
  %spec.select672.us = select i1 %219, i32 %spec.select671, i32 0
  call void @libxsmm_x86_instruction_unified_vec_move(ptr noundef %0, i32 noundef %32, i32 noundef %212, i32 noundef 127, i32 noundef 0, i32 noundef %217, i8 noundef signext %29, i32 noundef %211, i32 noundef %220, i32 noundef %spec.select672.us, i32 noundef 0) #4
  call void @libxsmm_generator_cvtbf16ps_sse_avx2_avx512(ptr noundef %0, i8 noundef signext 122, i32 noundef %211, i32 noundef %211) #4
  %221 = add nuw i32 %.2766.us, 1
  %exitcond829.not = icmp eq i32 %221, %8
  br i1 %exitcond829.not, label %.split.us, label %.preheader747.split.us, !llvm.loop !36

.preheader747.split:                              ; preds = %.preheader747, %.preheader747.split
  %.2766 = phi i32 [ %234, %.preheader747.split ], [ 0, %.preheader747 ]
  %222 = load i32, ptr %15, align 4, !tbaa !5
  %223 = mul i32 %222, %8
  %224 = add i32 %223, %.2766
  %225 = load i32, ptr %151, align 4, !tbaa !34
  %226 = load i32, ptr %16, align 4, !tbaa !5
  %227 = mul i32 %226, %.0644797
  %reass.add737 = add i32 %227, %222
  %reass.mul738 = mul i32 %reass.add737, %10
  %reass.add739 = add i32 %.2766, %6
  %reass.mul740 = mul i32 %reass.add739, %11
  %228 = add i32 %reass.mul738, %reass.mul740
  %229 = load i32, ptr %152, align 4, !tbaa !35
  %230 = mul i32 %228, %229
  %231 = icmp eq i32 %.2766, %154
  %232 = and i1 %153, %231
  %233 = zext i1 %232 to i32
  %spec.select672 = select i1 %232, i32 %spec.select671, i32 0
  call void @libxsmm_x86_instruction_unified_vec_move(ptr noundef %0, i32 noundef %32, i32 noundef %225, i32 noundef 127, i32 noundef 0, i32 noundef %230, i8 noundef signext %29, i32 noundef %224, i32 noundef %233, i32 noundef %spec.select672, i32 noundef 0) #4
  %234 = add nuw i32 %.2766, 1
  %exitcond828.not = icmp eq i32 %234, %8
  br i1 %exitcond828.not, label %.split.us, label %.preheader747.split, !llvm.loop !36

.split.us:                                        ; preds = %.preheader747.split, %.preheader747.split.us
  %235 = load i32, ptr %15, align 4, !tbaa !5
  %236 = add i32 %235, 1
  store i32 %236, ptr %15, align 4, !tbaa !5
  %237 = load i32, ptr %16, align 4, !tbaa !5
  %238 = icmp ult i32 %236, %237
  br i1 %238, label %.preheader747, label %.loopexit758, !llvm.loop !37

.loopexit758:                                     ; preds = %192, %204, %.split.us
  br i1 %.not.not, label %.loopexit758.thread, label %.loopexit758.thread854

.loopexit758.thread854:                           ; preds = %.preheader761, %.loopexit758
  %239 = load i32, ptr %155, align 8, !tbaa !27
  call void @libxsmm_x86_instruction_alu_reg(ptr noundef %0, i32 noundef %239, i32 noundef %49, i32 noundef %51) #4
  call void @libxsmm_x86_instruction_jump_to_label(ptr noundef %0, i32 noundef 30101, i32 noundef %.0646796, ptr noundef %2) #4
  br label %.loopexit758.thread

.loopexit758.thread:                              ; preds = %.preheader757, %.preheader759, %.loopexit758.thread854, %.loopexit758
  call void @libxsmm_x86_instruction_register_jump_back_label(ptr noundef %0, ptr noundef %1) #4
  %240 = load i32, ptr %132, align 4, !tbaa !26
  call void @libxsmm_x86_instruction_alu_mem(ptr noundef %0, i32 noundef -1610350453, i32 noundef %47, i32 noundef %49, i32 noundef 4, i32 noundef 0, i32 noundef %240, i32 noundef 0) #4
  %241 = load i32, ptr %132, align 4, !tbaa !26
  %242 = load i32, ptr %157, align 4, !tbaa !38
  %243 = zext i32 %242 to i64
  %.sink = mul nuw nsw i64 %.sink.v, %243
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef %0, i32 noundef 30003, i32 noundef %241, i64 noundef %.sink) #4
  %244 = load i32, ptr %158, align 8, !tbaa !30
  %245 = load i32, ptr %159, align 4, !tbaa !39
  %246 = load i32, ptr %132, align 4, !tbaa !26
  call void @libxsmm_x86_instruction_alu_reg(ptr noundef %0, i32 noundef %244, i32 noundef %245, i32 noundef %246) #4
  %247 = load i32, ptr %161, align 8, !tbaa !28
  %248 = load i32, ptr %162, align 4, !tbaa !40
  call void @libxsmm_x86_instruction_alu_reg(ptr noundef %0, i32 noundef %247, i32 noundef %49, i32 noundef %248) #4
  %249 = load i32, ptr %162, align 4, !tbaa !40
  %250 = load i32, ptr %157, align 4, !tbaa !38
  %251 = mul i32 %250, %163
  %252 = zext i32 %251 to i64
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef %0, i32 noundef 30003, i32 noundef %249, i64 noundef %252) #4
  %253 = load i32, ptr %158, align 8, !tbaa !30
  %254 = load i32, ptr %164, align 4, !tbaa !41
  %255 = load i32, ptr %162, align 4, !tbaa !40
  call void @libxsmm_x86_instruction_alu_reg(ptr noundef %0, i32 noundef %253, i32 noundef %254, i32 noundef %255) #4
  br i1 %.not.not656.not.not.not, label %301, label %.preheader755

.preheader755:                                    ; preds = %.loopexit758.thread
  br i1 %.not806, label %.loopexit756, label %.preheader746

.preheader746:                                    ; preds = %.preheader755, %._crit_edge
  %.0642775 = phi i32 [ %300, %._crit_edge ], [ 0, %.preheader755 ]
  %256 = mul i32 %factor.op.mul774, %.0642775
  %257 = icmp eq i32 %.0642775, %166
  %or.cond674 = select i1 %.not666, i1 %257, i1 false
  %spec.select680 = and i1 %121, %or.cond674
  %258 = zext i1 %spec.select680 to i32
  %or.cond3 = and i1 %121, %257
  %259 = select i1 %.not666, i1 %or.cond3, i1 false
  %260 = select i1 %259, i32 %spec.select670, i32 0
  br label %264

.preheader745:                                    ; preds = %264
  %261 = load i32, ptr %16, align 4, !tbaa !5
  %.not811 = icmp eq i32 %261, 0
  br i1 %.not811, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %.preheader745
  %262 = select i1 %or.cond674, i32 %122, i32 0
  %263 = or i32 %.0642775, %.0644797
  br label %272

264:                                              ; preds = %.preheader746, %264
  %.3767 = phi i32 [ 0, %.preheader746 ], [ %271, %264 ]
  %265 = load i32, ptr %132, align 4, !tbaa !26
  %266 = load i32, ptr %165, align 1, !tbaa !42
  %reass.add723 = add i32 %.3767, %6
  %reass.mul724 = mul i32 %266, %reass.add723
  %267 = add i32 %reass.mul724, %256
  %268 = load i32, ptr %157, align 4, !tbaa !38
  %269 = mul i32 %267, %268
  %270 = add i32 %.3767, %124
  call void @libxsmm_x86_instruction_unified_vec_move(ptr noundef %0, i32 noundef %.0636722, i32 noundef %265, i32 noundef 127, i32 noundef 0, i32 noundef %269, i8 noundef signext %.0637721, i32 noundef %270, i32 noundef %258, i32 noundef %260, i32 noundef 0) #4
  %271 = add nuw i32 %.3767, 1
  %exitcond830.not = icmp eq i32 %271, %8
  br i1 %exitcond830.not, label %.preheader745, label %264, !llvm.loop !43

272:                                              ; preds = %.lr.ph, %.split771.us
  %273 = phi i32 [ %261, %.lr.ph ], [ %298, %.split771.us ]
  %.0773 = phi i32 [ 0, %.lr.ph ], [ %297, %.split771.us ]
  store i32 %.0773, ptr %15, align 4, !tbaa !5
  %274 = load i32, ptr %162, align 4, !tbaa !40
  %275 = mul i32 %273, %.0644797
  %reass.add = add i32 %275, %.0773
  %reass.mul = mul i32 %reass.add, %12
  %276 = add i32 %reass.mul, %256
  %277 = load i32, ptr %157, align 4, !tbaa !38
  %278 = mul i32 %277, %276
  call void @libxsmm_x86_instruction_unified_vec_move(ptr noundef %0, i32 noundef %.0636722, i32 noundef %274, i32 noundef 127, i32 noundef 0, i32 noundef %278, i8 noundef signext %.0637721, i32 noundef %167, i32 noundef %262, i32 noundef %260, i32 noundef 0) #4
  %279 = or i32 %263, %.0773
  %or.cond9 = icmp eq i32 %279, 0
  %or.cond802 = and i1 %.not665, %or.cond9
  br i1 %or.cond802, label %280, label %286

280:                                              ; preds = %272
  %281 = load i32, ptr %157, align 4, !tbaa !38
  %282 = mul i32 %281, %163
  %283 = load i32, ptr %162, align 4, !tbaa !40
  %284 = zext i32 %281 to i64
  %285 = mul nuw nsw i64 %171, %284
  call void @libxsmm_generator_packed_spgemm_bcsc_prefetch_B_block_in_L1(ptr noundef %0, i32 noundef %282, i32 noundef %283, i64 noundef %285)
  br label %286

286:                                              ; preds = %280, %272
  br i1 %.fr772, label %.split769.us, label %.split769

.split769.us:                                     ; preds = %286, %.split769.us
  %.4768.us = phi i32 [ %291, %.split769.us ], [ 0, %286 ]
  %287 = add i32 %.4768.us, %124
  %288 = load i32, ptr %15, align 4, !tbaa !5
  %289 = mul i32 %288, %8
  %290 = add i32 %289, %.4768.us
  call void @libxsmm_x86_instruction_vec_compute_3reg(ptr noundef %0, i32 noundef %.0647703719, i8 noundef signext %.0637721, i32 noundef %287, i32 noundef %167, i32 noundef %290) #4
  %291 = add nuw i32 %.4768.us, 1
  %exitcond832.not = icmp eq i32 %291, %8
  br i1 %exitcond832.not, label %.split771.us, label %.split769.us, !llvm.loop !44

.split769:                                        ; preds = %286, %.split769
  %.4768 = phi i32 [ %296, %.split769 ], [ 0, %286 ]
  %292 = add i32 %.4768, %124
  %293 = load i32, ptr %15, align 4, !tbaa !5
  %294 = mul i32 %293, %8
  %295 = add i32 %294, %.4768
  call void @libxsmm_x86_instruction_vec_compute_3reg(ptr noundef %0, i32 noundef %.0647703719, i8 noundef signext %.0637721, i32 noundef %167, i32 noundef %292, i32 noundef %295) #4
  %296 = add nuw i32 %.4768, 1
  %exitcond831.not = icmp eq i32 %296, %8
  br i1 %exitcond831.not, label %.split771.us, label %.split769, !llvm.loop !44

.split771.us:                                     ; preds = %.split769, %.split769.us
  %297 = add nuw i32 %.0773, 1
  %298 = load i32, ptr %16, align 4, !tbaa !5
  %299 = icmp ult i32 %297, %298
  br i1 %299, label %272, label %._crit_edge, !llvm.loop !45

._crit_edge:                                      ; preds = %.split771.us, %.preheader745
  %300 = add nuw i32 %.0642775, 1
  %exitcond833.not = icmp eq i32 %300, %.5635
  br i1 %exitcond833.not, label %.loopexit756, label %.preheader746, !llvm.loop !46

301:                                              ; preds = %.loopexit758.thread
  br i1 %172, label %302, label %305

302:                                              ; preds = %301
  call void @libxsmm_x86_instruction_push_reg(ptr noundef %0, i32 noundef %57) #4
  %303 = load i32, ptr %161, align 8, !tbaa !28
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef %0, i32 noundef %303, i32 noundef %57, i64 noundef 0) #4
  call void @libxsmm_x86_instruction_register_jump_back_label(ptr noundef %0, ptr noundef %1) #4
  %304 = load i32, ptr %158, align 8, !tbaa !30
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef %0, i32 noundef %304, i32 noundef %57, i64 noundef 1) #4
  br label %305

305:                                              ; preds = %302, %301
  br i1 %.not806, label %._crit_edge786, label %.preheader744

.preheader744:                                    ; preds = %305, %._crit_edge784
  %.1643785 = phi i32 [ %354, %._crit_edge784 ], [ 0, %305 ]
  %306 = mul i32 %.1643785, %10
  br label %310

.preheader743:                                    ; preds = %310
  %307 = load i32, ptr %16, align 4, !tbaa !5
  %.not812 = icmp eq i32 %307, 0
  br i1 %.not812, label %._crit_edge784, label %.lr.ph783

.lr.ph783:                                        ; preds = %.preheader743
  %308 = mul i32 %.1643785, %.0645
  %309 = or i32 %.1643785, %.0644797
  br label %322

310:                                              ; preds = %.preheader744, %310
  %.5776 = phi i32 [ 0, %.preheader744 ], [ %321, %310 ]
  %311 = load i32, ptr %132, align 4, !tbaa !26
  %reass.add735 = add i32 %.5776, %6
  %reass.mul736 = mul i32 %reass.add735, %11
  %312 = add i32 %reass.mul736, %306
  %313 = mul i32 %312, %.0645
  %314 = load i32, ptr %157, align 4, !tbaa !38
  %315 = mul i32 %313, %314
  %316 = load i8, ptr %58, align 4, !tbaa !13
  %317 = add i32 %.5776, %124
  %318 = icmp eq i32 %.5776, %154
  %319 = and i1 %153, %318
  %320 = zext i1 %319 to i32
  %spec.select677 = select i1 %319, i32 %spec.select670, i32 0
  call void @libxsmm_x86_instruction_unified_vec_move(ptr noundef %0, i32 noundef 537138704, i32 noundef %311, i32 noundef 127, i32 noundef 0, i32 noundef %315, i8 noundef signext %316, i32 noundef %317, i32 noundef %320, i32 noundef %spec.select677, i32 noundef 0) #4
  %321 = add nuw i32 %.5776, 1
  %exitcond834.not = icmp eq i32 %321, %8
  br i1 %exitcond834.not, label %.preheader743, label %310, !llvm.loop !47

322:                                              ; preds = %.lr.ph783, %.split780.us
  %323 = phi i32 [ %307, %.lr.ph783 ], [ %352, %.split780.us ]
  %.1782 = phi i32 [ 0, %.lr.ph783 ], [ %351, %.split780.us ]
  store i32 %.1782, ptr %15, align 4, !tbaa !5
  %324 = load i32, ptr %4, align 8, !tbaa !48
  %325 = load i32, ptr %162, align 4, !tbaa !40
  %326 = mul i32 %323, %.0644797
  %reass.add733 = add i32 %326, %.1782
  %reass.mul734 = mul i32 %reass.add733, %12
  %327 = add i32 %reass.mul734, %308
  %328 = load i32, ptr %157, align 4, !tbaa !38
  %329 = mul i32 %328, %327
  %330 = load i8, ptr %58, align 4, !tbaa !13
  call void @libxsmm_x86_instruction_vec_move(ptr noundef %0, i32 noundef %324, i32 noundef 537209368, i32 noundef %325, i32 noundef 127, i32 noundef 0, i32 noundef %329, i8 noundef signext %330, i32 noundef %167, i32 noundef 0, i32 noundef 1, i32 noundef 0) #4
  %331 = or i32 %309, %.1782
  %or.cond13 = icmp eq i32 %331, 0
  %or.cond803 = and i1 %.not665, %or.cond13
  br i1 %or.cond803, label %332, label %338

332:                                              ; preds = %322
  %333 = load i32, ptr %157, align 4, !tbaa !38
  %334 = mul i32 %333, %163
  %335 = load i32, ptr %162, align 4, !tbaa !40
  %336 = zext i32 %333 to i64
  %337 = mul nuw nsw i64 %171, %336
  call void @libxsmm_generator_packed_spgemm_bcsc_prefetch_B_block_in_L1(ptr noundef %0, i32 noundef %334, i32 noundef %335, i64 noundef %337)
  br label %338

338:                                              ; preds = %332, %322
  br i1 %.fr772, label %.split778.us, label %.split778

.split778.us:                                     ; preds = %338, %.split778.us
  %.6777.us = phi i32 [ %344, %.split778.us ], [ 0, %338 ]
  %339 = load i8, ptr %58, align 4, !tbaa !13
  %340 = add i32 %.6777.us, %124
  %341 = load i32, ptr %15, align 4, !tbaa !5
  %342 = mul i32 %341, %8
  %343 = add i32 %342, %.6777.us
  call void @libxsmm_x86_instruction_vec_compute_3reg(ptr noundef %0, i32 noundef %.0647703719, i8 noundef signext %339, i32 noundef %340, i32 noundef %167, i32 noundef %343) #4
  %344 = add nuw i32 %.6777.us, 1
  %exitcond836.not = icmp eq i32 %344, %8
  br i1 %exitcond836.not, label %.split780.us, label %.split778.us, !llvm.loop !49

.split778:                                        ; preds = %338, %.split778
  %.6777 = phi i32 [ %350, %.split778 ], [ 0, %338 ]
  %345 = load i8, ptr %58, align 4, !tbaa !13
  %346 = add i32 %.6777, %124
  %347 = load i32, ptr %15, align 4, !tbaa !5
  %348 = mul i32 %347, %8
  %349 = add i32 %348, %.6777
  call void @libxsmm_x86_instruction_vec_compute_3reg(ptr noundef %0, i32 noundef %.0647703719, i8 noundef signext %345, i32 noundef %167, i32 noundef %346, i32 noundef %349) #4
  %350 = add nuw i32 %.6777, 1
  %exitcond835.not = icmp eq i32 %350, %8
  br i1 %exitcond835.not, label %.split780.us, label %.split778, !llvm.loop !49

.split780.us:                                     ; preds = %.split778, %.split778.us
  %351 = add nuw i32 %.1782, 1
  %352 = load i32, ptr %16, align 4, !tbaa !5
  %353 = icmp ult i32 %351, %352
  br i1 %353, label %322, label %._crit_edge784, !llvm.loop !50

._crit_edge784:                                   ; preds = %.split780.us, %.preheader743
  %354 = add nuw i32 %.1643785, 1
  %exitcond837.not = icmp eq i32 %354, %.5635
  br i1 %exitcond837.not, label %._crit_edge786, label %.preheader744, !llvm.loop !51

._crit_edge786:                                   ; preds = %._crit_edge784, %305
  br i1 %172, label %355, label %.loopexit756

355:                                              ; preds = %._crit_edge786
  %356 = load i32, ptr %158, align 8, !tbaa !30
  %357 = load i32, ptr %162, align 4, !tbaa !40
  %358 = load i32, ptr %157, align 4, !tbaa !38
  %359 = zext i32 %358 to i64
  %360 = mul nuw nsw i64 %175, %359
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef %0, i32 noundef %356, i32 noundef %357, i64 noundef %360) #4
  %361 = load i32, ptr %158, align 8, !tbaa !30
  %362 = load i32, ptr %132, align 4, !tbaa !26
  %363 = load i32, ptr %157, align 4, !tbaa !38
  %364 = zext i32 %363 to i64
  %365 = mul nuw nsw i64 %176, %364
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef %0, i32 noundef %361, i32 noundef %362, i64 noundef %365) #4
  %366 = load i32, ptr %155, align 8, !tbaa !27
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef %0, i32 noundef %366, i32 noundef %57, i64 noundef %177) #4
  %367 = load i32, ptr %178, align 4, !tbaa !52
  call void @libxsmm_x86_instruction_jump_back_to_label(ptr noundef %0, i32 noundef %367, ptr noundef %1) #4
  call void @libxsmm_x86_instruction_pop_reg(ptr noundef %0, i32 noundef %57) #4
  br label %.loopexit756

.loopexit756:                                     ; preds = %._crit_edge, %.preheader755, %._crit_edge786, %355
  %368 = load i32, ptr %158, align 8, !tbaa !30
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef %0, i32 noundef %368, i32 noundef %49, i64 noundef 1) #4
  %369 = load i32, ptr %155, align 8, !tbaa !27
  call void @libxsmm_x86_instruction_alu_reg(ptr noundef %0, i32 noundef %369, i32 noundef %51, i32 noundef %49) #4
  %370 = load i32, ptr %178, align 4, !tbaa !52
  call void @libxsmm_x86_instruction_jump_back_to_label(ptr noundef %0, i32 noundef %370, ptr noundef %1) #4
  br i1 %.not.not656.not.not.not, label %.loopexit754, label %.preheader753

.preheader753:                                    ; preds = %.loopexit756
  store i32 0, ptr %15, align 4, !tbaa !5
  %371 = load i32, ptr %16, align 4, !tbaa !5
  %.not813 = icmp eq i32 %371, 0
  br i1 %.not813, label %.loopexit754, label %.preheader742

.preheader742:                                    ; preds = %.preheader753, %.split789.us
  br i1 %.not.not, label %.preheader742.split.us, label %.preheader742.split

.preheader742.split.us:                           ; preds = %.preheader742, %394
  %.7787.us = phi i32 [ %395, %394 ], [ 0, %.preheader742 ]
  %372 = load i32, ptr %15, align 4, !tbaa !5
  %373 = mul i32 %372, %8
  %374 = add i32 %373, %.7787.us
  %375 = call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef nonnull %20) #4
  %376 = icmp eq i32 %375, 8
  %377 = select i1 %376, i32 805639934, i32 805574232
  %378 = load i32, ptr %61, align 4, !tbaa !22
  %379 = icmp ult i32 %378, 1101
  br i1 %379, label %381, label %380

380:                                              ; preds = %.preheader742.split.us
  call void @libxsmm_generator_hinstrps_avx512(ptr noundef nonnull %0, i32 noundef %377, i32 noundef %374, i32 noundef %179, i32 noundef %124) #4
  br label %382

381:                                              ; preds = %.preheader742.split.us
  call void @libxsmm_generator_hinstrps_avx(ptr noundef nonnull %0, i32 noundef %377, i32 noundef %374, i32 noundef %179, i32 noundef %124) #4
  br label %382

382:                                              ; preds = %381, %380
  %383 = load i32, ptr %4, align 8, !tbaa !48
  %384 = load i32, ptr %151, align 4, !tbaa !34
  %385 = load i32, ptr %180, align 1, !tbaa !53
  %386 = load i32, ptr %15, align 4, !tbaa !5
  %387 = load i32, ptr %16, align 4, !tbaa !5
  %388 = mul i32 %387, %.0644797
  %reass.add725.us = add i32 %.7787.us, %6
  %reass.mul726.us = mul i32 %385, %reass.add725.us
  %389 = add i32 %reass.mul726.us, %386
  %390 = add i32 %389, %388
  %391 = load i32, ptr %152, align 4, !tbaa !35
  %392 = mul i32 %390, %391
  call void @libxsmm_x86_instruction_vec_move(ptr noundef nonnull %0, i32 noundef %383, i32 noundef %.3626707718, i32 noundef %384, i32 noundef 127, i32 noundef 0, i32 noundef %392, i8 noundef signext %29, i32 noundef %167, i32 noundef 0, i32 noundef 1, i32 noundef 0) #4
  br i1 %22, label %393, label %394

393:                                              ; preds = %382
  call void @libxsmm_x86_instruction_vec_compute_2reg_imm8(ptr noundef nonnull %0, i32 noundef 611128946, i8 noundef signext %29, i32 noundef %167, i32 noundef %167, i32 noundef 16) #4
  br label %394

394:                                              ; preds = %393, %382
  call void @libxsmm_x86_instruction_vec_compute_3reg(ptr noundef nonnull %0, i32 noundef %377, i8 noundef signext %29, i32 noundef %374, i32 noundef %167, i32 noundef %374) #4
  %395 = add nuw i32 %.7787.us, 1
  %exitcond839.not = icmp eq i32 %395, %8
  br i1 %exitcond839.not, label %.split789.us, label %.preheader742.split.us, !llvm.loop !54

.preheader742.split:                              ; preds = %.preheader742, %406
  %.7787 = phi i32 [ %407, %406 ], [ 0, %.preheader742 ]
  %396 = load i32, ptr %15, align 4, !tbaa !5
  %397 = mul i32 %396, %8
  %398 = add i32 %397, %.7787
  %399 = call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef nonnull %20) #4
  %400 = icmp eq i32 %399, 8
  %401 = select i1 %400, i32 805639934, i32 805574232
  %402 = load i32, ptr %61, align 4, !tbaa !22
  %403 = icmp ult i32 %402, 1101
  br i1 %403, label %404, label %405

404:                                              ; preds = %.preheader742.split
  call void @libxsmm_generator_hinstrps_avx(ptr noundef nonnull %0, i32 noundef %401, i32 noundef %398, i32 noundef %179, i32 noundef %124) #4
  br label %406

405:                                              ; preds = %.preheader742.split
  call void @libxsmm_generator_hinstrps_avx512(ptr noundef nonnull %0, i32 noundef %401, i32 noundef %398, i32 noundef %179, i32 noundef %124) #4
  br label %406

406:                                              ; preds = %405, %404
  %407 = add nuw i32 %.7787, 1
  %exitcond838.not = icmp eq i32 %407, %8
  br i1 %exitcond838.not, label %.split789.us, label %.preheader742.split, !llvm.loop !54

.split789.us:                                     ; preds = %406, %394
  %408 = load i32, ptr %15, align 4, !tbaa !5
  %409 = add i32 %408, 1
  store i32 %409, ptr %15, align 4, !tbaa !5
  %410 = load i32, ptr %16, align 4, !tbaa !5
  %411 = icmp ult i32 %409, %410
  br i1 %411, label %.preheader742, label %.loopexit754, !llvm.loop !55

.loopexit754:                                     ; preds = %.split789.us, %.preheader753, %.loopexit756
  br i1 %.not.not, label %413, label %412

412:                                              ; preds = %.loopexit754
  call void @libxsmm_x86_instruction_register_jump_label(ptr noundef %0, i32 noundef %.0646796, ptr noundef %2) #4
  br label %413

413:                                              ; preds = %412, %.loopexit754
  store i32 0, ptr %15, align 4, !tbaa !5
  %414 = load i32, ptr %16, align 4, !tbaa !5
  %.not815 = icmp eq i32 %414, 0
  br i1 %.not.not656.not.not.not, label %.preheader750, label %.preheader751

.preheader751:                                    ; preds = %413
  br i1 %.not815, label %.loopexit, label %.preheader741

.preheader750:                                    ; preds = %413
  br i1 %.not815, label %.loopexit, label %.preheader

.preheader741:                                    ; preds = %.preheader751, %.split792.us
  br i1 %22, label %.preheader741.split.us, label %.preheader741.split

.preheader741.split.us:                           ; preds = %.preheader741, %.preheader741.split.us
  %.8790.us = phi i32 [ %428, %.preheader741.split.us ], [ 0, %.preheader741 ]
  %415 = load i32, ptr %15, align 4, !tbaa !5
  %416 = mul i32 %415, %8
  %417 = add i32 %416, %.8790.us
  %418 = load i8, ptr %58, align 4, !tbaa !13
  call void @libxsmm_x86_instruction_vec_compute_2reg(ptr noundef %0, i32 noundef 537273970, i8 noundef signext %418, i32 noundef %417, i32 noundef %417) #4
  %419 = load i32, ptr %151, align 4, !tbaa !34
  %420 = load i32, ptr %180, align 1, !tbaa !53
  %421 = load i32, ptr %15, align 4, !tbaa !5
  %422 = load i32, ptr %16, align 4, !tbaa !5
  %423 = mul i32 %422, %.0644797
  %reass.add727.us = add i32 %.8790.us, %6
  %reass.mul728.us = mul i32 %420, %reass.add727.us
  %424 = add i32 %reass.mul728.us, %421
  %425 = add i32 %424, %423
  %426 = load i32, ptr %152, align 4, !tbaa !35
  %427 = mul i32 %425, %426
  call void @libxsmm_x86_instruction_unified_vec_move(ptr noundef %0, i32 noundef %32, i32 noundef %419, i32 noundef 127, i32 noundef 0, i32 noundef %427, i8 noundef signext %29, i32 noundef %417, i32 noundef 1, i32 noundef %spec.select667, i32 noundef 1) #4
  %428 = add nuw i32 %.8790.us, 1
  %exitcond841.not = icmp eq i32 %428, %8
  br i1 %exitcond841.not, label %.split792.us, label %.preheader741.split.us, !llvm.loop !56

.preheader741.split:                              ; preds = %.preheader741, %.preheader741.split
  %.8790 = phi i32 [ %440, %.preheader741.split ], [ 0, %.preheader741 ]
  %429 = load i32, ptr %15, align 4, !tbaa !5
  %430 = mul i32 %429, %8
  %431 = add i32 %430, %.8790
  %432 = load i32, ptr %151, align 4, !tbaa !34
  %433 = load i32, ptr %180, align 1, !tbaa !53
  %434 = load i32, ptr %16, align 4, !tbaa !5
  %435 = mul i32 %434, %.0644797
  %reass.add727 = add i32 %.8790, %6
  %reass.mul728 = mul i32 %433, %reass.add727
  %436 = add i32 %reass.mul728, %429
  %437 = add i32 %436, %435
  %438 = load i32, ptr %152, align 4, !tbaa !35
  %439 = mul i32 %437, %438
  call void @libxsmm_x86_instruction_unified_vec_move(ptr noundef %0, i32 noundef %32, i32 noundef %432, i32 noundef 127, i32 noundef 0, i32 noundef %439, i8 noundef signext %29, i32 noundef %431, i32 noundef 1, i32 noundef %spec.select667, i32 noundef 1) #4
  %440 = add nuw i32 %.8790, 1
  %exitcond840.not = icmp eq i32 %440, %8
  br i1 %exitcond840.not, label %.split792.us, label %.preheader741.split, !llvm.loop !56

.split792.us:                                     ; preds = %.preheader741.split, %.preheader741.split.us
  %441 = load i32, ptr %15, align 4, !tbaa !5
  %442 = add i32 %441, 1
  store i32 %442, ptr %15, align 4, !tbaa !5
  %443 = load i32, ptr %16, align 4, !tbaa !5
  %444 = icmp ult i32 %442, %443
  br i1 %444, label %.preheader741, label %.loopexit, !llvm.loop !57

.preheader:                                       ; preds = %.preheader750, %.split795.us
  br i1 %22, label %.preheader.split.us, label %.preheader.split

.preheader.split.us:                              ; preds = %.preheader, %.preheader.split.us
  %.9793.us = phi i32 [ %459, %.preheader.split.us ], [ 0, %.preheader ]
  %445 = load i32, ptr %15, align 4, !tbaa !5
  %446 = mul i32 %445, %8
  %447 = add i32 %446, %.9793.us
  %448 = load i8, ptr %58, align 4, !tbaa !13
  call void @libxsmm_x86_instruction_vec_compute_2reg(ptr noundef %0, i32 noundef 537273970, i8 noundef signext %448, i32 noundef %447, i32 noundef %447) #4
  %449 = load i32, ptr %151, align 4, !tbaa !34
  %450 = load i32, ptr %15, align 4, !tbaa !5
  %451 = load i32, ptr %16, align 4, !tbaa !5
  %452 = mul i32 %451, %.0644797
  %reass.add729.us = add i32 %452, %450
  %reass.mul730.us = mul i32 %reass.add729.us, %10
  %reass.add731.us = add i32 %.9793.us, %6
  %reass.mul732.us = mul i32 %reass.add731.us, %11
  %453 = add i32 %reass.mul730.us, %reass.mul732.us
  %454 = load i32, ptr %152, align 4, !tbaa !35
  %455 = mul i32 %453, %454
  %456 = icmp eq i32 %.9793.us, %154
  %457 = and i1 %153, %456
  %458 = zext i1 %457 to i32
  %spec.select678.us = select i1 %457, i32 %spec.select671, i32 0
  call void @libxsmm_x86_instruction_unified_vec_move(ptr noundef %0, i32 noundef %32, i32 noundef %449, i32 noundef 127, i32 noundef 0, i32 noundef %455, i8 noundef signext %29, i32 noundef %447, i32 noundef %458, i32 noundef %spec.select678.us, i32 noundef 1) #4
  %459 = add nuw i32 %.9793.us, 1
  %exitcond843.not = icmp eq i32 %459, %8
  br i1 %exitcond843.not, label %.split795.us, label %.preheader.split.us, !llvm.loop !58

.preheader.split:                                 ; preds = %.preheader, %.preheader.split
  %.9793 = phi i32 [ %472, %.preheader.split ], [ 0, %.preheader ]
  %460 = load i32, ptr %15, align 4, !tbaa !5
  %461 = mul i32 %460, %8
  %462 = add i32 %461, %.9793
  %463 = load i32, ptr %151, align 4, !tbaa !34
  %464 = load i32, ptr %16, align 4, !tbaa !5
  %465 = mul i32 %464, %.0644797
  %reass.add729 = add i32 %465, %460
  %reass.mul730 = mul i32 %reass.add729, %10
  %reass.add731 = add i32 %.9793, %6
  %reass.mul732 = mul i32 %reass.add731, %11
  %466 = add i32 %reass.mul730, %reass.mul732
  %467 = load i32, ptr %152, align 4, !tbaa !35
  %468 = mul i32 %466, %467
  %469 = icmp eq i32 %.9793, %154
  %470 = and i1 %153, %469
  %471 = zext i1 %470 to i32
  %spec.select678 = select i1 %470, i32 %spec.select671, i32 0
  call void @libxsmm_x86_instruction_unified_vec_move(ptr noundef %0, i32 noundef %32, i32 noundef %463, i32 noundef 127, i32 noundef 0, i32 noundef %468, i8 noundef signext %29, i32 noundef %462, i32 noundef %471, i32 noundef %spec.select678, i32 noundef 1) #4
  %472 = add nuw i32 %.9793, 1
  %exitcond842.not = icmp eq i32 %472, %8
  br i1 %exitcond842.not, label %.split795.us, label %.preheader.split, !llvm.loop !58

.split795.us:                                     ; preds = %.preheader.split, %.preheader.split.us
  %473 = load i32, ptr %15, align 4, !tbaa !5
  %474 = add i32 %473, 1
  store i32 %474, ptr %15, align 4, !tbaa !5
  %475 = load i32, ptr %16, align 4, !tbaa !5
  %476 = icmp ult i32 %474, %475
  br i1 %476, label %.preheader, label %.loopexit, !llvm.loop !59

.loopexit:                                        ; preds = %.split792.us, %.split795.us, %.preheader751, %.preheader750
  %477 = add i32 %.0646796, 1
  br i1 %149, label %478, label %479

478:                                              ; preds = %.loopexit
  call void @libxsmm_x86_instruction_pop_reg(ptr noundef %0, i32 noundef %49) #4
  br label %479

479:                                              ; preds = %.loopexit, %478
  %480 = add nuw i32 %.0644797, 1
  %481 = icmp ult i32 %480, %125
  br i1 %481, label %182, label %._crit_edge801, !llvm.loop !60

._crit_edge801:                                   ; preds = %479, %148
  br i1 %139, label %482, label %565

482:                                              ; preds = %._crit_edge801
  %483 = getelementptr inbounds i8, ptr %4, i64 64
  %484 = load i32, ptr %483, align 8, !tbaa !30
  %485 = getelementptr inbounds i8, ptr %3, i64 4
  %486 = load i32, ptr %485, align 4, !tbaa !39
  %487 = zext i32 %8 to i64
  %488 = getelementptr inbounds i8, ptr %4, i64 12
  %489 = load i32, ptr %488, align 4, !tbaa !38
  %490 = zext i32 %489 to i64
  %491 = getelementptr inbounds i8, ptr %3, i64 20
  br i1 %.not.not656.not.not.not, label %533, label %492

492:                                              ; preds = %482
  %493 = getelementptr inbounds i8, ptr %5, i64 12
  %494 = load i32, ptr %493, align 1, !tbaa !42
  %495 = zext i32 %494 to i64
  %496 = mul nuw nsw i64 %495, %487
  %497 = mul nuw nsw i64 %496, %490
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef %0, i32 noundef %484, i32 noundef %486, i64 noundef %497) #4
  %498 = load i32, ptr %483, align 8, !tbaa !30
  %499 = load i32, ptr %491, align 4, !tbaa !34
  %500 = getelementptr inbounds i8, ptr %5, i64 20
  %501 = load i32, ptr %500, align 1, !tbaa !53
  %502 = zext i32 %501 to i64
  %503 = mul nuw nsw i64 %502, %487
  %504 = getelementptr inbounds i8, ptr %4, i64 20
  %505 = load i32, ptr %504, align 4, !tbaa !35
  %506 = zext i32 %505 to i64
  %507 = mul nuw nsw i64 %503, %506
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef %0, i32 noundef %498, i32 noundef %499, i64 noundef %507) #4
  call void @libxsmm_x86_instruction_pop_reg(ptr noundef %0, i32 noundef %49) #4
  %508 = getelementptr inbounds i8, ptr %4, i64 72
  %509 = load i32, ptr %508, align 8, !tbaa !27
  %510 = getelementptr inbounds i8, ptr %3, i64 88
  %511 = load i32, ptr %510, align 4, !tbaa !29
  %512 = zext i32 %138 to i64
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef %0, i32 noundef %509, i32 noundef %511, i64 noundef %512) #4
  %513 = getelementptr inbounds i8, ptr %4, i64 76
  %514 = load i32, ptr %513, align 4, !tbaa !52
  call void @libxsmm_x86_instruction_jump_back_to_label(ptr noundef %0, i32 noundef %514, ptr noundef %1) #4
  %515 = getelementptr inbounds i8, ptr %4, i64 68
  %516 = load i32, ptr %515, align 4, !tbaa !61
  %517 = load i32, ptr %485, align 4, !tbaa !39
  %518 = mul nuw nsw i64 %512, %487
  %519 = load i32, ptr %493, align 1, !tbaa !42
  %520 = zext i32 %519 to i64
  %521 = mul nuw nsw i64 %518, %520
  %522 = load i32, ptr %488, align 4, !tbaa !38
  %523 = zext i32 %522 to i64
  %524 = mul nuw nsw i64 %521, %523
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef %0, i32 noundef %516, i32 noundef %517, i64 noundef %524) #4
  %525 = load i32, ptr %515, align 4, !tbaa !61
  %526 = load i32, ptr %491, align 4, !tbaa !34
  %527 = load i32, ptr %500, align 1, !tbaa !53
  %528 = zext i32 %527 to i64
  %529 = mul nuw nsw i64 %518, %528
  %530 = load i32, ptr %504, align 4, !tbaa !35
  %531 = zext i32 %530 to i64
  %532 = mul nuw nsw i64 %529, %531
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef %0, i32 noundef %525, i32 noundef %526, i64 noundef %532) #4
  br label %565

533:                                              ; preds = %482
  %534 = zext i32 %11 to i64
  %535 = mul nuw i64 %534, %487
  %536 = zext nneg i32 %.0645 to i64
  %537 = mul nuw nsw i64 %535, %536
  %538 = mul nuw nsw i64 %537, %490
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef %0, i32 noundef %484, i32 noundef %486, i64 noundef %538) #4
  %539 = load i32, ptr %483, align 8, !tbaa !30
  %540 = load i32, ptr %491, align 4, !tbaa !34
  %541 = getelementptr inbounds i8, ptr %4, i64 20
  %542 = load i32, ptr %541, align 4, !tbaa !35
  %543 = zext i32 %542 to i64
  %544 = mul nuw nsw i64 %535, %543
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef %0, i32 noundef %539, i32 noundef %540, i64 noundef %544) #4
  call void @libxsmm_x86_instruction_pop_reg(ptr noundef %0, i32 noundef %49) #4
  %545 = getelementptr inbounds i8, ptr %4, i64 72
  %546 = load i32, ptr %545, align 8, !tbaa !27
  %547 = getelementptr inbounds i8, ptr %3, i64 88
  %548 = load i32, ptr %547, align 4, !tbaa !29
  %549 = zext i32 %138 to i64
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef %0, i32 noundef %546, i32 noundef %548, i64 noundef %549) #4
  %550 = getelementptr inbounds i8, ptr %4, i64 76
  %551 = load i32, ptr %550, align 4, !tbaa !52
  call void @libxsmm_x86_instruction_jump_back_to_label(ptr noundef %0, i32 noundef %551, ptr noundef %1) #4
  %552 = getelementptr inbounds i8, ptr %4, i64 68
  %553 = load i32, ptr %552, align 4, !tbaa !61
  %554 = load i32, ptr %485, align 4, !tbaa !39
  %555 = mul i64 %535, %549
  %556 = mul nuw nsw i64 %555, %536
  %557 = load i32, ptr %488, align 4, !tbaa !38
  %558 = zext i32 %557 to i64
  %559 = mul nuw nsw i64 %556, %558
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef %0, i32 noundef %553, i32 noundef %554, i64 noundef %559) #4
  %560 = load i32, ptr %552, align 4, !tbaa !61
  %561 = load i32, ptr %491, align 4, !tbaa !34
  %562 = load i32, ptr %541, align 4, !tbaa !35
  %563 = zext i32 %562 to i64
  %564 = mul nuw nsw i64 %555, %563
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef %0, i32 noundef %560, i32 noundef %561, i64 noundef %564) #4
  br label %565

565:                                              ; preds = %492, %533, %._crit_edge801
  br i1 %.not.not, label %566, label %567

566:                                              ; preds = %565
  call void @libxsmm_x86_instruction_register_jump_label(ptr noundef %0, i32 noundef %55, ptr noundef %2) #4
  br label %567

567:                                              ; preds = %566, %565
  %568 = load i32, ptr %132, align 4, !tbaa !26
  call void @libxsmm_x86_instruction_pop_reg(ptr noundef %0, i32 noundef %568) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %16) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %15) #4
  ret void
}

declare void @libxsmm_x86_instruction_jump_back_to_label(ptr noundef, i32 noundef, ptr noundef) local_unnamed_addr #3

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

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

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

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

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

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

declare void @libxsmm_generator_hinstrps_avx(ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #3

declare void @libxsmm_generator_hinstrps_avx512(ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #3

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

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

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 = { noreturn nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { nounwind }
attributes #5 = { noreturn nounwind }

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

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


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