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

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

%struct.libxsmm_blocking_info_t = type { i32, [4 x i32], i32, i32 }
%struct.libxsmm_micro_kernel_config = type { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i8, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, [4 x i32], [4 x i32], [4 x i32], [4 x i32], [4 x i32], [4 x i32], i32, [2 x %struct.libxsmm_blocking_info_t], %struct.libxsmm_tile_config, i32, i32, i32, i32, i32, i32, i32, i32, ptr, i32, i32, i32, i32, ptr, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 }
%struct.libxsmm_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_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 }>

@.str.1 = external hidden unnamed_addr constant [74 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [27 x i8], align 1
@__PRETTY_FUNCTION__.libxsmm_generator_gemm_load_C_amx = external hidden unnamed_addr constant [215 x i8], align 1

declare void @libxsmm_generator_gemm_getval_stack_var(ptr noundef, ptr noundef, i32 noundef, i32 noundef) #0

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

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

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

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

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

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

declare void @libxsmm_x86_instruction_unified_vec_move(ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i8 noundef signext, i32 noundef, i32 noundef, i32 noundef, i32 noundef) #0

declare i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef) #0

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

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

declare i32 @libxsmm_x86_is_Ai4_Bi8_gemm(ptr noundef) #0

declare i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef) #0

; Function Attrs: nounwind uwtable
define dso_local void @libxsmm_generator_gemm_load_C_amx(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %4, ptr noundef %5) #3 {
  %7 = alloca ptr, align 8
  %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 i32, align 4
  %23 = alloca i32, align 4
  %24 = alloca i32, align 4
  %25 = alloca i32, align 4
  %26 = alloca i32, align 4
  %27 = alloca i32, align 4
  %28 = alloca i32, align 4
  %29 = alloca i32, align 4
  %30 = alloca i32, align 4
  %31 = alloca i8, align 1
  %32 = alloca i32, align 4
  %33 = alloca i8, align 1
  %34 = alloca i32, align 4
  %35 = alloca i32, align 4
  %36 = alloca i8, align 1
  %37 = alloca i32, align 4
  %38 = alloca i32, align 4
  %39 = alloca i32, align 4
  %40 = alloca i8, align 1
  %41 = alloca i32, align 4
  store ptr %0, ptr %7, align 8, !tbaa !5
  store ptr %1, ptr %8, align 8, !tbaa !5
  store ptr %2, ptr %9, align 8, !tbaa !5
  store ptr %3, ptr %10, align 8, !tbaa !5
  store ptr %4, ptr %11, align 8, !tbaa !5
  store ptr %5, ptr %12, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #4
  store i32 0, ptr %15, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #4
  store i32 0, ptr %18, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #4
  store i32 0, ptr %19, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #4
  store i32 31, ptr %20, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #4
  %42 = load ptr, ptr %12, align 8, !tbaa !5
  %43 = getelementptr inbounds %struct.libxsmm_blocking_info_t, ptr %42, i32 0, i32 0
  %44 = load i32, ptr %43, align 4, !tbaa !11
  store i32 %44, ptr %21, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #4
  %45 = load ptr, ptr %11, align 8, !tbaa !5
  %46 = getelementptr inbounds %struct.libxsmm_blocking_info_t, ptr %45, i32 0, i32 0
  %47 = load i32, ptr %46, align 4, !tbaa !11
  store i32 %47, ptr %22, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #4
  %48 = load ptr, ptr %9, align 8, !tbaa !5
  %49 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %48, i32 0, i32 118
  %50 = load i32, ptr %49, align 8, !tbaa !13
  store i32 %50, ptr %23, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #4
  store i32 0, ptr %24, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #4
  %51 = load ptr, ptr %9, align 8, !tbaa !5
  %52 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %51, i32 0, i32 23
  %53 = load i32, ptr %52, align 4, !tbaa !17
  %54 = icmp eq i32 %53, 0
  br i1 %54, label %55, label %59

55:                                               ; preds = %6
  %56 = load ptr, ptr %8, align 8, !tbaa !5
  %57 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %56, i32 0, i32 22
  %58 = load i32, ptr %57, align 4, !tbaa !18
  br label %63

59:                                               ; preds = %6
  %60 = load ptr, ptr %8, align 8, !tbaa !5
  %61 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %60, i32 0, i32 23
  %62 = load i32, ptr %61, align 4, !tbaa !20
  br label %63

63:                                               ; preds = %59, %55
  %64 = phi i32 [ %58, %55 ], [ %62, %59 ]
  store i32 %64, ptr %25, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #4
  %65 = load ptr, ptr %10, align 8, !tbaa !5
  %66 = call i32 @libxsmm_x86_is_Ai4_Bi8_gemm(ptr noundef %65)
  store i32 %66, ptr %26, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #4
  %67 = load i32, ptr %25, align 4, !tbaa !9
  store i32 %67, ptr %27, align 4, !tbaa !9
  %68 = load i32, ptr %26, align 4, !tbaa !9
  %69 = icmp ugt i32 %68, 0
  br i1 %69, label %70, label %135

70:                                               ; preds = %63
  %71 = load ptr, ptr %10, align 8, !tbaa !5
  %72 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %71, i32 0, i32 6
  %73 = load i32, ptr %72, align 1, !tbaa !21
  %74 = and i32 %73, 1048576
  %75 = icmp ugt i32 %74, 0
  br i1 %75, label %76, label %135

76:                                               ; preds = %70
  %77 = load ptr, ptr %7, align 8, !tbaa !5
  %78 = load i32, ptr %27, align 4, !tbaa !9
  call void @libxsmm_x86_instruction_push_reg(ptr noundef %77, i32 noundef %78)
  %79 = load ptr, ptr %7, align 8, !tbaa !5
  %80 = load ptr, ptr %9, align 8, !tbaa !5
  %81 = load i32, ptr %27, align 4, !tbaa !9
  call void @libxsmm_generator_gemm_getval_stack_var(ptr noundef %79, ptr noundef %80, i32 noundef 31, i32 noundef %81)
  store i32 0, ptr %17, align 4, !tbaa !9
  store i32 0, ptr %13, align 4, !tbaa !9
  br label %82

82:                                               ; preds = %129, %76
  %83 = load i32, ptr %13, align 4, !tbaa !9
  %84 = load i32, ptr %21, align 4, !tbaa !9
  %85 = icmp slt i32 %83, %84
  br i1 %85, label %86, label %132

86:                                               ; preds = %82
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #4
  %87 = load ptr, ptr %9, align 8, !tbaa !5
  %88 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %87, i32 0, i32 79
  %89 = load i32, ptr %88, align 4, !tbaa !24
  %90 = add i32 %89, 1
  %91 = load i32, ptr %13, align 4, !tbaa !9
  %92 = add i32 %90, %91
  store i32 %92, ptr %28, align 4, !tbaa !9
  %93 = load ptr, ptr %7, align 8, !tbaa !5
  %94 = load i32, ptr %27, align 4, !tbaa !9
  %95 = load i32, ptr %17, align 4, !tbaa !9
  %96 = load ptr, ptr %9, align 8, !tbaa !5
  %97 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %96, i32 0, i32 3
  %98 = load i32, ptr %97, align 4, !tbaa !25
  %99 = mul i32 %95, %98
  %100 = load i32, ptr %28, align 4, !tbaa !9
  %101 = load i32, ptr %13, align 4, !tbaa !9
  %102 = load i32, ptr %21, align 4, !tbaa !9
  %103 = sub nsw i32 %102, 1
  %104 = icmp eq i32 %101, %103
  br i1 %104, label %105, label %109

105:                                              ; preds = %86
  %106 = load ptr, ptr %9, align 8, !tbaa !5
  %107 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %106, i32 0, i32 71
  %108 = load i32, ptr %107, align 4, !tbaa !26
  br label %110

109:                                              ; preds = %86
  br label %110

110:                                              ; preds = %109, %105
  %111 = phi i32 [ %108, %105 ], [ 0, %109 ]
  call void @libxsmm_x86_instruction_unified_vec_move(ptr noundef %93, i32 noundef -536406417, i32 noundef %94, i32 noundef 127, i32 noundef 0, i32 noundef %99, i8 noundef signext 120, i32 noundef %100, i32 noundef %111, i32 noundef 1, i32 noundef 0)
  %112 = load ptr, ptr %7, align 8, !tbaa !5
  %113 = load ptr, ptr %9, align 8, !tbaa !5
  %114 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %113, i32 0, i32 21
  %115 = load i8, ptr %114, align 4, !tbaa !27
  %116 = load i32, ptr %28, align 4, !tbaa !9
  %117 = load ptr, ptr %9, align 8, !tbaa !5
  %118 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %117, i32 0, i32 79
  %119 = load i32, ptr %118, align 4, !tbaa !24
  %120 = load i32, ptr %28, align 4, !tbaa !9
  call void @libxsmm_x86_instruction_vec_compute_3reg(ptr noundef %112, i32 noundef -268097907, i8 noundef signext %115, i32 noundef %116, i32 noundef %119, i32 noundef %120)
  %121 = load ptr, ptr %12, align 8, !tbaa !5
  %122 = getelementptr inbounds %struct.libxsmm_blocking_info_t, ptr %121, i32 0, i32 1
  %123 = load i32, ptr %13, align 4, !tbaa !9
  %124 = sext i32 %123 to i64
  %125 = getelementptr inbounds [4 x i32], ptr %122, i64 0, i64 %124
  %126 = load i32, ptr %125, align 4, !tbaa !9
  %127 = load i32, ptr %17, align 4, !tbaa !9
  %128 = add i32 %127, %126
  store i32 %128, ptr %17, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #4
  br label %129

129:                                              ; preds = %110
  %130 = load i32, ptr %13, align 4, !tbaa !9
  %131 = add nsw i32 %130, 1
  store i32 %131, ptr %13, align 4, !tbaa !9
  br label %82, !llvm.loop !28

132:                                              ; preds = %82
  %133 = load ptr, ptr %7, align 8, !tbaa !5
  %134 = load i32, ptr %27, align 4, !tbaa !9
  call void @libxsmm_x86_instruction_pop_reg(ptr noundef %133, i32 noundef %134)
  br label %135

135:                                              ; preds = %132, %70, %63
  %136 = load ptr, ptr %10, 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 !21
  %139 = and i32 4, %138
  %140 = icmp eq i32 0, %139
  br i1 %140, label %141, label %1159

141:                                              ; preds = %135
  %142 = load ptr, ptr %10, align 8, !tbaa !5
  %143 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %142, i32 0, i32 8
  %144 = getelementptr inbounds [3 x i8], ptr %143, i64 0, i64 0
  %145 = call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef %144)
  %146 = icmp eq i32 12, %145
  br i1 %146, label %147, label %153

147:                                              ; preds = %141
  %148 = load ptr, ptr %10, align 8, !tbaa !5
  %149 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %148, i32 0, i32 8
  %150 = getelementptr inbounds [3 x i8], ptr %149, i64 0, i64 0
  %151 = call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef %150)
  %152 = icmp eq i32 1, %151
  br i1 %152, label %1159, label %153

153:                                              ; preds = %147, %141
  %154 = load ptr, ptr %9, align 8, !tbaa !5
  %155 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %154, i32 0, i32 25
  %156 = load i32, ptr %155, align 4, !tbaa !30
  %157 = icmp eq i32 %156, 1
  br i1 %157, label %178, label %158

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

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

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

173:                                              ; preds = %168
  %174 = load ptr, ptr %9, align 8, !tbaa !5
  %175 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %174, i32 0, i32 29
  %176 = load i32, ptr %175, align 4, !tbaa !34
  %177 = icmp eq i32 %176, 1
  br i1 %177, label %178, label %185

178:                                              ; preds = %173, %168, %163, %158, %153
  %179 = load ptr, ptr %8, align 8, !tbaa !5
  %180 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %179, i32 0, i32 17
  %181 = load i32, ptr %180, align 4, !tbaa !35
  store i32 %181, ptr %25, align 4, !tbaa !9
  %182 = load ptr, ptr %7, align 8, !tbaa !5
  %183 = load ptr, ptr %9, align 8, !tbaa !5
  %184 = load i32, ptr %25, align 4, !tbaa !9
  call void @libxsmm_generator_gemm_getval_stack_var(ptr noundef %182, ptr noundef %183, i32 noundef 7, i32 noundef %184)
  br label %185

185:                                              ; preds = %178, %173
  %186 = load ptr, ptr %10, align 8, !tbaa !5
  %187 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %186, i32 0, i32 8
  %188 = getelementptr inbounds [3 x i8], ptr %187, i64 0, i64 0
  %189 = call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef %188)
  %190 = icmp eq i32 2, %189
  br i1 %190, label %209, label %191

191:                                              ; preds = %185
  %192 = load ptr, ptr %10, align 8, !tbaa !5
  %193 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %192, i32 0, i32 8
  %194 = getelementptr inbounds [3 x i8], ptr %193, i64 0, i64 0
  %195 = call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef %194)
  %196 = icmp eq i32 3, %195
  br i1 %196, label %209, label %197

197:                                              ; preds = %191
  %198 = load ptr, ptr %10, align 8, !tbaa !5
  %199 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %198, i32 0, i32 8
  %200 = getelementptr inbounds [3 x i8], ptr %199, i64 0, i64 0
  %201 = call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef %200)
  %202 = icmp eq i32 4, %201
  br i1 %202, label %209, label %203

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

209:                                              ; preds = %203, %197, %191, %185
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #4
  %210 = load ptr, ptr %9, align 8, !tbaa !5
  %211 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %210, i32 0, i32 24
  %212 = load i32, ptr %211, align 8, !tbaa !36
  %213 = icmp eq i32 %212, 0
  br i1 %213, label %214, label %218

214:                                              ; preds = %209
  %215 = load ptr, ptr %8, align 8, !tbaa !5
  %216 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %215, i32 0, i32 23
  %217 = load i32, ptr %216, align 4, !tbaa !20
  br label %222

218:                                              ; preds = %209
  %219 = load ptr, ptr %8, align 8, !tbaa !5
  %220 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %219, i32 0, i32 22
  %221 = load i32, ptr %220, align 4, !tbaa !18
  br label %222

222:                                              ; preds = %218, %214
  %223 = phi i32 [ %217, %214 ], [ %221, %218 ]
  store i32 %223, ptr %29, align 4, !tbaa !9
  %224 = load i32, ptr %29, align 4, !tbaa !9
  %225 = load ptr, ptr %8, align 8, !tbaa !5
  %226 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %225, i32 0, i32 22
  %227 = load i32, ptr %226, align 4, !tbaa !18
  %228 = icmp eq i32 %224, %227
  br i1 %228, label %229, label %239

229:                                              ; preds = %222
  %230 = load ptr, ptr %9, align 8, !tbaa !5
  %231 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %230, i32 0, i32 23
  %232 = load i32, ptr %231, align 4, !tbaa !17
  %233 = icmp eq i32 %232, 1
  br i1 %233, label %234, label %239

234:                                              ; preds = %229
  %235 = load ptr, ptr %7, align 8, !tbaa !5
  %236 = load ptr, ptr %8, align 8, !tbaa !5
  %237 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %236, i32 0, i32 22
  %238 = load i32, ptr %237, align 4, !tbaa !18
  call void @libxsmm_x86_instruction_push_reg(ptr noundef %235, i32 noundef %238)
  br label %239

239:                                              ; preds = %234, %229, %222
  %240 = load ptr, ptr %7, align 8, !tbaa !5
  %241 = load ptr, ptr %9, align 8, !tbaa !5
  %242 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %241, i32 0, i32 20
  %243 = load i32, ptr %242, align 8, !tbaa !37
  %244 = load ptr, ptr %8, align 8, !tbaa !5
  %245 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %244, i32 0, i32 19
  %246 = load i32, ptr %245, align 4, !tbaa !38
  %247 = load ptr, ptr %9, align 8, !tbaa !5
  %248 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %247, i32 0, i32 100
  %249 = load i32, ptr %248, align 4, !tbaa !39
  %250 = zext i32 %249 to i64
  %251 = mul nsw i64 %250, 4
  %252 = sdiv i64 %251, 4
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef %240, i32 noundef %243, i32 noundef %246, i64 noundef %252)
  %253 = load ptr, ptr %7, align 8, !tbaa !5
  %254 = load ptr, ptr %9, align 8, !tbaa !5
  %255 = load i32, ptr %29, align 4, !tbaa !9
  call void @libxsmm_generator_gemm_getval_stack_var(ptr noundef %253, ptr noundef %254, i32 noundef 6, i32 noundef %255)
  store i32 0, ptr %17, align 4, !tbaa !9
  store i32 0, ptr %18, align 4, !tbaa !9
  store i32 0, ptr %13, align 4, !tbaa !9
  br label %256

256:                                              ; preds = %689, %239
  %257 = load i32, ptr %13, align 4, !tbaa !9
  %258 = load i32, ptr %21, align 4, !tbaa !9
  %259 = icmp slt i32 %257, %258
  br i1 %259, label %260, label %692

260:                                              ; preds = %256
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #4
  %261 = load ptr, ptr %10, align 8, !tbaa !5
  %262 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %261, i32 0, i32 8
  %263 = getelementptr inbounds [3 x i8], ptr %262, i64 0, i64 0
  %264 = call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef %263)
  %265 = icmp eq i32 2, %264
  br i1 %265, label %272, label %266

266:                                              ; preds = %260
  %267 = load ptr, ptr %10, align 8, !tbaa !5
  %268 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %267, i32 0, i32 8
  %269 = getelementptr inbounds [3 x i8], ptr %268, i64 0, i64 0
  %270 = call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef %269)
  %271 = icmp eq i32 3, %270
  br label %272

272:                                              ; preds = %266, %260
  %273 = phi i1 [ true, %260 ], [ %271, %266 ]
  %274 = zext i1 %273 to i64
  %275 = select i1 %273, i32 -528017809, i32 -536406417
  store i32 %275, ptr %30, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 1, ptr %31) #4
  %276 = load ptr, ptr %10, align 8, !tbaa !5
  %277 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %276, i32 0, i32 8
  %278 = getelementptr inbounds [3 x i8], ptr %277, i64 0, i64 0
  %279 = call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef %278)
  %280 = icmp eq i32 2, %279
  br i1 %280, label %287, label %281

281:                                              ; preds = %272
  %282 = load ptr, ptr %10, align 8, !tbaa !5
  %283 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %282, i32 0, i32 8
  %284 = getelementptr inbounds [3 x i8], ptr %283, i64 0, i64 0
  %285 = call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef %284)
  %286 = icmp eq i32 3, %285
  br label %287

287:                                              ; preds = %281, %272
  %288 = phi i1 [ true, %272 ], [ %286, %281 ]
  %289 = zext i1 %288 to i64
  %290 = select i1 %288, i32 121, i32 120
  %291 = trunc i32 %290 to i8
  store i8 %291, ptr %31, align 1, !tbaa !40
  store i32 0, ptr %16, align 4, !tbaa !9
  %292 = load ptr, ptr %9, align 8, !tbaa !5
  %293 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %292, i32 0, i32 25
  %294 = load i32, ptr %293, align 4, !tbaa !30
  %295 = icmp eq i32 %294, 1
  br i1 %295, label %316, label %296

296:                                              ; preds = %287
  %297 = load ptr, ptr %9, align 8, !tbaa !5
  %298 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %297, i32 0, i32 26
  %299 = load i32, ptr %298, align 8, !tbaa !31
  %300 = icmp eq i32 %299, 1
  br i1 %300, label %316, label %301

301:                                              ; preds = %296
  %302 = load ptr, ptr %9, align 8, !tbaa !5
  %303 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %302, i32 0, i32 27
  %304 = load i32, ptr %303, align 4, !tbaa !32
  %305 = icmp eq i32 %304, 1
  br i1 %305, label %316, label %306

306:                                              ; preds = %301
  %307 = load ptr, ptr %9, align 8, !tbaa !5
  %308 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %307, i32 0, i32 28
  %309 = load i32, ptr %308, align 8, !tbaa !33
  %310 = icmp eq i32 %309, 1
  br i1 %310, label %316, label %311

311:                                              ; preds = %306
  %312 = load ptr, ptr %9, align 8, !tbaa !5
  %313 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %312, i32 0, i32 29
  %314 = load i32, ptr %313, align 4, !tbaa !34
  %315 = icmp eq i32 %314, 1
  br i1 %315, label %316, label %511

316:                                              ; preds = %311, %306, %301, %296, %287
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #4
  %317 = load ptr, ptr %9, align 8, !tbaa !5
  %318 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %317, i32 0, i32 25
  %319 = load i32, ptr %318, align 4, !tbaa !30
  %320 = icmp eq i32 %319, 1
  br i1 %320, label %321, label %322

321:                                              ; preds = %316
  br label %345

322:                                              ; preds = %316
  %323 = load ptr, ptr %9, align 8, !tbaa !5
  %324 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %323, i32 0, i32 26
  %325 = load i32, ptr %324, align 8, !tbaa !31
  %326 = icmp eq i32 %325, 1
  br i1 %326, label %327, label %328

327:                                              ; preds = %322
  br label %343

328:                                              ; preds = %322
  %329 = load ptr, ptr %9, align 8, !tbaa !5
  %330 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %329, i32 0, i32 27
  %331 = load i32, ptr %330, align 4, !tbaa !32
  %332 = icmp eq i32 %331, 1
  br i1 %332, label %333, label %334

333:                                              ; preds = %328
  br label %341

334:                                              ; preds = %328
  %335 = load ptr, ptr %9, align 8, !tbaa !5
  %336 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %335, i32 0, i32 28
  %337 = load i32, ptr %336, align 8, !tbaa !33
  %338 = icmp eq i32 %337, 1
  %339 = zext i1 %338 to i64
  %340 = select i1 %338, i32 5, i32 1
  br label %341

341:                                              ; preds = %334, %333
  %342 = phi i32 [ 4, %333 ], [ %340, %334 ]
  br label %343

343:                                              ; preds = %341, %327
  %344 = phi i32 [ 3, %327 ], [ %342, %341 ]
  br label %345

345:                                              ; preds = %343, %321
  %346 = phi i32 [ 2, %321 ], [ %344, %343 ]
  store i32 %346, ptr %32, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 1, ptr %33) #4
  %347 = load ptr, ptr %9, align 8, !tbaa !5
  %348 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %347, i32 0, i32 29
  %349 = load i32, ptr %348, align 4, !tbaa !34
  %350 = icmp eq i32 %349, 1
  br i1 %350, label %351, label %352

351:                                              ; preds = %345
  br label %366

352:                                              ; preds = %345
  %353 = load ptr, ptr %9, align 8, !tbaa !5
  %354 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %353, i32 0, i32 25
  %355 = load i32, ptr %354, align 4, !tbaa !30
  %356 = icmp eq i32 %355, 1
  br i1 %356, label %362, label %357

357:                                              ; preds = %352
  %358 = load ptr, ptr %9, align 8, !tbaa !5
  %359 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %358, i32 0, i32 26
  %360 = load i32, ptr %359, align 8, !tbaa !31
  %361 = icmp eq i32 %360, 1
  br label %362

362:                                              ; preds = %357, %352
  %363 = phi i1 [ true, %352 ], [ %361, %357 ]
  %364 = zext i1 %363 to i64
  %365 = select i1 %363, i32 121, i32 120
  br label %366

366:                                              ; preds = %362, %351
  %367 = phi i32 [ 122, %351 ], [ %365, %362 ]
  %368 = trunc i32 %367 to i8
  store i8 %368, ptr %33, align 1, !tbaa !40
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #4
  %369 = load ptr, ptr %9, align 8, !tbaa !5
  %370 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %369, i32 0, i32 29
  %371 = load i32, ptr %370, align 4, !tbaa !34
  %372 = icmp eq i32 %371, 1
  br i1 %372, label %373, label %374

373:                                              ; preds = %366
  br label %388

374:                                              ; preds = %366
  %375 = load ptr, ptr %9, align 8, !tbaa !5
  %376 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %375, i32 0, i32 25
  %377 = load i32, ptr %376, align 4, !tbaa !30
  %378 = icmp eq i32 %377, 1
  br i1 %378, label %384, label %379

379:                                              ; preds = %374
  %380 = load ptr, ptr %9, align 8, !tbaa !5
  %381 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %380, i32 0, i32 26
  %382 = load i32, ptr %381, align 8, !tbaa !31
  %383 = icmp eq i32 %382, 1
  br label %384

384:                                              ; preds = %379, %374
  %385 = phi i1 [ true, %374 ], [ %383, %379 ]
  %386 = zext i1 %385 to i64
  %387 = select i1 %385, i32 -528017809, i32 -536406417
  br label %388

388:                                              ; preds = %384, %373
  %389 = phi i32 [ 537138704, %373 ], [ %387, %384 ]
  store i32 %389, ptr %34, align 4, !tbaa !9
  %390 = load ptr, ptr %7, align 8, !tbaa !5
  %391 = load ptr, ptr %9, align 8, !tbaa !5
  %392 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %391, i32 0, i32 0
  %393 = load i32, ptr %392, align 8, !tbaa !41
  %394 = load i32, ptr %34, align 4, !tbaa !9
  %395 = load i32, ptr %25, align 4, !tbaa !9
  %396 = load i32, ptr %18, align 4, !tbaa !9
  %397 = load i32, ptr %32, align 4, !tbaa !9
  %398 = icmp eq i32 0, %397
  br i1 %398, label %399, label %400

399:                                              ; preds = %388
  br label %480

400:                                              ; preds = %388
  %401 = load i32, ptr %32, align 4, !tbaa !9
  %402 = icmp eq i32 1, %401
  br i1 %402, label %403, label %404

403:                                              ; preds = %400
  br label %478

404:                                              ; preds = %400
  %405 = load i32, ptr %32, align 4, !tbaa !9
  %406 = icmp eq i32 2, %405
  br i1 %406, label %407, label %408

407:                                              ; preds = %404
  br label %476

408:                                              ; preds = %404
  %409 = load i32, ptr %32, align 4, !tbaa !9
  %410 = icmp eq i32 3, %409
  br i1 %410, label %411, label %412

411:                                              ; preds = %408
  br label %474

412:                                              ; preds = %408
  %413 = load i32, ptr %32, align 4, !tbaa !9
  %414 = icmp eq i32 4, %413
  br i1 %414, label %415, label %416

415:                                              ; preds = %412
  br label %472

416:                                              ; preds = %412
  %417 = load i32, ptr %32, align 4, !tbaa !9
  %418 = icmp eq i32 5, %417
  br i1 %418, label %419, label %420

419:                                              ; preds = %416
  br label %470

420:                                              ; preds = %416
  %421 = load i32, ptr %32, align 4, !tbaa !9
  %422 = icmp eq i32 6, %421
  br i1 %422, label %423, label %424

423:                                              ; preds = %420
  br label %468

424:                                              ; preds = %420
  %425 = load i32, ptr %32, align 4, !tbaa !9
  %426 = icmp eq i32 7, %425
  br i1 %426, label %427, label %428

427:                                              ; preds = %424
  br label %466

428:                                              ; preds = %424
  %429 = load i32, ptr %32, align 4, !tbaa !9
  %430 = icmp eq i32 8, %429
  br i1 %430, label %431, label %432

431:                                              ; preds = %428
  br label %464

432:                                              ; preds = %428
  %433 = load i32, ptr %32, align 4, !tbaa !9
  %434 = icmp eq i32 9, %433
  br i1 %434, label %435, label %436

435:                                              ; preds = %432
  br label %462

436:                                              ; preds = %432
  %437 = load i32, ptr %32, align 4, !tbaa !9
  %438 = icmp eq i32 10, %437
  br i1 %438, label %439, label %440

439:                                              ; preds = %436
  br label %460

440:                                              ; preds = %436
  %441 = load i32, ptr %32, align 4, !tbaa !9
  %442 = icmp eq i32 11, %441
  br i1 %442, label %443, label %444

443:                                              ; preds = %440
  br label %458

444:                                              ; preds = %440
  %445 = load i32, ptr %32, align 4, !tbaa !9
  %446 = icmp eq i32 12, %445
  br i1 %446, label %447, label %448

447:                                              ; preds = %444
  br label %456

448:                                              ; preds = %444
  %449 = load i32, ptr %32, align 4, !tbaa !9
  %450 = icmp eq i32 13, %449
  br i1 %450, label %451, label %452

451:                                              ; preds = %448
  br label %454

452:                                              ; preds = %448
  call void @__assert_fail(ptr noundef @.str.2, ptr noundef @.str.1, i32 noundef 1742, ptr noundef @__PRETTY_FUNCTION__.libxsmm_generator_gemm_load_C_amx) #5
  unreachable

453:                                              ; No predecessors!
  br label %454

454:                                              ; preds = %453, %451
  %455 = phi i32 [ 1, %451 ], [ 0, %453 ]
  br label %456

456:                                              ; preds = %454, %447
  %457 = phi i32 [ 1, %447 ], [ %455, %454 ]
  br label %458

458:                                              ; preds = %456, %443
  %459 = phi i32 [ 2, %443 ], [ %457, %456 ]
  br label %460

460:                                              ; preds = %458, %439
  %461 = phi i32 [ 2, %439 ], [ %459, %458 ]
  br label %462

462:                                              ; preds = %460, %435
  %463 = phi i32 [ 4, %435 ], [ %461, %460 ]
  br label %464

464:                                              ; preds = %462, %431
  %465 = phi i32 [ 4, %431 ], [ %463, %462 ]
  br label %466

466:                                              ; preds = %464, %427
  %467 = phi i32 [ 8, %427 ], [ %465, %464 ]
  br label %468

468:                                              ; preds = %466, %423
  %469 = phi i32 [ 8, %423 ], [ %467, %466 ]
  br label %470

470:                                              ; preds = %468, %419
  %471 = phi i32 [ 1, %419 ], [ %469, %468 ]
  br label %472

472:                                              ; preds = %470, %415
  %473 = phi i32 [ 1, %415 ], [ %471, %470 ]
  br label %474

474:                                              ; preds = %472, %411
  %475 = phi i32 [ 2, %411 ], [ %473, %472 ]
  br label %476

476:                                              ; preds = %474, %407
  %477 = phi i32 [ 2, %407 ], [ %475, %474 ]
  br label %478

478:                                              ; preds = %476, %403
  %479 = phi i32 [ 4, %403 ], [ %477, %476 ]
  br label %480

480:                                              ; preds = %478, %399
  %481 = phi i32 [ 8, %399 ], [ %479, %478 ]
  %482 = mul nsw i32 %396, %481
  %483 = load i8, ptr %33, align 1, !tbaa !40
  %484 = load i32, ptr %20, align 4, !tbaa !9
  %485 = load i32, ptr %13, align 4, !tbaa !9
  %486 = load i32, ptr %21, align 4, !tbaa !9
  %487 = sub nsw i32 %486, 1
  %488 = icmp eq i32 %485, %487
  br i1 %488, label %489, label %493

489:                                              ; preds = %480
  %490 = load ptr, ptr %9, align 8, !tbaa !5
  %491 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %490, i32 0, i32 71
  %492 = load i32, ptr %491, align 4, !tbaa !26
  br label %494

493:                                              ; preds = %480
  br label %494

494:                                              ; preds = %493, %489
  %495 = phi i32 [ %492, %489 ], [ 0, %493 ]
  call void @libxsmm_x86_instruction_vec_move(ptr noundef %390, i32 noundef %393, i32 noundef %394, i32 noundef %395, i32 noundef 127, i32 noundef 0, i32 noundef %482, i8 noundef signext %483, i32 noundef %484, i32 noundef %495, i32 noundef 1, i32 noundef 0)
  %496 = load ptr, ptr %7, align 8, !tbaa !5
  %497 = load ptr, ptr %9, align 8, !tbaa !5
  %498 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %497, i32 0, i32 21
  %499 = load i8, ptr %498, align 4, !tbaa !27
  %500 = load i32, ptr %32, align 4, !tbaa !9
  %501 = load i32, ptr %20, align 4, !tbaa !9
  %502 = load i32, ptr %20, align 4, !tbaa !9
  call void @libxsmm_generator_cvt_to_ps_avx512(ptr noundef %496, i8 noundef signext %499, i32 noundef %500, i32 noundef %501, i32 noundef %502)
  %503 = load ptr, ptr %12, align 8, !tbaa !5
  %504 = getelementptr inbounds %struct.libxsmm_blocking_info_t, ptr %503, i32 0, i32 1
  %505 = load i32, ptr %13, align 4, !tbaa !9
  %506 = sext i32 %505 to i64
  %507 = getelementptr inbounds [4 x i32], ptr %504, i64 0, i64 %506
  %508 = load i32, ptr %507, align 4, !tbaa !9
  %509 = load i32, ptr %18, align 4, !tbaa !9
  %510 = add i32 %509, %508
  store i32 %510, ptr %18, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #4
  call void @llvm.lifetime.end.p0(i64 1, ptr %33) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #4
  br label %511

511:                                              ; preds = %494, %311
  store i32 0, ptr %14, align 4, !tbaa !9
  br label %512

512:                                              ; preds = %677, %511
  %513 = load i32, ptr %14, align 4, !tbaa !9
  %514 = load i32, ptr %22, align 4, !tbaa !9
  %515 = icmp slt i32 %513, %514
  br i1 %515, label %516, label %680

516:                                              ; preds = %512
  store i32 0, ptr %24, align 4, !tbaa !9
  br label %517

517:                                              ; preds = %637, %516
  %518 = load i32, ptr %24, align 4, !tbaa !9
  %519 = load ptr, ptr %11, align 8, !tbaa !5
  %520 = getelementptr inbounds %struct.libxsmm_blocking_info_t, ptr %519, i32 0, i32 1
  %521 = load i32, ptr %14, align 4, !tbaa !9
  %522 = sext i32 %521 to i64
  %523 = getelementptr inbounds [4 x i32], ptr %520, i64 0, i64 %522
  %524 = load i32, ptr %523, align 4, !tbaa !9
  %525 = icmp ult i32 %518, %524
  br i1 %525, label %526, label %640

526:                                              ; preds = %517
  %527 = load i32, ptr %24, align 4, !tbaa !9
  %528 = urem i32 %527, 4
  %529 = load ptr, ptr %9, align 8, !tbaa !5
  %530 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %529, i32 0, i32 43
  %531 = load i32, ptr %530, align 4, !tbaa !42
  %532 = add i32 %528, %531
  store i32 %532, ptr %19, align 4, !tbaa !9
  %533 = load ptr, ptr %7, align 8, !tbaa !5
  %534 = load ptr, ptr %9, align 8, !tbaa !5
  %535 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %534, i32 0, i32 0
  %536 = load i32, ptr %535, align 8, !tbaa !41
  %537 = load i32, ptr %30, align 4, !tbaa !9
  %538 = load ptr, ptr %8, align 8, !tbaa !5
  %539 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %538, i32 0, i32 5
  %540 = load i32, ptr %539, align 4, !tbaa !43
  %541 = load i32, ptr %16, align 4, !tbaa !9
  %542 = load i32, ptr %24, align 4, !tbaa !9
  %543 = add i32 %541, %542
  %544 = load ptr, ptr %10, align 8, !tbaa !5
  %545 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %544, i32 0, i32 5
  %546 = load i32, ptr %545, align 1, !tbaa !44
  %547 = mul i32 %543, %546
  %548 = load i32, ptr %17, align 4, !tbaa !9
  %549 = add i32 %547, %548
  %550 = load ptr, ptr %9, align 8, !tbaa !5
  %551 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %550, i32 0, i32 5
  %552 = load i32, ptr %551, align 4, !tbaa !45
  %553 = mul i32 %549, %552
  %554 = load i8, ptr %31, align 1, !tbaa !40
  %555 = load i32, ptr %19, align 4, !tbaa !9
  %556 = load i32, ptr %13, align 4, !tbaa !9
  %557 = load i32, ptr %21, align 4, !tbaa !9
  %558 = sub nsw i32 %557, 1
  %559 = icmp eq i32 %556, %558
  br i1 %559, label %560, label %564

560:                                              ; preds = %526
  %561 = load ptr, ptr %9, align 8, !tbaa !5
  %562 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %561, i32 0, i32 71
  %563 = load i32, ptr %562, align 4, !tbaa !26
  br label %565

564:                                              ; preds = %526
  br label %565

565:                                              ; preds = %564, %560
  %566 = phi i32 [ %563, %560 ], [ 0, %564 ]
  call void @libxsmm_x86_instruction_vec_move(ptr noundef %533, i32 noundef %536, i32 noundef %537, i32 noundef %540, i32 noundef 127, i32 noundef 0, i32 noundef %553, i8 noundef signext %554, i32 noundef %555, i32 noundef %566, i32 noundef 1, i32 noundef 0)
  %567 = load ptr, ptr %7, align 8, !tbaa !5
  %568 = load ptr, ptr %9, align 8, !tbaa !5
  %569 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %568, i32 0, i32 21
  %570 = load i8, ptr %569, align 4, !tbaa !27
  %571 = load ptr, ptr %10, align 8, !tbaa !5
  %572 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %571, i32 0, i32 8
  %573 = getelementptr inbounds [3 x i8], ptr %572, i64 0, i64 0
  %574 = call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef %573)
  %575 = load i32, ptr %19, align 4, !tbaa !9
  %576 = load i32, ptr %19, align 4, !tbaa !9
  call void @libxsmm_generator_cvt_to_ps_avx512(ptr noundef %567, i8 noundef signext %570, i32 noundef %574, i32 noundef %575, i32 noundef %576)
  %577 = load ptr, ptr %9, align 8, !tbaa !5
  %578 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %577, i32 0, i32 25
  %579 = load i32, ptr %578, align 4, !tbaa !30
  %580 = icmp eq i32 %579, 1
  br i1 %580, label %601, label %581

581:                                              ; preds = %565
  %582 = load ptr, ptr %9, align 8, !tbaa !5
  %583 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %582, i32 0, i32 26
  %584 = load i32, ptr %583, align 8, !tbaa !31
  %585 = icmp eq i32 %584, 1
  br i1 %585, label %601, label %586

586:                                              ; preds = %581
  %587 = load ptr, ptr %9, align 8, !tbaa !5
  %588 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %587, i32 0, i32 27
  %589 = load i32, ptr %588, align 4, !tbaa !32
  %590 = icmp eq i32 %589, 1
  br i1 %590, label %601, label %591

591:                                              ; preds = %586
  %592 = load ptr, ptr %9, align 8, !tbaa !5
  %593 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %592, i32 0, i32 28
  %594 = load i32, ptr %593, align 8, !tbaa !33
  %595 = icmp eq i32 %594, 1
  br i1 %595, label %601, label %596

596:                                              ; preds = %591
  %597 = load ptr, ptr %9, align 8, !tbaa !5
  %598 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %597, i32 0, i32 29
  %599 = load i32, ptr %598, align 4, !tbaa !34
  %600 = icmp eq i32 %599, 1
  br i1 %600, label %601, label %606

601:                                              ; preds = %596, %591, %586, %581, %565
  %602 = load ptr, ptr %7, align 8, !tbaa !5
  %603 = load i32, ptr %19, align 4, !tbaa !9
  %604 = load i32, ptr %20, align 4, !tbaa !9
  %605 = load i32, ptr %19, align 4, !tbaa !9
  call void @libxsmm_x86_instruction_vec_compute_3reg(ptr noundef %602, i32 noundef 805574232, i8 noundef signext 122, i32 noundef %603, i32 noundef %604, i32 noundef %605)
  br label %606

606:                                              ; preds = %601, %596
  %607 = load ptr, ptr %7, align 8, !tbaa !5
  %608 = load ptr, ptr %9, align 8, !tbaa !5
  %609 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %608, i32 0, i32 0
  %610 = load i32, ptr %609, align 8, !tbaa !41
  %611 = load i32, ptr %29, align 4, !tbaa !9
  %612 = load i32, ptr %16, align 4, !tbaa !9
  %613 = load i32, ptr %24, align 4, !tbaa !9
  %614 = add i32 %612, %613
  %615 = load ptr, ptr %9, align 8, !tbaa !5
  %616 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %615, i32 0, i32 100
  %617 = load i32, ptr %616, align 4, !tbaa !39
  %618 = mul i32 %614, %617
  %619 = load i32, ptr %17, align 4, !tbaa !9
  %620 = add i32 %618, %619
  %621 = mul i32 %620, 4
  %622 = load ptr, ptr %9, align 8, !tbaa !5
  %623 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %622, i32 0, i32 21
  %624 = load i8, ptr %623, align 4, !tbaa !27
  %625 = load i32, ptr %19, align 4, !tbaa !9
  %626 = load i32, ptr %13, align 4, !tbaa !9
  %627 = load i32, ptr %21, align 4, !tbaa !9
  %628 = sub nsw i32 %627, 1
  %629 = icmp eq i32 %626, %628
  br i1 %629, label %630, label %634

630:                                              ; preds = %606
  %631 = load ptr, ptr %9, align 8, !tbaa !5
  %632 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %631, i32 0, i32 71
  %633 = load i32, ptr %632, align 4, !tbaa !26
  br label %635

634:                                              ; preds = %606
  br label %635

635:                                              ; preds = %634, %630
  %636 = phi i32 [ %633, %630 ], [ 0, %634 ]
  call void @libxsmm_x86_instruction_vec_move(ptr noundef %607, i32 noundef %610, i32 noundef 537138704, i32 noundef %611, i32 noundef 127, i32 noundef 0, i32 noundef %621, i8 noundef signext %624, i32 noundef %625, i32 noundef %636, i32 noundef 0, i32 noundef 1)
  br label %637

637:                                              ; preds = %635
  %638 = load i32, ptr %24, align 4, !tbaa !9
  %639 = add i32 %638, 1
  store i32 %639, ptr %24, align 4, !tbaa !9
  br label %517, !llvm.loop !46

640:                                              ; preds = %517
  %641 = load ptr, ptr %7, align 8, !tbaa !5
  %642 = load ptr, ptr %9, align 8, !tbaa !5
  %643 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %642, i32 0, i32 0
  %644 = load i32, ptr %643, align 8, !tbaa !41
  %645 = load i32, ptr %29, align 4, !tbaa !9
  %646 = load ptr, ptr %8, align 8, !tbaa !5
  %647 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %646, i32 0, i32 19
  %648 = load i32, ptr %647, align 4, !tbaa !38
  %649 = load i32, ptr %16, align 4, !tbaa !9
  %650 = load ptr, ptr %9, align 8, !tbaa !5
  %651 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %650, i32 0, i32 100
  %652 = load i32, ptr %651, align 4, !tbaa !39
  %653 = mul i32 %649, %652
  %654 = load i32, ptr %17, align 4, !tbaa !9
  %655 = add i32 %653, %654
  %656 = mul i32 %655, 4
  %657 = load i32, ptr %15, align 4, !tbaa !9
  call void @libxsmm_x86_instruction_tile_move(ptr noundef %641, i32 noundef %644, i32 noundef 1611079755, i32 noundef %645, i32 noundef %648, i32 noundef 4, i32 noundef %656, i32 noundef %657)
  %658 = load i32, ptr %15, align 4, !tbaa !9
  %659 = add nsw i32 %658, 1
  store i32 %659, ptr %15, align 4, !tbaa !9
  %660 = load i32, ptr %22, align 4, !tbaa !9
  %661 = icmp eq i32 %660, 1
  br i1 %661, label %662, label %668

662:                                              ; preds = %640
  %663 = load i32, ptr %23, align 4, !tbaa !9
  %664 = icmp eq i32 %663, 0
  br i1 %664, label %665, label %668

665:                                              ; preds = %662
  %666 = load i32, ptr %15, align 4, !tbaa !9
  %667 = add nsw i32 %666, 1
  store i32 %667, ptr %15, align 4, !tbaa !9
  br label %668

668:                                              ; preds = %665, %662, %640
  %669 = load ptr, ptr %11, align 8, !tbaa !5
  %670 = getelementptr inbounds %struct.libxsmm_blocking_info_t, ptr %669, i32 0, i32 1
  %671 = load i32, ptr %14, align 4, !tbaa !9
  %672 = sext i32 %671 to i64
  %673 = getelementptr inbounds [4 x i32], ptr %670, i64 0, i64 %672
  %674 = load i32, ptr %673, align 4, !tbaa !9
  %675 = load i32, ptr %16, align 4, !tbaa !9
  %676 = add i32 %675, %674
  store i32 %676, ptr %16, align 4, !tbaa !9
  br label %677

677:                                              ; preds = %668
  %678 = load i32, ptr %14, align 4, !tbaa !9
  %679 = add nsw i32 %678, 1
  store i32 %679, ptr %14, align 4, !tbaa !9
  br label %512, !llvm.loop !47

680:                                              ; preds = %512
  %681 = load ptr, ptr %12, align 8, !tbaa !5
  %682 = getelementptr inbounds %struct.libxsmm_blocking_info_t, ptr %681, i32 0, i32 1
  %683 = load i32, ptr %13, align 4, !tbaa !9
  %684 = sext i32 %683 to i64
  %685 = getelementptr inbounds [4 x i32], ptr %682, i64 0, i64 %684
  %686 = load i32, ptr %685, align 4, !tbaa !9
  %687 = load i32, ptr %17, align 4, !tbaa !9
  %688 = add i32 %687, %686
  store i32 %688, ptr %17, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 1, ptr %31) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #4
  br label %689

689:                                              ; preds = %680
  %690 = load i32, ptr %13, align 4, !tbaa !9
  %691 = add nsw i32 %690, 1
  store i32 %691, ptr %13, align 4, !tbaa !9
  br label %256, !llvm.loop !48

692:                                              ; preds = %256
  %693 = load ptr, ptr %7, align 8, !tbaa !5
  %694 = load ptr, ptr %9, align 8, !tbaa !5
  %695 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %694, i32 0, i32 20
  %696 = load i32, ptr %695, align 8, !tbaa !37
  %697 = load ptr, ptr %8, align 8, !tbaa !5
  %698 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %697, i32 0, i32 19
  %699 = load i32, ptr %698, align 4, !tbaa !38
  %700 = load ptr, ptr %10, align 8, !tbaa !5
  %701 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %700, i32 0, i32 5
  %702 = load i32, ptr %701, align 1, !tbaa !44
  %703 = zext i32 %702 to i64
  %704 = mul nsw i64 %703, 4
  %705 = sdiv i64 %704, 4
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef %693, i32 noundef %696, i32 noundef %699, i64 noundef %705)
  %706 = load i32, ptr %29, align 4, !tbaa !9
  %707 = load ptr, ptr %8, align 8, !tbaa !5
  %708 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %707, i32 0, i32 22
  %709 = load i32, ptr %708, align 4, !tbaa !18
  %710 = icmp eq i32 %706, %709
  br i1 %710, label %711, label %721

711:                                              ; preds = %692
  %712 = load ptr, ptr %9, align 8, !tbaa !5
  %713 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %712, i32 0, i32 23
  %714 = load i32, ptr %713, align 4, !tbaa !17
  %715 = icmp eq i32 %714, 1
  br i1 %715, label %716, label %721

716:                                              ; preds = %711
  %717 = load ptr, ptr %7, align 8, !tbaa !5
  %718 = load ptr, ptr %8, align 8, !tbaa !5
  %719 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %718, i32 0, i32 22
  %720 = load i32, ptr %719, align 4, !tbaa !18
  call void @libxsmm_x86_instruction_pop_reg(ptr noundef %717, i32 noundef %720)
  br label %721

721:                                              ; preds = %716, %711, %692
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #4
  br label %1119

722:                                              ; preds = %203
  store i32 0, ptr %17, align 4, !tbaa !9
  store i32 0, ptr %18, align 4, !tbaa !9
  store i32 0, ptr %13, align 4, !tbaa !9
  br label %723

723:                                              ; preds = %1115, %722
  %724 = load i32, ptr %13, align 4, !tbaa !9
  %725 = load i32, ptr %21, align 4, !tbaa !9
  %726 = icmp slt i32 %724, %725
  br i1 %726, label %727, label %1118

727:                                              ; preds = %723
  store i32 0, ptr %16, align 4, !tbaa !9
  %728 = load ptr, ptr %9, align 8, !tbaa !5
  %729 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %728, i32 0, i32 25
  %730 = load i32, ptr %729, align 4, !tbaa !30
  %731 = icmp eq i32 %730, 1
  br i1 %731, label %752, label %732

732:                                              ; preds = %727
  %733 = load ptr, ptr %9, align 8, !tbaa !5
  %734 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %733, i32 0, i32 26
  %735 = load i32, ptr %734, align 8, !tbaa !31
  %736 = icmp eq i32 %735, 1
  br i1 %736, label %752, label %737

737:                                              ; preds = %732
  %738 = load ptr, ptr %9, align 8, !tbaa !5
  %739 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %738, i32 0, i32 27
  %740 = load i32, ptr %739, align 4, !tbaa !32
  %741 = icmp eq i32 %740, 1
  br i1 %741, label %752, label %742

742:                                              ; preds = %737
  %743 = load ptr, ptr %9, align 8, !tbaa !5
  %744 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %743, i32 0, i32 28
  %745 = load i32, ptr %744, align 8, !tbaa !33
  %746 = icmp eq i32 %745, 1
  br i1 %746, label %752, label %747

747:                                              ; preds = %742
  %748 = load ptr, ptr %9, align 8, !tbaa !5
  %749 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %748, i32 0, i32 29
  %750 = load i32, ptr %749, align 4, !tbaa !34
  %751 = icmp eq i32 %750, 1
  br i1 %751, label %752, label %947

752:                                              ; preds = %747, %742, %737, %732, %727
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #4
  %753 = load ptr, ptr %9, align 8, !tbaa !5
  %754 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %753, i32 0, i32 25
  %755 = load i32, ptr %754, align 4, !tbaa !30
  %756 = icmp eq i32 %755, 1
  br i1 %756, label %757, label %758

757:                                              ; preds = %752
  br label %781

758:                                              ; preds = %752
  %759 = load ptr, ptr %9, align 8, !tbaa !5
  %760 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %759, i32 0, i32 26
  %761 = load i32, ptr %760, align 8, !tbaa !31
  %762 = icmp eq i32 %761, 1
  br i1 %762, label %763, label %764

763:                                              ; preds = %758
  br label %779

764:                                              ; preds = %758
  %765 = load ptr, ptr %9, align 8, !tbaa !5
  %766 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %765, i32 0, i32 27
  %767 = load i32, ptr %766, align 4, !tbaa !32
  %768 = icmp eq i32 %767, 1
  br i1 %768, label %769, label %770

769:                                              ; preds = %764
  br label %777

770:                                              ; preds = %764
  %771 = load ptr, ptr %9, align 8, !tbaa !5
  %772 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %771, i32 0, i32 28
  %773 = load i32, ptr %772, align 8, !tbaa !33
  %774 = icmp eq i32 %773, 1
  %775 = zext i1 %774 to i64
  %776 = select i1 %774, i32 5, i32 1
  br label %777

777:                                              ; preds = %770, %769
  %778 = phi i32 [ 4, %769 ], [ %776, %770 ]
  br label %779

779:                                              ; preds = %777, %763
  %780 = phi i32 [ 3, %763 ], [ %778, %777 ]
  br label %781

781:                                              ; preds = %779, %757
  %782 = phi i32 [ 2, %757 ], [ %780, %779 ]
  store i32 %782, ptr %35, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 1, ptr %36) #4
  %783 = load ptr, ptr %9, align 8, !tbaa !5
  %784 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %783, i32 0, i32 29
  %785 = load i32, ptr %784, align 4, !tbaa !34
  %786 = icmp eq i32 %785, 1
  br i1 %786, label %787, label %788

787:                                              ; preds = %781
  br label %802

788:                                              ; preds = %781
  %789 = load ptr, ptr %9, align 8, !tbaa !5
  %790 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %789, i32 0, i32 25
  %791 = load i32, ptr %790, align 4, !tbaa !30
  %792 = icmp eq i32 %791, 1
  br i1 %792, label %798, label %793

793:                                              ; preds = %788
  %794 = load ptr, ptr %9, align 8, !tbaa !5
  %795 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %794, i32 0, i32 26
  %796 = load i32, ptr %795, align 8, !tbaa !31
  %797 = icmp eq i32 %796, 1
  br label %798

798:                                              ; preds = %793, %788
  %799 = phi i1 [ true, %788 ], [ %797, %793 ]
  %800 = zext i1 %799 to i64
  %801 = select i1 %799, i32 121, i32 120
  br label %802

802:                                              ; preds = %798, %787
  %803 = phi i32 [ 122, %787 ], [ %801, %798 ]
  %804 = trunc i32 %803 to i8
  store i8 %804, ptr %36, align 1, !tbaa !40
  call void @llvm.lifetime.start.p0(i64 4, ptr %37) #4
  %805 = load ptr, ptr %9, align 8, !tbaa !5
  %806 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %805, i32 0, i32 29
  %807 = load i32, ptr %806, align 4, !tbaa !34
  %808 = icmp eq i32 %807, 1
  br i1 %808, label %809, label %810

809:                                              ; preds = %802
  br label %824

810:                                              ; preds = %802
  %811 = load ptr, ptr %9, align 8, !tbaa !5
  %812 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %811, i32 0, i32 25
  %813 = load i32, ptr %812, align 4, !tbaa !30
  %814 = icmp eq i32 %813, 1
  br i1 %814, label %820, label %815

815:                                              ; preds = %810
  %816 = load ptr, ptr %9, align 8, !tbaa !5
  %817 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %816, i32 0, i32 26
  %818 = load i32, ptr %817, align 8, !tbaa !31
  %819 = icmp eq i32 %818, 1
  br label %820

820:                                              ; preds = %815, %810
  %821 = phi i1 [ true, %810 ], [ %819, %815 ]
  %822 = zext i1 %821 to i64
  %823 = select i1 %821, i32 -528017809, i32 -536406417
  br label %824

824:                                              ; preds = %820, %809
  %825 = phi i32 [ 537138704, %809 ], [ %823, %820 ]
  store i32 %825, ptr %37, align 4, !tbaa !9
  %826 = load ptr, ptr %7, align 8, !tbaa !5
  %827 = load ptr, ptr %9, align 8, !tbaa !5
  %828 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %827, i32 0, i32 0
  %829 = load i32, ptr %828, align 8, !tbaa !41
  %830 = load i32, ptr %37, align 4, !tbaa !9
  %831 = load i32, ptr %25, align 4, !tbaa !9
  %832 = load i32, ptr %18, align 4, !tbaa !9
  %833 = load i32, ptr %35, align 4, !tbaa !9
  %834 = icmp eq i32 0, %833
  br i1 %834, label %835, label %836

835:                                              ; preds = %824
  br label %916

836:                                              ; preds = %824
  %837 = load i32, ptr %35, align 4, !tbaa !9
  %838 = icmp eq i32 1, %837
  br i1 %838, label %839, label %840

839:                                              ; preds = %836
  br label %914

840:                                              ; preds = %836
  %841 = load i32, ptr %35, align 4, !tbaa !9
  %842 = icmp eq i32 2, %841
  br i1 %842, label %843, label %844

843:                                              ; preds = %840
  br label %912

844:                                              ; preds = %840
  %845 = load i32, ptr %35, align 4, !tbaa !9
  %846 = icmp eq i32 3, %845
  br i1 %846, label %847, label %848

847:                                              ; preds = %844
  br label %910

848:                                              ; preds = %844
  %849 = load i32, ptr %35, align 4, !tbaa !9
  %850 = icmp eq i32 4, %849
  br i1 %850, label %851, label %852

851:                                              ; preds = %848
  br label %908

852:                                              ; preds = %848
  %853 = load i32, ptr %35, align 4, !tbaa !9
  %854 = icmp eq i32 5, %853
  br i1 %854, label %855, label %856

855:                                              ; preds = %852
  br label %906

856:                                              ; preds = %852
  %857 = load i32, ptr %35, align 4, !tbaa !9
  %858 = icmp eq i32 6, %857
  br i1 %858, label %859, label %860

859:                                              ; preds = %856
  br label %904

860:                                              ; preds = %856
  %861 = load i32, ptr %35, align 4, !tbaa !9
  %862 = icmp eq i32 7, %861
  br i1 %862, label %863, label %864

863:                                              ; preds = %860
  br label %902

864:                                              ; preds = %860
  %865 = load i32, ptr %35, align 4, !tbaa !9
  %866 = icmp eq i32 8, %865
  br i1 %866, label %867, label %868

867:                                              ; preds = %864
  br label %900

868:                                              ; preds = %864
  %869 = load i32, ptr %35, align 4, !tbaa !9
  %870 = icmp eq i32 9, %869
  br i1 %870, label %871, label %872

871:                                              ; preds = %868
  br label %898

872:                                              ; preds = %868
  %873 = load i32, ptr %35, align 4, !tbaa !9
  %874 = icmp eq i32 10, %873
  br i1 %874, label %875, label %876

875:                                              ; preds = %872
  br label %896

876:                                              ; preds = %872
  %877 = load i32, ptr %35, align 4, !tbaa !9
  %878 = icmp eq i32 11, %877
  br i1 %878, label %879, label %880

879:                                              ; preds = %876
  br label %894

880:                                              ; preds = %876
  %881 = load i32, ptr %35, align 4, !tbaa !9
  %882 = icmp eq i32 12, %881
  br i1 %882, label %883, label %884

883:                                              ; preds = %880
  br label %892

884:                                              ; preds = %880
  %885 = load i32, ptr %35, align 4, !tbaa !9
  %886 = icmp eq i32 13, %885
  br i1 %886, label %887, label %888

887:                                              ; preds = %884
  br label %890

888:                                              ; preds = %884
  call void @__assert_fail(ptr noundef @.str.2, ptr noundef @.str.1, i32 noundef 1818, ptr noundef @__PRETTY_FUNCTION__.libxsmm_generator_gemm_load_C_amx) #5
  unreachable

889:                                              ; No predecessors!
  br label %890

890:                                              ; preds = %889, %887
  %891 = phi i32 [ 1, %887 ], [ 0, %889 ]
  br label %892

892:                                              ; preds = %890, %883
  %893 = phi i32 [ 1, %883 ], [ %891, %890 ]
  br label %894

894:                                              ; preds = %892, %879
  %895 = phi i32 [ 2, %879 ], [ %893, %892 ]
  br label %896

896:                                              ; preds = %894, %875
  %897 = phi i32 [ 2, %875 ], [ %895, %894 ]
  br label %898

898:                                              ; preds = %896, %871
  %899 = phi i32 [ 4, %871 ], [ %897, %896 ]
  br label %900

900:                                              ; preds = %898, %867
  %901 = phi i32 [ 4, %867 ], [ %899, %898 ]
  br label %902

902:                                              ; preds = %900, %863
  %903 = phi i32 [ 8, %863 ], [ %901, %900 ]
  br label %904

904:                                              ; preds = %902, %859
  %905 = phi i32 [ 8, %859 ], [ %903, %902 ]
  br label %906

906:                                              ; preds = %904, %855
  %907 = phi i32 [ 1, %855 ], [ %905, %904 ]
  br label %908

908:                                              ; preds = %906, %851
  %909 = phi i32 [ 1, %851 ], [ %907, %906 ]
  br label %910

910:                                              ; preds = %908, %847
  %911 = phi i32 [ 2, %847 ], [ %909, %908 ]
  br label %912

912:                                              ; preds = %910, %843
  %913 = phi i32 [ 2, %843 ], [ %911, %910 ]
  br label %914

914:                                              ; preds = %912, %839
  %915 = phi i32 [ 4, %839 ], [ %913, %912 ]
  br label %916

916:                                              ; preds = %914, %835
  %917 = phi i32 [ 8, %835 ], [ %915, %914 ]
  %918 = mul nsw i32 %832, %917
  %919 = load i8, ptr %36, align 1, !tbaa !40
  %920 = load i32, ptr %20, align 4, !tbaa !9
  %921 = load i32, ptr %13, align 4, !tbaa !9
  %922 = load i32, ptr %21, align 4, !tbaa !9
  %923 = sub nsw i32 %922, 1
  %924 = icmp eq i32 %921, %923
  br i1 %924, label %925, label %929

925:                                              ; preds = %916
  %926 = load ptr, ptr %9, align 8, !tbaa !5
  %927 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %926, i32 0, i32 71
  %928 = load i32, ptr %927, align 4, !tbaa !26
  br label %930

929:                                              ; preds = %916
  br label %930

930:                                              ; preds = %929, %925
  %931 = phi i32 [ %928, %925 ], [ 0, %929 ]
  call void @libxsmm_x86_instruction_vec_move(ptr noundef %826, i32 noundef %829, i32 noundef %830, i32 noundef %831, i32 noundef 127, i32 noundef 0, i32 noundef %918, i8 noundef signext %919, i32 noundef %920, i32 noundef %931, i32 noundef 1, i32 noundef 0)
  %932 = load ptr, ptr %7, align 8, !tbaa !5
  %933 = load ptr, ptr %9, align 8, !tbaa !5
  %934 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %933, i32 0, i32 21
  %935 = load i8, ptr %934, align 4, !tbaa !27
  %936 = load i32, ptr %35, align 4, !tbaa !9
  %937 = load i32, ptr %20, align 4, !tbaa !9
  %938 = load i32, ptr %20, align 4, !tbaa !9
  call void @libxsmm_generator_cvt_to_ps_avx512(ptr noundef %932, i8 noundef signext %935, i32 noundef %936, i32 noundef %937, i32 noundef %938)
  %939 = load ptr, ptr %12, align 8, !tbaa !5
  %940 = getelementptr inbounds %struct.libxsmm_blocking_info_t, ptr %939, i32 0, i32 1
  %941 = load i32, ptr %13, align 4, !tbaa !9
  %942 = sext i32 %941 to i64
  %943 = getelementptr inbounds [4 x i32], ptr %940, i64 0, i64 %942
  %944 = load i32, ptr %943, align 4, !tbaa !9
  %945 = load i32, ptr %18, align 4, !tbaa !9
  %946 = add i32 %945, %944
  store i32 %946, ptr %18, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #4
  call void @llvm.lifetime.end.p0(i64 1, ptr %36) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #4
  br label %947

947:                                              ; preds = %930, %747
  store i32 0, ptr %14, align 4, !tbaa !9
  br label %948

948:                                              ; preds = %1103, %947
  %949 = load i32, ptr %14, align 4, !tbaa !9
  %950 = load i32, ptr %22, align 4, !tbaa !9
  %951 = icmp slt i32 %949, %950
  br i1 %951, label %952, label %1106

952:                                              ; preds = %948
  %953 = load ptr, ptr %9, align 8, !tbaa !5
  %954 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %953, i32 0, i32 25
  %955 = load i32, ptr %954, align 4, !tbaa !30
  %956 = icmp eq i32 %955, 1
  br i1 %956, label %977, label %957

957:                                              ; preds = %952
  %958 = load ptr, ptr %9, align 8, !tbaa !5
  %959 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %958, i32 0, i32 26
  %960 = load i32, ptr %959, align 8, !tbaa !31
  %961 = icmp eq i32 %960, 1
  br i1 %961, label %977, label %962

962:                                              ; preds = %957
  %963 = load ptr, ptr %9, align 8, !tbaa !5
  %964 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %963, i32 0, i32 27
  %965 = load i32, ptr %964, align 4, !tbaa !32
  %966 = icmp eq i32 %965, 1
  br i1 %966, label %977, label %967

967:                                              ; preds = %962
  %968 = load ptr, ptr %9, align 8, !tbaa !5
  %969 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %968, i32 0, i32 28
  %970 = load i32, ptr %969, align 8, !tbaa !33
  %971 = icmp eq i32 %970, 1
  br i1 %971, label %977, label %972

972:                                              ; preds = %967
  %973 = load ptr, ptr %9, align 8, !tbaa !5
  %974 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %973, i32 0, i32 29
  %975 = load i32, ptr %974, align 4, !tbaa !34
  %976 = icmp eq i32 %975, 1
  br i1 %976, label %977, label %1064

977:                                              ; preds = %972, %967, %962, %957, %952
  store i32 0, ptr %24, align 4, !tbaa !9
  br label %978

978:                                              ; preds = %1060, %977
  %979 = load i32, ptr %24, align 4, !tbaa !9
  %980 = load ptr, ptr %11, align 8, !tbaa !5
  %981 = getelementptr inbounds %struct.libxsmm_blocking_info_t, ptr %980, i32 0, i32 1
  %982 = load i32, ptr %14, align 4, !tbaa !9
  %983 = sext i32 %982 to i64
  %984 = getelementptr inbounds [4 x i32], ptr %981, i64 0, i64 %983
  %985 = load i32, ptr %984, align 4, !tbaa !9
  %986 = icmp ult i32 %979, %985
  br i1 %986, label %987, label %1063

987:                                              ; preds = %978
  %988 = load i32, ptr %24, align 4, !tbaa !9
  %989 = load ptr, ptr %9, align 8, !tbaa !5
  %990 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %989, i32 0, i32 43
  %991 = load i32, ptr %990, align 4, !tbaa !42
  %992 = sub i32 30, %991
  %993 = urem i32 %988, %992
  %994 = load ptr, ptr %9, align 8, !tbaa !5
  %995 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %994, i32 0, i32 43
  %996 = load i32, ptr %995, align 4, !tbaa !42
  %997 = add i32 %993, %996
  store i32 %997, ptr %19, align 4, !tbaa !9
  %998 = load ptr, ptr %7, align 8, !tbaa !5
  %999 = load ptr, ptr %9, align 8, !tbaa !5
  %1000 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %999, i32 0, i32 0
  %1001 = load i32, ptr %1000, align 8, !tbaa !41
  %1002 = load ptr, ptr %8, align 8, !tbaa !5
  %1003 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %1002, i32 0, i32 5
  %1004 = load i32, ptr %1003, align 4, !tbaa !43
  %1005 = load i32, ptr %16, align 4, !tbaa !9
  %1006 = load i32, ptr %24, align 4, !tbaa !9
  %1007 = add i32 %1005, %1006
  %1008 = load ptr, ptr %10, align 8, !tbaa !5
  %1009 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %1008, i32 0, i32 5
  %1010 = load i32, ptr %1009, align 1, !tbaa !44
  %1011 = mul i32 %1007, %1010
  %1012 = load i32, ptr %17, align 4, !tbaa !9
  %1013 = add i32 %1011, %1012
  %1014 = mul i32 %1013, 4
  %1015 = load i32, ptr %19, align 4, !tbaa !9
  %1016 = load i32, ptr %13, align 4, !tbaa !9
  %1017 = load i32, ptr %21, align 4, !tbaa !9
  %1018 = sub nsw i32 %1017, 1
  %1019 = icmp eq i32 %1016, %1018
  br i1 %1019, label %1020, label %1024

1020:                                             ; preds = %987
  %1021 = load ptr, ptr %9, align 8, !tbaa !5
  %1022 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1021, i32 0, i32 71
  %1023 = load i32, ptr %1022, align 4, !tbaa !26
  br label %1025

1024:                                             ; preds = %987
  br label %1025

1025:                                             ; preds = %1024, %1020
  %1026 = phi i32 [ %1023, %1020 ], [ 0, %1024 ]
  call void @libxsmm_x86_instruction_vec_move(ptr noundef %998, i32 noundef %1001, i32 noundef 537138704, i32 noundef %1004, i32 noundef 127, i32 noundef 0, i32 noundef %1014, i8 noundef signext 122, i32 noundef %1015, i32 noundef %1026, i32 noundef 1, i32 noundef 0)
  %1027 = load ptr, ptr %7, align 8, !tbaa !5
  %1028 = load i32, ptr %19, align 4, !tbaa !9
  %1029 = load i32, ptr %20, align 4, !tbaa !9
  %1030 = load i32, ptr %19, align 4, !tbaa !9
  call void @libxsmm_x86_instruction_vec_compute_3reg(ptr noundef %1027, i32 noundef 805574232, i8 noundef signext 122, i32 noundef %1028, i32 noundef %1029, i32 noundef %1030)
  %1031 = load ptr, ptr %7, align 8, !tbaa !5
  %1032 = load ptr, ptr %9, align 8, !tbaa !5
  %1033 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1032, i32 0, i32 0
  %1034 = load i32, ptr %1033, align 8, !tbaa !41
  %1035 = load ptr, ptr %8, align 8, !tbaa !5
  %1036 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %1035, i32 0, i32 5
  %1037 = load i32, ptr %1036, align 4, !tbaa !43
  %1038 = load i32, ptr %16, align 4, !tbaa !9
  %1039 = load i32, ptr %24, align 4, !tbaa !9
  %1040 = add i32 %1038, %1039
  %1041 = load ptr, ptr %10, align 8, !tbaa !5
  %1042 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %1041, i32 0, i32 5
  %1043 = load i32, ptr %1042, align 1, !tbaa !44
  %1044 = mul i32 %1040, %1043
  %1045 = load i32, ptr %17, align 4, !tbaa !9
  %1046 = add i32 %1044, %1045
  %1047 = mul i32 %1046, 4
  %1048 = load i32, ptr %19, align 4, !tbaa !9
  %1049 = load i32, ptr %13, align 4, !tbaa !9
  %1050 = load i32, ptr %21, align 4, !tbaa !9
  %1051 = sub nsw i32 %1050, 1
  %1052 = icmp eq i32 %1049, %1051
  br i1 %1052, label %1053, label %1057

1053:                                             ; preds = %1025
  %1054 = load ptr, ptr %9, align 8, !tbaa !5
  %1055 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1054, i32 0, i32 71
  %1056 = load i32, ptr %1055, align 4, !tbaa !26
  br label %1058

1057:                                             ; preds = %1025
  br label %1058

1058:                                             ; preds = %1057, %1053
  %1059 = phi i32 [ %1056, %1053 ], [ 0, %1057 ]
  call void @libxsmm_x86_instruction_vec_move(ptr noundef %1031, i32 noundef %1034, i32 noundef 537138704, i32 noundef %1037, i32 noundef 127, i32 noundef 0, i32 noundef %1047, i8 noundef signext 122, i32 noundef %1048, i32 noundef %1059, i32 noundef 0, i32 noundef 1)
  br label %1060

1060:                                             ; preds = %1058
  %1061 = load i32, ptr %24, align 4, !tbaa !9
  %1062 = add i32 %1061, 1
  store i32 %1062, ptr %24, align 4, !tbaa !9
  br label %978, !llvm.loop !49

1063:                                             ; preds = %978
  br label %1064

1064:                                             ; preds = %1063, %972
  %1065 = load ptr, ptr %7, align 8, !tbaa !5
  %1066 = load ptr, ptr %9, align 8, !tbaa !5
  %1067 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1066, i32 0, i32 0
  %1068 = load i32, ptr %1067, align 8, !tbaa !41
  %1069 = load ptr, ptr %8, align 8, !tbaa !5
  %1070 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %1069, i32 0, i32 5
  %1071 = load i32, ptr %1070, align 4, !tbaa !43
  %1072 = load ptr, ptr %8, align 8, !tbaa !5
  %1073 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %1072, i32 0, i32 19
  %1074 = load i32, ptr %1073, align 4, !tbaa !38
  %1075 = load i32, ptr %16, align 4, !tbaa !9
  %1076 = load ptr, ptr %10, align 8, !tbaa !5
  %1077 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %1076, i32 0, i32 5
  %1078 = load i32, ptr %1077, align 1, !tbaa !44
  %1079 = mul i32 %1075, %1078
  %1080 = load i32, ptr %17, align 4, !tbaa !9
  %1081 = add i32 %1079, %1080
  %1082 = mul i32 %1081, 4
  %1083 = load i32, ptr %15, align 4, !tbaa !9
  call void @libxsmm_x86_instruction_tile_move(ptr noundef %1065, i32 noundef %1068, i32 noundef 1611079755, i32 noundef %1071, i32 noundef %1074, i32 noundef 4, i32 noundef %1082, i32 noundef %1083)
  %1084 = load i32, ptr %15, align 4, !tbaa !9
  %1085 = add nsw i32 %1084, 1
  store i32 %1085, ptr %15, align 4, !tbaa !9
  %1086 = load i32, ptr %22, align 4, !tbaa !9
  %1087 = icmp eq i32 %1086, 1
  br i1 %1087, label %1088, label %1094

1088:                                             ; preds = %1064
  %1089 = load i32, ptr %23, align 4, !tbaa !9
  %1090 = icmp eq i32 %1089, 0
  br i1 %1090, label %1091, label %1094

1091:                                             ; preds = %1088
  %1092 = load i32, ptr %15, align 4, !tbaa !9
  %1093 = add nsw i32 %1092, 1
  store i32 %1093, ptr %15, align 4, !tbaa !9
  br label %1094

1094:                                             ; preds = %1091, %1088, %1064
  %1095 = load ptr, ptr %11, align 8, !tbaa !5
  %1096 = getelementptr inbounds %struct.libxsmm_blocking_info_t, ptr %1095, i32 0, i32 1
  %1097 = load i32, ptr %14, align 4, !tbaa !9
  %1098 = sext i32 %1097 to i64
  %1099 = getelementptr inbounds [4 x i32], ptr %1096, i64 0, i64 %1098
  %1100 = load i32, ptr %1099, align 4, !tbaa !9
  %1101 = load i32, ptr %16, align 4, !tbaa !9
  %1102 = add i32 %1101, %1100
  store i32 %1102, ptr %16, align 4, !tbaa !9
  br label %1103

1103:                                             ; preds = %1094
  %1104 = load i32, ptr %14, align 4, !tbaa !9
  %1105 = add nsw i32 %1104, 1
  store i32 %1105, ptr %14, align 4, !tbaa !9
  br label %948, !llvm.loop !50

1106:                                             ; preds = %948
  %1107 = load ptr, ptr %12, align 8, !tbaa !5
  %1108 = getelementptr inbounds %struct.libxsmm_blocking_info_t, ptr %1107, i32 0, i32 1
  %1109 = load i32, ptr %13, align 4, !tbaa !9
  %1110 = sext i32 %1109 to i64
  %1111 = getelementptr inbounds [4 x i32], ptr %1108, i64 0, i64 %1110
  %1112 = load i32, ptr %1111, align 4, !tbaa !9
  %1113 = load i32, ptr %17, align 4, !tbaa !9
  %1114 = add i32 %1113, %1112
  store i32 %1114, ptr %17, align 4, !tbaa !9
  br label %1115

1115:                                             ; preds = %1106
  %1116 = load i32, ptr %13, align 4, !tbaa !9
  %1117 = add nsw i32 %1116, 1
  store i32 %1117, ptr %13, align 4, !tbaa !9
  br label %723, !llvm.loop !51

1118:                                             ; preds = %723
  br label %1119

1119:                                             ; preds = %1118, %721
  %1120 = load ptr, ptr %9, align 8, !tbaa !5
  %1121 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1120, i32 0, i32 25
  %1122 = load i32, ptr %1121, align 4, !tbaa !30
  %1123 = icmp eq i32 %1122, 1
  br i1 %1123, label %1144, label %1124

1124:                                             ; preds = %1119
  %1125 = load ptr, ptr %9, align 8, !tbaa !5
  %1126 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1125, i32 0, i32 26
  %1127 = load i32, ptr %1126, align 8, !tbaa !31
  %1128 = icmp eq i32 %1127, 1
  br i1 %1128, label %1144, label %1129

1129:                                             ; preds = %1124
  %1130 = load ptr, ptr %9, align 8, !tbaa !5
  %1131 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1130, i32 0, i32 27
  %1132 = load i32, ptr %1131, align 4, !tbaa !32
  %1133 = icmp eq i32 %1132, 1
  br i1 %1133, label %1144, label %1134

1134:                                             ; preds = %1129
  %1135 = load ptr, ptr %9, align 8, !tbaa !5
  %1136 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1135, i32 0, i32 28
  %1137 = load i32, ptr %1136, align 8, !tbaa !33
  %1138 = icmp eq i32 %1137, 1
  br i1 %1138, label %1144, label %1139

1139:                                             ; preds = %1134
  %1140 = load ptr, ptr %9, align 8, !tbaa !5
  %1141 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1140, i32 0, i32 29
  %1142 = load i32, ptr %1141, align 4, !tbaa !34
  %1143 = icmp eq i32 %1142, 1
  br i1 %1143, label %1144, label %1158

1144:                                             ; preds = %1139, %1134, %1129, %1124, %1119
  %1145 = load ptr, ptr %7, align 8, !tbaa !5
  %1146 = load ptr, ptr %9, align 8, !tbaa !5
  %1147 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1146, i32 0, i32 20
  %1148 = load i32, ptr %1147, align 8, !tbaa !37
  %1149 = load ptr, ptr %8, align 8, !tbaa !5
  %1150 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %1149, i32 0, i32 17
  %1151 = load i32, ptr %1150, align 4, !tbaa !35
  %1152 = load ptr, ptr %10, align 8, !tbaa !5
  %1153 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %1152, i32 0, i32 3
  %1154 = load i32, ptr %1153, align 1, !tbaa !52
  %1155 = zext i32 %1154 to i64
  %1156 = mul nsw i64 %1155, 4
  %1157 = sdiv i64 %1156, 4
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef %1145, i32 noundef %1148, i32 noundef %1151, i64 noundef %1157)
  br label %1158

1158:                                             ; preds = %1144, %1139
  br label %1831

1159:                                             ; preds = %147, %135
  %1160 = load ptr, ptr %9, align 8, !tbaa !5
  %1161 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1160, i32 0, i32 25
  %1162 = load i32, ptr %1161, align 4, !tbaa !30
  %1163 = icmp eq i32 %1162, 1
  br i1 %1163, label %1184, label %1164

1164:                                             ; preds = %1159
  %1165 = load ptr, ptr %9, align 8, !tbaa !5
  %1166 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1165, i32 0, i32 26
  %1167 = load i32, ptr %1166, align 8, !tbaa !31
  %1168 = icmp eq i32 %1167, 1
  br i1 %1168, label %1184, label %1169

1169:                                             ; preds = %1164
  %1170 = load ptr, ptr %9, align 8, !tbaa !5
  %1171 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1170, i32 0, i32 27
  %1172 = load i32, ptr %1171, align 4, !tbaa !32
  %1173 = icmp eq i32 %1172, 1
  br i1 %1173, label %1184, label %1174

1174:                                             ; preds = %1169
  %1175 = load ptr, ptr %9, align 8, !tbaa !5
  %1176 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1175, i32 0, i32 28
  %1177 = load i32, ptr %1176, align 8, !tbaa !33
  %1178 = icmp eq i32 %1177, 1
  br i1 %1178, label %1184, label %1179

1179:                                             ; preds = %1174
  %1180 = load ptr, ptr %9, align 8, !tbaa !5
  %1181 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1180, i32 0, i32 29
  %1182 = load i32, ptr %1181, align 4, !tbaa !34
  %1183 = icmp eq i32 %1182, 1
  br i1 %1183, label %1184, label %1795

1184:                                             ; preds = %1179, %1174, %1169, %1164, %1159
  %1185 = load ptr, ptr %10, align 8, !tbaa !5
  %1186 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %1185, i32 0, i32 8
  %1187 = getelementptr inbounds [3 x i8], ptr %1186, i64 0, i64 0
  %1188 = call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef %1187)
  %1189 = icmp eq i32 12, %1188
  br i1 %1189, label %1190, label %1196

1190:                                             ; preds = %1184
  %1191 = load ptr, ptr %10, align 8, !tbaa !5
  %1192 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %1191, i32 0, i32 8
  %1193 = getelementptr inbounds [3 x i8], ptr %1192, i64 0, i64 0
  %1194 = call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef %1193)
  %1195 = icmp eq i32 1, %1194
  br i1 %1195, label %1795, label %1196

1196:                                             ; preds = %1190, %1184
  %1197 = load ptr, ptr %9, align 8, !tbaa !5
  %1198 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1197, i32 0, i32 29
  %1199 = load i32, ptr %1198, align 4, !tbaa !34
  %1200 = icmp eq i32 %1199, 1
  br i1 %1200, label %1201, label %1313

1201:                                             ; preds = %1196
  %1202 = load i32, ptr %25, align 4, !tbaa !9
  %1203 = load ptr, ptr %8, align 8, !tbaa !5
  %1204 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %1203, i32 0, i32 23
  %1205 = load i32, ptr %1204, align 4, !tbaa !20
  %1206 = icmp eq i32 %1202, %1205
  br i1 %1206, label %1207, label %1217

1207:                                             ; preds = %1201
  %1208 = load ptr, ptr %9, align 8, !tbaa !5
  %1209 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1208, i32 0, i32 24
  %1210 = load i32, ptr %1209, align 8, !tbaa !36
  %1211 = icmp eq i32 %1210, 1
  br i1 %1211, label %1212, label %1217

1212:                                             ; preds = %1207
  %1213 = load ptr, ptr %7, align 8, !tbaa !5
  %1214 = load ptr, ptr %8, align 8, !tbaa !5
  %1215 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %1214, i32 0, i32 23
  %1216 = load i32, ptr %1215, align 4, !tbaa !20
  call void @libxsmm_x86_instruction_push_reg(ptr noundef %1213, i32 noundef %1216)
  br label %1217

1217:                                             ; preds = %1212, %1207, %1201
  %1218 = load ptr, ptr %7, align 8, !tbaa !5
  %1219 = load ptr, ptr %9, align 8, !tbaa !5
  %1220 = load i32, ptr %25, align 4, !tbaa !9
  call void @libxsmm_generator_gemm_getval_stack_var(ptr noundef %1218, ptr noundef %1219, i32 noundef 7, i32 noundef %1220)
  %1221 = load ptr, ptr %7, align 8, !tbaa !5
  %1222 = load ptr, ptr %9, align 8, !tbaa !5
  %1223 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1222, i32 0, i32 20
  %1224 = load i32, ptr %1223, align 8, !tbaa !37
  %1225 = load ptr, ptr %8, align 8, !tbaa !5
  %1226 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %1225, i32 0, i32 19
  %1227 = load i32, ptr %1226, align 4, !tbaa !38
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef %1221, i32 noundef %1224, i32 noundef %1227, i64 noundef 0)
  store i32 0, ptr %17, align 4, !tbaa !9
  store i32 0, ptr %13, align 4, !tbaa !9
  br label %1228

1228:                                             ; preds = %1280, %1217
  %1229 = load i32, ptr %13, align 4, !tbaa !9
  %1230 = load i32, ptr %21, align 4, !tbaa !9
  %1231 = icmp slt i32 %1229, %1230
  br i1 %1231, label %1232, label %1283

1232:                                             ; preds = %1228
  store i32 0, ptr %16, align 4, !tbaa !9
  store i32 0, ptr %14, align 4, !tbaa !9
  br label %1233

1233:                                             ; preds = %1268, %1232
  %1234 = load i32, ptr %14, align 4, !tbaa !9
  %1235 = load i32, ptr %22, align 4, !tbaa !9
  %1236 = icmp slt i32 %1234, %1235
  br i1 %1236, label %1237, label %1271

1237:                                             ; preds = %1233
  %1238 = load ptr, ptr %7, align 8, !tbaa !5
  %1239 = load ptr, ptr %9, align 8, !tbaa !5
  %1240 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1239, i32 0, i32 0
  %1241 = load i32, ptr %1240, align 8, !tbaa !41
  %1242 = load i32, ptr %25, align 4, !tbaa !9
  %1243 = load ptr, ptr %8, align 8, !tbaa !5
  %1244 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %1243, i32 0, i32 19
  %1245 = load i32, ptr %1244, align 4, !tbaa !38
  %1246 = load i32, ptr %17, align 4, !tbaa !9
  %1247 = mul nsw i32 %1246, 4
  %1248 = load i32, ptr %15, align 4, !tbaa !9
  call void @libxsmm_x86_instruction_tile_move(ptr noundef %1238, i32 noundef %1241, i32 noundef 1611079755, i32 noundef %1242, i32 noundef %1245, i32 noundef 4, i32 noundef %1247, i32 noundef %1248)
  %1249 = load i32, ptr %15, align 4, !tbaa !9
  %1250 = add nsw i32 %1249, 1
  store i32 %1250, ptr %15, align 4, !tbaa !9
  %1251 = load i32, ptr %22, align 4, !tbaa !9
  %1252 = icmp eq i32 %1251, 1
  br i1 %1252, label %1253, label %1259

1253:                                             ; preds = %1237
  %1254 = load i32, ptr %23, align 4, !tbaa !9
  %1255 = icmp eq i32 %1254, 0
  br i1 %1255, label %1256, label %1259

1256:                                             ; preds = %1253
  %1257 = load i32, ptr %15, align 4, !tbaa !9
  %1258 = add nsw i32 %1257, 1
  store i32 %1258, ptr %15, align 4, !tbaa !9
  br label %1259

1259:                                             ; preds = %1256, %1253, %1237
  %1260 = load ptr, ptr %11, align 8, !tbaa !5
  %1261 = getelementptr inbounds %struct.libxsmm_blocking_info_t, ptr %1260, i32 0, i32 1
  %1262 = load i32, ptr %14, align 4, !tbaa !9
  %1263 = sext i32 %1262 to i64
  %1264 = getelementptr inbounds [4 x i32], ptr %1261, i64 0, i64 %1263
  %1265 = load i32, ptr %1264, align 4, !tbaa !9
  %1266 = load i32, ptr %16, align 4, !tbaa !9
  %1267 = add i32 %1266, %1265
  store i32 %1267, ptr %16, align 4, !tbaa !9
  br label %1268

1268:                                             ; preds = %1259
  %1269 = load i32, ptr %14, align 4, !tbaa !9
  %1270 = add nsw i32 %1269, 1
  store i32 %1270, ptr %14, align 4, !tbaa !9
  br label %1233, !llvm.loop !53

1271:                                             ; preds = %1233
  %1272 = load ptr, ptr %12, align 8, !tbaa !5
  %1273 = getelementptr inbounds %struct.libxsmm_blocking_info_t, ptr %1272, i32 0, i32 1
  %1274 = load i32, ptr %13, align 4, !tbaa !9
  %1275 = sext i32 %1274 to i64
  %1276 = getelementptr inbounds [4 x i32], ptr %1273, i64 0, i64 %1275
  %1277 = load i32, ptr %1276, align 4, !tbaa !9
  %1278 = load i32, ptr %17, align 4, !tbaa !9
  %1279 = add i32 %1278, %1277
  store i32 %1279, ptr %17, align 4, !tbaa !9
  br label %1280

1280:                                             ; preds = %1271
  %1281 = load i32, ptr %13, align 4, !tbaa !9
  %1282 = add nsw i32 %1281, 1
  store i32 %1282, ptr %13, align 4, !tbaa !9
  br label %1228, !llvm.loop !54

1283:                                             ; preds = %1228
  %1284 = load i32, ptr %25, align 4, !tbaa !9
  %1285 = load ptr, ptr %8, align 8, !tbaa !5
  %1286 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %1285, i32 0, i32 23
  %1287 = load i32, ptr %1286, align 4, !tbaa !20
  %1288 = icmp eq i32 %1284, %1287
  br i1 %1288, label %1289, label %1299

1289:                                             ; preds = %1283
  %1290 = load ptr, ptr %9, align 8, !tbaa !5
  %1291 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1290, i32 0, i32 24
  %1292 = load i32, ptr %1291, align 8, !tbaa !36
  %1293 = icmp eq i32 %1292, 1
  br i1 %1293, label %1294, label %1299

1294:                                             ; preds = %1289
  %1295 = load ptr, ptr %7, align 8, !tbaa !5
  %1296 = load ptr, ptr %8, align 8, !tbaa !5
  %1297 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %1296, i32 0, i32 23
  %1298 = load i32, ptr %1297, align 4, !tbaa !20
  call void @libxsmm_x86_instruction_pop_reg(ptr noundef %1295, i32 noundef %1298)
  br label %1299

1299:                                             ; preds = %1294, %1289, %1283
  %1300 = load ptr, ptr %7, align 8, !tbaa !5
  %1301 = load ptr, ptr %9, align 8, !tbaa !5
  %1302 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1301, i32 0, i32 20
  %1303 = load i32, ptr %1302, align 8, !tbaa !37
  %1304 = load ptr, ptr %8, align 8, !tbaa !5
  %1305 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %1304, i32 0, i32 19
  %1306 = load i32, ptr %1305, align 4, !tbaa !38
  %1307 = load ptr, ptr %10, align 8, !tbaa !5
  %1308 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %1307, i32 0, i32 5
  %1309 = load i32, ptr %1308, align 1, !tbaa !44
  %1310 = zext i32 %1309 to i64
  %1311 = mul nsw i64 %1310, 4
  %1312 = sdiv i64 %1311, 4
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef %1300, i32 noundef %1303, i32 noundef %1306, i64 noundef %1312)
  br label %1794

1313:                                             ; preds = %1196
  %1314 = load ptr, ptr %9, align 8, !tbaa !5
  %1315 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1314, i32 0, i32 25
  %1316 = load i32, ptr %1315, align 4, !tbaa !30
  %1317 = icmp eq i32 %1316, 1
  br i1 %1317, label %1333, label %1318

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

1323:                                             ; preds = %1318
  %1324 = load ptr, ptr %9, align 8, !tbaa !5
  %1325 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1324, i32 0, i32 27
  %1326 = load i32, ptr %1325, align 4, !tbaa !32
  %1327 = icmp eq i32 %1326, 1
  br i1 %1327, label %1333, label %1328

1328:                                             ; preds = %1323
  %1329 = load ptr, ptr %9, align 8, !tbaa !5
  %1330 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1329, i32 0, i32 28
  %1331 = load i32, ptr %1330, align 8, !tbaa !33
  %1332 = icmp eq i32 %1331, 1
  br i1 %1332, label %1333, label %1793

1333:                                             ; preds = %1328, %1323, %1318, %1313
  call void @llvm.lifetime.start.p0(i64 4, ptr %38) #4
  %1334 = load ptr, ptr %9, align 8, !tbaa !5
  %1335 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1334, i32 0, i32 23
  %1336 = load i32, ptr %1335, align 4, !tbaa !17
  %1337 = icmp eq i32 %1336, 0
  br i1 %1337, label %1338, label %1342

1338:                                             ; preds = %1333
  %1339 = load ptr, ptr %8, align 8, !tbaa !5
  %1340 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %1339, i32 0, i32 23
  %1341 = load i32, ptr %1340, align 4, !tbaa !20
  br label %1346

1342:                                             ; preds = %1333
  %1343 = load ptr, ptr %8, align 8, !tbaa !5
  %1344 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %1343, i32 0, i32 22
  %1345 = load i32, ptr %1344, align 4, !tbaa !18
  br label %1346

1346:                                             ; preds = %1342, %1338
  %1347 = phi i32 [ %1341, %1338 ], [ %1345, %1342 ]
  store i32 %1347, ptr %38, align 4, !tbaa !9
  %1348 = load i32, ptr %25, align 4, !tbaa !9
  %1349 = load ptr, ptr %8, align 8, !tbaa !5
  %1350 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %1349, i32 0, i32 23
  %1351 = load i32, ptr %1350, align 4, !tbaa !20
  %1352 = icmp eq i32 %1348, %1351
  br i1 %1352, label %1353, label %1363

1353:                                             ; preds = %1346
  %1354 = load ptr, ptr %9, align 8, !tbaa !5
  %1355 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1354, i32 0, i32 24
  %1356 = load i32, ptr %1355, align 8, !tbaa !36
  %1357 = icmp eq i32 %1356, 1
  br i1 %1357, label %1358, label %1363

1358:                                             ; preds = %1353
  %1359 = load ptr, ptr %7, align 8, !tbaa !5
  %1360 = load ptr, ptr %8, align 8, !tbaa !5
  %1361 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %1360, i32 0, i32 23
  %1362 = load i32, ptr %1361, align 4, !tbaa !20
  call void @libxsmm_x86_instruction_push_reg(ptr noundef %1359, i32 noundef %1362)
  br label %1363

1363:                                             ; preds = %1358, %1353, %1346
  %1364 = load i32, ptr %25, align 4, !tbaa !9
  %1365 = load ptr, ptr %8, align 8, !tbaa !5
  %1366 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %1365, i32 0, i32 22
  %1367 = load i32, ptr %1366, align 4, !tbaa !18
  %1368 = icmp eq i32 %1364, %1367
  br i1 %1368, label %1369, label %1379

1369:                                             ; preds = %1363
  %1370 = load ptr, ptr %9, align 8, !tbaa !5
  %1371 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1370, i32 0, i32 23
  %1372 = load i32, ptr %1371, align 4, !tbaa !17
  %1373 = icmp eq i32 %1372, 1
  br i1 %1373, label %1374, label %1379

1374:                                             ; preds = %1369
  %1375 = load ptr, ptr %7, align 8, !tbaa !5
  %1376 = load ptr, ptr %8, align 8, !tbaa !5
  %1377 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %1376, i32 0, i32 22
  %1378 = load i32, ptr %1377, align 4, !tbaa !18
  call void @libxsmm_x86_instruction_push_reg(ptr noundef %1375, i32 noundef %1378)
  br label %1379

1379:                                             ; preds = %1374, %1369, %1363
  %1380 = load i32, ptr %38, align 4, !tbaa !9
  %1381 = load ptr, ptr %8, align 8, !tbaa !5
  %1382 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %1381, i32 0, i32 23
  %1383 = load i32, ptr %1382, align 4, !tbaa !20
  %1384 = icmp eq i32 %1380, %1383
  br i1 %1384, label %1385, label %1395

1385:                                             ; preds = %1379
  %1386 = load ptr, ptr %9, align 8, !tbaa !5
  %1387 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1386, i32 0, i32 24
  %1388 = load i32, ptr %1387, align 8, !tbaa !36
  %1389 = icmp eq i32 %1388, 1
  br i1 %1389, label %1390, label %1395

1390:                                             ; preds = %1385
  %1391 = load ptr, ptr %7, align 8, !tbaa !5
  %1392 = load ptr, ptr %8, align 8, !tbaa !5
  %1393 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %1392, i32 0, i32 23
  %1394 = load i32, ptr %1393, align 4, !tbaa !20
  call void @libxsmm_x86_instruction_push_reg(ptr noundef %1391, i32 noundef %1394)
  br label %1395

1395:                                             ; preds = %1390, %1385, %1379
  %1396 = load i32, ptr %38, align 4, !tbaa !9
  %1397 = load ptr, ptr %8, align 8, !tbaa !5
  %1398 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %1397, i32 0, i32 22
  %1399 = load i32, ptr %1398, align 4, !tbaa !18
  %1400 = icmp eq i32 %1396, %1399
  br i1 %1400, label %1401, label %1411

1401:                                             ; preds = %1395
  %1402 = load ptr, ptr %9, align 8, !tbaa !5
  %1403 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1402, i32 0, i32 23
  %1404 = load i32, ptr %1403, align 4, !tbaa !17
  %1405 = icmp eq i32 %1404, 1
  br i1 %1405, label %1406, label %1411

1406:                                             ; preds = %1401
  %1407 = load ptr, ptr %7, align 8, !tbaa !5
  %1408 = load ptr, ptr %8, align 8, !tbaa !5
  %1409 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %1408, i32 0, i32 22
  %1410 = load i32, ptr %1409, align 4, !tbaa !18
  call void @libxsmm_x86_instruction_push_reg(ptr noundef %1407, i32 noundef %1410)
  br label %1411

1411:                                             ; preds = %1406, %1401, %1395
  %1412 = load ptr, ptr %7, align 8, !tbaa !5
  %1413 = load ptr, ptr %9, align 8, !tbaa !5
  %1414 = load i32, ptr %25, align 4, !tbaa !9
  call void @libxsmm_generator_gemm_getval_stack_var(ptr noundef %1412, ptr noundef %1413, i32 noundef 7, i32 noundef %1414)
  %1415 = load ptr, ptr %7, align 8, !tbaa !5
  %1416 = load ptr, ptr %9, align 8, !tbaa !5
  %1417 = load i32, ptr %38, align 4, !tbaa !9
  call void @libxsmm_generator_gemm_getval_stack_var(ptr noundef %1415, ptr noundef %1416, i32 noundef 6, i32 noundef %1417)
  store i32 0, ptr %17, align 4, !tbaa !9
  store i32 0, ptr %13, align 4, !tbaa !9
  br label %1418

1418:                                             ; preds = %1649, %1411
  %1419 = load i32, ptr %13, align 4, !tbaa !9
  %1420 = load i32, ptr %21, align 4, !tbaa !9
  %1421 = icmp slt i32 %1419, %1420
  br i1 %1421, label %1422, label %1652

1422:                                             ; preds = %1418
  call void @llvm.lifetime.start.p0(i64 4, ptr %39) #4
  %1423 = load ptr, ptr %9, align 8, !tbaa !5
  %1424 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1423, i32 0, i32 25
  %1425 = load i32, ptr %1424, align 4, !tbaa !30
  %1426 = icmp eq i32 %1425, 1
  br i1 %1426, label %1427, label %1428

1427:                                             ; preds = %1422
  br label %1451

1428:                                             ; preds = %1422
  %1429 = load ptr, ptr %9, align 8, !tbaa !5
  %1430 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1429, i32 0, i32 26
  %1431 = load i32, ptr %1430, align 8, !tbaa !31
  %1432 = icmp eq i32 %1431, 1
  br i1 %1432, label %1433, label %1434

1433:                                             ; preds = %1428
  br label %1449

1434:                                             ; preds = %1428
  %1435 = load ptr, ptr %9, align 8, !tbaa !5
  %1436 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1435, i32 0, i32 27
  %1437 = load i32, ptr %1436, align 4, !tbaa !32
  %1438 = icmp eq i32 %1437, 1
  br i1 %1438, label %1439, label %1440

1439:                                             ; preds = %1434
  br label %1447

1440:                                             ; preds = %1434
  %1441 = load ptr, ptr %9, align 8, !tbaa !5
  %1442 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1441, i32 0, i32 28
  %1443 = load i32, ptr %1442, align 8, !tbaa !33
  %1444 = icmp eq i32 %1443, 1
  %1445 = zext i1 %1444 to i64
  %1446 = select i1 %1444, i32 5, i32 1
  br label %1447

1447:                                             ; preds = %1440, %1439
  %1448 = phi i32 [ 4, %1439 ], [ %1446, %1440 ]
  br label %1449

1449:                                             ; preds = %1447, %1433
  %1450 = phi i32 [ 3, %1433 ], [ %1448, %1447 ]
  br label %1451

1451:                                             ; preds = %1449, %1427
  %1452 = phi i32 [ 2, %1427 ], [ %1450, %1449 ]
  store i32 %1452, ptr %39, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 1, ptr %40) #4
  %1453 = load ptr, ptr %9, align 8, !tbaa !5
  %1454 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1453, i32 0, i32 29
  %1455 = load i32, ptr %1454, align 4, !tbaa !34
  %1456 = icmp eq i32 %1455, 1
  br i1 %1456, label %1457, label %1458

1457:                                             ; preds = %1451
  br label %1472

1458:                                             ; preds = %1451
  %1459 = load ptr, ptr %9, align 8, !tbaa !5
  %1460 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1459, i32 0, i32 25
  %1461 = load i32, ptr %1460, align 4, !tbaa !30
  %1462 = icmp eq i32 %1461, 1
  br i1 %1462, label %1468, label %1463

1463:                                             ; preds = %1458
  %1464 = load ptr, ptr %9, align 8, !tbaa !5
  %1465 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1464, i32 0, i32 26
  %1466 = load i32, ptr %1465, align 8, !tbaa !31
  %1467 = icmp eq i32 %1466, 1
  br label %1468

1468:                                             ; preds = %1463, %1458
  %1469 = phi i1 [ true, %1458 ], [ %1467, %1463 ]
  %1470 = zext i1 %1469 to i64
  %1471 = select i1 %1469, i32 121, i32 120
  br label %1472

1472:                                             ; preds = %1468, %1457
  %1473 = phi i32 [ 122, %1457 ], [ %1471, %1468 ]
  %1474 = trunc i32 %1473 to i8
  store i8 %1474, ptr %40, align 1, !tbaa !40
  call void @llvm.lifetime.start.p0(i64 4, ptr %41) #4
  %1475 = load ptr, ptr %9, align 8, !tbaa !5
  %1476 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1475, i32 0, i32 29
  %1477 = load i32, ptr %1476, align 4, !tbaa !34
  %1478 = icmp eq i32 %1477, 1
  br i1 %1478, label %1479, label %1480

1479:                                             ; preds = %1472
  br label %1494

1480:                                             ; preds = %1472
  %1481 = load ptr, ptr %9, align 8, !tbaa !5
  %1482 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1481, i32 0, i32 25
  %1483 = load i32, ptr %1482, align 4, !tbaa !30
  %1484 = icmp eq i32 %1483, 1
  br i1 %1484, label %1490, label %1485

1485:                                             ; preds = %1480
  %1486 = load ptr, ptr %9, align 8, !tbaa !5
  %1487 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1486, i32 0, i32 26
  %1488 = load i32, ptr %1487, align 8, !tbaa !31
  %1489 = icmp eq i32 %1488, 1
  br label %1490

1490:                                             ; preds = %1485, %1480
  %1491 = phi i1 [ true, %1480 ], [ %1489, %1485 ]
  %1492 = zext i1 %1491 to i64
  %1493 = select i1 %1491, i32 -528017809, i32 -536406417
  br label %1494

1494:                                             ; preds = %1490, %1479
  %1495 = phi i32 [ 537138704, %1479 ], [ %1493, %1490 ]
  store i32 %1495, ptr %41, align 4, !tbaa !9
  %1496 = load i32, ptr %13, align 4, !tbaa !9
  %1497 = load ptr, ptr %9, align 8, !tbaa !5
  %1498 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1497, i32 0, i32 43
  %1499 = load i32, ptr %1498, align 4, !tbaa !42
  %1500 = sub i32 30, %1499
  %1501 = urem i32 %1496, %1500
  %1502 = load ptr, ptr %9, align 8, !tbaa !5
  %1503 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1502, i32 0, i32 43
  %1504 = load i32, ptr %1503, align 4, !tbaa !42
  %1505 = add i32 %1501, %1504
  store i32 %1505, ptr %19, align 4, !tbaa !9
  %1506 = load ptr, ptr %7, align 8, !tbaa !5
  %1507 = load ptr, ptr %9, align 8, !tbaa !5
  %1508 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1507, i32 0, i32 0
  %1509 = load i32, ptr %1508, align 8, !tbaa !41
  %1510 = load i32, ptr %41, align 4, !tbaa !9
  %1511 = load i32, ptr %25, align 4, !tbaa !9
  %1512 = load i32, ptr %17, align 4, !tbaa !9
  %1513 = load i32, ptr %39, align 4, !tbaa !9
  %1514 = icmp eq i32 0, %1513
  br i1 %1514, label %1515, label %1516

1515:                                             ; preds = %1494
  br label %1596

1516:                                             ; preds = %1494
  %1517 = load i32, ptr %39, align 4, !tbaa !9
  %1518 = icmp eq i32 1, %1517
  br i1 %1518, label %1519, label %1520

1519:                                             ; preds = %1516
  br label %1594

1520:                                             ; preds = %1516
  %1521 = load i32, ptr %39, align 4, !tbaa !9
  %1522 = icmp eq i32 2, %1521
  br i1 %1522, label %1523, label %1524

1523:                                             ; preds = %1520
  br label %1592

1524:                                             ; preds = %1520
  %1525 = load i32, ptr %39, align 4, !tbaa !9
  %1526 = icmp eq i32 3, %1525
  br i1 %1526, label %1527, label %1528

1527:                                             ; preds = %1524
  br label %1590

1528:                                             ; preds = %1524
  %1529 = load i32, ptr %39, align 4, !tbaa !9
  %1530 = icmp eq i32 4, %1529
  br i1 %1530, label %1531, label %1532

1531:                                             ; preds = %1528
  br label %1588

1532:                                             ; preds = %1528
  %1533 = load i32, ptr %39, align 4, !tbaa !9
  %1534 = icmp eq i32 5, %1533
  br i1 %1534, label %1535, label %1536

1535:                                             ; preds = %1532
  br label %1586

1536:                                             ; preds = %1532
  %1537 = load i32, ptr %39, align 4, !tbaa !9
  %1538 = icmp eq i32 6, %1537
  br i1 %1538, label %1539, label %1540

1539:                                             ; preds = %1536
  br label %1584

1540:                                             ; preds = %1536
  %1541 = load i32, ptr %39, align 4, !tbaa !9
  %1542 = icmp eq i32 7, %1541
  br i1 %1542, label %1543, label %1544

1543:                                             ; preds = %1540
  br label %1582

1544:                                             ; preds = %1540
  %1545 = load i32, ptr %39, align 4, !tbaa !9
  %1546 = icmp eq i32 8, %1545
  br i1 %1546, label %1547, label %1548

1547:                                             ; preds = %1544
  br label %1580

1548:                                             ; preds = %1544
  %1549 = load i32, ptr %39, align 4, !tbaa !9
  %1550 = icmp eq i32 9, %1549
  br i1 %1550, label %1551, label %1552

1551:                                             ; preds = %1548
  br label %1578

1552:                                             ; preds = %1548
  %1553 = load i32, ptr %39, align 4, !tbaa !9
  %1554 = icmp eq i32 10, %1553
  br i1 %1554, label %1555, label %1556

1555:                                             ; preds = %1552
  br label %1576

1556:                                             ; preds = %1552
  %1557 = load i32, ptr %39, align 4, !tbaa !9
  %1558 = icmp eq i32 11, %1557
  br i1 %1558, label %1559, label %1560

1559:                                             ; preds = %1556
  br label %1574

1560:                                             ; preds = %1556
  %1561 = load i32, ptr %39, align 4, !tbaa !9
  %1562 = icmp eq i32 12, %1561
  br i1 %1562, label %1563, label %1564

1563:                                             ; preds = %1560
  br label %1572

1564:                                             ; preds = %1560
  %1565 = load i32, ptr %39, align 4, !tbaa !9
  %1566 = icmp eq i32 13, %1565
  br i1 %1566, label %1567, label %1568

1567:                                             ; preds = %1564
  br label %1570

1568:                                             ; preds = %1564
  call void @__assert_fail(ptr noundef @.str.2, ptr noundef @.str.1, i32 noundef 1944, ptr noundef @__PRETTY_FUNCTION__.libxsmm_generator_gemm_load_C_amx) #5
  unreachable

1569:                                             ; No predecessors!
  br label %1570

1570:                                             ; preds = %1569, %1567
  %1571 = phi i32 [ 1, %1567 ], [ 0, %1569 ]
  br label %1572

1572:                                             ; preds = %1570, %1563
  %1573 = phi i32 [ 1, %1563 ], [ %1571, %1570 ]
  br label %1574

1574:                                             ; preds = %1572, %1559
  %1575 = phi i32 [ 2, %1559 ], [ %1573, %1572 ]
  br label %1576

1576:                                             ; preds = %1574, %1555
  %1577 = phi i32 [ 2, %1555 ], [ %1575, %1574 ]
  br label %1578

1578:                                             ; preds = %1576, %1551
  %1579 = phi i32 [ 4, %1551 ], [ %1577, %1576 ]
  br label %1580

1580:                                             ; preds = %1578, %1547
  %1581 = phi i32 [ 4, %1547 ], [ %1579, %1578 ]
  br label %1582

1582:                                             ; preds = %1580, %1543
  %1583 = phi i32 [ 8, %1543 ], [ %1581, %1580 ]
  br label %1584

1584:                                             ; preds = %1582, %1539
  %1585 = phi i32 [ 8, %1539 ], [ %1583, %1582 ]
  br label %1586

1586:                                             ; preds = %1584, %1535
  %1587 = phi i32 [ 1, %1535 ], [ %1585, %1584 ]
  br label %1588

1588:                                             ; preds = %1586, %1531
  %1589 = phi i32 [ 1, %1531 ], [ %1587, %1586 ]
  br label %1590

1590:                                             ; preds = %1588, %1527
  %1591 = phi i32 [ 2, %1527 ], [ %1589, %1588 ]
  br label %1592

1592:                                             ; preds = %1590, %1523
  %1593 = phi i32 [ 2, %1523 ], [ %1591, %1590 ]
  br label %1594

1594:                                             ; preds = %1592, %1519
  %1595 = phi i32 [ 4, %1519 ], [ %1593, %1592 ]
  br label %1596

1596:                                             ; preds = %1594, %1515
  %1597 = phi i32 [ 8, %1515 ], [ %1595, %1594 ]
  %1598 = mul nsw i32 %1512, %1597
  %1599 = load i8, ptr %40, align 1, !tbaa !40
  %1600 = load i32, ptr %19, align 4, !tbaa !9
  %1601 = load i32, ptr %13, align 4, !tbaa !9
  %1602 = load i32, ptr %21, align 4, !tbaa !9
  %1603 = sub nsw i32 %1602, 1
  %1604 = icmp eq i32 %1601, %1603
  br i1 %1604, label %1605, label %1609

1605:                                             ; preds = %1596
  %1606 = load ptr, ptr %9, align 8, !tbaa !5
  %1607 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1606, i32 0, i32 71
  %1608 = load i32, ptr %1607, align 4, !tbaa !26
  br label %1610

1609:                                             ; preds = %1596
  br label %1610

1610:                                             ; preds = %1609, %1605
  %1611 = phi i32 [ %1608, %1605 ], [ 0, %1609 ]
  call void @libxsmm_x86_instruction_vec_move(ptr noundef %1506, i32 noundef %1509, i32 noundef %1510, i32 noundef %1511, i32 noundef 127, i32 noundef 0, i32 noundef %1598, i8 noundef signext %1599, i32 noundef %1600, i32 noundef %1611, i32 noundef 1, i32 noundef 0)
  %1612 = load ptr, ptr %7, align 8, !tbaa !5
  %1613 = load ptr, ptr %9, align 8, !tbaa !5
  %1614 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1613, i32 0, i32 21
  %1615 = load i8, ptr %1614, align 4, !tbaa !27
  %1616 = load i32, ptr %39, align 4, !tbaa !9
  %1617 = load i32, ptr %19, align 4, !tbaa !9
  %1618 = load i32, ptr %19, align 4, !tbaa !9
  call void @libxsmm_generator_cvt_to_ps_avx512(ptr noundef %1612, i8 noundef signext %1615, i32 noundef %1616, i32 noundef %1617, i32 noundef %1618)
  %1619 = load ptr, ptr %7, align 8, !tbaa !5
  %1620 = load ptr, ptr %9, align 8, !tbaa !5
  %1621 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1620, i32 0, i32 0
  %1622 = load i32, ptr %1621, align 8, !tbaa !41
  %1623 = load i32, ptr %38, align 4, !tbaa !9
  %1624 = load i32, ptr %17, align 4, !tbaa !9
  %1625 = mul nsw i32 %1624, 4
  %1626 = load ptr, ptr %9, align 8, !tbaa !5
  %1627 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1626, i32 0, i32 21
  %1628 = load i8, ptr %1627, align 4, !tbaa !27
  %1629 = load i32, ptr %19, align 4, !tbaa !9
  %1630 = load i32, ptr %13, align 4, !tbaa !9
  %1631 = load i32, ptr %21, align 4, !tbaa !9
  %1632 = sub nsw i32 %1631, 1
  %1633 = icmp eq i32 %1630, %1632
  br i1 %1633, label %1634, label %1638

1634:                                             ; preds = %1610
  %1635 = load ptr, ptr %9, align 8, !tbaa !5
  %1636 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1635, i32 0, i32 71
  %1637 = load i32, ptr %1636, align 4, !tbaa !26
  br label %1639

1638:                                             ; preds = %1610
  br label %1639

1639:                                             ; preds = %1638, %1634
  %1640 = phi i32 [ %1637, %1634 ], [ 0, %1638 ]
  call void @libxsmm_x86_instruction_vec_move(ptr noundef %1619, i32 noundef %1622, i32 noundef 537138704, i32 noundef %1623, i32 noundef 127, i32 noundef 0, i32 noundef %1625, i8 noundef signext %1628, i32 noundef %1629, i32 noundef %1640, i32 noundef 0, i32 noundef 1)
  %1641 = load ptr, ptr %12, align 8, !tbaa !5
  %1642 = getelementptr inbounds %struct.libxsmm_blocking_info_t, ptr %1641, i32 0, i32 1
  %1643 = load i32, ptr %13, align 4, !tbaa !9
  %1644 = sext i32 %1643 to i64
  %1645 = getelementptr inbounds [4 x i32], ptr %1642, i64 0, i64 %1644
  %1646 = load i32, ptr %1645, align 4, !tbaa !9
  %1647 = load i32, ptr %17, align 4, !tbaa !9
  %1648 = add i32 %1647, %1646
  store i32 %1648, ptr %17, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #4
  call void @llvm.lifetime.end.p0(i64 1, ptr %40) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #4
  br label %1649

1649:                                             ; preds = %1639
  %1650 = load i32, ptr %13, align 4, !tbaa !9
  %1651 = add nsw i32 %1650, 1
  store i32 %1651, ptr %13, align 4, !tbaa !9
  br label %1418, !llvm.loop !55

1652:                                             ; preds = %1418
  %1653 = load ptr, ptr %7, align 8, !tbaa !5
  %1654 = load ptr, ptr %9, align 8, !tbaa !5
  %1655 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1654, i32 0, i32 20
  %1656 = load i32, ptr %1655, align 8, !tbaa !37
  %1657 = load ptr, ptr %8, align 8, !tbaa !5
  %1658 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %1657, i32 0, i32 19
  %1659 = load i32, ptr %1658, align 4, !tbaa !38
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef %1653, i32 noundef %1656, i32 noundef %1659, i64 noundef 0)
  store i32 0, ptr %17, align 4, !tbaa !9
  store i32 0, ptr %13, align 4, !tbaa !9
  br label %1660

1660:                                             ; preds = %1712, %1652
  %1661 = load i32, ptr %13, align 4, !tbaa !9
  %1662 = load i32, ptr %21, align 4, !tbaa !9
  %1663 = icmp slt i32 %1661, %1662
  br i1 %1663, label %1664, label %1715

1664:                                             ; preds = %1660
  store i32 0, ptr %16, align 4, !tbaa !9
  store i32 0, ptr %14, align 4, !tbaa !9
  br label %1665

1665:                                             ; preds = %1700, %1664
  %1666 = load i32, ptr %14, align 4, !tbaa !9
  %1667 = load i32, ptr %22, align 4, !tbaa !9
  %1668 = icmp slt i32 %1666, %1667
  br i1 %1668, label %1669, label %1703

1669:                                             ; preds = %1665
  %1670 = load ptr, ptr %7, align 8, !tbaa !5
  %1671 = load ptr, ptr %9, align 8, !tbaa !5
  %1672 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1671, i32 0, i32 0
  %1673 = load i32, ptr %1672, align 8, !tbaa !41
  %1674 = load i32, ptr %38, align 4, !tbaa !9
  %1675 = load ptr, ptr %8, align 8, !tbaa !5
  %1676 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %1675, i32 0, i32 19
  %1677 = load i32, ptr %1676, align 4, !tbaa !38
  %1678 = load i32, ptr %17, align 4, !tbaa !9
  %1679 = mul nsw i32 %1678, 4
  %1680 = load i32, ptr %15, align 4, !tbaa !9
  call void @libxsmm_x86_instruction_tile_move(ptr noundef %1670, i32 noundef %1673, i32 noundef 1611079755, i32 noundef %1674, i32 noundef %1677, i32 noundef 4, i32 noundef %1679, i32 noundef %1680)
  %1681 = load i32, ptr %15, align 4, !tbaa !9
  %1682 = add nsw i32 %1681, 1
  store i32 %1682, ptr %15, align 4, !tbaa !9
  %1683 = load i32, ptr %22, align 4, !tbaa !9
  %1684 = icmp eq i32 %1683, 1
  br i1 %1684, label %1685, label %1691

1685:                                             ; preds = %1669
  %1686 = load i32, ptr %23, align 4, !tbaa !9
  %1687 = icmp eq i32 %1686, 0
  br i1 %1687, label %1688, label %1691

1688:                                             ; preds = %1685
  %1689 = load i32, ptr %15, align 4, !tbaa !9
  %1690 = add nsw i32 %1689, 1
  store i32 %1690, ptr %15, align 4, !tbaa !9
  br label %1691

1691:                                             ; preds = %1688, %1685, %1669
  %1692 = load ptr, ptr %11, align 8, !tbaa !5
  %1693 = getelementptr inbounds %struct.libxsmm_blocking_info_t, ptr %1692, i32 0, i32 1
  %1694 = load i32, ptr %14, align 4, !tbaa !9
  %1695 = sext i32 %1694 to i64
  %1696 = getelementptr inbounds [4 x i32], ptr %1693, i64 0, i64 %1695
  %1697 = load i32, ptr %1696, align 4, !tbaa !9
  %1698 = load i32, ptr %16, align 4, !tbaa !9
  %1699 = add i32 %1698, %1697
  store i32 %1699, ptr %16, align 4, !tbaa !9
  br label %1700

1700:                                             ; preds = %1691
  %1701 = load i32, ptr %14, align 4, !tbaa !9
  %1702 = add nsw i32 %1701, 1
  store i32 %1702, ptr %14, align 4, !tbaa !9
  br label %1665, !llvm.loop !56

1703:                                             ; preds = %1665
  %1704 = load ptr, ptr %12, align 8, !tbaa !5
  %1705 = getelementptr inbounds %struct.libxsmm_blocking_info_t, ptr %1704, i32 0, i32 1
  %1706 = load i32, ptr %13, align 4, !tbaa !9
  %1707 = sext i32 %1706 to i64
  %1708 = getelementptr inbounds [4 x i32], ptr %1705, i64 0, i64 %1707
  %1709 = load i32, ptr %1708, align 4, !tbaa !9
  %1710 = load i32, ptr %17, align 4, !tbaa !9
  %1711 = add i32 %1710, %1709
  store i32 %1711, ptr %17, align 4, !tbaa !9
  br label %1712

1712:                                             ; preds = %1703
  %1713 = load i32, ptr %13, align 4, !tbaa !9
  %1714 = add nsw i32 %1713, 1
  store i32 %1714, ptr %13, align 4, !tbaa !9
  br label %1660, !llvm.loop !57

1715:                                             ; preds = %1660
  %1716 = load i32, ptr %38, align 4, !tbaa !9
  %1717 = load ptr, ptr %8, align 8, !tbaa !5
  %1718 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %1717, i32 0, i32 23
  %1719 = load i32, ptr %1718, align 4, !tbaa !20
  %1720 = icmp eq i32 %1716, %1719
  br i1 %1720, label %1721, label %1731

1721:                                             ; preds = %1715
  %1722 = load ptr, ptr %9, align 8, !tbaa !5
  %1723 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1722, i32 0, i32 24
  %1724 = load i32, ptr %1723, align 8, !tbaa !36
  %1725 = icmp eq i32 %1724, 1
  br i1 %1725, label %1726, label %1731

1726:                                             ; preds = %1721
  %1727 = load ptr, ptr %7, align 8, !tbaa !5
  %1728 = load ptr, ptr %8, align 8, !tbaa !5
  %1729 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %1728, i32 0, i32 23
  %1730 = load i32, ptr %1729, align 4, !tbaa !20
  call void @libxsmm_x86_instruction_pop_reg(ptr noundef %1727, i32 noundef %1730)
  br label %1731

1731:                                             ; preds = %1726, %1721, %1715
  %1732 = load i32, ptr %38, align 4, !tbaa !9
  %1733 = load ptr, ptr %8, align 8, !tbaa !5
  %1734 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %1733, i32 0, i32 22
  %1735 = load i32, ptr %1734, align 4, !tbaa !18
  %1736 = icmp eq i32 %1732, %1735
  br i1 %1736, label %1737, label %1747

1737:                                             ; preds = %1731
  %1738 = load ptr, ptr %9, align 8, !tbaa !5
  %1739 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1738, i32 0, i32 23
  %1740 = load i32, ptr %1739, align 4, !tbaa !17
  %1741 = icmp eq i32 %1740, 1
  br i1 %1741, label %1742, label %1747

1742:                                             ; preds = %1737
  %1743 = load ptr, ptr %7, align 8, !tbaa !5
  %1744 = load ptr, ptr %8, align 8, !tbaa !5
  %1745 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %1744, i32 0, i32 22
  %1746 = load i32, ptr %1745, align 4, !tbaa !18
  call void @libxsmm_x86_instruction_pop_reg(ptr noundef %1743, i32 noundef %1746)
  br label %1747

1747:                                             ; preds = %1742, %1737, %1731
  %1748 = load i32, ptr %25, align 4, !tbaa !9
  %1749 = load ptr, ptr %8, align 8, !tbaa !5
  %1750 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %1749, i32 0, i32 23
  %1751 = load i32, ptr %1750, align 4, !tbaa !20
  %1752 = icmp eq i32 %1748, %1751
  br i1 %1752, label %1753, label %1763

1753:                                             ; preds = %1747
  %1754 = load ptr, ptr %9, align 8, !tbaa !5
  %1755 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1754, i32 0, i32 24
  %1756 = load i32, ptr %1755, align 8, !tbaa !36
  %1757 = icmp eq i32 %1756, 1
  br i1 %1757, label %1758, label %1763

1758:                                             ; preds = %1753
  %1759 = load ptr, ptr %7, align 8, !tbaa !5
  %1760 = load ptr, ptr %8, align 8, !tbaa !5
  %1761 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %1760, i32 0, i32 23
  %1762 = load i32, ptr %1761, align 4, !tbaa !20
  call void @libxsmm_x86_instruction_pop_reg(ptr noundef %1759, i32 noundef %1762)
  br label %1763

1763:                                             ; preds = %1758, %1753, %1747
  %1764 = load i32, ptr %25, align 4, !tbaa !9
  %1765 = load ptr, ptr %8, align 8, !tbaa !5
  %1766 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %1765, i32 0, i32 22
  %1767 = load i32, ptr %1766, align 4, !tbaa !18
  %1768 = icmp eq i32 %1764, %1767
  br i1 %1768, label %1769, label %1779

1769:                                             ; preds = %1763
  %1770 = load ptr, ptr %9, align 8, !tbaa !5
  %1771 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1770, i32 0, i32 23
  %1772 = load i32, ptr %1771, align 4, !tbaa !17
  %1773 = icmp eq i32 %1772, 1
  br i1 %1773, label %1774, label %1779

1774:                                             ; preds = %1769
  %1775 = load ptr, ptr %7, align 8, !tbaa !5
  %1776 = load ptr, ptr %8, align 8, !tbaa !5
  %1777 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %1776, i32 0, i32 22
  %1778 = load i32, ptr %1777, align 4, !tbaa !18
  call void @libxsmm_x86_instruction_pop_reg(ptr noundef %1775, i32 noundef %1778)
  br label %1779

1779:                                             ; preds = %1774, %1769, %1763
  %1780 = load ptr, ptr %7, align 8, !tbaa !5
  %1781 = load ptr, ptr %9, align 8, !tbaa !5
  %1782 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1781, i32 0, i32 20
  %1783 = load i32, ptr %1782, align 8, !tbaa !37
  %1784 = load ptr, ptr %8, align 8, !tbaa !5
  %1785 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %1784, i32 0, i32 19
  %1786 = load i32, ptr %1785, align 4, !tbaa !38
  %1787 = load ptr, ptr %10, align 8, !tbaa !5
  %1788 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %1787, i32 0, i32 5
  %1789 = load i32, ptr %1788, align 1, !tbaa !44
  %1790 = zext i32 %1789 to i64
  %1791 = mul nsw i64 %1790, 4
  %1792 = sdiv i64 %1791, 4
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef %1780, i32 noundef %1783, i32 noundef %1786, i64 noundef %1792)
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #4
  br label %1793

1793:                                             ; preds = %1779, %1328
  br label %1794

1794:                                             ; preds = %1793, %1299
  br label %1830

1795:                                             ; preds = %1190, %1179
  store i32 0, ptr %13, align 4, !tbaa !9
  br label %1796

1796:                                             ; preds = %1826, %1795
  %1797 = load i32, ptr %13, align 4, !tbaa !9
  %1798 = load i32, ptr %21, align 4, !tbaa !9
  %1799 = icmp slt i32 %1797, %1798
  br i1 %1799, label %1800, label %1829

1800:                                             ; preds = %1796
  store i32 0, ptr %14, align 4, !tbaa !9
  br label %1801

1801:                                             ; preds = %1822, %1800
  %1802 = load i32, ptr %14, align 4, !tbaa !9
  %1803 = load i32, ptr %22, align 4, !tbaa !9
  %1804 = icmp slt i32 %1802, %1803
  br i1 %1804, label %1805, label %1825

1805:                                             ; preds = %1801
  %1806 = load ptr, ptr %7, align 8, !tbaa !5
  %1807 = load ptr, ptr %9, align 8, !tbaa !5
  %1808 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1807, i32 0, i32 0
  %1809 = load i32, ptr %1808, align 8, !tbaa !41
  %1810 = load i32, ptr %15, align 4, !tbaa !9
  call void @libxsmm_x86_instruction_tile_move(ptr noundef %1806, i32 noundef %1809, i32 noundef 1342644297, i32 noundef 127, i32 noundef 127, i32 noundef 0, i32 noundef 0, i32 noundef %1810)
  %1811 = load i32, ptr %15, align 4, !tbaa !9
  %1812 = add nsw i32 %1811, 1
  store i32 %1812, ptr %15, align 4, !tbaa !9
  %1813 = load i32, ptr %22, align 4, !tbaa !9
  %1814 = icmp eq i32 %1813, 1
  br i1 %1814, label %1815, label %1821

1815:                                             ; preds = %1805
  %1816 = load i32, ptr %23, align 4, !tbaa !9
  %1817 = icmp eq i32 %1816, 0
  br i1 %1817, label %1818, label %1821

1818:                                             ; preds = %1815
  %1819 = load i32, ptr %15, align 4, !tbaa !9
  %1820 = add nsw i32 %1819, 1
  store i32 %1820, ptr %15, align 4, !tbaa !9
  br label %1821

1821:                                             ; preds = %1818, %1815, %1805
  br label %1822

1822:                                             ; preds = %1821
  %1823 = load i32, ptr %14, align 4, !tbaa !9
  %1824 = add nsw i32 %1823, 1
  store i32 %1824, ptr %14, align 4, !tbaa !9
  br label %1801, !llvm.loop !58

1825:                                             ; preds = %1801
  br label %1826

1826:                                             ; preds = %1825
  %1827 = load i32, ptr %13, align 4, !tbaa !9
  %1828 = add nsw i32 %1827, 1
  store i32 %1828, ptr %13, align 4, !tbaa !9
  br label %1796, !llvm.loop !59

1829:                                             ; preds = %1796
  br label %1830

1830:                                             ; preds = %1829, %1794
  br label %1831

1831:                                             ; preds = %1830, %1158
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #4
  ret void
}

declare void @libxsmm_generator_cvt_to_ps_avx512(ptr noundef, i8 noundef signext, i32 noundef, i32 noundef, i32 noundef) #0

declare void @libxsmm_x86_instruction_tile_move(ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef) #0

attributes #0 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { noreturn nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { 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 #4 = { nounwind }
attributes #5 = { noreturn nounwind }

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

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


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

@.str.1 = external hidden unnamed_addr constant [74 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [27 x i8], align 1
@__PRETTY_FUNCTION__.libxsmm_generator_gemm_load_C_amx = external hidden unnamed_addr constant [215 x i8], align 1

declare 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_imm(ptr noundef, i32 noundef, i32 noundef, i64 noundef) local_unnamed_addr #0

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

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

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

declare void @libxsmm_x86_instruction_unified_vec_move(ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i8 noundef signext, i32 noundef, i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #0

declare i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef) local_unnamed_addr #0

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

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

declare i32 @libxsmm_x86_is_Ai4_Bi8_gemm(ptr noundef) local_unnamed_addr #0

declare i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef) local_unnamed_addr #0

; Function Attrs: nounwind uwtable
define dso_local void @libxsmm_generator_gemm_load_C_amx(ptr noundef %0, ptr nocapture noundef readonly %1, ptr noundef %2, ptr noundef %3, ptr nocapture noundef readonly %4, ptr nocapture noundef readonly %5) local_unnamed_addr #2 {
  %7 = load i32, ptr %5, align 4, !tbaa !5
  %8 = load i32, ptr %4, align 4, !tbaa !5
  %9 = getelementptr inbounds i8, ptr %2, i64 640
  %10 = load i32, ptr %9, align 8, !tbaa !10
  %11 = getelementptr inbounds i8, ptr %2, i64 92
  %12 = load i32, ptr %11, align 4, !tbaa !15
  %13 = icmp eq i32 %12, 0
  %14 = getelementptr inbounds i8, ptr %1, i64 88
  %15 = getelementptr inbounds i8, ptr %1, i64 92
  %.in = select i1 %13, ptr %14, ptr %15
  %16 = load i32, ptr %.in, align 4, !tbaa !16
  %17 = tail call i32 @libxsmm_x86_is_Ai4_Bi8_gemm(ptr noundef %3) #3
  %.not = icmp eq i32 %17, 0
  br i1 %.not, label %47, label %18

18:                                               ; preds = %6
  %19 = getelementptr inbounds i8, ptr %3, i64 24
  %20 = load i32, ptr %19, align 1, !tbaa !17
  %21 = and i32 %20, 1048576
  %.not617 = icmp eq i32 %21, 0
  br i1 %.not617, label %47, label %22

22:                                               ; preds = %18
  tail call void @libxsmm_x86_instruction_push_reg(ptr noundef %0, i32 noundef %16) #3
  tail call void @libxsmm_generator_gemm_getval_stack_var(ptr noundef %0, ptr noundef nonnull %2, i32 noundef 31, i32 noundef %16) #3
  %23 = icmp sgt i32 %7, 0
  br i1 %23, label %.lr.ph, label %._crit_edge

.lr.ph:                                           ; preds = %22
  %24 = getelementptr inbounds i8, ptr %2, i64 316
  %25 = getelementptr inbounds i8, ptr %2, i64 12
  %26 = add nsw i32 %7, -1
  %27 = getelementptr inbounds i8, ptr %2, i64 284
  %28 = getelementptr inbounds i8, ptr %2, i64 84
  %29 = getelementptr inbounds i8, ptr %5, i64 4
  %30 = zext nneg i32 %26 to i64
  %wide.trip.count = zext nneg i32 %7 to i64
  br label %31

31:                                               ; preds = %.lr.ph, %40
  %indvars.iv = phi i64 [ 0, %.lr.ph ], [ %indvars.iv.next, %40 ]
  %.0579763 = phi i32 [ 0, %.lr.ph ], [ %46, %40 ]
  %32 = load i32, ptr %24, align 4, !tbaa !20
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %33 = trunc nuw nsw i64 %indvars.iv.next to i32
  %34 = add i32 %32, %33
  %35 = load i32, ptr %25, align 4, !tbaa !21
  %36 = mul i32 %35, %.0579763
  %37 = icmp eq i64 %indvars.iv, %30
  br i1 %37, label %38, label %40

38:                                               ; preds = %31
  %39 = load i32, ptr %27, align 4, !tbaa !22
  br label %40

40:                                               ; preds = %31, %38
  %41 = phi i32 [ %39, %38 ], [ 0, %31 ]
  tail call void @libxsmm_x86_instruction_unified_vec_move(ptr noundef %0, i32 noundef -536406417, i32 noundef %16, i32 noundef 127, i32 noundef 0, i32 noundef %36, i8 noundef signext 120, i32 noundef %34, i32 noundef %41, i32 noundef 1, i32 noundef 0) #3
  %42 = load i8, ptr %28, align 4, !tbaa !23
  %43 = load i32, ptr %24, align 4, !tbaa !20
  tail call void @libxsmm_x86_instruction_vec_compute_3reg(ptr noundef %0, i32 noundef -268097907, i8 noundef signext %42, i32 noundef %34, i32 noundef %43, i32 noundef %34) #3
  %44 = getelementptr inbounds [4 x i32], ptr %29, i64 0, i64 %indvars.iv
  %45 = load i32, ptr %44, align 4, !tbaa !16
  %46 = add i32 %45, %.0579763
  %exitcond.not = icmp eq i64 %indvars.iv.next, %wide.trip.count
  br i1 %exitcond.not, label %._crit_edge, label %31, !llvm.loop !24

._crit_edge:                                      ; preds = %40, %22
  tail call void @libxsmm_x86_instruction_pop_reg(ptr noundef %0, i32 noundef %16) #3
  br label %47

47:                                               ; preds = %._crit_edge, %18, %6
  %48 = getelementptr inbounds i8, ptr %3, i64 24
  %49 = load i32, ptr %48, align 1, !tbaa !17
  %50 = and i32 %49, 4
  %51 = icmp eq i32 %50, 0
  br i1 %51, label %52, label %415

52:                                               ; preds = %47
  %53 = getelementptr inbounds i8, ptr %3, i64 29
  %54 = tail call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef nonnull %53) #3
  %55 = icmp eq i32 %54, 12
  br i1 %55, label %56, label %59

56:                                               ; preds = %52
  %57 = tail call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef nonnull %53) #3
  %58 = icmp eq i32 %57, 1
  br i1 %58, label %415, label %59

59:                                               ; preds = %56, %52
  %60 = getelementptr inbounds i8, ptr %2, i64 100
  %61 = load i32, ptr %60, align 4, !tbaa !26
  %62 = icmp eq i32 %61, 1
  br i1 %62, label %79, label %63

63:                                               ; preds = %59
  %64 = getelementptr inbounds i8, ptr %2, i64 104
  %65 = load i32, ptr %64, align 8, !tbaa !27
  %66 = icmp eq i32 %65, 1
  br i1 %66, label %79, label %67

67:                                               ; preds = %63
  %68 = getelementptr inbounds i8, ptr %2, i64 108
  %69 = load i32, ptr %68, align 4, !tbaa !28
  %70 = icmp eq i32 %69, 1
  br i1 %70, label %79, label %71

71:                                               ; preds = %67
  %72 = getelementptr inbounds i8, ptr %2, i64 112
  %73 = load i32, ptr %72, align 8, !tbaa !29
  %74 = icmp eq i32 %73, 1
  br i1 %74, label %79, label %75

75:                                               ; preds = %71
  %76 = getelementptr inbounds i8, ptr %2, i64 116
  %77 = load i32, ptr %76, align 4, !tbaa !30
  %78 = icmp eq i32 %77, 1
  br i1 %78, label %79, label %82

79:                                               ; preds = %75, %71, %67, %63, %59
  %80 = getelementptr inbounds i8, ptr %1, i64 68
  %81 = load i32, ptr %80, align 4, !tbaa !31
  tail call void @libxsmm_generator_gemm_getval_stack_var(ptr noundef %0, ptr noundef nonnull %2, i32 noundef 7, i32 noundef %81) #3
  br label %82

82:                                               ; preds = %79, %75
  %.0591 = phi i32 [ %81, %79 ], [ %16, %75 ]
  %83 = tail call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef nonnull %53) #3
  %84 = icmp eq i32 %83, 2
  br i1 %84, label %112, label %85

85:                                               ; preds = %82
  %86 = tail call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef nonnull %53) #3
  %87 = icmp eq i32 %86, 3
  br i1 %87, label %112, label %88

88:                                               ; preds = %85
  %89 = tail call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef nonnull %53) #3
  %90 = icmp eq i32 %89, 4
  br i1 %90, label %112, label %91

91:                                               ; preds = %88
  %92 = tail call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef nonnull %53) #3
  %93 = icmp eq i32 %92, 5
  br i1 %93, label %112, label %.preheader761

.preheader761:                                    ; preds = %91
  %94 = icmp sgt i32 %7, 0
  br i1 %94, label %.lr.ph779, label %.loopexit762

.lr.ph779:                                        ; preds = %.preheader761
  %95 = getelementptr inbounds i8, ptr %2, i64 104
  %96 = getelementptr inbounds i8, ptr %2, i64 108
  %97 = getelementptr inbounds i8, ptr %2, i64 112
  %98 = getelementptr inbounds i8, ptr %2, i64 116
  %99 = add nsw i32 %7, -1
  %100 = getelementptr inbounds i8, ptr %2, i64 284
  %101 = getelementptr inbounds i8, ptr %2, i64 84
  %102 = getelementptr inbounds i8, ptr %5, i64 4
  %103 = icmp sgt i32 %8, 0
  %104 = getelementptr inbounds i8, ptr %4, i64 4
  %105 = getelementptr inbounds i8, ptr %2, i64 172
  %106 = getelementptr inbounds i8, ptr %1, i64 20
  %107 = getelementptr inbounds i8, ptr %3, i64 20
  %108 = getelementptr inbounds i8, ptr %1, i64 76
  %109 = icmp eq i32 %8, 1
  %110 = icmp eq i32 %10, 0
  %or.cond3 = select i1 %109, i1 %110, i1 false
  %spec.select620.v = select i1 %or.cond3, i32 2, i32 1
  %111 = zext nneg i32 %99 to i64
  %wide.trip.count844 = zext nneg i32 %7 to i64
  %wide.trip.count839 = zext nneg i32 %8 to i64
  br label %284

112:                                              ; preds = %91, %88, %85, %82
  %113 = getelementptr inbounds i8, ptr %2, i64 96
  %114 = load i32, ptr %113, align 8, !tbaa !33
  %115 = icmp eq i32 %114, 0
  %.in618 = select i1 %115, ptr %15, ptr %14
  %116 = load i32, ptr %.in618, align 4, !tbaa !16
  %117 = load i32, ptr %14, align 4, !tbaa !34
  %118 = icmp eq i32 %116, %117
  br i1 %118, label %119, label %123

119:                                              ; preds = %112
  %120 = load i32, ptr %11, align 4, !tbaa !15
  %121 = icmp eq i32 %120, 1
  br i1 %121, label %122, label %123

122:                                              ; preds = %119
  tail call void @libxsmm_x86_instruction_push_reg(ptr noundef %0, i32 noundef %116) #3
  br label %123

123:                                              ; preds = %122, %119, %112
  %124 = getelementptr inbounds i8, ptr %2, i64 80
  %125 = load i32, ptr %124, align 8, !tbaa !35
  %126 = getelementptr inbounds i8, ptr %1, i64 76
  %127 = load i32, ptr %126, align 4, !tbaa !36
  %128 = getelementptr inbounds i8, ptr %2, i64 556
  %129 = load i32, ptr %128, align 4, !tbaa !37
  %130 = zext i32 %129 to i64
  tail call void @libxsmm_x86_instruction_alu_imm(ptr noundef %0, i32 noundef %125, i32 noundef %127, i64 noundef %130) #3
  tail call void @libxsmm_generator_gemm_getval_stack_var(ptr noundef %0, ptr noundef nonnull %2, i32 noundef 6, i32 noundef %116) #3
  %131 = icmp sgt i32 %7, 0
  br i1 %131, label %.lr.ph798, label %._crit_edge799

.lr.ph798:                                        ; preds = %123
  %132 = getelementptr inbounds i8, ptr %2, i64 104
  %133 = getelementptr inbounds i8, ptr %2, i64 108
  %134 = getelementptr inbounds i8, ptr %2, i64 112
  %135 = getelementptr inbounds i8, ptr %2, i64 116
  %136 = add nsw i32 %7, -1
  %137 = getelementptr inbounds i8, ptr %2, i64 284
  %138 = getelementptr inbounds i8, ptr %2, i64 84
  %139 = getelementptr inbounds i8, ptr %5, i64 4
  %140 = icmp sgt i32 %8, 0
  %141 = getelementptr inbounds i8, ptr %4, i64 4
  %142 = getelementptr inbounds i8, ptr %2, i64 172
  %143 = getelementptr inbounds i8, ptr %1, i64 20
  %144 = getelementptr inbounds i8, ptr %3, i64 20
  %145 = getelementptr inbounds i8, ptr %2, i64 20
  %146 = icmp eq i32 %8, 1
  %147 = icmp eq i32 %10, 0
  %or.cond = select i1 %146, i1 %147, i1 false
  %spec.select.v = select i1 %or.cond, i32 2, i32 1
  %148 = zext nneg i32 %136 to i64
  %wide.trip.count854 = zext nneg i32 %7 to i64
  %wide.trip.count849 = zext nneg i32 %8 to i64
  br label %149

149:                                              ; preds = %.lr.ph798, %._crit_edge790
  %indvars.iv851 = phi i64 [ 0, %.lr.ph798 ], [ %indvars.iv.next852, %._crit_edge790 ]
  %.0568795 = phi i32 [ 0, %.lr.ph798 ], [ %.1569.lcssa, %._crit_edge790 ]
  %.1580794 = phi i32 [ 0, %.lr.ph798 ], [ %272, %._crit_edge790 ]
  %.0585792 = phi i32 [ 0, %.lr.ph798 ], [ %.1586, %._crit_edge790 ]
  %150 = tail call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef nonnull %53) #3
  %151 = icmp eq i32 %150, 2
  br i1 %151, label %.thread, label %152

152:                                              ; preds = %149
  %153 = tail call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef nonnull %53) #3
  %.fr = freeze i32 %153
  %154 = icmp eq i32 %.fr, 3
  br i1 %154, label %.thread, label %155

.thread:                                          ; preds = %149, %152
  br label %155

155:                                              ; preds = %152, %.thread
  %156 = phi i32 [ -528017809, %.thread ], [ -536406417, %152 ]
  %157 = tail call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef nonnull %53) #3
  %158 = icmp eq i32 %157, 2
  br i1 %158, label %.thread626, label %159

159:                                              ; preds = %155
  %160 = tail call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef nonnull %53) #3
  %.fr752 = freeze i32 %160
  %161 = icmp eq i32 %.fr752, 3
  br i1 %161, label %.thread626, label %162

.thread626:                                       ; preds = %155, %159
  br label %162

162:                                              ; preds = %159, %.thread626
  %163 = phi i8 [ 121, %.thread626 ], [ 120, %159 ]
  %164 = load i32, ptr %60, align 4, !tbaa !26
  %165 = icmp eq i32 %164, 1
  br i1 %165, label %.thread629, label %166

166:                                              ; preds = %162
  %167 = load i32, ptr %132, align 8, !tbaa !27
  %.fr754 = freeze i32 %167
  %168 = icmp eq i32 %.fr754, 1
  br i1 %168, label %.thread876, label %169

169:                                              ; preds = %166
  %170 = load i32, ptr %133, align 4, !tbaa !28
  %171 = icmp eq i32 %170, 1
  br i1 %171, label %.thread876, label %172

172:                                              ; preds = %169
  %173 = load i32, ptr %134, align 8, !tbaa !29
  %174 = icmp eq i32 %173, 1
  br i1 %174, label %.thread877, label %175

175:                                              ; preds = %172
  %176 = load i32, ptr %135, align 4, !tbaa !30
  %177 = icmp eq i32 %176, 1
  br i1 %177, label %178, label %212

178:                                              ; preds = %175
  %.pr = load i32, ptr %133, align 4, !tbaa !28
  %179 = icmp eq i32 %.pr, 1
  br i1 %179, label %.thread883, label %.thread877

.thread883:                                       ; preds = %178
  %180 = load i32, ptr %2, align 8, !tbaa !38
  br label %196

.thread877:                                       ; preds = %172, %178
  %181 = load i32, ptr %134, align 8, !tbaa !29
  %182 = icmp eq i32 %181, 1
  %183 = select i1 %182, i32 5, i32 1
  br label %.thread876

.thread876:                                       ; preds = %169, %166, %.thread877
  %.ph = phi i32 [ 3, %166 ], [ %183, %.thread877 ], [ 4, %169 ]
  %.pr879 = load i32, ptr %135, align 4, !tbaa !30
  %184 = icmp eq i32 %.pr879, 1
  %185 = icmp eq i32 %.fr754, 1
  %spec.select737 = select i1 %185, i8 121, i8 120
  %spec.select748 = select i1 %185, i32 -528017809, i32 -536406417
  %186 = select i1 %184, i8 122, i8 %spec.select737
  %187 = select i1 %184, i32 537138704, i32 %spec.select748
  %188 = load i32, ptr %2, align 8, !tbaa !38
  %189 = icmp eq i32 %.ph, 1
  br i1 %189, label %196, label %193

.thread629:                                       ; preds = %162
  %190 = load i32, ptr %135, align 4, !tbaa !30
  %191 = icmp eq i32 %190, 1
  %192 = load i32, ptr %2, align 8, !tbaa !38
  %. = select i1 %191, i32 537138704, i32 -528017809
  %.897 = select i1 %191, i8 122, i8 121
  br label %196

193:                                              ; preds = %.thread876
  %194 = and i32 %.ph, 6
  switch i32 %194, label %195 [
    i32 2, label %196
    i32 4, label %.fold.split
  ]

195:                                              ; preds = %193
  tail call void @__assert_fail(ptr noundef nonnull @.str.2, ptr noundef nonnull @.str.1, i32 noundef 1742, ptr noundef nonnull @__PRETTY_FUNCTION__.libxsmm_generator_gemm_load_C_amx) #4
  unreachable

.fold.split:                                      ; preds = %193
  br label %196

196:                                              ; preds = %.thread629, %.thread883, %193, %.fold.split, %.thread876
  %197 = phi i32 [ %188, %.thread876 ], [ %188, %193 ], [ %180, %.thread883 ], [ %188, %.fold.split ], [ %192, %.thread629 ]
  %198 = phi i32 [ %187, %.thread876 ], [ %187, %193 ], [ 537138704, %.thread883 ], [ %187, %.fold.split ], [ %., %.thread629 ]
  %199 = phi i32 [ 1, %.thread876 ], [ %.ph, %193 ], [ 4, %.thread883 ], [ %.ph, %.fold.split ], [ 2, %.thread629 ]
  %200 = phi i8 [ %186, %.thread876 ], [ %186, %193 ], [ 122, %.thread883 ], [ %186, %.fold.split ], [ %.897, %.thread629 ]
  %201 = phi i32 [ 4, %.thread876 ], [ %194, %193 ], [ 1, %.thread883 ], [ 1, %.fold.split ], [ 2, %.thread629 ]
  %202 = mul nsw i32 %201, %.0585792
  %203 = icmp eq i64 %indvars.iv851, %148
  br i1 %203, label %204, label %206

204:                                              ; preds = %196
  %205 = load i32, ptr %137, align 4, !tbaa !22
  br label %206

206:                                              ; preds = %196, %204
  %207 = phi i32 [ %205, %204 ], [ 0, %196 ]
  tail call void @libxsmm_x86_instruction_vec_move(ptr noundef %0, i32 noundef %197, i32 noundef %198, i32 noundef %.0591, i32 noundef 127, i32 noundef 0, i32 noundef %202, i8 noundef signext %200, i32 noundef 31, i32 noundef %207, i32 noundef 1, i32 noundef 0) #3
  %208 = load i8, ptr %138, align 4, !tbaa !23
  tail call void @libxsmm_generator_cvt_to_ps_avx512(ptr noundef %0, i8 noundef signext %208, i32 noundef %199, i32 noundef 31, i32 noundef 31) #3
  %209 = getelementptr inbounds [4 x i32], ptr %139, i64 0, i64 %indvars.iv851
  %210 = load i32, ptr %209, align 4, !tbaa !16
  %211 = add i32 %210, %.0585792
  br label %212

212:                                              ; preds = %206, %175
  %.1586 = phi i32 [ %211, %206 ], [ %.0585792, %175 ]
  br i1 %140, label %.preheader759.lr.ph, label %._crit_edge790

.preheader759.lr.ph:                              ; preds = %212
  %213 = icmp eq i64 %indvars.iv851, %148
  br label %.preheader759

.preheader759:                                    ; preds = %.preheader759.lr.ph, %._crit_edge784
  %indvars.iv846 = phi i64 [ 0, %.preheader759.lr.ph ], [ %indvars.iv.next847, %._crit_edge784 ]
  %.1569788 = phi i32 [ %.0568795, %.preheader759.lr.ph ], [ %spec.select, %._crit_edge784 ]
  %.0575787 = phi i32 [ 0, %.preheader759.lr.ph ], [ %269, %._crit_edge784 ]
  %214 = getelementptr inbounds [4 x i32], ptr %141, i64 0, i64 %indvars.iv846
  %215 = load i32, ptr %214, align 4, !tbaa !16
  %.not831 = icmp eq i32 %215, 0
  br i1 %.not831, label %._crit_edge784, label %.lr.ph783

.lr.ph783:                                        ; preds = %.preheader759, %257
  %.0589782 = phi i32 [ %259, %257 ], [ 0, %.preheader759 ]
  %216 = and i32 %.0589782, 3
  %217 = load i32, ptr %142, align 4, !tbaa !39
  %218 = add i32 %217, %216
  %219 = load i32, ptr %2, align 8, !tbaa !38
  %220 = load i32, ptr %143, align 4, !tbaa !40
  %221 = add i32 %.0589782, %.0575787
  %222 = load i32, ptr %144, align 1, !tbaa !41
  %223 = mul i32 %222, %221
  %224 = add i32 %223, %.1580794
  %225 = load i32, ptr %145, align 4, !tbaa !42
  %226 = mul i32 %224, %225
  br i1 %213, label %227, label %229

227:                                              ; preds = %.lr.ph783
  %228 = load i32, ptr %137, align 4, !tbaa !22
  br label %229

229:                                              ; preds = %.lr.ph783, %227
  %230 = phi i32 [ %228, %227 ], [ 0, %.lr.ph783 ]
  tail call void @libxsmm_x86_instruction_vec_move(ptr noundef %0, i32 noundef %219, i32 noundef %156, i32 noundef %220, i32 noundef 127, i32 noundef 0, i32 noundef %226, i8 noundef signext %163, i32 noundef %218, i32 noundef %230, i32 noundef 1, i32 noundef 0) #3
  %231 = load i8, ptr %138, align 4, !tbaa !23
  %232 = tail call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef nonnull %53) #3
  tail call void @libxsmm_generator_cvt_to_ps_avx512(ptr noundef %0, i8 noundef signext %231, i32 noundef %232, i32 noundef %218, i32 noundef %218) #3
  %233 = load i32, ptr %60, align 4, !tbaa !26
  %234 = icmp eq i32 %233, 1
  br i1 %234, label %247, label %235

235:                                              ; preds = %229
  %236 = load i32, ptr %132, align 8, !tbaa !27
  %237 = icmp eq i32 %236, 1
  br i1 %237, label %247, label %238

238:                                              ; preds = %235
  %239 = load i32, ptr %133, align 4, !tbaa !28
  %240 = icmp eq i32 %239, 1
  br i1 %240, label %247, label %241

241:                                              ; preds = %238
  %242 = load i32, ptr %134, align 8, !tbaa !29
  %243 = icmp eq i32 %242, 1
  br i1 %243, label %247, label %244

244:                                              ; preds = %241
  %245 = load i32, ptr %135, align 4, !tbaa !30
  %246 = icmp eq i32 %245, 1
  br i1 %246, label %247, label %248

247:                                              ; preds = %244, %241, %238, %235, %229
  tail call void @libxsmm_x86_instruction_vec_compute_3reg(ptr noundef %0, i32 noundef 805574232, i8 noundef signext 122, i32 noundef %218, i32 noundef 31, i32 noundef %218) #3
  br label %248

248:                                              ; preds = %247, %244
  %249 = load i32, ptr %2, align 8, !tbaa !38
  %250 = load i32, ptr %128, align 4, !tbaa !37
  %251 = mul i32 %250, %221
  %252 = add i32 %251, %.1580794
  %253 = shl i32 %252, 2
  %254 = load i8, ptr %138, align 4, !tbaa !23
  br i1 %213, label %255, label %257

255:                                              ; preds = %248
  %256 = load i32, ptr %137, align 4, !tbaa !22
  br label %257

257:                                              ; preds = %248, %255
  %258 = phi i32 [ %256, %255 ], [ 0, %248 ]
  tail call void @libxsmm_x86_instruction_vec_move(ptr noundef %0, i32 noundef %249, i32 noundef 537138704, i32 noundef %116, i32 noundef 127, i32 noundef 0, i32 noundef %253, i8 noundef signext %254, i32 noundef %218, i32 noundef %258, i32 noundef 0, i32 noundef 1) #3
  %259 = add nuw i32 %.0589782, 1
  %260 = load i32, ptr %214, align 4, !tbaa !16
  %261 = icmp ult i32 %259, %260
  br i1 %261, label %.lr.ph783, label %._crit_edge784, !llvm.loop !43

._crit_edge784:                                   ; preds = %257, %.preheader759
  %262 = load i32, ptr %2, align 8, !tbaa !38
  %263 = load i32, ptr %126, align 4, !tbaa !36
  %264 = load i32, ptr %128, align 4, !tbaa !37
  %265 = mul i32 %264, %.0575787
  %266 = add i32 %265, %.1580794
  %267 = shl i32 %266, 2
  tail call void @libxsmm_x86_instruction_tile_move(ptr noundef %0, i32 noundef %262, i32 noundef 1611079755, i32 noundef %116, i32 noundef %263, i32 noundef 4, i32 noundef %267, i32 noundef %.1569788) #3
  %spec.select = add nsw i32 %.1569788, %spec.select.v
  %268 = load i32, ptr %214, align 4, !tbaa !16
  %269 = add i32 %268, %.0575787
  %indvars.iv.next847 = add nuw nsw i64 %indvars.iv846, 1
  %exitcond850.not = icmp eq i64 %indvars.iv.next847, %wide.trip.count849
  br i1 %exitcond850.not, label %._crit_edge790, label %.preheader759, !llvm.loop !44

._crit_edge790:                                   ; preds = %._crit_edge784, %212
  %.1569.lcssa = phi i32 [ %.0568795, %212 ], [ %spec.select, %._crit_edge784 ]
  %270 = getelementptr inbounds [4 x i32], ptr %139, i64 0, i64 %indvars.iv851
  %271 = load i32, ptr %270, align 4, !tbaa !16
  %272 = add i32 %271, %.1580794
  %indvars.iv.next852 = add nuw nsw i64 %indvars.iv851, 1
  %exitcond855.not = icmp eq i64 %indvars.iv.next852, %wide.trip.count854
  br i1 %exitcond855.not, label %._crit_edge799, label %149, !llvm.loop !45

._crit_edge799:                                   ; preds = %._crit_edge790, %123
  %273 = load i32, ptr %124, align 8, !tbaa !35
  %274 = load i32, ptr %126, align 4, !tbaa !36
  %275 = getelementptr inbounds i8, ptr %3, i64 20
  %276 = load i32, ptr %275, align 1, !tbaa !41
  %277 = zext i32 %276 to i64
  tail call void @libxsmm_x86_instruction_alu_imm(ptr noundef %0, i32 noundef %273, i32 noundef %274, i64 noundef %277) #3
  %278 = load i32, ptr %14, align 4, !tbaa !34
  %279 = icmp eq i32 %116, %278
  br i1 %279, label %280, label %.loopexit762

280:                                              ; preds = %._crit_edge799
  %281 = load i32, ptr %11, align 4, !tbaa !15
  %282 = icmp eq i32 %281, 1
  br i1 %282, label %283, label %.loopexit762

283:                                              ; preds = %280
  tail call void @libxsmm_x86_instruction_pop_reg(ptr noundef %0, i32 noundef %116) #3
  br label %.loopexit762

284:                                              ; preds = %.lr.ph779, %._crit_edge773
  %indvars.iv841 = phi i64 [ 0, %.lr.ph779 ], [ %indvars.iv.next842, %._crit_edge773 ]
  %.3571777 = phi i32 [ 0, %.lr.ph779 ], [ %.4572.lcssa, %._crit_edge773 ]
  %.2581776 = phi i32 [ 0, %.lr.ph779 ], [ %393, %._crit_edge773 ]
  %.2587774 = phi i32 [ 0, %.lr.ph779 ], [ %.3588, %._crit_edge773 ]
  %285 = load i32, ptr %60, align 4, !tbaa !26
  %286 = icmp eq i32 %285, 1
  br i1 %286, label %.thread664, label %287

287:                                              ; preds = %284
  %288 = load i32, ptr %95, align 8, !tbaa !27
  %.fr751 = freeze i32 %288
  %289 = icmp eq i32 %.fr751, 1
  br i1 %289, label %.thread888, label %290

290:                                              ; preds = %287
  %291 = load i32, ptr %96, align 4, !tbaa !28
  %292 = icmp eq i32 %291, 1
  br i1 %292, label %.thread888, label %293

293:                                              ; preds = %290
  %294 = load i32, ptr %97, align 8, !tbaa !29
  %295 = icmp eq i32 %294, 1
  br i1 %295, label %.thread889, label %296

296:                                              ; preds = %293
  %297 = load i32, ptr %98, align 4, !tbaa !30
  %298 = icmp eq i32 %297, 1
  br i1 %298, label %299, label %333

299:                                              ; preds = %296
  %.pr887 = load i32, ptr %96, align 4, !tbaa !28
  %300 = icmp eq i32 %.pr887, 1
  br i1 %300, label %.thread896, label %.thread889

.thread896:                                       ; preds = %299
  %301 = load i32, ptr %2, align 8, !tbaa !38
  br label %317

.thread889:                                       ; preds = %293, %299
  %302 = load i32, ptr %97, align 8, !tbaa !29
  %303 = icmp eq i32 %302, 1
  %304 = select i1 %303, i32 5, i32 1
  br label %.thread888

.thread888:                                       ; preds = %290, %287, %.thread889
  %.ph891 = phi i32 [ 3, %287 ], [ %304, %.thread889 ], [ 4, %290 ]
  %.pr892 = load i32, ptr %98, align 4, !tbaa !30
  %305 = icmp eq i32 %.pr892, 1
  %306 = icmp eq i32 %.fr751, 1
  %spec.select741 = select i1 %306, i8 121, i8 120
  %spec.select749 = select i1 %306, i32 -528017809, i32 -536406417
  %307 = select i1 %305, i8 122, i8 %spec.select741
  %308 = select i1 %305, i32 537138704, i32 %spec.select749
  %309 = load i32, ptr %2, align 8, !tbaa !38
  %310 = icmp eq i32 %.ph891, 1
  br i1 %310, label %317, label %314

.thread664:                                       ; preds = %284
  %311 = load i32, ptr %98, align 4, !tbaa !30
  %312 = icmp eq i32 %311, 1
  %313 = load i32, ptr %2, align 8, !tbaa !38
  %.898 = select i1 %312, i32 537138704, i32 -528017809
  %.899 = select i1 %312, i8 122, i8 121
  br label %317

314:                                              ; preds = %.thread888
  %315 = and i32 %.ph891, 6
  switch i32 %315, label %316 [
    i32 2, label %317
    i32 4, label %.fold.split742
  ]

316:                                              ; preds = %314
  tail call void @__assert_fail(ptr noundef nonnull @.str.2, ptr noundef nonnull @.str.1, i32 noundef 1818, ptr noundef nonnull @__PRETTY_FUNCTION__.libxsmm_generator_gemm_load_C_amx) #4
  unreachable

.fold.split742:                                   ; preds = %314
  br label %317

317:                                              ; preds = %.thread664, %.thread896, %314, %.fold.split742, %.thread888
  %318 = phi i32 [ %309, %.thread888 ], [ %309, %314 ], [ %301, %.thread896 ], [ %309, %.fold.split742 ], [ %313, %.thread664 ]
  %319 = phi i32 [ %308, %.thread888 ], [ %308, %314 ], [ 537138704, %.thread896 ], [ %308, %.fold.split742 ], [ %.898, %.thread664 ]
  %320 = phi i32 [ 1, %.thread888 ], [ %.ph891, %314 ], [ 4, %.thread896 ], [ %.ph891, %.fold.split742 ], [ 2, %.thread664 ]
  %321 = phi i8 [ %307, %.thread888 ], [ %307, %314 ], [ 122, %.thread896 ], [ %307, %.fold.split742 ], [ %.899, %.thread664 ]
  %322 = phi i32 [ 4, %.thread888 ], [ %315, %314 ], [ 1, %.thread896 ], [ 1, %.fold.split742 ], [ 2, %.thread664 ]
  %323 = mul nsw i32 %322, %.2587774
  %324 = icmp eq i64 %indvars.iv841, %111
  br i1 %324, label %325, label %327

325:                                              ; preds = %317
  %326 = load i32, ptr %100, align 4, !tbaa !22
  br label %327

327:                                              ; preds = %317, %325
  %328 = phi i32 [ %326, %325 ], [ 0, %317 ]
  tail call void @libxsmm_x86_instruction_vec_move(ptr noundef %0, i32 noundef %318, i32 noundef %319, i32 noundef %.0591, i32 noundef 127, i32 noundef 0, i32 noundef %323, i8 noundef signext %321, i32 noundef 31, i32 noundef %328, i32 noundef 1, i32 noundef 0) #3
  %329 = load i8, ptr %101, align 4, !tbaa !23
  tail call void @libxsmm_generator_cvt_to_ps_avx512(ptr noundef %0, i8 noundef signext %329, i32 noundef %320, i32 noundef 31, i32 noundef 31) #3
  %330 = getelementptr inbounds [4 x i32], ptr %102, i64 0, i64 %indvars.iv841
  %331 = load i32, ptr %330, align 4, !tbaa !16
  %332 = add i32 %331, %.2587774
  br label %333

333:                                              ; preds = %327, %296
  %.3588 = phi i32 [ %332, %327 ], [ %.2587774, %296 ]
  br i1 %103, label %.lr.ph772, label %._crit_edge773

.lr.ph772:                                        ; preds = %333
  %334 = icmp eq i64 %indvars.iv841, %111
  br label %335

335:                                              ; preds = %.lr.ph772, %.loopexit760
  %indvars.iv836 = phi i64 [ 0, %.lr.ph772 ], [ %indvars.iv.next837, %.loopexit760 ]
  %.4572769 = phi i32 [ %.3571777, %.lr.ph772 ], [ %spec.select620, %.loopexit760 ]
  %.1576768 = phi i32 [ 0, %.lr.ph772 ], [ %390, %.loopexit760 ]
  %336 = load i32, ptr %60, align 4, !tbaa !26
  %337 = icmp eq i32 %336, 1
  br i1 %337, label %350, label %338

338:                                              ; preds = %335
  %339 = load i32, ptr %95, align 8, !tbaa !27
  %340 = icmp eq i32 %339, 1
  br i1 %340, label %350, label %341

341:                                              ; preds = %338
  %342 = load i32, ptr %96, align 4, !tbaa !28
  %343 = icmp eq i32 %342, 1
  br i1 %343, label %350, label %344

344:                                              ; preds = %341
  %345 = load i32, ptr %97, align 8, !tbaa !29
  %346 = icmp eq i32 %345, 1
  br i1 %346, label %350, label %347

347:                                              ; preds = %344
  %348 = load i32, ptr %98, align 4, !tbaa !30
  %349 = icmp eq i32 %348, 1
  br i1 %349, label %350, label %.loopexit760

350:                                              ; preds = %347, %344, %341, %338, %335
  %351 = getelementptr inbounds [4 x i32], ptr %104, i64 0, i64 %indvars.iv836
  %352 = load i32, ptr %351, align 4, !tbaa !16
  %.not830 = icmp eq i32 %352, 0
  br i1 %.not830, label %.loopexit760, label %.lr.ph767

.lr.ph767:                                        ; preds = %350, %376
  %.1590765 = phi i32 [ %378, %376 ], [ 0, %350 ]
  %353 = load i32, ptr %105, align 4, !tbaa !39
  %354 = sub i32 30, %353
  %355 = urem i32 %.1590765, %354
  %356 = add i32 %355, %353
  %357 = load i32, ptr %2, align 8, !tbaa !38
  %358 = load i32, ptr %106, align 4, !tbaa !40
  %359 = add i32 %.1590765, %.1576768
  %360 = load i32, ptr %107, align 1, !tbaa !41
  %361 = mul i32 %360, %359
  %362 = add i32 %361, %.2581776
  %363 = shl i32 %362, 2
  br i1 %334, label %364, label %366

364:                                              ; preds = %.lr.ph767
  %365 = load i32, ptr %100, align 4, !tbaa !22
  br label %366

366:                                              ; preds = %.lr.ph767, %364
  %367 = phi i32 [ %365, %364 ], [ 0, %.lr.ph767 ]
  tail call void @libxsmm_x86_instruction_vec_move(ptr noundef %0, i32 noundef %357, i32 noundef 537138704, i32 noundef %358, i32 noundef 127, i32 noundef 0, i32 noundef %363, i8 noundef signext 122, i32 noundef %356, i32 noundef %367, i32 noundef 1, i32 noundef 0) #3
  tail call void @libxsmm_x86_instruction_vec_compute_3reg(ptr noundef %0, i32 noundef 805574232, i8 noundef signext 122, i32 noundef %356, i32 noundef 31, i32 noundef %356) #3
  %368 = load i32, ptr %2, align 8, !tbaa !38
  %369 = load i32, ptr %106, align 4, !tbaa !40
  %370 = load i32, ptr %107, align 1, !tbaa !41
  %371 = mul i32 %370, %359
  %372 = add i32 %371, %.2581776
  %373 = shl i32 %372, 2
  br i1 %334, label %374, label %376

374:                                              ; preds = %366
  %375 = load i32, ptr %100, align 4, !tbaa !22
  br label %376

376:                                              ; preds = %366, %374
  %377 = phi i32 [ %375, %374 ], [ 0, %366 ]
  tail call void @libxsmm_x86_instruction_vec_move(ptr noundef %0, i32 noundef %368, i32 noundef 537138704, i32 noundef %369, i32 noundef 127, i32 noundef 0, i32 noundef %373, i8 noundef signext 122, i32 noundef %356, i32 noundef %377, i32 noundef 0, i32 noundef 1) #3
  %378 = add nuw i32 %.1590765, 1
  %379 = load i32, ptr %351, align 4, !tbaa !16
  %380 = icmp ult i32 %378, %379
  br i1 %380, label %.lr.ph767, label %.loopexit760, !llvm.loop !46

.loopexit760:                                     ; preds = %376, %350, %347
  %381 = load i32, ptr %2, align 8, !tbaa !38
  %382 = load i32, ptr %106, align 4, !tbaa !40
  %383 = load i32, ptr %108, align 4, !tbaa !36
  %384 = load i32, ptr %107, align 1, !tbaa !41
  %385 = mul i32 %384, %.1576768
  %386 = add i32 %385, %.2581776
  %387 = shl i32 %386, 2
  tail call void @libxsmm_x86_instruction_tile_move(ptr noundef %0, i32 noundef %381, i32 noundef 1611079755, i32 noundef %382, i32 noundef %383, i32 noundef 4, i32 noundef %387, i32 noundef %.4572769) #3
  %spec.select620 = add nsw i32 %.4572769, %spec.select620.v
  %388 = getelementptr inbounds [4 x i32], ptr %104, i64 0, i64 %indvars.iv836
  %389 = load i32, ptr %388, align 4, !tbaa !16
  %390 = add i32 %389, %.1576768
  %indvars.iv.next837 = add nuw nsw i64 %indvars.iv836, 1
  %exitcond840.not = icmp eq i64 %indvars.iv.next837, %wide.trip.count839
  br i1 %exitcond840.not, label %._crit_edge773, label %335, !llvm.loop !47

._crit_edge773:                                   ; preds = %.loopexit760, %333
  %.4572.lcssa = phi i32 [ %.3571777, %333 ], [ %spec.select620, %.loopexit760 ]
  %391 = getelementptr inbounds [4 x i32], ptr %102, i64 0, i64 %indvars.iv841
  %392 = load i32, ptr %391, align 4, !tbaa !16
  %393 = add i32 %392, %.2581776
  %indvars.iv.next842 = add nuw nsw i64 %indvars.iv841, 1
  %exitcond845.not = icmp eq i64 %indvars.iv.next842, %wide.trip.count844
  br i1 %exitcond845.not, label %.loopexit762, label %284, !llvm.loop !48

.loopexit762:                                     ; preds = %._crit_edge773, %.preheader761, %._crit_edge799, %280, %283
  %394 = load i32, ptr %60, align 4, !tbaa !26
  %395 = icmp eq i32 %394, 1
  br i1 %395, label %412, label %396

396:                                              ; preds = %.loopexit762
  %397 = getelementptr inbounds i8, ptr %2, i64 104
  %398 = load i32, ptr %397, align 8, !tbaa !27
  %399 = icmp eq i32 %398, 1
  br i1 %399, label %412, label %400

400:                                              ; preds = %396
  %401 = getelementptr inbounds i8, ptr %2, i64 108
  %402 = load i32, ptr %401, align 4, !tbaa !28
  %403 = icmp eq i32 %402, 1
  br i1 %403, label %412, label %404

404:                                              ; preds = %400
  %405 = getelementptr inbounds i8, ptr %2, i64 112
  %406 = load i32, ptr %405, align 8, !tbaa !29
  %407 = icmp eq i32 %406, 1
  br i1 %407, label %412, label %408

408:                                              ; preds = %404
  %409 = getelementptr inbounds i8, ptr %2, i64 116
  %410 = load i32, ptr %409, align 4, !tbaa !30
  %411 = icmp eq i32 %410, 1
  br i1 %411, label %412, label %.loopexit

412:                                              ; preds = %408, %404, %400, %396, %.loopexit762
  %413 = getelementptr inbounds i8, ptr %2, i64 80
  %414 = getelementptr inbounds i8, ptr %1, i64 68
  br label %.loopexit.sink.split

415:                                              ; preds = %56, %47
  %416 = getelementptr inbounds i8, ptr %2, i64 100
  %417 = load i32, ptr %416, align 4, !tbaa !26
  %418 = icmp eq i32 %417, 1
  br i1 %418, label %435, label %419

419:                                              ; preds = %415
  %420 = getelementptr inbounds i8, ptr %2, i64 104
  %421 = load i32, ptr %420, align 8, !tbaa !27
  %422 = icmp eq i32 %421, 1
  br i1 %422, label %435, label %423

423:                                              ; preds = %419
  %424 = getelementptr inbounds i8, ptr %2, i64 108
  %425 = load i32, ptr %424, align 4, !tbaa !28
  %426 = icmp eq i32 %425, 1
  br i1 %426, label %435, label %427

427:                                              ; preds = %423
  %428 = getelementptr inbounds i8, ptr %2, i64 112
  %429 = load i32, ptr %428, align 8, !tbaa !29
  %430 = icmp eq i32 %429, 1
  br i1 %430, label %435, label %431

431:                                              ; preds = %427
  %432 = getelementptr inbounds i8, ptr %2, i64 116
  %433 = load i32, ptr %432, align 4, !tbaa !30
  %434 = icmp eq i32 %433, 1
  br i1 %434, label %435, label %650

435:                                              ; preds = %431, %427, %423, %419, %415
  %436 = getelementptr inbounds i8, ptr %3, i64 29
  %437 = tail call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef nonnull %436) #3
  %438 = icmp eq i32 %437, 12
  br i1 %438, label %439, label %442

439:                                              ; preds = %435
  %440 = tail call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef nonnull %436) #3
  %441 = icmp eq i32 %440, 1
  br i1 %441, label %650, label %442

442:                                              ; preds = %439, %435
  %443 = getelementptr inbounds i8, ptr %2, i64 116
  %444 = load i32, ptr %443, align 4, !tbaa !30
  %445 = icmp eq i32 %444, 1
  br i1 %445, label %446, label %479

446:                                              ; preds = %442
  %447 = load i32, ptr %15, align 4, !tbaa !49
  %448 = icmp eq i32 %16, %447
  br i1 %448, label %449, label %454

449:                                              ; preds = %446
  %450 = getelementptr inbounds i8, ptr %2, i64 96
  %451 = load i32, ptr %450, align 8, !tbaa !33
  %452 = icmp eq i32 %451, 1
  br i1 %452, label %453, label %454

453:                                              ; preds = %449
  tail call void @libxsmm_x86_instruction_push_reg(ptr noundef %0, i32 noundef %16) #3
  br label %454

454:                                              ; preds = %453, %449, %446
  tail call void @libxsmm_generator_gemm_getval_stack_var(ptr noundef %0, ptr noundef nonnull %2, i32 noundef 7, i32 noundef %16) #3
  %455 = getelementptr inbounds i8, ptr %2, i64 80
  %456 = load i32, ptr %455, align 8, !tbaa !35
  %457 = getelementptr inbounds i8, ptr %1, i64 76
  %458 = load i32, ptr %457, align 4, !tbaa !36
  tail call void @libxsmm_x86_instruction_alu_imm(ptr noundef %0, i32 noundef %456, i32 noundef %458, i64 noundef 0) #3
  %459 = icmp sgt i32 %7, 0
  br i1 %459, label %.preheader757.lr.ph, label %._crit_edge822

.preheader757.lr.ph:                              ; preds = %454
  %460 = icmp sgt i32 %8, 0
  %461 = icmp eq i32 %8, 1
  %462 = icmp eq i32 %10, 0
  %or.cond5 = select i1 %461, i1 %462, i1 false
  %spec.select621.v = select i1 %or.cond5, i32 2, i32 1
  %463 = getelementptr inbounds i8, ptr %5, i64 4
  br i1 %460, label %.preheader757.us.preheader, label %._crit_edge822

.preheader757.us.preheader:                       ; preds = %.preheader757.lr.ph
  %wide.trip.count871 = zext nneg i32 %7 to i64
  br label %.preheader757.us

.preheader757.us:                                 ; preds = %.preheader757.us.preheader, %._crit_edge817.us
  %indvars.iv868 = phi i64 [ 0, %.preheader757.us.preheader ], [ %indvars.iv.next869, %._crit_edge817.us ]
  %.6574820.us = phi i32 [ 0, %.preheader757.us.preheader ], [ %spec.select621.us, %._crit_edge817.us ]
  %.3582819.us = phi i32 [ 0, %.preheader757.us.preheader ], [ %471, %._crit_edge817.us ]
  %464 = shl nsw i32 %.3582819.us, 2
  br label %465

465:                                              ; preds = %.preheader757.us, %465
  %.2565815.us = phi i32 [ 0, %.preheader757.us ], [ %468, %465 ]
  %.7814.us = phi i32 [ %.6574820.us, %.preheader757.us ], [ %spec.select621.us, %465 ]
  %466 = load i32, ptr %2, align 8, !tbaa !38
  %467 = load i32, ptr %457, align 4, !tbaa !36
  tail call void @libxsmm_x86_instruction_tile_move(ptr noundef %0, i32 noundef %466, i32 noundef 1611079755, i32 noundef %16, i32 noundef %467, i32 noundef 4, i32 noundef %464, i32 noundef %.7814.us) #3
  %spec.select621.us = add nsw i32 %.7814.us, %spec.select621.v
  %468 = add nuw nsw i32 %.2565815.us, 1
  %exitcond867.not = icmp eq i32 %468, %8
  br i1 %exitcond867.not, label %._crit_edge817.us, label %465, !llvm.loop !50

._crit_edge817.us:                                ; preds = %465
  %469 = getelementptr inbounds [4 x i32], ptr %463, i64 0, i64 %indvars.iv868
  %470 = load i32, ptr %469, align 4, !tbaa !16
  %471 = add i32 %470, %.3582819.us
  %indvars.iv.next869 = add nuw nsw i64 %indvars.iv868, 1
  %exitcond872.not = icmp eq i64 %indvars.iv.next869, %wide.trip.count871
  br i1 %exitcond872.not, label %._crit_edge822, label %.preheader757.us, !llvm.loop !51

._crit_edge822:                                   ; preds = %._crit_edge817.us, %.preheader757.lr.ph, %454
  %472 = load i32, ptr %15, align 4, !tbaa !49
  %473 = icmp eq i32 %16, %472
  br i1 %473, label %474, label %.loopexit.sink.split

474:                                              ; preds = %._crit_edge822
  %475 = getelementptr inbounds i8, ptr %2, i64 96
  %476 = load i32, ptr %475, align 8, !tbaa !33
  %477 = icmp eq i32 %476, 1
  br i1 %477, label %478, label %.loopexit.sink.split

478:                                              ; preds = %474
  tail call void @libxsmm_x86_instruction_pop_reg(ptr noundef %0, i32 noundef %16) #3
  br label %.loopexit.sink.split

479:                                              ; preds = %442
  %480 = load i32, ptr %416, align 4, !tbaa !26
  %481 = icmp eq i32 %480, 1
  br i1 %481, label %494, label %482

482:                                              ; preds = %479
  %483 = getelementptr inbounds i8, ptr %2, i64 104
  %484 = load i32, ptr %483, align 8, !tbaa !27
  %485 = icmp eq i32 %484, 1
  br i1 %485, label %494, label %486

486:                                              ; preds = %482
  %487 = getelementptr inbounds i8, ptr %2, i64 108
  %488 = load i32, ptr %487, align 4, !tbaa !28
  %489 = icmp eq i32 %488, 1
  br i1 %489, label %494, label %490

490:                                              ; preds = %486
  %491 = getelementptr inbounds i8, ptr %2, i64 112
  %492 = load i32, ptr %491, align 8, !tbaa !29
  %493 = icmp eq i32 %492, 1
  br i1 %493, label %494, label %.loopexit

494:                                              ; preds = %490, %486, %482, %479
  %495 = load i32, ptr %11, align 4, !tbaa !15
  %496 = icmp eq i32 %495, 0
  %.in619 = select i1 %496, ptr %15, ptr %14
  %497 = load i32, ptr %.in619, align 4, !tbaa !16
  %498 = load i32, ptr %15, align 4, !tbaa !49
  %499 = icmp eq i32 %16, %498
  br i1 %499, label %500, label %505

500:                                              ; preds = %494
  %501 = getelementptr inbounds i8, ptr %2, i64 96
  %502 = load i32, ptr %501, align 8, !tbaa !33
  %503 = icmp eq i32 %502, 1
  br i1 %503, label %504, label %505

504:                                              ; preds = %500
  tail call void @libxsmm_x86_instruction_push_reg(ptr noundef %0, i32 noundef %16) #3
  br label %505

505:                                              ; preds = %504, %500, %494
  %506 = load i32, ptr %14, align 4, !tbaa !34
  %507 = icmp eq i32 %16, %506
  br i1 %507, label %508, label %512

508:                                              ; preds = %505
  %509 = load i32, ptr %11, align 4, !tbaa !15
  %510 = icmp eq i32 %509, 1
  br i1 %510, label %511, label %512

511:                                              ; preds = %508
  tail call void @libxsmm_x86_instruction_push_reg(ptr noundef %0, i32 noundef %16) #3
  br label %512

512:                                              ; preds = %511, %508, %505
  %513 = load i32, ptr %15, align 4, !tbaa !49
  %514 = icmp eq i32 %497, %513
  br i1 %514, label %515, label %520

515:                                              ; preds = %512
  %516 = getelementptr inbounds i8, ptr %2, i64 96
  %517 = load i32, ptr %516, align 8, !tbaa !33
  %518 = icmp eq i32 %517, 1
  br i1 %518, label %519, label %520

519:                                              ; preds = %515
  tail call void @libxsmm_x86_instruction_push_reg(ptr noundef %0, i32 noundef %497) #3
  br label %520

520:                                              ; preds = %519, %515, %512
  %521 = load i32, ptr %14, align 4, !tbaa !34
  %522 = icmp eq i32 %497, %521
  br i1 %522, label %523, label %527

523:                                              ; preds = %520
  %524 = load i32, ptr %11, align 4, !tbaa !15
  %525 = icmp eq i32 %524, 1
  br i1 %525, label %526, label %527

526:                                              ; preds = %523
  tail call void @libxsmm_x86_instruction_push_reg(ptr noundef %0, i32 noundef %497) #3
  br label %527

527:                                              ; preds = %526, %523, %520
  tail call void @libxsmm_generator_gemm_getval_stack_var(ptr noundef %0, ptr noundef nonnull %2, i32 noundef 7, i32 noundef %16) #3
  tail call void @libxsmm_generator_gemm_getval_stack_var(ptr noundef %0, ptr noundef nonnull %2, i32 noundef 6, i32 noundef %497) #3
  %528 = icmp sgt i32 %7, 0
  br i1 %528, label %.lr.ph803, label %._crit_edge804.thread

._crit_edge804.thread:                            ; preds = %527
  %529 = getelementptr inbounds i8, ptr %2, i64 80
  %530 = load i32, ptr %529, align 8, !tbaa !35
  %531 = getelementptr inbounds i8, ptr %1, i64 76
  %532 = load i32, ptr %531, align 4, !tbaa !36
  tail call void @libxsmm_x86_instruction_alu_imm(ptr noundef %0, i32 noundef %530, i32 noundef %532, i64 noundef 0) #3
  br label %._crit_edge813

.lr.ph803:                                        ; preds = %527
  %533 = getelementptr inbounds i8, ptr %2, i64 104
  %534 = getelementptr inbounds i8, ptr %2, i64 108
  %535 = getelementptr inbounds i8, ptr %2, i64 112
  %536 = getelementptr inbounds i8, ptr %2, i64 172
  %537 = add nsw i32 %7, -1
  %538 = getelementptr inbounds i8, ptr %2, i64 284
  %539 = getelementptr inbounds i8, ptr %2, i64 84
  %540 = getelementptr inbounds i8, ptr %5, i64 4
  %541 = zext nneg i32 %537 to i64
  %wide.trip.count859 = zext nneg i32 %7 to i64
  br label %542

542:                                              ; preds = %.lr.ph803, %598
  %indvars.iv856 = phi i64 [ 0, %.lr.ph803 ], [ %indvars.iv.next857, %598 ]
  %.4583800 = phi i32 [ 0, %.lr.ph803 ], [ %602, %598 ]
  %543 = load i32, ptr %416, align 4, !tbaa !26
  %544 = icmp eq i32 %543, 1
  br i1 %544, label %.thread697, label %545

545:                                              ; preds = %542
  %546 = load i32, ptr %533, align 8, !tbaa !27
  %.fr756 = freeze i32 %546
  %547 = icmp eq i32 %.fr756, 1
  br i1 %547, label %.thread719, label %548

548:                                              ; preds = %545
  %549 = load i32, ptr %534, align 4, !tbaa !28
  %550 = icmp eq i32 %549, 1
  br i1 %550, label %.thread719, label %551

551:                                              ; preds = %548
  %552 = load i32, ptr %535, align 8, !tbaa !29
  %553 = icmp eq i32 %552, 1
  %554 = select i1 %553, i32 5, i32 1
  br label %.thread719

.thread719:                                       ; preds = %545, %548, %551
  %555 = phi i32 [ 3, %545 ], [ %554, %551 ], [ 4, %548 ]
  %556 = load i32, ptr %443, align 4, !tbaa !30
  %557 = icmp eq i32 %556, 1
  %558 = icmp eq i32 %.fr756, 1
  %spec.select746 = select i1 %558, i8 121, i8 120
  %spec.select750 = select i1 %558, i32 -528017809, i32 -536406417
  %559 = select i1 %557, i8 122, i8 %spec.select746
  %560 = select i1 %557, i32 537138704, i32 %spec.select750
  %561 = load i32, ptr %536, align 4, !tbaa !39
  %562 = sub i32 30, %561
  %563 = trunc nuw nsw i64 %indvars.iv856 to i32
  %564 = urem i32 %563, %562
  %565 = add i32 %564, %561
  %566 = load i32, ptr %2, align 8, !tbaa !38
  %567 = icmp eq i32 %555, 1
  br i1 %567, label %579, label %576

.thread697:                                       ; preds = %542
  %568 = load i32, ptr %443, align 4, !tbaa !30
  %569 = icmp eq i32 %568, 1
  %570 = load i32, ptr %536, align 4, !tbaa !39
  %571 = sub i32 30, %570
  %572 = trunc nuw nsw i64 %indvars.iv856 to i32
  %573 = urem i32 %572, %571
  %574 = add i32 %573, %570
  %575 = load i32, ptr %2, align 8, !tbaa !38
  %.900 = select i1 %569, i32 537138704, i32 -528017809
  %.901 = select i1 %569, i8 122, i8 121
  br label %579

576:                                              ; preds = %.thread719
  %577 = and i32 %555, 6
  switch i32 %577, label %578 [
    i32 2, label %579
    i32 4, label %.fold.split747
  ]

578:                                              ; preds = %576
  tail call void @__assert_fail(ptr noundef nonnull @.str.2, ptr noundef nonnull @.str.1, i32 noundef 1944, ptr noundef nonnull @__PRETTY_FUNCTION__.libxsmm_generator_gemm_load_C_amx) #4
  unreachable

.fold.split747:                                   ; preds = %576
  br label %579

579:                                              ; preds = %.thread697, %576, %.fold.split747, %.thread719
  %580 = phi i32 [ %566, %.thread719 ], [ %566, %576 ], [ %566, %.fold.split747 ], [ %575, %.thread697 ]
  %581 = phi i32 [ %565, %.thread719 ], [ %565, %576 ], [ %565, %.fold.split747 ], [ %574, %.thread697 ]
  %582 = phi i32 [ %560, %.thread719 ], [ %560, %576 ], [ %560, %.fold.split747 ], [ %.900, %.thread697 ]
  %583 = phi i32 [ 1, %.thread719 ], [ %555, %576 ], [ %555, %.fold.split747 ], [ 2, %.thread697 ]
  %584 = phi i8 [ %559, %.thread719 ], [ %559, %576 ], [ %559, %.fold.split747 ], [ %.901, %.thread697 ]
  %585 = phi i32 [ 4, %.thread719 ], [ %577, %576 ], [ 1, %.fold.split747 ], [ 2, %.thread697 ]
  %586 = mul nsw i32 %585, %.4583800
  %587 = icmp eq i64 %indvars.iv856, %541
  br i1 %587, label %588, label %590

588:                                              ; preds = %579
  %589 = load i32, ptr %538, align 4, !tbaa !22
  br label %590

590:                                              ; preds = %579, %588
  %591 = phi i32 [ %589, %588 ], [ 0, %579 ]
  tail call void @libxsmm_x86_instruction_vec_move(ptr noundef %0, i32 noundef %580, i32 noundef %582, i32 noundef %16, i32 noundef 127, i32 noundef 0, i32 noundef %586, i8 noundef signext %584, i32 noundef %581, i32 noundef %591, i32 noundef 1, i32 noundef 0) #3
  %592 = load i8, ptr %539, align 4, !tbaa !23
  tail call void @libxsmm_generator_cvt_to_ps_avx512(ptr noundef %0, i8 noundef signext %592, i32 noundef %583, i32 noundef %581, i32 noundef %581) #3
  %593 = load i32, ptr %2, align 8, !tbaa !38
  %594 = shl nsw i32 %.4583800, 2
  %595 = load i8, ptr %539, align 4, !tbaa !23
  br i1 %587, label %596, label %598

596:                                              ; preds = %590
  %597 = load i32, ptr %538, align 4, !tbaa !22
  br label %598

598:                                              ; preds = %590, %596
  %599 = phi i32 [ %597, %596 ], [ 0, %590 ]
  tail call void @libxsmm_x86_instruction_vec_move(ptr noundef %0, i32 noundef %593, i32 noundef 537138704, i32 noundef %497, i32 noundef 127, i32 noundef 0, i32 noundef %594, i8 noundef signext %595, i32 noundef %581, i32 noundef %599, i32 noundef 0, i32 noundef 1) #3
  %600 = getelementptr inbounds [4 x i32], ptr %540, i64 0, i64 %indvars.iv856
  %601 = load i32, ptr %600, align 4, !tbaa !16
  %602 = add i32 %601, %.4583800
  %indvars.iv.next857 = add nuw nsw i64 %indvars.iv856, 1
  %exitcond860.not = icmp eq i64 %indvars.iv.next857, %wide.trip.count859
  br i1 %exitcond860.not, label %._crit_edge804, label %542, !llvm.loop !52

._crit_edge804:                                   ; preds = %598
  %603 = getelementptr inbounds i8, ptr %2, i64 80
  %604 = load i32, ptr %603, align 8, !tbaa !35
  %605 = getelementptr inbounds i8, ptr %1, i64 76
  %606 = load i32, ptr %605, align 4, !tbaa !36
  tail call void @libxsmm_x86_instruction_alu_imm(ptr noundef %0, i32 noundef %604, i32 noundef %606, i64 noundef 0) #3
  br i1 %528, label %.preheader758.lr.ph, label %._crit_edge813

.preheader758.lr.ph:                              ; preds = %._crit_edge804
  %607 = icmp sgt i32 %8, 0
  %608 = icmp eq i32 %8, 1
  %609 = icmp eq i32 %10, 0
  %or.cond7 = select i1 %608, i1 %609, i1 false
  %spec.select622.v = select i1 %or.cond7, i32 2, i32 1
  %610 = getelementptr inbounds i8, ptr %5, i64 4
  br i1 %607, label %.preheader758.us.preheader, label %._crit_edge813

.preheader758.us.preheader:                       ; preds = %.preheader758.lr.ph
  %wide.trip.count865 = zext nneg i32 %7 to i64
  br label %.preheader758.us

.preheader758.us:                                 ; preds = %.preheader758.us.preheader, %._crit_edge808.us
  %indvars.iv862 = phi i64 [ 0, %.preheader758.us.preheader ], [ %indvars.iv.next863, %._crit_edge808.us ]
  %.9811.us = phi i32 [ 0, %.preheader758.us.preheader ], [ %spec.select622.us, %._crit_edge808.us ]
  %.5584810.us = phi i32 [ 0, %.preheader758.us.preheader ], [ %618, %._crit_edge808.us ]
  %611 = shl nsw i32 %.5584810.us, 2
  br label %612

612:                                              ; preds = %.preheader758.us, %612
  %.3566806.us = phi i32 [ 0, %.preheader758.us ], [ %615, %612 ]
  %.10805.us = phi i32 [ %.9811.us, %.preheader758.us ], [ %spec.select622.us, %612 ]
  %613 = load i32, ptr %2, align 8, !tbaa !38
  %614 = load i32, ptr %605, align 4, !tbaa !36
  tail call void @libxsmm_x86_instruction_tile_move(ptr noundef %0, i32 noundef %613, i32 noundef 1611079755, i32 noundef %497, i32 noundef %614, i32 noundef 4, i32 noundef %611, i32 noundef %.10805.us) #3
  %spec.select622.us = add nsw i32 %.10805.us, %spec.select622.v
  %615 = add nuw nsw i32 %.3566806.us, 1
  %exitcond861.not = icmp eq i32 %615, %8
  br i1 %exitcond861.not, label %._crit_edge808.us, label %612, !llvm.loop !53

._crit_edge808.us:                                ; preds = %612
  %616 = getelementptr inbounds [4 x i32], ptr %610, i64 0, i64 %indvars.iv862
  %617 = load i32, ptr %616, align 4, !tbaa !16
  %618 = add i32 %617, %.5584810.us
  %indvars.iv.next863 = add nuw nsw i64 %indvars.iv862, 1
  %exitcond866.not = icmp eq i64 %indvars.iv.next863, %wide.trip.count865
  br i1 %exitcond866.not, label %._crit_edge813, label %.preheader758.us, !llvm.loop !54

._crit_edge813:                                   ; preds = %._crit_edge808.us, %.preheader758.lr.ph, %._crit_edge804.thread, %._crit_edge804
  %619 = phi ptr [ %531, %._crit_edge804.thread ], [ %605, %._crit_edge804 ], [ %605, %.preheader758.lr.ph ], [ %605, %._crit_edge808.us ]
  %620 = phi ptr [ %529, %._crit_edge804.thread ], [ %603, %._crit_edge804 ], [ %603, %.preheader758.lr.ph ], [ %603, %._crit_edge808.us ]
  %621 = load i32, ptr %15, align 4, !tbaa !49
  %622 = icmp eq i32 %497, %621
  br i1 %622, label %623, label %628

623:                                              ; preds = %._crit_edge813
  %624 = getelementptr inbounds i8, ptr %2, i64 96
  %625 = load i32, ptr %624, align 8, !tbaa !33
  %626 = icmp eq i32 %625, 1
  br i1 %626, label %627, label %628

627:                                              ; preds = %623
  tail call void @libxsmm_x86_instruction_pop_reg(ptr noundef %0, i32 noundef %497) #3
  br label %628

628:                                              ; preds = %627, %623, %._crit_edge813
  %629 = load i32, ptr %14, align 4, !tbaa !34
  %630 = icmp eq i32 %497, %629
  br i1 %630, label %631, label %635

631:                                              ; preds = %628
  %632 = load i32, ptr %11, align 4, !tbaa !15
  %633 = icmp eq i32 %632, 1
  br i1 %633, label %634, label %635

634:                                              ; preds = %631
  tail call void @libxsmm_x86_instruction_pop_reg(ptr noundef %0, i32 noundef %497) #3
  br label %635

635:                                              ; preds = %634, %631, %628
  %636 = load i32, ptr %15, align 4, !tbaa !49
  %637 = icmp eq i32 %16, %636
  br i1 %637, label %638, label %643

638:                                              ; preds = %635
  %639 = getelementptr inbounds i8, ptr %2, i64 96
  %640 = load i32, ptr %639, align 8, !tbaa !33
  %641 = icmp eq i32 %640, 1
  br i1 %641, label %642, label %643

642:                                              ; preds = %638
  tail call void @libxsmm_x86_instruction_pop_reg(ptr noundef %0, i32 noundef %16) #3
  br label %643

643:                                              ; preds = %642, %638, %635
  %644 = load i32, ptr %14, align 4, !tbaa !34
  %645 = icmp eq i32 %16, %644
  br i1 %645, label %646, label %.loopexit.sink.split

646:                                              ; preds = %643
  %647 = load i32, ptr %11, align 4, !tbaa !15
  %648 = icmp eq i32 %647, 1
  br i1 %648, label %649, label %.loopexit.sink.split

649:                                              ; preds = %646
  tail call void @libxsmm_x86_instruction_pop_reg(ptr noundef %0, i32 noundef %16) #3
  br label %.loopexit.sink.split

650:                                              ; preds = %439, %431
  %651 = icmp sgt i32 %7, 0
  br i1 %651, label %.preheader.lr.ph, label %.loopexit

.preheader.lr.ph:                                 ; preds = %650
  %652 = icmp sgt i32 %8, 0
  %653 = icmp eq i32 %8, 1
  %654 = icmp eq i32 %10, 0
  %or.cond9 = select i1 %653, i1 %654, i1 false
  %spec.select623.v = select i1 %or.cond9, i32 2, i32 1
  br i1 %652, label %.preheader.us, label %.loopexit

.preheader.us:                                    ; preds = %.preheader.lr.ph, %._crit_edge826.us
  %.6829.us = phi i32 [ %658, %._crit_edge826.us ], [ 0, %.preheader.lr.ph ]
  %.12828.us = phi i32 [ %spec.select623.us, %._crit_edge826.us ], [ 0, %.preheader.lr.ph ]
  br label %655

655:                                              ; preds = %.preheader.us, %655
  %.4567824.us = phi i32 [ 0, %.preheader.us ], [ %657, %655 ]
  %.13823.us = phi i32 [ %.12828.us, %.preheader.us ], [ %spec.select623.us, %655 ]
  %656 = load i32, ptr %2, align 8, !tbaa !38
  tail call void @libxsmm_x86_instruction_tile_move(ptr noundef %0, i32 noundef %656, i32 noundef 1342644297, i32 noundef 127, i32 noundef 127, i32 noundef 0, i32 noundef 0, i32 noundef %.13823.us) #3
  %spec.select623.us = add nsw i32 %.13823.us, %spec.select623.v
  %657 = add nuw nsw i32 %.4567824.us, 1
  %exitcond873.not = icmp eq i32 %657, %8
  br i1 %exitcond873.not, label %._crit_edge826.us, label %655, !llvm.loop !55

._crit_edge826.us:                                ; preds = %655
  %658 = add nuw nsw i32 %.6829.us, 1
  %exitcond874.not = icmp eq i32 %658, %7
  br i1 %exitcond874.not, label %.loopexit, label %.preheader.us, !llvm.loop !56

.loopexit.sink.split:                             ; preds = %643, %646, %649, %._crit_edge822, %474, %478, %412
  %.sink907 = phi ptr [ %414, %412 ], [ %457, %478 ], [ %457, %474 ], [ %457, %._crit_edge822 ], [ %619, %649 ], [ %619, %646 ], [ %619, %643 ]
  %.sink906 = phi i64 [ 12, %412 ], [ 20, %478 ], [ 20, %474 ], [ 20, %._crit_edge822 ], [ 20, %649 ], [ 20, %646 ], [ 20, %643 ]
  %.sink.in = phi ptr [ %413, %412 ], [ %455, %478 ], [ %455, %474 ], [ %455, %._crit_edge822 ], [ %620, %649 ], [ %620, %646 ], [ %620, %643 ]
  %.sink = load i32, ptr %.sink.in, align 8, !tbaa !35
  %659 = load i32, ptr %.sink907, align 4, !tbaa !16
  %660 = getelementptr inbounds i8, ptr %3, i64 %.sink906
  %661 = load i32, ptr %660, align 1, !tbaa !16
  %662 = zext i32 %661 to i64
  tail call void @libxsmm_x86_instruction_alu_imm(ptr noundef %0, i32 noundef %.sink, i32 noundef %659, i64 noundef %662) #3
  br label %.loopexit

.loopexit:                                        ; preds = %._crit_edge826.us, %.loopexit.sink.split, %.preheader.lr.ph, %650, %490, %408
  ret void
}

declare void @libxsmm_generator_cvt_to_ps_avx512(ptr noundef, i8 noundef signext, i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #0

declare void @libxsmm_x86_instruction_tile_move(ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #0

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

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

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


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