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

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

%struct.libxsmm_micro_kernel_config = type { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i8, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, [4 x i32], [4 x i32], [4 x i32], [4 x i32], [4 x i32], [4 x i32], i32, [2 x %struct.libxsmm_blocking_info_t], %struct.libxsmm_tile_config, i32, i32, i32, i32, i32, i32, i32, i32, ptr, i32, i32, i32, i32, ptr, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 }
%struct.libxsmm_blocking_info_t = type { i32, [4 x i32], i32, i32 }
%struct.libxsmm_tile_config = type { i8, i16, i8, i16, i8, i16, i8, i16, i8, i16, i8, i16, i8, i16, i8, i16, i8 }
%struct.libxsmm_gp_reg_mapping_struct = type { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 }
%struct.libxsmm_generated_code = type { ptr, i32, i32, i32, i32, i32, i32 }
%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 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [107 x i8], align 1
@__PRETTY_FUNCTION__.libxsmm_generator_packed_spgemm_csr_bsparse_avx_avx2_avx512_kloop = external hidden unnamed_addr constant [427 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [435 x i8], align 1

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

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #1

declare i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef) #2

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

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

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

; Function Attrs: nounwind uwtable
define dso_local void @libxsmm_generator_packed_spgemm_csr_bsparse_avx_avx2_avx512_kloop(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %4, ptr noundef %5, ptr noundef %6, ptr noundef %7, i32 noundef %8, i32 noundef %9, i32 noundef %10, i32 noundef %11, i32 noundef %12, i32 noundef %13, i32 noundef %14) #3 {
  %16 = alloca ptr, align 8
  %17 = alloca ptr, align 8
  %18 = alloca ptr, align 8
  %19 = alloca ptr, align 8
  %20 = alloca ptr, align 8
  %21 = alloca ptr, align 8
  %22 = alloca ptr, align 8
  %23 = alloca ptr, align 8
  %24 = alloca i32, align 4
  %25 = alloca i32, align 4
  %26 = alloca i32, align 4
  %27 = alloca i32, align 4
  %28 = alloca i32, align 4
  %29 = alloca i32, align 4
  %30 = alloca i32, align 4
  %31 = alloca i32, align 4
  %32 = alloca i32, align 4
  %33 = alloca i32, align 4
  %34 = alloca i32, align 4
  %35 = alloca i32, align 4
  %36 = alloca i32, align 4
  %37 = alloca i32, align 4
  %38 = alloca i32, align 4
  %39 = alloca i8, align 1
  %40 = alloca [32 x i8], align 16
  %41 = alloca i32, align 4
  %42 = alloca ptr, align 8
  %43 = alloca ptr, align 8
  %44 = alloca i32, align 4
  store ptr %0, ptr %16, align 8, !tbaa !5
  store ptr %1, ptr %17, align 8, !tbaa !5
  store ptr %2, ptr %18, align 8, !tbaa !5
  store ptr %3, ptr %19, align 8, !tbaa !5
  store ptr %4, ptr %20, align 8, !tbaa !5
  store ptr %5, ptr %21, align 8, !tbaa !5
  store ptr %6, ptr %22, align 8, !tbaa !5
  store ptr %7, ptr %23, align 8, !tbaa !5
  store i32 %8, ptr %24, align 4, !tbaa !9
  store i32 %9, ptr %25, align 4, !tbaa !9
  store i32 %10, ptr %26, align 4, !tbaa !9
  store i32 %11, ptr %27, align 4, !tbaa !9
  store i32 %12, ptr %28, align 4, !tbaa !9
  store i32 %13, ptr %29, align 4, !tbaa !9
  store i32 %14, ptr %30, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #5
  store i32 0, ptr %31, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #5
  store i32 0, ptr %32, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #5
  store i32 0, ptr %33, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #5
  store i32 0, ptr %34, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #5
  %45 = load i32, ptr %25, align 4, !tbaa !9
  %46 = load i32, ptr %24, align 4, !tbaa !9
  %47 = sub i32 %45, %46
  %48 = load i32, ptr %28, align 4, !tbaa !9
  %49 = mul i32 %47, %48
  store i32 %49, ptr %35, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %36) #5
  %50 = load i32, ptr %25, align 4, !tbaa !9
  %51 = load i32, ptr %24, align 4, !tbaa !9
  %52 = sub i32 %50, %51
  store i32 %52, ptr %36, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %37) #5
  store i32 0, ptr %37, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %38) #5
  store i32 0, ptr %38, align 4, !tbaa !9
  %53 = load ptr, ptr %23, align 8, !tbaa !5
  %54 = load i32, ptr %28, align 4, !tbaa !9
  %55 = icmp ugt i32 %54, 0
  br i1 %55, label %56, label %57

56:                                               ; preds = %15
  br label %58

57:                                               ; preds = %15
  call void @__assert_fail(ptr noundef @.str, ptr noundef @.str.1, i32 noundef 274, ptr noundef @__PRETTY_FUNCTION__.libxsmm_generator_packed_spgemm_csr_bsparse_avx_avx2_avx512_kloop) #6
  unreachable

58:                                               ; preds = %56
  %59 = load i32, ptr %27, align 4, !tbaa !9
  %60 = load i32, ptr %28, align 4, !tbaa !9
  %61 = udiv i32 %59, %60
  %62 = icmp ugt i32 %61, 1
  br i1 %62, label %63, label %80

63:                                               ; preds = %58
  %64 = load ptr, ptr %16, align 8, !tbaa !5
  %65 = load ptr, ptr %19, align 8, !tbaa !5
  %66 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %65, i32 0, i32 20
  %67 = load i32, ptr %66, align 8, !tbaa !11
  %68 = load ptr, ptr %18, align 8, !tbaa !5
  %69 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %68, i32 0, i32 22
  %70 = load i32, ptr %69, align 4, !tbaa !15
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef %64, i32 noundef %67, i32 noundef %70, i64 noundef 0)
  %71 = load ptr, ptr %16, align 8, !tbaa !5
  %72 = load ptr, ptr %17, align 8, !tbaa !5
  call void @libxsmm_x86_instruction_register_jump_back_label(ptr noundef %71, ptr noundef %72)
  %73 = load ptr, ptr %16, align 8, !tbaa !5
  %74 = load ptr, ptr %19, align 8, !tbaa !5
  %75 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %74, i32 0, i32 16
  %76 = load i32, ptr %75, align 8, !tbaa !17
  %77 = load ptr, ptr %18, align 8, !tbaa !5
  %78 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %77, i32 0, i32 22
  %79 = load i32, ptr %78, align 4, !tbaa !15
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef %73, i32 noundef %76, i32 noundef %79, i64 noundef 1)
  br label %80

80:                                               ; preds = %63, %58
  %81 = load i32, ptr %29, align 4, !tbaa !9
  %82 = icmp ne i32 %81, 0
  br i1 %82, label %83, label %233

83:                                               ; preds = %80
  %84 = load ptr, ptr %16, align 8, !tbaa !5
  %85 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %84, i32 0, i32 6
  %86 = load i32, ptr %85, align 4, !tbaa !18
  %87 = icmp uge i32 %86, 1101
  br i1 %87, label %88, label %107

88:                                               ; preds = %83
  %89 = load ptr, ptr %16, align 8, !tbaa !5
  %90 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %89, i32 0, i32 6
  %91 = load i32, ptr %90, align 4, !tbaa !18
  %92 = icmp ule i32 %91, 1999
  br i1 %92, label %93, label %107

93:                                               ; preds = %88
  %94 = load ptr, ptr %16, align 8, !tbaa !5
  %95 = load ptr, ptr %18, align 8, !tbaa !5
  %96 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %95, i32 0, i32 23
  %97 = load i32, ptr %96, align 4, !tbaa !20
  %98 = load ptr, ptr %19, align 8, !tbaa !5
  %99 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %98, i32 0, i32 2
  %100 = load i32, ptr %99, align 8, !tbaa !21
  %101 = load i32, ptr %29, align 4, !tbaa !9
  %102 = sub i32 %100, %101
  %103 = load ptr, ptr %20, align 8, !tbaa !5
  %104 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %103, i32 0, i32 8
  %105 = getelementptr inbounds [3 x i8], ptr %104, i64 0, i64 0
  %106 = call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef %105)
  call void @libxsmm_generator_initialize_avx512_mask(ptr noundef %94, i32 noundef %97, i32 noundef 1, i32 noundef %102, i32 noundef %106)
  br label %232

107:                                              ; preds = %88, %83
  call void @llvm.lifetime.start.p0(i64 1, ptr %39) #5
  %108 = load i32, ptr %36, align 4, !tbaa !9
  %109 = icmp ugt i32 128, %108
  br i1 %109, label %110, label %112

110:                                              ; preds = %107
  %111 = load i32, ptr %36, align 4, !tbaa !9
  br label %113

112:                                              ; preds = %107
  br label %113

113:                                              ; preds = %112, %110
  %114 = phi i32 [ %111, %110 ], [ 127, %112 ]
  %115 = trunc i32 %114 to i8
  %116 = sext i8 %115 to i32
  %117 = icmp eq i32 -128, %116
  br i1 %117, label %129, label %118

118:                                              ; preds = %113
  %119 = load i32, ptr %36, align 4, !tbaa !9
  %120 = icmp ugt i32 128, %119
  br i1 %120, label %121, label %123

121:                                              ; preds = %118
  %122 = load i32, ptr %36, align 4, !tbaa !9
  br label %124

123:                                              ; preds = %118
  br label %124

124:                                              ; preds = %123, %121
  %125 = phi i32 [ %122, %121 ], [ 127, %123 ]
  %126 = trunc i32 %125 to i8
  %127 = sext i8 %126 to i32
  %128 = icmp slt i32 -128, %127
  br i1 %128, label %129, label %166

129:                                              ; preds = %124, %113
  %130 = load i32, ptr %36, align 4, !tbaa !9
  %131 = icmp ugt i32 128, %130
  br i1 %131, label %132, label %134

132:                                              ; preds = %129
  %133 = load i32, ptr %36, align 4, !tbaa !9
  br label %135

134:                                              ; preds = %129
  br label %135

135:                                              ; preds = %134, %132
  %136 = phi i32 [ %133, %132 ], [ 127, %134 ]
  %137 = sext i32 %136 to i64
  %138 = mul i64 1, %137
  %139 = icmp ult i64 %138, 127
  br i1 %139, label %140, label %150

140:                                              ; preds = %135
  %141 = load i32, ptr %36, align 4, !tbaa !9
  %142 = icmp ugt i32 128, %141
  br i1 %142, label %143, label %145

143:                                              ; preds = %140
  %144 = load i32, ptr %36, align 4, !tbaa !9
  br label %146

145:                                              ; preds = %140
  br label %146

146:                                              ; preds = %145, %143
  %147 = phi i32 [ %144, %143 ], [ 127, %145 ]
  %148 = sext i32 %147 to i64
  %149 = mul i64 1, %148
  br label %151

150:                                              ; preds = %135
  br label %151

151:                                              ; preds = %150, %146
  %152 = phi i64 [ %149, %146 ], [ 127, %150 ]
  %153 = icmp ule i64 %152, 127
  br i1 %153, label %154, label %166

154:                                              ; preds = %151
  %155 = load i32, ptr %36, align 4, !tbaa !9
  %156 = icmp ugt i32 128, %155
  br i1 %156, label %157, label %159

157:                                              ; preds = %154
  %158 = load i32, ptr %36, align 4, !tbaa !9
  br label %160

159:                                              ; preds = %154
  br label %160

160:                                              ; preds = %159, %157
  %161 = phi i32 [ %158, %157 ], [ 127, %159 ]
  %162 = sitofp i32 %161 to double
  %163 = fcmp ole double 0.000000e+00, %162
  br i1 %163, label %165, label %164

164:                                              ; preds = %160
  br i1 true, label %165, label %166

165:                                              ; preds = %164, %160
  br label %167

166:                                              ; preds = %164, %151, %124
  call void @__assert_fail(ptr noundef @.str.2, ptr noundef @.str.1, i32 noundef 289, ptr noundef @__PRETTY_FUNCTION__.libxsmm_generator_packed_spgemm_csr_bsparse_avx_avx2_avx512_kloop) #6
  unreachable

167:                                              ; preds = %165
  %168 = load i32, ptr %36, align 4, !tbaa !9
  %169 = icmp ugt i32 128, %168
  br i1 %169, label %170, label %172

170:                                              ; preds = %167
  %171 = load i32, ptr %36, align 4, !tbaa !9
  br label %173

172:                                              ; preds = %167
  br label %173

173:                                              ; preds = %172, %170
  %174 = phi i32 [ %171, %170 ], [ 127, %172 ]
  %175 = trunc i32 %174 to i8
  store i8 %175, ptr %39, align 1, !tbaa !22
  call void @llvm.lifetime.start.p0(i64 32, ptr %40) #5
  call void @llvm.memset.p0.i64(ptr align 16 %40, i8 0, i64 32, i1 false)
  call void @llvm.lifetime.start.p0(i64 4, ptr %41) #5
  %176 = load ptr, ptr %20, align 8, !tbaa !5
  %177 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %176, i32 0, i32 8
  %178 = getelementptr inbounds [3 x i8], ptr %177, i64 0, i64 0
  %179 = call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef %178)
  %180 = icmp eq i32 0, %179
  br i1 %180, label %181, label %205

181:                                              ; preds = %173
  call void @llvm.lifetime.start.p0(i64 8, ptr %42) #5
  %182 = getelementptr inbounds [32 x i8], ptr %40, i64 0, i64 0
  store ptr %182, ptr %42, align 8, !tbaa !5
  store i32 0, ptr %41, align 4, !tbaa !9
  br label %183

183:                                              ; preds = %201, %181
  %184 = load i32, ptr %41, align 4, !tbaa !9
  %185 = icmp ult i32 %184, 4
  br i1 %185, label %186, label %204

186:                                              ; preds = %183
  %187 = load i32, ptr %41, align 4, !tbaa !9
  %188 = load i32, ptr %29, align 4, !tbaa !9
  %189 = icmp ult i32 %187, %188
  br i1 %189, label %190, label %195

190:                                              ; preds = %186
  %191 = load ptr, ptr %42, align 8, !tbaa !5
  %192 = load i32, ptr %41, align 4, !tbaa !9
  %193 = zext i32 %192 to i64
  %194 = getelementptr inbounds i64, ptr %191, i64 %193
  store i64 -1, ptr %194, align 8, !tbaa !23
  br label %200

195:                                              ; preds = %186
  %196 = load ptr, ptr %42, align 8, !tbaa !5
  %197 = load i32, ptr %41, align 4, !tbaa !9
  %198 = zext i32 %197 to i64
  %199 = getelementptr inbounds i64, ptr %196, i64 %198
  store i64 0, ptr %199, align 8, !tbaa !23
  br label %200

200:                                              ; preds = %195, %190
  br label %201

201:                                              ; preds = %200
  %202 = load i32, ptr %41, align 4, !tbaa !9
  %203 = add i32 %202, 1
  store i32 %203, ptr %41, align 4, !tbaa !9
  br label %183, !llvm.loop !25

204:                                              ; preds = %183
  store i32 1879384109, ptr %37, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #5
  br label %229

205:                                              ; preds = %173
  call void @llvm.lifetime.start.p0(i64 8, ptr %43) #5
  %206 = getelementptr inbounds [32 x i8], ptr %40, i64 0, i64 0
  store ptr %206, ptr %43, align 8, !tbaa !5
  store i32 0, ptr %41, align 4, !tbaa !9
  br label %207

207:                                              ; preds = %225, %205
  %208 = load i32, ptr %41, align 4, !tbaa !9
  %209 = icmp ult i32 %208, 8
  br i1 %209, label %210, label %228

210:                                              ; preds = %207
  %211 = load i32, ptr %41, align 4, !tbaa !9
  %212 = load i32, ptr %29, align 4, !tbaa !9
  %213 = icmp ult i32 %211, %212
  br i1 %213, label %214, label %219

214:                                              ; preds = %210
  %215 = load ptr, ptr %43, align 8, !tbaa !5
  %216 = load i32, ptr %41, align 4, !tbaa !9
  %217 = zext i32 %216 to i64
  %218 = getelementptr inbounds i32, ptr %215, i64 %217
  store i32 -1, ptr %218, align 4, !tbaa !9
  br label %224

219:                                              ; preds = %210
  %220 = load ptr, ptr %43, align 8, !tbaa !5
  %221 = load i32, ptr %41, align 4, !tbaa !9
  %222 = zext i32 %221 to i64
  %223 = getelementptr inbounds i32, ptr %220, i64 %222
  store i32 0, ptr %223, align 4, !tbaa !9
  br label %224

224:                                              ; preds = %219, %214
  br label %225

225:                                              ; preds = %224
  %226 = load i32, ptr %41, align 4, !tbaa !9
  %227 = add i32 %226, 1
  store i32 %227, ptr %41, align 4, !tbaa !9
  br label %207, !llvm.loop !27

228:                                              ; preds = %207
  store i32 1879384108, ptr %37, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #5
  br label %229

229:                                              ; preds = %228, %204
  %230 = load ptr, ptr %16, align 8, !tbaa !5
  %231 = getelementptr inbounds [32 x i8], ptr %40, i64 0, i64 0
  call void @libxsmm_x86_instruction_full_vec_load_of_constants(ptr noundef %230, ptr noundef %231, ptr noundef %39, i8 noundef signext 121, i32 noundef 15)
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #5
  call void @llvm.lifetime.end.p0(i64 32, ptr %40) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %39) #5
  br label %232

232:                                              ; preds = %229, %93
  br label %233

233:                                              ; preds = %232, %80
  store i32 0, ptr %31, align 4, !tbaa !9
  br label %234

234:                                              ; preds = %405, %233
  %235 = load i32, ptr %31, align 4, !tbaa !9
  %236 = load i32, ptr %36, align 4, !tbaa !9
  %237 = icmp ult i32 %235, %236
  br i1 %237, label %238, label %408

238:                                              ; preds = %234
  store i32 0, ptr %32, align 4, !tbaa !9
  br label %239

239:                                              ; preds = %401, %238
  %240 = load i32, ptr %32, align 4, !tbaa !9
  %241 = load i32, ptr %28, align 4, !tbaa !9
  %242 = icmp ult i32 %240, %241
  br i1 %242, label %243, label %404

243:                                              ; preds = %239
  %244 = load ptr, ptr %20, align 8, !tbaa !5
  %245 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %244, i32 0, i32 6
  %246 = load i32, ptr %245, align 1, !tbaa !28
  %247 = and i32 4, %246
  %248 = icmp ne i32 0, %247
  br i1 %248, label %249, label %272

249:                                              ; preds = %243
  %250 = load ptr, ptr %16, align 8, !tbaa !5
  %251 = load ptr, ptr %19, align 8, !tbaa !5
  %252 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %251, i32 0, i32 13
  %253 = load i32, ptr %252, align 4, !tbaa !30
  %254 = load ptr, ptr %19, align 8, !tbaa !5
  %255 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %254, i32 0, i32 21
  %256 = load i8, ptr %255, align 4, !tbaa !31
  %257 = load i32, ptr %31, align 4, !tbaa !9
  %258 = load i32, ptr %28, align 4, !tbaa !9
  %259 = mul i32 %257, %258
  %260 = load i32, ptr %32, align 4, !tbaa !9
  %261 = add i32 %259, %260
  %262 = load i32, ptr %31, align 4, !tbaa !9
  %263 = load i32, ptr %28, align 4, !tbaa !9
  %264 = mul i32 %262, %263
  %265 = load i32, ptr %32, align 4, !tbaa !9
  %266 = add i32 %264, %265
  %267 = load i32, ptr %31, align 4, !tbaa !9
  %268 = load i32, ptr %28, align 4, !tbaa !9
  %269 = mul i32 %267, %268
  %270 = load i32, ptr %32, align 4, !tbaa !9
  %271 = add i32 %269, %270
  call void @libxsmm_x86_instruction_vec_compute_3reg(ptr noundef %250, i32 noundef %253, i8 noundef signext %256, i32 noundef %261, i32 noundef %266, i32 noundef %271)
  br label %400

272:                                              ; preds = %243
  %273 = load i32, ptr %32, align 4, !tbaa !9
  %274 = load i32, ptr %28, align 4, !tbaa !9
  %275 = sub i32 %274, 1
  %276 = icmp eq i32 %273, %275
  br i1 %276, label %277, label %359

277:                                              ; preds = %272
  %278 = load i32, ptr %29, align 4, !tbaa !9
  %279 = icmp ne i32 %278, 0
  br i1 %279, label %280, label %359

280:                                              ; preds = %277
  %281 = load i32, ptr %37, align 4, !tbaa !9
  %282 = icmp ugt i32 %281, 0
  br i1 %282, label %283, label %318

283:                                              ; preds = %280
  %284 = load ptr, ptr %16, align 8, !tbaa !5
  %285 = load i32, ptr %37, align 4, !tbaa !9
  %286 = load ptr, ptr %18, align 8, !tbaa !5
  %287 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %286, i32 0, i32 5
  %288 = load i32, ptr %287, align 4, !tbaa !32
  %289 = load i32, ptr %24, align 4, !tbaa !9
  %290 = load i32, ptr %31, align 4, !tbaa !9
  %291 = add i32 %289, %290
  %292 = load i32, ptr %30, align 4, !tbaa !9
  %293 = mul i32 %291, %292
  %294 = load ptr, ptr %19, align 8, !tbaa !5
  %295 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %294, i32 0, i32 5
  %296 = load i32, ptr %295, align 4, !tbaa !33
  %297 = mul i32 %293, %296
  %298 = load i32, ptr %26, align 4, !tbaa !9
  %299 = load i32, ptr %32, align 4, !tbaa !9
  %300 = add i32 %298, %299
  %301 = load ptr, ptr %19, align 8, !tbaa !5
  %302 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %301, i32 0, i32 2
  %303 = load i32, ptr %302, align 8, !tbaa !21
  %304 = mul i32 %300, %303
  %305 = load ptr, ptr %19, align 8, !tbaa !5
  %306 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %305, i32 0, i32 5
  %307 = load i32, ptr %306, align 4, !tbaa !33
  %308 = mul i32 %304, %307
  %309 = add i32 %297, %308
  %310 = load ptr, ptr %19, align 8, !tbaa !5
  %311 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %310, i32 0, i32 21
  %312 = load i8, ptr %311, align 4, !tbaa !31
  %313 = load i32, ptr %31, align 4, !tbaa !9
  %314 = load i32, ptr %28, align 4, !tbaa !9
  %315 = mul i32 %313, %314
  %316 = load i32, ptr %32, align 4, !tbaa !9
  %317 = add i32 %315, %316
  call void @libxsmm_x86_instruction_vec_mask_move(ptr noundef %284, i32 noundef %285, i32 noundef %288, i32 noundef 127, i32 noundef 0, i32 noundef %309, i8 noundef signext %312, i32 noundef %317, i32 noundef 15, i32 noundef 0)
  br label %358

318:                                              ; preds = %280
  %319 = load ptr, ptr %16, align 8, !tbaa !5
  %320 = load ptr, ptr %19, align 8, !tbaa !5
  %321 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %320, i32 0, i32 0
  %322 = load i32, ptr %321, align 8, !tbaa !34
  %323 = load ptr, ptr %19, align 8, !tbaa !5
  %324 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %323, i32 0, i32 9
  %325 = load i32, ptr %324, align 4, !tbaa !35
  %326 = load ptr, ptr %18, align 8, !tbaa !5
  %327 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %326, i32 0, i32 5
  %328 = load i32, ptr %327, align 4, !tbaa !32
  %329 = load i32, ptr %24, align 4, !tbaa !9
  %330 = load i32, ptr %31, align 4, !tbaa !9
  %331 = add i32 %329, %330
  %332 = load i32, ptr %30, align 4, !tbaa !9
  %333 = mul i32 %331, %332
  %334 = load ptr, ptr %19, align 8, !tbaa !5
  %335 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %334, i32 0, i32 5
  %336 = load i32, ptr %335, align 4, !tbaa !33
  %337 = mul i32 %333, %336
  %338 = load i32, ptr %26, align 4, !tbaa !9
  %339 = load i32, ptr %32, align 4, !tbaa !9
  %340 = add i32 %338, %339
  %341 = load ptr, ptr %19, align 8, !tbaa !5
  %342 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %341, i32 0, i32 2
  %343 = load i32, ptr %342, align 8, !tbaa !21
  %344 = mul i32 %340, %343
  %345 = load ptr, ptr %19, align 8, !tbaa !5
  %346 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %345, i32 0, i32 5
  %347 = load i32, ptr %346, align 4, !tbaa !33
  %348 = mul i32 %344, %347
  %349 = add i32 %337, %348
  %350 = load ptr, ptr %19, align 8, !tbaa !5
  %351 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %350, i32 0, i32 21
  %352 = load i8, ptr %351, align 4, !tbaa !31
  %353 = load i32, ptr %31, align 4, !tbaa !9
  %354 = load i32, ptr %28, align 4, !tbaa !9
  %355 = mul i32 %353, %354
  %356 = load i32, ptr %32, align 4, !tbaa !9
  %357 = add i32 %355, %356
  call void @libxsmm_x86_instruction_vec_move(ptr noundef %319, i32 noundef %322, i32 noundef %325, i32 noundef %328, i32 noundef 127, i32 noundef 0, i32 noundef %349, i8 noundef signext %352, i32 noundef %357, i32 noundef 1, i32 noundef 1, i32 noundef 0)
  br label %358

358:                                              ; preds = %318, %283
  br label %399

359:                                              ; preds = %277, %272
  %360 = load ptr, ptr %16, align 8, !tbaa !5
  %361 = load ptr, ptr %19, align 8, !tbaa !5
  %362 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %361, i32 0, i32 0
  %363 = load i32, ptr %362, align 8, !tbaa !34
  %364 = load ptr, ptr %19, align 8, !tbaa !5
  %365 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %364, i32 0, i32 9
  %366 = load i32, ptr %365, align 4, !tbaa !35
  %367 = load ptr, ptr %18, align 8, !tbaa !5
  %368 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %367, i32 0, i32 5
  %369 = load i32, ptr %368, align 4, !tbaa !32
  %370 = load i32, ptr %24, align 4, !tbaa !9
  %371 = load i32, ptr %31, align 4, !tbaa !9
  %372 = add i32 %370, %371
  %373 = load i32, ptr %30, align 4, !tbaa !9
  %374 = mul i32 %372, %373
  %375 = load ptr, ptr %19, align 8, !tbaa !5
  %376 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %375, i32 0, i32 5
  %377 = load i32, ptr %376, align 4, !tbaa !33
  %378 = mul i32 %374, %377
  %379 = load i32, ptr %26, align 4, !tbaa !9
  %380 = load i32, ptr %32, align 4, !tbaa !9
  %381 = add i32 %379, %380
  %382 = load ptr, ptr %19, align 8, !tbaa !5
  %383 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %382, i32 0, i32 2
  %384 = load i32, ptr %383, align 8, !tbaa !21
  %385 = mul i32 %381, %384
  %386 = load ptr, ptr %19, align 8, !tbaa !5
  %387 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %386, i32 0, i32 5
  %388 = load i32, ptr %387, align 4, !tbaa !33
  %389 = mul i32 %385, %388
  %390 = add i32 %378, %389
  %391 = load ptr, ptr %19, align 8, !tbaa !5
  %392 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %391, i32 0, i32 21
  %393 = load i8, ptr %392, align 4, !tbaa !31
  %394 = load i32, ptr %31, align 4, !tbaa !9
  %395 = load i32, ptr %28, align 4, !tbaa !9
  %396 = mul i32 %394, %395
  %397 = load i32, ptr %32, align 4, !tbaa !9
  %398 = add i32 %396, %397
  call void @libxsmm_x86_instruction_vec_move(ptr noundef %360, i32 noundef %363, i32 noundef %366, i32 noundef %369, i32 noundef 127, i32 noundef 0, i32 noundef %390, i8 noundef signext %393, i32 noundef %398, i32 noundef 0, i32 noundef 1, i32 noundef 0)
  br label %399

399:                                              ; preds = %359, %358
  br label %400

400:                                              ; preds = %399, %249
  br label %401

401:                                              ; preds = %400
  %402 = load i32, ptr %32, align 4, !tbaa !9
  %403 = add i32 %402, 1
  store i32 %403, ptr %32, align 4, !tbaa !9
  br label %239, !llvm.loop !36

404:                                              ; preds = %239
  br label %405

405:                                              ; preds = %404
  %406 = load i32, ptr %31, align 4, !tbaa !9
  %407 = add i32 %406, 1
  store i32 %407, ptr %31, align 4, !tbaa !9
  br label %234, !llvm.loop !37

408:                                              ; preds = %234
  store i32 0, ptr %33, align 4, !tbaa !9
  br label %409

409:                                              ; preds = %855, %408
  %410 = load i32, ptr %33, align 4, !tbaa !9
  %411 = load ptr, ptr %20, align 8, !tbaa !5
  %412 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %411, i32 0, i32 2
  %413 = load i32, ptr %412, align 1, !tbaa !38
  %414 = icmp ult i32 %410, %413
  br i1 %414, label %415, label %858

415:                                              ; preds = %409
  %416 = load ptr, ptr %21, align 8, !tbaa !5
  %417 = load i32, ptr %33, align 4, !tbaa !9
  %418 = add i32 %417, 1
  %419 = zext i32 %418 to i64
  %420 = getelementptr inbounds i32, ptr %416, i64 %419
  %421 = load i32, ptr %420, align 4, !tbaa !9
  %422 = load ptr, ptr %21, align 8, !tbaa !5
  %423 = load i32, ptr %33, align 4, !tbaa !9
  %424 = zext i32 %423 to i64
  %425 = getelementptr inbounds i32, ptr %422, i64 %424
  %426 = load i32, ptr %425, align 4, !tbaa !9
  %427 = sub i32 %421, %426
  store i32 %427, ptr %38, align 4, !tbaa !9
  store i32 0, ptr %34, align 4, !tbaa !9
  store i32 0, ptr %31, align 4, !tbaa !9
  br label %428

428:                                              ; preds = %478, %415
  %429 = load i32, ptr %31, align 4, !tbaa !9
  %430 = load i32, ptr %38, align 4, !tbaa !9
  %431 = icmp ult i32 %429, %430
  br i1 %431, label %432, label %481

432:                                              ; preds = %428
  %433 = load ptr, ptr %22, align 8, !tbaa !5
  %434 = load ptr, ptr %21, align 8, !tbaa !5
  %435 = load i32, ptr %33, align 4, !tbaa !9
  %436 = zext i32 %435 to i64
  %437 = getelementptr inbounds i32, ptr %434, i64 %436
  %438 = load i32, ptr %437, align 4, !tbaa !9
  %439 = load i32, ptr %31, align 4, !tbaa !9
  %440 = add i32 %438, %439
  %441 = zext i32 %440 to i64
  %442 = getelementptr inbounds i32, ptr %433, i64 %441
  %443 = load i32, ptr %442, align 4, !tbaa !9
  %444 = load ptr, ptr %20, align 8, !tbaa !5
  %445 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %444, i32 0, i32 1
  %446 = load i32, ptr %445, align 1, !tbaa !39
  %447 = icmp ult i32 %443, %446
  br i1 %447, label %448, label %477

448:                                              ; preds = %432
  %449 = load ptr, ptr %22, align 8, !tbaa !5
  %450 = load ptr, ptr %21, align 8, !tbaa !5
  %451 = load i32, ptr %33, align 4, !tbaa !9
  %452 = zext i32 %451 to i64
  %453 = getelementptr inbounds i32, ptr %450, i64 %452
  %454 = load i32, ptr %453, align 4, !tbaa !9
  %455 = load i32, ptr %31, align 4, !tbaa !9
  %456 = add i32 %454, %455
  %457 = zext i32 %456 to i64
  %458 = getelementptr inbounds i32, ptr %449, i64 %457
  %459 = load i32, ptr %458, align 4, !tbaa !9
  %460 = load i32, ptr %24, align 4, !tbaa !9
  %461 = icmp uge i32 %459, %460
  br i1 %461, label %462, label %477

462:                                              ; preds = %448
  %463 = load ptr, ptr %22, align 8, !tbaa !5
  %464 = load ptr, ptr %21, align 8, !tbaa !5
  %465 = load i32, ptr %33, align 4, !tbaa !9
  %466 = zext i32 %465 to i64
  %467 = getelementptr inbounds i32, ptr %464, i64 %466
  %468 = load i32, ptr %467, align 4, !tbaa !9
  %469 = load i32, ptr %31, align 4, !tbaa !9
  %470 = add i32 %468, %469
  %471 = zext i32 %470 to i64
  %472 = getelementptr inbounds i32, ptr %463, i64 %471
  %473 = load i32, ptr %472, align 4, !tbaa !9
  %474 = load i32, ptr %25, align 4, !tbaa !9
  %475 = icmp ult i32 %473, %474
  br i1 %475, label %476, label %477

476:                                              ; preds = %462
  store i32 1, ptr %34, align 4, !tbaa !9
  br label %477

477:                                              ; preds = %476, %462, %448, %432
  br label %478

478:                                              ; preds = %477
  %479 = load i32, ptr %31, align 4, !tbaa !9
  %480 = add i32 %479, 1
  store i32 %480, ptr %31, align 4, !tbaa !9
  br label %428, !llvm.loop !40

481:                                              ; preds = %428
  %482 = load i32, ptr %34, align 4, !tbaa !9
  %483 = icmp ne i32 %482, 0
  br i1 %483, label %484, label %854

484:                                              ; preds = %481
  call void @llvm.lifetime.start.p0(i64 4, ptr %44) #5
  %485 = load i32, ptr %37, align 4, !tbaa !9
  %486 = icmp ugt i32 %485, 0
  %487 = zext i1 %486 to i64
  %488 = select i1 %486, i32 14, i32 15
  store i32 %488, ptr %44, align 4, !tbaa !9
  store i32 0, ptr %32, align 4, !tbaa !9
  br label %489

489:                                              ; preds = %850, %484
  %490 = load i32, ptr %32, align 4, !tbaa !9
  %491 = load i32, ptr %28, align 4, !tbaa !9
  %492 = icmp ult i32 %490, %491
  br i1 %492, label %493, label %853

493:                                              ; preds = %489
  %494 = load i32, ptr %32, align 4, !tbaa !9
  %495 = load i32, ptr %28, align 4, !tbaa !9
  %496 = sub i32 %495, 1
  %497 = icmp eq i32 %494, %496
  br i1 %497, label %498, label %568

498:                                              ; preds = %493
  %499 = load i32, ptr %29, align 4, !tbaa !9
  %500 = icmp ne i32 %499, 0
  br i1 %500, label %501, label %568

501:                                              ; preds = %498
  %502 = load i32, ptr %37, align 4, !tbaa !9
  %503 = icmp ugt i32 %502, 0
  br i1 %503, label %504, label %533

504:                                              ; preds = %501
  %505 = load ptr, ptr %16, align 8, !tbaa !5
  %506 = load i32, ptr %37, align 4, !tbaa !9
  %507 = load ptr, ptr %18, align 8, !tbaa !5
  %508 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %507, i32 0, i32 1
  %509 = load i32, ptr %508, align 4, !tbaa !41
  %510 = load i32, ptr %33, align 4, !tbaa !9
  %511 = load i32, ptr %30, align 4, !tbaa !9
  %512 = mul i32 %510, %511
  %513 = load ptr, ptr %19, align 8, !tbaa !5
  %514 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %513, i32 0, i32 3
  %515 = load i32, ptr %514, align 4, !tbaa !42
  %516 = mul i32 %512, %515
  %517 = load i32, ptr %26, align 4, !tbaa !9
  %518 = load i32, ptr %32, align 4, !tbaa !9
  %519 = add i32 %517, %518
  %520 = load ptr, ptr %19, align 8, !tbaa !5
  %521 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %520, i32 0, i32 2
  %522 = load i32, ptr %521, align 8, !tbaa !21
  %523 = mul i32 %519, %522
  %524 = load ptr, ptr %19, align 8, !tbaa !5
  %525 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %524, i32 0, i32 3
  %526 = load i32, ptr %525, align 4, !tbaa !42
  %527 = mul i32 %523, %526
  %528 = add i32 %516, %527
  %529 = load ptr, ptr %19, align 8, !tbaa !5
  %530 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %529, i32 0, i32 21
  %531 = load i8, ptr %530, align 4, !tbaa !31
  %532 = load i32, ptr %35, align 4, !tbaa !9
  call void @libxsmm_x86_instruction_vec_mask_move(ptr noundef %505, i32 noundef %506, i32 noundef %509, i32 noundef 127, i32 noundef 0, i32 noundef %528, i8 noundef signext %531, i32 noundef %532, i32 noundef 15, i32 noundef 0)
  br label %567

533:                                              ; preds = %501
  %534 = load ptr, ptr %16, align 8, !tbaa !5
  %535 = load ptr, ptr %19, align 8, !tbaa !5
  %536 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %535, i32 0, i32 0
  %537 = load i32, ptr %536, align 8, !tbaa !34
  %538 = load ptr, ptr %19, align 8, !tbaa !5
  %539 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %538, i32 0, i32 6
  %540 = load i32, ptr %539, align 8, !tbaa !43
  %541 = load ptr, ptr %18, align 8, !tbaa !5
  %542 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %541, i32 0, i32 1
  %543 = load i32, ptr %542, align 4, !tbaa !41
  %544 = load i32, ptr %33, align 4, !tbaa !9
  %545 = load i32, ptr %30, align 4, !tbaa !9
  %546 = mul i32 %544, %545
  %547 = load ptr, ptr %19, align 8, !tbaa !5
  %548 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %547, i32 0, i32 3
  %549 = load i32, ptr %548, align 4, !tbaa !42
  %550 = mul i32 %546, %549
  %551 = load i32, ptr %26, align 4, !tbaa !9
  %552 = load i32, ptr %32, align 4, !tbaa !9
  %553 = add i32 %551, %552
  %554 = load ptr, ptr %19, align 8, !tbaa !5
  %555 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %554, i32 0, i32 2
  %556 = load i32, ptr %555, align 8, !tbaa !21
  %557 = mul i32 %553, %556
  %558 = load ptr, ptr %19, align 8, !tbaa !5
  %559 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %558, i32 0, i32 3
  %560 = load i32, ptr %559, align 4, !tbaa !42
  %561 = mul i32 %557, %560
  %562 = add i32 %550, %561
  %563 = load ptr, ptr %19, align 8, !tbaa !5
  %564 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %563, i32 0, i32 21
  %565 = load i8, ptr %564, align 4, !tbaa !31
  %566 = load i32, ptr %35, align 4, !tbaa !9
  call void @libxsmm_x86_instruction_vec_move(ptr noundef %534, i32 noundef %537, i32 noundef %540, i32 noundef %543, i32 noundef 127, i32 noundef 0, i32 noundef %562, i8 noundef signext %565, i32 noundef %566, i32 noundef 1, i32 noundef 1, i32 noundef 0)
  br label %567

567:                                              ; preds = %533, %504
  br label %602

568:                                              ; preds = %498, %493
  %569 = load ptr, ptr %16, align 8, !tbaa !5
  %570 = load ptr, ptr %19, align 8, !tbaa !5
  %571 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %570, i32 0, i32 0
  %572 = load i32, ptr %571, align 8, !tbaa !34
  %573 = load ptr, ptr %19, align 8, !tbaa !5
  %574 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %573, i32 0, i32 6
  %575 = load i32, ptr %574, align 8, !tbaa !43
  %576 = load ptr, ptr %18, align 8, !tbaa !5
  %577 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %576, i32 0, i32 1
  %578 = load i32, ptr %577, align 4, !tbaa !41
  %579 = load i32, ptr %33, align 4, !tbaa !9
  %580 = load i32, ptr %30, align 4, !tbaa !9
  %581 = mul i32 %579, %580
  %582 = load ptr, ptr %19, align 8, !tbaa !5
  %583 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %582, i32 0, i32 3
  %584 = load i32, ptr %583, align 4, !tbaa !42
  %585 = mul i32 %581, %584
  %586 = load i32, ptr %26, align 4, !tbaa !9
  %587 = load i32, ptr %32, align 4, !tbaa !9
  %588 = add i32 %586, %587
  %589 = load ptr, ptr %19, align 8, !tbaa !5
  %590 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %589, i32 0, i32 2
  %591 = load i32, ptr %590, align 8, !tbaa !21
  %592 = mul i32 %588, %591
  %593 = load ptr, ptr %19, align 8, !tbaa !5
  %594 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %593, i32 0, i32 3
  %595 = load i32, ptr %594, align 4, !tbaa !42
  %596 = mul i32 %592, %595
  %597 = add i32 %585, %596
  %598 = load ptr, ptr %19, align 8, !tbaa !5
  %599 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %598, i32 0, i32 21
  %600 = load i8, ptr %599, align 4, !tbaa !31
  %601 = load i32, ptr %35, align 4, !tbaa !9
  call void @libxsmm_x86_instruction_vec_move(ptr noundef %569, i32 noundef %572, i32 noundef %575, i32 noundef %578, i32 noundef 127, i32 noundef 0, i32 noundef %597, i8 noundef signext %600, i32 noundef %601, i32 noundef 0, i32 noundef 1, i32 noundef 0)
  br label %602

602:                                              ; preds = %568, %567
  store i32 0, ptr %31, align 4, !tbaa !9
  br label %603

603:                                              ; preds = %846, %602
  %604 = load i32, ptr %31, align 4, !tbaa !9
  %605 = load i32, ptr %38, align 4, !tbaa !9
  %606 = icmp ult i32 %604, %605
  br i1 %606, label %607, label %849

607:                                              ; preds = %603
  %608 = load ptr, ptr %22, align 8, !tbaa !5
  %609 = load ptr, ptr %21, align 8, !tbaa !5
  %610 = load i32, ptr %33, align 4, !tbaa !9
  %611 = zext i32 %610 to i64
  %612 = getelementptr inbounds i32, ptr %609, i64 %611
  %613 = load i32, ptr %612, align 4, !tbaa !9
  %614 = load i32, ptr %31, align 4, !tbaa !9
  %615 = add i32 %613, %614
  %616 = zext i32 %615 to i64
  %617 = getelementptr inbounds i32, ptr %608, i64 %616
  %618 = load i32, ptr %617, align 4, !tbaa !9
  %619 = load ptr, ptr %20, align 8, !tbaa !5
  %620 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %619, i32 0, i32 1
  %621 = load i32, ptr %620, align 1, !tbaa !39
  %622 = icmp ult i32 %618, %621
  br i1 %622, label %623, label %845

623:                                              ; preds = %607
  %624 = load ptr, ptr %22, align 8, !tbaa !5
  %625 = load ptr, ptr %21, align 8, !tbaa !5
  %626 = load i32, ptr %33, align 4, !tbaa !9
  %627 = zext i32 %626 to i64
  %628 = getelementptr inbounds i32, ptr %625, i64 %627
  %629 = load i32, ptr %628, align 4, !tbaa !9
  %630 = load i32, ptr %31, align 4, !tbaa !9
  %631 = add i32 %629, %630
  %632 = zext i32 %631 to i64
  %633 = getelementptr inbounds i32, ptr %624, i64 %632
  %634 = load i32, ptr %633, align 4, !tbaa !9
  %635 = load i32, ptr %24, align 4, !tbaa !9
  %636 = icmp uge i32 %634, %635
  br i1 %636, label %637, label %845

637:                                              ; preds = %623
  %638 = load ptr, ptr %22, align 8, !tbaa !5
  %639 = load ptr, ptr %21, align 8, !tbaa !5
  %640 = load i32, ptr %33, align 4, !tbaa !9
  %641 = zext i32 %640 to i64
  %642 = getelementptr inbounds i32, ptr %639, i64 %641
  %643 = load i32, ptr %642, align 4, !tbaa !9
  %644 = load i32, ptr %31, align 4, !tbaa !9
  %645 = add i32 %643, %644
  %646 = zext i32 %645 to i64
  %647 = getelementptr inbounds i32, ptr %638, i64 %646
  %648 = load i32, ptr %647, align 4, !tbaa !9
  %649 = load i32, ptr %25, align 4, !tbaa !9
  %650 = icmp ult i32 %648, %649
  br i1 %650, label %651, label %845

651:                                              ; preds = %637
  %652 = load ptr, ptr %16, align 8, !tbaa !5
  %653 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %652, i32 0, i32 6
  %654 = load i32, ptr %653, align 4, !tbaa !18
  %655 = icmp uge i32 %654, 1101
  br i1 %655, label %656, label %701

656:                                              ; preds = %651
  %657 = load ptr, ptr %16, align 8, !tbaa !5
  %658 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %657, i32 0, i32 6
  %659 = load i32, ptr %658, align 4, !tbaa !18
  %660 = icmp ule i32 %659, 1999
  br i1 %660, label %661, label %701

661:                                              ; preds = %656
  %662 = load ptr, ptr %16, align 8, !tbaa !5
  %663 = load ptr, ptr %19, align 8, !tbaa !5
  %664 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %663, i32 0, i32 14
  %665 = load i32, ptr %664, align 8, !tbaa !44
  %666 = load ptr, ptr %19, align 8, !tbaa !5
  %667 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %666, i32 0, i32 21
  %668 = load i8, ptr %667, align 4, !tbaa !31
  %669 = load ptr, ptr %18, align 8, !tbaa !5
  %670 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %669, i32 0, i32 3
  %671 = load i32, ptr %670, align 4, !tbaa !45
  %672 = load ptr, ptr %21, align 8, !tbaa !5
  %673 = load i32, ptr %33, align 4, !tbaa !9
  %674 = zext i32 %673 to i64
  %675 = getelementptr inbounds i32, ptr %672, i64 %674
  %676 = load i32, ptr %675, align 4, !tbaa !9
  %677 = load i32, ptr %31, align 4, !tbaa !9
  %678 = add i32 %676, %677
  %679 = load ptr, ptr %19, align 8, !tbaa !5
  %680 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %679, i32 0, i32 3
  %681 = load i32, ptr %680, align 4, !tbaa !42
  %682 = mul i32 %678, %681
  %683 = load i32, ptr %35, align 4, !tbaa !9
  %684 = load ptr, ptr %22, align 8, !tbaa !5
  %685 = load ptr, ptr %21, align 8, !tbaa !5
  %686 = load i32, ptr %33, align 4, !tbaa !9
  %687 = zext i32 %686 to i64
  %688 = getelementptr inbounds i32, ptr %685, i64 %687
  %689 = load i32, ptr %688, align 4, !tbaa !9
  %690 = load i32, ptr %31, align 4, !tbaa !9
  %691 = add i32 %689, %690
  %692 = zext i32 %691 to i64
  %693 = getelementptr inbounds i32, ptr %684, i64 %692
  %694 = load i32, ptr %693, align 4, !tbaa !9
  %695 = load i32, ptr %24, align 4, !tbaa !9
  %696 = sub i32 %694, %695
  %697 = load i32, ptr %28, align 4, !tbaa !9
  %698 = mul i32 %696, %697
  %699 = load i32, ptr %32, align 4, !tbaa !9
  %700 = add i32 %698, %699
  call void @libxsmm_x86_instruction_vec_compute_mem_2reg(ptr noundef %662, i32 noundef %665, i8 noundef signext %668, i32 noundef %671, i32 noundef 127, i32 noundef 0, i32 noundef %682, i32 noundef 1, i32 noundef %683, i32 noundef %700)
  br label %844

701:                                              ; preds = %656, %651
  %702 = load ptr, ptr %16, align 8, !tbaa !5
  %703 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %702, i32 0, i32 6
  %704 = load i32, ptr %703, align 4, !tbaa !18
  %705 = icmp uge i32 %704, 1006
  br i1 %705, label %706, label %758

706:                                              ; preds = %701
  %707 = load ptr, ptr %16, align 8, !tbaa !5
  %708 = load ptr, ptr %19, align 8, !tbaa !5
  %709 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %708, i32 0, i32 0
  %710 = load i32, ptr %709, align 8, !tbaa !34
  %711 = load ptr, ptr %19, align 8, !tbaa !5
  %712 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %711, i32 0, i32 7
  %713 = load i32, ptr %712, align 4, !tbaa !46
  %714 = load ptr, ptr %18, align 8, !tbaa !5
  %715 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %714, i32 0, i32 3
  %716 = load i32, ptr %715, align 4, !tbaa !45
  %717 = load ptr, ptr %21, align 8, !tbaa !5
  %718 = load i32, ptr %33, align 4, !tbaa !9
  %719 = zext i32 %718 to i64
  %720 = getelementptr inbounds i32, ptr %717, i64 %719
  %721 = load i32, ptr %720, align 4, !tbaa !9
  %722 = load i32, ptr %31, align 4, !tbaa !9
  %723 = add i32 %721, %722
  %724 = load ptr, ptr %19, align 8, !tbaa !5
  %725 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %724, i32 0, i32 3
  %726 = load i32, ptr %725, align 4, !tbaa !42
  %727 = mul i32 %723, %726
  %728 = load ptr, ptr %19, align 8, !tbaa !5
  %729 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %728, i32 0, i32 21
  %730 = load i8, ptr %729, align 4, !tbaa !31
  %731 = load i32, ptr %44, align 4, !tbaa !9
  call void @libxsmm_x86_instruction_vec_move(ptr noundef %707, i32 noundef %710, i32 noundef %713, i32 noundef %716, i32 noundef 127, i32 noundef 0, i32 noundef %727, i8 noundef signext %730, i32 noundef %731, i32 noundef 0, i32 noundef 1, i32 noundef 0)
  %732 = load ptr, ptr %16, align 8, !tbaa !5
  %733 = load ptr, ptr %19, align 8, !tbaa !5
  %734 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %733, i32 0, i32 14
  %735 = load i32, ptr %734, align 8, !tbaa !44
  %736 = load ptr, ptr %19, align 8, !tbaa !5
  %737 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %736, i32 0, i32 21
  %738 = load i8, ptr %737, align 4, !tbaa !31
  %739 = load i32, ptr %35, align 4, !tbaa !9
  %740 = load i32, ptr %44, align 4, !tbaa !9
  %741 = load ptr, ptr %22, align 8, !tbaa !5
  %742 = load ptr, ptr %21, align 8, !tbaa !5
  %743 = load i32, ptr %33, align 4, !tbaa !9
  %744 = zext i32 %743 to i64
  %745 = getelementptr inbounds i32, ptr %742, i64 %744
  %746 = load i32, ptr %745, align 4, !tbaa !9
  %747 = load i32, ptr %31, align 4, !tbaa !9
  %748 = add i32 %746, %747
  %749 = zext i32 %748 to i64
  %750 = getelementptr inbounds i32, ptr %741, i64 %749
  %751 = load i32, ptr %750, align 4, !tbaa !9
  %752 = load i32, ptr %24, align 4, !tbaa !9
  %753 = sub i32 %751, %752
  %754 = load i32, ptr %28, align 4, !tbaa !9
  %755 = mul i32 %753, %754
  %756 = load i32, ptr %32, align 4, !tbaa !9
  %757 = add i32 %755, %756
  call void @libxsmm_x86_instruction_vec_compute_3reg(ptr noundef %732, i32 noundef %735, i8 noundef signext %738, i32 noundef %739, i32 noundef %740, i32 noundef %757)
  br label %843

758:                                              ; preds = %701
  %759 = load ptr, ptr %16, align 8, !tbaa !5
  %760 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %759, i32 0, i32 6
  %761 = load i32, ptr %760, align 4, !tbaa !18
  %762 = icmp eq i32 %761, 1005
  br i1 %762, label %763, label %841

763:                                              ; preds = %758
  %764 = load ptr, ptr %16, align 8, !tbaa !5
  %765 = load ptr, ptr %19, align 8, !tbaa !5
  %766 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %765, i32 0, i32 0
  %767 = load i32, ptr %766, align 8, !tbaa !34
  %768 = load ptr, ptr %19, align 8, !tbaa !5
  %769 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %768, i32 0, i32 7
  %770 = load i32, ptr %769, align 4, !tbaa !46
  %771 = load ptr, ptr %18, align 8, !tbaa !5
  %772 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %771, i32 0, i32 3
  %773 = load i32, ptr %772, align 4, !tbaa !45
  %774 = load ptr, ptr %21, align 8, !tbaa !5
  %775 = load i32, ptr %33, align 4, !tbaa !9
  %776 = zext i32 %775 to i64
  %777 = getelementptr inbounds i32, ptr %774, i64 %776
  %778 = load i32, ptr %777, align 4, !tbaa !9
  %779 = load i32, ptr %31, align 4, !tbaa !9
  %780 = add i32 %778, %779
  %781 = load ptr, ptr %19, align 8, !tbaa !5
  %782 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %781, i32 0, i32 3
  %783 = load i32, ptr %782, align 4, !tbaa !42
  %784 = mul i32 %780, %783
  %785 = load ptr, ptr %19, align 8, !tbaa !5
  %786 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %785, i32 0, i32 21
  %787 = load i8, ptr %786, align 4, !tbaa !31
  %788 = load i32, ptr %44, align 4, !tbaa !9
  call void @libxsmm_x86_instruction_vec_move(ptr noundef %764, i32 noundef %767, i32 noundef %770, i32 noundef %773, i32 noundef 127, i32 noundef 0, i32 noundef %784, i8 noundef signext %787, i32 noundef %788, i32 noundef 0, i32 noundef 1, i32 noundef 0)
  %789 = load ptr, ptr %16, align 8, !tbaa !5
  %790 = load ptr, ptr %19, align 8, !tbaa !5
  %791 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %790, i32 0, i32 14
  %792 = load i32, ptr %791, align 8, !tbaa !44
  %793 = load ptr, ptr %19, align 8, !tbaa !5
  %794 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %793, i32 0, i32 21
  %795 = load i8, ptr %794, align 4, !tbaa !31
  %796 = load i32, ptr %35, align 4, !tbaa !9
  %797 = load i32, ptr %44, align 4, !tbaa !9
  %798 = load i32, ptr %44, align 4, !tbaa !9
  call void @libxsmm_x86_instruction_vec_compute_3reg(ptr noundef %789, i32 noundef %792, i8 noundef signext %795, i32 noundef %796, i32 noundef %797, i32 noundef %798)
  %799 = load ptr, ptr %16, align 8, !tbaa !5
  %800 = load ptr, ptr %19, align 8, !tbaa !5
  %801 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %800, i32 0, i32 15
  %802 = load i32, ptr %801, align 4, !tbaa !47
  %803 = load ptr, ptr %19, align 8, !tbaa !5
  %804 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %803, i32 0, i32 21
  %805 = load i8, ptr %804, align 4, !tbaa !31
  %806 = load i32, ptr %44, align 4, !tbaa !9
  %807 = load ptr, ptr %22, align 8, !tbaa !5
  %808 = load ptr, ptr %21, align 8, !tbaa !5
  %809 = load i32, ptr %33, align 4, !tbaa !9
  %810 = zext i32 %809 to i64
  %811 = getelementptr inbounds i32, ptr %808, i64 %810
  %812 = load i32, ptr %811, align 4, !tbaa !9
  %813 = load i32, ptr %31, align 4, !tbaa !9
  %814 = add i32 %812, %813
  %815 = zext i32 %814 to i64
  %816 = getelementptr inbounds i32, ptr %807, i64 %815
  %817 = load i32, ptr %816, align 4, !tbaa !9
  %818 = load i32, ptr %24, align 4, !tbaa !9
  %819 = sub i32 %817, %818
  %820 = load i32, ptr %28, align 4, !tbaa !9
  %821 = mul i32 %819, %820
  %822 = load i32, ptr %32, align 4, !tbaa !9
  %823 = add i32 %821, %822
  %824 = load ptr, ptr %22, align 8, !tbaa !5
  %825 = load ptr, ptr %21, align 8, !tbaa !5
  %826 = load i32, ptr %33, align 4, !tbaa !9
  %827 = zext i32 %826 to i64
  %828 = getelementptr inbounds i32, ptr %825, i64 %827
  %829 = load i32, ptr %828, align 4, !tbaa !9
  %830 = load i32, ptr %31, align 4, !tbaa !9
  %831 = add i32 %829, %830
  %832 = zext i32 %831 to i64
  %833 = getelementptr inbounds i32, ptr %824, i64 %832
  %834 = load i32, ptr %833, align 4, !tbaa !9
  %835 = load i32, ptr %24, align 4, !tbaa !9
  %836 = sub i32 %834, %835
  %837 = load i32, ptr %28, align 4, !tbaa !9
  %838 = mul i32 %836, %837
  %839 = load i32, ptr %32, align 4, !tbaa !9
  %840 = add i32 %838, %839
  call void @libxsmm_x86_instruction_vec_compute_3reg(ptr noundef %799, i32 noundef %802, i8 noundef signext %805, i32 noundef %806, i32 noundef %823, i32 noundef %840)
  br label %842

841:                                              ; preds = %758
  br label %842

842:                                              ; preds = %841, %763
  br label %843

843:                                              ; preds = %842, %706
  br label %844

844:                                              ; preds = %843, %661
  br label %845

845:                                              ; preds = %844, %637, %623, %607
  br label %846

846:                                              ; preds = %845
  %847 = load i32, ptr %31, align 4, !tbaa !9
  %848 = add i32 %847, 1
  store i32 %848, ptr %31, align 4, !tbaa !9
  br label %603, !llvm.loop !48

849:                                              ; preds = %603
  br label %850

850:                                              ; preds = %849
  %851 = load i32, ptr %32, align 4, !tbaa !9
  %852 = add i32 %851, 1
  store i32 %852, ptr %32, align 4, !tbaa !9
  br label %489, !llvm.loop !49

853:                                              ; preds = %489
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #5
  br label %854

854:                                              ; preds = %853, %481
  br label %855

855:                                              ; preds = %854
  %856 = load i32, ptr %33, align 4, !tbaa !9
  %857 = add i32 %856, 1
  store i32 %857, ptr %33, align 4, !tbaa !9
  br label %409, !llvm.loop !50

858:                                              ; preds = %409
  store i32 0, ptr %31, align 4, !tbaa !9
  br label %859

859:                                              ; preds = %1000, %858
  %860 = load i32, ptr %31, align 4, !tbaa !9
  %861 = load i32, ptr %36, align 4, !tbaa !9
  %862 = icmp ult i32 %860, %861
  br i1 %862, label %863, label %1003

863:                                              ; preds = %859
  store i32 0, ptr %32, align 4, !tbaa !9
  br label %864

864:                                              ; preds = %996, %863
  %865 = load i32, ptr %32, align 4, !tbaa !9
  %866 = load i32, ptr %28, align 4, !tbaa !9
  %867 = icmp ult i32 %865, %866
  br i1 %867, label %868, label %999

868:                                              ; preds = %864
  %869 = load i32, ptr %32, align 4, !tbaa !9
  %870 = load i32, ptr %28, align 4, !tbaa !9
  %871 = sub i32 %870, 1
  %872 = icmp eq i32 %869, %871
  br i1 %872, label %873, label %955

873:                                              ; preds = %868
  %874 = load i32, ptr %29, align 4, !tbaa !9
  %875 = icmp ne i32 %874, 0
  br i1 %875, label %876, label %955

876:                                              ; preds = %873
  %877 = load i32, ptr %37, align 4, !tbaa !9
  %878 = icmp ugt i32 %877, 0
  br i1 %878, label %879, label %914

879:                                              ; preds = %876
  %880 = load ptr, ptr %16, align 8, !tbaa !5
  %881 = load i32, ptr %37, align 4, !tbaa !9
  %882 = load ptr, ptr %18, align 8, !tbaa !5
  %883 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %882, i32 0, i32 5
  %884 = load i32, ptr %883, align 4, !tbaa !32
  %885 = load i32, ptr %24, align 4, !tbaa !9
  %886 = load i32, ptr %31, align 4, !tbaa !9
  %887 = add i32 %885, %886
  %888 = load i32, ptr %30, align 4, !tbaa !9
  %889 = mul i32 %887, %888
  %890 = load ptr, ptr %19, align 8, !tbaa !5
  %891 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %890, i32 0, i32 5
  %892 = load i32, ptr %891, align 4, !tbaa !33
  %893 = mul i32 %889, %892
  %894 = load i32, ptr %26, align 4, !tbaa !9
  %895 = load i32, ptr %32, align 4, !tbaa !9
  %896 = add i32 %894, %895
  %897 = load ptr, ptr %19, align 8, !tbaa !5
  %898 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %897, i32 0, i32 2
  %899 = load i32, ptr %898, align 8, !tbaa !21
  %900 = mul i32 %896, %899
  %901 = load ptr, ptr %19, align 8, !tbaa !5
  %902 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %901, i32 0, i32 5
  %903 = load i32, ptr %902, align 4, !tbaa !33
  %904 = mul i32 %900, %903
  %905 = add i32 %893, %904
  %906 = load ptr, ptr %19, align 8, !tbaa !5
  %907 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %906, i32 0, i32 21
  %908 = load i8, ptr %907, align 4, !tbaa !31
  %909 = load i32, ptr %31, align 4, !tbaa !9
  %910 = load i32, ptr %28, align 4, !tbaa !9
  %911 = mul i32 %909, %910
  %912 = load i32, ptr %32, align 4, !tbaa !9
  %913 = add i32 %911, %912
  call void @libxsmm_x86_instruction_vec_mask_move(ptr noundef %880, i32 noundef %881, i32 noundef %884, i32 noundef 127, i32 noundef 0, i32 noundef %905, i8 noundef signext %908, i32 noundef %913, i32 noundef 15, i32 noundef 1)
  br label %954

914:                                              ; preds = %876
  %915 = load ptr, ptr %16, align 8, !tbaa !5
  %916 = load ptr, ptr %19, align 8, !tbaa !5
  %917 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %916, i32 0, i32 0
  %918 = load i32, ptr %917, align 8, !tbaa !34
  %919 = load ptr, ptr %19, align 8, !tbaa !5
  %920 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %919, i32 0, i32 9
  %921 = load i32, ptr %920, align 4, !tbaa !35
  %922 = load ptr, ptr %18, align 8, !tbaa !5
  %923 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %922, i32 0, i32 5
  %924 = load i32, ptr %923, align 4, !tbaa !32
  %925 = load i32, ptr %24, align 4, !tbaa !9
  %926 = load i32, ptr %31, align 4, !tbaa !9
  %927 = add i32 %925, %926
  %928 = load i32, ptr %30, align 4, !tbaa !9
  %929 = mul i32 %927, %928
  %930 = load ptr, ptr %19, align 8, !tbaa !5
  %931 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %930, i32 0, i32 5
  %932 = load i32, ptr %931, align 4, !tbaa !33
  %933 = mul i32 %929, %932
  %934 = load i32, ptr %26, align 4, !tbaa !9
  %935 = load i32, ptr %32, align 4, !tbaa !9
  %936 = add i32 %934, %935
  %937 = load ptr, ptr %19, align 8, !tbaa !5
  %938 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %937, i32 0, i32 2
  %939 = load i32, ptr %938, align 8, !tbaa !21
  %940 = mul i32 %936, %939
  %941 = load ptr, ptr %19, align 8, !tbaa !5
  %942 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %941, i32 0, i32 5
  %943 = load i32, ptr %942, align 4, !tbaa !33
  %944 = mul i32 %940, %943
  %945 = add i32 %933, %944
  %946 = load ptr, ptr %19, align 8, !tbaa !5
  %947 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %946, i32 0, i32 21
  %948 = load i8, ptr %947, align 4, !tbaa !31
  %949 = load i32, ptr %31, align 4, !tbaa !9
  %950 = load i32, ptr %28, align 4, !tbaa !9
  %951 = mul i32 %949, %950
  %952 = load i32, ptr %32, align 4, !tbaa !9
  %953 = add i32 %951, %952
  call void @libxsmm_x86_instruction_vec_move(ptr noundef %915, i32 noundef %918, i32 noundef %921, i32 noundef %924, i32 noundef 127, i32 noundef 0, i32 noundef %945, i8 noundef signext %948, i32 noundef %953, i32 noundef 1, i32 noundef 0, i32 noundef 1)
  br label %954

954:                                              ; preds = %914, %879
  br label %995

955:                                              ; preds = %873, %868
  %956 = load ptr, ptr %16, align 8, !tbaa !5
  %957 = load ptr, ptr %19, align 8, !tbaa !5
  %958 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %957, i32 0, i32 0
  %959 = load i32, ptr %958, align 8, !tbaa !34
  %960 = load ptr, ptr %19, align 8, !tbaa !5
  %961 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %960, i32 0, i32 9
  %962 = load i32, ptr %961, align 4, !tbaa !35
  %963 = load ptr, ptr %18, align 8, !tbaa !5
  %964 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %963, i32 0, i32 5
  %965 = load i32, ptr %964, align 4, !tbaa !32
  %966 = load i32, ptr %24, align 4, !tbaa !9
  %967 = load i32, ptr %31, align 4, !tbaa !9
  %968 = add i32 %966, %967
  %969 = load i32, ptr %30, align 4, !tbaa !9
  %970 = mul i32 %968, %969
  %971 = load ptr, ptr %19, align 8, !tbaa !5
  %972 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %971, i32 0, i32 5
  %973 = load i32, ptr %972, align 4, !tbaa !33
  %974 = mul i32 %970, %973
  %975 = load i32, ptr %26, align 4, !tbaa !9
  %976 = load i32, ptr %32, align 4, !tbaa !9
  %977 = add i32 %975, %976
  %978 = load ptr, ptr %19, align 8, !tbaa !5
  %979 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %978, i32 0, i32 2
  %980 = load i32, ptr %979, align 8, !tbaa !21
  %981 = mul i32 %977, %980
  %982 = load ptr, ptr %19, align 8, !tbaa !5
  %983 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %982, i32 0, i32 5
  %984 = load i32, ptr %983, align 4, !tbaa !33
  %985 = mul i32 %981, %984
  %986 = add i32 %974, %985
  %987 = load ptr, ptr %19, align 8, !tbaa !5
  %988 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %987, i32 0, i32 21
  %989 = load i8, ptr %988, align 4, !tbaa !31
  %990 = load i32, ptr %31, align 4, !tbaa !9
  %991 = load i32, ptr %28, align 4, !tbaa !9
  %992 = mul i32 %990, %991
  %993 = load i32, ptr %32, align 4, !tbaa !9
  %994 = add i32 %992, %993
  call void @libxsmm_x86_instruction_vec_move(ptr noundef %956, i32 noundef %959, i32 noundef %962, i32 noundef %965, i32 noundef 127, i32 noundef 0, i32 noundef %986, i8 noundef signext %989, i32 noundef %994, i32 noundef 0, i32 noundef 0, i32 noundef 1)
  br label %995

995:                                              ; preds = %955, %954
  br label %996

996:                                              ; preds = %995
  %997 = load i32, ptr %32, align 4, !tbaa !9
  %998 = add i32 %997, 1
  store i32 %998, ptr %32, align 4, !tbaa !9
  br label %864, !llvm.loop !51

999:                                              ; preds = %864
  br label %1000

1000:                                             ; preds = %999
  %1001 = load i32, ptr %31, align 4, !tbaa !9
  %1002 = add i32 %1001, 1
  store i32 %1002, ptr %31, align 4, !tbaa !9
  br label %859, !llvm.loop !52

1003:                                             ; preds = %859
  %1004 = load i32, ptr %27, align 4, !tbaa !9
  %1005 = load i32, ptr %28, align 4, !tbaa !9
  %1006 = udiv i32 %1004, %1005
  %1007 = icmp ugt i32 %1006, 1
  br i1 %1007, label %1008, label %1107

1008:                                             ; preds = %1003
  %1009 = load ptr, ptr %16, align 8, !tbaa !5
  %1010 = load ptr, ptr %19, align 8, !tbaa !5
  %1011 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1010, i32 0, i32 16
  %1012 = load i32, ptr %1011, align 8, !tbaa !17
  %1013 = load ptr, ptr %18, align 8, !tbaa !5
  %1014 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %1013, i32 0, i32 1
  %1015 = load i32, ptr %1014, align 4, !tbaa !41
  %1016 = load i32, ptr %28, align 4, !tbaa !9
  %1017 = zext i32 %1016 to i64
  %1018 = load ptr, ptr %19, align 8, !tbaa !5
  %1019 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1018, i32 0, i32 2
  %1020 = load i32, ptr %1019, align 8, !tbaa !21
  %1021 = zext i32 %1020 to i64
  %1022 = mul nsw i64 %1017, %1021
  %1023 = load ptr, ptr %19, align 8, !tbaa !5
  %1024 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1023, i32 0, i32 3
  %1025 = load i32, ptr %1024, align 4, !tbaa !42
  %1026 = zext i32 %1025 to i64
  %1027 = mul nsw i64 %1022, %1026
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef %1009, i32 noundef %1012, i32 noundef %1015, i64 noundef %1027)
  %1028 = load ptr, ptr %16, align 8, !tbaa !5
  %1029 = load ptr, ptr %19, align 8, !tbaa !5
  %1030 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1029, i32 0, i32 16
  %1031 = load i32, ptr %1030, align 8, !tbaa !17
  %1032 = load ptr, ptr %18, align 8, !tbaa !5
  %1033 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %1032, i32 0, i32 5
  %1034 = load i32, ptr %1033, align 4, !tbaa !32
  %1035 = load i32, ptr %28, align 4, !tbaa !9
  %1036 = zext i32 %1035 to i64
  %1037 = load ptr, ptr %19, align 8, !tbaa !5
  %1038 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1037, i32 0, i32 2
  %1039 = load i32, ptr %1038, align 8, !tbaa !21
  %1040 = zext i32 %1039 to i64
  %1041 = mul nsw i64 %1036, %1040
  %1042 = load ptr, ptr %19, align 8, !tbaa !5
  %1043 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1042, i32 0, i32 5
  %1044 = load i32, ptr %1043, align 4, !tbaa !33
  %1045 = zext i32 %1044 to i64
  %1046 = mul nsw i64 %1041, %1045
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef %1028, i32 noundef %1031, i32 noundef %1034, i64 noundef %1046)
  %1047 = load ptr, ptr %16, align 8, !tbaa !5
  %1048 = load ptr, ptr %19, align 8, !tbaa !5
  %1049 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1048, i32 0, i32 18
  %1050 = load i32, ptr %1049, align 8, !tbaa !53
  %1051 = load ptr, ptr %18, align 8, !tbaa !5
  %1052 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %1051, i32 0, i32 22
  %1053 = load i32, ptr %1052, align 4, !tbaa !15
  %1054 = load i32, ptr %27, align 4, !tbaa !9
  %1055 = load i32, ptr %28, align 4, !tbaa !9
  %1056 = udiv i32 %1054, %1055
  %1057 = zext i32 %1056 to i64
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef %1047, i32 noundef %1050, i32 noundef %1053, i64 noundef %1057)
  %1058 = load ptr, ptr %16, align 8, !tbaa !5
  %1059 = load ptr, ptr %19, align 8, !tbaa !5
  %1060 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1059, i32 0, i32 19
  %1061 = load i32, ptr %1060, align 4, !tbaa !54
  %1062 = load ptr, ptr %17, align 8, !tbaa !5
  call void @libxsmm_x86_instruction_jump_back_to_label(ptr noundef %1058, i32 noundef %1061, ptr noundef %1062)
  %1063 = load ptr, ptr %16, align 8, !tbaa !5
  %1064 = load ptr, ptr %19, align 8, !tbaa !5
  %1065 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1064, i32 0, i32 17
  %1066 = load i32, ptr %1065, align 4, !tbaa !55
  %1067 = load ptr, ptr %18, align 8, !tbaa !5
  %1068 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %1067, i32 0, i32 1
  %1069 = load i32, ptr %1068, align 4, !tbaa !41
  %1070 = load i32, ptr %27, align 4, !tbaa !9
  %1071 = zext i32 %1070 to i64
  %1072 = load i32, ptr %28, align 4, !tbaa !9
  %1073 = zext i32 %1072 to i64
  %1074 = sdiv i64 %1071, %1073
  %1075 = load ptr, ptr %19, align 8, !tbaa !5
  %1076 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1075, i32 0, i32 2
  %1077 = load i32, ptr %1076, align 8, !tbaa !21
  %1078 = zext i32 %1077 to i64
  %1079 = mul nsw i64 %1074, %1078
  %1080 = load ptr, ptr %19, align 8, !tbaa !5
  %1081 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1080, i32 0, i32 3
  %1082 = load i32, ptr %1081, align 4, !tbaa !42
  %1083 = zext i32 %1082 to i64
  %1084 = mul nsw i64 %1079, %1083
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef %1063, i32 noundef %1066, i32 noundef %1069, i64 noundef %1084)
  %1085 = load ptr, ptr %16, align 8, !tbaa !5
  %1086 = load ptr, ptr %19, align 8, !tbaa !5
  %1087 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1086, i32 0, i32 17
  %1088 = load i32, ptr %1087, align 4, !tbaa !55
  %1089 = load ptr, ptr %18, align 8, !tbaa !5
  %1090 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %1089, i32 0, i32 5
  %1091 = load i32, ptr %1090, align 4, !tbaa !32
  %1092 = load i32, ptr %27, align 4, !tbaa !9
  %1093 = zext i32 %1092 to i64
  %1094 = load i32, ptr %28, align 4, !tbaa !9
  %1095 = zext i32 %1094 to i64
  %1096 = sdiv i64 %1093, %1095
  %1097 = load ptr, ptr %19, align 8, !tbaa !5
  %1098 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1097, i32 0, i32 2
  %1099 = load i32, ptr %1098, align 8, !tbaa !21
  %1100 = zext i32 %1099 to i64
  %1101 = mul nsw i64 %1096, %1100
  %1102 = load ptr, ptr %19, align 8, !tbaa !5
  %1103 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1102, i32 0, i32 5
  %1104 = load i32, ptr %1103, align 4, !tbaa !33
  %1105 = zext i32 %1104 to i64
  %1106 = mul nsw i64 %1101, %1105
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef %1085, i32 noundef %1088, i32 noundef %1091, i64 noundef %1106)
  br label %1107

1107:                                             ; preds = %1008, %1003
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #5
  ret void
}

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

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

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

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

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

declare void @libxsmm_x86_instruction_vec_mask_move(ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i8 noundef signext, i32 noundef, i32 noundef, i32 noundef) #2

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

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

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


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

@.str = external hidden unnamed_addr constant [22 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [107 x i8], align 1
@__PRETTY_FUNCTION__.libxsmm_generator_packed_spgemm_csr_bsparse_avx_avx2_avx512_kloop = external hidden unnamed_addr constant [427 x i8], align 1

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

; Function Attrs: mustprogress nocallback nofree nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #1

declare i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef) local_unnamed_addr #2

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

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

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

; Function Attrs: nounwind uwtable
define dso_local void @libxsmm_generator_packed_spgemm_csr_bsparse_avx_avx2_avx512_kloop(ptr noundef %0, ptr noundef %1, ptr nocapture noundef readonly %2, ptr noundef readonly %3, ptr noundef %4, ptr nocapture noundef readonly %5, ptr nocapture noundef readonly %6, ptr nocapture noundef readnone %7, i32 noundef %8, i32 noundef %9, i32 noundef %10, i32 noundef %11, i32 noundef %12, i32 noundef %13, i32 noundef %14) local_unnamed_addr #3 {
  %16 = alloca i8, align 1
  %17 = alloca [32 x i8], align 16
  %18 = sub i32 %9, %8
  %19 = mul i32 %18, %12
  %.not = icmp eq i32 %12, 0
  br i1 %.not, label %20, label %21

20:                                               ; preds = %15
  tail call void @__assert_fail(ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, i32 noundef 274, ptr noundef nonnull @__PRETTY_FUNCTION__.libxsmm_generator_packed_spgemm_csr_bsparse_avx_avx2_avx512_kloop) #6
  unreachable

21:                                               ; preds = %15
  %22 = udiv i32 %11, %12
  %23 = icmp ugt i32 %22, 1
  br i1 %23, label %24, label %32

24:                                               ; preds = %21
  %25 = getelementptr inbounds i8, ptr %3, i64 80
  %26 = load i32, ptr %25, align 8, !tbaa !5
  %27 = getelementptr inbounds i8, ptr %2, i64 88
  %28 = load i32, ptr %27, align 4, !tbaa !13
  tail call void @libxsmm_x86_instruction_alu_imm(ptr noundef %0, i32 noundef %26, i32 noundef %28, i64 noundef 0) #7
  tail call void @libxsmm_x86_instruction_register_jump_back_label(ptr noundef %0, ptr noundef %1) #7
  %29 = getelementptr inbounds i8, ptr %3, i64 64
  %30 = load i32, ptr %29, align 8, !tbaa !15
  %31 = load i32, ptr %27, align 4, !tbaa !13
  tail call void @libxsmm_x86_instruction_alu_imm(ptr noundef %0, i32 noundef %30, i32 noundef %31, i64 noundef 1) #7
  br label %32

32:                                               ; preds = %24, %21
  %33 = icmp ne i32 %13, 0
  br i1 %33, label %34, label %.thread

34:                                               ; preds = %32
  %35 = getelementptr inbounds i8, ptr %0, i64 28
  %36 = load i32, ptr %35, align 4, !tbaa !16
  %37 = add i32 %36, -1101
  %or.cond419 = icmp ult i32 %37, 899
  br i1 %or.cond419, label %38, label %46

38:                                               ; preds = %34
  %39 = getelementptr inbounds i8, ptr %2, i64 92
  %40 = load i32, ptr %39, align 4, !tbaa !18
  %41 = getelementptr inbounds i8, ptr %3, i64 8
  %42 = load i32, ptr %41, align 8, !tbaa !19
  %43 = sub i32 %42, %13
  %44 = getelementptr inbounds i8, ptr %4, i64 29
  %45 = tail call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef nonnull %44) #7
  tail call void @libxsmm_generator_initialize_avx512_mask(ptr noundef nonnull %0, i32 noundef %40, i32 noundef 1, i32 noundef %43, i32 noundef %45) #7
  br label %72

46:                                               ; preds = %34
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %16) #7
  %47 = tail call i32 @llvm.umin.i32(i32 %18, i32 127)
  %48 = trunc nuw nsw i32 %47 to i8
  store i8 %48, ptr %16, align 1, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %17) #7
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 16 dereferenceable(32) %17, i8 0, i64 32, i1 false)
  %49 = getelementptr inbounds i8, ptr %4, i64 29
  %50 = tail call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef nonnull %49) #7
  %51 = icmp eq i32 %50, 0
  %.not506 = icmp eq i32 %13, 1
  br i1 %51, label %.preheader432.1, label %.preheader434.1

.preheader432.1:                                  ; preds = %46
  store i64 -1, ptr %17, align 16
  %52 = getelementptr inbounds i8, ptr %17, i64 8
  br i1 %.not506, label %.preheader432.2.thread, label %.preheader432.2

.preheader432.2.thread:                           ; preds = %.preheader432.1
  store i64 0, ptr %52, align 8
  br label %.preheader432.3.thread

.preheader432.2:                                  ; preds = %.preheader432.1
  store i64 -1, ptr %52, align 8
  %53 = icmp ugt i32 %13, 2
  br i1 %53, label %.preheader432.3, label %.preheader432.3.thread

.preheader432.3.thread:                           ; preds = %.preheader432.2, %.preheader432.2.thread
  %54 = getelementptr inbounds i8, ptr %17, i64 16
  store i64 0, ptr %54, align 16
  br label %.loopexit433.loopexit

.preheader432.3:                                  ; preds = %.preheader432.2
  %55 = getelementptr inbounds i8, ptr %17, i64 16
  store i64 -1, ptr %55, align 16
  %.not535 = icmp ne i32 %13, 3
  %spec.select = sext i1 %.not535 to i64
  br label %.loopexit433.loopexit

.loopexit433.loopexit:                            ; preds = %.preheader432.3, %.preheader432.3.thread
  %.sink496 = phi i64 [ 0, %.preheader432.3.thread ], [ %spec.select, %.preheader432.3 ]
  %56 = getelementptr inbounds i8, ptr %17, i64 24
  store i64 %.sink496, ptr %56, align 8
  br label %.loopexit433

.preheader434.1:                                  ; preds = %46
  store i32 -1, ptr %17, align 16
  %57 = getelementptr inbounds i8, ptr %17, i64 4
  br i1 %.not506, label %.preheader434.2.thread, label %.preheader434.2

.preheader434.2.thread:                           ; preds = %.preheader434.1
  store i32 0, ptr %57, align 4
  br label %.preheader434.3.thread

.preheader434.2:                                  ; preds = %.preheader434.1
  store i32 -1, ptr %57, align 4
  %58 = icmp ugt i32 %13, 2
  br i1 %58, label %.preheader434.3, label %.preheader434.3.thread

.preheader434.3.thread:                           ; preds = %.preheader434.2, %.preheader434.2.thread
  %59 = getelementptr inbounds i8, ptr %17, i64 8
  store i32 0, ptr %59, align 8
  br label %.preheader434.4.thread

.preheader434.3:                                  ; preds = %.preheader434.2
  %60 = getelementptr inbounds i8, ptr %17, i64 8
  store i32 -1, ptr %60, align 8
  %.not532 = icmp eq i32 %13, 3
  br i1 %.not532, label %.preheader434.4.thread, label %.preheader434.4

.preheader434.4.thread:                           ; preds = %.preheader434.3, %.preheader434.3.thread
  %61 = getelementptr inbounds i8, ptr %17, i64 12
  store i32 0, ptr %61, align 4
  br label %.preheader434.5.thread

.preheader434.4:                                  ; preds = %.preheader434.3
  %62 = getelementptr inbounds i8, ptr %17, i64 12
  store i32 -1, ptr %62, align 4
  %63 = icmp ugt i32 %13, 4
  br i1 %63, label %.preheader434.5, label %.preheader434.5.thread

.preheader434.5.thread:                           ; preds = %.preheader434.4, %.preheader434.4.thread
  %64 = getelementptr inbounds i8, ptr %17, i64 16
  store i32 0, ptr %64, align 16
  br label %.preheader434.6.thread

.preheader434.5:                                  ; preds = %.preheader434.4
  %65 = getelementptr inbounds i8, ptr %17, i64 16
  store i32 -1, ptr %65, align 16
  %.not533 = icmp eq i32 %13, 5
  br i1 %.not533, label %.preheader434.6.thread, label %.preheader434.6

.preheader434.6.thread:                           ; preds = %.preheader434.5, %.preheader434.5.thread
  %66 = getelementptr inbounds i8, ptr %17, i64 20
  store i32 0, ptr %66, align 4
  br label %.preheader434.7.thread

.preheader434.6:                                  ; preds = %.preheader434.5
  %67 = getelementptr inbounds i8, ptr %17, i64 20
  store i32 -1, ptr %67, align 4
  %68 = icmp ugt i32 %13, 6
  br i1 %68, label %.preheader434.7, label %.preheader434.7.thread

.preheader434.7.thread:                           ; preds = %.preheader434.6, %.preheader434.6.thread
  %69 = getelementptr inbounds i8, ptr %17, i64 24
  store i32 0, ptr %69, align 8
  br label %.loopexit433.loopexit469

.preheader434.7:                                  ; preds = %.preheader434.6
  %70 = getelementptr inbounds i8, ptr %17, i64 24
  store i32 -1, ptr %70, align 8
  %.not534 = icmp ne i32 %13, 7
  %spec.select531 = sext i1 %.not534 to i32
  br label %.loopexit433.loopexit469

.loopexit433.loopexit469:                         ; preds = %.preheader434.7, %.preheader434.7.thread
  %.sink504 = phi i32 [ 0, %.preheader434.7.thread ], [ %spec.select531, %.preheader434.7 ]
  %71 = getelementptr inbounds i8, ptr %17, i64 28
  store i32 %.sink504, ptr %71, align 4
  br label %.loopexit433

.loopexit433:                                     ; preds = %.loopexit433.loopexit469, %.loopexit433.loopexit
  %.0394 = phi i32 [ 1879384109, %.loopexit433.loopexit ], [ 1879384108, %.loopexit433.loopexit469 ]
  call void @libxsmm_x86_instruction_full_vec_load_of_constants(ptr noundef nonnull %0, ptr noundef nonnull %17, ptr noundef nonnull %16, i8 noundef signext 121, i32 noundef 15) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %17) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %16) #7
  br label %72

72:                                               ; preds = %38, %.loopexit433
  %.1395 = phi i32 [ 0, %38 ], [ %.0394, %.loopexit433 ]
  %.not460 = icmp eq i32 %9, %8
  br i1 %.not460, label %.preheader430, label %.preheader431.lr.ph

.thread:                                          ; preds = %32
  %.not460516 = icmp eq i32 %9, %8
  br i1 %.not460516, label %.preheader430, label %.preheader431.lr.ph.thread

.preheader431.lr.ph.thread:                       ; preds = %.thread
  %73 = getelementptr inbounds i8, ptr %4, i64 24
  %74 = getelementptr inbounds i8, ptr %3, i64 52
  %75 = getelementptr inbounds i8, ptr %3, i64 84
  %76 = getelementptr inbounds i8, ptr %3, i64 36
  %77 = getelementptr inbounds i8, ptr %2, i64 20
  %78 = getelementptr inbounds i8, ptr %3, i64 20
  %79 = getelementptr inbounds i8, ptr %3, i64 8
  br label %.preheader431.preheader

.preheader431.lr.ph:                              ; preds = %72
  %80 = getelementptr inbounds i8, ptr %4, i64 24
  %81 = getelementptr inbounds i8, ptr %3, i64 52
  %82 = getelementptr inbounds i8, ptr %3, i64 84
  %83 = add i32 %12, -1
  %84 = getelementptr inbounds i8, ptr %3, i64 36
  %85 = getelementptr inbounds i8, ptr %2, i64 20
  %86 = getelementptr inbounds i8, ptr %3, i64 20
  %87 = getelementptr inbounds i8, ptr %3, i64 8
  br i1 %33, label %.preheader431.lr.ph.split.us, label %.preheader431.preheader

.preheader431.preheader:                          ; preds = %.preheader431.lr.ph.thread, %.preheader431.lr.ph
  %88 = phi ptr [ %79, %.preheader431.lr.ph.thread ], [ %87, %.preheader431.lr.ph ]
  %89 = phi ptr [ %78, %.preheader431.lr.ph.thread ], [ %86, %.preheader431.lr.ph ]
  %90 = phi ptr [ %77, %.preheader431.lr.ph.thread ], [ %85, %.preheader431.lr.ph ]
  %91 = phi ptr [ %76, %.preheader431.lr.ph.thread ], [ %84, %.preheader431.lr.ph ]
  %92 = phi ptr [ %75, %.preheader431.lr.ph.thread ], [ %82, %.preheader431.lr.ph ]
  %93 = phi ptr [ %74, %.preheader431.lr.ph.thread ], [ %81, %.preheader431.lr.ph ]
  %94 = phi ptr [ %73, %.preheader431.lr.ph.thread ], [ %80, %.preheader431.lr.ph ]
  %.1395517524 = phi i32 [ 0, %.preheader431.lr.ph.thread ], [ %.1395, %.preheader431.lr.ph ]
  br label %.preheader431

.preheader431.lr.ph.split.us:                     ; preds = %.preheader431.lr.ph
  %.not418 = icmp eq i32 %.1395, 0
  %95 = add i32 %83, %10
  br i1 %.not418, label %.preheader431.us.us, label %.preheader431.us

.preheader431.us.us:                              ; preds = %.preheader431.lr.ph.split.us, %.split.us440.split.us.us
  %.0439.us.us = phi i32 [ %129, %.split.us440.split.us.us ], [ 0, %.preheader431.lr.ph.split.us ]
  %96 = mul i32 %.0439.us.us, %12
  %97 = add i32 %.0439.us.us, %8
  %98 = mul i32 %97, %14
  %99 = add i32 %83, %96
  br label %100

100:                                              ; preds = %127, %.preheader431.us.us
  %.0388438.us441.us.us = phi i32 [ 0, %.preheader431.us.us ], [ %128, %127 ]
  %101 = load i32, ptr %80, align 1, !tbaa !21
  %102 = and i32 %101, 4
  %.not417.us442.us.us = icmp eq i32 %102, 0
  br i1 %.not417.us442.us.us, label %107, label %103

103:                                              ; preds = %100
  %104 = load i32, ptr %81, align 4, !tbaa !24
  %105 = load i8, ptr %82, align 4, !tbaa !25
  %106 = add i32 %.0388438.us441.us.us, %96
  call void @libxsmm_x86_instruction_vec_compute_3reg(ptr noundef %0, i32 noundef %104, i8 noundef signext %105, i32 noundef %106, i32 noundef %106, i32 noundef %106) #7
  br label %127

107:                                              ; preds = %100
  %108 = icmp eq i32 %.0388438.us441.us.us, %83
  %109 = load i32, ptr %3, align 8, !tbaa !26
  %110 = load i32, ptr %84, align 4, !tbaa !27
  %111 = load i32, ptr %85, align 4, !tbaa !28
  %112 = load i32, ptr %86, align 4, !tbaa !29
  br i1 %108, label %121, label %113

113:                                              ; preds = %107
  %114 = add i32 %.0388438.us441.us.us, %10
  %115 = load i32, ptr %87, align 8, !tbaa !19
  %116 = mul i32 %115, %114
  %117 = add i32 %116, %98
  %118 = mul i32 %117, %112
  %119 = load i8, ptr %82, align 4, !tbaa !25
  %120 = add i32 %.0388438.us441.us.us, %96
  call void @libxsmm_x86_instruction_vec_move(ptr noundef %0, i32 noundef %109, i32 noundef %110, i32 noundef %111, i32 noundef 127, i32 noundef 0, i32 noundef %118, i8 noundef signext %119, i32 noundef %120, i32 noundef 0, i32 noundef 1, i32 noundef 0) #7
  br label %127

121:                                              ; preds = %107
  %122 = load i32, ptr %87, align 8, !tbaa !19
  %123 = mul i32 %122, %95
  %124 = add i32 %123, %98
  %125 = mul i32 %124, %112
  %126 = load i8, ptr %82, align 4, !tbaa !25
  call void @libxsmm_x86_instruction_vec_move(ptr noundef %0, i32 noundef %109, i32 noundef %110, i32 noundef %111, i32 noundef 127, i32 noundef 0, i32 noundef %125, i8 noundef signext %126, i32 noundef %99, i32 noundef 1, i32 noundef 1, i32 noundef 0) #7
  br label %127

127:                                              ; preds = %121, %113, %103
  %128 = add nuw i32 %.0388438.us441.us.us, 1
  %exitcond477.not = icmp eq i32 %128, %12
  br i1 %exitcond477.not, label %.split.us440.split.us.us, label %100, !llvm.loop !30

.split.us440.split.us.us:                         ; preds = %127
  %129 = add nuw i32 %.0439.us.us, 1
  %exitcond478.not = icmp eq i32 %129, %18
  br i1 %exitcond478.not, label %.preheader430, label %.preheader431.us.us, !llvm.loop !32

.preheader431.us:                                 ; preds = %.preheader431.lr.ph.split.us, %.split.us440.split
  %.0439.us = phi i32 [ %134, %.split.us440.split ], [ 0, %.preheader431.lr.ph.split.us ]
  %130 = mul i32 %.0439.us, %12
  %131 = add i32 %.0439.us, %8
  %132 = mul i32 %131, %14
  %133 = add i32 %83, %130
  br label %135

.split.us440.split:                               ; preds = %164
  %134 = add nuw i32 %.0439.us, 1
  %exitcond475.not = icmp eq i32 %134, %18
  br i1 %exitcond475.not, label %.preheader430, label %.preheader431.us, !llvm.loop !32

135:                                              ; preds = %.preheader431.us, %164
  %.0388438.us441 = phi i32 [ 0, %.preheader431.us ], [ %165, %164 ]
  %136 = load i32, ptr %80, align 1, !tbaa !21
  %137 = and i32 %136, 4
  %.not417.us442 = icmp eq i32 %137, 0
  br i1 %.not417.us442, label %142, label %138

138:                                              ; preds = %135
  %139 = load i32, ptr %81, align 4, !tbaa !24
  %140 = load i8, ptr %82, align 4, !tbaa !25
  %141 = add i32 %.0388438.us441, %130
  call void @libxsmm_x86_instruction_vec_compute_3reg(ptr noundef %0, i32 noundef %139, i8 noundef signext %140, i32 noundef %141, i32 noundef %141, i32 noundef %141) #7
  br label %164

142:                                              ; preds = %135
  %143 = icmp eq i32 %.0388438.us441, %83
  br i1 %143, label %156, label %144

144:                                              ; preds = %142
  %145 = load i32, ptr %3, align 8, !tbaa !26
  %146 = load i32, ptr %84, align 4, !tbaa !27
  %147 = load i32, ptr %85, align 4, !tbaa !28
  %148 = load i32, ptr %86, align 4, !tbaa !29
  %149 = add i32 %.0388438.us441, %10
  %150 = load i32, ptr %87, align 8, !tbaa !19
  %151 = mul i32 %150, %149
  %152 = add i32 %151, %132
  %153 = mul i32 %152, %148
  %154 = load i8, ptr %82, align 4, !tbaa !25
  %155 = add i32 %.0388438.us441, %130
  call void @libxsmm_x86_instruction_vec_move(ptr noundef %0, i32 noundef %145, i32 noundef %146, i32 noundef %147, i32 noundef 127, i32 noundef 0, i32 noundef %153, i8 noundef signext %154, i32 noundef %155, i32 noundef 0, i32 noundef 1, i32 noundef 0) #7
  br label %164

156:                                              ; preds = %142
  %157 = load i32, ptr %85, align 4, !tbaa !28
  %158 = load i32, ptr %86, align 4, !tbaa !29
  %159 = load i32, ptr %87, align 8, !tbaa !19
  %160 = mul i32 %159, %95
  %161 = add i32 %160, %132
  %162 = mul i32 %161, %158
  %163 = load i8, ptr %82, align 4, !tbaa !25
  call void @libxsmm_x86_instruction_vec_mask_move(ptr noundef %0, i32 noundef %.1395, i32 noundef %157, i32 noundef 127, i32 noundef 0, i32 noundef %162, i8 noundef signext %163, i32 noundef %133, i32 noundef 15, i32 noundef 0) #7
  br label %164

164:                                              ; preds = %156, %144, %138
  %165 = add nuw i32 %.0388438.us441, 1
  %exitcond474.not = icmp eq i32 %165, %12
  br i1 %exitcond474.not, label %.split.us440.split, label %135, !llvm.loop !30

.preheader431:                                    ; preds = %.preheader431.preheader, %.split.us
  %.0439 = phi i32 [ %190, %.split.us ], [ 0, %.preheader431.preheader ]
  %166 = mul i32 %.0439, %12
  %167 = add i32 %.0439, %8
  %168 = mul i32 %167, %14
  br label %169

169:                                              ; preds = %188, %.preheader431
  %.0388438.us = phi i32 [ 0, %.preheader431 ], [ %189, %188 ]
  %170 = load i32, ptr %94, align 1, !tbaa !21
  %171 = and i32 %170, 4
  %.not417.us = icmp eq i32 %171, 0
  br i1 %.not417.us, label %176, label %172

172:                                              ; preds = %169
  %173 = load i32, ptr %93, align 4, !tbaa !24
  %174 = load i8, ptr %92, align 4, !tbaa !25
  %175 = add i32 %.0388438.us, %166
  call void @libxsmm_x86_instruction_vec_compute_3reg(ptr noundef %0, i32 noundef %173, i8 noundef signext %174, i32 noundef %175, i32 noundef %175, i32 noundef %175) #7
  br label %188

176:                                              ; preds = %169
  %177 = load i32, ptr %3, align 8, !tbaa !26
  %178 = load i32, ptr %91, align 4, !tbaa !27
  %179 = load i32, ptr %90, align 4, !tbaa !28
  %180 = load i32, ptr %89, align 4, !tbaa !29
  %181 = add i32 %.0388438.us, %10
  %182 = load i32, ptr %88, align 8, !tbaa !19
  %183 = mul i32 %182, %181
  %184 = add i32 %183, %168
  %185 = mul i32 %184, %180
  %186 = load i8, ptr %92, align 4, !tbaa !25
  %187 = add i32 %.0388438.us, %166
  call void @libxsmm_x86_instruction_vec_move(ptr noundef %0, i32 noundef %177, i32 noundef %178, i32 noundef %179, i32 noundef 127, i32 noundef 0, i32 noundef %185, i8 noundef signext %186, i32 noundef %187, i32 noundef 0, i32 noundef 1, i32 noundef 0) #7
  br label %188

188:                                              ; preds = %176, %172
  %189 = add nuw i32 %.0388438.us, 1
  %exitcond.not = icmp eq i32 %189, %12
  br i1 %exitcond.not, label %.split.us, label %169, !llvm.loop !30

.split.us:                                        ; preds = %188
  %190 = add nuw i32 %.0439, 1
  %exitcond472.not = icmp eq i32 %190, %18
  br i1 %exitcond472.not, label %.preheader430, label %.preheader431, !llvm.loop !32

.preheader430:                                    ; preds = %.split.us, %.split.us440.split, %.split.us440.split.us.us, %.thread, %72
  %.not460520 = phi i1 [ true, %.thread ], [ true, %72 ], [ false, %.split.us440.split.us.us ], [ false, %.split.us440.split ], [ false, %.split.us ]
  %.1395518 = phi i32 [ 0, %.thread ], [ %.1395, %72 ], [ %.1395, %.split.us440.split.us.us ], [ %.1395, %.split.us440.split ], [ %.1395517524, %.split.us ]
  %191 = getelementptr inbounds i8, ptr %4, i64 8
  %192 = load i32, ptr %191, align 1, !tbaa !33
  %.not461 = icmp eq i32 %192, 0
  br i1 %.not461, label %.preheader429, label %.lr.ph452

.lr.ph452:                                        ; preds = %.preheader430
  %193 = getelementptr inbounds i8, ptr %4, i64 4
  %.not414 = icmp eq i32 %.1395518, 0
  %194 = select i1 %.not414, i32 15, i32 14
  %195 = add i32 %12, -1
  %196 = getelementptr inbounds i8, ptr %3, i64 24
  %197 = getelementptr inbounds i8, ptr %2, i64 4
  %198 = getelementptr inbounds i8, ptr %3, i64 12
  %199 = getelementptr inbounds i8, ptr %3, i64 8
  %200 = getelementptr inbounds i8, ptr %3, i64 84
  %201 = getelementptr inbounds i8, ptr %0, i64 28
  %202 = getelementptr inbounds i8, ptr %3, i64 28
  %203 = getelementptr inbounds i8, ptr %2, i64 12
  %204 = getelementptr inbounds i8, ptr %3, i64 56
  %205 = getelementptr inbounds i8, ptr %3, i64 60
  %umax482 = call i32 @llvm.umax.i32(i32 %12, i32 1)
  %206 = add i32 %195, %10
  %207 = add i32 %195, %10
  br label %265

.preheader429:                                    ; preds = %.loopexit, %.preheader430
  br i1 %.not460520, label %._crit_edge456, label %.preheader.lr.ph

.preheader.lr.ph:                                 ; preds = %.preheader429
  %208 = add i32 %12, -1
  %209 = getelementptr inbounds i8, ptr %3, i64 36
  %210 = getelementptr inbounds i8, ptr %2, i64 20
  %211 = getelementptr inbounds i8, ptr %3, i64 20
  %212 = getelementptr inbounds i8, ptr %3, i64 8
  %213 = getelementptr inbounds i8, ptr %3, i64 84
  %.not412 = icmp eq i32 %.1395518, 0
  %umax490 = call i32 @llvm.umax.i32(i32 %12, i32 1)
  br i1 %33, label %.preheader.us.preheader, label %.preheader

.preheader.us.preheader:                          ; preds = %.preheader.lr.ph
  %214 = add i32 %208, %10
  %215 = add i32 %208, %10
  br label %.preheader.us

.preheader.us:                                    ; preds = %.preheader.us.preheader, %.split.us457
  %.3455.us = phi i32 [ %220, %.split.us457 ], [ 0, %.preheader.us.preheader ]
  %216 = add i32 %.3455.us, %8
  %217 = mul i32 %216, %14
  %218 = mul i32 %.3455.us, %12
  %219 = add i32 %208, %218
  br i1 %.not412, label %.preheader.split.us459.split.us, label %.preheader.split.us459.split

.split.us457:                                     ; preds = %242, %263
  %220 = add nuw i32 %.3455.us, 1
  %exitcond493.not = icmp eq i32 %220, %18
  br i1 %exitcond493.not, label %._crit_edge456, label %.preheader.us, !llvm.loop !34

.preheader.split.us459.split:                     ; preds = %.preheader.us, %242
  %.2390453.us458 = phi i32 [ %243, %242 ], [ 0, %.preheader.us ]
  %221 = icmp eq i32 %.2390453.us458, %208
  br i1 %221, label %234, label %222

222:                                              ; preds = %.preheader.split.us459.split
  %223 = load i32, ptr %3, align 8, !tbaa !26
  %224 = load i32, ptr %209, align 4, !tbaa !27
  %225 = load i32, ptr %210, align 4, !tbaa !28
  %226 = load i32, ptr %211, align 4, !tbaa !29
  %227 = add i32 %.2390453.us458, %10
  %228 = load i32, ptr %212, align 8, !tbaa !19
  %229 = mul i32 %228, %227
  %230 = add i32 %229, %217
  %231 = mul i32 %230, %226
  %232 = load i8, ptr %213, align 4, !tbaa !25
  %233 = add i32 %.2390453.us458, %218
  call void @libxsmm_x86_instruction_vec_move(ptr noundef %0, i32 noundef %223, i32 noundef %224, i32 noundef %225, i32 noundef 127, i32 noundef 0, i32 noundef %231, i8 noundef signext %232, i32 noundef %233, i32 noundef 0, i32 noundef 0, i32 noundef 1) #7
  br label %242

234:                                              ; preds = %.preheader.split.us459.split
  %235 = load i32, ptr %210, align 4, !tbaa !28
  %236 = load i32, ptr %211, align 4, !tbaa !29
  %237 = load i32, ptr %212, align 8, !tbaa !19
  %238 = mul i32 %237, %214
  %239 = add i32 %238, %217
  %240 = mul i32 %239, %236
  %241 = load i8, ptr %213, align 4, !tbaa !25
  call void @libxsmm_x86_instruction_vec_mask_move(ptr noundef %0, i32 noundef %.1395518, i32 noundef %235, i32 noundef 127, i32 noundef 0, i32 noundef %240, i8 noundef signext %241, i32 noundef %219, i32 noundef 15, i32 noundef 1) #7
  br label %242

242:                                              ; preds = %234, %222
  %243 = add nuw i32 %.2390453.us458, 1
  %exitcond491.not = icmp eq i32 %243, %umax490
  br i1 %exitcond491.not, label %.split.us457, label %.preheader.split.us459.split, !llvm.loop !35

.preheader.split.us459.split.us:                  ; preds = %.preheader.us, %263
  %.2390453.us458.us = phi i32 [ %264, %263 ], [ 0, %.preheader.us ]
  %244 = icmp eq i32 %.2390453.us458.us, %208
  %245 = load i32, ptr %3, align 8, !tbaa !26
  %246 = load i32, ptr %209, align 4, !tbaa !27
  %247 = load i32, ptr %210, align 4, !tbaa !28
  %248 = load i32, ptr %211, align 4, !tbaa !29
  br i1 %244, label %257, label %249

249:                                              ; preds = %.preheader.split.us459.split.us
  %250 = add i32 %.2390453.us458.us, %10
  %251 = load i32, ptr %212, align 8, !tbaa !19
  %252 = mul i32 %251, %250
  %253 = add i32 %252, %217
  %254 = mul i32 %253, %248
  %255 = load i8, ptr %213, align 4, !tbaa !25
  %256 = add i32 %.2390453.us458.us, %218
  call void @libxsmm_x86_instruction_vec_move(ptr noundef %0, i32 noundef %245, i32 noundef %246, i32 noundef %247, i32 noundef 127, i32 noundef 0, i32 noundef %254, i8 noundef signext %255, i32 noundef %256, i32 noundef 0, i32 noundef 0, i32 noundef 1) #7
  br label %263

257:                                              ; preds = %.preheader.split.us459.split.us
  %258 = load i32, ptr %212, align 8, !tbaa !19
  %259 = mul i32 %258, %215
  %260 = add i32 %259, %217
  %261 = mul i32 %260, %248
  %262 = load i8, ptr %213, align 4, !tbaa !25
  call void @libxsmm_x86_instruction_vec_move(ptr noundef %0, i32 noundef %245, i32 noundef %246, i32 noundef %247, i32 noundef 127, i32 noundef 0, i32 noundef %261, i8 noundef signext %262, i32 noundef %219, i32 noundef 1, i32 noundef 0, i32 noundef 1) #7
  br label %263

263:                                              ; preds = %257, %249
  %264 = add nuw i32 %.2390453.us458.us, 1
  %exitcond492.not = icmp eq i32 %264, %umax490
  br i1 %exitcond492.not, label %.split.us457, label %.preheader.split.us459.split.us, !llvm.loop !35

265:                                              ; preds = %.lr.ph452, %.loopexit
  %266 = phi i32 [ %192, %.lr.ph452 ], [ %397, %.loopexit ]
  %indvars.iv484 = phi i64 [ 0, %.lr.ph452 ], [ %indvars.iv.next485, %.loopexit ]
  %indvars.iv.next485 = add nuw nsw i64 %indvars.iv484, 1
  %267 = getelementptr inbounds i32, ptr %5, i64 %indvars.iv.next485
  %268 = load i32, ptr %267, align 4, !tbaa !36
  %269 = getelementptr inbounds i32, ptr %5, i64 %indvars.iv484
  %270 = load i32, ptr %269, align 4, !tbaa !36
  %271 = sub i32 %268, %270
  %.not462 = icmp eq i32 %268, %270
  br i1 %.not462, label %.loopexit, label %.lr.ph

.lr.ph:                                           ; preds = %265
  %272 = load i32, ptr %193, align 1, !tbaa !37
  %wide.trip.count = zext i32 %271 to i64
  %xtraiter = and i64 %wide.trip.count, 1
  %273 = icmp eq i32 %271, 1
  br i1 %273, label %._crit_edge.unr-lcssa, label %.lr.ph.new

.lr.ph.new:                                       ; preds = %.lr.ph
  %unroll_iter = and i64 %wide.trip.count, 4294967294
  br label %274

274:                                              ; preds = %274, %.lr.ph.new
  %indvars.iv = phi i64 [ 0, %.lr.ph.new ], [ %indvars.iv.next.1, %274 ]
  %.0396444 = phi i32 [ 0, %.lr.ph.new ], [ %.1397.1, %274 ]
  %niter = phi i64 [ 0, %.lr.ph.new ], [ %niter.next.1, %274 ]
  %275 = trunc nuw i64 %indvars.iv to i32
  %276 = add i32 %270, %275
  %277 = zext i32 %276 to i64
  %278 = getelementptr inbounds i32, ptr %6, i64 %277
  %279 = load i32, ptr %278, align 4, !tbaa !36
  %280 = icmp ult i32 %279, %272
  %.not416 = icmp uge i32 %279, %8
  %or.cond420.not428 = and i1 %.not416, %280
  %281 = icmp ult i32 %279, %9
  %or.cond421 = and i1 %281, %or.cond420.not428
  %282 = trunc i64 %indvars.iv to i32
  %283 = or disjoint i32 %282, 1
  %284 = add i32 %270, %283
  %285 = zext i32 %284 to i64
  %286 = getelementptr inbounds i32, ptr %6, i64 %285
  %287 = load i32, ptr %286, align 4, !tbaa !36
  %288 = icmp ult i32 %287, %272
  %.not416.1 = icmp uge i32 %287, %8
  %or.cond420.not428.1 = and i1 %.not416.1, %288
  %289 = icmp ult i32 %287, %9
  %or.cond421.1 = and i1 %289, %or.cond420.not428.1
  %290 = select i1 %or.cond421.1, i1 true, i1 %or.cond421
  %.1397.1 = select i1 %290, i32 1, i32 %.0396444
  %indvars.iv.next.1 = add nuw nsw i64 %indvars.iv, 2
  %niter.next.1 = add i64 %niter, 2
  %niter.ncmp.1 = icmp eq i64 %niter.next.1, %unroll_iter
  br i1 %niter.ncmp.1, label %._crit_edge.unr-lcssa, label %274, !llvm.loop !38

._crit_edge.unr-lcssa:                            ; preds = %274, %.lr.ph
  %.1397.lcssa.ph = phi i32 [ poison, %.lr.ph ], [ %.1397.1, %274 ]
  %indvars.iv.unr = phi i64 [ 0, %.lr.ph ], [ %indvars.iv.next.1, %274 ]
  %.0396444.unr = phi i32 [ 0, %.lr.ph ], [ %.1397.1, %274 ]
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %._crit_edge, label %._crit_edge.epilog-lcssa

._crit_edge.epilog-lcssa:                         ; preds = %._crit_edge.unr-lcssa
  %291 = trunc nuw i64 %indvars.iv.unr to i32
  %292 = add i32 %270, %291
  %293 = zext i32 %292 to i64
  %294 = getelementptr inbounds i32, ptr %6, i64 %293
  %295 = load i32, ptr %294, align 4, !tbaa !36
  %296 = icmp ult i32 %295, %272
  %.not416.epil = icmp uge i32 %295, %8
  %or.cond420.not428.epil = and i1 %.not416.epil, %296
  %297 = icmp ult i32 %295, %9
  %or.cond421.epil = and i1 %297, %or.cond420.not428.epil
  %.1397.epil = select i1 %or.cond421.epil, i32 1, i32 %.0396444.unr
  br label %._crit_edge

._crit_edge:                                      ; preds = %._crit_edge.unr-lcssa, %._crit_edge.epilog-lcssa
  %.1397.lcssa = phi i32 [ %.1397.lcssa.ph, %._crit_edge.unr-lcssa ], [ %.1397.epil, %._crit_edge.epilog-lcssa ]
  %.not413 = icmp eq i32 %.1397.lcssa, 0
  br i1 %.not413, label %.loopexit, label %298

298:                                              ; preds = %._crit_edge
  %299 = trunc nuw i64 %indvars.iv484 to i32
  %300 = mul i32 %299, %14
  br label %301

301:                                              ; preds = %298, %._crit_edge449
  %.1389450 = phi i32 [ 0, %298 ], [ %396, %._crit_edge449 ]
  %302 = icmp eq i32 %.1389450, %195
  %or.cond3 = and i1 %33, %302
  br i1 %or.cond3, label %303, label %322

303:                                              ; preds = %301
  br i1 %.not414, label %312, label %304

304:                                              ; preds = %303
  %305 = load i32, ptr %197, align 4, !tbaa !39
  %306 = load i32, ptr %198, align 4, !tbaa !40
  %307 = load i32, ptr %199, align 8, !tbaa !19
  %308 = mul i32 %307, %206
  %309 = add i32 %308, %300
  %310 = mul i32 %309, %306
  %311 = load i8, ptr %200, align 4, !tbaa !25
  call void @libxsmm_x86_instruction_vec_mask_move(ptr noundef %0, i32 noundef %.1395518, i32 noundef %305, i32 noundef 127, i32 noundef 0, i32 noundef %310, i8 noundef signext %311, i32 noundef %19, i32 noundef 15, i32 noundef 0) #7
  br label %333

312:                                              ; preds = %303
  %313 = load i32, ptr %3, align 8, !tbaa !26
  %314 = load i32, ptr %196, align 8, !tbaa !41
  %315 = load i32, ptr %197, align 4, !tbaa !39
  %316 = load i32, ptr %198, align 4, !tbaa !40
  %317 = load i32, ptr %199, align 8, !tbaa !19
  %318 = mul i32 %317, %207
  %319 = add i32 %318, %300
  %320 = mul i32 %319, %316
  %321 = load i8, ptr %200, align 4, !tbaa !25
  call void @libxsmm_x86_instruction_vec_move(ptr noundef %0, i32 noundef %313, i32 noundef %314, i32 noundef %315, i32 noundef 127, i32 noundef 0, i32 noundef %320, i8 noundef signext %321, i32 noundef %19, i32 noundef 1, i32 noundef 1, i32 noundef 0) #7
  br label %333

322:                                              ; preds = %301
  %323 = load i32, ptr %3, align 8, !tbaa !26
  %324 = load i32, ptr %196, align 8, !tbaa !41
  %325 = load i32, ptr %197, align 4, !tbaa !39
  %326 = load i32, ptr %198, align 4, !tbaa !40
  %327 = add i32 %.1389450, %10
  %328 = load i32, ptr %199, align 8, !tbaa !19
  %329 = mul i32 %328, %327
  %330 = add i32 %329, %300
  %331 = mul i32 %330, %326
  %332 = load i8, ptr %200, align 4, !tbaa !25
  call void @libxsmm_x86_instruction_vec_move(ptr noundef %0, i32 noundef %323, i32 noundef %324, i32 noundef %325, i32 noundef 127, i32 noundef 0, i32 noundef %331, i8 noundef signext %332, i32 noundef %19, i32 noundef 0, i32 noundef 1, i32 noundef 0) #7
  br label %333

333:                                              ; preds = %304, %312, %322
  br i1 %.not462, label %._crit_edge449, label %.lr.ph448

.lr.ph448:                                        ; preds = %333, %394
  %.2446 = phi i32 [ %395, %394 ], [ 0, %333 ]
  %334 = load i32, ptr %269, align 4, !tbaa !36
  %335 = add i32 %334, %.2446
  %336 = zext i32 %335 to i64
  %337 = getelementptr inbounds i32, ptr %6, i64 %336
  %338 = load i32, ptr %337, align 4, !tbaa !36
  %339 = load i32, ptr %193, align 1, !tbaa !37
  %340 = icmp ult i32 %338, %339
  %.not415 = icmp uge i32 %338, %8
  %or.cond422.not426 = and i1 %.not415, %340
  %341 = icmp ult i32 %338, %9
  %or.cond423 = and i1 %341, %or.cond422.not426
  br i1 %or.cond423, label %342, label %394

342:                                              ; preds = %.lr.ph448
  %343 = load i32, ptr %201, align 4, !tbaa !16
  %344 = add i32 %343, -1101
  %or.cond424 = icmp ult i32 %344, 899
  br i1 %or.cond424, label %345, label %354

345:                                              ; preds = %342
  %346 = load i32, ptr %204, align 8, !tbaa !42
  %347 = load i8, ptr %200, align 4, !tbaa !25
  %348 = load i32, ptr %203, align 4, !tbaa !43
  %349 = load i32, ptr %198, align 4, !tbaa !40
  %350 = mul i32 %349, %335
  %351 = sub i32 %338, %8
  %352 = mul i32 %351, %12
  %353 = add i32 %352, %.1389450
  call void @libxsmm_x86_instruction_vec_compute_mem_2reg(ptr noundef nonnull %0, i32 noundef %346, i8 noundef signext %347, i32 noundef %348, i32 noundef 127, i32 noundef 0, i32 noundef %350, i32 noundef 1, i32 noundef %19, i32 noundef %353) #7
  br label %394

354:                                              ; preds = %342
  %355 = icmp ugt i32 %343, 1005
  br i1 %355, label %356, label %373

356:                                              ; preds = %354
  %357 = load i32, ptr %3, align 8, !tbaa !26
  %358 = load i32, ptr %202, align 4, !tbaa !44
  %359 = load i32, ptr %203, align 4, !tbaa !43
  %360 = load i32, ptr %198, align 4, !tbaa !40
  %361 = mul i32 %360, %335
  %362 = load i8, ptr %200, align 4, !tbaa !25
  call void @libxsmm_x86_instruction_vec_move(ptr noundef nonnull %0, i32 noundef %357, i32 noundef %358, i32 noundef %359, i32 noundef 127, i32 noundef 0, i32 noundef %361, i8 noundef signext %362, i32 noundef %194, i32 noundef 0, i32 noundef 1, i32 noundef 0) #7
  %363 = load i32, ptr %204, align 8, !tbaa !42
  %364 = load i8, ptr %200, align 4, !tbaa !25
  %365 = load i32, ptr %269, align 4, !tbaa !36
  %366 = add i32 %365, %.2446
  %367 = zext i32 %366 to i64
  %368 = getelementptr inbounds i32, ptr %6, i64 %367
  %369 = load i32, ptr %368, align 4, !tbaa !36
  %370 = sub i32 %369, %8
  %371 = mul i32 %370, %12
  %372 = add i32 %371, %.1389450
  call void @libxsmm_x86_instruction_vec_compute_3reg(ptr noundef nonnull %0, i32 noundef %363, i8 noundef signext %364, i32 noundef %19, i32 noundef %194, i32 noundef %372) #7
  br label %394

373:                                              ; preds = %354
  %374 = icmp eq i32 %343, 1005
  br i1 %374, label %375, label %394

375:                                              ; preds = %373
  %376 = load i32, ptr %3, align 8, !tbaa !26
  %377 = load i32, ptr %202, align 4, !tbaa !44
  %378 = load i32, ptr %203, align 4, !tbaa !43
  %379 = load i32, ptr %198, align 4, !tbaa !40
  %380 = mul i32 %379, %335
  %381 = load i8, ptr %200, align 4, !tbaa !25
  call void @libxsmm_x86_instruction_vec_move(ptr noundef nonnull %0, i32 noundef %376, i32 noundef %377, i32 noundef %378, i32 noundef 127, i32 noundef 0, i32 noundef %380, i8 noundef signext %381, i32 noundef %194, i32 noundef 0, i32 noundef 1, i32 noundef 0) #7
  %382 = load i32, ptr %204, align 8, !tbaa !42
  %383 = load i8, ptr %200, align 4, !tbaa !25
  call void @libxsmm_x86_instruction_vec_compute_3reg(ptr noundef nonnull %0, i32 noundef %382, i8 noundef signext %383, i32 noundef %19, i32 noundef %194, i32 noundef %194) #7
  %384 = load i32, ptr %205, align 4, !tbaa !45
  %385 = load i8, ptr %200, align 4, !tbaa !25
  %386 = load i32, ptr %269, align 4, !tbaa !36
  %387 = add i32 %386, %.2446
  %388 = zext i32 %387 to i64
  %389 = getelementptr inbounds i32, ptr %6, i64 %388
  %390 = load i32, ptr %389, align 4, !tbaa !36
  %391 = sub i32 %390, %8
  %392 = mul i32 %391, %12
  %393 = add i32 %392, %.1389450
  call void @libxsmm_x86_instruction_vec_compute_3reg(ptr noundef nonnull %0, i32 noundef %384, i8 noundef signext %385, i32 noundef %194, i32 noundef %393, i32 noundef %393) #7
  br label %394

394:                                              ; preds = %.lr.ph448, %356, %373, %375, %345
  %395 = add nuw i32 %.2446, 1
  %exitcond481.not = icmp eq i32 %395, %271
  br i1 %exitcond481.not, label %._crit_edge449, label %.lr.ph448, !llvm.loop !46

._crit_edge449:                                   ; preds = %394, %333
  %396 = add nuw i32 %.1389450, 1
  %exitcond483.not = icmp eq i32 %396, %umax482
  br i1 %exitcond483.not, label %.loopexit.loopexit, label %301, !llvm.loop !47

.loopexit.loopexit:                               ; preds = %._crit_edge449
  %.pre = load i32, ptr %191, align 1, !tbaa !33
  br label %.loopexit

.loopexit:                                        ; preds = %265, %.loopexit.loopexit, %._crit_edge
  %397 = phi i32 [ %.pre, %.loopexit.loopexit ], [ %266, %._crit_edge ], [ %266, %265 ]
  %398 = zext i32 %397 to i64
  %399 = icmp ult i64 %indvars.iv.next485, %398
  br i1 %399, label %265, label %.preheader429, !llvm.loop !48

.preheader:                                       ; preds = %.preheader.lr.ph, %.split.us454
  %.3455 = phi i32 [ %416, %.split.us454 ], [ 0, %.preheader.lr.ph ]
  %400 = add i32 %.3455, %8
  %401 = mul i32 %400, %14
  %402 = mul i32 %.3455, %12
  br label %403

403:                                              ; preds = %403, %.preheader
  %.2390453.us = phi i32 [ 0, %.preheader ], [ %415, %403 ]
  %404 = load i32, ptr %3, align 8, !tbaa !26
  %405 = load i32, ptr %209, align 4, !tbaa !27
  %406 = load i32, ptr %210, align 4, !tbaa !28
  %407 = load i32, ptr %211, align 4, !tbaa !29
  %408 = add i32 %.2390453.us, %10
  %409 = load i32, ptr %212, align 8, !tbaa !19
  %410 = mul i32 %409, %408
  %411 = add i32 %410, %401
  %412 = mul i32 %411, %407
  %413 = load i8, ptr %213, align 4, !tbaa !25
  %414 = add i32 %.2390453.us, %402
  call void @libxsmm_x86_instruction_vec_move(ptr noundef %0, i32 noundef %404, i32 noundef %405, i32 noundef %406, i32 noundef 127, i32 noundef 0, i32 noundef %412, i8 noundef signext %413, i32 noundef %414, i32 noundef 0, i32 noundef 0, i32 noundef 1) #7
  %415 = add nuw i32 %.2390453.us, 1
  %exitcond488.not = icmp eq i32 %415, %umax490
  br i1 %exitcond488.not, label %.split.us454, label %403, !llvm.loop !35

.split.us454:                                     ; preds = %403
  %416 = add nuw i32 %.3455, 1
  %exitcond489.not = icmp eq i32 %416, %18
  br i1 %exitcond489.not, label %._crit_edge456, label %.preheader, !llvm.loop !34

._crit_edge456:                                   ; preds = %.split.us454, %.split.us457, %.preheader429
  br i1 %23, label %417, label %465

417:                                              ; preds = %._crit_edge456
  %418 = getelementptr inbounds i8, ptr %3, i64 64
  %419 = load i32, ptr %418, align 8, !tbaa !15
  %420 = getelementptr inbounds i8, ptr %2, i64 4
  %421 = load i32, ptr %420, align 4, !tbaa !39
  %422 = zext i32 %12 to i64
  %423 = getelementptr inbounds i8, ptr %3, i64 8
  %424 = load i32, ptr %423, align 8, !tbaa !19
  %425 = zext i32 %424 to i64
  %426 = mul nuw nsw i64 %425, %422
  %427 = getelementptr inbounds i8, ptr %3, i64 12
  %428 = load i32, ptr %427, align 4, !tbaa !40
  %429 = zext i32 %428 to i64
  %430 = mul nuw nsw i64 %426, %429
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef %0, i32 noundef %419, i32 noundef %421, i64 noundef %430) #7
  %431 = load i32, ptr %418, align 8, !tbaa !15
  %432 = getelementptr inbounds i8, ptr %2, i64 20
  %433 = load i32, ptr %432, align 4, !tbaa !28
  %434 = load i32, ptr %423, align 8, !tbaa !19
  %435 = zext i32 %434 to i64
  %436 = mul nuw nsw i64 %435, %422
  %437 = getelementptr inbounds i8, ptr %3, i64 20
  %438 = load i32, ptr %437, align 4, !tbaa !29
  %439 = zext i32 %438 to i64
  %440 = mul nuw nsw i64 %436, %439
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef %0, i32 noundef %431, i32 noundef %433, i64 noundef %440) #7
  %441 = getelementptr inbounds i8, ptr %3, i64 72
  %442 = load i32, ptr %441, align 8, !tbaa !49
  %443 = getelementptr inbounds i8, ptr %2, i64 88
  %444 = load i32, ptr %443, align 4, !tbaa !13
  %445 = zext i32 %22 to i64
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef %0, i32 noundef %442, i32 noundef %444, i64 noundef %445) #7
  %446 = getelementptr inbounds i8, ptr %3, i64 76
  %447 = load i32, ptr %446, align 4, !tbaa !50
  call void @libxsmm_x86_instruction_jump_back_to_label(ptr noundef %0, i32 noundef %447, ptr noundef %1) #7
  %448 = getelementptr inbounds i8, ptr %3, i64 68
  %449 = load i32, ptr %448, align 4, !tbaa !51
  %450 = load i32, ptr %420, align 4, !tbaa !39
  %451 = load i32, ptr %423, align 8, !tbaa !19
  %452 = zext i32 %451 to i64
  %453 = mul nuw nsw i64 %452, %445
  %454 = load i32, ptr %427, align 4, !tbaa !40
  %455 = zext i32 %454 to i64
  %456 = mul nuw nsw i64 %453, %455
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef %0, i32 noundef %449, i32 noundef %450, i64 noundef %456) #7
  %457 = load i32, ptr %448, align 4, !tbaa !51
  %458 = load i32, ptr %432, align 4, !tbaa !28
  %459 = load i32, ptr %423, align 8, !tbaa !19
  %460 = zext i32 %459 to i64
  %461 = mul nuw nsw i64 %460, %445
  %462 = load i32, ptr %437, align 4, !tbaa !29
  %463 = zext i32 %462 to i64
  %464 = mul nuw nsw i64 %461, %463
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef %0, i32 noundef %457, i32 noundef %458, i64 noundef %464) #7
  br label %465

465:                                              ; preds = %417, %._crit_edge456
  ret void
}

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

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

declare void @libxsmm_generator_initialize_avx512_mask(ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #2

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

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

declare void @libxsmm_x86_instruction_vec_mask_move(ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i8 noundef signext, i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #2

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

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

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

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

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #2 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { nounwind 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 = { 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 #5 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #6 = { noreturn nounwind }
attributes #7 = { 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 80}
!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 = !{!14, !7, i64 88}
!14 = !{!"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}
!15 = !{!6, !7, i64 64}
!16 = !{!17, !7, i64 28}
!17 = !{!"libxsmm_generated_code", !12, i64 0, !7, i64 8, !7, i64 12, !7, i64 16, !7, i64 20, !7, i64 24, !7, i64 28}
!18 = !{!14, !7, i64 92}
!19 = !{!6, !7, i64 8}
!20 = !{!8, !8, i64 0}
!21 = !{!22, !7, i64 24}
!22 = !{!"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, !23, i64 33, !23, 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}
!23 = !{!"long long", !8, i64 0}
!24 = !{!6, !7, i64 52}
!25 = !{!6, !8, i64 84}
!26 = !{!6, !7, i64 0}
!27 = !{!6, !7, i64 36}
!28 = !{!14, !7, i64 20}
!29 = !{!6, !7, i64 20}
!30 = distinct !{!30, !31}
!31 = !{!"llvm.loop.mustprogress"}
!32 = distinct !{!32, !31}
!33 = !{!22, !7, i64 8}
!34 = distinct !{!34, !31}
!35 = distinct !{!35, !31}
!36 = !{!7, !7, i64 0}
!37 = !{!22, !7, i64 4}
!38 = distinct !{!38, !31}
!39 = !{!14, !7, i64 4}
!40 = !{!6, !7, i64 12}
!41 = !{!6, !7, i64 24}
!42 = !{!6, !7, i64 56}
!43 = !{!14, !7, i64 12}
!44 = !{!6, !7, i64 28}
!45 = !{!6, !7, i64 60}
!46 = distinct !{!46, !31}
!47 = distinct !{!47, !31}
!48 = distinct !{!48, !31}
!49 = !{!6, !7, i64 72}
!50 = !{!6, !7, i64 76}
!51 = !{!6, !7, i64 68}


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