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

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

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

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

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

declare i32 @LIBXSMM_GEMM_GETENUM_A_PREC(ptr noundef) #2

declare i32 @LIBXSMM_GEMM_GETENUM_B_PREC(ptr noundef) #2

declare i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef) #2

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

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

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

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

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

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

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

declare i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef) #2

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

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

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

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

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

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

declare i32 @libxsmm_cpuid_dot_pack_factor(i32 noundef) #2

; Function Attrs: nounwind uwtable
define dso_local void @libxsmm_generator_gemm_footer_mloop(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %4, i32 noundef %5, i32 noundef %6) #0 {
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca ptr, align 8
  %11 = alloca ptr, align 8
  %12 = alloca ptr, align 8
  %13 = alloca i32, align 4
  %14 = alloca i32, align 4
  %15 = alloca i32, align 4
  %16 = alloca i32, align 4
  %17 = alloca i32, align 4
  %18 = alloca i32, align 4
  %19 = alloca i32, align 4
  %20 = alloca i32, align 4
  %21 = alloca i32, align 4
  %22 = alloca i64, align 8
  store ptr %0, ptr %8, align 8, !tbaa !5
  store ptr %1, ptr %9, align 8, !tbaa !5
  store ptr %2, ptr %10, align 8, !tbaa !5
  store ptr %3, ptr %11, align 8, !tbaa !5
  store ptr %4, ptr %12, align 8, !tbaa !5
  store i32 %5, ptr %13, align 4, !tbaa !9
  store i32 %6, ptr %14, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #3
  store i32 1, ptr %15, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #3
  %23 = load ptr, ptr %12, align 8, !tbaa !5
  %24 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %23, i32 0, i32 6
  %25 = load i32, ptr %24, align 1, !tbaa !11
  %26 = and i32 %25, 2097152
  %27 = icmp ugt i32 %26, 0
  br i1 %27, label %28, label %56

28:                                               ; preds = %7
  %29 = load ptr, ptr %12, align 8, !tbaa !5
  %30 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %29, i32 0, i32 8
  %31 = getelementptr inbounds [3 x i8], ptr %30, i64 0, i64 0
  %32 = call i32 @LIBXSMM_GEMM_GETENUM_A_PREC(ptr noundef %31)
  %33 = icmp eq i32 12, %32
  br i1 %33, label %34, label %54

34:                                               ; preds = %28
  %35 = load ptr, ptr %12, align 8, !tbaa !5
  %36 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %35, i32 0, i32 8
  %37 = getelementptr inbounds [3 x i8], ptr %36, i64 0, i64 0
  %38 = call i32 @LIBXSMM_GEMM_GETENUM_B_PREC(ptr noundef %37)
  %39 = icmp eq i32 3, %38
  br i1 %39, label %40, label %54

40:                                               ; preds = %34
  %41 = load ptr, ptr %12, align 8, !tbaa !5
  %42 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %41, i32 0, i32 8
  %43 = getelementptr inbounds [3 x i8], ptr %42, i64 0, i64 0
  %44 = call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef %43)
  %45 = icmp eq i32 3, %44
  br i1 %45, label %52, label %46

46:                                               ; preds = %40
  %47 = load ptr, ptr %12, align 8, !tbaa !5
  %48 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %47, i32 0, i32 8
  %49 = getelementptr inbounds [3 x i8], ptr %48, i64 0, i64 0
  %50 = call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef %49)
  %51 = icmp eq i32 1, %50
  br label %52

52:                                               ; preds = %46, %40
  %53 = phi i1 [ true, %40 ], [ %51, %46 ]
  br label %54

54:                                               ; preds = %52, %34, %28
  %55 = phi i1 [ false, %34 ], [ false, %28 ], [ %53, %52 ]
  br label %56

56:                                               ; preds = %54, %7
  %57 = phi i1 [ false, %7 ], [ %55, %54 ]
  %58 = zext i1 %57 to i64
  %59 = select i1 %57, i32 1, i32 0
  store i32 %59, ptr %16, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #3
  %60 = load ptr, ptr %12, align 8, !tbaa !5
  %61 = call i32 @libxsmm_x86_is_Ai4_Bi8_gemm(ptr noundef %60)
  store i32 %61, ptr %17, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #3
  %62 = load ptr, ptr %12, align 8, !tbaa !5
  %63 = call i32 @libxsmm_x86_is_Amxfp4_Bfp32_gemm(ptr noundef %62)
  store i32 %63, ptr %18, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #3
  %64 = load ptr, ptr %12, align 8, !tbaa !5
  %65 = call i32 @libxsmm_x86_is_Amxfp4_Bi8_gemm(ptr noundef %64)
  store i32 %65, ptr %19, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #3
  %66 = load ptr, ptr %12, align 8, !tbaa !5
  %67 = call i32 @libxsmm_x86_is_Amxfp4_Bbf16_gemm(ptr noundef %66)
  store i32 %67, ptr %20, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #3
  %68 = load i32, ptr %16, align 4, !tbaa !9
  %69 = icmp ugt i32 %68, 0
  br i1 %69, label %82, label %70

70:                                               ; preds = %56
  %71 = load i32, ptr %17, align 4, !tbaa !9
  %72 = icmp ugt i32 %71, 0
  br i1 %72, label %82, label %73

73:                                               ; preds = %70
  %74 = load i32, ptr %18, align 4, !tbaa !9
  %75 = icmp ugt i32 %74, 0
  br i1 %75, label %82, label %76

76:                                               ; preds = %73
  %77 = load i32, ptr %20, align 4, !tbaa !9
  %78 = icmp ugt i32 %77, 0
  br i1 %78, label %82, label %79

79:                                               ; preds = %76
  %80 = load i32, ptr %19, align 4, !tbaa !9
  %81 = icmp ne i32 %80, 0
  br label %82

82:                                               ; preds = %79, %76, %73, %70, %56
  %83 = phi i1 [ true, %76 ], [ true, %73 ], [ true, %70 ], [ true, %56 ], [ %81, %79 ]
  %84 = zext i1 %83 to i64
  %85 = select i1 %83, i32 2, i32 1
  store i32 %85, ptr %21, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #3
  %86 = load ptr, ptr %12, align 8, !tbaa !5
  %87 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %86, i32 0, i32 6
  %88 = load i32, ptr %87, align 1, !tbaa !11
  %89 = and i32 %88, 2048
  %90 = icmp eq i32 %89, 2048
  br i1 %90, label %91, label %97

91:                                               ; preds = %82
  %92 = load ptr, ptr %12, align 8, !tbaa !5
  %93 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %92, i32 0, i32 8
  %94 = getelementptr inbounds [3 x i8], ptr %93, i64 0, i64 0
  %95 = call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef %94)
  %96 = call i32 @libxsmm_cpuid_dot_pack_factor(i32 noundef %95)
  store i32 %96, ptr %15, align 4, !tbaa !9
  br label %97

97:                                               ; preds = %91, %82
  %98 = load ptr, ptr %8, align 8, !tbaa !5
  %99 = load ptr, ptr %11, align 8, !tbaa !5
  %100 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %99, i32 0, i32 16
  %101 = load i32, ptr %100, align 8, !tbaa !15
  %102 = load ptr, ptr %10, align 8, !tbaa !5
  %103 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %102, i32 0, i32 5
  %104 = load i32, ptr %103, align 4, !tbaa !18
  %105 = load i32, ptr %13, align 4, !tbaa !9
  %106 = zext i32 %105 to i64
  %107 = load ptr, ptr %11, align 8, !tbaa !5
  %108 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %107, i32 0, i32 5
  %109 = load i32, ptr %108, align 4, !tbaa !20
  %110 = zext i32 %109 to i64
  %111 = mul nsw i64 %106, %110
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef %98, i32 noundef %101, i32 noundef %104, i64 noundef %111)
  %112 = load ptr, ptr %12, align 8, !tbaa !5
  %113 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %112, i32 0, i32 8
  %114 = getelementptr inbounds [3 x i8], ptr %113, i64 0, i64 0
  %115 = call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef %114)
  %116 = icmp eq i32 3, %115
  br i1 %116, label %123, label %117

117:                                              ; preds = %97
  %118 = load ptr, ptr %12, align 8, !tbaa !5
  %119 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %118, i32 0, i32 8
  %120 = getelementptr inbounds [3 x i8], ptr %119, i64 0, i64 0
  %121 = call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef %120)
  %122 = icmp eq i32 1, %121
  br i1 %122, label %123, label %200

123:                                              ; preds = %117, %97
  %124 = load ptr, ptr %12, align 8, !tbaa !5
  %125 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %124, i32 0, i32 8
  %126 = getelementptr inbounds [3 x i8], ptr %125, i64 0, i64 0
  %127 = call i32 @LIBXSMM_GEMM_GETENUM_B_PREC(ptr noundef %126)
  %128 = icmp eq i32 3, %127
  br i1 %128, label %129, label %200

129:                                              ; preds = %123
  %130 = load ptr, ptr %12, align 8, !tbaa !5
  %131 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %130, i32 0, i32 8
  %132 = getelementptr inbounds [3 x i8], ptr %131, i64 0, i64 0
  %133 = call i32 @LIBXSMM_GEMM_GETENUM_A_PREC(ptr noundef %132)
  %134 = icmp eq i32 12, %133
  br i1 %134, label %135, label %200

135:                                              ; preds = %129
  %136 = load ptr, ptr %12, align 8, !tbaa !5
  %137 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %136, i32 0, i32 6
  %138 = load i32, ptr %137, align 1, !tbaa !11
  %139 = and i32 %138, 524288
  %140 = icmp ugt i32 %139, 0
  br i1 %140, label %147, label %141

141:                                              ; preds = %135
  %142 = load ptr, ptr %12, align 8, !tbaa !5
  %143 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %142, i32 0, i32 6
  %144 = load i32, ptr %143, align 1, !tbaa !11
  %145 = and i32 %144, 1048576
  %146 = icmp ugt i32 %145, 0
  br i1 %146, label %147, label %200

147:                                              ; preds = %141, %135
  %148 = load ptr, ptr %12, align 8, !tbaa !5
  %149 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %148, i32 0, i32 6
  %150 = load i32, ptr %149, align 1, !tbaa !11
  %151 = and i32 %150, 524288
  %152 = icmp ugt i32 %151, 0
  br i1 %152, label %153, label %178

153:                                              ; preds = %147
  %154 = load ptr, ptr %8, align 8, !tbaa !5
  %155 = load ptr, ptr %11, align 8, !tbaa !5
  %156 = load ptr, ptr %10, align 8, !tbaa !5
  %157 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %156, i32 0, i32 20
  %158 = load i32, ptr %157, align 4, !tbaa !21
  call void @libxsmm_generator_gemm_getval_stack_var(ptr noundef %154, ptr noundef %155, i32 noundef 5, i32 noundef %158)
  %159 = load ptr, ptr %8, align 8, !tbaa !5
  %160 = load ptr, ptr %11, align 8, !tbaa !5
  %161 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %160, i32 0, i32 16
  %162 = load i32, ptr %161, align 8, !tbaa !15
  %163 = load ptr, ptr %10, align 8, !tbaa !5
  %164 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %163, i32 0, i32 20
  %165 = load i32, ptr %164, align 4, !tbaa !21
  %166 = load i32, ptr %13, align 4, !tbaa !9
  %167 = zext i32 %166 to i64
  %168 = load ptr, ptr %11, align 8, !tbaa !5
  %169 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %168, i32 0, i32 4
  %170 = load i32, ptr %169, align 8, !tbaa !22
  %171 = zext i32 %170 to i64
  %172 = mul nsw i64 %167, %171
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef %159, i32 noundef %162, i32 noundef %165, i64 noundef %172)
  %173 = load ptr, ptr %8, align 8, !tbaa !5
  %174 = load ptr, ptr %11, align 8, !tbaa !5
  %175 = load ptr, ptr %10, align 8, !tbaa !5
  %176 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %175, i32 0, i32 20
  %177 = load i32, ptr %176, align 4, !tbaa !21
  call void @libxsmm_generator_gemm_setval_stack_var(ptr noundef %173, ptr noundef %174, i32 noundef 5, i32 noundef %177)
  br label %178

178:                                              ; preds = %153, %147
  %179 = load ptr, ptr %12, align 8, !tbaa !5
  %180 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %179, i32 0, i32 6
  %181 = load i32, ptr %180, align 1, !tbaa !11
  %182 = and i32 %181, 1048576
  %183 = icmp ugt i32 %182, 0
  br i1 %183, label %184, label %199

184:                                              ; preds = %178
  %185 = load ptr, ptr %8, align 8, !tbaa !5
  %186 = load ptr, ptr %11, align 8, !tbaa !5
  %187 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %186, i32 0, i32 16
  %188 = load i32, ptr %187, align 8, !tbaa !15
  %189 = load ptr, ptr %10, align 8, !tbaa !5
  %190 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %189, i32 0, i32 21
  %191 = load i32, ptr %190, align 4, !tbaa !23
  %192 = load i32, ptr %13, align 4, !tbaa !9
  %193 = zext i32 %192 to i64
  %194 = load ptr, ptr %11, align 8, !tbaa !5
  %195 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %194, i32 0, i32 4
  %196 = load i32, ptr %195, align 8, !tbaa !22
  %197 = zext i32 %196 to i64
  %198 = mul nsw i64 %193, %197
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef %185, i32 noundef %188, i32 noundef %191, i64 noundef %198)
  br label %199

199:                                              ; preds = %184, %178
  br label %200

200:                                              ; preds = %199, %141, %129, %123, %117
  %201 = load i32, ptr %17, align 4, !tbaa !9
  %202 = icmp ugt i32 %201, 0
  br i1 %202, label %203, label %224

203:                                              ; preds = %200
  %204 = load ptr, ptr %12, align 8, !tbaa !5
  %205 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %204, i32 0, i32 6
  %206 = load i32, ptr %205, align 1, !tbaa !11
  %207 = and i32 %206, 1048576
  %208 = icmp ugt i32 %207, 0
  br i1 %208, label %209, label %224

209:                                              ; preds = %203
  %210 = load ptr, ptr %8, align 8, !tbaa !5
  %211 = load ptr, ptr %11, align 8, !tbaa !5
  %212 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %211, i32 0, i32 16
  %213 = load i32, ptr %212, align 8, !tbaa !15
  %214 = load ptr, ptr %10, align 8, !tbaa !5
  %215 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %214, i32 0, i32 21
  %216 = load i32, ptr %215, align 4, !tbaa !23
  %217 = load i32, ptr %13, align 4, !tbaa !9
  %218 = zext i32 %217 to i64
  %219 = load ptr, ptr %11, align 8, !tbaa !5
  %220 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %219, i32 0, i32 3
  %221 = load i32, ptr %220, align 4, !tbaa !24
  %222 = zext i32 %221 to i64
  %223 = mul nsw i64 %218, %222
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef %210, i32 noundef %213, i32 noundef %216, i64 noundef %223)
  br label %224

224:                                              ; preds = %209, %203, %200
  %225 = load ptr, ptr %12, align 8, !tbaa !5
  %226 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %225, i32 0, i32 8
  %227 = getelementptr inbounds [3 x i8], ptr %226, i64 0, i64 0
  %228 = call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef %227)
  %229 = icmp eq i32 2, %228
  br i1 %229, label %236, label %230

230:                                              ; preds = %224
  %231 = load ptr, ptr %12, align 8, !tbaa !5
  %232 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %231, i32 0, i32 8
  %233 = getelementptr inbounds [3 x i8], ptr %232, i64 0, i64 0
  %234 = call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef %233)
  %235 = icmp eq i32 1, %234
  br i1 %235, label %236, label %275

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

242:                                              ; preds = %236
  %243 = load ptr, ptr %12, align 8, !tbaa !5
  %244 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %243, i32 0, i32 8
  %245 = getelementptr inbounds [3 x i8], ptr %244, i64 0, i64 0
  %246 = call i32 @LIBXSMM_GEMM_GETENUM_A_PREC(ptr noundef %245)
  %247 = icmp eq i32 12, %246
  br i1 %247, label %248, label %275

248:                                              ; preds = %242
  %249 = load ptr, ptr %12, align 8, !tbaa !5
  %250 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %249, i32 0, i32 6
  %251 = load i32, ptr %250, align 1, !tbaa !11
  %252 = and i32 %251, 524288
  %253 = icmp ugt i32 %252, 0
  br i1 %253, label %254, label %275

254:                                              ; preds = %248
  %255 = load ptr, ptr %8, align 8, !tbaa !5
  %256 = load ptr, ptr %11, align 8, !tbaa !5
  %257 = load ptr, ptr %10, align 8, !tbaa !5
  %258 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %257, i32 0, i32 20
  %259 = load i32, ptr %258, align 4, !tbaa !21
  call void @libxsmm_generator_gemm_getval_stack_var(ptr noundef %255, ptr noundef %256, i32 noundef 5, i32 noundef %259)
  %260 = load ptr, ptr %8, align 8, !tbaa !5
  %261 = load ptr, ptr %11, align 8, !tbaa !5
  %262 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %261, i32 0, i32 16
  %263 = load i32, ptr %262, align 8, !tbaa !15
  %264 = load ptr, ptr %10, align 8, !tbaa !5
  %265 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %264, i32 0, i32 20
  %266 = load i32, ptr %265, align 4, !tbaa !21
  %267 = load i32, ptr %13, align 4, !tbaa !9
  %268 = zext i32 %267 to i64
  %269 = mul nsw i64 %268, 4
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef %260, i32 noundef %263, i32 noundef %266, i64 noundef %269)
  %270 = load ptr, ptr %8, align 8, !tbaa !5
  %271 = load ptr, ptr %11, align 8, !tbaa !5
  %272 = load ptr, ptr %10, align 8, !tbaa !5
  %273 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %272, i32 0, i32 20
  %274 = load i32, ptr %273, align 4, !tbaa !21
  call void @libxsmm_generator_gemm_setval_stack_var(ptr noundef %270, ptr noundef %271, i32 noundef 5, i32 noundef %274)
  br label %275

275:                                              ; preds = %254, %248, %242, %236, %230
  %276 = load ptr, ptr %11, align 8, !tbaa !5
  %277 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %276, i32 0, i32 30
  %278 = load i32, ptr %277, align 8, !tbaa !25
  %279 = icmp eq i32 %278, 1
  br i1 %279, label %320, label %280

280:                                              ; preds = %275
  %281 = load ptr, ptr %11, align 8, !tbaa !5
  %282 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %281, i32 0, i32 38
  %283 = load i32, ptr %282, align 8, !tbaa !26
  %284 = icmp eq i32 %283, 1
  br i1 %284, label %320, label %285

285:                                              ; preds = %280
  %286 = load ptr, ptr %11, align 8, !tbaa !5
  %287 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %286, i32 0, i32 32
  %288 = load i32, ptr %287, align 8, !tbaa !27
  %289 = icmp eq i32 %288, 1
  br i1 %289, label %320, label %290

290:                                              ; preds = %285
  %291 = load ptr, ptr %11, align 8, !tbaa !5
  %292 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %291, i32 0, i32 25
  %293 = load i32, ptr %292, align 4, !tbaa !28
  %294 = icmp eq i32 %293, 1
  br i1 %294, label %320, label %295

295:                                              ; preds = %290
  %296 = load ptr, ptr %11, align 8, !tbaa !5
  %297 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %296, i32 0, i32 26
  %298 = load i32, ptr %297, align 8, !tbaa !29
  %299 = icmp eq i32 %298, 1
  br i1 %299, label %320, label %300

300:                                              ; preds = %295
  %301 = load ptr, ptr %11, align 8, !tbaa !5
  %302 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %301, i32 0, i32 27
  %303 = load i32, ptr %302, align 4, !tbaa !30
  %304 = icmp eq i32 %303, 1
  br i1 %304, label %320, label %305

305:                                              ; preds = %300
  %306 = load ptr, ptr %11, align 8, !tbaa !5
  %307 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %306, i32 0, i32 28
  %308 = load i32, ptr %307, align 8, !tbaa !31
  %309 = icmp eq i32 %308, 1
  br i1 %309, label %320, label %310

310:                                              ; preds = %305
  %311 = load ptr, ptr %11, align 8, !tbaa !5
  %312 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %311, i32 0, i32 29
  %313 = load i32, ptr %312, align 4, !tbaa !32
  %314 = icmp eq i32 %313, 1
  br i1 %314, label %320, label %315

315:                                              ; preds = %310
  %316 = load ptr, ptr %11, align 8, !tbaa !5
  %317 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %316, i32 0, i32 34
  %318 = load i32, ptr %317, align 8, !tbaa !33
  %319 = icmp eq i32 %318, 0
  br i1 %319, label %320, label %325

320:                                              ; preds = %315, %310, %305, %300, %295, %290, %285, %280, %275
  %321 = load ptr, ptr %8, align 8, !tbaa !5
  %322 = load ptr, ptr %10, align 8, !tbaa !5
  %323 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %322, i32 0, i32 22
  %324 = load i32, ptr %323, align 4, !tbaa !34
  call void @libxsmm_x86_instruction_push_reg(ptr noundef %321, i32 noundef %324)
  br label %325

325:                                              ; preds = %320, %315
  %326 = load ptr, ptr %11, align 8, !tbaa !5
  %327 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %326, i32 0, i32 30
  %328 = load i32, ptr %327, align 8, !tbaa !25
  %329 = icmp eq i32 %328, 1
  br i1 %329, label %330, label %375

330:                                              ; preds = %325
  %331 = load ptr, ptr %11, align 8, !tbaa !5
  %332 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %331, i32 0, i32 34
  %333 = load i32, ptr %332, align 8, !tbaa !33
  %334 = icmp eq i32 %333, 1
  br i1 %334, label %335, label %375

335:                                              ; preds = %330
  %336 = load ptr, ptr %8, align 8, !tbaa !5
  %337 = load ptr, ptr %11, align 8, !tbaa !5
  %338 = load ptr, ptr %10, align 8, !tbaa !5
  %339 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %338, i32 0, i32 22
  %340 = load i32, ptr %339, align 4, !tbaa !34
  call void @libxsmm_generator_gemm_getval_stack_var(ptr noundef %336, ptr noundef %337, i32 noundef 8, i32 noundef %340)
  %341 = load ptr, ptr %8, align 8, !tbaa !5
  %342 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %341, i32 0, i32 6
  %343 = load i32, ptr %342, align 4, !tbaa !35
  %344 = icmp ult i32 %343, 1005
  br i1 %344, label %345, label %357

345:                                              ; preds = %335
  %346 = load ptr, ptr %8, align 8, !tbaa !5
  %347 = load ptr, ptr %11, align 8, !tbaa !5
  %348 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %347, i32 0, i32 16
  %349 = load i32, ptr %348, align 8, !tbaa !15
  %350 = load ptr, ptr %10, align 8, !tbaa !5
  %351 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %350, i32 0, i32 22
  %352 = load i32, ptr %351, align 4, !tbaa !34
  %353 = load i32, ptr %13, align 4, !tbaa !9
  %354 = add i32 %353, 3
  %355 = udiv i32 %354, 8
  %356 = zext i32 %355 to i64
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef %346, i32 noundef %349, i32 noundef %352, i64 noundef %356)
  br label %369

357:                                              ; preds = %335
  %358 = load ptr, ptr %8, align 8, !tbaa !5
  %359 = load ptr, ptr %11, align 8, !tbaa !5
  %360 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %359, i32 0, i32 16
  %361 = load i32, ptr %360, align 8, !tbaa !15
  %362 = load ptr, ptr %10, align 8, !tbaa !5
  %363 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %362, i32 0, i32 22
  %364 = load i32, ptr %363, align 4, !tbaa !34
  %365 = load i32, ptr %13, align 4, !tbaa !9
  %366 = add i32 %365, 7
  %367 = udiv i32 %366, 8
  %368 = zext i32 %367 to i64
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef %358, i32 noundef %361, i32 noundef %364, i64 noundef %368)
  br label %369

369:                                              ; preds = %357, %345
  %370 = load ptr, ptr %8, align 8, !tbaa !5
  %371 = load ptr, ptr %11, align 8, !tbaa !5
  %372 = load ptr, ptr %10, align 8, !tbaa !5
  %373 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %372, i32 0, i32 22
  %374 = load i32, ptr %373, align 4, !tbaa !34
  call void @libxsmm_generator_gemm_setval_stack_var(ptr noundef %370, ptr noundef %371, i32 noundef 8, i32 noundef %374)
  br label %375

375:                                              ; preds = %369, %330, %325
  %376 = load ptr, ptr %11, align 8, !tbaa !5
  %377 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %376, i32 0, i32 38
  %378 = load i32, ptr %377, align 8, !tbaa !26
  %379 = icmp eq i32 %378, 1
  br i1 %379, label %380, label %402

380:                                              ; preds = %375
  %381 = load ptr, ptr %8, align 8, !tbaa !5
  %382 = load ptr, ptr %11, align 8, !tbaa !5
  %383 = load ptr, ptr %10, align 8, !tbaa !5
  %384 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %383, i32 0, i32 22
  %385 = load i32, ptr %384, align 4, !tbaa !34
  call void @libxsmm_generator_gemm_getval_stack_var(ptr noundef %381, ptr noundef %382, i32 noundef 8, i32 noundef %385)
  %386 = load ptr, ptr %8, align 8, !tbaa !5
  %387 = load ptr, ptr %11, align 8, !tbaa !5
  %388 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %387, i32 0, i32 16
  %389 = load i32, ptr %388, align 8, !tbaa !15
  %390 = load ptr, ptr %10, align 8, !tbaa !5
  %391 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %390, i32 0, i32 22
  %392 = load i32, ptr %391, align 4, !tbaa !34
  %393 = load i32, ptr %13, align 4, !tbaa !9
  %394 = zext i32 %393 to i64
  %395 = mul nsw i64 %394, 2
  %396 = mul nsw i64 %395, 2
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef %386, i32 noundef %389, i32 noundef %392, i64 noundef %396)
  %397 = load ptr, ptr %8, align 8, !tbaa !5
  %398 = load ptr, ptr %11, align 8, !tbaa !5
  %399 = load ptr, ptr %10, align 8, !tbaa !5
  %400 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %399, i32 0, i32 22
  %401 = load i32, ptr %400, align 4, !tbaa !34
  call void @libxsmm_generator_gemm_setval_stack_var(ptr noundef %397, ptr noundef %398, i32 noundef 8, i32 noundef %401)
  br label %402

402:                                              ; preds = %380, %375
  %403 = load ptr, ptr %11, align 8, !tbaa !5
  %404 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %403, i32 0, i32 32
  %405 = load i32, ptr %404, align 8, !tbaa !27
  %406 = icmp eq i32 %405, 1
  br i1 %406, label %407, label %447

407:                                              ; preds = %402
  %408 = load ptr, ptr %8, align 8, !tbaa !5
  %409 = load ptr, ptr %11, align 8, !tbaa !5
  %410 = load ptr, ptr %10, align 8, !tbaa !5
  %411 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %410, i32 0, i32 22
  %412 = load i32, ptr %411, align 4, !tbaa !34
  call void @libxsmm_generator_gemm_getval_stack_var(ptr noundef %408, ptr noundef %409, i32 noundef 19, i32 noundef %412)
  %413 = load ptr, ptr %8, align 8, !tbaa !5
  %414 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %413, i32 0, i32 6
  %415 = load i32, ptr %414, align 4, !tbaa !35
  %416 = icmp ult i32 %415, 1005
  br i1 %416, label %417, label %429

417:                                              ; preds = %407
  %418 = load ptr, ptr %8, align 8, !tbaa !5
  %419 = load ptr, ptr %11, align 8, !tbaa !5
  %420 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %419, i32 0, i32 16
  %421 = load i32, ptr %420, align 8, !tbaa !15
  %422 = load ptr, ptr %10, align 8, !tbaa !5
  %423 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %422, i32 0, i32 22
  %424 = load i32, ptr %423, align 4, !tbaa !34
  %425 = load i32, ptr %13, align 4, !tbaa !9
  %426 = add i32 %425, 3
  %427 = udiv i32 %426, 8
  %428 = zext i32 %427 to i64
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef %418, i32 noundef %421, i32 noundef %424, i64 noundef %428)
  br label %441

429:                                              ; preds = %407
  %430 = load ptr, ptr %8, align 8, !tbaa !5
  %431 = load ptr, ptr %11, align 8, !tbaa !5
  %432 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %431, i32 0, i32 16
  %433 = load i32, ptr %432, align 8, !tbaa !15
  %434 = load ptr, ptr %10, align 8, !tbaa !5
  %435 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %434, i32 0, i32 22
  %436 = load i32, ptr %435, align 4, !tbaa !34
  %437 = load i32, ptr %13, align 4, !tbaa !9
  %438 = add i32 %437, 7
  %439 = udiv i32 %438, 8
  %440 = zext i32 %439 to i64
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef %430, i32 noundef %433, i32 noundef %436, i64 noundef %440)
  br label %441

441:                                              ; preds = %429, %417
  %442 = load ptr, ptr %8, align 8, !tbaa !5
  %443 = load ptr, ptr %11, align 8, !tbaa !5
  %444 = load ptr, ptr %10, align 8, !tbaa !5
  %445 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %444, i32 0, i32 22
  %446 = load i32, ptr %445, align 4, !tbaa !34
  call void @libxsmm_generator_gemm_setval_stack_var(ptr noundef %442, ptr noundef %443, i32 noundef 19, i32 noundef %446)
  br label %447

447:                                              ; preds = %441, %402
  %448 = load ptr, ptr %11, align 8, !tbaa !5
  %449 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %448, i32 0, i32 34
  %450 = load i32, ptr %449, align 8, !tbaa !33
  %451 = icmp eq i32 %450, 0
  br i1 %451, label %452, label %473

452:                                              ; preds = %447
  %453 = load ptr, ptr %8, align 8, !tbaa !5
  %454 = load ptr, ptr %11, align 8, !tbaa !5
  %455 = load ptr, ptr %10, align 8, !tbaa !5
  %456 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %455, i32 0, i32 22
  %457 = load i32, ptr %456, align 4, !tbaa !34
  call void @libxsmm_generator_gemm_getval_stack_var(ptr noundef %453, ptr noundef %454, i32 noundef 8, i32 noundef %457)
  %458 = load ptr, ptr %8, align 8, !tbaa !5
  %459 = load ptr, ptr %11, align 8, !tbaa !5
  %460 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %459, i32 0, i32 16
  %461 = load i32, ptr %460, align 8, !tbaa !15
  %462 = load ptr, ptr %10, align 8, !tbaa !5
  %463 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %462, i32 0, i32 22
  %464 = load i32, ptr %463, align 4, !tbaa !34
  %465 = load i32, ptr %13, align 4, !tbaa !9
  %466 = zext i32 %465 to i64
  %467 = mul nsw i64 %466, 2
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef %458, i32 noundef %461, i32 noundef %464, i64 noundef %467)
  %468 = load ptr, ptr %8, align 8, !tbaa !5
  %469 = load ptr, ptr %11, align 8, !tbaa !5
  %470 = load ptr, ptr %10, align 8, !tbaa !5
  %471 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %470, i32 0, i32 22
  %472 = load i32, ptr %471, align 4, !tbaa !34
  call void @libxsmm_generator_gemm_setval_stack_var(ptr noundef %468, ptr noundef %469, i32 noundef 8, i32 noundef %472)
  br label %473

473:                                              ; preds = %452, %447
  %474 = load ptr, ptr %11, align 8, !tbaa !5
  %475 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %474, i32 0, i32 25
  %476 = load i32, ptr %475, align 4, !tbaa !28
  %477 = icmp eq i32 %476, 1
  br i1 %477, label %483, label %478

478:                                              ; preds = %473
  %479 = load ptr, ptr %11, align 8, !tbaa !5
  %480 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %479, i32 0, i32 26
  %481 = load i32, ptr %480, align 8, !tbaa !29
  %482 = icmp eq i32 %481, 1
  br i1 %482, label %483, label %504

483:                                              ; preds = %478, %473
  %484 = load ptr, ptr %8, align 8, !tbaa !5
  %485 = load ptr, ptr %11, align 8, !tbaa !5
  %486 = load ptr, ptr %10, align 8, !tbaa !5
  %487 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %486, i32 0, i32 22
  %488 = load i32, ptr %487, align 4, !tbaa !34
  call void @libxsmm_generator_gemm_getval_stack_var(ptr noundef %484, ptr noundef %485, i32 noundef 7, i32 noundef %488)
  %489 = load ptr, ptr %8, align 8, !tbaa !5
  %490 = load ptr, ptr %11, align 8, !tbaa !5
  %491 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %490, i32 0, i32 16
  %492 = load i32, ptr %491, align 8, !tbaa !15
  %493 = load ptr, ptr %10, align 8, !tbaa !5
  %494 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %493, i32 0, i32 22
  %495 = load i32, ptr %494, align 4, !tbaa !34
  %496 = load i32, ptr %13, align 4, !tbaa !9
  %497 = zext i32 %496 to i64
  %498 = mul nsw i64 %497, 2
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef %489, i32 noundef %492, i32 noundef %495, i64 noundef %498)
  %499 = load ptr, ptr %8, align 8, !tbaa !5
  %500 = load ptr, ptr %11, align 8, !tbaa !5
  %501 = load ptr, ptr %10, align 8, !tbaa !5
  %502 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %501, i32 0, i32 22
  %503 = load i32, ptr %502, align 4, !tbaa !34
  call void @libxsmm_generator_gemm_setval_stack_var(ptr noundef %499, ptr noundef %500, i32 noundef 7, i32 noundef %503)
  br label %504

504:                                              ; preds = %483, %478
  %505 = load ptr, ptr %11, align 8, !tbaa !5
  %506 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %505, i32 0, i32 27
  %507 = load i32, ptr %506, align 4, !tbaa !30
  %508 = icmp eq i32 %507, 1
  br i1 %508, label %509, label %529

509:                                              ; preds = %504
  %510 = load ptr, ptr %8, align 8, !tbaa !5
  %511 = load ptr, ptr %11, align 8, !tbaa !5
  %512 = load ptr, ptr %10, align 8, !tbaa !5
  %513 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %512, i32 0, i32 22
  %514 = load i32, ptr %513, align 4, !tbaa !34
  call void @libxsmm_generator_gemm_getval_stack_var(ptr noundef %510, ptr noundef %511, i32 noundef 7, i32 noundef %514)
  %515 = load ptr, ptr %8, align 8, !tbaa !5
  %516 = load ptr, ptr %11, align 8, !tbaa !5
  %517 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %516, i32 0, i32 16
  %518 = load i32, ptr %517, align 8, !tbaa !15
  %519 = load ptr, ptr %10, align 8, !tbaa !5
  %520 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %519, i32 0, i32 22
  %521 = load i32, ptr %520, align 4, !tbaa !34
  %522 = load i32, ptr %13, align 4, !tbaa !9
  %523 = zext i32 %522 to i64
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef %515, i32 noundef %518, i32 noundef %521, i64 noundef %523)
  %524 = load ptr, ptr %8, align 8, !tbaa !5
  %525 = load ptr, ptr %11, align 8, !tbaa !5
  %526 = load ptr, ptr %10, align 8, !tbaa !5
  %527 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %526, i32 0, i32 22
  %528 = load i32, ptr %527, align 4, !tbaa !34
  call void @libxsmm_generator_gemm_setval_stack_var(ptr noundef %524, ptr noundef %525, i32 noundef 7, i32 noundef %528)
  br label %529

529:                                              ; preds = %509, %504
  %530 = load ptr, ptr %11, align 8, !tbaa !5
  %531 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %530, i32 0, i32 28
  %532 = load i32, ptr %531, align 8, !tbaa !31
  %533 = icmp eq i32 %532, 1
  br i1 %533, label %534, label %554

534:                                              ; preds = %529
  %535 = load ptr, ptr %8, align 8, !tbaa !5
  %536 = load ptr, ptr %11, align 8, !tbaa !5
  %537 = load ptr, ptr %10, align 8, !tbaa !5
  %538 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %537, i32 0, i32 22
  %539 = load i32, ptr %538, align 4, !tbaa !34
  call void @libxsmm_generator_gemm_getval_stack_var(ptr noundef %535, ptr noundef %536, i32 noundef 7, i32 noundef %539)
  %540 = load ptr, ptr %8, align 8, !tbaa !5
  %541 = load ptr, ptr %11, align 8, !tbaa !5
  %542 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %541, i32 0, i32 16
  %543 = load i32, ptr %542, align 8, !tbaa !15
  %544 = load ptr, ptr %10, align 8, !tbaa !5
  %545 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %544, i32 0, i32 22
  %546 = load i32, ptr %545, align 4, !tbaa !34
  %547 = load i32, ptr %13, align 4, !tbaa !9
  %548 = zext i32 %547 to i64
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef %540, i32 noundef %543, i32 noundef %546, i64 noundef %548)
  %549 = load ptr, ptr %8, align 8, !tbaa !5
  %550 = load ptr, ptr %11, align 8, !tbaa !5
  %551 = load ptr, ptr %10, align 8, !tbaa !5
  %552 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %551, i32 0, i32 22
  %553 = load i32, ptr %552, align 4, !tbaa !34
  call void @libxsmm_generator_gemm_setval_stack_var(ptr noundef %549, ptr noundef %550, i32 noundef 7, i32 noundef %553)
  br label %554

554:                                              ; preds = %534, %529
  %555 = load ptr, ptr %11, align 8, !tbaa !5
  %556 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %555, i32 0, i32 29
  %557 = load i32, ptr %556, align 4, !tbaa !32
  %558 = icmp eq i32 %557, 1
  br i1 %558, label %559, label %580

559:                                              ; preds = %554
  %560 = load ptr, ptr %8, align 8, !tbaa !5
  %561 = load ptr, ptr %11, align 8, !tbaa !5
  %562 = load ptr, ptr %10, align 8, !tbaa !5
  %563 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %562, i32 0, i32 22
  %564 = load i32, ptr %563, align 4, !tbaa !34
  call void @libxsmm_generator_gemm_getval_stack_var(ptr noundef %560, ptr noundef %561, i32 noundef 7, i32 noundef %564)
  %565 = load ptr, ptr %8, align 8, !tbaa !5
  %566 = load ptr, ptr %11, align 8, !tbaa !5
  %567 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %566, i32 0, i32 16
  %568 = load i32, ptr %567, align 8, !tbaa !15
  %569 = load ptr, ptr %10, align 8, !tbaa !5
  %570 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %569, i32 0, i32 22
  %571 = load i32, ptr %570, align 4, !tbaa !34
  %572 = load i32, ptr %13, align 4, !tbaa !9
  %573 = zext i32 %572 to i64
  %574 = mul nsw i64 %573, 4
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef %565, i32 noundef %568, i32 noundef %571, i64 noundef %574)
  %575 = load ptr, ptr %8, align 8, !tbaa !5
  %576 = load ptr, ptr %11, align 8, !tbaa !5
  %577 = load ptr, ptr %10, align 8, !tbaa !5
  %578 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %577, i32 0, i32 22
  %579 = load i32, ptr %578, align 4, !tbaa !34
  call void @libxsmm_generator_gemm_setval_stack_var(ptr noundef %575, ptr noundef %576, i32 noundef 7, i32 noundef %579)
  br label %580

580:                                              ; preds = %559, %554
  %581 = load ptr, ptr %11, align 8, !tbaa !5
  %582 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %581, i32 0, i32 30
  %583 = load i32, ptr %582, align 8, !tbaa !25
  %584 = icmp eq i32 %583, 1
  br i1 %584, label %625, label %585

585:                                              ; preds = %580
  %586 = load ptr, ptr %11, align 8, !tbaa !5
  %587 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %586, i32 0, i32 38
  %588 = load i32, ptr %587, align 8, !tbaa !26
  %589 = icmp eq i32 %588, 1
  br i1 %589, label %625, label %590

590:                                              ; preds = %585
  %591 = load ptr, ptr %11, align 8, !tbaa !5
  %592 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %591, i32 0, i32 32
  %593 = load i32, ptr %592, align 8, !tbaa !27
  %594 = icmp eq i32 %593, 1
  br i1 %594, label %625, label %595

595:                                              ; preds = %590
  %596 = load ptr, ptr %11, align 8, !tbaa !5
  %597 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %596, i32 0, i32 25
  %598 = load i32, ptr %597, align 4, !tbaa !28
  %599 = icmp eq i32 %598, 1
  br i1 %599, label %625, label %600

600:                                              ; preds = %595
  %601 = load ptr, ptr %11, align 8, !tbaa !5
  %602 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %601, i32 0, i32 26
  %603 = load i32, ptr %602, align 8, !tbaa !29
  %604 = icmp eq i32 %603, 1
  br i1 %604, label %625, label %605

605:                                              ; preds = %600
  %606 = load ptr, ptr %11, align 8, !tbaa !5
  %607 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %606, i32 0, i32 27
  %608 = load i32, ptr %607, align 4, !tbaa !30
  %609 = icmp eq i32 %608, 1
  br i1 %609, label %625, label %610

610:                                              ; preds = %605
  %611 = load ptr, ptr %11, align 8, !tbaa !5
  %612 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %611, i32 0, i32 28
  %613 = load i32, ptr %612, align 8, !tbaa !31
  %614 = icmp eq i32 %613, 1
  br i1 %614, label %625, label %615

615:                                              ; preds = %610
  %616 = load ptr, ptr %11, align 8, !tbaa !5
  %617 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %616, i32 0, i32 29
  %618 = load i32, ptr %617, align 4, !tbaa !32
  %619 = icmp eq i32 %618, 1
  br i1 %619, label %625, label %620

620:                                              ; preds = %615
  %621 = load ptr, ptr %11, align 8, !tbaa !5
  %622 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %621, i32 0, i32 34
  %623 = load i32, ptr %622, align 8, !tbaa !33
  %624 = icmp eq i32 %623, 0
  br i1 %624, label %625, label %630

625:                                              ; preds = %620, %615, %610, %605, %600, %595, %590, %585, %580
  %626 = load ptr, ptr %8, align 8, !tbaa !5
  %627 = load ptr, ptr %10, align 8, !tbaa !5
  %628 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %627, i32 0, i32 22
  %629 = load i32, ptr %628, align 4, !tbaa !34
  call void @libxsmm_x86_instruction_pop_reg(ptr noundef %626, i32 noundef %629)
  br label %630

630:                                              ; preds = %625, %620
  %631 = load ptr, ptr %12, align 8, !tbaa !5
  %632 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %631, i32 0, i32 2
  %633 = load i32, ptr %632, align 1, !tbaa !37
  %634 = load i32, ptr %21, align 4, !tbaa !9
  %635 = udiv i32 %633, %634
  %636 = zext i32 %635 to i64
  %637 = load ptr, ptr %11, align 8, !tbaa !5
  %638 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %637, i32 0, i32 3
  %639 = load i32, ptr %638, align 4, !tbaa !24
  %640 = zext i32 %639 to i64
  %641 = mul nsw i64 %636, %640
  %642 = load ptr, ptr %12, align 8, !tbaa !5
  %643 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %642, i32 0, i32 3
  %644 = load i32, ptr %643, align 1, !tbaa !38
  %645 = zext i32 %644 to i64
  %646 = mul nsw i64 %641, %645
  %647 = load i32, ptr %13, align 4, !tbaa !9
  %648 = zext i32 %647 to i64
  %649 = load ptr, ptr %11, align 8, !tbaa !5
  %650 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %649, i32 0, i32 3
  %651 = load i32, ptr %650, align 4, !tbaa !24
  %652 = load i32, ptr %15, align 4, !tbaa !9
  %653 = mul i32 %651, %652
  %654 = zext i32 %653 to i64
  %655 = mul nsw i64 %648, %654
  %656 = sub nsw i64 %646, %655
  store i64 %656, ptr %22, align 8, !tbaa !39
  %657 = load ptr, ptr %12, align 8, !tbaa !5
  %658 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %657, i32 0, i32 7
  %659 = load i8, ptr %658, align 1, !tbaa !40
  %660 = zext i8 %659 to i32
  %661 = icmp eq i32 %660, 1
  br i1 %661, label %662, label %738

662:                                              ; preds = %630
  %663 = load ptr, ptr %12, align 8, !tbaa !5
  %664 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %663, i32 0, i32 6
  %665 = load i32, ptr %664, align 1, !tbaa !11
  %666 = and i32 %665, 65536
  %667 = icmp ne i32 %666, 0
  br i1 %667, label %668, label %728

668:                                              ; preds = %662
  %669 = load ptr, ptr %8, align 8, !tbaa !5
  %670 = load ptr, ptr %10, align 8, !tbaa !5
  %671 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %670, i32 0, i32 22
  %672 = load i32, ptr %671, align 4, !tbaa !34
  call void @libxsmm_x86_instruction_push_reg(ptr noundef %669, i32 noundef %672)
  %673 = load ptr, ptr %8, align 8, !tbaa !5
  %674 = load ptr, ptr %10, align 8, !tbaa !5
  %675 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %674, i32 0, i32 14
  %676 = load i32, ptr %675, align 4, !tbaa !41
  call void @libxsmm_x86_instruction_push_reg(ptr noundef %673, i32 noundef %676)
  %677 = load ptr, ptr %8, align 8, !tbaa !5
  %678 = load ptr, ptr %9, align 8, !tbaa !5
  %679 = load ptr, ptr %10, align 8, !tbaa !5
  %680 = load ptr, ptr %11, align 8, !tbaa !5
  call void @libxsmm_generator_gemm_header_reduceloop(ptr noundef %677, ptr noundef %678, ptr noundef %679, ptr noundef %680)
  %681 = load ptr, ptr %8, align 8, !tbaa !5
  %682 = load ptr, ptr %11, align 8, !tbaa !5
  %683 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %682, i32 0, i32 20
  %684 = load i32, ptr %683, align 8, !tbaa !42
  %685 = load ptr, ptr %10, align 8, !tbaa !5
  %686 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %685, i32 0, i32 6
  %687 = load i32, ptr %686, align 4, !tbaa !43
  %688 = load ptr, ptr %10, align 8, !tbaa !5
  %689 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %688, i32 0, i32 14
  %690 = load i32, ptr %689, align 4, !tbaa !41
  %691 = load ptr, ptr %10, align 8, !tbaa !5
  %692 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %691, i32 0, i32 22
  %693 = load i32, ptr %692, align 4, !tbaa !34
  call void @libxsmm_x86_instruction_alu_mem(ptr noundef %681, i32 noundef %684, i32 noundef %687, i32 noundef %690, i32 noundef 8, i32 noundef 0, i32 noundef %693, i32 noundef 0)
  %694 = load ptr, ptr %8, align 8, !tbaa !5
  %695 = load ptr, ptr %11, align 8, !tbaa !5
  %696 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %695, i32 0, i32 17
  %697 = load i32, ptr %696, align 4, !tbaa !44
  %698 = load ptr, ptr %10, align 8, !tbaa !5
  %699 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %698, i32 0, i32 22
  %700 = load i32, ptr %699, align 4, !tbaa !34
  %701 = load i64, ptr %22, align 8, !tbaa !39
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef %694, i32 noundef %697, i32 noundef %700, i64 noundef %701)
  %702 = load ptr, ptr %8, align 8, !tbaa !5
  %703 = load ptr, ptr %11, align 8, !tbaa !5
  %704 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %703, i32 0, i32 20
  %705 = load i32, ptr %704, align 8, !tbaa !42
  %706 = load ptr, ptr %10, align 8, !tbaa !5
  %707 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %706, i32 0, i32 6
  %708 = load i32, ptr %707, align 4, !tbaa !43
  %709 = load ptr, ptr %10, align 8, !tbaa !5
  %710 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %709, i32 0, i32 14
  %711 = load i32, ptr %710, align 4, !tbaa !41
  %712 = load ptr, ptr %10, align 8, !tbaa !5
  %713 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %712, i32 0, i32 22
  %714 = load i32, ptr %713, align 4, !tbaa !34
  call void @libxsmm_x86_instruction_alu_mem(ptr noundef %702, i32 noundef %705, i32 noundef %708, i32 noundef %711, i32 noundef 8, i32 noundef 0, i32 noundef %714, i32 noundef 1)
  %715 = load ptr, ptr %8, align 8, !tbaa !5
  %716 = load ptr, ptr %9, align 8, !tbaa !5
  %717 = load ptr, ptr %10, align 8, !tbaa !5
  %718 = load ptr, ptr %11, align 8, !tbaa !5
  %719 = load ptr, ptr %12, align 8, !tbaa !5
  call void @libxsmm_generator_gemm_footer_reduceloop(ptr noundef %715, ptr noundef %716, ptr noundef %717, ptr noundef %718, ptr noundef %719)
  %720 = load ptr, ptr %8, align 8, !tbaa !5
  %721 = load ptr, ptr %10, align 8, !tbaa !5
  %722 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %721, i32 0, i32 14
  %723 = load i32, ptr %722, align 4, !tbaa !41
  call void @libxsmm_x86_instruction_pop_reg(ptr noundef %720, i32 noundef %723)
  %724 = load ptr, ptr %8, align 8, !tbaa !5
  %725 = load ptr, ptr %10, align 8, !tbaa !5
  %726 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %725, i32 0, i32 22
  %727 = load i32, ptr %726, align 4, !tbaa !34
  call void @libxsmm_x86_instruction_pop_reg(ptr noundef %724, i32 noundef %727)
  br label %737

728:                                              ; preds = %662
  %729 = load ptr, ptr %8, align 8, !tbaa !5
  %730 = load ptr, ptr %11, align 8, !tbaa !5
  %731 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %730, i32 0, i32 17
  %732 = load i32, ptr %731, align 4, !tbaa !44
  %733 = load ptr, ptr %10, align 8, !tbaa !5
  %734 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %733, i32 0, i32 6
  %735 = load i32, ptr %734, align 4, !tbaa !43
  %736 = load i64, ptr %22, align 8, !tbaa !39
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef %729, i32 noundef %732, i32 noundef %735, i64 noundef %736)
  br label %737

737:                                              ; preds = %728, %668
  br label %738

738:                                              ; preds = %737, %630
  %739 = load ptr, ptr %12, align 8, !tbaa !5
  %740 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %739, i32 0, i32 6
  %741 = load i32, ptr %740, align 1, !tbaa !11
  %742 = and i32 %741, 65536
  %743 = icmp ne i32 %742, 0
  br i1 %743, label %744, label %920

744:                                              ; preds = %738
  %745 = load ptr, ptr %8, align 8, !tbaa !5
  %746 = load ptr, ptr %10, align 8, !tbaa !5
  %747 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %746, i32 0, i32 22
  %748 = load i32, ptr %747, align 4, !tbaa !34
  call void @libxsmm_x86_instruction_push_reg(ptr noundef %745, i32 noundef %748)
  %749 = load ptr, ptr %8, align 8, !tbaa !5
  %750 = load ptr, ptr %10, align 8, !tbaa !5
  %751 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %750, i32 0, i32 14
  %752 = load i32, ptr %751, align 4, !tbaa !41
  call void @libxsmm_x86_instruction_push_reg(ptr noundef %749, i32 noundef %752)
  %753 = load ptr, ptr %8, align 8, !tbaa !5
  %754 = load ptr, ptr %9, align 8, !tbaa !5
  %755 = load ptr, ptr %10, align 8, !tbaa !5
  %756 = load ptr, ptr %11, align 8, !tbaa !5
  call void @libxsmm_generator_gemm_header_reduceloop(ptr noundef %753, ptr noundef %754, ptr noundef %755, ptr noundef %756)
  %757 = load ptr, ptr %8, align 8, !tbaa !5
  %758 = load ptr, ptr %11, align 8, !tbaa !5
  %759 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %758, i32 0, i32 20
  %760 = load i32, ptr %759, align 8, !tbaa !42
  %761 = load ptr, ptr %10, align 8, !tbaa !5
  %762 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %761, i32 0, i32 1
  %763 = load i32, ptr %762, align 4, !tbaa !45
  %764 = load ptr, ptr %10, align 8, !tbaa !5
  %765 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %764, i32 0, i32 14
  %766 = load i32, ptr %765, align 4, !tbaa !41
  %767 = load ptr, ptr %10, align 8, !tbaa !5
  %768 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %767, i32 0, i32 22
  %769 = load i32, ptr %768, align 4, !tbaa !34
  call void @libxsmm_x86_instruction_alu_mem(ptr noundef %757, i32 noundef %760, i32 noundef %763, i32 noundef %766, i32 noundef 8, i32 noundef 0, i32 noundef %769, i32 noundef 0)
  %770 = load ptr, ptr %8, align 8, !tbaa !5
  %771 = load ptr, ptr %11, align 8, !tbaa !5
  %772 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %771, i32 0, i32 17
  %773 = load i32, ptr %772, align 4, !tbaa !44
  %774 = load ptr, ptr %10, align 8, !tbaa !5
  %775 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %774, i32 0, i32 22
  %776 = load i32, ptr %775, align 4, !tbaa !34
  %777 = load i64, ptr %22, align 8, !tbaa !39
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef %770, i32 noundef %773, i32 noundef %776, i64 noundef %777)
  %778 = load ptr, ptr %8, align 8, !tbaa !5
  %779 = load ptr, ptr %11, align 8, !tbaa !5
  %780 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %779, i32 0, i32 20
  %781 = load i32, ptr %780, align 8, !tbaa !42
  %782 = load ptr, ptr %10, align 8, !tbaa !5
  %783 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %782, i32 0, i32 1
  %784 = load i32, ptr %783, align 4, !tbaa !45
  %785 = load ptr, ptr %10, align 8, !tbaa !5
  %786 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %785, i32 0, i32 14
  %787 = load i32, ptr %786, align 4, !tbaa !41
  %788 = load ptr, ptr %10, align 8, !tbaa !5
  %789 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %788, i32 0, i32 22
  %790 = load i32, ptr %789, align 4, !tbaa !34
  call void @libxsmm_x86_instruction_alu_mem(ptr noundef %778, i32 noundef %781, i32 noundef %784, i32 noundef %787, i32 noundef 8, i32 noundef 0, i32 noundef %790, i32 noundef 1)
  %791 = load i32, ptr %18, align 4, !tbaa !9
  %792 = icmp ugt i32 %791, 0
  br i1 %792, label %799, label %793

793:                                              ; preds = %744
  %794 = load i32, ptr %20, align 4, !tbaa !9
  %795 = icmp ugt i32 %794, 0
  br i1 %795, label %799, label %796

796:                                              ; preds = %793
  %797 = load i32, ptr %19, align 4, !tbaa !9
  %798 = icmp ugt i32 %797, 0
  br i1 %798, label %799, label %848

799:                                              ; preds = %796, %793, %744
  %800 = load ptr, ptr %8, align 8, !tbaa !5
  %801 = load ptr, ptr %10, align 8, !tbaa !5
  %802 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %801, i32 0, i32 23
  %803 = load i32, ptr %802, align 4, !tbaa !46
  call void @libxsmm_x86_instruction_push_reg(ptr noundef %800, i32 noundef %803)
  %804 = load ptr, ptr %8, align 8, !tbaa !5
  %805 = load ptr, ptr %11, align 8, !tbaa !5
  %806 = load ptr, ptr %10, align 8, !tbaa !5
  %807 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %806, i32 0, i32 23
  %808 = load i32, ptr %807, align 4, !tbaa !46
  call void @libxsmm_generator_gemm_getval_stack_var(ptr noundef %804, ptr noundef %805, i32 noundef 33, i32 noundef %808)
  %809 = load ptr, ptr %8, align 8, !tbaa !5
  %810 = load ptr, ptr %11, align 8, !tbaa !5
  %811 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %810, i32 0, i32 20
  %812 = load i32, ptr %811, align 8, !tbaa !42
  %813 = load ptr, ptr %10, align 8, !tbaa !5
  %814 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %813, i32 0, i32 23
  %815 = load i32, ptr %814, align 4, !tbaa !46
  %816 = load ptr, ptr %10, align 8, !tbaa !5
  %817 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %816, i32 0, i32 14
  %818 = load i32, ptr %817, align 4, !tbaa !41
  %819 = load ptr, ptr %10, align 8, !tbaa !5
  %820 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %819, i32 0, i32 22
  %821 = load i32, ptr %820, align 4, !tbaa !34
  call void @libxsmm_x86_instruction_alu_mem(ptr noundef %809, i32 noundef %812, i32 noundef %815, i32 noundef %818, i32 noundef 8, i32 noundef 0, i32 noundef %821, i32 noundef 0)
  %822 = load ptr, ptr %8, align 8, !tbaa !5
  %823 = load ptr, ptr %11, align 8, !tbaa !5
  %824 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %823, i32 0, i32 16
  %825 = load i32, ptr %824, align 8, !tbaa !15
  %826 = load ptr, ptr %10, align 8, !tbaa !5
  %827 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %826, i32 0, i32 22
  %828 = load i32, ptr %827, align 4, !tbaa !34
  %829 = load i32, ptr %13, align 4, !tbaa !9
  %830 = zext i32 %829 to i64
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef %822, i32 noundef %825, i32 noundef %828, i64 noundef %830)
  %831 = load ptr, ptr %8, align 8, !tbaa !5
  %832 = load ptr, ptr %11, align 8, !tbaa !5
  %833 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %832, i32 0, i32 20
  %834 = load i32, ptr %833, align 8, !tbaa !42
  %835 = load ptr, ptr %10, align 8, !tbaa !5
  %836 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %835, i32 0, i32 23
  %837 = load i32, ptr %836, align 4, !tbaa !46
  %838 = load ptr, ptr %10, align 8, !tbaa !5
  %839 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %838, i32 0, i32 14
  %840 = load i32, ptr %839, align 4, !tbaa !41
  %841 = load ptr, ptr %10, align 8, !tbaa !5
  %842 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %841, i32 0, i32 22
  %843 = load i32, ptr %842, align 4, !tbaa !34
  call void @libxsmm_x86_instruction_alu_mem(ptr noundef %831, i32 noundef %834, i32 noundef %837, i32 noundef %840, i32 noundef 8, i32 noundef 0, i32 noundef %843, i32 noundef 1)
  %844 = load ptr, ptr %8, align 8, !tbaa !5
  %845 = load ptr, ptr %10, align 8, !tbaa !5
  %846 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %845, i32 0, i32 23
  %847 = load i32, ptr %846, align 4, !tbaa !46
  call void @libxsmm_x86_instruction_pop_reg(ptr noundef %844, i32 noundef %847)
  br label %848

848:                                              ; preds = %799, %796
  %849 = load i32, ptr %17, align 4, !tbaa !9
  %850 = icmp ugt i32 %849, 0
  br i1 %850, label %851, label %906

851:                                              ; preds = %848
  %852 = load ptr, ptr %12, align 8, !tbaa !5
  %853 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %852, i32 0, i32 6
  %854 = load i32, ptr %853, align 1, !tbaa !11
  %855 = and i32 %854, 33554432
  %856 = icmp ugt i32 %855, 0
  br i1 %856, label %857, label %906

857:                                              ; preds = %851
  %858 = load ptr, ptr %8, align 8, !tbaa !5
  %859 = load ptr, ptr %10, align 8, !tbaa !5
  %860 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %859, i32 0, i32 23
  %861 = load i32, ptr %860, align 4, !tbaa !46
  call void @libxsmm_x86_instruction_push_reg(ptr noundef %858, i32 noundef %861)
  %862 = load ptr, ptr %8, align 8, !tbaa !5
  %863 = load ptr, ptr %11, align 8, !tbaa !5
  %864 = load ptr, ptr %10, align 8, !tbaa !5
  %865 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %864, i32 0, i32 23
  %866 = load i32, ptr %865, align 4, !tbaa !46
  call void @libxsmm_generator_gemm_getval_stack_var(ptr noundef %862, ptr noundef %863, i32 noundef 31, i32 noundef %866)
  %867 = load ptr, ptr %8, align 8, !tbaa !5
  %868 = load ptr, ptr %11, align 8, !tbaa !5
  %869 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %868, i32 0, i32 20
  %870 = load i32, ptr %869, align 8, !tbaa !42
  %871 = load ptr, ptr %10, align 8, !tbaa !5
  %872 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %871, i32 0, i32 23
  %873 = load i32, ptr %872, align 4, !tbaa !46
  %874 = load ptr, ptr %10, align 8, !tbaa !5
  %875 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %874, i32 0, i32 14
  %876 = load i32, ptr %875, align 4, !tbaa !41
  %877 = load ptr, ptr %10, align 8, !tbaa !5
  %878 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %877, i32 0, i32 22
  %879 = load i32, ptr %878, align 4, !tbaa !34
  call void @libxsmm_x86_instruction_alu_mem(ptr noundef %867, i32 noundef %870, i32 noundef %873, i32 noundef %876, i32 noundef 8, i32 noundef 0, i32 noundef %879, i32 noundef 0)
  %880 = load ptr, ptr %8, align 8, !tbaa !5
  %881 = load ptr, ptr %11, align 8, !tbaa !5
  %882 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %881, i32 0, i32 16
  %883 = load i32, ptr %882, align 8, !tbaa !15
  %884 = load ptr, ptr %10, align 8, !tbaa !5
  %885 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %884, i32 0, i32 22
  %886 = load i32, ptr %885, align 4, !tbaa !34
  %887 = load i32, ptr %13, align 4, !tbaa !9
  %888 = zext i32 %887 to i64
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef %880, i32 noundef %883, i32 noundef %886, i64 noundef %888)
  %889 = load ptr, ptr %8, align 8, !tbaa !5
  %890 = load ptr, ptr %11, align 8, !tbaa !5
  %891 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %890, i32 0, i32 20
  %892 = load i32, ptr %891, align 8, !tbaa !42
  %893 = load ptr, ptr %10, align 8, !tbaa !5
  %894 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %893, i32 0, i32 23
  %895 = load i32, ptr %894, align 4, !tbaa !46
  %896 = load ptr, ptr %10, align 8, !tbaa !5
  %897 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %896, i32 0, i32 14
  %898 = load i32, ptr %897, align 4, !tbaa !41
  %899 = load ptr, ptr %10, align 8, !tbaa !5
  %900 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %899, i32 0, i32 22
  %901 = load i32, ptr %900, align 4, !tbaa !34
  call void @libxsmm_x86_instruction_alu_mem(ptr noundef %889, i32 noundef %892, i32 noundef %895, i32 noundef %898, i32 noundef 8, i32 noundef 0, i32 noundef %901, i32 noundef 1)
  %902 = load ptr, ptr %8, align 8, !tbaa !5
  %903 = load ptr, ptr %10, align 8, !tbaa !5
  %904 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %903, i32 0, i32 23
  %905 = load i32, ptr %904, align 4, !tbaa !46
  call void @libxsmm_x86_instruction_pop_reg(ptr noundef %902, i32 noundef %905)
  br label %906

906:                                              ; preds = %857, %851, %848
  %907 = load ptr, ptr %8, align 8, !tbaa !5
  %908 = load ptr, ptr %9, align 8, !tbaa !5
  %909 = load ptr, ptr %10, align 8, !tbaa !5
  %910 = load ptr, ptr %11, align 8, !tbaa !5
  %911 = load ptr, ptr %12, align 8, !tbaa !5
  call void @libxsmm_generator_gemm_footer_reduceloop(ptr noundef %907, ptr noundef %908, ptr noundef %909, ptr noundef %910, ptr noundef %911)
  %912 = load ptr, ptr %8, align 8, !tbaa !5
  %913 = load ptr, ptr %10, align 8, !tbaa !5
  %914 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %913, i32 0, i32 14
  %915 = load i32, ptr %914, align 4, !tbaa !41
  call void @libxsmm_x86_instruction_pop_reg(ptr noundef %912, i32 noundef %915)
  %916 = load ptr, ptr %8, align 8, !tbaa !5
  %917 = load ptr, ptr %10, align 8, !tbaa !5
  %918 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %917, i32 0, i32 22
  %919 = load i32, ptr %918, align 4, !tbaa !34
  call void @libxsmm_x86_instruction_pop_reg(ptr noundef %916, i32 noundef %919)
  br label %1037

920:                                              ; preds = %738
  %921 = load i32, ptr %18, align 4, !tbaa !9
  %922 = icmp ugt i32 %921, 0
  br i1 %922, label %929, label %923

923:                                              ; preds = %920
  %924 = load i32, ptr %20, align 4, !tbaa !9
  %925 = icmp ugt i32 %924, 0
  br i1 %925, label %929, label %926

926:                                              ; preds = %923
  %927 = load i32, ptr %19, align 4, !tbaa !9
  %928 = icmp ugt i32 %927, 0
  br i1 %928, label %929, label %957

929:                                              ; preds = %926, %923, %920
  %930 = load ptr, ptr %8, align 8, !tbaa !5
  %931 = load ptr, ptr %10, align 8, !tbaa !5
  %932 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %931, i32 0, i32 22
  %933 = load i32, ptr %932, align 4, !tbaa !34
  call void @libxsmm_x86_instruction_push_reg(ptr noundef %930, i32 noundef %933)
  %934 = load ptr, ptr %8, align 8, !tbaa !5
  %935 = load ptr, ptr %11, align 8, !tbaa !5
  %936 = load ptr, ptr %10, align 8, !tbaa !5
  %937 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %936, i32 0, i32 22
  %938 = load i32, ptr %937, align 4, !tbaa !34
  call void @libxsmm_generator_gemm_getval_stack_var(ptr noundef %934, ptr noundef %935, i32 noundef 33, i32 noundef %938)
  %939 = load ptr, ptr %8, align 8, !tbaa !5
  %940 = load ptr, ptr %11, 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 !15
  %943 = load ptr, ptr %10, align 8, !tbaa !5
  %944 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %943, i32 0, i32 22
  %945 = load i32, ptr %944, align 4, !tbaa !34
  %946 = load i32, ptr %13, align 4, !tbaa !9
  %947 = zext i32 %946 to i64
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef %939, i32 noundef %942, i32 noundef %945, i64 noundef %947)
  %948 = load ptr, ptr %8, align 8, !tbaa !5
  %949 = load ptr, ptr %11, align 8, !tbaa !5
  %950 = load ptr, ptr %10, align 8, !tbaa !5
  %951 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %950, i32 0, i32 22
  %952 = load i32, ptr %951, align 4, !tbaa !34
  call void @libxsmm_generator_gemm_setval_stack_var(ptr noundef %948, ptr noundef %949, i32 noundef 33, i32 noundef %952)
  %953 = load ptr, ptr %8, align 8, !tbaa !5
  %954 = load ptr, ptr %10, align 8, !tbaa !5
  %955 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %954, i32 0, i32 22
  %956 = load i32, ptr %955, align 4, !tbaa !34
  call void @libxsmm_x86_instruction_pop_reg(ptr noundef %953, i32 noundef %956)
  br label %957

957:                                              ; preds = %929, %926
  %958 = load i32, ptr %17, align 4, !tbaa !9
  %959 = icmp ugt i32 %958, 0
  br i1 %959, label %960, label %994

960:                                              ; preds = %957
  %961 = load ptr, ptr %12, align 8, !tbaa !5
  %962 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %961, i32 0, i32 6
  %963 = load i32, ptr %962, align 1, !tbaa !11
  %964 = and i32 %963, 33554432
  %965 = icmp ugt i32 %964, 0
  br i1 %965, label %966, label %994

966:                                              ; preds = %960
  %967 = load ptr, ptr %8, align 8, !tbaa !5
  %968 = load ptr, ptr %10, align 8, !tbaa !5
  %969 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %968, i32 0, i32 22
  %970 = load i32, ptr %969, align 4, !tbaa !34
  call void @libxsmm_x86_instruction_push_reg(ptr noundef %967, i32 noundef %970)
  %971 = load ptr, ptr %8, align 8, !tbaa !5
  %972 = load ptr, ptr %11, align 8, !tbaa !5
  %973 = load ptr, ptr %10, align 8, !tbaa !5
  %974 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %973, i32 0, i32 22
  %975 = load i32, ptr %974, align 4, !tbaa !34
  call void @libxsmm_generator_gemm_getval_stack_var(ptr noundef %971, ptr noundef %972, i32 noundef 31, i32 noundef %975)
  %976 = load ptr, ptr %8, align 8, !tbaa !5
  %977 = load ptr, ptr %11, align 8, !tbaa !5
  %978 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %977, i32 0, i32 16
  %979 = load i32, ptr %978, align 8, !tbaa !15
  %980 = load ptr, ptr %10, align 8, !tbaa !5
  %981 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %980, i32 0, i32 22
  %982 = load i32, ptr %981, align 4, !tbaa !34
  %983 = load i32, ptr %13, align 4, !tbaa !9
  %984 = zext i32 %983 to i64
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef %976, i32 noundef %979, i32 noundef %982, i64 noundef %984)
  %985 = load ptr, ptr %8, align 8, !tbaa !5
  %986 = load ptr, ptr %11, align 8, !tbaa !5
  %987 = load ptr, ptr %10, align 8, !tbaa !5
  %988 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %987, i32 0, i32 22
  %989 = load i32, ptr %988, align 4, !tbaa !34
  call void @libxsmm_generator_gemm_setval_stack_var(ptr noundef %985, ptr noundef %986, i32 noundef 31, i32 noundef %989)
  %990 = load ptr, ptr %8, align 8, !tbaa !5
  %991 = load ptr, ptr %10, align 8, !tbaa !5
  %992 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %991, i32 0, i32 22
  %993 = load i32, ptr %992, align 4, !tbaa !34
  call void @libxsmm_x86_instruction_pop_reg(ptr noundef %990, i32 noundef %993)
  br label %994

994:                                              ; preds = %966, %960, %957
  %995 = load ptr, ptr %12, align 8, !tbaa !5
  %996 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %995, i32 0, i32 6
  %997 = load i32, ptr %996, align 1, !tbaa !11
  %998 = and i32 %997, 8388608
  %999 = icmp ne i32 %998, 0
  br i1 %999, label %1000, label %1027

1000:                                             ; preds = %994
  %1001 = load ptr, ptr %8, align 8, !tbaa !5
  %1002 = load ptr, ptr %11, align 8, !tbaa !5
  %1003 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1002, i32 0, i32 17
  %1004 = load i32, ptr %1003, align 4, !tbaa !44
  %1005 = load ptr, ptr %10, align 8, !tbaa !5
  %1006 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %1005, i32 0, i32 29
  %1007 = load i32, ptr %1006, align 4, !tbaa !47
  %1008 = load ptr, ptr %12, align 8, !tbaa !5
  %1009 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %1008, i32 0, i32 2
  %1010 = load i32, ptr %1009, align 1, !tbaa !37
  %1011 = udiv i32 %1010, 8
  %1012 = load i32, ptr %21, align 4, !tbaa !9
  %1013 = udiv i32 %1011, %1012
  %1014 = zext i32 %1013 to i64
  %1015 = load ptr, ptr %12, align 8, !tbaa !5
  %1016 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %1015, i32 0, i32 3
  %1017 = load i32, ptr %1016, align 1, !tbaa !38
  %1018 = zext i32 %1017 to i64
  %1019 = mul nsw i64 %1014, %1018
  %1020 = load i32, ptr %13, align 4, !tbaa !9
  %1021 = udiv i32 %1020, 8
  %1022 = zext i32 %1021 to i64
  %1023 = load i32, ptr %15, align 4, !tbaa !9
  %1024 = zext i32 %1023 to i64
  %1025 = mul nsw i64 %1022, %1024
  %1026 = sub nsw i64 %1019, %1025
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef %1001, i32 noundef %1004, i32 noundef %1007, i64 noundef %1026)
  br label %1036

1027:                                             ; preds = %994
  %1028 = load ptr, ptr %8, align 8, !tbaa !5
  %1029 = load ptr, ptr %11, align 8, !tbaa !5
  %1030 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1029, i32 0, i32 17
  %1031 = load i32, ptr %1030, align 4, !tbaa !44
  %1032 = load ptr, ptr %10, align 8, !tbaa !5
  %1033 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %1032, i32 0, i32 1
  %1034 = load i32, ptr %1033, align 4, !tbaa !45
  %1035 = load i64, ptr %22, align 8, !tbaa !39
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef %1028, i32 noundef %1031, i32 noundef %1034, i64 noundef %1035)
  br label %1036

1036:                                             ; preds = %1027, %1000
  br label %1037

1037:                                             ; preds = %1036, %906
  %1038 = load ptr, ptr %8, align 8, !tbaa !5
  %1039 = load ptr, ptr %11, align 8, !tbaa !5
  %1040 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1039, i32 0, i32 18
  %1041 = load i32, ptr %1040, align 8, !tbaa !48
  %1042 = load ptr, ptr %10, align 8, !tbaa !5
  %1043 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %1042, i32 0, i32 10
  %1044 = load i32, ptr %1043, align 4, !tbaa !49
  %1045 = load i32, ptr %14, align 4, !tbaa !9
  %1046 = zext i32 %1045 to i64
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef %1038, i32 noundef %1041, i32 noundef %1044, i64 noundef %1046)
  %1047 = load ptr, ptr %8, align 8, !tbaa !5
  %1048 = load ptr, ptr %11, align 8, !tbaa !5
  %1049 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1048, i32 0, i32 19
  %1050 = load i32, ptr %1049, align 4, !tbaa !50
  %1051 = load ptr, ptr %9, align 8, !tbaa !5
  call void @libxsmm_x86_instruction_jump_back_to_label(ptr noundef %1047, i32 noundef %1050, ptr noundef %1051)
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #3
  ret void
}

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

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

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


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

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

declare i32 @LIBXSMM_GEMM_GETENUM_A_PREC(ptr noundef) local_unnamed_addr #1

declare i32 @LIBXSMM_GEMM_GETENUM_B_PREC(ptr noundef) local_unnamed_addr #1

declare i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef) local_unnamed_addr #1

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

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

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

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

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

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

declare i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef) local_unnamed_addr #1

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

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

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

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

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

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

declare i32 @libxsmm_cpuid_dot_pack_factor(i32 noundef) local_unnamed_addr #1

; Function Attrs: nounwind uwtable
define dso_local void @libxsmm_generator_gemm_footer_mloop(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %4, i32 noundef %5, i32 noundef %6) local_unnamed_addr #0 {
  %8 = getelementptr inbounds i8, ptr %4, i64 24
  %9 = load i32, ptr %8, align 1, !tbaa !5
  %10 = and i32 %9, 2097152
  %.not = icmp eq i32 %10, 0
  br i1 %.not, label %24, label %11

11:                                               ; preds = %7
  %12 = getelementptr inbounds i8, ptr %4, i64 29
  %13 = tail call i32 @LIBXSMM_GEMM_GETENUM_A_PREC(ptr noundef nonnull %12) #2
  %14 = icmp eq i32 %13, 12
  br i1 %14, label %15, label %24

15:                                               ; preds = %11
  %16 = tail call i32 @LIBXSMM_GEMM_GETENUM_B_PREC(ptr noundef nonnull %12) #2
  %17 = icmp eq i32 %16, 3
  br i1 %17, label %18, label %24

18:                                               ; preds = %15
  %19 = tail call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef nonnull %12) #2
  %20 = icmp eq i32 %19, 3
  br i1 %20, label %24, label %21

21:                                               ; preds = %18
  %22 = tail call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef nonnull %12) #2
  %23 = icmp eq i32 %22, 1
  br label %24

24:                                               ; preds = %11, %15, %21, %18, %7
  %25 = phi i1 [ false, %7 ], [ false, %15 ], [ false, %11 ], [ true, %18 ], [ %23, %21 ]
  %26 = tail call i32 @libxsmm_x86_is_Ai4_Bi8_gemm(ptr noundef nonnull %4)
  %27 = tail call i32 @libxsmm_x86_is_Amxfp4_Bfp32_gemm(ptr noundef nonnull %4)
  %28 = tail call i32 @libxsmm_x86_is_Amxfp4_Bi8_gemm(ptr noundef nonnull %4)
  %29 = tail call i32 @libxsmm_x86_is_Amxfp4_Bbf16_gemm(ptr noundef nonnull %4)
  %30 = icmp ne i32 %26, 0
  %or.cond = select i1 %25, i1 true, i1 %30
  %31 = icmp ne i32 %27, 0
  %or.cond3 = select i1 %or.cond, i1 true, i1 %31
  %32 = icmp ne i32 %29, 0
  %or.cond5 = select i1 %or.cond3, i1 true, i1 %32
  %33 = icmp ne i32 %28, 0
  %spec.select = select i1 %or.cond5, i1 true, i1 %33
  %34 = load i32, ptr %8, align 1, !tbaa !5
  %35 = and i32 %34, 2048
  %.not377 = icmp eq i32 %35, 0
  br i1 %.not377, label %40, label %36

36:                                               ; preds = %24
  %37 = getelementptr inbounds i8, ptr %4, i64 29
  %38 = tail call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef nonnull %37) #2
  %39 = tail call i32 @libxsmm_cpuid_dot_pack_factor(i32 noundef %38) #2
  br label %40

40:                                               ; preds = %36, %24
  %.0 = phi i32 [ %39, %36 ], [ 1, %24 ]
  %41 = getelementptr inbounds i8, ptr %3, i64 64
  %42 = load i32, ptr %41, align 8, !tbaa !12
  %43 = getelementptr inbounds i8, ptr %2, i64 20
  %44 = load i32, ptr %43, align 4, !tbaa !16
  %45 = zext i32 %5 to i64
  %46 = getelementptr inbounds i8, ptr %3, i64 20
  %47 = load i32, ptr %46, align 4, !tbaa !18
  %48 = zext i32 %47 to i64
  %49 = mul nuw nsw i64 %48, %45
  tail call void @libxsmm_x86_instruction_alu_imm(ptr noundef %0, i32 noundef %42, i32 noundef %44, i64 noundef %49) #2
  %50 = getelementptr inbounds i8, ptr %4, i64 29
  %51 = tail call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef nonnull %50) #2
  %52 = icmp eq i32 %51, 3
  br i1 %52, label %56, label %53

53:                                               ; preds = %40
  %54 = tail call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef nonnull %50) #2
  %55 = icmp eq i32 %54, 1
  br i1 %55, label %56, label %88

56:                                               ; preds = %53, %40
  %57 = tail call i32 @LIBXSMM_GEMM_GETENUM_B_PREC(ptr noundef nonnull %50) #2
  %58 = icmp eq i32 %57, 3
  br i1 %58, label %59, label %88

59:                                               ; preds = %56
  %60 = tail call i32 @LIBXSMM_GEMM_GETENUM_A_PREC(ptr noundef nonnull %50) #2
  %61 = icmp eq i32 %60, 12
  br i1 %61, label %62, label %88

62:                                               ; preds = %59
  %63 = load i32, ptr %8, align 1, !tbaa !5
  %64 = and i32 %63, 1572864
  %or.cond389 = icmp eq i32 %64, 0
  br i1 %or.cond389, label %88, label %65

65:                                               ; preds = %62
  %66 = and i32 %63, 524288
  %.not378 = icmp eq i32 %66, 0
  br i1 %.not378, label %77, label %67

67:                                               ; preds = %65
  %68 = getelementptr inbounds i8, ptr %2, i64 80
  %69 = load i32, ptr %68, align 4, !tbaa !19
  tail call void @libxsmm_generator_gemm_getval_stack_var(ptr noundef %0, ptr noundef nonnull %3, i32 noundef 5, i32 noundef %69)
  %70 = load i32, ptr %41, align 8, !tbaa !12
  %71 = load i32, ptr %68, align 4, !tbaa !19
  %72 = getelementptr inbounds i8, ptr %3, i64 16
  %73 = load i32, ptr %72, align 8, !tbaa !20
  %74 = zext i32 %73 to i64
  %75 = mul nuw nsw i64 %74, %45
  tail call void @libxsmm_x86_instruction_alu_imm(ptr noundef %0, i32 noundef %70, i32 noundef %71, i64 noundef %75) #2
  %76 = load i32, ptr %68, align 4, !tbaa !19
  tail call void @libxsmm_generator_gemm_setval_stack_var(ptr noundef %0, ptr noundef nonnull %3, i32 noundef 5, i32 noundef %76)
  %.pre = load i32, ptr %8, align 1, !tbaa !5
  br label %77

77:                                               ; preds = %67, %65
  %78 = phi i32 [ %.pre, %67 ], [ %63, %65 ]
  %79 = and i32 %78, 1048576
  %.not381 = icmp eq i32 %79, 0
  br i1 %.not381, label %88, label %80

80:                                               ; preds = %77
  %81 = load i32, ptr %41, align 8, !tbaa !12
  %82 = getelementptr inbounds i8, ptr %2, i64 84
  %83 = load i32, ptr %82, align 4, !tbaa !21
  %84 = getelementptr inbounds i8, ptr %3, i64 16
  %85 = load i32, ptr %84, align 8, !tbaa !20
  %86 = zext i32 %85 to i64
  %87 = mul nuw nsw i64 %86, %45
  tail call void @libxsmm_x86_instruction_alu_imm(ptr noundef %0, i32 noundef %81, i32 noundef %83, i64 noundef %87) #2
  br label %88

88:                                               ; preds = %62, %77, %80, %59, %56, %53
  br i1 %30, label %89, label %100

89:                                               ; preds = %88
  %90 = load i32, ptr %8, align 1, !tbaa !5
  %91 = and i32 %90, 1048576
  %.not382 = icmp eq i32 %91, 0
  br i1 %.not382, label %100, label %92

92:                                               ; preds = %89
  %93 = load i32, ptr %41, align 8, !tbaa !12
  %94 = getelementptr inbounds i8, ptr %2, i64 84
  %95 = load i32, ptr %94, align 4, !tbaa !21
  %96 = getelementptr inbounds i8, ptr %3, i64 12
  %97 = load i32, ptr %96, align 4, !tbaa !22
  %98 = zext i32 %97 to i64
  %99 = mul nuw nsw i64 %98, %45
  tail call void @libxsmm_x86_instruction_alu_imm(ptr noundef %0, i32 noundef %93, i32 noundef %95, i64 noundef %99) #2
  br label %100

100:                                              ; preds = %92, %89, %88
  %101 = tail call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef nonnull %50) #2
  %102 = icmp eq i32 %101, 2
  br i1 %102, label %106, label %103

103:                                              ; preds = %100
  %104 = tail call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef nonnull %50) #2
  %105 = icmp eq i32 %104, 1
  br i1 %105, label %106, label %122

106:                                              ; preds = %103, %100
  %107 = tail call i32 @LIBXSMM_GEMM_GETENUM_B_PREC(ptr noundef nonnull %50) #2
  %108 = icmp eq i32 %107, 2
  br i1 %108, label %109, label %122

109:                                              ; preds = %106
  %110 = tail call i32 @LIBXSMM_GEMM_GETENUM_A_PREC(ptr noundef nonnull %50) #2
  %111 = icmp eq i32 %110, 12
  br i1 %111, label %112, label %122

112:                                              ; preds = %109
  %113 = load i32, ptr %8, align 1, !tbaa !5
  %114 = and i32 %113, 524288
  %.not383 = icmp eq i32 %114, 0
  br i1 %.not383, label %122, label %115

115:                                              ; preds = %112
  %116 = getelementptr inbounds i8, ptr %2, i64 80
  %117 = load i32, ptr %116, align 4, !tbaa !19
  tail call void @libxsmm_generator_gemm_getval_stack_var(ptr noundef %0, ptr noundef nonnull %3, i32 noundef 5, i32 noundef %117)
  %118 = load i32, ptr %41, align 8, !tbaa !12
  %119 = load i32, ptr %116, align 4, !tbaa !19
  %120 = shl nuw nsw i64 %45, 2
  tail call void @libxsmm_x86_instruction_alu_imm(ptr noundef %0, i32 noundef %118, i32 noundef %119, i64 noundef %120) #2
  %121 = load i32, ptr %116, align 4, !tbaa !19
  tail call void @libxsmm_generator_gemm_setval_stack_var(ptr noundef %0, ptr noundef nonnull %3, i32 noundef 5, i32 noundef %121)
  br label %122

122:                                              ; preds = %115, %112, %109, %106, %103
  %123 = getelementptr inbounds i8, ptr %3, i64 120
  %124 = load i32, ptr %123, align 8, !tbaa !23
  %125 = icmp eq i32 %124, 1
  br i1 %125, label %158, label %126

126:                                              ; preds = %122
  %127 = getelementptr inbounds i8, ptr %3, i64 152
  %128 = load i32, ptr %127, align 8, !tbaa !24
  %129 = icmp eq i32 %128, 1
  br i1 %129, label %158, label %130

130:                                              ; preds = %126
  %131 = getelementptr inbounds i8, ptr %3, i64 128
  %132 = load i32, ptr %131, align 8, !tbaa !25
  %133 = icmp eq i32 %132, 1
  br i1 %133, label %158, label %134

134:                                              ; preds = %130
  %135 = getelementptr inbounds i8, ptr %3, i64 100
  %136 = load i32, ptr %135, align 4, !tbaa !26
  %137 = icmp eq i32 %136, 1
  br i1 %137, label %158, label %138

138:                                              ; preds = %134
  %139 = getelementptr inbounds i8, ptr %3, i64 104
  %140 = load i32, ptr %139, align 8, !tbaa !27
  %141 = icmp eq i32 %140, 1
  br i1 %141, label %158, label %142

142:                                              ; preds = %138
  %143 = getelementptr inbounds i8, ptr %3, i64 108
  %144 = load i32, ptr %143, align 4, !tbaa !28
  %145 = icmp eq i32 %144, 1
  br i1 %145, label %158, label %146

146:                                              ; preds = %142
  %147 = getelementptr inbounds i8, ptr %3, i64 112
  %148 = load i32, ptr %147, align 8, !tbaa !29
  %149 = icmp eq i32 %148, 1
  br i1 %149, label %158, label %150

150:                                              ; preds = %146
  %151 = getelementptr inbounds i8, ptr %3, i64 116
  %152 = load i32, ptr %151, align 4, !tbaa !30
  %153 = icmp eq i32 %152, 1
  br i1 %153, label %158, label %154

154:                                              ; preds = %150
  %155 = getelementptr inbounds i8, ptr %3, i64 136
  %156 = load i32, ptr %155, align 8, !tbaa !31
  %157 = icmp eq i32 %156, 0
  br i1 %157, label %158, label %.thread

158:                                              ; preds = %122, %126, %130, %134, %138, %142, %146, %150, %154
  %159 = getelementptr inbounds i8, ptr %2, i64 88
  %160 = load i32, ptr %159, align 4, !tbaa !32
  tail call void @libxsmm_x86_instruction_push_reg(ptr noundef %0, i32 noundef %160) #2
  %.pre390 = load i32, ptr %123, align 8, !tbaa !23
  %161 = icmp eq i32 %.pre390, 1
  br i1 %161, label %162, label %.thread

162:                                              ; preds = %158
  %163 = getelementptr inbounds i8, ptr %3, i64 136
  %164 = load i32, ptr %163, align 8, !tbaa !31
  %165 = icmp eq i32 %164, 1
  br i1 %165, label %166, label %.thread

166:                                              ; preds = %162
  %167 = getelementptr inbounds i8, ptr %2, i64 88
  %168 = load i32, ptr %167, align 4, !tbaa !32
  tail call void @libxsmm_generator_gemm_getval_stack_var(ptr noundef %0, ptr noundef nonnull %3, i32 noundef 8, i32 noundef %168)
  %169 = getelementptr inbounds i8, ptr %0, i64 28
  %170 = load i32, ptr %169, align 4, !tbaa !33
  %171 = icmp ult i32 %170, 1005
  %172 = load i32, ptr %41, align 8, !tbaa !12
  %173 = load i32, ptr %167, align 4, !tbaa !32
  %. = select i1 %171, i32 3, i32 7
  %174 = add i32 %., %5
  %175 = lshr i32 %174, 3
  %176 = zext nneg i32 %175 to i64
  tail call void @libxsmm_x86_instruction_alu_imm(ptr noundef nonnull %0, i32 noundef %172, i32 noundef %173, i64 noundef %176) #2
  %177 = load i32, ptr %167, align 4, !tbaa !32
  tail call void @libxsmm_generator_gemm_setval_stack_var(ptr noundef nonnull %0, ptr noundef nonnull %3, i32 noundef 8, i32 noundef %177)
  br label %.thread

.thread:                                          ; preds = %154, %166, %162, %158
  %178 = getelementptr inbounds i8, ptr %3, i64 152
  %179 = load i32, ptr %178, align 8, !tbaa !24
  %180 = icmp eq i32 %179, 1
  br i1 %180, label %181, label %188

181:                                              ; preds = %.thread
  %182 = getelementptr inbounds i8, ptr %2, i64 88
  %183 = load i32, ptr %182, align 4, !tbaa !32
  tail call void @libxsmm_generator_gemm_getval_stack_var(ptr noundef %0, ptr noundef nonnull %3, i32 noundef 8, i32 noundef %183)
  %184 = load i32, ptr %41, align 8, !tbaa !12
  %185 = load i32, ptr %182, align 4, !tbaa !32
  %186 = shl nuw nsw i64 %45, 2
  tail call void @libxsmm_x86_instruction_alu_imm(ptr noundef %0, i32 noundef %184, i32 noundef %185, i64 noundef %186) #2
  %187 = load i32, ptr %182, align 4, !tbaa !32
  tail call void @libxsmm_generator_gemm_setval_stack_var(ptr noundef %0, ptr noundef nonnull %3, i32 noundef 8, i32 noundef %187)
  br label %188

188:                                              ; preds = %181, %.thread
  %189 = getelementptr inbounds i8, ptr %3, i64 128
  %190 = load i32, ptr %189, align 8, !tbaa !25
  %191 = icmp eq i32 %190, 1
  br i1 %191, label %192, label %204

192:                                              ; preds = %188
  %193 = getelementptr inbounds i8, ptr %2, i64 88
  %194 = load i32, ptr %193, align 4, !tbaa !32
  tail call void @libxsmm_generator_gemm_getval_stack_var(ptr noundef %0, ptr noundef nonnull %3, i32 noundef 19, i32 noundef %194)
  %195 = getelementptr inbounds i8, ptr %0, i64 28
  %196 = load i32, ptr %195, align 4, !tbaa !33
  %197 = icmp ult i32 %196, 1005
  %198 = load i32, ptr %41, align 8, !tbaa !12
  %199 = load i32, ptr %193, align 4, !tbaa !32
  %.400 = select i1 %197, i32 3, i32 7
  %200 = add i32 %.400, %5
  %201 = lshr i32 %200, 3
  %202 = zext nneg i32 %201 to i64
  tail call void @libxsmm_x86_instruction_alu_imm(ptr noundef nonnull %0, i32 noundef %198, i32 noundef %199, i64 noundef %202) #2
  %203 = load i32, ptr %193, align 4, !tbaa !32
  tail call void @libxsmm_generator_gemm_setval_stack_var(ptr noundef nonnull %0, ptr noundef nonnull %3, i32 noundef 19, i32 noundef %203)
  br label %204

204:                                              ; preds = %192, %188
  %205 = getelementptr inbounds i8, ptr %3, i64 136
  %206 = load i32, ptr %205, align 8, !tbaa !31
  %207 = icmp eq i32 %206, 0
  br i1 %207, label %208, label %215

208:                                              ; preds = %204
  %209 = getelementptr inbounds i8, ptr %2, i64 88
  %210 = load i32, ptr %209, align 4, !tbaa !32
  tail call void @libxsmm_generator_gemm_getval_stack_var(ptr noundef %0, ptr noundef nonnull %3, i32 noundef 8, i32 noundef %210)
  %211 = load i32, ptr %41, align 8, !tbaa !12
  %212 = load i32, ptr %209, align 4, !tbaa !32
  %213 = shl nuw nsw i64 %45, 1
  tail call void @libxsmm_x86_instruction_alu_imm(ptr noundef %0, i32 noundef %211, i32 noundef %212, i64 noundef %213) #2
  %214 = load i32, ptr %209, align 4, !tbaa !32
  tail call void @libxsmm_generator_gemm_setval_stack_var(ptr noundef %0, ptr noundef nonnull %3, i32 noundef 8, i32 noundef %214)
  br label %215

215:                                              ; preds = %208, %204
  %216 = getelementptr inbounds i8, ptr %3, i64 100
  %217 = load i32, ptr %216, align 4, !tbaa !26
  %218 = icmp eq i32 %217, 1
  br i1 %218, label %223, label %219

219:                                              ; preds = %215
  %220 = getelementptr inbounds i8, ptr %3, i64 104
  %221 = load i32, ptr %220, align 8, !tbaa !27
  %222 = icmp eq i32 %221, 1
  br i1 %222, label %223, label %230

223:                                              ; preds = %219, %215
  %224 = getelementptr inbounds i8, ptr %2, i64 88
  %225 = load i32, ptr %224, align 4, !tbaa !32
  tail call void @libxsmm_generator_gemm_getval_stack_var(ptr noundef %0, ptr noundef nonnull %3, i32 noundef 7, i32 noundef %225)
  %226 = load i32, ptr %41, align 8, !tbaa !12
  %227 = load i32, ptr %224, align 4, !tbaa !32
  %228 = shl nuw nsw i64 %45, 1
  tail call void @libxsmm_x86_instruction_alu_imm(ptr noundef %0, i32 noundef %226, i32 noundef %227, i64 noundef %228) #2
  %229 = load i32, ptr %224, align 4, !tbaa !32
  tail call void @libxsmm_generator_gemm_setval_stack_var(ptr noundef %0, ptr noundef nonnull %3, i32 noundef 7, i32 noundef %229)
  br label %230

230:                                              ; preds = %223, %219
  %231 = getelementptr inbounds i8, ptr %3, i64 108
  %232 = load i32, ptr %231, align 4, !tbaa !28
  %233 = icmp eq i32 %232, 1
  br i1 %233, label %234, label %240

234:                                              ; preds = %230
  %235 = getelementptr inbounds i8, ptr %2, i64 88
  %236 = load i32, ptr %235, align 4, !tbaa !32
  tail call void @libxsmm_generator_gemm_getval_stack_var(ptr noundef %0, ptr noundef nonnull %3, i32 noundef 7, i32 noundef %236)
  %237 = load i32, ptr %41, align 8, !tbaa !12
  %238 = load i32, ptr %235, align 4, !tbaa !32
  tail call void @libxsmm_x86_instruction_alu_imm(ptr noundef %0, i32 noundef %237, i32 noundef %238, i64 noundef %45) #2
  %239 = load i32, ptr %235, align 4, !tbaa !32
  tail call void @libxsmm_generator_gemm_setval_stack_var(ptr noundef %0, ptr noundef nonnull %3, i32 noundef 7, i32 noundef %239)
  br label %240

240:                                              ; preds = %234, %230
  %241 = getelementptr inbounds i8, ptr %3, i64 112
  %242 = load i32, ptr %241, align 8, !tbaa !29
  %243 = icmp eq i32 %242, 1
  br i1 %243, label %244, label %250

244:                                              ; preds = %240
  %245 = getelementptr inbounds i8, ptr %2, i64 88
  %246 = load i32, ptr %245, align 4, !tbaa !32
  tail call void @libxsmm_generator_gemm_getval_stack_var(ptr noundef %0, ptr noundef nonnull %3, i32 noundef 7, i32 noundef %246)
  %247 = load i32, ptr %41, align 8, !tbaa !12
  %248 = load i32, ptr %245, align 4, !tbaa !32
  tail call void @libxsmm_x86_instruction_alu_imm(ptr noundef %0, i32 noundef %247, i32 noundef %248, i64 noundef %45) #2
  %249 = load i32, ptr %245, align 4, !tbaa !32
  tail call void @libxsmm_generator_gemm_setval_stack_var(ptr noundef %0, ptr noundef nonnull %3, i32 noundef 7, i32 noundef %249)
  br label %250

250:                                              ; preds = %244, %240
  %251 = getelementptr inbounds i8, ptr %3, i64 116
  %252 = load i32, ptr %251, align 4, !tbaa !30
  %253 = icmp eq i32 %252, 1
  br i1 %253, label %254, label %261

254:                                              ; preds = %250
  %255 = getelementptr inbounds i8, ptr %2, i64 88
  %256 = load i32, ptr %255, align 4, !tbaa !32
  tail call void @libxsmm_generator_gemm_getval_stack_var(ptr noundef %0, ptr noundef nonnull %3, i32 noundef 7, i32 noundef %256)
  %257 = load i32, ptr %41, align 8, !tbaa !12
  %258 = load i32, ptr %255, align 4, !tbaa !32
  %259 = shl nuw nsw i64 %45, 2
  tail call void @libxsmm_x86_instruction_alu_imm(ptr noundef %0, i32 noundef %257, i32 noundef %258, i64 noundef %259) #2
  %260 = load i32, ptr %255, align 4, !tbaa !32
  tail call void @libxsmm_generator_gemm_setval_stack_var(ptr noundef %0, ptr noundef nonnull %3, i32 noundef 7, i32 noundef %260)
  br label %261

261:                                              ; preds = %254, %250
  %262 = load i32, ptr %123, align 8, !tbaa !23
  %263 = icmp eq i32 %262, 1
  br i1 %263, label %289, label %264

264:                                              ; preds = %261
  %265 = load i32, ptr %178, align 8, !tbaa !24
  %266 = icmp eq i32 %265, 1
  br i1 %266, label %289, label %267

267:                                              ; preds = %264
  %268 = load i32, ptr %189, align 8, !tbaa !25
  %269 = icmp eq i32 %268, 1
  br i1 %269, label %289, label %270

270:                                              ; preds = %267
  %271 = load i32, ptr %216, align 4, !tbaa !26
  %272 = icmp eq i32 %271, 1
  br i1 %272, label %289, label %273

273:                                              ; preds = %270
  %274 = getelementptr inbounds i8, ptr %3, i64 104
  %275 = load i32, ptr %274, align 8, !tbaa !27
  %276 = icmp eq i32 %275, 1
  br i1 %276, label %289, label %277

277:                                              ; preds = %273
  %278 = load i32, ptr %231, align 4, !tbaa !28
  %279 = icmp eq i32 %278, 1
  br i1 %279, label %289, label %280

280:                                              ; preds = %277
  %281 = load i32, ptr %241, align 8, !tbaa !29
  %282 = icmp eq i32 %281, 1
  br i1 %282, label %289, label %283

283:                                              ; preds = %280
  %284 = load i32, ptr %251, align 4, !tbaa !30
  %285 = icmp eq i32 %284, 1
  br i1 %285, label %289, label %286

286:                                              ; preds = %283
  %287 = load i32, ptr %205, align 8, !tbaa !31
  %288 = icmp eq i32 %287, 0
  br i1 %288, label %289, label %292

289:                                              ; preds = %286, %283, %280, %277, %273, %270, %267, %264, %261
  %290 = getelementptr inbounds i8, ptr %2, i64 88
  %291 = load i32, ptr %290, align 4, !tbaa !32
  tail call void @libxsmm_x86_instruction_pop_reg(ptr noundef %0, i32 noundef %291) #2
  br label %292

292:                                              ; preds = %289, %286
  %293 = getelementptr inbounds i8, ptr %4, i64 8
  %294 = load i32, ptr %293, align 1, !tbaa !35
  %295 = zext i1 %spec.select to i32
  %296 = lshr i32 %294, %295
  %297 = zext i32 %296 to i64
  %298 = getelementptr inbounds i8, ptr %3, i64 12
  %299 = load i32, ptr %298, align 4, !tbaa !22
  %300 = zext i32 %299 to i64
  %301 = mul nuw nsw i64 %297, %300
  %302 = getelementptr inbounds i8, ptr %4, i64 12
  %303 = load i32, ptr %302, align 1, !tbaa !36
  %304 = zext i32 %303 to i64
  %305 = mul nuw nsw i64 %301, %304
  %306 = mul i32 %299, %.0
  %307 = zext i32 %306 to i64
  %308 = mul nuw nsw i64 %307, %45
  %309 = sub nsw i64 %305, %308
  %310 = getelementptr inbounds i8, ptr %4, i64 28
  %311 = load i8, ptr %310, align 1, !tbaa !37
  %312 = icmp eq i8 %311, 1
  br i1 %312, label %313, label %341

313:                                              ; preds = %292
  %314 = load i32, ptr %8, align 1, !tbaa !5
  %315 = and i32 %314, 65536
  %.not384 = icmp eq i32 %315, 0
  br i1 %.not384, label %336, label %316

316:                                              ; preds = %313
  %317 = getelementptr inbounds i8, ptr %2, i64 88
  %318 = load i32, ptr %317, align 4, !tbaa !32
  tail call void @libxsmm_x86_instruction_push_reg(ptr noundef %0, i32 noundef %318) #2
  %319 = getelementptr inbounds i8, ptr %2, i64 56
  %320 = load i32, ptr %319, align 4, !tbaa !38
  tail call void @libxsmm_x86_instruction_push_reg(ptr noundef %0, i32 noundef %320) #2
  tail call void @libxsmm_generator_gemm_header_reduceloop(ptr noundef %0, ptr noundef %1, ptr noundef nonnull %2, ptr noundef nonnull %3)
  %321 = getelementptr inbounds i8, ptr %3, i64 80
  %322 = load i32, ptr %321, align 8, !tbaa !39
  %323 = getelementptr inbounds i8, ptr %2, i64 24
  %324 = load i32, ptr %323, align 4, !tbaa !40
  %325 = load i32, ptr %319, align 4, !tbaa !38
  %326 = load i32, ptr %317, align 4, !tbaa !32
  tail call void @libxsmm_x86_instruction_alu_mem(ptr noundef %0, i32 noundef %322, i32 noundef %324, i32 noundef %325, i32 noundef 8, i32 noundef 0, i32 noundef %326, i32 noundef 0) #2
  %327 = getelementptr inbounds i8, ptr %3, i64 68
  %328 = load i32, ptr %327, align 4, !tbaa !41
  %329 = load i32, ptr %317, align 4, !tbaa !32
  tail call void @libxsmm_x86_instruction_alu_imm(ptr noundef %0, i32 noundef %328, i32 noundef %329, i64 noundef %309) #2
  %330 = load i32, ptr %321, align 8, !tbaa !39
  %331 = load i32, ptr %323, align 4, !tbaa !40
  %332 = load i32, ptr %319, align 4, !tbaa !38
  %333 = load i32, ptr %317, align 4, !tbaa !32
  tail call void @libxsmm_x86_instruction_alu_mem(ptr noundef %0, i32 noundef %330, i32 noundef %331, i32 noundef %332, i32 noundef 8, i32 noundef 0, i32 noundef %333, i32 noundef 1) #2
  tail call void @libxsmm_generator_gemm_footer_reduceloop(ptr noundef %0, ptr noundef %1, ptr noundef nonnull %2, ptr noundef nonnull %3, ptr noundef nonnull %4)
  %334 = load i32, ptr %319, align 4, !tbaa !38
  tail call void @libxsmm_x86_instruction_pop_reg(ptr noundef %0, i32 noundef %334) #2
  %335 = load i32, ptr %317, align 4, !tbaa !32
  tail call void @libxsmm_x86_instruction_pop_reg(ptr noundef %0, i32 noundef %335) #2
  br label %341

336:                                              ; preds = %313
  %337 = getelementptr inbounds i8, ptr %3, i64 68
  %338 = load i32, ptr %337, align 4, !tbaa !41
  %339 = getelementptr inbounds i8, ptr %2, i64 24
  %340 = load i32, ptr %339, align 4, !tbaa !40
  tail call void @libxsmm_x86_instruction_alu_imm(ptr noundef %0, i32 noundef %338, i32 noundef %340, i64 noundef %309) #2
  br label %341

341:                                              ; preds = %316, %336, %292
  %342 = load i32, ptr %8, align 1, !tbaa !5
  %343 = and i32 %342, 65536
  %.not385 = icmp eq i32 %343, 0
  br i1 %.not385, label %399, label %344

344:                                              ; preds = %341
  %345 = getelementptr inbounds i8, ptr %2, i64 88
  %346 = load i32, ptr %345, align 4, !tbaa !32
  tail call void @libxsmm_x86_instruction_push_reg(ptr noundef %0, i32 noundef %346) #2
  %347 = getelementptr inbounds i8, ptr %2, i64 56
  %348 = load i32, ptr %347, align 4, !tbaa !38
  tail call void @libxsmm_x86_instruction_push_reg(ptr noundef %0, i32 noundef %348) #2
  tail call void @libxsmm_generator_gemm_header_reduceloop(ptr noundef %0, ptr noundef %1, ptr noundef nonnull %2, ptr noundef nonnull %3)
  %349 = getelementptr inbounds i8, ptr %3, i64 80
  %350 = load i32, ptr %349, align 8, !tbaa !39
  %351 = getelementptr inbounds i8, ptr %2, i64 4
  %352 = load i32, ptr %351, align 4, !tbaa !42
  %353 = load i32, ptr %347, align 4, !tbaa !38
  %354 = load i32, ptr %345, align 4, !tbaa !32
  tail call void @libxsmm_x86_instruction_alu_mem(ptr noundef %0, i32 noundef %350, i32 noundef %352, i32 noundef %353, i32 noundef 8, i32 noundef 0, i32 noundef %354, i32 noundef 0) #2
  %355 = getelementptr inbounds i8, ptr %3, i64 68
  %356 = load i32, ptr %355, align 4, !tbaa !41
  %357 = load i32, ptr %345, align 4, !tbaa !32
  tail call void @libxsmm_x86_instruction_alu_imm(ptr noundef %0, i32 noundef %356, i32 noundef %357, i64 noundef %309) #2
  %358 = load i32, ptr %349, align 8, !tbaa !39
  %359 = load i32, ptr %351, align 4, !tbaa !42
  %360 = load i32, ptr %347, align 4, !tbaa !38
  %361 = load i32, ptr %345, align 4, !tbaa !32
  tail call void @libxsmm_x86_instruction_alu_mem(ptr noundef %0, i32 noundef %358, i32 noundef %359, i32 noundef %360, i32 noundef 8, i32 noundef 0, i32 noundef %361, i32 noundef 1) #2
  %or.cond7 = select i1 %31, i1 true, i1 %32
  %or.cond9 = select i1 %or.cond7, i1 true, i1 %33
  br i1 %or.cond9, label %362, label %377

362:                                              ; preds = %344
  %363 = getelementptr inbounds i8, ptr %2, i64 92
  %364 = load i32, ptr %363, align 4, !tbaa !43
  tail call void @libxsmm_x86_instruction_push_reg(ptr noundef %0, i32 noundef %364) #2
  %365 = load i32, ptr %363, align 4, !tbaa !43
  tail call void @libxsmm_generator_gemm_getval_stack_var(ptr noundef %0, ptr noundef nonnull %3, i32 noundef 33, i32 noundef %365)
  %366 = load i32, ptr %349, align 8, !tbaa !39
  %367 = load i32, ptr %363, align 4, !tbaa !43
  %368 = load i32, ptr %347, align 4, !tbaa !38
  %369 = load i32, ptr %345, align 4, !tbaa !32
  tail call void @libxsmm_x86_instruction_alu_mem(ptr noundef %0, i32 noundef %366, i32 noundef %367, i32 noundef %368, i32 noundef 8, i32 noundef 0, i32 noundef %369, i32 noundef 0) #2
  %370 = load i32, ptr %41, align 8, !tbaa !12
  %371 = load i32, ptr %345, align 4, !tbaa !32
  tail call void @libxsmm_x86_instruction_alu_imm(ptr noundef %0, i32 noundef %370, i32 noundef %371, i64 noundef %45) #2
  %372 = load i32, ptr %349, align 8, !tbaa !39
  %373 = load i32, ptr %363, align 4, !tbaa !43
  %374 = load i32, ptr %347, align 4, !tbaa !38
  %375 = load i32, ptr %345, align 4, !tbaa !32
  tail call void @libxsmm_x86_instruction_alu_mem(ptr noundef %0, i32 noundef %372, i32 noundef %373, i32 noundef %374, i32 noundef 8, i32 noundef 0, i32 noundef %375, i32 noundef 1) #2
  %376 = load i32, ptr %363, align 4, !tbaa !43
  tail call void @libxsmm_x86_instruction_pop_reg(ptr noundef %0, i32 noundef %376) #2
  br label %377

377:                                              ; preds = %344, %362
  br i1 %30, label %378, label %396

378:                                              ; preds = %377
  %379 = load i32, ptr %8, align 1, !tbaa !5
  %380 = and i32 %379, 33554432
  %.not388 = icmp eq i32 %380, 0
  br i1 %.not388, label %396, label %381

381:                                              ; preds = %378
  %382 = getelementptr inbounds i8, ptr %2, i64 92
  %383 = load i32, ptr %382, align 4, !tbaa !43
  tail call void @libxsmm_x86_instruction_push_reg(ptr noundef %0, i32 noundef %383) #2
  %384 = load i32, ptr %382, align 4, !tbaa !43
  tail call void @libxsmm_generator_gemm_getval_stack_var(ptr noundef %0, ptr noundef nonnull %3, i32 noundef 31, i32 noundef %384)
  %385 = load i32, ptr %349, align 8, !tbaa !39
  %386 = load i32, ptr %382, align 4, !tbaa !43
  %387 = load i32, ptr %347, align 4, !tbaa !38
  %388 = load i32, ptr %345, align 4, !tbaa !32
  tail call void @libxsmm_x86_instruction_alu_mem(ptr noundef %0, i32 noundef %385, i32 noundef %386, i32 noundef %387, i32 noundef 8, i32 noundef 0, i32 noundef %388, i32 noundef 0) #2
  %389 = load i32, ptr %41, align 8, !tbaa !12
  %390 = load i32, ptr %345, align 4, !tbaa !32
  tail call void @libxsmm_x86_instruction_alu_imm(ptr noundef %0, i32 noundef %389, i32 noundef %390, i64 noundef %45) #2
  %391 = load i32, ptr %349, align 8, !tbaa !39
  %392 = load i32, ptr %382, align 4, !tbaa !43
  %393 = load i32, ptr %347, align 4, !tbaa !38
  %394 = load i32, ptr %345, align 4, !tbaa !32
  tail call void @libxsmm_x86_instruction_alu_mem(ptr noundef %0, i32 noundef %391, i32 noundef %392, i32 noundef %393, i32 noundef 8, i32 noundef 0, i32 noundef %394, i32 noundef 1) #2
  %395 = load i32, ptr %382, align 4, !tbaa !43
  tail call void @libxsmm_x86_instruction_pop_reg(ptr noundef %0, i32 noundef %395) #2
  br label %396

396:                                              ; preds = %381, %378, %377
  tail call void @libxsmm_generator_gemm_footer_reduceloop(ptr noundef %0, ptr noundef %1, ptr noundef nonnull %2, ptr noundef nonnull %3, ptr noundef nonnull %4)
  %397 = load i32, ptr %347, align 4, !tbaa !38
  tail call void @libxsmm_x86_instruction_pop_reg(ptr noundef %0, i32 noundef %397) #2
  %398 = load i32, ptr %345, align 4, !tbaa !32
  tail call void @libxsmm_x86_instruction_pop_reg(ptr noundef %0, i32 noundef %398) #2
  br label %441

399:                                              ; preds = %341
  %or.cond11 = select i1 %31, i1 true, i1 %32
  %or.cond13 = select i1 %or.cond11, i1 true, i1 %33
  br i1 %or.cond13, label %400, label %408

400:                                              ; preds = %399
  %401 = getelementptr inbounds i8, ptr %2, i64 88
  %402 = load i32, ptr %401, align 4, !tbaa !32
  tail call void @libxsmm_x86_instruction_push_reg(ptr noundef %0, i32 noundef %402) #2
  %403 = load i32, ptr %401, align 4, !tbaa !32
  tail call void @libxsmm_generator_gemm_getval_stack_var(ptr noundef %0, ptr noundef nonnull %3, i32 noundef 33, i32 noundef %403)
  %404 = load i32, ptr %41, align 8, !tbaa !12
  %405 = load i32, ptr %401, align 4, !tbaa !32
  tail call void @libxsmm_x86_instruction_alu_imm(ptr noundef %0, i32 noundef %404, i32 noundef %405, i64 noundef %45) #2
  %406 = load i32, ptr %401, align 4, !tbaa !32
  tail call void @libxsmm_generator_gemm_setval_stack_var(ptr noundef %0, ptr noundef nonnull %3, i32 noundef 33, i32 noundef %406)
  %407 = load i32, ptr %401, align 4, !tbaa !32
  tail call void @libxsmm_x86_instruction_pop_reg(ptr noundef %0, i32 noundef %407) #2
  %.pre392.pre = load i32, ptr %8, align 1, !tbaa !5
  br label %408

408:                                              ; preds = %399, %400
  %.pre392 = phi i32 [ %342, %399 ], [ %.pre392.pre, %400 ]
  %409 = and i32 %.pre392, 33554432
  %.not386 = icmp ne i32 %409, 0
  %or.cond399.not = select i1 %30, i1 %.not386, i1 false
  br i1 %or.cond399.not, label %410, label %418

410:                                              ; preds = %408
  %411 = getelementptr inbounds i8, ptr %2, i64 88
  %412 = load i32, ptr %411, align 4, !tbaa !32
  tail call void @libxsmm_x86_instruction_push_reg(ptr noundef %0, i32 noundef %412) #2
  %413 = load i32, ptr %411, align 4, !tbaa !32
  tail call void @libxsmm_generator_gemm_getval_stack_var(ptr noundef %0, ptr noundef nonnull %3, i32 noundef 31, i32 noundef %413)
  %414 = load i32, ptr %41, align 8, !tbaa !12
  %415 = load i32, ptr %411, align 4, !tbaa !32
  tail call void @libxsmm_x86_instruction_alu_imm(ptr noundef %0, i32 noundef %414, i32 noundef %415, i64 noundef %45) #2
  %416 = load i32, ptr %411, align 4, !tbaa !32
  tail call void @libxsmm_generator_gemm_setval_stack_var(ptr noundef %0, ptr noundef nonnull %3, i32 noundef 31, i32 noundef %416)
  %417 = load i32, ptr %411, align 4, !tbaa !32
  tail call void @libxsmm_x86_instruction_pop_reg(ptr noundef %0, i32 noundef %417) #2
  %.pre391 = load i32, ptr %8, align 1, !tbaa !5
  br label %418

418:                                              ; preds = %410, %408
  %419 = phi i32 [ %.pre391, %410 ], [ %.pre392, %408 ]
  %420 = and i32 %419, 8388608
  %.not387 = icmp eq i32 %420, 0
  %421 = getelementptr inbounds i8, ptr %3, i64 68
  %422 = load i32, ptr %421, align 4, !tbaa !41
  br i1 %.not387, label %438, label %423

423:                                              ; preds = %418
  %424 = getelementptr inbounds i8, ptr %2, i64 116
  %425 = load i32, ptr %424, align 4, !tbaa !44
  %426 = load i32, ptr %293, align 1, !tbaa !35
  %427 = lshr i32 %426, 3
  %428 = lshr i32 %427, %295
  %429 = zext nneg i32 %428 to i64
  %430 = load i32, ptr %302, align 1, !tbaa !36
  %431 = zext i32 %430 to i64
  %432 = mul nuw nsw i64 %429, %431
  %433 = lshr i32 %5, 3
  %434 = zext nneg i32 %433 to i64
  %435 = zext i32 %.0 to i64
  %436 = mul nuw nsw i64 %435, %434
  %437 = sub nsw i64 %432, %436
  tail call void @libxsmm_x86_instruction_alu_imm(ptr noundef %0, i32 noundef %422, i32 noundef %425, i64 noundef %437) #2
  br label %441

438:                                              ; preds = %418
  %439 = getelementptr inbounds i8, ptr %2, i64 4
  %440 = load i32, ptr %439, align 4, !tbaa !42
  tail call void @libxsmm_x86_instruction_alu_imm(ptr noundef %0, i32 noundef %422, i32 noundef %440, i64 noundef %309) #2
  br label %441

441:                                              ; preds = %423, %438, %396
  %442 = getelementptr inbounds i8, ptr %3, i64 72
  %443 = load i32, ptr %442, align 8, !tbaa !45
  %444 = getelementptr inbounds i8, ptr %2, i64 40
  %445 = load i32, ptr %444, align 4, !tbaa !46
  %446 = zext i32 %6 to i64
  tail call void @libxsmm_x86_instruction_alu_imm(ptr noundef %0, i32 noundef %443, i32 noundef %445, i64 noundef %446) #2
  %447 = getelementptr inbounds i8, ptr %3, i64 76
  %448 = load i32, ptr %447, align 4, !tbaa !47
  tail call void @libxsmm_x86_instruction_jump_back_to_label(ptr noundef %0, i32 noundef %448, ptr noundef %1) #2
  ret void
}

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !7, i64 24}
!6 = !{!"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, !10, i64 33, !10, 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}
!7 = !{!"int", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!"long long", !8, i64 0}
!11 = !{!"short", !8, i64 0}
!12 = !{!13, !7, i64 64}
!13 = !{!"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, !14, 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, !15, i64 592, !7, i64 600, !7, i64 604, !7, i64 608, !7, i64 612, !15, 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}
!14 = !{!"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}
!15 = !{!"any pointer", !8, i64 0}
!16 = !{!17, !7, i64 20}
!17 = !{!"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}
!18 = !{!13, !7, i64 20}
!19 = !{!17, !7, i64 80}
!20 = !{!13, !7, i64 16}
!21 = !{!17, !7, i64 84}
!22 = !{!13, !7, i64 12}
!23 = !{!13, !7, i64 120}
!24 = !{!13, !7, i64 152}
!25 = !{!13, !7, i64 128}
!26 = !{!13, !7, i64 100}
!27 = !{!13, !7, i64 104}
!28 = !{!13, !7, i64 108}
!29 = !{!13, !7, i64 112}
!30 = !{!13, !7, i64 116}
!31 = !{!13, !7, i64 136}
!32 = !{!17, !7, i64 88}
!33 = !{!34, !7, i64 28}
!34 = !{!"libxsmm_generated_code", !15, i64 0, !7, i64 8, !7, i64 12, !7, i64 16, !7, i64 20, !7, i64 24, !7, i64 28}
!35 = !{!6, !7, i64 8}
!36 = !{!6, !7, i64 12}
!37 = !{!6, !8, i64 28}
!38 = !{!17, !7, i64 56}
!39 = !{!13, !7, i64 80}
!40 = !{!17, !7, i64 24}
!41 = !{!13, !7, i64 68}
!42 = !{!17, !7, i64 4}
!43 = !{!17, !7, i64 92}
!44 = !{!17, !7, i64 116}
!45 = !{!13, !7, i64 72}
!46 = !{!17, !7, i64 40}
!47 = !{!13, !7, i64 76}


; Effective O3 passes: CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,InferFunctionAttrsPass,InstCombinePass,JumpThreadingPass,ReassociatePass,SROAPass,SimplifyCFGPass,TailCallElimPass