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

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

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

@.str = external hidden unnamed_addr constant [89 x i8], align 1
@libxsmm_ninit = external global i32, align 4
@libxsmm_verbosity = external global i32, align 4
@__func__.libxsmm_generator_gemm_avx512_microkernel_fsdbcst = external hidden unnamed_addr constant [50 x i8], align 1
@__const.libxsmm_generator_gemm_avx512_microkernel_fsdbcst.l_mask = external hidden unnamed_addr constant [16 x i32], align 16
@.str.2 = external hidden unnamed_addr constant [13 x i8], align 1
@__const.libxsmm_generator_gemm_avx512_microkernel_fsdbcst.l_all_ones = external hidden unnamed_addr constant [16 x i16], align 16
@.str.3 = external hidden unnamed_addr constant [14 x i8], align 1
@__const.libxsmm_generator_gemm_avx512_microkernel_fsdbcst.l_all_ones.4 = external hidden unnamed_addr constant [32 x i16], align 16

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

declare i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef) #1

declare i32 @libxsmm_cpuid_dot_pack_factor(i32 noundef) #1

; Function Attrs: nounwind uwtable
define dso_local void @libxsmm_generator_gemm_avx512_microkernel_fsdbcst(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, i32 noundef %4, i32 noundef %5) #2 {
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca ptr, align 8
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  %14 = alloca i32, align 4
  %15 = alloca i32, align 4
  %16 = alloca i8, align 1
  %17 = alloca i32, align 4
  %18 = alloca i32, align 4
  %19 = alloca i32, align 4
  %20 = alloca i32, align 4
  %21 = alloca i32, align 4
  %22 = alloca [16 x i32], align 16
  %23 = alloca [16 x i16], align 16
  %24 = alloca [32 x i16], align 16
  %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
  store ptr %0, ptr %7, align 8, !tbaa !5
  store ptr %1, ptr %8, align 8, !tbaa !5
  store ptr %2, ptr %9, align 8, !tbaa !5
  store ptr %3, ptr %10, align 8, !tbaa !5
  store i32 %4, ptr %11, align 4, !tbaa !9
  store i32 %5, ptr %12, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #4
  store i32 0, ptr %15, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 1, ptr %16) #4
  %34 = load ptr, ptr %9, align 8, !tbaa !5
  %35 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %34, i32 0, i32 21
  %36 = load i8, ptr %35, align 4, !tbaa !11
  store i8 %36, ptr %16, align 1, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #4
  store i32 0, ptr %17, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #4
  store i32 1, ptr %18, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #4
  %37 = load i32, ptr %12, align 4, !tbaa !9
  store i32 %37, ptr %19, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #4
  %38 = load ptr, ptr %9, align 8, !tbaa !5
  %39 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %38, i32 0, i32 6
  %40 = load i32, ptr %39, align 8, !tbaa !16
  store i32 %40, ptr %20, align 4, !tbaa !9
  %41 = load i32, ptr %11, align 4, !tbaa !9
  %42 = icmp ugt i32 %41, 28
  br i1 %42, label %43, label %52

43:                                               ; preds = %6
  %44 = load ptr, ptr %7, align 8, !tbaa !5
  %45 = load i32, ptr @libxsmm_ninit, align 4, !tbaa !9
  %46 = icmp ult i32 1, %45
  br i1 %46, label %47, label %49

47:                                               ; preds = %43
  %48 = load i32, ptr @libxsmm_verbosity, align 4, !tbaa !9
  br label %50

49:                                               ; preds = %43
  br label %50

50:                                               ; preds = %49, %47
  %51 = phi i32 [ %48, %47 ], [ 1, %49 ]
  call void @libxsmm_handle_error(ptr noundef %44, i32 noundef 90016, ptr noundef @__func__.libxsmm_generator_gemm_avx512_microkernel_fsdbcst, ptr noundef @.str, i32 noundef 1679, i32 noundef %51)
  store i32 1, ptr %21, align 4
  br label %1070

52:                                               ; preds = %6
  %53 = load ptr, ptr %10, align 8, !tbaa !5
  %54 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %53, i32 0, i32 6
  %55 = load i32, ptr %54, align 1, !tbaa !17
  %56 = and i32 %55, 2048
  %57 = icmp eq i32 %56, 2048
  br i1 %57, label %58, label %81

58:                                               ; preds = %52
  %59 = load ptr, ptr %10, align 8, !tbaa !5
  %60 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %59, i32 0, i32 8
  %61 = getelementptr inbounds [3 x i8], ptr %60, i64 0, i64 0
  %62 = call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef %61)
  %63 = call i32 @libxsmm_cpuid_dot_pack_factor(i32 noundef %62)
  store i32 %63, ptr %18, align 4, !tbaa !9
  %64 = load i32, ptr %12, align 4, !tbaa !9
  %65 = load i32, ptr %18, align 4, !tbaa !9
  %66 = udiv i32 %64, %65
  store i32 %66, ptr %19, align 4, !tbaa !9
  %67 = load i32, ptr %12, align 4, !tbaa !9
  %68 = load i32, ptr %18, align 4, !tbaa !9
  %69 = urem i32 %67, %68
  %70 = icmp ne i32 %69, 0
  br i1 %70, label %71, label %80

71:                                               ; preds = %58
  %72 = load ptr, ptr %7, align 8, !tbaa !5
  %73 = load i32, ptr @libxsmm_ninit, align 4, !tbaa !9
  %74 = icmp ult i32 1, %73
  br i1 %74, label %75, label %77

75:                                               ; preds = %71
  %76 = load i32, ptr @libxsmm_verbosity, align 4, !tbaa !9
  br label %78

77:                                               ; preds = %71
  br label %78

78:                                               ; preds = %77, %75
  %79 = phi i32 [ %76, %75 ], [ 1, %77 ]
  call void @libxsmm_handle_error(ptr noundef %72, i32 noundef 90018, ptr noundef @__func__.libxsmm_generator_gemm_avx512_microkernel_fsdbcst, ptr noundef @.str, i32 noundef 1688, i32 noundef %79)
  store i32 1, ptr %21, align 4
  br label %1070

80:                                               ; preds = %58
  br label %81

81:                                               ; preds = %80, %52
  %82 = load i32, ptr %11, align 4, !tbaa !9
  %83 = icmp uge i32 %82, 12
  br i1 %83, label %84, label %85

84:                                               ; preds = %81
  store i32 1, ptr %15, align 4, !tbaa !9
  br label %91

85:                                               ; preds = %81
  %86 = load i32, ptr %11, align 4, !tbaa !9
  %87 = icmp uge i32 %86, 6
  br i1 %87, label %88, label %89

88:                                               ; preds = %85
  store i32 2, ptr %15, align 4, !tbaa !9
  br label %90

89:                                               ; preds = %85
  store i32 4, ptr %15, align 4, !tbaa !9
  br label %90

90:                                               ; preds = %89, %88
  br label %91

91:                                               ; preds = %90, %84
  %92 = load i32, ptr %15, align 4, !tbaa !9
  %93 = load i32, ptr %19, align 4, !tbaa !9
  %94 = icmp ugt i32 %92, %93
  br i1 %94, label %95, label %104

95:                                               ; preds = %91
  %96 = load i32, ptr %19, align 4, !tbaa !9
  store i32 %96, ptr %15, align 4, !tbaa !9
  %97 = load i32, ptr %15, align 4, !tbaa !9
  %98 = icmp eq i32 %97, 0
  br i1 %98, label %99, label %100

99:                                               ; preds = %95
  br label %102

100:                                              ; preds = %95
  %101 = load i32, ptr %15, align 4, !tbaa !9
  br label %102

102:                                              ; preds = %100, %99
  %103 = phi i32 [ 1, %99 ], [ %101, %100 ]
  store i32 %103, ptr %15, align 4, !tbaa !9
  br label %104

104:                                              ; preds = %102, %91
  %105 = load ptr, ptr %10, 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 2, %108
  br i1 %109, label %110, label %122

110:                                              ; preds = %104
  %111 = load ptr, ptr %10, align 8, !tbaa !5
  %112 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %111, i32 0, i32 6
  %113 = load i32, ptr %112, align 1, !tbaa !17
  %114 = and i32 %113, 2048
  %115 = icmp eq i32 %114, 0
  br i1 %115, label %116, label %122

116:                                              ; preds = %110
  call void @llvm.lifetime.start.p0(i64 64, ptr %22) #4
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %22, ptr align 16 @__const.libxsmm_generator_gemm_avx512_microkernel_fsdbcst.l_mask, i64 64, i1 false)
  %117 = load ptr, ptr %7, align 8, !tbaa !5
  %118 = getelementptr inbounds [16 x i32], ptr %22, i64 0, i64 0
  %119 = load ptr, ptr %9, align 8, !tbaa !5
  %120 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %119, i32 0, i32 21
  %121 = load i8, ptr %120, align 4, !tbaa !11
  call void @libxsmm_x86_instruction_full_vec_load_of_constants(ptr noundef %117, ptr noundef %118, ptr noundef @.str.2, i8 noundef signext %121, i32 noundef 3)
  store i8 121, ptr %16, align 1, !tbaa !15
  call void @llvm.lifetime.end.p0(i64 64, ptr %22) #4
  br label %122

122:                                              ; preds = %116, %110, %104
  store i32 1, ptr %14, align 4, !tbaa !9
  br label %123

123:                                              ; preds = %174, %122
  %124 = load i32, ptr %14, align 4, !tbaa !9
  %125 = load i32, ptr %15, align 4, !tbaa !9
  %126 = icmp ult i32 %124, %125
  br i1 %126, label %127, label %177

127:                                              ; preds = %123
  store i32 0, ptr %13, align 4, !tbaa !9
  br label %128

128:                                              ; preds = %170, %127
  %129 = load i32, ptr %13, align 4, !tbaa !9
  %130 = load i32, ptr %11, align 4, !tbaa !9
  %131 = icmp ult i32 %129, %130
  br i1 %131, label %132, label %173

132:                                              ; preds = %128
  %133 = load ptr, ptr %7, align 8, !tbaa !5
  %134 = load ptr, ptr %9, align 8, !tbaa !5
  %135 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %134, i32 0, i32 13
  %136 = load i32, ptr %135, align 4, !tbaa !20
  %137 = load ptr, ptr %9, align 8, !tbaa !5
  %138 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %137, i32 0, i32 21
  %139 = load i8, ptr %138, align 4, !tbaa !11
  %140 = load ptr, ptr %9, align 8, !tbaa !5
  %141 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %140, i32 0, i32 1
  %142 = load i32, ptr %141, align 4, !tbaa !21
  %143 = load i32, ptr %11, align 4, !tbaa !9
  %144 = load i32, ptr %14, align 4, !tbaa !9
  %145 = add i32 %144, 1
  %146 = mul i32 %143, %145
  %147 = sub i32 %142, %146
  %148 = load i32, ptr %13, align 4, !tbaa !9
  %149 = add i32 %147, %148
  %150 = load ptr, ptr %9, align 8, !tbaa !5
  %151 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %150, i32 0, i32 1
  %152 = load i32, ptr %151, align 4, !tbaa !21
  %153 = load i32, ptr %11, align 4, !tbaa !9
  %154 = load i32, ptr %14, align 4, !tbaa !9
  %155 = add i32 %154, 1
  %156 = mul i32 %153, %155
  %157 = sub i32 %152, %156
  %158 = load i32, ptr %13, align 4, !tbaa !9
  %159 = add i32 %157, %158
  %160 = load ptr, ptr %9, align 8, !tbaa !5
  %161 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %160, i32 0, i32 1
  %162 = load i32, ptr %161, align 4, !tbaa !21
  %163 = load i32, ptr %11, align 4, !tbaa !9
  %164 = load i32, ptr %14, align 4, !tbaa !9
  %165 = add i32 %164, 1
  %166 = mul i32 %163, %165
  %167 = sub i32 %162, %166
  %168 = load i32, ptr %13, align 4, !tbaa !9
  %169 = add i32 %167, %168
  call void @libxsmm_x86_instruction_vec_compute_3reg(ptr noundef %133, i32 noundef %136, i8 noundef signext %139, i32 noundef %149, i32 noundef %159, i32 noundef %169)
  br label %170

170:                                              ; preds = %132
  %171 = load i32, ptr %13, align 4, !tbaa !9
  %172 = add i32 %171, 1
  store i32 %172, ptr %13, align 4, !tbaa !9
  br label %128, !llvm.loop !22

173:                                              ; preds = %128
  br label %174

174:                                              ; preds = %173
  %175 = load i32, ptr %14, align 4, !tbaa !9
  %176 = add i32 %175, 1
  store i32 %176, ptr %14, align 4, !tbaa !9
  br label %123, !llvm.loop !24

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

183:                                              ; preds = %177
  %184 = load ptr, ptr %7, align 8, !tbaa !5
  %185 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %184, i32 0, i32 6
  %186 = load i32, ptr %185, align 4, !tbaa !25
  %187 = icmp eq i32 %186, 1051
  br i1 %187, label %198, label %188

188:                                              ; preds = %183
  %189 = load ptr, ptr %7, align 8, !tbaa !5
  %190 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %189, i32 0, i32 6
  %191 = load i32, ptr %190, align 4, !tbaa !25
  %192 = icmp eq i32 %191, 1052
  br i1 %192, label %198, label %193

193:                                              ; preds = %188
  %194 = load ptr, ptr %7, align 8, !tbaa !5
  %195 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %194, i32 0, i32 6
  %196 = load i32, ptr %195, align 4, !tbaa !25
  %197 = icmp eq i32 %196, 1053
  br i1 %197, label %198, label %204

198:                                              ; preds = %193, %188, %183
  call void @llvm.lifetime.start.p0(i64 32, ptr %23) #4
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %23, ptr align 16 @__const.libxsmm_generator_gemm_avx512_microkernel_fsdbcst.l_all_ones, i64 32, i1 false)
  %199 = load ptr, ptr %7, align 8, !tbaa !5
  %200 = getelementptr inbounds [16 x i16], ptr %23, i64 0, i64 0
  %201 = load ptr, ptr %9, align 8, !tbaa !5
  %202 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %201, i32 0, i32 21
  %203 = load i8, ptr %202, align 4, !tbaa !11
  call void @libxsmm_x86_instruction_full_vec_load_of_constants(ptr noundef %199, ptr noundef %200, ptr noundef @.str.3, i8 noundef signext %203, i32 noundef 2)
  call void @llvm.lifetime.end.p0(i64 32, ptr %23) #4
  br label %222

204:                                              ; preds = %193, %177
  %205 = load ptr, ptr %10, align 8, !tbaa !5
  %206 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %205, i32 0, i32 8
  %207 = getelementptr inbounds [3 x i8], ptr %206, i64 0, i64 0
  %208 = call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef %207)
  %209 = icmp eq i32 12, %208
  br i1 %209, label %210, label %221

210:                                              ; preds = %204
  %211 = load ptr, ptr %7, align 8, !tbaa !5
  %212 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %211, i32 0, i32 6
  %213 = load i32, ptr %212, align 4, !tbaa !25
  %214 = icmp ult i32 %213, 1102
  br i1 %214, label %215, label %221

215:                                              ; preds = %210
  call void @llvm.lifetime.start.p0(i64 64, ptr %24) #4
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %24, ptr align 16 @__const.libxsmm_generator_gemm_avx512_microkernel_fsdbcst.l_all_ones.4, i64 64, i1 false)
  %216 = load ptr, ptr %7, align 8, !tbaa !5
  %217 = getelementptr inbounds [32 x i16], ptr %24, i64 0, i64 0
  %218 = load ptr, ptr %9, align 8, !tbaa !5
  %219 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %218, i32 0, i32 21
  %220 = load i8, ptr %219, align 4, !tbaa !11
  call void @libxsmm_x86_instruction_full_vec_load_of_constants(ptr noundef %216, ptr noundef %217, ptr noundef @.str.3, i8 noundef signext %220, i32 noundef 2)
  call void @llvm.lifetime.end.p0(i64 64, ptr %24) #4
  br label %221

221:                                              ; preds = %215, %210, %204
  br label %222

222:                                              ; preds = %221, %198
  store i32 0, ptr %14, align 4, !tbaa !9
  br label %223

223:                                              ; preds = %914, %222
  %224 = load i32, ptr %14, align 4, !tbaa !9
  %225 = load i32, ptr %19, align 4, !tbaa !9
  %226 = icmp ult i32 %224, %225
  br i1 %226, label %227, label %917

227:                                              ; preds = %223
  %228 = load i32, ptr %14, align 4, !tbaa !9
  %229 = icmp eq i32 %228, 0
  br i1 %229, label %230, label %286

230:                                              ; preds = %227
  %231 = load ptr, ptr %7, align 8, !tbaa !5
  %232 = load ptr, ptr %7, align 8, !tbaa !5
  %233 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %232, i32 0, i32 6
  %234 = load i32, ptr %233, align 4, !tbaa !25
  %235 = load i32, ptr %20, align 4, !tbaa !9
  %236 = load ptr, ptr %8, align 8, !tbaa !5
  %237 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %236, i32 0, i32 1
  %238 = load i32, ptr %237, align 4, !tbaa !27
  %239 = load ptr, ptr %10, align 8, !tbaa !5
  %240 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %239, i32 0, i32 3
  %241 = load i32, ptr %240, align 1, !tbaa !29
  %242 = load i32, ptr %14, align 4, !tbaa !9
  %243 = mul i32 %241, %242
  %244 = load ptr, ptr %9, align 8, !tbaa !5
  %245 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %244, i32 0, i32 3
  %246 = load i32, ptr %245, align 4, !tbaa !30
  %247 = mul i32 %243, %246
  %248 = load i32, ptr %18, align 4, !tbaa !9
  %249 = mul i32 %247, %248
  %250 = load i8, ptr %16, align 1, !tbaa !15
  %251 = load i32, ptr %17, align 4, !tbaa !9
  %252 = add i32 0, %251
  %253 = load ptr, ptr %9, align 8, !tbaa !5
  %254 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %253, i32 0, i32 11
  %255 = load i32, ptr %254, align 4, !tbaa !31
  call void @libxsmm_x86_instruction_vec_move(ptr noundef %231, i32 noundef %234, i32 noundef %235, i32 noundef %238, i32 noundef 127, i32 noundef 0, i32 noundef %249, i8 noundef signext %250, i32 noundef %252, i32 noundef %255, i32 noundef 1, i32 noundef 0)
  %256 = load i32, ptr %19, align 4, !tbaa !9
  %257 = icmp ugt i32 %256, 1
  br i1 %257, label %258, label %285

258:                                              ; preds = %230
  %259 = load ptr, ptr %7, align 8, !tbaa !5
  %260 = load ptr, ptr %7, align 8, !tbaa !5
  %261 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %260, i32 0, i32 6
  %262 = load i32, ptr %261, align 4, !tbaa !25
  %263 = load i32, ptr %20, align 4, !tbaa !9
  %264 = load ptr, ptr %8, align 8, !tbaa !5
  %265 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %264, i32 0, i32 1
  %266 = load i32, ptr %265, align 4, !tbaa !27
  %267 = load ptr, ptr %10, align 8, !tbaa !5
  %268 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %267, i32 0, i32 3
  %269 = load i32, ptr %268, align 1, !tbaa !29
  %270 = load i32, ptr %14, align 4, !tbaa !9
  %271 = add i32 %270, 1
  %272 = mul i32 %269, %271
  %273 = load ptr, ptr %9, align 8, !tbaa !5
  %274 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %273, i32 0, i32 3
  %275 = load i32, ptr %274, align 4, !tbaa !30
  %276 = mul i32 %272, %275
  %277 = load i32, ptr %18, align 4, !tbaa !9
  %278 = mul i32 %276, %277
  %279 = load i8, ptr %16, align 1, !tbaa !15
  %280 = load i32, ptr %17, align 4, !tbaa !9
  %281 = add i32 1, %280
  %282 = load ptr, ptr %9, align 8, !tbaa !5
  %283 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %282, i32 0, i32 11
  %284 = load i32, ptr %283, align 4, !tbaa !31
  call void @libxsmm_x86_instruction_vec_move(ptr noundef %259, i32 noundef %262, i32 noundef %263, i32 noundef %266, i32 noundef 127, i32 noundef 0, i32 noundef %278, i8 noundef signext %279, i32 noundef %281, i32 noundef %284, i32 noundef 1, i32 noundef 0)
  br label %285

285:                                              ; preds = %258, %230
  br label %322

286:                                              ; preds = %227
  %287 = load i32, ptr %14, align 4, !tbaa !9
  %288 = load i32, ptr %19, align 4, !tbaa !9
  %289 = sub i32 %288, 1
  %290 = icmp ult i32 %287, %289
  br i1 %290, label %291, label %321

291:                                              ; preds = %286
  %292 = load ptr, ptr %7, align 8, !tbaa !5
  %293 = load ptr, ptr %7, align 8, !tbaa !5
  %294 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %293, i32 0, i32 6
  %295 = load i32, ptr %294, align 4, !tbaa !25
  %296 = load i32, ptr %20, align 4, !tbaa !9
  %297 = load ptr, ptr %8, align 8, !tbaa !5
  %298 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %297, i32 0, i32 1
  %299 = load i32, ptr %298, align 4, !tbaa !27
  %300 = load ptr, ptr %10, align 8, !tbaa !5
  %301 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %300, i32 0, i32 3
  %302 = load i32, ptr %301, align 1, !tbaa !29
  %303 = load i32, ptr %14, align 4, !tbaa !9
  %304 = add i32 %303, 1
  %305 = mul i32 %302, %304
  %306 = load ptr, ptr %9, align 8, !tbaa !5
  %307 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %306, i32 0, i32 3
  %308 = load i32, ptr %307, align 4, !tbaa !30
  %309 = mul i32 %305, %308
  %310 = load i32, ptr %18, align 4, !tbaa !9
  %311 = mul i32 %309, %310
  %312 = load i8, ptr %16, align 1, !tbaa !15
  %313 = load i32, ptr %14, align 4, !tbaa !9
  %314 = add i32 %313, 1
  %315 = urem i32 %314, 2
  %316 = load i32, ptr %17, align 4, !tbaa !9
  %317 = add i32 %315, %316
  %318 = load ptr, ptr %9, align 8, !tbaa !5
  %319 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %318, i32 0, i32 11
  %320 = load i32, ptr %319, align 4, !tbaa !31
  call void @libxsmm_x86_instruction_vec_move(ptr noundef %292, i32 noundef %295, i32 noundef %296, i32 noundef %299, i32 noundef 127, i32 noundef 0, i32 noundef %311, i8 noundef signext %312, i32 noundef %317, i32 noundef %320, i32 noundef 1, i32 noundef 0)
  br label %321

321:                                              ; preds = %291, %286
  br label %322

322:                                              ; preds = %321, %285
  %323 = load ptr, ptr %10, align 8, !tbaa !5
  %324 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %323, i32 0, i32 7
  %325 = load i8, ptr %324, align 1, !tbaa !32
  %326 = zext i8 %325 to i32
  %327 = icmp eq i32 %326, 1
  br i1 %327, label %328, label %372

328:                                              ; preds = %322
  %329 = load ptr, ptr %7, align 8, !tbaa !5
  %330 = load ptr, ptr %9, align 8, !tbaa !5
  %331 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %330, i32 0, i32 12
  %332 = load i32, ptr %331, align 8, !tbaa !33
  %333 = load ptr, ptr %8, align 8, !tbaa !5
  %334 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %333, i32 0, i32 6
  %335 = load i32, ptr %334, align 4, !tbaa !34
  %336 = load ptr, ptr %10, align 8, !tbaa !5
  %337 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %336, i32 0, i32 3
  %338 = load i32, ptr %337, align 1, !tbaa !29
  %339 = load i32, ptr %14, align 4, !tbaa !9
  %340 = mul i32 %338, %339
  %341 = load ptr, ptr %9, align 8, !tbaa !5
  %342 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %341, i32 0, i32 3
  %343 = load i32, ptr %342, align 4, !tbaa !30
  %344 = mul i32 %340, %343
  %345 = load i32, ptr %18, align 4, !tbaa !9
  %346 = mul i32 %344, %345
  call void @libxsmm_x86_instruction_prefetch(ptr noundef %329, i32 noundef %332, i32 noundef %335, i32 noundef 127, i32 noundef 0, i32 noundef %346)
  %347 = load i32, ptr %14, align 4, !tbaa !9
  %348 = load i32, ptr %19, align 4, !tbaa !9
  %349 = sub i32 %348, 1
  %350 = icmp eq i32 %347, %349
  br i1 %350, label %351, label %371

351:                                              ; preds = %328
  %352 = load ptr, ptr %7, align 8, !tbaa !5
  %353 = load ptr, ptr %9, align 8, !tbaa !5
  %354 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %353, i32 0, i32 16
  %355 = load i32, ptr %354, align 8, !tbaa !35
  %356 = load ptr, ptr %8, align 8, !tbaa !5
  %357 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %356, i32 0, i32 6
  %358 = load i32, ptr %357, align 4, !tbaa !34
  %359 = load i32, ptr %12, align 4, !tbaa !9
  %360 = zext i32 %359 to i64
  %361 = load ptr, ptr %9, align 8, !tbaa !5
  %362 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %361, i32 0, i32 3
  %363 = load i32, ptr %362, align 4, !tbaa !30
  %364 = zext i32 %363 to i64
  %365 = mul nsw i64 %360, %364
  %366 = load ptr, ptr %10, align 8, !tbaa !5
  %367 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %366, i32 0, i32 3
  %368 = load i32, ptr %367, align 1, !tbaa !29
  %369 = zext i32 %368 to i64
  %370 = mul nsw i64 %365, %369
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef %352, i32 noundef %355, i32 noundef %358, i64 noundef %370)
  br label %371

371:                                              ; preds = %351, %328
  br label %372

372:                                              ; preds = %371, %322
  %373 = load i32, ptr %14, align 4, !tbaa !9
  %374 = load i32, ptr %19, align 4, !tbaa !9
  %375 = sub i32 %374, 1
  %376 = icmp eq i32 %373, %375
  br i1 %376, label %377, label %397

377:                                              ; preds = %372
  %378 = load ptr, ptr %7, align 8, !tbaa !5
  %379 = load ptr, ptr %9, align 8, !tbaa !5
  %380 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %379, i32 0, i32 16
  %381 = load i32, ptr %380, align 8, !tbaa !35
  %382 = load ptr, ptr %8, align 8, !tbaa !5
  %383 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %382, i32 0, i32 1
  %384 = load i32, ptr %383, align 4, !tbaa !27
  %385 = load i32, ptr %12, align 4, !tbaa !9
  %386 = zext i32 %385 to i64
  %387 = load ptr, ptr %9, align 8, !tbaa !5
  %388 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %387, i32 0, i32 3
  %389 = load i32, ptr %388, align 4, !tbaa !30
  %390 = zext i32 %389 to i64
  %391 = mul nsw i64 %386, %390
  %392 = load ptr, ptr %10, align 8, !tbaa !5
  %393 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %392, i32 0, i32 3
  %394 = load i32, ptr %393, align 1, !tbaa !29
  %395 = zext i32 %394 to i64
  %396 = mul nsw i64 %391, %395
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef %378, i32 noundef %381, i32 noundef %384, i64 noundef %396)
  br label %397

397:                                              ; preds = %377, %372
  %398 = load ptr, ptr %10, align 8, !tbaa !5
  %399 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %398, i32 0, i32 8
  %400 = getelementptr inbounds [3 x i8], ptr %399, i64 0, i64 0
  %401 = call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef %400)
  %402 = icmp eq i32 2, %401
  br i1 %402, label %403, label %426

403:                                              ; preds = %397
  %404 = load ptr, ptr %10, align 8, !tbaa !5
  %405 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %404, i32 0, i32 6
  %406 = load i32, ptr %405, align 1, !tbaa !17
  %407 = and i32 %406, 2048
  %408 = icmp eq i32 %407, 0
  br i1 %408, label %409, label %426

409:                                              ; preds = %403
  %410 = load ptr, ptr %7, align 8, !tbaa !5
  %411 = load ptr, ptr %9, align 8, !tbaa !5
  %412 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %411, i32 0, i32 21
  %413 = load i8, ptr %412, align 4, !tbaa !11
  %414 = load i32, ptr %14, align 4, !tbaa !9
  %415 = urem i32 %414, 2
  %416 = load i32, ptr %14, align 4, !tbaa !9
  %417 = urem i32 %416, 2
  call void @libxsmm_x86_instruction_vec_compute_2reg(ptr noundef %410, i32 noundef 537208099, i8 noundef signext %413, i32 noundef %415, i32 noundef %417)
  %418 = load ptr, ptr %7, align 8, !tbaa !5
  %419 = load ptr, ptr %9, align 8, !tbaa !5
  %420 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %419, i32 0, i32 21
  %421 = load i8, ptr %420, align 4, !tbaa !11
  %422 = load i32, ptr %14, align 4, !tbaa !9
  %423 = urem i32 %422, 2
  %424 = load i32, ptr %14, align 4, !tbaa !9
  %425 = urem i32 %424, 2
  call void @libxsmm_x86_instruction_vec_compute_2reg_imm8(ptr noundef %418, i32 noundef 611128946, i8 noundef signext %421, i32 noundef %423, i32 noundef %425, i32 noundef 16)
  br label %426

426:                                              ; preds = %409, %403, %397
  %427 = load ptr, ptr %10, align 8, !tbaa !5
  %428 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %427, i32 0, i32 6
  %429 = load i32, ptr %428, align 1, !tbaa !17
  %430 = and i32 %429, 2
  %431 = icmp eq i32 %430, 0
  br i1 %431, label %432, label %842

432:                                              ; preds = %426
  store i32 0, ptr %13, align 4, !tbaa !9
  br label %433

433:                                              ; preds = %838, %432
  %434 = load i32, ptr %13, align 4, !tbaa !9
  %435 = load i32, ptr %11, align 4, !tbaa !9
  %436 = icmp ult i32 %434, %435
  br i1 %436, label %437, label %841

437:                                              ; preds = %433
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #4
  %438 = load ptr, ptr %8, align 8, !tbaa !5
  %439 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %438, i32 0, i32 3
  %440 = load i32, ptr %439, align 4, !tbaa !36
  store i32 %440, ptr %25, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #4
  store i32 127, ptr %26, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #4
  store i32 0, ptr %27, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #4
  %441 = load i32, ptr %14, align 4, !tbaa !9
  %442 = load ptr, ptr %9, align 8, !tbaa !5
  %443 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %442, i32 0, i32 4
  %444 = load i32, ptr %443, align 8, !tbaa !37
  %445 = mul i32 %441, %444
  %446 = load i32, ptr %18, align 4, !tbaa !9
  %447 = mul i32 %445, %446
  %448 = load i32, ptr %13, align 4, !tbaa !9
  %449 = load ptr, ptr %10, align 8, !tbaa !5
  %450 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %449, i32 0, i32 4
  %451 = load i32, ptr %450, align 1, !tbaa !38
  %452 = mul i32 %448, %451
  %453 = load ptr, ptr %9, align 8, !tbaa !5
  %454 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %453, i32 0, i32 4
  %455 = load i32, ptr %454, align 8, !tbaa !37
  %456 = mul i32 %452, %455
  %457 = add i32 %447, %456
  store i32 %457, ptr %28, align 4, !tbaa !9
  %458 = load ptr, ptr %10, align 8, !tbaa !5
  %459 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %458, i32 0, i32 8
  %460 = getelementptr inbounds [3 x i8], ptr %459, i64 0, i64 0
  %461 = call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef %460)
  %462 = icmp eq i32 1, %461
  br i1 %462, label %519, label %463

463:                                              ; preds = %437
  %464 = load ptr, ptr %10, align 8, !tbaa !5
  %465 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %464, i32 0, i32 8
  %466 = getelementptr inbounds [3 x i8], ptr %465, i64 0, i64 0
  %467 = call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef %466)
  %468 = icmp eq i32 0, %467
  br i1 %468, label %519, label %469

469:                                              ; preds = %463
  %470 = load ptr, ptr %10, align 8, !tbaa !5
  %471 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %470, i32 0, i32 8
  %472 = getelementptr inbounds [3 x i8], ptr %471, i64 0, i64 0
  %473 = call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef %472)
  %474 = icmp eq i32 10, %473
  br i1 %474, label %475, label %485

475:                                              ; preds = %469
  %476 = load ptr, ptr %7, align 8, !tbaa !5
  %477 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %476, i32 0, i32 6
  %478 = load i32, ptr %477, align 4, !tbaa !25
  %479 = icmp ne i32 %478, 1051
  br i1 %479, label %480, label %485

480:                                              ; preds = %475
  %481 = load ptr, ptr %7, align 8, !tbaa !5
  %482 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %481, i32 0, i32 6
  %483 = load i32, ptr %482, align 4, !tbaa !25
  %484 = icmp ne i32 %483, 1101
  br i1 %484, label %519, label %485

485:                                              ; preds = %480, %475, %469
  %486 = load ptr, ptr %10, align 8, !tbaa !5
  %487 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %486, i32 0, i32 8
  %488 = getelementptr inbounds [3 x i8], ptr %487, i64 0, i64 0
  %489 = call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef %488)
  %490 = icmp eq i32 2, %489
  br i1 %490, label %491, label %497

491:                                              ; preds = %485
  %492 = load ptr, ptr %10, align 8, !tbaa !5
  %493 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %492, i32 0, i32 6
  %494 = load i32, ptr %493, align 1, !tbaa !17
  %495 = and i32 %494, 2048
  %496 = icmp ugt i32 %495, 0
  br i1 %496, label %519, label %497

497:                                              ; preds = %491, %485
  %498 = load ptr, ptr %10, align 8, !tbaa !5
  %499 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %498, i32 0, i32 8
  %500 = getelementptr inbounds [3 x i8], ptr %499, i64 0, i64 0
  %501 = call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef %500)
  %502 = icmp eq i32 12, %501
  br i1 %502, label %503, label %585

503:                                              ; preds = %497
  %504 = load ptr, ptr %10, align 8, !tbaa !5
  %505 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %504, i32 0, i32 6
  %506 = load i32, ptr %505, align 1, !tbaa !17
  %507 = and i32 %506, 256
  %508 = icmp ugt i32 %507, 0
  br i1 %508, label %509, label %585

509:                                              ; preds = %503
  %510 = load ptr, ptr %7, align 8, !tbaa !5
  %511 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %510, i32 0, i32 6
  %512 = load i32, ptr %511, align 4, !tbaa !25
  %513 = icmp ne i32 %512, 1051
  br i1 %513, label %514, label %585

514:                                              ; preds = %509
  %515 = load ptr, ptr %7, align 8, !tbaa !5
  %516 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %515, i32 0, i32 6
  %517 = load i32, ptr %516, align 4, !tbaa !25
  %518 = icmp ne i32 %517, 1101
  br i1 %518, label %519, label %585

519:                                              ; preds = %514, %491, %480, %463, %437
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #4
  store i32 0, ptr %29, align 4, !tbaa !9
  %520 = load ptr, ptr %10, align 8, !tbaa !5
  %521 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %520, i32 0, i32 8
  %522 = getelementptr inbounds [3 x i8], ptr %521, i64 0, i64 0
  %523 = call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef %522)
  %524 = icmp eq i32 1, %523
  br i1 %524, label %531, label %525

525:                                              ; preds = %519
  %526 = load ptr, ptr %10, align 8, !tbaa !5
  %527 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %526, i32 0, i32 8
  %528 = getelementptr inbounds [3 x i8], ptr %527, i64 0, i64 0
  %529 = call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef %528)
  %530 = icmp eq i32 0, %529
  br i1 %530, label %531, label %535

531:                                              ; preds = %525, %519
  %532 = load ptr, ptr %9, align 8, !tbaa !5
  %533 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %532, i32 0, i32 14
  %534 = load i32, ptr %533, align 8, !tbaa !39
  store i32 %534, ptr %29, align 4, !tbaa !9
  br label %559

535:                                              ; preds = %525
  %536 = load ptr, ptr %10, align 8, !tbaa !5
  %537 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %536, i32 0, i32 8
  %538 = getelementptr inbounds [3 x i8], ptr %537, i64 0, i64 0
  %539 = call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef %538)
  %540 = icmp eq i32 2, %539
  br i1 %540, label %541, label %542

541:                                              ; preds = %535
  store i32 -268032430, ptr %29, align 4, !tbaa !9
  br label %558

542:                                              ; preds = %535
  %543 = load ptr, ptr %10, align 8, !tbaa !5
  %544 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %543, i32 0, i32 8
  %545 = getelementptr inbounds [3 x i8], ptr %544, i64 0, i64 0
  %546 = call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef %545)
  %547 = icmp eq i32 10, %546
  br i1 %547, label %548, label %549

548:                                              ; preds = %542
  store i32 805643858, ptr %29, align 4, !tbaa !9
  br label %557

549:                                              ; preds = %542
  %550 = load ptr, ptr %10, align 8, !tbaa !5
  %551 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %550, i32 0, i32 8
  %552 = getelementptr inbounds [3 x i8], ptr %551, i64 0, i64 0
  %553 = call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef %552)
  %554 = icmp eq i32 12, %553
  br i1 %554, label %555, label %556

555:                                              ; preds = %549
  store i32 805643856, ptr %29, align 4, !tbaa !9
  br label %556

556:                                              ; preds = %555, %549
  br label %557

557:                                              ; preds = %556, %548
  br label %558

558:                                              ; preds = %557, %541
  br label %559

559:                                              ; preds = %558, %531
  %560 = load ptr, ptr %7, align 8, !tbaa !5
  %561 = load i32, ptr %29, align 4, !tbaa !9
  %562 = load ptr, ptr %9, align 8, !tbaa !5
  %563 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %562, i32 0, i32 21
  %564 = load i8, ptr %563, align 4, !tbaa !11
  %565 = load i32, ptr %25, align 4, !tbaa !9
  %566 = load i32, ptr %26, align 4, !tbaa !9
  %567 = load i32, ptr %27, align 4, !tbaa !9
  %568 = load i32, ptr %28, align 4, !tbaa !9
  %569 = load i32, ptr %14, align 4, !tbaa !9
  %570 = urem i32 %569, 2
  %571 = load i32, ptr %17, align 4, !tbaa !9
  %572 = add i32 %570, %571
  %573 = load ptr, ptr %9, align 8, !tbaa !5
  %574 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %573, i32 0, i32 1
  %575 = load i32, ptr %574, align 4, !tbaa !21
  %576 = load i32, ptr %11, align 4, !tbaa !9
  %577 = load i32, ptr %14, align 4, !tbaa !9
  %578 = load i32, ptr %15, align 4, !tbaa !9
  %579 = urem i32 %577, %578
  %580 = add i32 %579, 1
  %581 = mul i32 %576, %580
  %582 = sub i32 %575, %581
  %583 = load i32, ptr %13, align 4, !tbaa !9
  %584 = add i32 %582, %583
  call void @libxsmm_x86_instruction_vec_compute_mem_2reg(ptr noundef %560, i32 noundef %561, i8 noundef signext %564, i32 noundef %565, i32 noundef %566, i32 noundef %567, i32 noundef %568, i32 noundef 1, i32 noundef %572, i32 noundef %584)
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #4
  br label %837

585:                                              ; preds = %514, %509, %503, %497
  %586 = load ptr, ptr %10, align 8, !tbaa !5
  %587 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %586, i32 0, i32 8
  %588 = getelementptr inbounds [3 x i8], ptr %587, i64 0, i64 0
  %589 = call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef %588)
  %590 = icmp eq i32 2, %589
  br i1 %590, label %591, label %631

591:                                              ; preds = %585
  %592 = load ptr, ptr %10, align 8, !tbaa !5
  %593 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %592, i32 0, i32 6
  %594 = load i32, ptr %593, align 1, !tbaa !17
  %595 = and i32 %594, 2048
  %596 = icmp eq i32 %595, 0
  br i1 %596, label %597, label %631

597:                                              ; preds = %591
  %598 = load ptr, ptr %7, align 8, !tbaa !5
  %599 = load ptr, ptr %7, align 8, !tbaa !5
  %600 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %599, i32 0, i32 6
  %601 = load i32, ptr %600, align 4, !tbaa !25
  %602 = load i32, ptr %25, align 4, !tbaa !9
  %603 = load i32, ptr %26, align 4, !tbaa !9
  %604 = load i32, ptr %27, align 4, !tbaa !9
  %605 = load i32, ptr %28, align 4, !tbaa !9
  %606 = load ptr, ptr %9, align 8, !tbaa !5
  %607 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %606, i32 0, i32 21
  %608 = load i8, ptr %607, align 4, !tbaa !11
  call void @libxsmm_x86_instruction_vec_move(ptr noundef %598, i32 noundef %601, i32 noundef 537209209, i32 noundef %602, i32 noundef %603, i32 noundef %604, i32 noundef %605, i8 noundef signext %608, i32 noundef 2, i32 noundef 0, i32 noundef 1, i32 noundef 0)
  %609 = load ptr, ptr %7, align 8, !tbaa !5
  %610 = load ptr, ptr %9, align 8, !tbaa !5
  %611 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %610, i32 0, i32 21
  %612 = load i8, ptr %611, align 4, !tbaa !11
  call void @libxsmm_x86_instruction_vec_compute_3reg(ptr noundef %609, i32 noundef 805639899, i8 noundef signext %612, i32 noundef 2, i32 noundef 3, i32 noundef 2)
  %613 = load ptr, ptr %7, align 8, !tbaa !5
  %614 = load ptr, ptr %9, align 8, !tbaa !5
  %615 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %614, i32 0, i32 21
  %616 = load i8, ptr %615, align 4, !tbaa !11
  %617 = load i32, ptr %14, align 4, !tbaa !9
  %618 = urem i32 %617, 2
  %619 = load ptr, ptr %9, align 8, !tbaa !5
  %620 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %619, i32 0, i32 1
  %621 = load i32, ptr %620, align 4, !tbaa !21
  %622 = load i32, ptr %11, align 4, !tbaa !9
  %623 = load i32, ptr %14, align 4, !tbaa !9
  %624 = load i32, ptr %15, align 4, !tbaa !9
  %625 = urem i32 %623, %624
  %626 = add i32 %625, 1
  %627 = mul i32 %622, %626
  %628 = sub i32 %621, %627
  %629 = load i32, ptr %13, align 4, !tbaa !9
  %630 = add i32 %628, %629
  call void @libxsmm_x86_instruction_vec_compute_3reg(ptr noundef %613, i32 noundef 805643960, i8 noundef signext %616, i32 noundef %618, i32 noundef 2, i32 noundef %630)
  br label %836

631:                                              ; preds = %591, %585
  %632 = load ptr, ptr %10, align 8, !tbaa !5
  %633 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %632, i32 0, i32 8
  %634 = getelementptr inbounds [3 x i8], ptr %633, i64 0, i64 0
  %635 = call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef %634)
  %636 = icmp eq i32 12, %635
  br i1 %636, label %637, label %683

637:                                              ; preds = %631
  %638 = load ptr, ptr %10, align 8, !tbaa !5
  %639 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %638, i32 0, i32 6
  %640 = load i32, ptr %639, align 1, !tbaa !17
  %641 = and i32 %640, 512
  %642 = icmp ugt i32 %641, 0
  br i1 %642, label %643, label %683

643:                                              ; preds = %637
  %644 = load ptr, ptr %7, align 8, !tbaa !5
  %645 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %644, i32 0, i32 6
  %646 = load i32, ptr %645, align 4, !tbaa !25
  %647 = icmp ne i32 %646, 1051
  br i1 %647, label %648, label %683

648:                                              ; preds = %643
  %649 = load ptr, ptr %7, align 8, !tbaa !5
  %650 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %649, i32 0, i32 6
  %651 = load i32, ptr %650, align 4, !tbaa !25
  %652 = icmp ne i32 %651, 1101
  br i1 %652, label %653, label %683

653:                                              ; preds = %648
  %654 = load ptr, ptr %7, align 8, !tbaa !5
  %655 = load ptr, ptr %7, align 8, !tbaa !5
  %656 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %655, i32 0, i32 6
  %657 = load i32, ptr %656, align 4, !tbaa !25
  %658 = load i32, ptr %25, align 4, !tbaa !9
  %659 = load i32, ptr %26, align 4, !tbaa !9
  %660 = load i32, ptr %27, align 4, !tbaa !9
  %661 = load i32, ptr %28, align 4, !tbaa !9
  %662 = load ptr, ptr %9, align 8, !tbaa !5
  %663 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %662, i32 0, i32 21
  %664 = load i8, ptr %663, align 4, !tbaa !11
  call void @libxsmm_x86_instruction_vec_move(ptr noundef %654, i32 noundef %657, i32 noundef 537209432, i32 noundef %658, i32 noundef %659, i32 noundef %660, i32 noundef %661, i8 noundef signext %664, i32 noundef 3, i32 noundef 0, i32 noundef 1, i32 noundef 0)
  %665 = load ptr, ptr %7, align 8, !tbaa !5
  %666 = load ptr, ptr %9, align 8, !tbaa !5
  %667 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %666, i32 0, i32 21
  %668 = load i8, ptr %667, align 4, !tbaa !11
  %669 = load i32, ptr %14, align 4, !tbaa !9
  %670 = urem i32 %669, 2
  %671 = load ptr, ptr %9, align 8, !tbaa !5
  %672 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %671, i32 0, i32 1
  %673 = load i32, ptr %672, align 4, !tbaa !21
  %674 = load i32, ptr %11, align 4, !tbaa !9
  %675 = load i32, ptr %14, align 4, !tbaa !9
  %676 = load i32, ptr %15, align 4, !tbaa !9
  %677 = urem i32 %675, %676
  %678 = add i32 %677, 1
  %679 = mul i32 %674, %678
  %680 = sub i32 %673, %679
  %681 = load i32, ptr %13, align 4, !tbaa !9
  %682 = add i32 %680, %681
  call void @libxsmm_x86_instruction_vec_compute_3reg(ptr noundef %665, i32 noundef 805643856, i8 noundef signext %668, i32 noundef %670, i32 noundef 3, i32 noundef %682)
  br label %835

683:                                              ; preds = %648, %643, %637, %631
  %684 = load ptr, ptr %10, align 8, !tbaa !5
  %685 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %684, i32 0, i32 8
  %686 = getelementptr inbounds [3 x i8], ptr %685, i64 0, i64 0
  %687 = call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef %686)
  %688 = icmp eq i32 10, %687
  br i1 %688, label %689, label %745

689:                                              ; preds = %683
  %690 = load ptr, ptr %7, align 8, !tbaa !5
  %691 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %690, i32 0, i32 6
  %692 = load i32, ptr %691, align 4, !tbaa !25
  %693 = icmp eq i32 %692, 1051
  br i1 %693, label %699, label %694

694:                                              ; preds = %689
  %695 = load ptr, ptr %7, align 8, !tbaa !5
  %696 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %695, i32 0, i32 6
  %697 = load i32, ptr %696, align 4, !tbaa !25
  %698 = icmp eq i32 %697, 1101
  br i1 %698, label %699, label %745

699:                                              ; preds = %694, %689
  %700 = load ptr, ptr %7, align 8, !tbaa !5
  %701 = load ptr, ptr %7, align 8, !tbaa !5
  %702 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %701, i32 0, i32 6
  %703 = load i32, ptr %702, align 4, !tbaa !25
  %704 = load i32, ptr %25, align 4, !tbaa !9
  %705 = load i32, ptr %26, align 4, !tbaa !9
  %706 = load i32, ptr %27, align 4, !tbaa !9
  %707 = load i32, ptr %28, align 4, !tbaa !9
  %708 = load ptr, ptr %9, align 8, !tbaa !5
  %709 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %708, i32 0, i32 21
  %710 = load i8, ptr %709, align 4, !tbaa !11
  call void @libxsmm_x86_instruction_vec_move(ptr noundef %700, i32 noundef %703, i32 noundef 537209432, i32 noundef %704, i32 noundef %705, i32 noundef %706, i32 noundef %707, i8 noundef signext %710, i32 noundef 3, i32 noundef 0, i32 noundef 1, i32 noundef 0)
  %711 = load ptr, ptr %7, align 8, !tbaa !5
  %712 = load ptr, ptr %9, align 8, !tbaa !5
  %713 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %712, i32 0, i32 21
  %714 = load i8, ptr %713, align 4, !tbaa !11
  %715 = load i32, ptr %14, align 4, !tbaa !9
  %716 = urem i32 %715, 2
  call void @libxsmm_x86_instruction_vec_compute_3reg(ptr noundef %711, i32 noundef 805639925, i8 noundef signext %714, i32 noundef %716, i32 noundef 3, i32 noundef 3)
  %717 = load ptr, ptr %7, align 8, !tbaa !5
  %718 = load ptr, ptr %9, align 8, !tbaa !5
  %719 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %718, i32 0, i32 21
  %720 = load i8, ptr %719, align 4, !tbaa !11
  %721 = load ptr, ptr %9, align 8, !tbaa !5
  %722 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %721, i32 0, i32 1
  %723 = load i32, ptr %722, align 4, !tbaa !21
  %724 = load i32, ptr %11, align 4, !tbaa !9
  %725 = load i32, ptr %14, align 4, !tbaa !9
  %726 = load i32, ptr %15, align 4, !tbaa !9
  %727 = urem i32 %725, %726
  %728 = add i32 %727, 1
  %729 = mul i32 %724, %728
  %730 = sub i32 %723, %729
  %731 = load i32, ptr %13, align 4, !tbaa !9
  %732 = add i32 %730, %731
  %733 = load ptr, ptr %9, align 8, !tbaa !5
  %734 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %733, i32 0, i32 1
  %735 = load i32, ptr %734, align 4, !tbaa !21
  %736 = load i32, ptr %11, align 4, !tbaa !9
  %737 = load i32, ptr %14, align 4, !tbaa !9
  %738 = load i32, ptr %15, align 4, !tbaa !9
  %739 = urem i32 %737, %738
  %740 = add i32 %739, 1
  %741 = mul i32 %736, %740
  %742 = sub i32 %735, %741
  %743 = load i32, ptr %13, align 4, !tbaa !9
  %744 = add i32 %742, %743
  call void @libxsmm_x86_instruction_vec_compute_3reg(ptr noundef %717, i32 noundef 805639934, i8 noundef signext %720, i32 noundef 3, i32 noundef %732, i32 noundef %744)
  br label %834

745:                                              ; preds = %694, %683
  %746 = load ptr, ptr %10, align 8, !tbaa !5
  %747 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %746, i32 0, i32 8
  %748 = getelementptr inbounds [3 x i8], ptr %747, i64 0, i64 0
  %749 = call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef %748)
  %750 = icmp eq i32 12, %749
  br i1 %750, label %751, label %832

751:                                              ; preds = %745
  %752 = load ptr, ptr %7, align 8, !tbaa !5
  %753 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %752, i32 0, i32 6
  %754 = load i32, ptr %753, align 4, !tbaa !25
  %755 = icmp eq i32 %754, 1051
  br i1 %755, label %761, label %756

756:                                              ; preds = %751
  %757 = load ptr, ptr %7, align 8, !tbaa !5
  %758 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %757, i32 0, i32 6
  %759 = load i32, ptr %758, align 4, !tbaa !25
  %760 = icmp eq i32 %759, 1101
  br i1 %760, label %761, label %832

761:                                              ; preds = %756, %751
  %762 = load ptr, ptr %7, align 8, !tbaa !5
  %763 = load ptr, ptr %7, align 8, !tbaa !5
  %764 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %763, i32 0, i32 6
  %765 = load i32, ptr %764, align 4, !tbaa !25
  %766 = load i32, ptr %25, align 4, !tbaa !9
  %767 = load i32, ptr %26, align 4, !tbaa !9
  %768 = load i32, ptr %27, align 4, !tbaa !9
  %769 = load i32, ptr %28, align 4, !tbaa !9
  %770 = load ptr, ptr %9, align 8, !tbaa !5
  %771 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %770, i32 0, i32 21
  %772 = load i8, ptr %771, align 4, !tbaa !11
  call void @libxsmm_x86_instruction_vec_move(ptr noundef %762, i32 noundef %765, i32 noundef 537209432, i32 noundef %766, i32 noundef %767, i32 noundef %768, i32 noundef %769, i8 noundef signext %772, i32 noundef 3, i32 noundef 0, i32 noundef 1, i32 noundef 0)
  %773 = load ptr, ptr %10, align 8, !tbaa !5
  %774 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %773, i32 0, i32 6
  %775 = load i32, ptr %774, align 1, !tbaa !17
  %776 = and i32 %775, 256
  %777 = icmp ugt i32 %776, 0
  br i1 %777, label %778, label %785

778:                                              ; preds = %761
  %779 = load ptr, ptr %7, align 8, !tbaa !5
  %780 = load ptr, ptr %9, align 8, !tbaa !5
  %781 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %780, i32 0, i32 21
  %782 = load i8, ptr %781, align 4, !tbaa !11
  %783 = load i32, ptr %14, align 4, !tbaa !9
  %784 = urem i32 %783, 2
  call void @libxsmm_x86_instruction_vec_compute_3reg(ptr noundef %779, i32 noundef 805643780, i8 noundef signext %782, i32 noundef 3, i32 noundef %784, i32 noundef 3)
  br label %799

785:                                              ; preds = %761
  %786 = load ptr, ptr %10, align 8, !tbaa !5
  %787 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %786, i32 0, i32 6
  %788 = load i32, ptr %787, align 1, !tbaa !17
  %789 = and i32 %788, 512
  %790 = icmp ugt i32 %789, 0
  br i1 %790, label %791, label %798

791:                                              ; preds = %785
  %792 = load ptr, ptr %7, align 8, !tbaa !5
  %793 = load ptr, ptr %9, align 8, !tbaa !5
  %794 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %793, i32 0, i32 21
  %795 = load i8, ptr %794, align 4, !tbaa !11
  %796 = load i32, ptr %14, align 4, !tbaa !9
  %797 = urem i32 %796, 2
  call void @libxsmm_x86_instruction_vec_compute_3reg(ptr noundef %792, i32 noundef 805643780, i8 noundef signext %795, i32 noundef %797, i32 noundef 3, i32 noundef 3)
  br label %798

798:                                              ; preds = %791, %785
  br label %799

799:                                              ; preds = %798, %778
  %800 = load ptr, ptr %7, align 8, !tbaa !5
  %801 = load ptr, ptr %9, align 8, !tbaa !5
  %802 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %801, i32 0, i32 21
  %803 = load i8, ptr %802, align 4, !tbaa !11
  call void @libxsmm_x86_instruction_vec_compute_3reg(ptr noundef %800, i32 noundef 805639925, i8 noundef signext %803, i32 noundef 2, i32 noundef 3, i32 noundef 3)
  %804 = load ptr, ptr %7, align 8, !tbaa !5
  %805 = load ptr, ptr %9, align 8, !tbaa !5
  %806 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %805, i32 0, i32 21
  %807 = load i8, ptr %806, align 4, !tbaa !11
  %808 = load ptr, ptr %9, align 8, !tbaa !5
  %809 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %808, i32 0, i32 1
  %810 = load i32, ptr %809, align 4, !tbaa !21
  %811 = load i32, ptr %11, align 4, !tbaa !9
  %812 = load i32, ptr %14, align 4, !tbaa !9
  %813 = load i32, ptr %15, align 4, !tbaa !9
  %814 = urem i32 %812, %813
  %815 = add i32 %814, 1
  %816 = mul i32 %811, %815
  %817 = sub i32 %810, %816
  %818 = load i32, ptr %13, align 4, !tbaa !9
  %819 = add i32 %817, %818
  %820 = load ptr, ptr %9, align 8, !tbaa !5
  %821 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %820, i32 0, i32 1
  %822 = load i32, ptr %821, align 4, !tbaa !21
  %823 = load i32, ptr %11, align 4, !tbaa !9
  %824 = load i32, ptr %14, align 4, !tbaa !9
  %825 = load i32, ptr %15, align 4, !tbaa !9
  %826 = urem i32 %824, %825
  %827 = add i32 %826, 1
  %828 = mul i32 %823, %827
  %829 = sub i32 %822, %828
  %830 = load i32, ptr %13, align 4, !tbaa !9
  %831 = add i32 %829, %830
  call void @libxsmm_x86_instruction_vec_compute_3reg(ptr noundef %804, i32 noundef 805639934, i8 noundef signext %807, i32 noundef 3, i32 noundef %819, i32 noundef %831)
  br label %833

832:                                              ; preds = %756, %745
  br label %833

833:                                              ; preds = %832, %799
  br label %834

834:                                              ; preds = %833, %699
  br label %835

835:                                              ; preds = %834, %653
  br label %836

836:                                              ; preds = %835, %597
  br label %837

837:                                              ; preds = %836, %559
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #4
  br label %838

838:                                              ; preds = %837
  %839 = load i32, ptr %13, align 4, !tbaa !9
  %840 = add i32 %839, 1
  store i32 %840, ptr %13, align 4, !tbaa !9
  br label %433, !llvm.loop !40

841:                                              ; preds = %433
  br label %913

842:                                              ; preds = %426
  store i32 0, ptr %13, align 4, !tbaa !9
  br label %843

843:                                              ; preds = %909, %842
  %844 = load i32, ptr %13, align 4, !tbaa !9
  %845 = load i32, ptr %11, align 4, !tbaa !9
  %846 = icmp ult i32 %844, %845
  br i1 %846, label %847, label %912

847:                                              ; preds = %843
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #4
  %848 = load ptr, ptr %8, align 8, !tbaa !5
  %849 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %848, i32 0, i32 3
  %850 = load i32, ptr %849, align 4, !tbaa !36
  store i32 %850, ptr %30, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #4
  store i32 127, 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
  %851 = load i32, ptr %14, align 4, !tbaa !9
  %852 = load ptr, ptr %10, align 8, !tbaa !5
  %853 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %852, i32 0, i32 4
  %854 = load i32, ptr %853, align 1, !tbaa !38
  %855 = mul i32 %851, %854
  %856 = load ptr, ptr %9, align 8, !tbaa !5
  %857 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %856, i32 0, i32 4
  %858 = load i32, ptr %857, align 8, !tbaa !37
  %859 = mul i32 %855, %858
  %860 = load i32, ptr %18, align 4, !tbaa !9
  %861 = mul i32 %859, %860
  %862 = load i32, ptr %13, align 4, !tbaa !9
  %863 = load ptr, ptr %9, align 8, !tbaa !5
  %864 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %863, i32 0, i32 4
  %865 = load i32, ptr %864, align 8, !tbaa !37
  %866 = mul i32 %862, %865
  %867 = add i32 %861, %866
  store i32 %867, ptr %33, align 4, !tbaa !9
  %868 = load ptr, ptr %10, align 8, !tbaa !5
  %869 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %868, i32 0, i32 8
  %870 = getelementptr inbounds [3 x i8], ptr %869, i64 0, i64 0
  %871 = call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef %870)
  %872 = icmp eq i32 1, %871
  br i1 %872, label %879, label %873

873:                                              ; preds = %847
  %874 = load ptr, ptr %10, align 8, !tbaa !5
  %875 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %874, i32 0, i32 8
  %876 = getelementptr inbounds [3 x i8], ptr %875, i64 0, i64 0
  %877 = call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef %876)
  %878 = icmp eq i32 0, %877
  br i1 %878, label %879, label %907

879:                                              ; preds = %873, %847
  %880 = load ptr, ptr %7, align 8, !tbaa !5
  %881 = load ptr, ptr %9, align 8, !tbaa !5
  %882 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %881, i32 0, i32 14
  %883 = load i32, ptr %882, align 8, !tbaa !39
  %884 = load ptr, ptr %9, align 8, !tbaa !5
  %885 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %884, i32 0, i32 21
  %886 = load i8, ptr %885, align 4, !tbaa !11
  %887 = load i32, ptr %30, align 4, !tbaa !9
  %888 = load i32, ptr %31, align 4, !tbaa !9
  %889 = load i32, ptr %32, align 4, !tbaa !9
  %890 = load i32, ptr %33, align 4, !tbaa !9
  %891 = load i32, ptr %14, align 4, !tbaa !9
  %892 = urem i32 %891, 2
  %893 = load i32, ptr %17, align 4, !tbaa !9
  %894 = add i32 %892, %893
  %895 = load ptr, ptr %9, align 8, !tbaa !5
  %896 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %895, i32 0, i32 1
  %897 = load i32, ptr %896, align 4, !tbaa !21
  %898 = load i32, ptr %11, align 4, !tbaa !9
  %899 = load i32, ptr %14, align 4, !tbaa !9
  %900 = load i32, ptr %15, align 4, !tbaa !9
  %901 = urem i32 %899, %900
  %902 = add i32 %901, 1
  %903 = mul i32 %898, %902
  %904 = sub i32 %897, %903
  %905 = load i32, ptr %13, align 4, !tbaa !9
  %906 = add i32 %904, %905
  call void @libxsmm_x86_instruction_vec_compute_mem_2reg(ptr noundef %880, i32 noundef %883, i8 noundef signext %886, i32 noundef %887, i32 noundef %888, i32 noundef %889, i32 noundef %890, i32 noundef 1, i32 noundef %894, i32 noundef %906)
  br label %908

907:                                              ; preds = %873
  br label %908

908:                                              ; preds = %907, %879
  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
  br label %909

909:                                              ; preds = %908
  %910 = load i32, ptr %13, align 4, !tbaa !9
  %911 = add i32 %910, 1
  store i32 %911, ptr %13, align 4, !tbaa !9
  br label %843, !llvm.loop !41

912:                                              ; preds = %843
  br label %913

913:                                              ; preds = %912, %841
  br label %914

914:                                              ; preds = %913
  %915 = load i32, ptr %14, align 4, !tbaa !9
  %916 = add i32 %915, 1
  store i32 %916, ptr %14, align 4, !tbaa !9
  br label %223, !llvm.loop !42

917:                                              ; preds = %223
  %918 = load ptr, ptr %10, align 8, !tbaa !5
  %919 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %918, i32 0, i32 6
  %920 = load i32, ptr %919, align 1, !tbaa !17
  %921 = and i32 %920, 2
  %922 = icmp eq i32 %921, 0
  br i1 %922, label %923, label %938

923:                                              ; preds = %917
  %924 = load ptr, ptr %7, align 8, !tbaa !5
  %925 = load ptr, ptr %9, align 8, !tbaa !5
  %926 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %925, i32 0, i32 16
  %927 = load i32, ptr %926, align 8, !tbaa !35
  %928 = load ptr, ptr %8, align 8, !tbaa !5
  %929 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %928, i32 0, i32 3
  %930 = load i32, ptr %929, align 4, !tbaa !36
  %931 = load i32, ptr %12, align 4, !tbaa !9
  %932 = zext i32 %931 to i64
  %933 = load ptr, ptr %9, align 8, !tbaa !5
  %934 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %933, i32 0, i32 4
  %935 = load i32, ptr %934, align 8, !tbaa !37
  %936 = zext i32 %935 to i64
  %937 = mul nsw i64 %932, %936
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef %924, i32 noundef %927, i32 noundef %930, i64 noundef %937)
  br label %958

938:                                              ; preds = %917
  %939 = load ptr, ptr %7, align 8, !tbaa !5
  %940 = load ptr, ptr %9, align 8, !tbaa !5
  %941 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %940, i32 0, i32 16
  %942 = load i32, ptr %941, align 8, !tbaa !35
  %943 = load ptr, ptr %8, align 8, !tbaa !5
  %944 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %943, i32 0, i32 3
  %945 = load i32, ptr %944, align 4, !tbaa !36
  %946 = load i32, ptr %12, align 4, !tbaa !9
  %947 = zext i32 %946 to i64
  %948 = load ptr, ptr %9, align 8, !tbaa !5
  %949 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %948, i32 0, i32 4
  %950 = load i32, ptr %949, align 8, !tbaa !37
  %951 = zext i32 %950 to i64
  %952 = mul nsw i64 %947, %951
  %953 = load ptr, ptr %10, align 8, !tbaa !5
  %954 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %953, i32 0, i32 4
  %955 = load i32, ptr %954, align 1, !tbaa !38
  %956 = zext i32 %955 to i64
  %957 = mul nsw i64 %952, %956
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef %939, i32 noundef %942, i32 noundef %945, i64 noundef %957)
  br label %958

958:                                              ; preds = %938, %923
  store i32 1, ptr %14, align 4, !tbaa !9
  br label %959

959:                                              ; preds = %1066, %958
  %960 = load i32, ptr %14, align 4, !tbaa !9
  %961 = load i32, ptr %15, align 4, !tbaa !9
  %962 = icmp ult i32 %960, %961
  br i1 %962, label %963, label %1069

963:                                              ; preds = %959
  store i32 0, ptr %13, align 4, !tbaa !9
  br label %964

964:                                              ; preds = %1062, %963
  %965 = load i32, ptr %13, align 4, !tbaa !9
  %966 = load i32, ptr %11, align 4, !tbaa !9
  %967 = icmp ult i32 %965, %966
  br i1 %967, label %968, label %1065

968:                                              ; preds = %964
  %969 = load ptr, ptr %10, align 8, !tbaa !5
  %970 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %969, i32 0, i32 8
  %971 = getelementptr inbounds [3 x i8], ptr %970, i64 0, i64 0
  %972 = call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef %971)
  %973 = icmp eq i32 1, %972
  br i1 %973, label %986, label %974

974:                                              ; preds = %968
  %975 = load ptr, ptr %10, align 8, !tbaa !5
  %976 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %975, i32 0, i32 8
  %977 = getelementptr inbounds [3 x i8], ptr %976, i64 0, i64 0
  %978 = call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef %977)
  %979 = icmp eq i32 0, %978
  br i1 %979, label %986, label %980

980:                                              ; preds = %974
  %981 = load ptr, ptr %10, align 8, !tbaa !5
  %982 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %981, i32 0, i32 8
  %983 = getelementptr inbounds [3 x i8], ptr %982, i64 0, i64 0
  %984 = call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef %983)
  %985 = icmp eq i32 2, %984
  br i1 %985, label %986, label %1018

986:                                              ; preds = %980, %974, %968
  %987 = load ptr, ptr %7, align 8, !tbaa !5
  %988 = load ptr, ptr %9, align 8, !tbaa !5
  %989 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %988, i32 0, i32 15
  %990 = load i32, ptr %989, align 4, !tbaa !43
  %991 = load ptr, ptr %9, align 8, !tbaa !5
  %992 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %991, i32 0, i32 21
  %993 = load i8, ptr %992, align 4, !tbaa !11
  %994 = load ptr, ptr %9, align 8, !tbaa !5
  %995 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %994, i32 0, i32 1
  %996 = load i32, ptr %995, align 4, !tbaa !21
  %997 = load i32, ptr %11, align 4, !tbaa !9
  %998 = load i32, ptr %14, align 4, !tbaa !9
  %999 = add i32 %998, 1
  %1000 = mul i32 %997, %999
  %1001 = sub i32 %996, %1000
  %1002 = load i32, ptr %13, align 4, !tbaa !9
  %1003 = add i32 %1001, %1002
  %1004 = load ptr, ptr %9, align 8, !tbaa !5
  %1005 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1004, i32 0, i32 1
  %1006 = load i32, ptr %1005, align 4, !tbaa !21
  %1007 = load i32, ptr %11, align 4, !tbaa !9
  %1008 = sub i32 %1006, %1007
  %1009 = load i32, ptr %13, align 4, !tbaa !9
  %1010 = add i32 %1008, %1009
  %1011 = load ptr, ptr %9, align 8, !tbaa !5
  %1012 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1011, i32 0, i32 1
  %1013 = load i32, ptr %1012, align 4, !tbaa !21
  %1014 = load i32, ptr %11, align 4, !tbaa !9
  %1015 = sub i32 %1013, %1014
  %1016 = load i32, ptr %13, align 4, !tbaa !9
  %1017 = add i32 %1015, %1016
  call void @libxsmm_x86_instruction_vec_compute_3reg(ptr noundef %987, i32 noundef %990, i8 noundef signext %993, i32 noundef %1003, i32 noundef %1010, i32 noundef %1017)
  br label %1061

1018:                                             ; preds = %980
  %1019 = load ptr, ptr %10, align 8, !tbaa !5
  %1020 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %1019, i32 0, i32 8
  %1021 = getelementptr inbounds [3 x i8], ptr %1020, i64 0, i64 0
  %1022 = call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef %1021)
  %1023 = icmp eq i32 10, %1022
  br i1 %1023, label %1030, label %1024

1024:                                             ; preds = %1018
  %1025 = load ptr, ptr %10, align 8, !tbaa !5
  %1026 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %1025, i32 0, i32 8
  %1027 = getelementptr inbounds [3 x i8], ptr %1026, i64 0, i64 0
  %1028 = call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef %1027)
  %1029 = icmp eq i32 12, %1028
  br i1 %1029, label %1030, label %1059

1030:                                             ; preds = %1024, %1018
  %1031 = load ptr, ptr %7, align 8, !tbaa !5
  %1032 = load ptr, ptr %9, align 8, !tbaa !5
  %1033 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1032, i32 0, i32 21
  %1034 = load i8, ptr %1033, align 4, !tbaa !11
  %1035 = load ptr, ptr %9, align 8, !tbaa !5
  %1036 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1035, i32 0, i32 1
  %1037 = load i32, ptr %1036, align 4, !tbaa !21
  %1038 = load i32, ptr %11, align 4, !tbaa !9
  %1039 = load i32, ptr %14, align 4, !tbaa !9
  %1040 = add i32 %1039, 1
  %1041 = mul i32 %1038, %1040
  %1042 = sub i32 %1037, %1041
  %1043 = load i32, ptr %13, align 4, !tbaa !9
  %1044 = add i32 %1042, %1043
  %1045 = load ptr, ptr %9, align 8, !tbaa !5
  %1046 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1045, i32 0, i32 1
  %1047 = load i32, ptr %1046, align 4, !tbaa !21
  %1048 = load i32, ptr %11, align 4, !tbaa !9
  %1049 = sub i32 %1047, %1048
  %1050 = load i32, ptr %13, align 4, !tbaa !9
  %1051 = add i32 %1049, %1050
  %1052 = load ptr, ptr %9, align 8, !tbaa !5
  %1053 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1052, i32 0, i32 1
  %1054 = load i32, ptr %1053, align 4, !tbaa !21
  %1055 = load i32, ptr %11, align 4, !tbaa !9
  %1056 = sub i32 %1054, %1055
  %1057 = load i32, ptr %13, align 4, !tbaa !9
  %1058 = add i32 %1056, %1057
  call void @libxsmm_x86_instruction_vec_compute_3reg(ptr noundef %1031, i32 noundef 805639934, i8 noundef signext %1034, i32 noundef %1044, i32 noundef %1051, i32 noundef %1058)
  br label %1060

1059:                                             ; preds = %1024
  br label %1060

1060:                                             ; preds = %1059, %1030
  br label %1061

1061:                                             ; preds = %1060, %986
  br label %1062

1062:                                             ; preds = %1061
  %1063 = load i32, ptr %13, align 4, !tbaa !9
  %1064 = add i32 %1063, 1
  store i32 %1064, ptr %13, align 4, !tbaa !9
  br label %964, !llvm.loop !44

1065:                                             ; preds = %964
  br label %1066

1066:                                             ; preds = %1065
  %1067 = load i32, ptr %14, align 4, !tbaa !9
  %1068 = add i32 %1067, 1
  store i32 %1068, ptr %14, align 4, !tbaa !9
  br label %959, !llvm.loop !45

1069:                                             ; preds = %959
  store i32 0, ptr %21, align 4
  br label %1070

1070:                                             ; preds = %1069, %78, %50
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #4
  call void @llvm.lifetime.end.p0(i64 1, ptr %16) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #4
  %1071 = load i32, ptr %21, align 4
  switch i32 %1071, label %1073 [
    i32 0, label %1072
    i32 1, label %1072
  ]

1072:                                             ; preds = %1070, %1070
  ret void

1073:                                             ; preds = %1070
  unreachable
}

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

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

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

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

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

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

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

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

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

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

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

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

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

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


; 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 = external hidden unnamed_addr constant [89 x i8], align 1
@libxsmm_ninit = external local_unnamed_addr global i32, align 4
@libxsmm_verbosity = external local_unnamed_addr global i32, align 4
@__func__.libxsmm_generator_gemm_avx512_microkernel_fsdbcst = external hidden unnamed_addr constant [50 x i8], align 1
@__const.libxsmm_generator_gemm_avx512_microkernel_fsdbcst.l_mask = external hidden unnamed_addr constant [16 x i32], align 16
@.str.2 = external hidden unnamed_addr constant [13 x i8], align 1
@__const.libxsmm_generator_gemm_avx512_microkernel_fsdbcst.l_all_ones = external hidden unnamed_addr constant [16 x i16], align 16
@.str.3 = external hidden unnamed_addr constant [14 x i8], align 1
@__const.libxsmm_generator_gemm_avx512_microkernel_fsdbcst.l_all_ones.4 = external hidden unnamed_addr constant [32 x i16], align 16

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

declare i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef) local_unnamed_addr #1

declare i32 @libxsmm_cpuid_dot_pack_factor(i32 noundef) local_unnamed_addr #1

; Function Attrs: nounwind uwtable
define dso_local void @libxsmm_generator_gemm_avx512_microkernel_fsdbcst(ptr noundef %0, ptr nocapture noundef readonly %1, ptr nocapture noundef readonly %2, ptr noundef %3, i32 noundef %4, i32 noundef %5) local_unnamed_addr #2 {
  %7 = alloca [16 x i32], align 16
  %8 = alloca [16 x i16], align 16
  %9 = alloca [32 x i16], align 16
  %10 = getelementptr inbounds i8, ptr %2, i64 84
  %11 = load i8, ptr %10, align 4, !tbaa !5
  %12 = getelementptr inbounds i8, ptr %2, i64 24
  %13 = load i32, ptr %12, align 8, !tbaa !13
  %14 = icmp ugt i32 %4, 28
  br i1 %14, label %15, label %20

15:                                               ; preds = %6
  %16 = load i32, ptr @libxsmm_ninit, align 4, !tbaa !14
  %17 = icmp ugt i32 %16, 1
  %18 = load i32, ptr @libxsmm_verbosity, align 4
  %19 = select i1 %17, i32 %18, i32 1
  tail call void @libxsmm_handle_error(ptr noundef %0, i32 noundef 90016, ptr noundef nonnull @__func__.libxsmm_generator_gemm_avx512_microkernel_fsdbcst, ptr noundef nonnull @.str, i32 noundef 1679, i32 noundef %19) #5
  br label %.loopexit

20:                                               ; preds = %6
  %21 = getelementptr inbounds i8, ptr %3, i64 24
  %22 = load i32, ptr %21, align 1, !tbaa !15
  %23 = and i32 %22, 2048
  %.not = icmp eq i32 %23, 0
  br i1 %.not, label %35, label %24

24:                                               ; preds = %20
  %25 = getelementptr inbounds i8, ptr %3, i64 29
  %26 = tail call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef nonnull %25) #5
  %27 = tail call i32 @libxsmm_cpuid_dot_pack_factor(i32 noundef %26) #5
  %28 = udiv i32 %5, %27
  %29 = urem i32 %5, %27
  %.not355 = icmp eq i32 %29, 0
  br i1 %.not355, label %35, label %30

30:                                               ; preds = %24
  %31 = load i32, ptr @libxsmm_ninit, align 4, !tbaa !14
  %32 = icmp ugt i32 %31, 1
  %33 = load i32, ptr @libxsmm_verbosity, align 4
  %34 = select i1 %32, i32 %33, i32 1
  tail call void @libxsmm_handle_error(ptr noundef %0, i32 noundef 90018, ptr noundef nonnull @__func__.libxsmm_generator_gemm_avx512_microkernel_fsdbcst, ptr noundef nonnull @.str, i32 noundef 1688, i32 noundef %34) #5
  br label %.loopexit

35:                                               ; preds = %24, %20
  %.0347 = phi i32 [ %28, %24 ], [ %5, %20 ]
  %.0346 = phi i32 [ %27, %24 ], [ 1, %20 ]
  %36 = icmp ugt i32 %4, 11
  %37 = icmp ugt i32 %4, 5
  %. = select i1 %37, i32 2, i32 4
  %.0342 = select i1 %36, i32 1, i32 %.
  %38 = icmp ugt i32 %.0342, %.0347
  %39 = tail call i32 @llvm.umax.i32(i32 %.0347, i32 1)
  %.1343 = select i1 %38, i32 %39, i32 %.0342
  %40 = getelementptr inbounds i8, ptr %3, i64 29
  %41 = tail call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef nonnull %40) #5
  %42 = icmp eq i32 %41, 2
  br i1 %42, label %43, label %49

43:                                               ; preds = %35
  %44 = load i32, ptr %21, align 1, !tbaa !15
  %45 = and i32 %44, 2048
  %46 = icmp eq i32 %45, 0
  br i1 %46, label %47, label %49

47:                                               ; preds = %43
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %7) #5
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(64) %7, ptr noundef nonnull align 16 dereferenceable(64) @__const.libxsmm_generator_gemm_avx512_microkernel_fsdbcst.l_mask, i64 64, i1 false)
  %48 = load i8, ptr %10, align 4, !tbaa !5
  call void @libxsmm_x86_instruction_full_vec_load_of_constants(ptr noundef %0, ptr noundef nonnull %7, ptr noundef nonnull @.str.2, i8 noundef signext %48, i32 noundef 3) #5
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %7) #5
  br label %49

49:                                               ; preds = %47, %43, %35
  %.0344 = phi i8 [ 121, %47 ], [ %11, %43 ], [ %11, %35 ]
  %50 = icmp ugt i32 %.1343, 1
  br i1 %50, label %.preheader390.lr.ph, label %._crit_edge393

.preheader390.lr.ph:                              ; preds = %49
  %.not404 = icmp eq i32 %4, 0
  %51 = getelementptr inbounds i8, ptr %2, i64 52
  %52 = getelementptr inbounds i8, ptr %2, i64 4
  br i1 %.not404, label %._crit_edge393, label %.preheader390.us

.preheader390.us:                                 ; preds = %.preheader390.lr.ph, %._crit_edge.us
  %.0339392.us = phi i32 [ %60, %._crit_edge.us ], [ 1, %.preheader390.lr.ph ]
  %.neg382.us = xor i32 %.0339392.us, -1
  %.neg383.us = mul i32 %.neg382.us, %4
  br label %53

53:                                               ; preds = %.preheader390.us, %53
  %.0391.us = phi i32 [ 0, %.preheader390.us ], [ %59, %53 ]
  %54 = load i32, ptr %51, align 4, !tbaa !18
  %55 = load i8, ptr %10, align 4, !tbaa !5
  %56 = load i32, ptr %52, align 4, !tbaa !19
  %57 = add i32 %.0391.us, %.neg383.us
  %58 = add i32 %57, %56
  call void @libxsmm_x86_instruction_vec_compute_3reg(ptr noundef %0, i32 noundef %54, i8 noundef signext %55, i32 noundef %58, i32 noundef %58, i32 noundef %58) #5
  %59 = add nuw i32 %.0391.us, 1
  %exitcond.not = icmp eq i32 %59, %4
  br i1 %exitcond.not, label %._crit_edge.us, label %53, !llvm.loop !20

._crit_edge.us:                                   ; preds = %53
  %60 = add nuw i32 %.0339392.us, 1
  %exitcond413.not = icmp eq i32 %60, %.1343
  br i1 %exitcond413.not, label %._crit_edge393, label %.preheader390.us, !llvm.loop !22

._crit_edge393:                                   ; preds = %._crit_edge.us, %.preheader390.lr.ph, %49
  %61 = call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef nonnull %40) #5
  %62 = icmp eq i32 %61, 12
  br i1 %62, label %63, label %68

63:                                               ; preds = %._crit_edge393
  %64 = getelementptr inbounds i8, ptr %0, i64 28
  %65 = load i32, ptr %64, align 4, !tbaa !23
  %.off = add i32 %65, -1051
  %switch = icmp ult i32 %.off, 3
  br i1 %switch, label %66, label %68

66:                                               ; preds = %63
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %8) #5
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(32) %8, ptr noundef nonnull align 16 dereferenceable(32) @__const.libxsmm_generator_gemm_avx512_microkernel_fsdbcst.l_all_ones, i64 32, i1 false)
  %67 = load i8, ptr %10, align 4, !tbaa !5
  call void @libxsmm_x86_instruction_full_vec_load_of_constants(ptr noundef nonnull %0, ptr noundef nonnull %8, ptr noundef nonnull @.str.3, i8 noundef signext %67, i32 noundef 2) #5
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %8) #5
  br label %77

68:                                               ; preds = %63, %._crit_edge393
  %69 = call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef nonnull %40) #5
  %70 = icmp eq i32 %69, 12
  br i1 %70, label %71, label %77

71:                                               ; preds = %68
  %72 = getelementptr inbounds i8, ptr %0, i64 28
  %73 = load i32, ptr %72, align 4, !tbaa !23
  %74 = icmp ult i32 %73, 1102
  br i1 %74, label %75, label %77

75:                                               ; preds = %71
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %9) #5
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(64) %9, ptr noundef nonnull align 16 dereferenceable(64) @__const.libxsmm_generator_gemm_avx512_microkernel_fsdbcst.l_all_ones.4, i64 64, i1 false)
  %76 = load i8, ptr %10, align 4, !tbaa !5
  call void @libxsmm_x86_instruction_full_vec_load_of_constants(ptr noundef nonnull %0, ptr noundef nonnull %9, ptr noundef nonnull @.str.3, i8 noundef signext %76, i32 noundef 2) #5
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %9) #5
  br label %77

77:                                               ; preds = %68, %71, %75, %66
  %.not405 = icmp eq i32 %.0347, 0
  br i1 %.not405, label %._crit_edge, label %.lr.ph399

.lr.ph399:                                        ; preds = %77
  %78 = add i32 %.0347, -1
  %79 = getelementptr inbounds i8, ptr %0, i64 28
  %80 = getelementptr inbounds i8, ptr %1, i64 4
  %81 = getelementptr inbounds i8, ptr %3, i64 12
  %82 = getelementptr inbounds i8, ptr %2, i64 12
  %83 = getelementptr inbounds i8, ptr %2, i64 44
  %.not406 = icmp eq i32 %.0347, 1
  %84 = getelementptr inbounds i8, ptr %3, i64 28
  %85 = getelementptr inbounds i8, ptr %2, i64 48
  %86 = getelementptr inbounds i8, ptr %1, i64 24
  %87 = getelementptr inbounds i8, ptr %2, i64 64
  %88 = zext i32 %5 to i64
  %.not407 = icmp eq i32 %4, 0
  %89 = getelementptr inbounds i8, ptr %1, i64 12
  %90 = getelementptr inbounds i8, ptr %3, i64 16
  %91 = getelementptr inbounds i8, ptr %2, i64 16
  %92 = getelementptr inbounds i8, ptr %2, i64 56
  %93 = getelementptr inbounds i8, ptr %2, i64 4
  br label %94

94:                                               ; preds = %.lr.ph399, %.loopexit387
  %.1340397 = phi i32 [ 0, %.lr.ph399 ], [ %309, %.loopexit387 ]
  %95 = icmp eq i32 %.1340397, 0
  br i1 %95, label %96, label %108

96:                                               ; preds = %94
  %97 = load i32, ptr %79, align 4, !tbaa !23
  %98 = load i32, ptr %80, align 4, !tbaa !25
  %99 = load i32, ptr %83, align 4, !tbaa !27
  call void @libxsmm_x86_instruction_vec_move(ptr noundef %0, i32 noundef %97, i32 noundef %13, i32 noundef %98, i32 noundef 127, i32 noundef 0, i32 noundef 0, i8 noundef signext %.0344, i32 noundef 0, i32 noundef %99, i32 noundef 1, i32 noundef 0) #5
  br i1 %.not406, label %121, label %100

100:                                              ; preds = %96
  %101 = load i32, ptr %79, align 4, !tbaa !23
  %102 = load i32, ptr %80, align 4, !tbaa !25
  %103 = load i32, ptr %81, align 1, !tbaa !28
  %104 = load i32, ptr %82, align 4, !tbaa !29
  %105 = mul i32 %103, %.0346
  %106 = mul i32 %105, %104
  %107 = load i32, ptr %83, align 4, !tbaa !27
  call void @libxsmm_x86_instruction_vec_move(ptr noundef nonnull %0, i32 noundef %101, i32 noundef %13, i32 noundef %102, i32 noundef 127, i32 noundef 0, i32 noundef %106, i8 noundef signext %.0344, i32 noundef 1, i32 noundef %107, i32 noundef 1, i32 noundef 0) #5
  br label %121

108:                                              ; preds = %94
  %109 = icmp ult i32 %.1340397, %78
  br i1 %109, label %110, label %121

110:                                              ; preds = %108
  %111 = load i32, ptr %79, align 4, !tbaa !23
  %112 = load i32, ptr %80, align 4, !tbaa !25
  %113 = load i32, ptr %81, align 1, !tbaa !28
  %114 = add nuw i32 %.1340397, 1
  %115 = load i32, ptr %82, align 4, !tbaa !29
  %116 = mul i32 %114, %.0346
  %117 = mul i32 %116, %113
  %118 = mul i32 %117, %115
  %119 = and i32 %114, 1
  %120 = load i32, ptr %83, align 4, !tbaa !27
  call void @libxsmm_x86_instruction_vec_move(ptr noundef %0, i32 noundef %111, i32 noundef %13, i32 noundef %112, i32 noundef 127, i32 noundef 0, i32 noundef %118, i8 noundef signext %.0344, i32 noundef %119, i32 noundef %120, i32 noundef 1, i32 noundef 0) #5
  br label %121

121:                                              ; preds = %108, %110, %96, %100
  %122 = load i8, ptr %84, align 1, !tbaa !30
  %123 = icmp eq i8 %122, 1
  br i1 %123, label %124, label %142

124:                                              ; preds = %121
  %125 = load i32, ptr %85, align 8, !tbaa !31
  %126 = load i32, ptr %86, align 4, !tbaa !32
  %127 = load i32, ptr %81, align 1, !tbaa !28
  %128 = load i32, ptr %82, align 4, !tbaa !29
  %129 = mul i32 %.1340397, %.0346
  %130 = mul i32 %129, %127
  %131 = mul i32 %130, %128
  call void @libxsmm_x86_instruction_prefetch(ptr noundef %0, i32 noundef %125, i32 noundef %126, i32 noundef 127, i32 noundef 0, i32 noundef %131) #5
  %132 = icmp eq i32 %.1340397, %78
  br i1 %132, label %133, label %142

133:                                              ; preds = %124
  %134 = load i32, ptr %87, align 8, !tbaa !33
  %135 = load i32, ptr %86, align 4, !tbaa !32
  %136 = load i32, ptr %82, align 4, !tbaa !29
  %137 = zext i32 %136 to i64
  %138 = mul nuw nsw i64 %137, %88
  %139 = load i32, ptr %81, align 1, !tbaa !28
  %140 = zext i32 %139 to i64
  %141 = mul nuw nsw i64 %138, %140
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef %0, i32 noundef %134, i32 noundef %135, i64 noundef %141) #5
  br label %142

142:                                              ; preds = %124, %133, %121
  %143 = icmp eq i32 %.1340397, %78
  br i1 %143, label %144, label %153

144:                                              ; preds = %142
  %145 = load i32, ptr %87, align 8, !tbaa !33
  %146 = load i32, ptr %80, align 4, !tbaa !25
  %147 = load i32, ptr %82, align 4, !tbaa !29
  %148 = zext i32 %147 to i64
  %149 = mul nuw nsw i64 %148, %88
  %150 = load i32, ptr %81, align 1, !tbaa !28
  %151 = zext i32 %150 to i64
  %152 = mul nuw nsw i64 %149, %151
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef %0, i32 noundef %145, i32 noundef %146, i64 noundef %152) #5
  br label %153

153:                                              ; preds = %144, %142
  %154 = call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef nonnull %40) #5
  %155 = icmp eq i32 %154, 2
  %.pre419 = load i32, ptr %21, align 1, !tbaa !15
  %156 = and i32 %.pre419, 2048
  %157 = icmp eq i32 %156, 0
  %or.cond = select i1 %155, i1 %157, i1 false
  br i1 %or.cond, label %158, label %162

158:                                              ; preds = %153
  %159 = load i8, ptr %10, align 4, !tbaa !5
  %160 = and i32 %.1340397, 1
  call void @libxsmm_x86_instruction_vec_compute_2reg(ptr noundef %0, i32 noundef 537208099, i8 noundef signext %159, i32 noundef %160, i32 noundef %160) #5
  %161 = load i8, ptr %10, align 4, !tbaa !5
  call void @libxsmm_x86_instruction_vec_compute_2reg_imm8(ptr noundef %0, i32 noundef 611128946, i8 noundef signext %161, i32 noundef %160, i32 noundef %160, i32 noundef 16) #5
  %.pre = load i32, ptr %21, align 1, !tbaa !15
  br label %162

162:                                              ; preds = %158, %153
  %163 = phi i32 [ %.pre, %158 ], [ %.pre419, %153 ]
  %164 = and i32 %163, 2
  %165 = icmp eq i32 %164, 0
  br i1 %165, label %.preheader386, label %.preheader388

.preheader388:                                    ; preds = %162
  br i1 %.not407, label %.loopexit387, label %.lr.ph

.lr.ph:                                           ; preds = %.preheader388
  %166 = mul i32 %.1340397, %.0346
  %167 = and i32 %.1340397, 1
  br label %290

.preheader386:                                    ; preds = %162
  br i1 %.not407, label %.loopexit387, label %.lr.ph396

.lr.ph396:                                        ; preds = %.preheader386
  %168 = mul i32 %.1340397, %.0346
  %169 = and i32 %.1340397, 1
  br label %170

170:                                              ; preds = %.lr.ph396, %288
  %.1395 = phi i32 [ 0, %.lr.ph396 ], [ %289, %288 ]
  %171 = load i32, ptr %89, align 4, !tbaa !34
  %172 = load i32, ptr %91, align 8, !tbaa !35
  %173 = load i32, ptr %90, align 1, !tbaa !36
  %174 = mul i32 %173, %.1395
  %reass.add384 = add i32 %174, %168
  %reass.mul385 = mul i32 %reass.add384, %172
  %175 = call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef nonnull %40) #5
  %176 = icmp eq i32 %175, 1
  br i1 %176, label %199, label %177

177:                                              ; preds = %170
  %178 = call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef nonnull %40) #5
  %179 = icmp eq i32 %178, 0
  br i1 %179, label %199, label %180

180:                                              ; preds = %177
  %181 = call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef nonnull %40) #5
  %182 = icmp eq i32 %181, 10
  br i1 %182, label %183, label %185

183:                                              ; preds = %180
  %184 = load i32, ptr %79, align 4, !tbaa !23
  switch i32 %184, label %199 [
    i32 1051, label %185
    i32 1101, label %185
  ]

185:                                              ; preds = %183, %183, %180
  %186 = call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef nonnull %40) #5
  %187 = icmp eq i32 %186, 2
  br i1 %187, label %188, label %191

188:                                              ; preds = %185
  %189 = load i32, ptr %21, align 1, !tbaa !15
  %190 = and i32 %189, 2048
  %.not363 = icmp eq i32 %190, 0
  br i1 %.not363, label %191, label %199

191:                                              ; preds = %188, %185
  %192 = call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef nonnull %40) #5
  %193 = icmp eq i32 %192, 12
  br i1 %193, label %194, label %222

194:                                              ; preds = %191
  %195 = load i32, ptr %21, align 1, !tbaa !15
  %196 = and i32 %195, 256
  %.not364 = icmp eq i32 %196, 0
  br i1 %.not364, label %222, label %197

197:                                              ; preds = %194
  %198 = load i32, ptr %79, align 4, !tbaa !23
  switch i32 %198, label %199 [
    i32 1051, label %222
    i32 1101, label %222
  ]

199:                                              ; preds = %197, %183, %188, %177, %170
  %200 = call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef nonnull %40) #5
  %201 = icmp eq i32 %200, 1
  br i1 %201, label %205, label %202

202:                                              ; preds = %199
  %203 = call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef nonnull %40) #5
  %204 = icmp eq i32 %203, 0
  br i1 %204, label %205, label %207

205:                                              ; preds = %202, %199
  %206 = load i32, ptr %92, align 8, !tbaa !37
  br label %216

207:                                              ; preds = %202
  %208 = call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef nonnull %40) #5
  %209 = icmp eq i32 %208, 2
  br i1 %209, label %216, label %210

210:                                              ; preds = %207
  %211 = call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef nonnull %40) #5
  %212 = icmp eq i32 %211, 10
  br i1 %212, label %216, label %213

213:                                              ; preds = %210
  %214 = call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef nonnull %40) #5
  %215 = icmp eq i32 %214, 12
  %spec.select = select i1 %215, i32 805643856, i32 0
  br label %216

216:                                              ; preds = %213, %210, %207, %205
  %.0345 = phi i32 [ %206, %205 ], [ -268032430, %207 ], [ 805643858, %210 ], [ %spec.select, %213 ]
  %217 = load i8, ptr %10, align 4, !tbaa !5
  %218 = load i32, ptr %93, align 4, !tbaa !19
  %219 = urem i32 %.1340397, %.1343
  %.neg380 = xor i32 %219, -1
  %.neg381 = mul i32 %.neg380, %4
  %220 = add i32 %218, %.1395
  %221 = add i32 %220, %.neg381
  call void @libxsmm_x86_instruction_vec_compute_mem_2reg(ptr noundef %0, i32 noundef %.0345, i8 noundef signext %217, i32 noundef %171, i32 noundef 127, i32 noundef 0, i32 noundef %reass.mul385, i32 noundef 1, i32 noundef %169, i32 noundef %221) #5
  br label %288

222:                                              ; preds = %197, %197, %194, %191
  %223 = call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef nonnull %40) #5
  %224 = icmp eq i32 %223, 2
  br i1 %224, label %225, label %238

225:                                              ; preds = %222
  %226 = load i32, ptr %21, align 1, !tbaa !15
  %227 = and i32 %226, 2048
  %228 = icmp eq i32 %227, 0
  br i1 %228, label %229, label %238

229:                                              ; preds = %225
  %230 = load i32, ptr %79, align 4, !tbaa !23
  %231 = load i8, ptr %10, align 4, !tbaa !5
  call void @libxsmm_x86_instruction_vec_move(ptr noundef %0, i32 noundef %230, i32 noundef 537209209, i32 noundef %171, i32 noundef 127, i32 noundef 0, i32 noundef %reass.mul385, i8 noundef signext %231, i32 noundef 2, i32 noundef 0, i32 noundef 1, i32 noundef 0) #5
  %232 = load i8, ptr %10, align 4, !tbaa !5
  call void @libxsmm_x86_instruction_vec_compute_3reg(ptr noundef %0, i32 noundef 805639899, i8 noundef signext %232, i32 noundef 2, i32 noundef 3, i32 noundef 2) #5
  %233 = load i8, ptr %10, align 4, !tbaa !5
  %234 = load i32, ptr %93, align 4, !tbaa !19
  %235 = urem i32 %.1340397, %.1343
  %.neg378 = xor i32 %235, -1
  %.neg379 = mul i32 %.neg378, %4
  %236 = add i32 %234, %.1395
  %237 = add i32 %236, %.neg379
  call void @libxsmm_x86_instruction_vec_compute_3reg(ptr noundef %0, i32 noundef 805643960, i8 noundef signext %233, i32 noundef %169, i32 noundef 2, i32 noundef %237) #5
  br label %288

238:                                              ; preds = %225, %222
  %239 = call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef nonnull %40) #5
  %240 = icmp eq i32 %239, 12
  br i1 %240, label %241, label %253

241:                                              ; preds = %238
  %242 = load i32, ptr %21, align 1, !tbaa !15
  %243 = and i32 %242, 512
  %.not367 = icmp eq i32 %243, 0
  br i1 %.not367, label %253, label %244

244:                                              ; preds = %241
  %245 = load i32, ptr %79, align 4, !tbaa !23
  switch i32 %245, label %246 [
    i32 1051, label %253
    i32 1101, label %253
  ]

246:                                              ; preds = %244
  %247 = load i8, ptr %10, align 4, !tbaa !5
  call void @libxsmm_x86_instruction_vec_move(ptr noundef nonnull %0, i32 noundef %245, i32 noundef 537209432, i32 noundef %171, i32 noundef 127, i32 noundef 0, i32 noundef %reass.mul385, i8 noundef signext %247, i32 noundef 3, i32 noundef 0, i32 noundef 1, i32 noundef 0) #5
  %248 = load i8, ptr %10, align 4, !tbaa !5
  %249 = load i32, ptr %93, align 4, !tbaa !19
  %250 = urem i32 %.1340397, %.1343
  %.neg376 = xor i32 %250, -1
  %.neg377 = mul i32 %.neg376, %4
  %251 = add i32 %249, %.1395
  %252 = add i32 %251, %.neg377
  call void @libxsmm_x86_instruction_vec_compute_3reg(ptr noundef nonnull %0, i32 noundef 805643856, i8 noundef signext %248, i32 noundef %169, i32 noundef 3, i32 noundef %252) #5
  br label %288

253:                                              ; preds = %244, %244, %241, %238
  %254 = call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef nonnull %40) #5
  %255 = icmp eq i32 %254, 10
  br i1 %255, label %256, label %266

256:                                              ; preds = %253
  %257 = load i32, ptr %79, align 4, !tbaa !23
  switch i32 %257, label %266 [
    i32 1051, label %258
    i32 1101, label %258
  ]

258:                                              ; preds = %256, %256
  %259 = load i8, ptr %10, align 4, !tbaa !5
  call void @libxsmm_x86_instruction_vec_move(ptr noundef nonnull %0, i32 noundef %257, i32 noundef 537209432, i32 noundef %171, i32 noundef 127, i32 noundef 0, i32 noundef %reass.mul385, i8 noundef signext %259, i32 noundef 3, i32 noundef 0, i32 noundef 1, i32 noundef 0) #5
  %260 = load i8, ptr %10, align 4, !tbaa !5
  call void @libxsmm_x86_instruction_vec_compute_3reg(ptr noundef nonnull %0, i32 noundef 805639925, i8 noundef signext %260, i32 noundef %169, i32 noundef 3, i32 noundef 3) #5
  %261 = load i8, ptr %10, align 4, !tbaa !5
  %262 = load i32, ptr %93, align 4, !tbaa !19
  %263 = urem i32 %.1340397, %.1343
  %.neg374 = xor i32 %263, -1
  %.neg375 = mul i32 %.neg374, %4
  %264 = add i32 %262, %.1395
  %265 = add i32 %264, %.neg375
  call void @libxsmm_x86_instruction_vec_compute_3reg(ptr noundef nonnull %0, i32 noundef 805639934, i8 noundef signext %261, i32 noundef 3, i32 noundef %265, i32 noundef %265) #5
  br label %288

266:                                              ; preds = %256, %253
  %267 = call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef nonnull %40) #5
  %268 = icmp eq i32 %267, 12
  br i1 %268, label %269, label %288

269:                                              ; preds = %266
  %270 = load i32, ptr %79, align 4, !tbaa !23
  switch i32 %270, label %288 [
    i32 1051, label %271
    i32 1101, label %271
  ]

271:                                              ; preds = %269, %269
  %272 = load i8, ptr %10, align 4, !tbaa !5
  call void @libxsmm_x86_instruction_vec_move(ptr noundef nonnull %0, i32 noundef %270, i32 noundef 537209432, i32 noundef %171, i32 noundef 127, i32 noundef 0, i32 noundef %reass.mul385, i8 noundef signext %272, i32 noundef 3, i32 noundef 0, i32 noundef 1, i32 noundef 0) #5
  %273 = load i32, ptr %21, align 1, !tbaa !15
  %274 = and i32 %273, 256
  %.not370 = icmp eq i32 %274, 0
  br i1 %.not370, label %277, label %275

275:                                              ; preds = %271
  %276 = load i8, ptr %10, align 4, !tbaa !5
  call void @libxsmm_x86_instruction_vec_compute_3reg(ptr noundef nonnull %0, i32 noundef 805643780, i8 noundef signext %276, i32 noundef 3, i32 noundef %169, i32 noundef 3) #5
  br label %281

277:                                              ; preds = %271
  %278 = and i32 %273, 512
  %.not371 = icmp eq i32 %278, 0
  br i1 %.not371, label %281, label %279

279:                                              ; preds = %277
  %280 = load i8, ptr %10, align 4, !tbaa !5
  call void @libxsmm_x86_instruction_vec_compute_3reg(ptr noundef nonnull %0, i32 noundef 805643780, i8 noundef signext %280, i32 noundef %169, i32 noundef 3, i32 noundef 3) #5
  br label %281

281:                                              ; preds = %277, %279, %275
  %282 = load i8, ptr %10, align 4, !tbaa !5
  call void @libxsmm_x86_instruction_vec_compute_3reg(ptr noundef nonnull %0, i32 noundef 805639925, i8 noundef signext %282, i32 noundef 2, i32 noundef 3, i32 noundef 3) #5
  %283 = load i8, ptr %10, align 4, !tbaa !5
  %284 = load i32, ptr %93, align 4, !tbaa !19
  %285 = urem i32 %.1340397, %.1343
  %.neg372 = xor i32 %285, -1
  %.neg373 = mul i32 %.neg372, %4
  %286 = add i32 %284, %.1395
  %287 = add i32 %286, %.neg373
  call void @libxsmm_x86_instruction_vec_compute_3reg(ptr noundef nonnull %0, i32 noundef 805639934, i8 noundef signext %283, i32 noundef 3, i32 noundef %287, i32 noundef %287) #5
  br label %288

288:                                              ; preds = %269, %229, %258, %266, %281, %246, %216
  %289 = add nuw i32 %.1395, 1
  %exitcond415.not = icmp eq i32 %289, %4
  br i1 %exitcond415.not, label %.loopexit387, label %170, !llvm.loop !38

290:                                              ; preds = %.lr.ph, %307
  %.2394 = phi i32 [ 0, %.lr.ph ], [ %308, %307 ]
  %291 = load i32, ptr %89, align 4, !tbaa !34
  %292 = load i32, ptr %90, align 1, !tbaa !36
  %293 = load i32, ptr %91, align 8, !tbaa !35
  %294 = mul i32 %166, %292
  %reass.add = add i32 %294, %.2394
  %reass.mul = mul i32 %reass.add, %293
  %295 = call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef nonnull %40) #5
  %296 = icmp eq i32 %295, 1
  br i1 %296, label %300, label %297

297:                                              ; preds = %290
  %298 = call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef nonnull %40) #5
  %299 = icmp eq i32 %298, 0
  br i1 %299, label %300, label %307

300:                                              ; preds = %297, %290
  %301 = load i32, ptr %92, align 8, !tbaa !37
  %302 = load i8, ptr %10, align 4, !tbaa !5
  %303 = load i32, ptr %93, align 4, !tbaa !19
  %304 = urem i32 %.1340397, %.1343
  %.neg359 = xor i32 %304, -1
  %.neg360 = mul i32 %.neg359, %4
  %305 = add i32 %303, %.2394
  %306 = add i32 %305, %.neg360
  call void @libxsmm_x86_instruction_vec_compute_mem_2reg(ptr noundef %0, i32 noundef %301, i8 noundef signext %302, i32 noundef %291, i32 noundef 127, i32 noundef 0, i32 noundef %reass.mul, i32 noundef 1, i32 noundef %167, i32 noundef %306) #5
  br label %307

307:                                              ; preds = %297, %300
  %308 = add nuw i32 %.2394, 1
  %exitcond414.not = icmp eq i32 %308, %4
  br i1 %exitcond414.not, label %.loopexit387, label %290, !llvm.loop !39

.loopexit387:                                     ; preds = %307, %288, %.preheader388, %.preheader386
  %309 = add nuw i32 %.1340397, 1
  %exitcond416.not = icmp eq i32 %309, %.0347
  br i1 %exitcond416.not, label %._crit_edge, label %94, !llvm.loop !40

._crit_edge:                                      ; preds = %.loopexit387, %77
  %310 = load i32, ptr %21, align 1, !tbaa !15
  %311 = and i32 %310, 2
  %312 = icmp eq i32 %311, 0
  %313 = getelementptr inbounds i8, ptr %2, i64 64
  %314 = load i32, ptr %313, align 8, !tbaa !33
  %315 = getelementptr inbounds i8, ptr %1, i64 12
  %316 = load i32, ptr %315, align 4, !tbaa !34
  %317 = zext i32 %5 to i64
  %318 = getelementptr inbounds i8, ptr %2, i64 16
  %319 = load i32, ptr %318, align 8, !tbaa !35
  %320 = zext i32 %319 to i64
  %321 = mul nuw nsw i64 %320, %317
  br i1 %312, label %327, label %322

322:                                              ; preds = %._crit_edge
  %323 = getelementptr inbounds i8, ptr %3, i64 16
  %324 = load i32, ptr %323, align 1, !tbaa !36
  %325 = zext i32 %324 to i64
  %326 = mul nuw nsw i64 %321, %325
  br label %327

327:                                              ; preds = %._crit_edge, %322
  %.sink = phi i64 [ %326, %322 ], [ %321, %._crit_edge ]
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef %0, i32 noundef %314, i32 noundef %316, i64 noundef %.sink) #5
  br i1 %50, label %.preheader.lr.ph, label %.loopexit

.preheader.lr.ph:                                 ; preds = %327
  %.not409 = icmp eq i32 %4, 0
  %328 = getelementptr inbounds i8, ptr %2, i64 4
  %329 = getelementptr inbounds i8, ptr %2, i64 60
  br i1 %.not409, label %.loopexit, label %.preheader.us

.preheader.us:                                    ; preds = %.preheader.lr.ph, %._crit_edge402.us
  %.2341403.us = phi i32 [ %355, %._crit_edge402.us ], [ 1, %.preheader.lr.ph ]
  %.neg.us = xor i32 %.2341403.us, -1
  %.neg356.us = mul i32 %.neg.us, %4
  br label %330

330:                                              ; preds = %.preheader.us, %353
  %.3400.us = phi i32 [ 0, %.preheader.us ], [ %354, %353 ]
  %331 = call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef nonnull %40) #5
  %332 = icmp eq i32 %331, 1
  br i1 %332, label %345, label %333

333:                                              ; preds = %330
  %334 = call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef nonnull %40) #5
  %335 = icmp eq i32 %334, 0
  br i1 %335, label %345, label %336

336:                                              ; preds = %333
  %337 = call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef nonnull %40) #5
  %338 = icmp eq i32 %337, 2
  br i1 %338, label %345, label %339

339:                                              ; preds = %336
  %340 = call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef nonnull %40) #5
  %341 = icmp eq i32 %340, 10
  br i1 %341, label %.sink.split, label %342

342:                                              ; preds = %339
  %343 = call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef nonnull %40) #5
  %344 = icmp eq i32 %343, 12
  br i1 %344, label %.sink.split, label %353

345:                                              ; preds = %336, %333, %330
  %346 = load i32, ptr %329, align 4, !tbaa !41
  br label %.sink.split

.sink.split:                                      ; preds = %339, %342, %345
  %.sink422 = phi i32 [ %346, %345 ], [ 805639934, %342 ], [ 805639934, %339 ]
  %347 = load i8, ptr %10, align 4, !tbaa !5
  %348 = load i32, ptr %328, align 4, !tbaa !19
  %349 = add i32 %.3400.us, %.neg356.us
  %350 = add i32 %349, %348
  %351 = sub i32 %348, %4
  %352 = add i32 %351, %.3400.us
  call void @libxsmm_x86_instruction_vec_compute_3reg(ptr noundef %0, i32 noundef %.sink422, i8 noundef signext %347, i32 noundef %350, i32 noundef %352, i32 noundef %352) #5
  br label %353

353:                                              ; preds = %.sink.split, %342
  %354 = add nuw i32 %.3400.us, 1
  %exitcond417.not = icmp eq i32 %354, %4
  br i1 %exitcond417.not, label %._crit_edge402.us, label %330, !llvm.loop !42

._crit_edge402.us:                                ; preds = %353
  %355 = add nuw i32 %.2341403.us, 1
  %exitcond418.not = icmp eq i32 %355, %.1343
  br i1 %exitcond418.not, label %.loopexit, label %.preheader.us, !llvm.loop !43

.loopexit:                                        ; preds = %._crit_edge402.us, %.preheader.lr.ph, %327, %30, %15
  ret void
}

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

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

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

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

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

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

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

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

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

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

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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.umax.i32(i32, i32) #4

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


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