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

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

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

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

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

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

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

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

declare i32 @libxsmm_x86_is_Abf8_Bbf16_gemm(ptr noundef) #0

declare i32 @libxsmm_x86_is_Abf8_Bf16_gemm(ptr noundef) #0

declare i32 @libxsmm_x86_is_Ahf8_Bbf16_gemm(ptr noundef) #0

declare i32 @libxsmm_x86_is_Amxfp4_Bbf16_gemm(ptr noundef) #0

declare i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef) #0

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

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

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

; Function Attrs: nounwind uwtable
define dso_local void @libxsmm_generator_gemm_amx_kernel_kloop(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %4, ptr noundef %5, ptr noundef %6, i64 noundef %7, i64 noundef %8, i32 noundef %9) #2 {
  %11 = alloca ptr, align 8
  %12 = alloca ptr, align 8
  %13 = alloca ptr, align 8
  %14 = alloca ptr, align 8
  %15 = alloca ptr, align 8
  %16 = alloca ptr, align 8
  %17 = alloca ptr, align 8
  %18 = alloca i64, align 8
  %19 = alloca i64, align 8
  %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 i64, align 8
  %29 = alloca i64, align 8
  %30 = alloca i64, align 8
  %31 = alloca i32, align 4
  %32 = alloca i32, align 4
  %33 = alloca i32, align 4
  %34 = alloca i32, align 4
  %35 = alloca i32, align 4
  %36 = alloca i32, align 4
  %37 = alloca i32, align 4
  %38 = alloca i32, align 4
  %39 = alloca i32, align 4
  %40 = alloca i32, align 4
  store ptr %0, ptr %11, align 8, !tbaa !5
  store ptr %1, ptr %12, align 8, !tbaa !5
  store ptr %2, ptr %13, align 8, !tbaa !5
  store ptr %3, ptr %14, align 8, !tbaa !5
  store ptr %4, ptr %15, align 8, !tbaa !5
  store ptr %5, ptr %16, align 8, !tbaa !5
  store ptr %6, ptr %17, align 8, !tbaa !5
  store i64 %7, ptr %18, align 8, !tbaa !9
  store i64 %8, ptr %19, align 8, !tbaa !9
  store i32 %9, ptr %20, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #3
  store i32 16, ptr %21, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #3
  %41 = load ptr, ptr %15, align 8, !tbaa !5
  %42 = call i32 @libxsmm_x86_is_Abf8_Bbf16_gemm(ptr noundef %41)
  store i32 %42, ptr %22, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #3
  %43 = load ptr, ptr %15, align 8, !tbaa !5
  %44 = call i32 @libxsmm_x86_is_Abf8_Bf16_gemm(ptr noundef %43)
  store i32 %44, ptr %23, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #3
  %45 = load ptr, ptr %15, align 8, !tbaa !5
  %46 = call i32 @libxsmm_x86_is_Ahf8_Bbf16_gemm(ptr noundef %45)
  store i32 %46, ptr %24, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #3
  %47 = load ptr, ptr %15, align 8, !tbaa !5
  %48 = call i32 @libxsmm_x86_is_Amxfp4_Bbf16_gemm(ptr noundef %47)
  store i32 %48, ptr %25, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #3
  %49 = load i32, ptr %22, align 4, !tbaa !11
  %50 = icmp ugt i32 %49, 0
  br i1 %50, label %60, label %51

51:                                               ; preds = %10
  %52 = load i32, ptr %23, align 4, !tbaa !11
  %53 = icmp ugt i32 %52, 0
  br i1 %53, label %60, label %54

54:                                               ; preds = %51
  %55 = load i32, ptr %24, align 4, !tbaa !11
  %56 = icmp ugt i32 %55, 0
  br i1 %56, label %60, label %57

57:                                               ; preds = %54
  %58 = load i32, ptr %25, align 4, !tbaa !11
  %59 = icmp ugt i32 %58, 0
  br i1 %59, label %60, label %61

60:                                               ; preds = %57, %54, %51, %10
  br label %67

61:                                               ; preds = %57
  %62 = load ptr, ptr %15, align 8, !tbaa !5
  %63 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %62, i32 0, i32 8
  %64 = getelementptr inbounds [3 x i8], ptr %63, i64 0, i64 0
  %65 = call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef %64)
  %66 = call i32 @libxsmm_cpuid_dot_pack_factor(i32 noundef %65)
  br label %67

67:                                               ; preds = %61, %60
  %68 = phi i32 [ 2, %60 ], [ %66, %61 ]
  store i32 %68, ptr %26, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #3
  store i64 0, ptr %28, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #3
  store i64 0, ptr %29, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #3
  store i64 -2, ptr %30, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #3
  store i32 0, ptr %31, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #3
  %69 = load ptr, ptr %15, align 8, !tbaa !5
  %70 = call i32 @libxsmm_x86_is_Ai4_Bi8_gemm(ptr noundef %69)
  store i32 %70, ptr %32, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #3
  %71 = load i32, ptr %32, align 4, !tbaa !11
  %72 = icmp ugt i32 %71, 0
  br i1 %72, label %90, label %73

73:                                               ; preds = %67
  %74 = load i32, ptr %22, align 4, !tbaa !11
  %75 = icmp ugt i32 %74, 0
  br i1 %75, label %90, label %76

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

79:                                               ; preds = %76
  %80 = load i32, ptr %24, align 4, !tbaa !11
  %81 = icmp ugt i32 %80, 0
  br i1 %81, label %90, label %82

82:                                               ; preds = %79
  %83 = load i32, ptr %25, align 4, !tbaa !11
  %84 = icmp ugt i32 %83, 0
  br i1 %84, label %90, label %85

85:                                               ; preds = %82
  %86 = load ptr, ptr %14, align 8, !tbaa !5
  %87 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %86, i32 0, i32 124
  %88 = load i32, ptr %87, align 8, !tbaa !13
  %89 = icmp ugt i32 %88, 0
  br i1 %89, label %90, label %94

90:                                               ; preds = %85, %82, %79, %76, %73, %67
  %91 = load ptr, ptr %17, align 8, !tbaa !5
  %92 = getelementptr inbounds %struct.libxsmm_blocking_info_t, ptr %91, i32 0, i32 2
  %93 = load i32, ptr %92, align 4, !tbaa !17
  br label %98

94:                                               ; preds = %85
  %95 = load ptr, ptr %15, align 8, !tbaa !5
  %96 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %95, i32 0, i32 3
  %97 = load i32, ptr %96, align 1, !tbaa !19
  br label %98

98:                                               ; preds = %94, %90
  %99 = phi i32 [ %93, %90 ], [ %97, %94 ]
  store i32 %99, ptr %33, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #3
  %100 = load i32, ptr %22, align 4, !tbaa !11
  %101 = icmp ugt i32 %100, 0
  br i1 %101, label %111, label %102

102:                                              ; preds = %98
  %103 = load i32, ptr %23, align 4, !tbaa !11
  %104 = icmp ugt i32 %103, 0
  br i1 %104, label %111, label %105

105:                                              ; preds = %102
  %106 = load i32, ptr %24, align 4, !tbaa !11
  %107 = icmp ugt i32 %106, 0
  br i1 %107, label %111, label %108

108:                                              ; preds = %105
  %109 = load i32, ptr %25, align 4, !tbaa !11
  %110 = icmp ugt i32 %109, 0
  br i1 %110, label %111, label %112

111:                                              ; preds = %108, %105, %102, %98
  br label %116

112:                                              ; preds = %108
  %113 = load ptr, ptr %14, align 8, !tbaa !5
  %114 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %113, i32 0, i32 3
  %115 = load i32, ptr %114, align 4, !tbaa !21
  br label %116

116:                                              ; preds = %112, %111
  %117 = phi i32 [ 2, %111 ], [ %115, %112 ]
  store i32 %117, ptr %34, align 4, !tbaa !11
  %118 = load ptr, ptr %15, align 8, !tbaa !5
  %119 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %118, i32 0, i32 8
  %120 = getelementptr inbounds [3 x i8], ptr %119, i64 0, i64 0
  %121 = call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef %120)
  %122 = icmp eq i32 2, %121
  br i1 %122, label %141, label %123

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

129:                                              ; preds = %123
  %130 = load i32, ptr %25, align 4, !tbaa !11
  %131 = icmp ugt i32 %130, 0
  br i1 %131, label %141, label %132

132:                                              ; preds = %129
  %133 = load i32, ptr %22, align 4, !tbaa !11
  %134 = icmp ugt i32 %133, 0
  br i1 %134, label %141, label %135

135:                                              ; preds = %132
  %136 = load i32, ptr %23, align 4, !tbaa !11
  %137 = icmp ugt i32 %136, 0
  br i1 %137, label %141, label %138

138:                                              ; preds = %135
  %139 = load i32, ptr %24, align 4, !tbaa !11
  %140 = icmp ugt i32 %139, 0
  br i1 %140, label %141, label %142

141:                                              ; preds = %138, %135, %132, %129, %123, %116
  store i32 32, ptr %21, align 4, !tbaa !11
  br label %162

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

148:                                              ; preds = %142
  %149 = load ptr, ptr %15, align 8, !tbaa !5
  %150 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %149, i32 0, i32 8
  %151 = getelementptr inbounds [3 x i8], ptr %150, i64 0, i64 0
  %152 = call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef %151)
  %153 = icmp eq i32 4, %152
  br i1 %153, label %160, label %154

154:                                              ; preds = %148
  %155 = load ptr, ptr %15, align 8, !tbaa !5
  %156 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %155, i32 0, i32 8
  %157 = getelementptr inbounds [3 x i8], ptr %156, i64 0, i64 0
  %158 = call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef %157)
  %159 = icmp eq i32 5, %158
  br i1 %159, label %160, label %161

160:                                              ; preds = %154, %148, %142
  store i32 64, ptr %21, align 4, !tbaa !11
  br label %161

161:                                              ; preds = %160, %154
  br label %162

162:                                              ; preds = %161, %141
  %163 = load ptr, ptr %15, align 8, !tbaa !5
  %164 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %163, i32 0, i32 6
  %165 = load i32, ptr %164, align 1, !tbaa !22
  %166 = and i32 %165, 262144
  %167 = icmp ne i32 %166, 0
  br i1 %167, label %168, label %173

168:                                              ; preds = %162
  %169 = load ptr, ptr %14, align 8, !tbaa !5
  %170 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %169, i32 0, i32 110
  %171 = load i32, ptr %170, align 4, !tbaa !23
  %172 = zext i32 %171 to i64
  store i64 %172, ptr %30, align 8, !tbaa !9
  br label %173

173:                                              ; preds = %168, %162
  %174 = load ptr, ptr %15, align 8, !tbaa !5
  %175 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %174, i32 0, i32 6
  %176 = load i32, ptr %175, align 1, !tbaa !22
  %177 = and i32 %176, 131072
  %178 = icmp ugt i32 %177, 0
  br i1 %178, label %179, label %187

179:                                              ; preds = %173
  %180 = load i32, ptr %20, align 4, !tbaa !11
  %181 = icmp eq i32 %180, 1
  br i1 %181, label %182, label %187

182:                                              ; preds = %179
  %183 = load ptr, ptr %14, align 8, !tbaa !5
  %184 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %183, i32 0, i32 110
  %185 = load i32, ptr %184, align 4, !tbaa !23
  %186 = zext i32 %185 to i64
  store i64 %186, ptr %30, align 8, !tbaa !9
  br label %187

187:                                              ; preds = %182, %179, %173
  br label %188

188:                                              ; preds = %195, %187
  %189 = load ptr, ptr %15, align 8, !tbaa !5
  %190 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %189, i32 0, i32 2
  %191 = load i32, ptr %190, align 1, !tbaa !24
  %192 = load i32, ptr %21, align 4, !tbaa !11
  %193 = urem i32 %191, %192
  %194 = icmp ne i32 %193, 0
  br i1 %194, label %195, label %199

195:                                              ; preds = %188
  %196 = load i32, ptr %26, align 4, !tbaa !11
  %197 = load i32, ptr %21, align 4, !tbaa !11
  %198 = sub i32 %197, %196
  store i32 %198, ptr %21, align 4, !tbaa !11
  br label %188, !llvm.loop !25

199:                                              ; preds = %188
  %200 = load ptr, ptr %15, align 8, !tbaa !5
  %201 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %200, i32 0, i32 6
  %202 = load i32, ptr %201, align 1, !tbaa !22
  %203 = and i32 %202, 8388608
  %204 = icmp ugt i32 %203, 0
  br i1 %204, label %205, label %308

205:                                              ; preds = %199
  %206 = load ptr, ptr %15, align 8, !tbaa !5
  %207 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %206, i32 0, i32 2
  %208 = load i32, ptr %207, align 1, !tbaa !24
  %209 = icmp ugt i32 %208, 1024
  br i1 %209, label %210, label %308

210:                                              ; preds = %205
  %211 = load ptr, ptr %15, align 8, !tbaa !5
  %212 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %211, i32 0, i32 2
  %213 = load i32, ptr %212, align 1, !tbaa !24
  %214 = load i32, ptr %21, align 4, !tbaa !11
  %215 = udiv i32 %213, %214
  %216 = urem i32 %215, 2
  %217 = icmp eq i32 %216, 0
  br i1 %217, label %218, label %308

218:                                              ; preds = %210
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #3
  store i32 9, ptr %35, align 4, !tbaa !11
  %219 = load ptr, ptr %11, align 8, !tbaa !5
  %220 = load ptr, ptr %12, align 8, !tbaa !5
  %221 = load ptr, ptr %13, align 8, !tbaa !5
  %222 = load ptr, ptr %14, align 8, !tbaa !5
  %223 = load ptr, ptr %15, align 8, !tbaa !5
  %224 = load ptr, ptr %16, align 8, !tbaa !5
  %225 = load ptr, ptr %17, align 8, !tbaa !5
  %226 = load i32, ptr %20, align 4, !tbaa !11
  call void @libxsmm_generator_gemm_amx_microkernel(ptr noundef %219, ptr noundef %220, ptr noundef %221, ptr noundef %222, ptr noundef %223, ptr noundef %224, ptr noundef %225, i64 noundef 0, i64 noundef 0, i32 noundef 0, i64 noundef 0, i32 noundef %226)
  %227 = load ptr, ptr %11, align 8, !tbaa !5
  %228 = load ptr, ptr %14, align 8, !tbaa !5
  %229 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %228, i32 0, i32 16
  %230 = load i32, ptr %229, align 8, !tbaa !27
  %231 = load ptr, ptr %13, align 8, !tbaa !5
  %232 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %231, i32 0, i32 3
  %233 = load i32, ptr %232, align 4, !tbaa !28
  %234 = load i32, ptr %21, align 4, !tbaa !11
  %235 = zext i32 %234 to i64
  %236 = load ptr, ptr %14, align 8, !tbaa !5
  %237 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %236, i32 0, i32 4
  %238 = load i32, ptr %237, align 8, !tbaa !30
  %239 = zext i32 %238 to i64
  %240 = mul nsw i64 %235, %239
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef %227, i32 noundef %230, i32 noundef %233, i64 noundef %240)
  %241 = load ptr, ptr %11, align 8, !tbaa !5
  %242 = load ptr, ptr %12, align 8, !tbaa !5
  %243 = load ptr, ptr %14, align 8, !tbaa !5
  %244 = load i32, ptr %35, align 4, !tbaa !11
  call void @libxsmm_generator_gemm_header_k_loop_amx(ptr noundef %241, ptr noundef %242, ptr noundef %243, i32 noundef %244)
  %245 = load ptr, ptr %11, align 8, !tbaa !5
  %246 = load ptr, ptr %12, align 8, !tbaa !5
  %247 = load ptr, ptr %13, align 8, !tbaa !5
  %248 = load ptr, ptr %14, align 8, !tbaa !5
  %249 = load ptr, ptr %15, align 8, !tbaa !5
  %250 = load ptr, ptr %16, align 8, !tbaa !5
  %251 = load ptr, ptr %17, align 8, !tbaa !5
  %252 = load i32, ptr %20, align 4, !tbaa !11
  call void @libxsmm_generator_gemm_amx_microkernel(ptr noundef %245, ptr noundef %246, ptr noundef %247, ptr noundef %248, ptr noundef %249, ptr noundef %250, ptr noundef %251, i64 noundef 0, i64 noundef 0, i32 noundef 0, i64 noundef 1, i32 noundef %252)
  %253 = load ptr, ptr %11, align 8, !tbaa !5
  %254 = load ptr, ptr %14, align 8, !tbaa !5
  %255 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %254, i32 0, i32 16
  %256 = load i32, ptr %255, align 8, !tbaa !27
  %257 = load ptr, ptr %13, align 8, !tbaa !5
  %258 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %257, i32 0, i32 3
  %259 = load i32, ptr %258, align 4, !tbaa !28
  %260 = load i32, ptr %21, align 4, !tbaa !11
  %261 = zext i32 %260 to i64
  %262 = load ptr, ptr %14, align 8, !tbaa !5
  %263 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %262, i32 0, i32 4
  %264 = load i32, ptr %263, align 8, !tbaa !30
  %265 = zext i32 %264 to i64
  %266 = mul nsw i64 %261, %265
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef %253, i32 noundef %256, i32 noundef %259, i64 noundef %266)
  %267 = load ptr, ptr %11, align 8, !tbaa !5
  %268 = load ptr, ptr %12, align 8, !tbaa !5
  %269 = load ptr, ptr %13, align 8, !tbaa !5
  %270 = load ptr, ptr %14, align 8, !tbaa !5
  %271 = load ptr, ptr %15, align 8, !tbaa !5
  %272 = load ptr, ptr %16, align 8, !tbaa !5
  %273 = load ptr, ptr %17, align 8, !tbaa !5
  %274 = load i32, ptr %20, align 4, !tbaa !11
  call void @libxsmm_generator_gemm_amx_microkernel(ptr noundef %267, ptr noundef %268, ptr noundef %269, ptr noundef %270, ptr noundef %271, ptr noundef %272, ptr noundef %273, i64 noundef 0, i64 noundef 0, i32 noundef 0, i64 noundef 2, i32 noundef %274)
  %275 = load ptr, ptr %11, align 8, !tbaa !5
  %276 = load ptr, ptr %14, align 8, !tbaa !5
  %277 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %276, i32 0, i32 16
  %278 = load i32, ptr %277, align 8, !tbaa !27
  %279 = load ptr, ptr %13, align 8, !tbaa !5
  %280 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %279, i32 0, i32 3
  %281 = load i32, ptr %280, align 4, !tbaa !28
  %282 = load i32, ptr %21, align 4, !tbaa !11
  %283 = zext i32 %282 to i64
  %284 = load ptr, ptr %14, align 8, !tbaa !5
  %285 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %284, i32 0, i32 4
  %286 = load i32, ptr %285, align 8, !tbaa !30
  %287 = zext i32 %286 to i64
  %288 = mul nsw i64 %283, %287
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef %275, i32 noundef %278, i32 noundef %281, i64 noundef %288)
  %289 = load ptr, ptr %11, align 8, !tbaa !5
  %290 = load ptr, ptr %12, align 8, !tbaa !5
  %291 = load ptr, ptr %14, align 8, !tbaa !5
  %292 = load i32, ptr %35, align 4, !tbaa !11
  %293 = load ptr, ptr %15, align 8, !tbaa !5
  %294 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %293, i32 0, i32 2
  %295 = load i32, ptr %294, align 1, !tbaa !24
  %296 = load i32, ptr %21, align 4, !tbaa !11
  %297 = udiv i32 %295, %296
  %298 = sub i32 %297, 2
  %299 = udiv i32 %298, 2
  call void @libxsmm_generator_gemm_footer_k_loop_amx(ptr noundef %289, ptr noundef %290, ptr noundef %291, i32 noundef %292, i32 noundef %299)
  %300 = load ptr, ptr %11, align 8, !tbaa !5
  %301 = load ptr, ptr %12, align 8, !tbaa !5
  %302 = load ptr, ptr %13, align 8, !tbaa !5
  %303 = load ptr, ptr %14, align 8, !tbaa !5
  %304 = load ptr, ptr %15, align 8, !tbaa !5
  %305 = load ptr, ptr %16, align 8, !tbaa !5
  %306 = load ptr, ptr %17, align 8, !tbaa !5
  %307 = load i32, ptr %20, align 4, !tbaa !11
  call void @libxsmm_generator_gemm_amx_microkernel(ptr noundef %300, ptr noundef %301, ptr noundef %302, ptr noundef %303, ptr noundef %304, ptr noundef %305, ptr noundef %306, i64 noundef 0, i64 noundef 0, i32 noundef 1, i64 noundef 1, i32 noundef %307)
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #3
  br label %724

308:                                              ; preds = %210, %205, %199
  call void @llvm.lifetime.start.p0(i64 4, ptr %36) #3
  store i32 256, ptr %36, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %37) #3
  %309 = load ptr, ptr %15, align 8, !tbaa !5
  %310 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %309, i32 0, i32 6
  %311 = load i32, ptr %310, align 1, !tbaa !22
  %312 = and i32 %311, 262144
  %313 = icmp ugt i32 %312, 0
  br i1 %313, label %326, label %314

314:                                              ; preds = %308
  %315 = load ptr, ptr %15, align 8, !tbaa !5
  %316 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %315, i32 0, i32 6
  %317 = load i32, ptr %316, align 1, !tbaa !22
  %318 = and i32 %317, 131072
  %319 = icmp ugt i32 %318, 0
  br i1 %319, label %326, label %320

320:                                              ; preds = %314
  %321 = load ptr, ptr %15, align 8, !tbaa !5
  %322 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %321, i32 0, i32 6
  %323 = load i32, ptr %322, align 1, !tbaa !22
  %324 = and i32 %323, 65536
  %325 = icmp ugt i32 %324, 0
  br i1 %325, label %326, label %340

326:                                              ; preds = %320, %314, %308
  %327 = load ptr, ptr %15, align 8, !tbaa !5
  %328 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %327, i32 0, i32 12
  %329 = load i8, ptr %328, align 1, !tbaa !31
  %330 = zext i8 %329 to i32
  %331 = icmp slt i32 1, %330
  br i1 %331, label %332, label %337

332:                                              ; preds = %326
  %333 = load ptr, ptr %15, align 8, !tbaa !5
  %334 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %333, i32 0, i32 12
  %335 = load i8, ptr %334, align 1, !tbaa !31
  %336 = zext i8 %335 to i32
  br label %338

337:                                              ; preds = %326
  br label %338

338:                                              ; preds = %337, %332
  %339 = phi i32 [ %336, %332 ], [ 1, %337 ]
  br label %341

340:                                              ; preds = %320
  br label %341

341:                                              ; preds = %340, %338
  %342 = phi i32 [ %339, %338 ], [ 1, %340 ]
  store i32 %342, ptr %37, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %38) #3
  %343 = load ptr, ptr %15, align 8, !tbaa !5
  %344 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %343, i32 0, i32 2
  %345 = load i32, ptr %344, align 1, !tbaa !24
  %346 = load i32, ptr %21, align 4, !tbaa !11
  %347 = add i32 %345, %346
  %348 = sub i32 %347, 1
  %349 = load i32, ptr %21, align 4, !tbaa !11
  %350 = udiv i32 %348, %349
  store i32 %350, ptr %38, align 4, !tbaa !11
  %351 = load i32, ptr %38, align 4, !tbaa !11
  %352 = load i32, ptr %37, align 4, !tbaa !11
  %353 = mul i32 %351, %352
  %354 = load i32, ptr %36, align 4, !tbaa !11
  %355 = icmp ugt i32 %353, %354
  br i1 %355, label %356, label %615

356:                                              ; preds = %341
  %357 = load ptr, ptr %15, align 8, !tbaa !5
  %358 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %357, i32 0, i32 6
  %359 = load i32, ptr %358, align 1, !tbaa !22
  %360 = and i32 %359, 8388608
  %361 = icmp eq i32 %360, 0
  br i1 %361, label %362, label %615

362:                                              ; preds = %356
  call void @llvm.lifetime.start.p0(i64 4, ptr %39) #3
  %363 = load ptr, ptr %13, align 8, !tbaa !5
  %364 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %363, i32 0, i32 23
  %365 = load i32, ptr %364, align 4, !tbaa !32
  store i32 %365, ptr %39, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %40) #3
  store i32 4, ptr %40, align 4, !tbaa !11
  br label %366

366:                                              ; preds = %376, %362
  %367 = load i32, ptr %40, align 4, !tbaa !11
  %368 = load i32, ptr %37, align 4, !tbaa !11
  %369 = mul i32 %367, %368
  %370 = load i32, ptr %36, align 4, !tbaa !11
  %371 = icmp ugt i32 %369, %370
  br i1 %371, label %372, label %379

372:                                              ; preds = %366
  %373 = load i32, ptr %40, align 4, !tbaa !11
  %374 = icmp eq i32 %373, 1
  br i1 %374, label %375, label %376

375:                                              ; preds = %372
  br label %379

376:                                              ; preds = %372
  %377 = load i32, ptr %40, align 4, !tbaa !11
  %378 = add i32 %377, -1
  store i32 %378, ptr %40, align 4, !tbaa !11
  br label %366, !llvm.loop !33

379:                                              ; preds = %375, %366
  br label %380

380:                                              ; preds = %386, %379
  %381 = load i32, ptr %38, align 4, !tbaa !11
  %382 = sub i32 %381, 1
  %383 = load i32, ptr %40, align 4, !tbaa !11
  %384 = urem i32 %382, %383
  %385 = icmp ne i32 %384, 0
  br i1 %385, label %386, label %389

386:                                              ; preds = %380
  %387 = load i32, ptr %40, align 4, !tbaa !11
  %388 = add i32 %387, -1
  store i32 %388, ptr %40, align 4, !tbaa !11
  br label %380, !llvm.loop !34

389:                                              ; preds = %380
  store i32 0, ptr %31, align 4, !tbaa !11
  %390 = load ptr, ptr %11, align 8, !tbaa !5
  %391 = load i32, ptr %39, align 4, !tbaa !11
  call void @libxsmm_x86_instruction_push_reg(ptr noundef %390, i32 noundef %391)
  %392 = load ptr, ptr %11, align 8, !tbaa !5
  %393 = load ptr, ptr %12, align 8, !tbaa !5
  %394 = load ptr, ptr %14, align 8, !tbaa !5
  %395 = load i32, ptr %39, align 4, !tbaa !11
  call void @libxsmm_generator_gemm_header_k_loop_amx(ptr noundef %392, ptr noundef %393, ptr noundef %394, i32 noundef %395)
  store i32 0, ptr %27, align 4, !tbaa !11
  br label %396

396:                                              ; preds = %478, %389
  %397 = load i32, ptr %27, align 4, !tbaa !11
  %398 = load i32, ptr %40, align 4, !tbaa !11
  %399 = load i32, ptr %21, align 4, !tbaa !11
  %400 = mul i32 %398, %399
  %401 = icmp ult i32 %397, %400
  br i1 %401, label %402, label %482

402:                                              ; preds = %396
  %403 = load i32, ptr %27, align 4, !tbaa !11
  %404 = load ptr, ptr %14, align 8, !tbaa !5
  %405 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %404, i32 0, i32 115
  store i32 %403, ptr %405, align 4, !tbaa !35
  %406 = load ptr, ptr %15, align 8, !tbaa !5
  %407 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %406, i32 0, i32 6
  %408 = load i32, ptr %407, align 1, !tbaa !22
  %409 = and i32 %408, 1
  %410 = icmp ugt i32 %409, 0
  br i1 %410, label %411, label %421

411:                                              ; preds = %402
  %412 = load i32, ptr %27, align 4, !tbaa !11
  %413 = zext i32 %412 to i64
  %414 = load ptr, ptr %14, align 8, !tbaa !5
  %415 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %414, i32 0, i32 3
  %416 = load i32, ptr %415, align 4, !tbaa !21
  %417 = zext i32 %416 to i64
  %418 = mul nsw i64 %413, %417
  %419 = load i64, ptr %18, align 8, !tbaa !9
  %420 = add nsw i64 %418, %419
  store i64 %420, ptr %28, align 8, !tbaa !9
  br label %434

421:                                              ; preds = %402
  %422 = load i32, ptr %27, align 4, !tbaa !11
  %423 = load i32, ptr %33, align 4, !tbaa !11
  %424 = mul i32 %422, %423
  %425 = load i32, ptr %34, align 4, !tbaa !11
  %426 = mul i32 %424, %425
  %427 = load ptr, ptr %14, align 8, !tbaa !5
  %428 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %427, i32 0, i32 36
  %429 = load i32, ptr %428, align 8, !tbaa !36
  %430 = udiv i32 %426, %429
  %431 = zext i32 %430 to i64
  %432 = load i64, ptr %18, align 8, !tbaa !9
  %433 = add nsw i64 %431, %432
  store i64 %433, ptr %28, align 8, !tbaa !9
  br label %434

434:                                              ; preds = %421, %411
  %435 = load ptr, ptr %15, align 8, !tbaa !5
  %436 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %435, i32 0, i32 6
  %437 = load i32, ptr %436, align 1, !tbaa !22
  %438 = and i32 %437, 2
  %439 = icmp ugt i32 %438, 0
  br i1 %439, label %440, label %455

440:                                              ; preds = %434
  %441 = load i32, ptr %27, align 4, !tbaa !11
  %442 = zext i32 %441 to i64
  %443 = load ptr, ptr %15, align 8, !tbaa !5
  %444 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %443, i32 0, i32 4
  %445 = load i32, ptr %444, align 1, !tbaa !37
  %446 = zext i32 %445 to i64
  %447 = mul nsw i64 %442, %446
  %448 = load ptr, ptr %14, align 8, !tbaa !5
  %449 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %448, i32 0, i32 4
  %450 = load i32, ptr %449, align 8, !tbaa !30
  %451 = zext i32 %450 to i64
  %452 = mul nsw i64 %447, %451
  %453 = load i64, ptr %19, align 8, !tbaa !9
  %454 = add nsw i64 %452, %453
  store i64 %454, ptr %29, align 8, !tbaa !9
  br label %465

455:                                              ; preds = %434
  %456 = load i32, ptr %27, align 4, !tbaa !11
  %457 = zext i32 %456 to i64
  %458 = load ptr, ptr %14, align 8, !tbaa !5
  %459 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %458, i32 0, i32 4
  %460 = load i32, ptr %459, align 8, !tbaa !30
  %461 = zext i32 %460 to i64
  %462 = mul nsw i64 %457, %461
  %463 = load i64, ptr %19, align 8, !tbaa !9
  %464 = add nsw i64 %462, %463
  store i64 %464, ptr %29, align 8, !tbaa !9
  br label %465

465:                                              ; preds = %455, %440
  %466 = load ptr, ptr %11, align 8, !tbaa !5
  %467 = load ptr, ptr %12, align 8, !tbaa !5
  %468 = load ptr, ptr %13, align 8, !tbaa !5
  %469 = load ptr, ptr %14, align 8, !tbaa !5
  %470 = load ptr, ptr %15, align 8, !tbaa !5
  %471 = load ptr, ptr %16, align 8, !tbaa !5
  %472 = load ptr, ptr %17, align 8, !tbaa !5
  %473 = load i64, ptr %28, align 8, !tbaa !9
  %474 = load i64, ptr %29, align 8, !tbaa !9
  %475 = load i32, ptr %31, align 4, !tbaa !11
  %476 = load i64, ptr %30, align 8, !tbaa !9
  %477 = load i32, ptr %20, align 4, !tbaa !11
  call void @libxsmm_generator_gemm_amx_microkernel(ptr noundef %466, ptr noundef %467, ptr noundef %468, ptr noundef %469, ptr noundef %470, ptr noundef %471, ptr noundef %472, i64 noundef %473, i64 noundef %474, i32 noundef %475, i64 noundef %476, i32 noundef %477)
  br label %478

478:                                              ; preds = %465
  %479 = load i32, ptr %21, align 4, !tbaa !11
  %480 = load i32, ptr %27, align 4, !tbaa !11
  %481 = add i32 %480, %479
  store i32 %481, ptr %27, align 4, !tbaa !11
  br label %396, !llvm.loop !38

482:                                              ; preds = %396
  %483 = load ptr, ptr %11, align 8, !tbaa !5
  %484 = load ptr, ptr %14, align 8, !tbaa !5
  %485 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %484, i32 0, i32 16
  %486 = load i32, ptr %485, align 8, !tbaa !27
  %487 = load ptr, ptr %13, align 8, !tbaa !5
  %488 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %487, i32 0, i32 1
  %489 = load i32, ptr %488, align 4, !tbaa !39
  %490 = load i32, ptr %33, align 4, !tbaa !11
  %491 = zext i32 %490 to i64
  %492 = load i32, ptr %40, align 4, !tbaa !11
  %493 = zext i32 %492 to i64
  %494 = mul nsw i64 %491, %493
  %495 = load i32, ptr %21, align 4, !tbaa !11
  %496 = zext i32 %495 to i64
  %497 = mul nsw i64 %494, %496
  %498 = load i32, ptr %34, align 4, !tbaa !11
  %499 = zext i32 %498 to i64
  %500 = mul nsw i64 %497, %499
  %501 = load ptr, ptr %14, align 8, !tbaa !5
  %502 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %501, i32 0, i32 36
  %503 = load i32, ptr %502, align 8, !tbaa !36
  %504 = zext i32 %503 to i64
  %505 = sdiv i64 %500, %504
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef %483, i32 noundef %486, i32 noundef %489, i64 noundef %505)
  %506 = load ptr, ptr %11, align 8, !tbaa !5
  %507 = load ptr, ptr %14, align 8, !tbaa !5
  %508 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %507, i32 0, i32 16
  %509 = load i32, ptr %508, align 8, !tbaa !27
  %510 = load ptr, ptr %13, align 8, !tbaa !5
  %511 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %510, i32 0, i32 3
  %512 = load i32, ptr %511, align 4, !tbaa !28
  %513 = load i32, ptr %40, align 4, !tbaa !11
  %514 = zext i32 %513 to i64
  %515 = load i32, ptr %21, align 4, !tbaa !11
  %516 = zext i32 %515 to i64
  %517 = mul nsw i64 %514, %516
  %518 = load ptr, ptr %14, align 8, !tbaa !5
  %519 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %518, i32 0, i32 4
  %520 = load i32, ptr %519, align 8, !tbaa !30
  %521 = zext i32 %520 to i64
  %522 = mul nsw i64 %517, %521
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef %506, i32 noundef %509, i32 noundef %512, i64 noundef %522)
  %523 = load ptr, ptr %11, align 8, !tbaa !5
  %524 = load ptr, ptr %12, align 8, !tbaa !5
  %525 = load ptr, ptr %14, align 8, !tbaa !5
  %526 = load i32, ptr %39, align 4, !tbaa !11
  %527 = load i32, ptr %38, align 4, !tbaa !11
  %528 = sub i32 %527, 1
  %529 = load i32, ptr %40, align 4, !tbaa !11
  %530 = udiv i32 %528, %529
  call void @libxsmm_generator_gemm_footer_k_loop_amx(ptr noundef %523, ptr noundef %524, ptr noundef %525, i32 noundef %526, i32 noundef %530)
  %531 = load ptr, ptr %11, align 8, !tbaa !5
  %532 = load ptr, ptr %14, align 8, !tbaa !5
  %533 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %532, i32 0, i32 17
  %534 = load i32, ptr %533, align 4, !tbaa !40
  %535 = load ptr, ptr %13, align 8, !tbaa !5
  %536 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %535, i32 0, i32 1
  %537 = load i32, ptr %536, align 4, !tbaa !39
  %538 = load i32, ptr %33, align 4, !tbaa !11
  %539 = zext i32 %538 to i64
  %540 = load i32, ptr %34, align 4, !tbaa !11
  %541 = zext i32 %540 to i64
  %542 = mul nsw i64 %539, %541
  %543 = load i32, ptr %38, align 4, !tbaa !11
  %544 = sub i32 %543, 1
  %545 = zext i32 %544 to i64
  %546 = mul nsw i64 %542, %545
  %547 = load i32, ptr %21, align 4, !tbaa !11
  %548 = zext i32 %547 to i64
  %549 = mul nsw i64 %546, %548
  %550 = load ptr, ptr %14, align 8, !tbaa !5
  %551 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %550, i32 0, i32 36
  %552 = load i32, ptr %551, align 8, !tbaa !36
  %553 = zext i32 %552 to i64
  %554 = sdiv i64 %549, %553
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef %531, i32 noundef %534, i32 noundef %537, i64 noundef %554)
  %555 = load ptr, ptr %11, align 8, !tbaa !5
  %556 = load ptr, ptr %14, align 8, !tbaa !5
  %557 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %556, i32 0, i32 17
  %558 = load i32, ptr %557, align 4, !tbaa !40
  %559 = load ptr, ptr %13, align 8, !tbaa !5
  %560 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %559, i32 0, i32 3
  %561 = load i32, ptr %560, align 4, !tbaa !28
  %562 = load i32, ptr %38, align 4, !tbaa !11
  %563 = sub i32 %562, 1
  %564 = zext i32 %563 to i64
  %565 = load i32, ptr %21, align 4, !tbaa !11
  %566 = zext i32 %565 to i64
  %567 = mul nsw i64 %564, %566
  %568 = load ptr, ptr %14, align 8, !tbaa !5
  %569 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %568, i32 0, i32 4
  %570 = load i32, ptr %569, align 8, !tbaa !30
  %571 = zext i32 %570 to i64
  %572 = mul nsw i64 %567, %571
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef %555, i32 noundef %558, i32 noundef %561, i64 noundef %572)
  %573 = load ptr, ptr %11, align 8, !tbaa !5
  %574 = load i32, ptr %39, align 4, !tbaa !11
  call void @libxsmm_x86_instruction_pop_reg(ptr noundef %573, i32 noundef %574)
  store i32 1, ptr %31, align 4, !tbaa !11
  %575 = load i32, ptr %38, align 4, !tbaa !11
  %576 = sub i32 %575, 1
  %577 = load i32, ptr %21, align 4, !tbaa !11
  %578 = mul i32 %576, %577
  store i32 %578, ptr %27, align 4, !tbaa !11
  %579 = load i32, ptr %27, align 4, !tbaa !11
  %580 = zext i32 %579 to i64
  %581 = load i32, ptr %33, align 4, !tbaa !11
  %582 = zext i32 %581 to i64
  %583 = mul nsw i64 %580, %582
  %584 = load i32, ptr %34, align 4, !tbaa !11
  %585 = zext i32 %584 to i64
  %586 = mul nsw i64 %583, %585
  %587 = load ptr, ptr %14, align 8, !tbaa !5
  %588 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %587, i32 0, i32 36
  %589 = load i32, ptr %588, align 8, !tbaa !36
  %590 = zext i32 %589 to i64
  %591 = sdiv i64 %586, %590
  %592 = load i64, ptr %18, align 8, !tbaa !9
  %593 = add nsw i64 %591, %592
  store i64 %593, ptr %28, align 8, !tbaa !9
  %594 = load i32, ptr %27, align 4, !tbaa !11
  %595 = zext i32 %594 to i64
  %596 = load ptr, ptr %14, align 8, !tbaa !5
  %597 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %596, i32 0, i32 4
  %598 = load i32, ptr %597, align 8, !tbaa !30
  %599 = zext i32 %598 to i64
  %600 = mul nsw i64 %595, %599
  %601 = load i64, ptr %19, align 8, !tbaa !9
  %602 = add nsw i64 %600, %601
  store i64 %602, ptr %29, align 8, !tbaa !9
  %603 = load ptr, ptr %11, align 8, !tbaa !5
  %604 = load ptr, ptr %12, align 8, !tbaa !5
  %605 = load ptr, ptr %13, align 8, !tbaa !5
  %606 = load ptr, ptr %14, align 8, !tbaa !5
  %607 = load ptr, ptr %15, align 8, !tbaa !5
  %608 = load ptr, ptr %16, align 8, !tbaa !5
  %609 = load ptr, ptr %17, align 8, !tbaa !5
  %610 = load i64, ptr %28, align 8, !tbaa !9
  %611 = load i64, ptr %29, align 8, !tbaa !9
  %612 = load i32, ptr %31, align 4, !tbaa !11
  %613 = load i64, ptr %30, align 8, !tbaa !9
  %614 = load i32, ptr %20, align 4, !tbaa !11
  call void @libxsmm_generator_gemm_amx_microkernel(ptr noundef %603, ptr noundef %604, ptr noundef %605, ptr noundef %606, ptr noundef %607, ptr noundef %608, ptr noundef %609, i64 noundef %610, i64 noundef %611, i32 noundef %612, i64 noundef %613, i32 noundef %614)
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #3
  br label %723

615:                                              ; preds = %356, %341
  store i32 0, ptr %27, align 4, !tbaa !11
  br label %616

616:                                              ; preds = %718, %615
  %617 = load i32, ptr %27, align 4, !tbaa !11
  %618 = load ptr, ptr %15, align 8, !tbaa !5
  %619 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %618, i32 0, i32 2
  %620 = load i32, ptr %619, align 1, !tbaa !24
  %621 = icmp ult i32 %617, %620
  br i1 %621, label %622, label %722

622:                                              ; preds = %616
  %623 = load i32, ptr %27, align 4, !tbaa !11
  %624 = load ptr, ptr %14, align 8, !tbaa !5
  %625 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %624, i32 0, i32 115
  store i32 %623, ptr %625, align 4, !tbaa !35
  %626 = load i32, ptr %27, align 4, !tbaa !11
  %627 = load i32, ptr %21, align 4, !tbaa !11
  %628 = add i32 %626, %627
  %629 = load ptr, ptr %15, align 8, !tbaa !5
  %630 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %629, i32 0, i32 2
  %631 = load i32, ptr %630, align 1, !tbaa !24
  %632 = icmp uge i32 %628, %631
  %633 = zext i1 %632 to i64
  %634 = select i1 %632, i32 1, i32 0
  store i32 %634, ptr %31, align 4, !tbaa !11
  %635 = load ptr, ptr %15, align 8, !tbaa !5
  %636 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %635, i32 0, i32 6
  %637 = load i32, ptr %636, align 1, !tbaa !22
  %638 = and i32 %637, 1
  %639 = icmp ugt i32 %638, 0
  br i1 %639, label %640, label %650

640:                                              ; preds = %622
  %641 = load i32, ptr %27, align 4, !tbaa !11
  %642 = zext i32 %641 to i64
  %643 = load ptr, ptr %14, align 8, !tbaa !5
  %644 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %643, i32 0, i32 3
  %645 = load i32, ptr %644, align 4, !tbaa !21
  %646 = zext i32 %645 to i64
  %647 = mul nsw i64 %642, %646
  %648 = load i64, ptr %18, align 8, !tbaa !9
  %649 = add nsw i64 %647, %648
  store i64 %649, ptr %28, align 8, !tbaa !9
  br label %663

650:                                              ; preds = %622
  %651 = load i32, ptr %27, align 4, !tbaa !11
  %652 = load i32, ptr %33, align 4, !tbaa !11
  %653 = mul i32 %651, %652
  %654 = load i32, ptr %34, align 4, !tbaa !11
  %655 = mul i32 %653, %654
  %656 = load ptr, ptr %14, align 8, !tbaa !5
  %657 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %656, i32 0, i32 36
  %658 = load i32, ptr %657, align 8, !tbaa !36
  %659 = udiv i32 %655, %658
  %660 = zext i32 %659 to i64
  %661 = load i64, ptr %18, align 8, !tbaa !9
  %662 = add nsw i64 %660, %661
  store i64 %662, ptr %28, align 8, !tbaa !9
  br label %663

663:                                              ; preds = %650, %640
  %664 = load ptr, ptr %15, align 8, !tbaa !5
  %665 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %664, i32 0, i32 6
  %666 = load i32, ptr %665, align 1, !tbaa !22
  %667 = and i32 %666, 2
  %668 = icmp ugt i32 %667, 0
  br i1 %668, label %669, label %684

669:                                              ; preds = %663
  %670 = load i32, ptr %27, align 4, !tbaa !11
  %671 = zext i32 %670 to i64
  %672 = load ptr, ptr %15, align 8, !tbaa !5
  %673 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %672, i32 0, i32 4
  %674 = load i32, ptr %673, align 1, !tbaa !37
  %675 = zext i32 %674 to i64
  %676 = mul nsw i64 %671, %675
  %677 = load ptr, ptr %14, align 8, !tbaa !5
  %678 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %677, i32 0, i32 3
  %679 = load i32, ptr %678, align 4, !tbaa !21
  %680 = zext i32 %679 to i64
  %681 = mul nsw i64 %676, %680
  %682 = load i64, ptr %19, align 8, !tbaa !9
  %683 = add nsw i64 %681, %682
  store i64 %683, ptr %29, align 8, !tbaa !9
  br label %694

684:                                              ; preds = %663
  %685 = load i32, ptr %27, align 4, !tbaa !11
  %686 = zext i32 %685 to i64
  %687 = load ptr, ptr %14, align 8, !tbaa !5
  %688 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %687, i32 0, i32 4
  %689 = load i32, ptr %688, align 8, !tbaa !30
  %690 = zext i32 %689 to i64
  %691 = mul nsw i64 %686, %690
  %692 = load i64, ptr %19, align 8, !tbaa !9
  %693 = add nsw i64 %691, %692
  store i64 %693, ptr %29, align 8, !tbaa !9
  br label %694

694:                                              ; preds = %684, %669
  %695 = load ptr, ptr %15, align 8, !tbaa !5
  %696 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %695, i32 0, i32 6
  %697 = load i32, ptr %696, align 1, !tbaa !22
  %698 = and i32 %697, 8388608
  %699 = icmp ugt i32 %698, 0
  br i1 %699, label %700, label %705

700:                                              ; preds = %694
  %701 = load i32, ptr %27, align 4, !tbaa !11
  %702 = load i32, ptr %21, align 4, !tbaa !11
  %703 = udiv i32 %701, %702
  %704 = zext i32 %703 to i64
  store i64 %704, ptr %30, align 8, !tbaa !9
  store i64 0, ptr %28, align 8, !tbaa !9
  br label %705

705:                                              ; preds = %700, %694
  %706 = load ptr, ptr %11, align 8, !tbaa !5
  %707 = load ptr, ptr %12, align 8, !tbaa !5
  %708 = load ptr, ptr %13, align 8, !tbaa !5
  %709 = load ptr, ptr %14, align 8, !tbaa !5
  %710 = load ptr, ptr %15, align 8, !tbaa !5
  %711 = load ptr, ptr %16, align 8, !tbaa !5
  %712 = load ptr, ptr %17, align 8, !tbaa !5
  %713 = load i64, ptr %28, align 8, !tbaa !9
  %714 = load i64, ptr %29, align 8, !tbaa !9
  %715 = load i32, ptr %31, align 4, !tbaa !11
  %716 = load i64, ptr %30, align 8, !tbaa !9
  %717 = load i32, ptr %20, align 4, !tbaa !11
  call void @libxsmm_generator_gemm_amx_microkernel(ptr noundef %706, ptr noundef %707, ptr noundef %708, ptr noundef %709, ptr noundef %710, ptr noundef %711, ptr noundef %712, i64 noundef %713, i64 noundef %714, i32 noundef %715, i64 noundef %716, i32 noundef %717)
  br label %718

718:                                              ; preds = %705
  %719 = load i32, ptr %21, align 4, !tbaa !11
  %720 = load i32, ptr %27, align 4, !tbaa !11
  %721 = add i32 %720, %719
  store i32 %721, ptr %27, align 4, !tbaa !11
  br label %616, !llvm.loop !41

722:                                              ; preds = %616
  br label %723

723:                                              ; preds = %722, %482
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #3
  br label %724

724:                                              ; preds = %723, %218
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #3
  ret void
}

declare i32 @libxsmm_cpuid_dot_pack_factor(i32 noundef) #0

declare i32 @libxsmm_x86_is_Ai4_Bi8_gemm(ptr 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 = { 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 }

!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 = !{!"long long", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"int", !7, i64 0}
!13 = !{!14, !12, i64 664}
!14 = !{!"libxsmm_micro_kernel_config", !12, i64 0, !12, i64 4, !12, i64 8, !12, i64 12, !12, i64 16, !12, i64 20, !12, i64 24, !12, i64 28, !12, i64 32, !12, i64 36, !12, i64 40, !12, i64 44, !12, i64 48, !12, i64 52, !12, i64 56, !12, i64 60, !12, i64 64, !12, i64 68, !12, i64 72, !12, i64 76, !12, i64 80, !7, i64 84, !12, i64 88, !12, i64 92, !12, i64 96, !12, i64 100, !12, i64 104, !12, i64 108, !12, i64 112, !12, i64 116, !12, i64 120, !12, i64 124, !12, i64 128, !12, i64 132, !12, i64 136, !12, i64 140, !12, i64 144, !12, i64 148, !12, i64 152, !12, i64 156, !12, i64 160, !12, i64 164, !12, i64 168, !12, i64 172, !12, i64 176, !12, i64 180, !12, i64 184, !12, i64 188, !12, i64 192, !12, i64 196, !12, i64 200, !12, i64 204, !12, i64 208, !12, i64 212, !12, i64 216, !12, i64 220, !12, i64 224, !12, i64 228, !12, i64 232, !12, i64 236, !12, i64 240, !12, i64 244, !12, i64 248, !12, i64 252, !12, i64 256, !12, i64 260, !12, i64 264, !12, i64 268, !12, i64 272, !12, i64 276, !12, i64 280, !12, i64 284, !12, i64 288, !12, i64 292, !12, i64 296, !12, i64 300, !12, i64 304, !12, i64 308, !12, i64 312, !12, i64 316, !12, i64 320, !12, i64 324, !12, i64 328, !12, i64 332, !12, i64 336, !12, i64 340, !12, i64 344, !12, i64 348, !12, i64 352, !12, i64 356, !12, i64 360, !7, i64 364, !7, i64 380, !7, i64 396, !7, i64 412, !7, i64 428, !7, i64 444, !12, i64 460, !7, i64 464, !15, i64 520, !12, i64 556, !12, i64 560, !12, i64 564, !12, i64 568, !12, i64 572, !12, i64 576, !12, i64 580, !12, i64 584, !6, i64 592, !12, i64 600, !12, i64 604, !12, i64 608, !12, i64 612, !6, i64 616, !12, i64 624, !12, i64 628, !12, i64 632, !12, i64 636, !12, i64 640, !12, i64 644, !12, i64 648, !12, i64 652, !12, i64 656, !12, i64 660, !12, i64 664, !12, i64 668, !12, i64 672, !12, i64 676, !12, 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 = !{!18, !12, i64 20}
!18 = !{!"libxsmm_blocking_info_t", !12, i64 0, !7, i64 4, !12, i64 20, !12, i64 24}
!19 = !{!20, !12, i64 12}
!20 = !{!"libxsmm_gemm_descriptor", !12, i64 0, !12, i64 4, !12, i64 8, !12, i64 12, !12, i64 16, !12, i64 20, !12, i64 24, !7, i64 28, !7, i64 29, !7, i64 32, !10, i64 33, !10, i64 41, !7, i64 49, !12, i64 50, !12, i64 54, !12, 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, !12, i64 82, !12, i64 86, !12, i64 90, !7, i64 94}
!21 = !{!14, !12, i64 12}
!22 = !{!20, !12, i64 24}
!23 = !{!14, !12, i64 604}
!24 = !{!20, !12, i64 8}
!25 = distinct !{!25, !26}
!26 = !{!"llvm.loop.mustprogress"}
!27 = !{!14, !12, i64 64}
!28 = !{!29, !12, i64 12}
!29 = !{!"libxsmm_gp_reg_mapping_struct", !12, i64 0, !12, i64 4, !12, i64 8, !12, i64 12, !12, i64 16, !12, i64 20, !12, i64 24, !12, i64 28, !12, i64 32, !12, i64 36, !12, i64 40, !12, i64 44, !12, i64 48, !12, i64 52, !12, i64 56, !12, i64 60, !12, i64 64, !12, i64 68, !12, i64 72, !12, i64 76, !12, i64 80, !12, i64 84, !12, i64 88, !12, i64 92, !12, i64 96, !12, i64 100, !12, i64 104, !12, i64 108, !12, i64 112, !12, i64 116, !12, i64 120, !12, i64 124, !12, i64 128}
!30 = !{!14, !12, i64 16}
!31 = !{!20, !7, i64 49}
!32 = !{!29, !12, i64 92}
!33 = distinct !{!33, !26}
!34 = distinct !{!34, !26}
!35 = !{!14, !12, i64 628}
!36 = !{!14, !12, i64 144}
!37 = !{!20, !12, i64 16}
!38 = distinct !{!38, !26}
!39 = !{!29, !12, i64 4}
!40 = !{!14, !12, i64 68}
!41 = distinct !{!41, !26}


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

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 i32 @libxsmm_x86_is_Abf8_Bbf16_gemm(ptr noundef) local_unnamed_addr #0

declare i32 @libxsmm_x86_is_Abf8_Bf16_gemm(ptr noundef) local_unnamed_addr #0

declare i32 @libxsmm_x86_is_Ahf8_Bbf16_gemm(ptr noundef) local_unnamed_addr #0

declare i32 @libxsmm_x86_is_Amxfp4_Bbf16_gemm(ptr noundef) local_unnamed_addr #0

declare i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef) local_unnamed_addr #0

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

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

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

; Function Attrs: nounwind uwtable
define dso_local void @libxsmm_generator_gemm_amx_kernel_kloop(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %4, ptr noundef %5, ptr noundef %6, i64 noundef %7, i64 noundef %8, i32 noundef %9) local_unnamed_addr #1 {
  %11 = tail call i32 @libxsmm_x86_is_Abf8_Bbf16_gemm(ptr noundef %4) #3
  %12 = tail call i32 @libxsmm_x86_is_Abf8_Bf16_gemm(ptr noundef %4) #3
  %13 = tail call i32 @libxsmm_x86_is_Ahf8_Bbf16_gemm(ptr noundef %4) #3
  %14 = tail call i32 @libxsmm_x86_is_Amxfp4_Bbf16_gemm(ptr noundef %4) #3
  %15 = icmp ne i32 %11, 0
  %16 = icmp ne i32 %12, 0
  %or.cond = select i1 %15, i1 true, i1 %16
  %17 = icmp ne i32 %13, 0
  %or.cond3 = select i1 %or.cond, i1 true, i1 %17
  %18 = icmp ne i32 %14, 0
  %or.cond5 = select i1 %or.cond3, i1 true, i1 %18
  br i1 %or.cond5, label %23, label %19

19:                                               ; preds = %10
  %20 = getelementptr inbounds i8, ptr %4, i64 29
  %21 = tail call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef nonnull %20) #3
  %22 = tail call i32 @libxsmm_cpuid_dot_pack_factor(i32 noundef %21) #3
  br label %23

23:                                               ; preds = %10, %19
  %24 = phi i32 [ %22, %19 ], [ 2, %10 ]
  %25 = tail call i32 @libxsmm_x86_is_Ai4_Bi8_gemm(ptr noundef %4) #3
  %26 = or i32 %25, %11
  %or.cond7 = icmp ne i32 %26, 0
  %or.cond9 = select i1 %or.cond7, i1 true, i1 %16
  %or.cond11 = select i1 %or.cond9, i1 true, i1 %17
  %or.cond13 = select i1 %or.cond11, i1 true, i1 %18
  br i1 %or.cond13, label %30, label %27

27:                                               ; preds = %23
  %28 = getelementptr inbounds i8, ptr %3, i64 664
  %29 = load i32, ptr %28, align 8, !tbaa !5
  %.not = icmp eq i32 %29, 0
  br i1 %.not, label %32, label %30

30:                                               ; preds = %27, %23
  %31 = getelementptr inbounds i8, ptr %6, i64 20
  br label %34

32:                                               ; preds = %27
  %33 = getelementptr inbounds i8, ptr %4, i64 12
  br label %34

34:                                               ; preds = %32, %30
  %.in = phi ptr [ %31, %30 ], [ %33, %32 ]
  %35 = load i32, ptr %.in, align 1, !tbaa !13
  br i1 %or.cond5, label %39, label %36

36:                                               ; preds = %34
  %37 = getelementptr inbounds i8, ptr %3, i64 12
  %38 = load i32, ptr %37, align 4, !tbaa !14
  br label %39

39:                                               ; preds = %34, %36
  %40 = phi i32 [ %38, %36 ], [ 2, %34 ]
  %41 = getelementptr inbounds i8, ptr %4, i64 29
  %42 = tail call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef nonnull %41) #3
  %43 = icmp eq i32 %42, 2
  br i1 %43, label %59, label %44

44:                                               ; preds = %39
  %45 = tail call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef nonnull %41) #3
  %46 = icmp eq i32 %45, 3
  %47 = or i32 %14, %11
  %48 = icmp ne i32 %47, 0
  %or.cond23 = select i1 %46, i1 true, i1 %48
  %or.cond25 = select i1 %or.cond23, i1 true, i1 %16
  %or.cond27 = select i1 %or.cond25, i1 true, i1 %17
  br i1 %or.cond27, label %59, label %49

49:                                               ; preds = %44
  %50 = tail call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef nonnull %41) #3
  %51 = icmp eq i32 %50, 12
  br i1 %51, label %58, label %52

52:                                               ; preds = %49
  %53 = tail call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef nonnull %41) #3
  %54 = icmp eq i32 %53, 4
  br i1 %54, label %58, label %55

55:                                               ; preds = %52
  %56 = tail call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef nonnull %41) #3
  %57 = icmp eq i32 %56, 5
  br i1 %57, label %58, label %59

58:                                               ; preds = %55, %52, %49
  br label %59

59:                                               ; preds = %39, %44, %55, %58
  %.0294 = phi i32 [ 64, %58 ], [ 16, %55 ], [ 32, %44 ], [ 32, %39 ]
  %60 = getelementptr inbounds i8, ptr %4, i64 24
  %61 = load i32, ptr %60, align 1, !tbaa !15
  %62 = and i32 %61, 262144
  %.not307 = icmp eq i32 %62, 0
  br i1 %.not307, label %67, label %63

63:                                               ; preds = %59
  %64 = getelementptr inbounds i8, ptr %3, i64 604
  %65 = load i32, ptr %64, align 4, !tbaa !18
  %66 = zext i32 %65 to i64
  br label %67

67:                                               ; preds = %63, %59
  %.0302 = phi i64 [ %66, %63 ], [ -2, %59 ]
  %68 = and i32 %61, 131072
  %69 = icmp ne i32 %68, 0
  %70 = icmp eq i32 %9, 1
  %or.cond29 = and i1 %70, %69
  br i1 %or.cond29, label %71, label %75

71:                                               ; preds = %67
  %72 = getelementptr inbounds i8, ptr %3, i64 604
  %73 = load i32, ptr %72, align 4, !tbaa !18
  %74 = zext i32 %73 to i64
  br label %75

75:                                               ; preds = %71, %67
  %.1303 = phi i64 [ %74, %71 ], [ %.0302, %67 ]
  %76 = getelementptr inbounds i8, ptr %4, i64 8
  %77 = load i32, ptr %76, align 1, !tbaa !19
  br label %78

78:                                               ; preds = %78, %75
  %.1295 = phi i32 [ %.0294, %75 ], [ %81, %78 ]
  %79 = urem i32 %77, %.1295
  %80 = udiv i32 %77, %.1295
  %.not308 = icmp eq i32 %79, 0
  %81 = sub i32 %.1295, %24
  br i1 %.not308, label %82, label %78, !llvm.loop !20

82:                                               ; preds = %78
  %83 = and i32 %61, 8388608
  %.not309 = icmp ne i32 %83, 0
  %84 = icmp ugt i32 %77, 1024
  %or.cond323 = and i1 %.not309, %84
  %85 = and i32 %80, 1
  %86 = icmp eq i32 %85, 0
  %or.cond337 = and i1 %or.cond323, %86
  br i1 %or.cond337, label %87, label %111

87:                                               ; preds = %82
  tail call void @libxsmm_generator_gemm_amx_microkernel(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef nonnull %4, ptr noundef %5, ptr noundef %6, i64 noundef 0, i64 noundef 0, i32 noundef 0, i64 noundef 0, i32 noundef %9)
  %88 = getelementptr inbounds i8, ptr %3, i64 64
  %89 = load i32, ptr %88, align 8, !tbaa !22
  %90 = getelementptr inbounds i8, ptr %2, i64 12
  %91 = load i32, ptr %90, align 4, !tbaa !23
  %92 = zext i32 %.1295 to i64
  %93 = getelementptr inbounds i8, ptr %3, i64 16
  %94 = load i32, ptr %93, align 8, !tbaa !25
  %95 = zext i32 %94 to i64
  %96 = mul nuw nsw i64 %95, %92
  tail call void @libxsmm_x86_instruction_alu_imm(ptr noundef %0, i32 noundef %89, i32 noundef %91, i64 noundef %96) #3
  tail call void @libxsmm_generator_gemm_header_k_loop_amx(ptr noundef %0, ptr noundef %1, ptr noundef %3, i32 noundef 9)
  tail call void @libxsmm_generator_gemm_amx_microkernel(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef nonnull %4, ptr noundef %5, ptr noundef %6, i64 noundef 0, i64 noundef 0, i32 noundef 0, i64 noundef 1, i32 noundef %9)
  %97 = load i32, ptr %88, align 8, !tbaa !22
  %98 = load i32, ptr %90, align 4, !tbaa !23
  %99 = load i32, ptr %93, align 8, !tbaa !25
  %100 = zext i32 %99 to i64
  %101 = mul nuw nsw i64 %100, %92
  tail call void @libxsmm_x86_instruction_alu_imm(ptr noundef %0, i32 noundef %97, i32 noundef %98, i64 noundef %101) #3
  tail call void @libxsmm_generator_gemm_amx_microkernel(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef nonnull %4, ptr noundef %5, ptr noundef %6, i64 noundef 0, i64 noundef 0, i32 noundef 0, i64 noundef 2, i32 noundef %9)
  %102 = load i32, ptr %88, align 8, !tbaa !22
  %103 = load i32, ptr %90, align 4, !tbaa !23
  %104 = load i32, ptr %93, align 8, !tbaa !25
  %105 = zext i32 %104 to i64
  %106 = mul nuw nsw i64 %105, %92
  tail call void @libxsmm_x86_instruction_alu_imm(ptr noundef %0, i32 noundef %102, i32 noundef %103, i64 noundef %106) #3
  %107 = load i32, ptr %76, align 1, !tbaa !19
  %108 = udiv i32 %107, %.1295
  %109 = add i32 %108, -2
  %110 = lshr i32 %109, 1
  tail call void @libxsmm_generator_gemm_footer_k_loop_amx(ptr noundef %0, ptr noundef %1, ptr noundef %3, i32 noundef 9, i32 noundef %110)
  tail call void @libxsmm_generator_gemm_amx_microkernel(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef nonnull %4, ptr noundef %5, ptr noundef %6, i64 noundef 0, i64 noundef 0, i32 noundef 1, i64 noundef 1, i32 noundef %9)
  br label %.loopexit

111:                                              ; preds = %82
  %112 = and i32 %61, 458752
  %or.cond325 = icmp eq i32 %112, 0
  br i1 %or.cond325, label %116, label %113

113:                                              ; preds = %111
  %114 = getelementptr inbounds i8, ptr %4, i64 49
  %115 = load i8, ptr %114, align 1, !tbaa !26
  %narrow = tail call i8 @llvm.umax.i8(i8 %115, i8 1)
  %spec.select = zext i8 %narrow to i32
  br label %116

116:                                              ; preds = %113, %111
  %117 = phi i32 [ 1, %111 ], [ %spec.select, %113 ]
  %118 = add i32 %.1295, -1
  %119 = add i32 %118, %77
  %120 = udiv i32 %119, %.1295
  %121 = mul i32 %120, %117
  %122 = icmp ugt i32 %121, 256
  %123 = icmp eq i32 %83, 0
  %or.cond326 = and i1 %123, %122
  br i1 %or.cond326, label %.preheader, label %.preheader327

.preheader327:                                    ; preds = %116
  %.not334 = icmp eq i32 %77, 0
  br i1 %.not334, label %.loopexit, label %.lr.ph

.lr.ph:                                           ; preds = %.preheader327
  %124 = getelementptr inbounds i8, ptr %3, i64 628
  %125 = getelementptr inbounds i8, ptr %3, i64 12
  %126 = mul i32 %40, %35
  %127 = getelementptr inbounds i8, ptr %3, i64 144
  %128 = getelementptr inbounds i8, ptr %4, i64 16
  %129 = getelementptr inbounds i8, ptr %3, i64 16
  br label %229

.preheader:                                       ; preds = %116
  %130 = getelementptr inbounds i8, ptr %2, i64 92
  %131 = load i32, ptr %130, align 4, !tbaa !27
  %132 = mul nuw nsw i32 %117, 5
  %133 = shl nuw nsw i32 %117, 2
  %umin = tail call i32 @llvm.umin.i32(i32 %133, i32 256)
  %134 = xor i32 %umin, -1
  %135 = add nsw i32 %132, %134
  %136 = udiv i32 %135, %117
  %137 = sub i32 4, %136
  %138 = add i32 %120, -1
  br label %139

139:                                              ; preds = %139, %.preheader
  %.1 = phi i32 [ %142, %139 ], [ %137, %.preheader ]
  %140 = urem i32 %138, %.1
  %141 = udiv i32 %138, %.1
  %.not318 = icmp eq i32 %140, 0
  %142 = add i32 %.1, -1
  br i1 %.not318, label %143, label %139, !llvm.loop !28

143:                                              ; preds = %139
  tail call void @libxsmm_x86_instruction_push_reg(ptr noundef %0, i32 noundef %131) #3
  tail call void @libxsmm_generator_gemm_header_k_loop_amx(ptr noundef %0, ptr noundef %1, ptr noundef %3, i32 noundef %131)
  %144 = mul i32 %.1, %.1295
  %.not335 = icmp eq i32 %144, 0
  br i1 %.not335, label %._crit_edge, label %.lr.ph333

.lr.ph333:                                        ; preds = %143
  %145 = getelementptr inbounds i8, ptr %3, i64 628
  %146 = getelementptr inbounds i8, ptr %3, i64 12
  %147 = mul i32 %40, %35
  %148 = getelementptr inbounds i8, ptr %3, i64 144
  %149 = getelementptr inbounds i8, ptr %4, i64 16
  %150 = getelementptr inbounds i8, ptr %3, i64 16
  br label %151

151:                                              ; preds = %.lr.ph333, %178
  %.0296332 = phi i32 [ 0, %.lr.ph333 ], [ %179, %178 ]
  store i32 %.0296332, ptr %145, align 4, !tbaa !29
  %152 = load i32, ptr %60, align 1, !tbaa !15
  %153 = and i32 %152, 1
  %.not319 = icmp eq i32 %153, 0
  br i1 %.not319, label %159, label %154

154:                                              ; preds = %151
  %155 = zext i32 %.0296332 to i64
  %156 = load i32, ptr %146, align 4, !tbaa !14
  %157 = zext i32 %156 to i64
  %158 = mul nuw nsw i64 %157, %155
  br label %164

159:                                              ; preds = %151
  %160 = mul i32 %147, %.0296332
  %161 = load i32, ptr %148, align 8, !tbaa !30
  %162 = udiv i32 %160, %161
  %163 = zext i32 %162 to i64
  br label %164

164:                                              ; preds = %159, %154
  %.pn320 = phi i64 [ %158, %154 ], [ %163, %159 ]
  %.0298 = add nsw i64 %.pn320, %7
  %165 = and i32 %152, 2
  %.not321 = icmp eq i32 %165, 0
  %166 = zext i32 %.0296332 to i64
  br i1 %.not321, label %174, label %167

167:                                              ; preds = %164
  %168 = load i32, ptr %149, align 1, !tbaa !31
  %169 = zext i32 %168 to i64
  %170 = mul nuw nsw i64 %169, %166
  %171 = load i32, ptr %150, align 8, !tbaa !25
  %172 = zext i32 %171 to i64
  %173 = mul nuw nsw i64 %170, %172
  br label %178

174:                                              ; preds = %164
  %175 = load i32, ptr %150, align 8, !tbaa !25
  %176 = zext i32 %175 to i64
  %177 = mul nuw nsw i64 %176, %166
  br label %178

178:                                              ; preds = %174, %167
  %.pn322 = phi i64 [ %173, %167 ], [ %177, %174 ]
  %.0300 = add nsw i64 %.pn322, %8
  tail call void @libxsmm_generator_gemm_amx_microkernel(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef nonnull %3, ptr noundef nonnull %4, ptr noundef %5, ptr noundef %6, i64 noundef %.0298, i64 noundef %.0300, i32 noundef 0, i64 noundef %.1303, i32 noundef %9)
  %179 = add i32 %.0296332, %.1295
  %180 = icmp ult i32 %179, %144
  br i1 %180, label %151, label %._crit_edge, !llvm.loop !32

._crit_edge:                                      ; preds = %178, %143
  %181 = getelementptr inbounds i8, ptr %3, i64 64
  %182 = load i32, ptr %181, align 8, !tbaa !22
  %183 = getelementptr inbounds i8, ptr %2, i64 4
  %184 = load i32, ptr %183, align 4, !tbaa !33
  %185 = zext i32 %35 to i64
  %186 = zext i32 %.1 to i64
  %187 = zext i32 %.1295 to i64
  %188 = zext i32 %40 to i64
  %189 = mul nuw i64 %188, %185
  %190 = mul i64 %189, %187
  %191 = mul i64 %190, %186
  %192 = getelementptr inbounds i8, ptr %3, i64 144
  %193 = load i32, ptr %192, align 8, !tbaa !30
  %194 = zext i32 %193 to i64
  %195 = udiv i64 %191, %194
  tail call void @libxsmm_x86_instruction_alu_imm(ptr noundef %0, i32 noundef %182, i32 noundef %184, i64 noundef %195) #3
  %196 = load i32, ptr %181, align 8, !tbaa !22
  %197 = getelementptr inbounds i8, ptr %2, i64 12
  %198 = load i32, ptr %197, align 4, !tbaa !23
  %199 = mul nuw nsw i64 %186, %187
  %200 = getelementptr inbounds i8, ptr %3, i64 16
  %201 = load i32, ptr %200, align 8, !tbaa !25
  %202 = zext i32 %201 to i64
  %203 = mul nuw nsw i64 %199, %202
  tail call void @libxsmm_x86_instruction_alu_imm(ptr noundef %0, i32 noundef %196, i32 noundef %198, i64 noundef %203) #3
  tail call void @libxsmm_generator_gemm_footer_k_loop_amx(ptr noundef %0, ptr noundef %1, ptr noundef %3, i32 noundef %131, i32 noundef %141)
  %204 = getelementptr inbounds i8, ptr %3, i64 68
  %205 = load i32, ptr %204, align 4, !tbaa !34
  %206 = load i32, ptr %183, align 4, !tbaa !33
  %207 = zext i32 %138 to i64
  %208 = mul i64 %190, %207
  %209 = load i32, ptr %192, align 8, !tbaa !30
  %210 = zext i32 %209 to i64
  %211 = udiv i64 %208, %210
  tail call void @libxsmm_x86_instruction_alu_imm(ptr noundef %0, i32 noundef %205, i32 noundef %206, i64 noundef %211) #3
  %212 = load i32, ptr %204, align 4, !tbaa !34
  %213 = load i32, ptr %197, align 4, !tbaa !23
  %214 = mul nuw nsw i64 %207, %187
  %215 = load i32, ptr %200, align 8, !tbaa !25
  %216 = zext i32 %215 to i64
  %217 = mul nuw nsw i64 %214, %216
  tail call void @libxsmm_x86_instruction_alu_imm(ptr noundef %0, i32 noundef %212, i32 noundef %213, i64 noundef %217) #3
  tail call void @libxsmm_x86_instruction_pop_reg(ptr noundef %0, i32 noundef %131) #3
  %218 = mul i32 %138, %.1295
  %219 = zext i32 %218 to i64
  %220 = mul i64 %189, %219
  %221 = load i32, ptr %192, align 8, !tbaa !30
  %222 = zext i32 %221 to i64
  %223 = udiv i64 %220, %222
  %224 = add nsw i64 %223, %7
  %225 = load i32, ptr %200, align 8, !tbaa !25
  %226 = zext i32 %225 to i64
  %227 = mul nuw nsw i64 %226, %219
  %228 = add nsw i64 %227, %8
  tail call void @libxsmm_generator_gemm_amx_microkernel(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %4, ptr noundef %5, ptr noundef %6, i64 noundef %224, i64 noundef %228, i32 noundef 1, i64 noundef %.1303, i32 noundef %9)
  br label %.loopexit

229:                                              ; preds = %.lr.ph, %264
  %230 = phi i32 [ %77, %.lr.ph ], [ %265, %264 ]
  %.1297331 = phi i32 [ 0, %.lr.ph ], [ %231, %264 ]
  %.2304330 = phi i64 [ %.1303, %.lr.ph ], [ %.3, %264 ]
  store i32 %.1297331, ptr %124, align 4, !tbaa !29
  %231 = add i32 %.1297331, %.1295
  %.not313 = icmp uge i32 %231, %230
  %232 = zext i1 %.not313 to i32
  %233 = load i32, ptr %60, align 1, !tbaa !15
  %234 = and i32 %233, 1
  %.not314 = icmp eq i32 %234, 0
  br i1 %.not314, label %240, label %235

235:                                              ; preds = %229
  %236 = zext i32 %.1297331 to i64
  %237 = load i32, ptr %125, align 4, !tbaa !14
  %238 = zext i32 %237 to i64
  %239 = mul nuw nsw i64 %238, %236
  br label %245

240:                                              ; preds = %229
  %241 = mul i32 %126, %.1297331
  %242 = load i32, ptr %127, align 8, !tbaa !30
  %243 = udiv i32 %241, %242
  %244 = zext i32 %243 to i64
  br label %245

245:                                              ; preds = %240, %235
  %.pn = phi i64 [ %239, %235 ], [ %244, %240 ]
  %.1299 = add nsw i64 %.pn, %7
  %246 = and i32 %233, 2
  %.not315 = icmp eq i32 %246, 0
  %247 = zext i32 %.1297331 to i64
  br i1 %.not315, label %255, label %248

248:                                              ; preds = %245
  %249 = load i32, ptr %128, align 1, !tbaa !31
  %250 = zext i32 %249 to i64
  %251 = mul nuw nsw i64 %250, %247
  %252 = load i32, ptr %125, align 4, !tbaa !14
  %253 = zext i32 %252 to i64
  %254 = mul nuw nsw i64 %251, %253
  br label %259

255:                                              ; preds = %245
  %256 = load i32, ptr %129, align 8, !tbaa !25
  %257 = zext i32 %256 to i64
  %258 = mul nuw nsw i64 %257, %247
  br label %259

259:                                              ; preds = %255, %248
  %.pn316 = phi i64 [ %254, %248 ], [ %258, %255 ]
  %.1301 = add nsw i64 %.pn316, %8
  %260 = and i32 %233, 8388608
  %.not317 = icmp eq i32 %260, 0
  br i1 %.not317, label %264, label %261

261:                                              ; preds = %259
  %262 = udiv i32 %.1297331, %.1295
  %263 = zext i32 %262 to i64
  br label %264

264:                                              ; preds = %261, %259
  %.3 = phi i64 [ %263, %261 ], [ %.2304330, %259 ]
  %.2 = phi i64 [ 0, %261 ], [ %.1299, %259 ]
  tail call void @libxsmm_generator_gemm_amx_microkernel(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef nonnull %3, ptr noundef nonnull %4, ptr noundef %5, ptr noundef %6, i64 noundef %.2, i64 noundef %.1301, i32 noundef %232, i64 noundef %.3, i32 noundef %9)
  %265 = load i32, ptr %76, align 1, !tbaa !19
  %266 = icmp ult i32 %231, %265
  br i1 %266, label %229, label %.loopexit, !llvm.loop !35

.loopexit:                                        ; preds = %264, %.preheader327, %._crit_edge, %87
  ret void
}

declare i32 @libxsmm_cpuid_dot_pack_factor(i32 noundef) local_unnamed_addr #0

declare i32 @libxsmm_x86_is_Ai4_Bi8_gemm(ptr noundef) local_unnamed_addr #0

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

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

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 = { 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 #2 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #3 = { nounwind }

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

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


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