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

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

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

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

declare i32 @libxsmm_x86_is_Amxfp4_Bbf16_gemm(ptr noundef) #1

declare i32 @libxsmm_x86_is_Amxfp4_Bi8_gemm(ptr noundef) #1

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

55:                                               ; preds = %7
  %56 = load i32, ptr %12, align 4, !tbaa !9
  %57 = load ptr, ptr %10, align 8, !tbaa !5
  %58 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %57, i32 0, i32 2
  %59 = load i32, ptr %58, align 8, !tbaa !11
  %60 = udiv i32 %56, %59
  br label %68

61:                                               ; preds = %7
  %62 = load i32, ptr %12, align 4, !tbaa !9
  %63 = load ptr, ptr %10, align 8, !tbaa !5
  %64 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %63, i32 0, i32 2
  %65 = load i32, ptr %64, align 8, !tbaa !11
  %66 = udiv i32 %62, %65
  %67 = add i32 %66, 1
  br label %68

68:                                               ; preds = %61, %55
  %69 = phi i32 [ %60, %55 ], [ %67, %61 ]
  store i32 %69, ptr %15, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #3
  store i32 0, ptr %16, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #3
  store i32 0, ptr %17, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #3
  %70 = load i32, ptr %13, align 4, !tbaa !9
  %71 = load i32, ptr %15, align 4, !tbaa !9
  %72 = mul i32 %70, %71
  %73 = sub i32 16, %72
  store i32 %73, ptr %18, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #3
  %74 = load i32, ptr %18, align 4, !tbaa !9
  %75 = load i32, ptr %13, align 4, !tbaa !9
  %76 = load i32, ptr %15, align 4, !tbaa !9
  %77 = mul i32 %75, %76
  %78 = sub i32 %74, %77
  store i32 %78, ptr %19, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #3
  %79 = load i32, ptr %19, align 4, !tbaa !9
  %80 = sub i32 %79, 1
  store i32 %80, ptr %20, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #3
  store i32 0, ptr %21, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #3
  store i32 1, ptr %22, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #3
  store i32 2, ptr %23, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #3
  store i32 2, ptr %24, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #3
  %81 = load i32, ptr %23, align 4, !tbaa !9
  %82 = load i32, ptr %15, align 4, !tbaa !9
  %83 = mul i32 2, %82
  %84 = add i32 %81, %83
  %85 = add i32 %84, 1
  store i32 %85, ptr %25, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #3
  store i32 0, ptr %26, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #3
  store i32 0, ptr %27, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #3
  %86 = load i32, ptr %13, align 4, !tbaa !9
  %87 = icmp eq i32 %86, 1
  %88 = zext i1 %87 to i64
  %89 = select i1 %87, i32 16, i32 4
  store i32 %89, ptr %28, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #3
  store i32 16, ptr %29, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #3
  %90 = load ptr, ptr %11, align 8, !tbaa !5
  %91 = call i32 @libxsmm_x86_is_Amxfp4_Bbf16_gemm(ptr noundef %90)
  store i32 %91, ptr %30, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #3
  %92 = load ptr, ptr %11, align 8, !tbaa !5
  %93 = call i32 @libxsmm_x86_is_Amxfp4_Bi8_gemm(ptr noundef %92)
  store i32 %93, ptr %31, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #3
  store i32 2, ptr %32, align 4, !tbaa !9
  %94 = load i32, ptr %31, align 4, !tbaa !9
  %95 = icmp ugt i32 %94, 0
  br i1 %95, label %96, label %97

96:                                               ; preds = %68
  store i32 4, ptr %32, align 4, !tbaa !9
  store i32 8, ptr %28, align 4, !tbaa !9
  br label %97

97:                                               ; preds = %96, %68
  %98 = load ptr, ptr %11, align 8, !tbaa !5
  %99 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %98, i32 0, i32 6
  %100 = load i32, ptr %99, align 1, !tbaa !15
  %101 = and i32 %100, 65536
  %102 = icmp eq i32 %101, 0
  br i1 %102, label %103, label %121

103:                                              ; preds = %97
  %104 = load ptr, ptr %11, align 8, !tbaa !5
  %105 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %104, i32 0, i32 6
  %106 = load i32, ptr %105, align 1, !tbaa !15
  %107 = and i32 %106, 131072
  %108 = icmp eq i32 %107, 0
  br i1 %108, label %109, label %121

109:                                              ; preds = %103
  %110 = load ptr, ptr %11, align 8, !tbaa !5
  %111 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %110, i32 0, i32 6
  %112 = load i32, ptr %111, align 1, !tbaa !15
  %113 = and i32 %112, 262144
  %114 = icmp eq i32 %113, 0
  br i1 %114, label %115, label %121

115:                                              ; preds = %109
  %116 = load ptr, ptr %8, align 8, !tbaa !5
  %117 = load ptr, ptr %10, align 8, !tbaa !5
  %118 = load ptr, ptr %9, align 8, !tbaa !5
  %119 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %118, i32 0, i32 20
  %120 = load i32, ptr %119, align 4, !tbaa !18
  call void @libxsmm_generator_gemm_getval_stack_var(ptr noundef %116, ptr noundef %117, i32 noundef 33, i32 noundef %120)
  br label %121

121:                                              ; preds = %115, %109, %103, %97
  %122 = load i32, ptr %30, align 4, !tbaa !9
  %123 = icmp ugt i32 %122, 0
  br i1 %123, label %124, label %143

124:                                              ; preds = %121
  %125 = load ptr, ptr %8, align 8, !tbaa !5
  %126 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %125, i32 0, i32 6
  %127 = load i32, ptr %126, align 4, !tbaa !20
  %128 = icmp ult i32 %127, 1008
  br i1 %128, label %129, label %143

129:                                              ; preds = %124
  %130 = load ptr, ptr %8, align 8, !tbaa !5
  %131 = load ptr, ptr %10, align 8, !tbaa !5
  %132 = load ptr, ptr %9, align 8, !tbaa !5
  %133 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %132, i32 0, i32 22
  %134 = load i32, ptr %133, align 4, !tbaa !22
  call void @libxsmm_generator_gemm_getval_stack_var(ptr noundef %130, ptr noundef %131, i32 noundef 23, i32 noundef %134)
  %135 = load ptr, ptr %8, align 8, !tbaa !5
  %136 = load ptr, ptr %10, align 8, !tbaa !5
  %137 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %136, i32 0, i32 0
  %138 = load i32, ptr %137, align 8, !tbaa !23
  %139 = load ptr, ptr %9, align 8, !tbaa !5
  %140 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %139, i32 0, i32 22
  %141 = load i32, ptr %140, align 4, !tbaa !22
  %142 = load i32, ptr %20, align 4, !tbaa !9
  call void @libxsmm_x86_instruction_vec_move(ptr noundef %135, i32 noundef %138, i32 noundef 537138704, i32 noundef %141, i32 noundef 127, i32 noundef 0, i32 noundef 0, i8 noundef signext 121, i32 noundef %142, i32 noundef 0, i32 noundef 0, i32 noundef 0)
  br label %143

143:                                              ; preds = %129, %124, %121
  %144 = load i32, ptr %31, align 4, !tbaa !9
  %145 = icmp ugt i32 %144, 0
  br i1 %145, label %146, label %196

146:                                              ; preds = %143
  %147 = load ptr, ptr %11, align 8, !tbaa !5
  %148 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %147, i32 0, i32 6
  %149 = load i32, ptr %148, align 1, !tbaa !15
  %150 = and i32 %149, 65536
  %151 = icmp eq i32 %150, 0
  br i1 %151, label %152, label %170

152:                                              ; preds = %146
  %153 = load ptr, ptr %11, align 8, !tbaa !5
  %154 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %153, i32 0, i32 6
  %155 = load i32, ptr %154, align 1, !tbaa !15
  %156 = and i32 %155, 131072
  %157 = icmp eq i32 %156, 0
  br i1 %157, label %158, label %170

158:                                              ; preds = %152
  %159 = load ptr, ptr %11, align 8, !tbaa !5
  %160 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %159, i32 0, i32 6
  %161 = load i32, ptr %160, align 1, !tbaa !15
  %162 = and i32 %161, 262144
  %163 = icmp eq i32 %162, 0
  br i1 %163, label %164, label %170

164:                                              ; preds = %158
  %165 = load ptr, ptr %8, align 8, !tbaa !5
  %166 = load ptr, ptr %10, align 8, !tbaa !5
  %167 = load ptr, ptr %9, align 8, !tbaa !5
  %168 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %167, i32 0, i32 21
  %169 = load i32, ptr %168, align 4, !tbaa !24
  call void @libxsmm_generator_gemm_getval_stack_var(ptr noundef %165, ptr noundef %166, i32 noundef 36, i32 noundef %169)
  br label %176

170:                                              ; preds = %158, %152, %146
  %171 = load ptr, ptr %8, align 8, !tbaa !5
  %172 = load ptr, ptr %10, align 8, !tbaa !5
  %173 = load ptr, ptr %9, align 8, !tbaa !5
  %174 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %173, i32 0, i32 21
  %175 = load i32, ptr %174, align 4, !tbaa !24
  call void @libxsmm_generator_gemm_getval_stack_var(ptr noundef %171, ptr noundef %172, i32 noundef 37, i32 noundef %175)
  br label %176

176:                                              ; preds = %170, %164
  %177 = load ptr, ptr %10, align 8, !tbaa !5
  %178 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %177, i32 0, i32 11
  %179 = load i32, ptr %178, align 4, !tbaa !25
  %180 = icmp ne i32 %179, 0
  br i1 %180, label %181, label %195

181:                                              ; preds = %176
  %182 = load ptr, ptr %8, align 8, !tbaa !5
  %183 = load ptr, ptr %10, align 8, !tbaa !5
  %184 = load ptr, ptr %9, align 8, !tbaa !5
  %185 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %184, i32 0, i32 22
  %186 = load i32, ptr %185, align 4, !tbaa !22
  call void @libxsmm_generator_gemm_getval_stack_var(ptr noundef %182, ptr noundef %183, i32 noundef 22, i32 noundef %186)
  %187 = load ptr, ptr %8, align 8, !tbaa !5
  %188 = load ptr, ptr %10, align 8, !tbaa !5
  %189 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %188, i32 0, i32 0
  %190 = load i32, ptr %189, align 8, !tbaa !23
  %191 = load ptr, ptr %9, align 8, !tbaa !5
  %192 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %191, i32 0, i32 22
  %193 = load i32, ptr %192, align 4, !tbaa !22
  %194 = load i32, ptr %20, align 4, !tbaa !9
  call void @libxsmm_x86_instruction_vec_move(ptr noundef %187, i32 noundef %190, i32 noundef 537138704, i32 noundef %193, i32 noundef 127, i32 noundef 0, i32 noundef 0, i8 noundef signext 121, i32 noundef %194, i32 noundef 0, i32 noundef 0, i32 noundef 0)
  br label %195

195:                                              ; preds = %181, %176
  br label %196

196:                                              ; preds = %195, %143
  %197 = load i32, ptr %14, align 4, !tbaa !9
  %198 = icmp sgt i32 %197, 32
  br i1 %198, label %199, label %207

199:                                              ; preds = %196
  %200 = load ptr, ptr %8, align 8, !tbaa !5
  %201 = load ptr, ptr %10, align 8, !tbaa !5
  %202 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %201, i32 0, i32 108
  %203 = load ptr, ptr %202, align 8, !tbaa !26
  %204 = load ptr, ptr %9, align 8, !tbaa !5
  %205 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %204, i32 0, i32 12
  %206 = load i32, ptr %205, align 4, !tbaa !27
  call void @libxsmm_generator_generic_loop_header_no_idx_inc(ptr noundef %200, ptr noundef %203, i32 noundef %206, i32 noundef 0)
  br label %207

207:                                              ; preds = %199, %196
  store i32 0, ptr %26, align 4, !tbaa !9
  br label %208

208:                                              ; preds = %231, %207
  %209 = load i32, ptr %26, align 4, !tbaa !9
  %210 = load i32, ptr %13, align 4, !tbaa !9
  %211 = load i32, ptr %15, align 4, !tbaa !9
  %212 = mul i32 %210, %211
  %213 = icmp ult i32 %209, %212
  br i1 %213, label %214, label %234

214:                                              ; preds = %208
  %215 = load ptr, ptr %8, align 8, !tbaa !5
  %216 = load ptr, ptr %10, align 8, !tbaa !5
  %217 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %216, i32 0, i32 13
  %218 = load i32, ptr %217, align 4, !tbaa !28
  %219 = load ptr, ptr %10, align 8, !tbaa !5
  %220 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %219, i32 0, i32 21
  %221 = load i8, ptr %220, align 4, !tbaa !29
  %222 = load i32, ptr %19, align 4, !tbaa !9
  %223 = load i32, ptr %26, align 4, !tbaa !9
  %224 = add i32 %222, %223
  %225 = load i32, ptr %19, align 4, !tbaa !9
  %226 = load i32, ptr %26, align 4, !tbaa !9
  %227 = add i32 %225, %226
  %228 = load i32, ptr %19, align 4, !tbaa !9
  %229 = load i32, ptr %26, align 4, !tbaa !9
  %230 = add i32 %228, %229
  call void @libxsmm_x86_instruction_vec_compute_3reg(ptr noundef %215, i32 noundef %218, i8 noundef signext %221, i32 noundef %224, i32 noundef %227, i32 noundef %230)
  br label %231

231:                                              ; preds = %214
  %232 = load i32, ptr %26, align 4, !tbaa !9
  %233 = add i32 %232, 1
  store i32 %233, ptr %26, align 4, !tbaa !9
  br label %208, !llvm.loop !30

234:                                              ; preds = %208
  %235 = load i32, ptr %32, align 4, !tbaa !9
  %236 = udiv i32 32, %235
  %237 = load i32, ptr %28, align 4, !tbaa !9
  %238 = udiv i32 %236, %237
  %239 = icmp ugt i32 %238, 1
  br i1 %239, label %240, label %248

240:                                              ; preds = %234
  %241 = load ptr, ptr %8, align 8, !tbaa !5
  %242 = load ptr, ptr %10, align 8, !tbaa !5
  %243 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %242, i32 0, i32 108
  %244 = load ptr, ptr %243, align 8, !tbaa !26
  %245 = load ptr, ptr %9, align 8, !tbaa !5
  %246 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %245, i32 0, i32 22
  %247 = load i32, ptr %246, align 4, !tbaa !22
  call void @libxsmm_generator_generic_loop_header_no_idx_inc(ptr noundef %241, ptr noundef %244, i32 noundef %247, i32 noundef 0)
  br label %248

248:                                              ; preds = %240, %234
  store i32 0, ptr %27, align 4, !tbaa !9
  br label %249

249:                                              ; preds = %1091, %248
  %250 = load i32, ptr %27, align 4, !tbaa !9
  %251 = load i32, ptr %28, align 4, !tbaa !9
  %252 = icmp ult i32 %250, %251
  br i1 %252, label %253, label %1094

253:                                              ; preds = %249
  store i32 0, ptr %17, align 4, !tbaa !9
  br label %254

254:                                              ; preds = %837, %253
  %255 = load i32, ptr %17, align 4, !tbaa !9
  %256 = load i32, ptr %15, align 4, !tbaa !9
  %257 = icmp ult i32 %255, %256
  br i1 %257, label %258, label %840

258:                                              ; preds = %254
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #3
  %259 = load i32, ptr %23, align 4, !tbaa !9
  %260 = load i32, ptr %17, align 4, !tbaa !9
  %261 = mul i32 2, %260
  %262 = add i32 %259, %261
  %263 = add i32 %262, 0
  store i32 %263, ptr %33, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #3
  %264 = load i32, ptr %23, align 4, !tbaa !9
  %265 = load i32, ptr %17, align 4, !tbaa !9
  %266 = mul i32 2, %265
  %267 = add i32 %264, %266
  %268 = add i32 %267, 1
  store i32 %268, ptr %34, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #3
  %269 = load i32, ptr %23, align 4, !tbaa !9
  %270 = load i32, ptr %15, align 4, !tbaa !9
  %271 = mul i32 2, %270
  %272 = add i32 %269, %271
  store i32 %272, ptr %35, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %36) #3
  %273 = load i32, ptr %23, align 4, !tbaa !9
  %274 = add i32 %273, 3
  store i32 %274, ptr %36, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %37) #3
  %275 = load i32, ptr %23, align 4, !tbaa !9
  %276 = add i32 %275, 4
  store i32 %276, ptr %37, align 4, !tbaa !9
  %277 = load i32, ptr %13, align 4, !tbaa !9
  %278 = icmp eq i32 %277, 1
  br i1 %278, label %279, label %302

279:                                              ; preds = %258
  %280 = load i32, ptr %23, align 4, !tbaa !9
  %281 = add i32 %280, 0
  store i32 %281, ptr %33, align 4, !tbaa !9
  %282 = load i32, ptr %23, align 4, !tbaa !9
  %283 = add i32 %282, 1
  store i32 %283, ptr %34, align 4, !tbaa !9
  %284 = load i32, ptr %31, align 4, !tbaa !9
  %285 = icmp ugt i32 %284, 0
  br i1 %285, label %286, label %299

286:                                              ; preds = %279
  %287 = load i32, ptr %23, align 4, !tbaa !9
  %288 = add i32 %287, 1
  %289 = load i32, ptr %17, align 4, !tbaa !9
  %290 = add i32 %288, %289
  store i32 %290, ptr %34, align 4, !tbaa !9
  %291 = load i32, ptr %23, align 4, !tbaa !9
  %292 = add i32 %291, 1
  %293 = load i32, ptr %15, align 4, !tbaa !9
  %294 = add i32 %292, %293
  store i32 %294, ptr %36, align 4, !tbaa !9
  %295 = load i32, ptr %23, align 4, !tbaa !9
  %296 = add i32 %295, 1
  %297 = load i32, ptr %15, align 4, !tbaa !9
  %298 = add i32 %296, %297
  store i32 %298, ptr %37, align 4, !tbaa !9
  br label %299

299:                                              ; preds = %286, %279
  %300 = load i32, ptr %23, align 4, !tbaa !9
  %301 = add i32 %300, 2
  store i32 %301, ptr %35, align 4, !tbaa !9
  br label %302

302:                                              ; preds = %299, %258
  %303 = load i32, ptr %31, align 4, !tbaa !9
  %304 = icmp ugt i32 %303, 0
  br i1 %304, label %305, label %397

305:                                              ; preds = %302
  %306 = load i32, ptr %27, align 4, !tbaa !9
  %307 = urem i32 %306, 2
  %308 = icmp eq i32 %307, 0
  br i1 %308, label %309, label %396

309:                                              ; preds = %305
  %310 = load i32, ptr %13, align 4, !tbaa !9
  %311 = icmp eq i32 %310, 1
  br i1 %311, label %312, label %348

312:                                              ; preds = %309
  %313 = load ptr, ptr %10, align 8, !tbaa !5
  %314 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %313, i32 0, i32 11
  %315 = load i32, ptr %314, align 4, !tbaa !25
  %316 = icmp ne i32 %315, 0
  br i1 %316, label %317, label %348

317:                                              ; preds = %312
  %318 = load i32, ptr %17, align 4, !tbaa !9
  %319 = load i32, ptr %15, align 4, !tbaa !9
  %320 = sub i32 %319, 1
  %321 = icmp eq i32 %318, %320
  br i1 %321, label %322, label %348

322:                                              ; preds = %317
  %323 = load i32, ptr %15, align 4, !tbaa !9
  %324 = icmp eq i32 %323, 4
  br i1 %324, label %325, label %348

325:                                              ; preds = %322
  %326 = load i32, ptr %33, align 4, !tbaa !9
  store i32 %326, ptr %20, align 4, !tbaa !9
  %327 = load ptr, ptr %8, align 8, !tbaa !5
  %328 = load ptr, ptr %9, align 8, !tbaa !5
  %329 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %328, i32 0, i32 22
  %330 = load i32, ptr %329, align 4, !tbaa !22
  call void @libxsmm_x86_instruction_push_reg(ptr noundef %327, i32 noundef %330)
  %331 = load ptr, ptr %8, align 8, !tbaa !5
  %332 = load ptr, ptr %10, align 8, !tbaa !5
  %333 = load ptr, ptr %9, align 8, !tbaa !5
  %334 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %333, i32 0, i32 22
  %335 = load i32, ptr %334, align 4, !tbaa !22
  call void @libxsmm_generator_gemm_getval_stack_var(ptr noundef %331, ptr noundef %332, i32 noundef 22, i32 noundef %335)
  %336 = load ptr, ptr %8, align 8, !tbaa !5
  %337 = load ptr, ptr %10, align 8, !tbaa !5
  %338 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %337, i32 0, i32 0
  %339 = load i32, ptr %338, align 8, !tbaa !23
  %340 = load ptr, ptr %9, align 8, !tbaa !5
  %341 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %340, i32 0, i32 22
  %342 = load i32, ptr %341, align 4, !tbaa !22
  %343 = load i32, ptr %20, align 4, !tbaa !9
  call void @libxsmm_x86_instruction_vec_move(ptr noundef %336, i32 noundef %339, i32 noundef 537138704, i32 noundef %342, i32 noundef 127, i32 noundef 0, i32 noundef 0, i8 noundef signext 121, i32 noundef %343, i32 noundef 0, i32 noundef 0, i32 noundef 0)
  %344 = load ptr, ptr %8, align 8, !tbaa !5
  %345 = load ptr, ptr %9, align 8, !tbaa !5
  %346 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %345, i32 0, i32 22
  %347 = load i32, ptr %346, align 4, !tbaa !22
  call void @libxsmm_x86_instruction_pop_reg(ptr noundef %344, i32 noundef %347)
  br label %348

348:                                              ; preds = %325, %322, %317, %312, %309
  %349 = load ptr, ptr %8, align 8, !tbaa !5
  %350 = load ptr, ptr %10, align 8, !tbaa !5
  %351 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %350, i32 0, i32 6
  %352 = load i32, ptr %351, align 8, !tbaa !32
  %353 = load ptr, ptr %9, align 8, !tbaa !5
  %354 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %353, i32 0, i32 1
  %355 = load i32, ptr %354, align 4, !tbaa !33
  %356 = load ptr, ptr %10, align 8, !tbaa !5
  %357 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %356, i32 0, i32 3
  %358 = load i32, ptr %357, align 4, !tbaa !34
  %359 = load ptr, ptr %10, align 8, !tbaa !5
  %360 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %359, i32 0, i32 2
  %361 = load i32, ptr %360, align 8, !tbaa !11
  %362 = mul i32 %358, %361
  %363 = load i32, ptr %17, align 4, !tbaa !9
  %364 = mul i32 %362, %363
  %365 = load i32, ptr %32, align 4, !tbaa !9
  %366 = mul i32 %364, %365
  %367 = load i32, ptr %27, align 4, !tbaa !9
  %368 = udiv i32 %367, 2
  %369 = load ptr, ptr %11, align 8, !tbaa !5
  %370 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %369, i32 0, i32 3
  %371 = load i32, ptr %370, align 1, !tbaa !35
  %372 = mul i32 %368, %371
  %373 = load ptr, ptr %10, align 8, !tbaa !5
  %374 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %373, i32 0, i32 3
  %375 = load i32, ptr %374, align 4, !tbaa !34
  %376 = mul i32 %372, %375
  %377 = load i32, ptr %32, align 4, !tbaa !9
  %378 = mul i32 %376, %377
  %379 = add i32 %366, %378
  %380 = load ptr, ptr %10, align 8, !tbaa !5
  %381 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %380, i32 0, i32 21
  %382 = load i8, ptr %381, align 4, !tbaa !29
  %383 = load i32, ptr %33, align 4, !tbaa !9
  %384 = load i32, ptr %17, align 4, !tbaa !9
  %385 = load i32, ptr %15, align 4, !tbaa !9
  %386 = sub i32 %385, 1
  %387 = icmp eq i32 %384, %386
  br i1 %387, label %388, label %392

388:                                              ; preds = %348
  %389 = load ptr, ptr %10, align 8, !tbaa !5
  %390 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %389, i32 0, i32 11
  %391 = load i32, ptr %390, align 4, !tbaa !25
  br label %393

392:                                              ; preds = %348
  br label %393

393:                                              ; preds = %392, %388
  %394 = phi i32 [ %391, %388 ], [ 0, %392 ]
  %395 = load i32, ptr %20, align 4, !tbaa !9
  call void @libxsmm_x86_instruction_unified_vec_move(ptr noundef %349, i32 noundef %352, i32 noundef %355, i32 noundef 127, i32 noundef 0, i32 noundef %379, i8 noundef signext %382, i32 noundef %383, i32 noundef %394, i32 noundef %395, i32 noundef 0)
  br label %396

396:                                              ; preds = %393, %305
  br label %478

397:                                              ; preds = %302
  %398 = load i32, ptr %17, align 4, !tbaa !9
  %399 = load i32, ptr %15, align 4, !tbaa !9
  %400 = sub i32 %399, 1
  %401 = icmp eq i32 %398, %400
  br i1 %401, label %402, label %446

402:                                              ; preds = %397
  %403 = load ptr, ptr %10, align 8, !tbaa !5
  %404 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %403, i32 0, i32 11
  %405 = load i32, ptr %404, align 4, !tbaa !25
  %406 = icmp ne i32 %405, 0
  br i1 %406, label %407, label %446

407:                                              ; preds = %402
  %408 = load ptr, ptr %8, align 8, !tbaa !5
  %409 = load ptr, ptr %9, align 8, !tbaa !5
  %410 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %409, i32 0, i32 23
  %411 = load i32, ptr %410, align 4, !tbaa !36
  %412 = load ptr, ptr %9, align 8, !tbaa !5
  %413 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %412, i32 0, i32 1
  %414 = load i32, ptr %413, align 4, !tbaa !33
  %415 = load ptr, ptr %10, align 8, !tbaa !5
  %416 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %415, i32 0, i32 3
  %417 = load i32, ptr %416, align 4, !tbaa !34
  %418 = load ptr, ptr %10, align 8, !tbaa !5
  %419 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %418, i32 0, i32 2
  %420 = load i32, ptr %419, align 8, !tbaa !11
  %421 = mul i32 %417, %420
  %422 = load i32, ptr %17, align 4, !tbaa !9
  %423 = mul i32 %421, %422
  %424 = load i32, ptr %27, align 4, !tbaa !9
  %425 = load ptr, ptr %11, align 8, !tbaa !5
  %426 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %425, i32 0, i32 3
  %427 = load i32, ptr %426, align 1, !tbaa !35
  %428 = mul i32 %424, %427
  %429 = load ptr, ptr %10, align 8, !tbaa !5
  %430 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %429, i32 0, i32 3
  %431 = load i32, ptr %430, align 4, !tbaa !34
  %432 = mul i32 %428, %431
  %433 = add i32 %423, %432
  %434 = load i32, ptr %33, align 4, !tbaa !9
  %435 = load i32, ptr %12, align 4, !tbaa !9
  %436 = load ptr, ptr %10, align 8, !tbaa !5
  %437 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %436, i32 0, i32 2
  %438 = load i32, ptr %437, align 8, !tbaa !11
  %439 = urem i32 %435, %438
  call void @libxsmm_generator_maskedload_8bit_avx2(ptr noundef %408, i32 noundef %411, i32 noundef %414, i32 noundef 127, i32 noundef 0, i32 noundef %433, i32 noundef %434, i32 noundef %439)
  %440 = load ptr, ptr %8, align 8, !tbaa !5
  %441 = load ptr, ptr %10, align 8, !tbaa !5
  %442 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %441, i32 0, i32 21
  %443 = load i8, ptr %442, align 4, !tbaa !29
  %444 = load i32, ptr %33, align 4, !tbaa !9
  %445 = load i32, ptr %33, align 4, !tbaa !9
  call void @libxsmm_x86_instruction_vec_compute_2reg(ptr noundef %440, i32 noundef 537207857, i8 noundef signext %443, i32 noundef %444, i32 noundef %445)
  br label %477

446:                                              ; preds = %402, %397
  %447 = load ptr, ptr %8, align 8, !tbaa !5
  %448 = load ptr, ptr %8, align 8, !tbaa !5
  %449 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %448, i32 0, i32 6
  %450 = load i32, ptr %449, align 4, !tbaa !20
  %451 = load ptr, ptr %9, align 8, !tbaa !5
  %452 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %451, i32 0, i32 1
  %453 = load i32, ptr %452, align 4, !tbaa !33
  %454 = load ptr, ptr %10, align 8, !tbaa !5
  %455 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %454, i32 0, i32 3
  %456 = load i32, ptr %455, align 4, !tbaa !34
  %457 = load ptr, ptr %10, align 8, !tbaa !5
  %458 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %457, i32 0, i32 2
  %459 = load i32, ptr %458, align 8, !tbaa !11
  %460 = mul i32 %456, %459
  %461 = load i32, ptr %17, align 4, !tbaa !9
  %462 = mul i32 %460, %461
  %463 = load i32, ptr %27, align 4, !tbaa !9
  %464 = load ptr, ptr %11, align 8, !tbaa !5
  %465 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %464, i32 0, i32 3
  %466 = load i32, ptr %465, align 1, !tbaa !35
  %467 = mul i32 %463, %466
  %468 = load ptr, ptr %10, align 8, !tbaa !5
  %469 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %468, i32 0, i32 3
  %470 = load i32, ptr %469, align 4, !tbaa !34
  %471 = mul i32 %467, %470
  %472 = add i32 %462, %471
  %473 = load ptr, ptr %10, align 8, !tbaa !5
  %474 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %473, i32 0, i32 21
  %475 = load i8, ptr %474, align 4, !tbaa !29
  %476 = load i32, ptr %33, align 4, !tbaa !9
  call void @libxsmm_x86_instruction_vec_move(ptr noundef %447, i32 noundef %450, i32 noundef 537207857, i32 noundef %453, i32 noundef 127, i32 noundef 0, i32 noundef %472, i8 noundef signext %475, i32 noundef %476, i32 noundef 0, i32 noundef 0, i32 noundef 0)
  br label %477

477:                                              ; preds = %446, %407
  br label %478

478:                                              ; preds = %477, %396
  %479 = load i32, ptr %27, align 4, !tbaa !9
  %480 = urem i32 %479, 8
  %481 = icmp eq i32 %480, 0
  br i1 %481, label %482, label %509

482:                                              ; preds = %478
  %483 = load ptr, ptr %8, align 8, !tbaa !5
  %484 = load ptr, ptr %9, align 8, !tbaa !5
  %485 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %484, i32 0, i32 1
  %486 = load i32, ptr %485, align 4, !tbaa !33
  %487 = load ptr, ptr %10, align 8, !tbaa !5
  %488 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %487, i32 0, i32 3
  %489 = load i32, ptr %488, align 4, !tbaa !34
  %490 = load ptr, ptr %10, align 8, !tbaa !5
  %491 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %490, i32 0, i32 2
  %492 = load i32, ptr %491, align 8, !tbaa !11
  %493 = mul i32 %489, %492
  %494 = load i32, ptr %17, align 4, !tbaa !9
  %495 = mul i32 %493, %494
  %496 = load i32, ptr %27, align 4, !tbaa !9
  %497 = load ptr, ptr %11, align 8, !tbaa !5
  %498 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %497, i32 0, i32 3
  %499 = load i32, ptr %498, align 1, !tbaa !35
  %500 = mul i32 %496, %499
  %501 = load ptr, ptr %10, align 8, !tbaa !5
  %502 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %501, i32 0, i32 3
  %503 = load i32, ptr %502, align 4, !tbaa !34
  %504 = mul i32 %500, %503
  %505 = add i32 %495, %504
  %506 = load i32, ptr %29, align 4, !tbaa !9
  %507 = mul i32 %506, 64
  %508 = add i32 %505, %507
  call void @libxsmm_x86_instruction_prefetch(ptr noundef %483, i32 noundef -1810624488, i32 noundef %486, i32 noundef 127, i32 noundef 0, i32 noundef %508)
  br label %509

509:                                              ; preds = %482, %478
  %510 = load i32, ptr %31, align 4, !tbaa !9
  %511 = icmp ugt i32 %510, 0
  br i1 %511, label %512, label %546

512:                                              ; preds = %509
  %513 = load i32, ptr %27, align 4, !tbaa !9
  %514 = urem i32 %513, 2
  %515 = icmp eq i32 %514, 0
  br i1 %515, label %516, label %545

516:                                              ; preds = %512
  %517 = load ptr, ptr %8, align 8, !tbaa !5
  %518 = load ptr, ptr %10, align 8, !tbaa !5
  %519 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %518, i32 0, i32 21
  %520 = load i8, ptr %519, align 4, !tbaa !29
  %521 = load i32, ptr %33, align 4, !tbaa !9
  %522 = load i32, ptr %34, align 4, !tbaa !9
  call void @libxsmm_x86_instruction_vec_compute_2reg_imm8(ptr noundef %517, i32 noundef 606934642, i8 noundef signext %520, i32 noundef %521, i32 noundef %522, i32 noundef 4)
  %523 = load ptr, ptr %8, align 8, !tbaa !5
  %524 = load ptr, ptr %10, align 8, !tbaa !5
  %525 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %524, i32 0, i32 21
  %526 = load i8, ptr %525, align 4, !tbaa !29
  %527 = load i32, ptr %33, align 4, !tbaa !9
  %528 = load i32, ptr %22, align 4, !tbaa !9
  %529 = load i32, ptr %33, align 4, !tbaa !9
  call void @libxsmm_x86_instruction_vec_compute_3reg(ptr noundef %523, i32 noundef 805639899, i8 noundef signext %526, i32 noundef %527, i32 noundef %528, i32 noundef %529)
  %530 = load ptr, ptr %8, align 8, !tbaa !5
  %531 = load ptr, ptr %10, align 8, !tbaa !5
  %532 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %531, i32 0, i32 21
  %533 = load i8, ptr %532, align 4, !tbaa !29
  %534 = load i32, ptr %34, align 4, !tbaa !9
  %535 = load i32, ptr %22, align 4, !tbaa !9
  %536 = load i32, ptr %34, align 4, !tbaa !9
  call void @libxsmm_x86_instruction_vec_compute_3reg(ptr noundef %530, i32 noundef 805639899, i8 noundef signext %533, i32 noundef %534, i32 noundef %535, i32 noundef %536)
  %537 = load ptr, ptr %8, align 8, !tbaa !5
  %538 = load i32, ptr %33, align 4, !tbaa !9
  %539 = load i32, ptr %21, align 4, !tbaa !9
  %540 = load i32, ptr %33, align 4, !tbaa !9
  call void @libxsmm_x86_instruction_vec_compute_3reg_mask_sae_imm8(ptr noundef %537, i32 noundef 805643776, i8 noundef signext 121, i32 noundef %538, i32 noundef %539, i32 noundef %540, i32 noundef 0, i32 noundef 0, i8 noundef zeroext 0, i32 noundef 0)
  %541 = load ptr, ptr %8, align 8, !tbaa !5
  %542 = load i32, ptr %34, align 4, !tbaa !9
  %543 = load i32, ptr %21, align 4, !tbaa !9
  %544 = load i32, ptr %34, align 4, !tbaa !9
  call void @libxsmm_x86_instruction_vec_compute_3reg_mask_sae_imm8(ptr noundef %541, i32 noundef 805643776, i8 noundef signext 121, i32 noundef %542, i32 noundef %543, i32 noundef %544, i32 noundef 0, i32 noundef 0, i8 noundef zeroext 0, i32 noundef 0)
  br label %545

545:                                              ; preds = %516, %512
  br label %607

546:                                              ; preds = %509
  %547 = load ptr, ptr %8, align 8, !tbaa !5
  %548 = load ptr, ptr %10, align 8, !tbaa !5
  %549 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %548, i32 0, i32 21
  %550 = load i8, ptr %549, align 4, !tbaa !29
  %551 = load i32, ptr %33, align 4, !tbaa !9
  %552 = load i32, ptr %34, align 4, !tbaa !9
  call void @libxsmm_x86_instruction_vec_compute_2reg_imm8(ptr noundef %547, i32 noundef 606934642, i8 noundef signext %550, i32 noundef %551, i32 noundef %552, i32 noundef 4)
  %553 = load ptr, ptr %8, align 8, !tbaa !5
  %554 = load ptr, ptr %10, align 8, !tbaa !5
  %555 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %554, i32 0, i32 21
  %556 = load i8, ptr %555, align 4, !tbaa !29
  %557 = load i32, ptr %21, align 4, !tbaa !9
  %558 = load i32, ptr %33, align 4, !tbaa !9
  %559 = load i32, ptr %35, align 4, !tbaa !9
  call void @libxsmm_x86_instruction_vec_compute_3reg(ptr noundef %553, i32 noundef 805643542, i8 noundef signext %556, i32 noundef %557, i32 noundef %558, i32 noundef %559)
  %560 = load ptr, ptr %8, align 8, !tbaa !5
  %561 = load ptr, ptr %10, align 8, !tbaa !5
  %562 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %561, i32 0, i32 21
  %563 = load i8, ptr %562, align 4, !tbaa !29
  %564 = load i32, ptr %33, align 4, !tbaa !9
  %565 = load i32, ptr %22, align 4, !tbaa !9
  %566 = load i32, ptr %33, align 4, !tbaa !9
  call void @libxsmm_x86_instruction_vec_compute_3reg(ptr noundef %560, i32 noundef 805639899, i8 noundef signext %563, i32 noundef %564, i32 noundef %565, i32 noundef %566)
  %567 = load ptr, ptr %8, align 8, !tbaa !5
  %568 = load ptr, ptr %10, align 8, !tbaa !5
  %569 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %568, i32 0, i32 21
  %570 = load i8, ptr %569, align 4, !tbaa !29
  %571 = load i32, ptr %33, align 4, !tbaa !9
  %572 = load i32, ptr %33, align 4, !tbaa !9
  call void @libxsmm_x86_instruction_vec_compute_2reg_imm8(ptr noundef %567, i32 noundef 611128946, i8 noundef signext %570, i32 noundef %571, i32 noundef %572, i32 noundef 28)
  %573 = load ptr, ptr %8, align 8, !tbaa !5
  %574 = load ptr, ptr %10, align 8, !tbaa !5
  %575 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %574, i32 0, i32 21
  %576 = load i8, ptr %575, align 4, !tbaa !29
  %577 = load i32, ptr %35, align 4, !tbaa !9
  %578 = load i32, ptr %33, align 4, !tbaa !9
  %579 = load i32, ptr %33, align 4, !tbaa !9
  call void @libxsmm_x86_instruction_vec_compute_3reg(ptr noundef %573, i32 noundef 805639915, i8 noundef signext %576, i32 noundef %577, i32 noundef %578, i32 noundef %579)
  %580 = load ptr, ptr %8, align 8, !tbaa !5
  %581 = load ptr, ptr %10, align 8, !tbaa !5
  %582 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %581, i32 0, i32 21
  %583 = load i8, ptr %582, align 4, !tbaa !29
  %584 = load i32, ptr %21, align 4, !tbaa !9
  %585 = load i32, ptr %34, align 4, !tbaa !9
  %586 = load i32, ptr %35, align 4, !tbaa !9
  call void @libxsmm_x86_instruction_vec_compute_3reg(ptr noundef %580, i32 noundef 805643542, i8 noundef signext %583, i32 noundef %584, i32 noundef %585, i32 noundef %586)
  %587 = load ptr, ptr %8, align 8, !tbaa !5
  %588 = load ptr, ptr %10, align 8, !tbaa !5
  %589 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %588, i32 0, i32 21
  %590 = load i8, ptr %589, align 4, !tbaa !29
  %591 = load i32, ptr %34, align 4, !tbaa !9
  %592 = load i32, ptr %22, align 4, !tbaa !9
  %593 = load i32, ptr %34, align 4, !tbaa !9
  call void @libxsmm_x86_instruction_vec_compute_3reg(ptr noundef %587, i32 noundef 805639899, i8 noundef signext %590, i32 noundef %591, i32 noundef %592, i32 noundef %593)
  %594 = load ptr, ptr %8, align 8, !tbaa !5
  %595 = load ptr, ptr %10, align 8, !tbaa !5
  %596 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %595, i32 0, i32 21
  %597 = load i8, ptr %596, align 4, !tbaa !29
  %598 = load i32, ptr %34, align 4, !tbaa !9
  %599 = load i32, ptr %34, align 4, !tbaa !9
  call void @libxsmm_x86_instruction_vec_compute_2reg_imm8(ptr noundef %594, i32 noundef 611128946, i8 noundef signext %597, i32 noundef %598, i32 noundef %599, i32 noundef 28)
  %600 = load ptr, ptr %8, align 8, !tbaa !5
  %601 = load ptr, ptr %10, align 8, !tbaa !5
  %602 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %601, i32 0, i32 21
  %603 = load i8, ptr %602, align 4, !tbaa !29
  %604 = load i32, ptr %35, align 4, !tbaa !9
  %605 = load i32, ptr %34, align 4, !tbaa !9
  %606 = load i32, ptr %34, align 4, !tbaa !9
  call void @libxsmm_x86_instruction_vec_compute_3reg(ptr noundef %600, i32 noundef 805639915, i8 noundef signext %603, i32 noundef %604, i32 noundef %605, i32 noundef %606)
  br label %607

607:                                              ; preds = %546, %545
  %608 = load i32, ptr %17, align 4, !tbaa !9
  %609 = load i32, ptr %15, align 4, !tbaa !9
  %610 = sub i32 %609, 1
  %611 = icmp eq i32 %608, %610
  br i1 %611, label %612, label %644

612:                                              ; preds = %607
  %613 = load i32, ptr %27, align 4, !tbaa !9
  %614 = load i32, ptr %28, align 4, !tbaa !9
  %615 = sub i32 %614, 1
  %616 = icmp eq i32 %613, %615
  br i1 %616, label %617, label %644

617:                                              ; preds = %612
  call void @llvm.lifetime.start.p0(i64 4, ptr %38) #3
  %618 = load i32, ptr %31, align 4, !tbaa !9
  %619 = icmp ugt i32 %618, 0
  %620 = zext i1 %619 to i64
  %621 = select i1 %619, i32 2, i32 1
  store i32 %621, ptr %38, align 4, !tbaa !9
  %622 = load ptr, ptr %8, align 8, !tbaa !5
  %623 = load ptr, ptr %10, align 8, !tbaa !5
  %624 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %623, i32 0, i32 16
  %625 = load i32, ptr %624, align 8, !tbaa !37
  %626 = load ptr, ptr %9, align 8, !tbaa !5
  %627 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %626, i32 0, i32 1
  %628 = load i32, ptr %627, align 4, !tbaa !33
  %629 = load ptr, ptr %11, align 8, !tbaa !5
  %630 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %629, i32 0, i32 3
  %631 = load i32, ptr %630, align 1, !tbaa !35
  %632 = zext i32 %631 to i64
  %633 = load i32, ptr %28, align 4, !tbaa !9
  %634 = zext i32 %633 to i64
  %635 = mul nsw i64 %632, %634
  %636 = load ptr, ptr %10, align 8, !tbaa !5
  %637 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %636, i32 0, i32 3
  %638 = load i32, ptr %637, align 4, !tbaa !34
  %639 = zext i32 %638 to i64
  %640 = mul nsw i64 %635, %639
  %641 = load i32, ptr %38, align 4, !tbaa !9
  %642 = zext i32 %641 to i64
  %643 = mul nsw i64 %640, %642
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef %622, i32 noundef %625, i32 noundef %628, i64 noundef %643)
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #3
  br label %644

644:                                              ; preds = %617, %612, %607
  %645 = load i32, ptr %13, align 4, !tbaa !9
  %646 = icmp eq i32 %645, 1
  br i1 %646, label %647, label %771

647:                                              ; preds = %644
  %648 = load i32, ptr %31, align 4, !tbaa !9
  %649 = icmp eq i32 %648, 0
  br i1 %649, label %650, label %771

650:                                              ; preds = %647
  %651 = load i32, ptr %17, align 4, !tbaa !9
  %652 = icmp eq i32 %651, 0
  br i1 %652, label %653, label %740

653:                                              ; preds = %650
  %654 = load ptr, ptr %8, align 8, !tbaa !5
  %655 = load ptr, ptr %10, align 8, !tbaa !5
  %656 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %655, i32 0, i32 0
  %657 = load i32, ptr %656, align 8, !tbaa !23
  %658 = load ptr, ptr %10, align 8, !tbaa !5
  %659 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %658, i32 0, i32 7
  %660 = load i32, ptr %659, align 4, !tbaa !38
  %661 = load ptr, ptr %9, align 8, !tbaa !5
  %662 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %661, i32 0, i32 3
  %663 = load i32, ptr %662, align 4, !tbaa !39
  %664 = load ptr, ptr %11, align 8, !tbaa !5
  %665 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %664, i32 0, i32 4
  %666 = load i32, ptr %665, align 1, !tbaa !40
  %667 = mul i32 %666, 0
  %668 = load ptr, ptr %10, align 8, !tbaa !5
  %669 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %668, i32 0, i32 4
  %670 = load i32, ptr %669, align 8, !tbaa !41
  %671 = mul i32 %667, %670
  %672 = add i32 %671, 0
  %673 = load i32, ptr %27, align 4, !tbaa !9
  %674 = mul i32 %673, 2
  %675 = load ptr, ptr %10, align 8, !tbaa !5
  %676 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %675, i32 0, i32 4
  %677 = load i32, ptr %676, align 8, !tbaa !41
  %678 = mul i32 %674, %677
  %679 = add i32 %672, %678
  %680 = load ptr, ptr %10, align 8, !tbaa !5
  %681 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %680, i32 0, i32 21
  %682 = load i8, ptr %681, align 4, !tbaa !29
  %683 = load i32, ptr %36, align 4, !tbaa !9
  call void @libxsmm_x86_instruction_vec_move(ptr noundef %654, i32 noundef %657, i32 noundef %660, i32 noundef %663, i32 noundef 127, i32 noundef 0, i32 noundef %679, i8 noundef signext %682, i32 noundef %683, i32 noundef 0, i32 noundef 1, i32 noundef 0)
  %684 = load i32, ptr %30, align 4, !tbaa !9
  %685 = icmp eq i32 %684, 0
  br i1 %685, label %691, label %686

686:                                              ; preds = %653
  %687 = load ptr, ptr %8, align 8, !tbaa !5
  %688 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %687, i32 0, i32 6
  %689 = load i32, ptr %688, align 4, !tbaa !20
  %690 = icmp uge i32 %689, 1008
  br i1 %690, label %691, label %725

691:                                              ; preds = %686, %653
  %692 = load ptr, ptr %8, align 8, !tbaa !5
  %693 = load ptr, ptr %10, align 8, !tbaa !5
  %694 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %693, i32 0, i32 0
  %695 = load i32, ptr %694, align 8, !tbaa !23
  %696 = load ptr, ptr %10, align 8, !tbaa !5
  %697 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %696, i32 0, i32 7
  %698 = load i32, ptr %697, align 4, !tbaa !38
  %699 = load ptr, ptr %9, align 8, !tbaa !5
  %700 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %699, i32 0, i32 3
  %701 = load i32, ptr %700, align 4, !tbaa !39
  %702 = load ptr, ptr %11, align 8, !tbaa !5
  %703 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %702, i32 0, i32 4
  %704 = load i32, ptr %703, align 1, !tbaa !40
  %705 = mul i32 %704, 0
  %706 = load ptr, ptr %10, align 8, !tbaa !5
  %707 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %706, i32 0, i32 4
  %708 = load i32, ptr %707, align 8, !tbaa !41
  %709 = mul i32 %705, %708
  %710 = load ptr, ptr %10, align 8, !tbaa !5
  %711 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %710, i32 0, i32 4
  %712 = load i32, ptr %711, align 8, !tbaa !41
  %713 = add i32 %709, %712
  %714 = load i32, ptr %27, align 4, !tbaa !9
  %715 = mul i32 %714, 2
  %716 = load ptr, ptr %10, align 8, !tbaa !5
  %717 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %716, i32 0, i32 4
  %718 = load i32, ptr %717, align 8, !tbaa !41
  %719 = mul i32 %715, %718
  %720 = add i32 %713, %719
  %721 = load ptr, ptr %10, align 8, !tbaa !5
  %722 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %721, i32 0, i32 21
  %723 = load i8, ptr %722, align 4, !tbaa !29
  %724 = load i32, ptr %37, align 4, !tbaa !9
  call void @libxsmm_x86_instruction_vec_move(ptr noundef %692, i32 noundef %695, i32 noundef %698, i32 noundef %701, i32 noundef 127, i32 noundef 0, i32 noundef %720, i8 noundef signext %723, i32 noundef %724, i32 noundef 0, i32 noundef 1, i32 noundef 0)
  br label %739

725:                                              ; preds = %686
  %726 = load ptr, ptr %8, align 8, !tbaa !5
  %727 = load ptr, ptr %10, align 8, !tbaa !5
  %728 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %727, i32 0, i32 21
  %729 = load i8, ptr %728, align 4, !tbaa !29
  %730 = load i32, ptr %36, align 4, !tbaa !9
  %731 = load i32, ptr %20, align 4, !tbaa !9
  %732 = load i32, ptr %37, align 4, !tbaa !9
  call void @libxsmm_x86_instruction_vec_compute_3reg(ptr noundef %726, i32 noundef 805639899, i8 noundef signext %729, i32 noundef %730, i32 noundef %731, i32 noundef %732)
  %733 = load ptr, ptr %8, align 8, !tbaa !5
  %734 = load ptr, ptr %10, align 8, !tbaa !5
  %735 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %734, i32 0, i32 21
  %736 = load i8, ptr %735, align 4, !tbaa !29
  %737 = load i32, ptr %36, align 4, !tbaa !9
  %738 = load i32, ptr %36, align 4, !tbaa !9
  call void @libxsmm_x86_instruction_vec_compute_2reg_imm8(ptr noundef %733, i32 noundef 611128946, i8 noundef signext %736, i32 noundef %737, i32 noundef %738, i32 noundef 16)
  br label %739

739:                                              ; preds = %725, %691
  br label %740

740:                                              ; preds = %739, %650
  %741 = load ptr, ptr %8, align 8, !tbaa !5
  %742 = load ptr, ptr %10, align 8, !tbaa !5
  %743 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %742, i32 0, i32 14
  %744 = load i32, ptr %743, align 8, !tbaa !42
  %745 = load ptr, ptr %10, align 8, !tbaa !5
  %746 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %745, i32 0, i32 21
  %747 = load i8, ptr %746, align 4, !tbaa !29
  %748 = load i32, ptr %36, align 4, !tbaa !9
  %749 = load i32, ptr %33, align 4, !tbaa !9
  %750 = load i32, ptr %19, align 4, !tbaa !9
  %751 = load i32, ptr %17, align 4, !tbaa !9
  %752 = add i32 %750, %751
  %753 = load i32, ptr %15, align 4, !tbaa !9
  %754 = mul i32 %753, 0
  %755 = add i32 %752, %754
  call void @libxsmm_x86_instruction_vec_compute_3reg(ptr noundef %741, i32 noundef %744, i8 noundef signext %747, i32 noundef %748, i32 noundef %749, i32 noundef %755)
  %756 = load ptr, ptr %8, align 8, !tbaa !5
  %757 = load ptr, ptr %10, align 8, !tbaa !5
  %758 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %757, i32 0, i32 14
  %759 = load i32, ptr %758, align 8, !tbaa !42
  %760 = load ptr, ptr %10, align 8, !tbaa !5
  %761 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %760, i32 0, i32 21
  %762 = load i8, ptr %761, align 4, !tbaa !29
  %763 = load i32, ptr %37, align 4, !tbaa !9
  %764 = load i32, ptr %34, align 4, !tbaa !9
  %765 = load i32, ptr %19, align 4, !tbaa !9
  %766 = load i32, ptr %17, align 4, !tbaa !9
  %767 = add i32 %765, %766
  %768 = load i32, ptr %15, align 4, !tbaa !9
  %769 = mul i32 %768, 0
  %770 = add i32 %767, %769
  call void @libxsmm_x86_instruction_vec_compute_3reg(ptr noundef %756, i32 noundef %759, i8 noundef signext %762, i32 noundef %763, i32 noundef %764, i32 noundef %770)
  br label %771

771:                                              ; preds = %740, %647, %644
  %772 = load i32, ptr %13, align 4, !tbaa !9
  %773 = icmp eq i32 %772, 1
  br i1 %773, label %774, label %836

774:                                              ; preds = %771
  %775 = load i32, ptr %31, align 4, !tbaa !9
  %776 = icmp ugt i32 %775, 0
  br i1 %776, label %777, label %836

777:                                              ; preds = %774
  %778 = load i32, ptr %17, align 4, !tbaa !9
  %779 = icmp eq i32 %778, 0
  br i1 %779, label %780, label %812

780:                                              ; preds = %777
  %781 = load ptr, ptr %8, align 8, !tbaa !5
  %782 = load ptr, ptr %10, align 8, !tbaa !5
  %783 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %782, i32 0, i32 0
  %784 = load i32, ptr %783, align 8, !tbaa !23
  %785 = load ptr, ptr %10, align 8, !tbaa !5
  %786 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %785, i32 0, i32 7
  %787 = load i32, ptr %786, align 4, !tbaa !38
  %788 = load ptr, ptr %9, align 8, !tbaa !5
  %789 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %788, i32 0, i32 3
  %790 = load i32, ptr %789, align 4, !tbaa !39
  %791 = load ptr, ptr %11, align 8, !tbaa !5
  %792 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %791, i32 0, i32 4
  %793 = load i32, ptr %792, align 1, !tbaa !40
  %794 = mul i32 %793, 0
  %795 = load ptr, ptr %10, align 8, !tbaa !5
  %796 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %795, i32 0, i32 4
  %797 = load i32, ptr %796, align 8, !tbaa !41
  %798 = mul i32 %794, %797
  %799 = add i32 %798, 0
  %800 = load i32, ptr %27, align 4, !tbaa !9
  %801 = load i32, ptr %32, align 4, !tbaa !9
  %802 = mul i32 %800, %801
  %803 = load ptr, ptr %10, align 8, !tbaa !5
  %804 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %803, i32 0, i32 4
  %805 = load i32, ptr %804, align 8, !tbaa !41
  %806 = mul i32 %802, %805
  %807 = add i32 %799, %806
  %808 = load ptr, ptr %10, align 8, !tbaa !5
  %809 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %808, i32 0, i32 21
  %810 = load i8, ptr %809, align 4, !tbaa !29
  %811 = load i32, ptr %36, align 4, !tbaa !9
  call void @libxsmm_x86_instruction_vec_move(ptr noundef %781, i32 noundef %784, i32 noundef %787, i32 noundef %790, i32 noundef 127, i32 noundef 0, i32 noundef %807, i8 noundef signext %810, i32 noundef %811, i32 noundef 0, i32 noundef 1, i32 noundef 0)
  br label %812

812:                                              ; preds = %780, %777
  %813 = load ptr, ptr %8, align 8, !tbaa !5
  %814 = load ptr, ptr %10, align 8, !tbaa !5
  %815 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %814, i32 0, i32 14
  %816 = load i32, ptr %815, align 8, !tbaa !42
  %817 = load ptr, ptr %10, align 8, !tbaa !5
  %818 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %817, i32 0, i32 21
  %819 = load i8, ptr %818, align 4, !tbaa !29
  %820 = load i32, ptr %36, align 4, !tbaa !9
  %821 = load i32, ptr %27, align 4, !tbaa !9
  %822 = urem i32 %821, 2
  %823 = icmp eq i32 %822, 0
  br i1 %823, label %824, label %826

824:                                              ; preds = %812
  %825 = load i32, ptr %33, align 4, !tbaa !9
  br label %828

826:                                              ; preds = %812
  %827 = load i32, ptr %34, align 4, !tbaa !9
  br label %828

828:                                              ; preds = %826, %824
  %829 = phi i32 [ %825, %824 ], [ %827, %826 ]
  %830 = load i32, ptr %19, align 4, !tbaa !9
  %831 = load i32, ptr %17, align 4, !tbaa !9
  %832 = add i32 %830, %831
  %833 = load i32, ptr %15, align 4, !tbaa !9
  %834 = mul i32 %833, 0
  %835 = add i32 %832, %834
  call void @libxsmm_x86_instruction_vec_compute_3reg(ptr noundef %813, i32 noundef %816, i8 noundef signext %819, i32 noundef %820, i32 noundef %829, i32 noundef %835)
  br label %836

836:                                              ; preds = %828, %774, %771
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #3
  br label %837

837:                                              ; preds = %836
  %838 = load i32, ptr %17, align 4, !tbaa !9
  %839 = add i32 %838, 1
  store i32 %839, ptr %17, align 4, !tbaa !9
  br label %254, !llvm.loop !43

840:                                              ; preds = %254
  %841 = load i32, ptr %13, align 4, !tbaa !9
  %842 = icmp ne i32 %841, 1
  br i1 %842, label %843, label %998

843:                                              ; preds = %840
  %844 = load i32, ptr %31, align 4, !tbaa !9
  %845 = icmp eq i32 %844, 0
  br i1 %845, label %846, label %998

846:                                              ; preds = %843
  store i32 0, ptr %16, align 4, !tbaa !9
  br label %847

847:                                              ; preds = %994, %846
  %848 = load i32, ptr %16, align 4, !tbaa !9
  %849 = load i32, ptr %13, align 4, !tbaa !9
  %850 = icmp ult i32 %848, %849
  br i1 %850, label %851, label %997

851:                                              ; preds = %847
  call void @llvm.lifetime.start.p0(i64 4, ptr %39) #3
  %852 = load i32, ptr %25, align 4, !tbaa !9
  store i32 %852, ptr %39, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %40) #3
  %853 = load i32, ptr %25, align 4, !tbaa !9
  %854 = add i32 %853, 1
  store i32 %854, ptr %40, align 4, !tbaa !9
  %855 = load ptr, ptr %8, align 8, !tbaa !5
  %856 = load ptr, ptr %10, align 8, !tbaa !5
  %857 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %856, i32 0, i32 0
  %858 = load i32, ptr %857, align 8, !tbaa !23
  %859 = load ptr, ptr %10, align 8, !tbaa !5
  %860 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %859, i32 0, i32 7
  %861 = load i32, ptr %860, align 4, !tbaa !38
  %862 = load ptr, ptr %9, align 8, !tbaa !5
  %863 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %862, i32 0, i32 3
  %864 = load i32, ptr %863, align 4, !tbaa !39
  %865 = load ptr, ptr %11, align 8, !tbaa !5
  %866 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %865, i32 0, i32 4
  %867 = load i32, ptr %866, align 1, !tbaa !40
  %868 = load i32, ptr %16, align 4, !tbaa !9
  %869 = mul i32 %867, %868
  %870 = load ptr, ptr %10, align 8, !tbaa !5
  %871 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %870, i32 0, i32 4
  %872 = load i32, ptr %871, align 8, !tbaa !41
  %873 = mul i32 %869, %872
  %874 = add i32 %873, 0
  %875 = load i32, ptr %27, align 4, !tbaa !9
  %876 = mul i32 %875, 2
  %877 = load ptr, ptr %10, align 8, !tbaa !5
  %878 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %877, i32 0, i32 4
  %879 = load i32, ptr %878, align 8, !tbaa !41
  %880 = mul i32 %876, %879
  %881 = add i32 %874, %880
  %882 = load ptr, ptr %10, align 8, !tbaa !5
  %883 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %882, i32 0, i32 21
  %884 = load i8, ptr %883, align 4, !tbaa !29
  %885 = load i32, ptr %39, align 4, !tbaa !9
  call void @libxsmm_x86_instruction_vec_move(ptr noundef %855, i32 noundef %858, i32 noundef %861, i32 noundef %864, i32 noundef 127, i32 noundef 0, i32 noundef %881, i8 noundef signext %884, i32 noundef %885, i32 noundef 0, i32 noundef 1, i32 noundef 0)
  %886 = load i32, ptr %30, align 4, !tbaa !9
  %887 = icmp eq i32 %886, 0
  br i1 %887, label %893, label %888

888:                                              ; preds = %851
  %889 = load ptr, ptr %8, align 8, !tbaa !5
  %890 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %889, i32 0, i32 6
  %891 = load i32, ptr %890, align 4, !tbaa !20
  %892 = icmp uge i32 %891, 1008
  br i1 %892, label %893, label %928

893:                                              ; preds = %888, %851
  %894 = load ptr, ptr %8, align 8, !tbaa !5
  %895 = load ptr, ptr %10, align 8, !tbaa !5
  %896 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %895, i32 0, i32 0
  %897 = load i32, ptr %896, align 8, !tbaa !23
  %898 = load ptr, ptr %10, align 8, !tbaa !5
  %899 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %898, i32 0, i32 7
  %900 = load i32, ptr %899, align 4, !tbaa !38
  %901 = load ptr, ptr %9, align 8, !tbaa !5
  %902 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %901, i32 0, i32 3
  %903 = load i32, ptr %902, align 4, !tbaa !39
  %904 = load ptr, ptr %11, align 8, !tbaa !5
  %905 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %904, i32 0, i32 4
  %906 = load i32, ptr %905, align 1, !tbaa !40
  %907 = load i32, ptr %16, align 4, !tbaa !9
  %908 = mul i32 %906, %907
  %909 = load ptr, ptr %10, align 8, !tbaa !5
  %910 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %909, i32 0, i32 4
  %911 = load i32, ptr %910, align 8, !tbaa !41
  %912 = mul i32 %908, %911
  %913 = load ptr, ptr %10, align 8, !tbaa !5
  %914 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %913, i32 0, i32 4
  %915 = load i32, ptr %914, align 8, !tbaa !41
  %916 = add i32 %912, %915
  %917 = load i32, ptr %27, align 4, !tbaa !9
  %918 = mul i32 %917, 2
  %919 = load ptr, ptr %10, align 8, !tbaa !5
  %920 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %919, i32 0, i32 4
  %921 = load i32, ptr %920, align 8, !tbaa !41
  %922 = mul i32 %918, %921
  %923 = add i32 %916, %922
  %924 = load ptr, ptr %10, align 8, !tbaa !5
  %925 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %924, i32 0, i32 21
  %926 = load i8, ptr %925, align 4, !tbaa !29
  %927 = load i32, ptr %40, align 4, !tbaa !9
  call void @libxsmm_x86_instruction_vec_move(ptr noundef %894, i32 noundef %897, i32 noundef %900, i32 noundef %903, i32 noundef 127, i32 noundef 0, i32 noundef %923, i8 noundef signext %926, i32 noundef %927, i32 noundef 0, i32 noundef 1, i32 noundef 0)
  br label %942

928:                                              ; preds = %888
  %929 = load ptr, ptr %8, align 8, !tbaa !5
  %930 = load ptr, ptr %10, align 8, !tbaa !5
  %931 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %930, i32 0, i32 21
  %932 = load i8, ptr %931, align 4, !tbaa !29
  %933 = load i32, ptr %39, align 4, !tbaa !9
  %934 = load i32, ptr %20, align 4, !tbaa !9
  %935 = load i32, ptr %40, align 4, !tbaa !9
  call void @libxsmm_x86_instruction_vec_compute_3reg(ptr noundef %929, i32 noundef 805639899, i8 noundef signext %932, i32 noundef %933, i32 noundef %934, i32 noundef %935)
  %936 = load ptr, ptr %8, align 8, !tbaa !5
  %937 = load ptr, ptr %10, align 8, !tbaa !5
  %938 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %937, i32 0, i32 21
  %939 = load i8, ptr %938, align 4, !tbaa !29
  %940 = load i32, ptr %39, align 4, !tbaa !9
  %941 = load i32, ptr %39, align 4, !tbaa !9
  call void @libxsmm_x86_instruction_vec_compute_2reg_imm8(ptr noundef %936, i32 noundef 611128946, i8 noundef signext %939, i32 noundef %940, i32 noundef %941, i32 noundef 16)
  br label %942

942:                                              ; preds = %928, %893
  store i32 0, ptr %17, align 4, !tbaa !9
  br label %943

943:                                              ; preds = %990, %942
  %944 = load i32, ptr %17, align 4, !tbaa !9
  %945 = load i32, ptr %15, align 4, !tbaa !9
  %946 = icmp ult i32 %944, %945
  br i1 %946, label %947, label %993

947:                                              ; preds = %943
  call void @llvm.lifetime.start.p0(i64 4, ptr %41) #3
  %948 = load i32, ptr %23, align 4, !tbaa !9
  %949 = load i32, ptr %17, align 4, !tbaa !9
  %950 = mul i32 2, %949
  %951 = add i32 %948, %950
  %952 = add i32 %951, 0
  store i32 %952, ptr %41, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %42) #3
  %953 = load i32, ptr %23, align 4, !tbaa !9
  %954 = load i32, ptr %17, align 4, !tbaa !9
  %955 = mul i32 2, %954
  %956 = add i32 %953, %955
  %957 = add i32 %956, 1
  store i32 %957, ptr %42, align 4, !tbaa !9
  %958 = load ptr, ptr %8, align 8, !tbaa !5
  %959 = load ptr, ptr %10, align 8, !tbaa !5
  %960 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %959, i32 0, i32 14
  %961 = load i32, ptr %960, align 8, !tbaa !42
  %962 = load ptr, ptr %10, align 8, !tbaa !5
  %963 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %962, i32 0, i32 21
  %964 = load i8, ptr %963, align 4, !tbaa !29
  %965 = load i32, ptr %39, align 4, !tbaa !9
  %966 = load i32, ptr %41, align 4, !tbaa !9
  %967 = load i32, ptr %19, align 4, !tbaa !9
  %968 = load i32, ptr %17, align 4, !tbaa !9
  %969 = add i32 %967, %968
  %970 = load i32, ptr %15, align 4, !tbaa !9
  %971 = load i32, ptr %16, align 4, !tbaa !9
  %972 = mul i32 %970, %971
  %973 = add i32 %969, %972
  call void @libxsmm_x86_instruction_vec_compute_3reg(ptr noundef %958, i32 noundef %961, i8 noundef signext %964, i32 noundef %965, i32 noundef %966, i32 noundef %973)
  %974 = load ptr, ptr %8, align 8, !tbaa !5
  %975 = load ptr, ptr %10, align 8, !tbaa !5
  %976 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %975, i32 0, i32 14
  %977 = load i32, ptr %976, align 8, !tbaa !42
  %978 = load ptr, ptr %10, align 8, !tbaa !5
  %979 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %978, i32 0, i32 21
  %980 = load i8, ptr %979, align 4, !tbaa !29
  %981 = load i32, ptr %40, align 4, !tbaa !9
  %982 = load i32, ptr %42, align 4, !tbaa !9
  %983 = load i32, ptr %19, align 4, !tbaa !9
  %984 = load i32, ptr %17, align 4, !tbaa !9
  %985 = add i32 %983, %984
  %986 = load i32, ptr %15, align 4, !tbaa !9
  %987 = load i32, ptr %16, align 4, !tbaa !9
  %988 = mul i32 %986, %987
  %989 = add i32 %985, %988
  call void @libxsmm_x86_instruction_vec_compute_3reg(ptr noundef %974, i32 noundef %977, i8 noundef signext %980, i32 noundef %981, i32 noundef %982, i32 noundef %989)
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #3
  br label %990

990:                                              ; preds = %947
  %991 = load i32, ptr %17, align 4, !tbaa !9
  %992 = add i32 %991, 1
  store i32 %992, ptr %17, align 4, !tbaa !9
  br label %943, !llvm.loop !44

993:                                              ; preds = %943
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #3
  br label %994

994:                                              ; preds = %993
  %995 = load i32, ptr %16, align 4, !tbaa !9
  %996 = add i32 %995, 1
  store i32 %996, ptr %16, align 4, !tbaa !9
  br label %847, !llvm.loop !45

997:                                              ; preds = %847
  br label %998

998:                                              ; preds = %997, %843, %840
  %999 = load i32, ptr %13, align 4, !tbaa !9
  %1000 = icmp ne i32 %999, 1
  br i1 %1000, label %1001, label %1090

1001:                                             ; preds = %998
  %1002 = load i32, ptr %31, align 4, !tbaa !9
  %1003 = icmp ugt i32 %1002, 0
  br i1 %1003, label %1004, label %1090

1004:                                             ; preds = %1001
  store i32 0, ptr %16, align 4, !tbaa !9
  br label %1005

1005:                                             ; preds = %1086, %1004
  %1006 = load i32, ptr %16, align 4, !tbaa !9
  %1007 = load i32, ptr %13, align 4, !tbaa !9
  %1008 = icmp ult i32 %1006, %1007
  br i1 %1008, label %1009, label %1089

1009:                                             ; preds = %1005
  call void @llvm.lifetime.start.p0(i64 4, ptr %43) #3
  %1010 = load i32, ptr %25, align 4, !tbaa !9
  store i32 %1010, ptr %43, align 4, !tbaa !9
  %1011 = load ptr, ptr %8, align 8, !tbaa !5
  %1012 = load ptr, ptr %10, align 8, !tbaa !5
  %1013 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1012, i32 0, i32 0
  %1014 = load i32, ptr %1013, align 8, !tbaa !23
  %1015 = load ptr, ptr %10, align 8, !tbaa !5
  %1016 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1015, i32 0, i32 7
  %1017 = load i32, ptr %1016, align 4, !tbaa !38
  %1018 = load ptr, ptr %9, align 8, !tbaa !5
  %1019 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %1018, i32 0, i32 3
  %1020 = load i32, ptr %1019, align 4, !tbaa !39
  %1021 = load ptr, ptr %11, align 8, !tbaa !5
  %1022 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %1021, i32 0, i32 4
  %1023 = load i32, ptr %1022, align 1, !tbaa !40
  %1024 = load i32, ptr %16, align 4, !tbaa !9
  %1025 = mul i32 %1023, %1024
  %1026 = load ptr, ptr %10, align 8, !tbaa !5
  %1027 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1026, i32 0, i32 4
  %1028 = load i32, ptr %1027, align 8, !tbaa !41
  %1029 = mul i32 %1025, %1028
  %1030 = add i32 %1029, 0
  %1031 = load i32, ptr %27, align 4, !tbaa !9
  %1032 = load i32, ptr %32, align 4, !tbaa !9
  %1033 = mul i32 %1031, %1032
  %1034 = load ptr, ptr %10, align 8, !tbaa !5
  %1035 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1034, i32 0, i32 4
  %1036 = load i32, ptr %1035, align 8, !tbaa !41
  %1037 = mul i32 %1033, %1036
  %1038 = add i32 %1030, %1037
  %1039 = load ptr, ptr %10, align 8, !tbaa !5
  %1040 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1039, i32 0, i32 21
  %1041 = load i8, ptr %1040, align 4, !tbaa !29
  %1042 = load i32, ptr %43, align 4, !tbaa !9
  call void @libxsmm_x86_instruction_vec_move(ptr noundef %1011, i32 noundef %1014, i32 noundef %1017, i32 noundef %1020, i32 noundef 127, i32 noundef 0, i32 noundef %1038, i8 noundef signext %1041, i32 noundef %1042, i32 noundef 0, i32 noundef 1, i32 noundef 0)
  store i32 0, ptr %17, align 4, !tbaa !9
  br label %1043

1043:                                             ; preds = %1082, %1009
  %1044 = load i32, ptr %17, align 4, !tbaa !9
  %1045 = load i32, ptr %15, align 4, !tbaa !9
  %1046 = icmp ult i32 %1044, %1045
  br i1 %1046, label %1047, label %1085

1047:                                             ; preds = %1043
  call void @llvm.lifetime.start.p0(i64 4, ptr %44) #3
  %1048 = load i32, ptr %23, align 4, !tbaa !9
  %1049 = load i32, ptr %17, align 4, !tbaa !9
  %1050 = mul i32 2, %1049
  %1051 = add i32 %1048, %1050
  %1052 = add i32 %1051, 0
  store i32 %1052, ptr %44, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %45) #3
  %1053 = load i32, ptr %23, align 4, !tbaa !9
  %1054 = load i32, ptr %17, align 4, !tbaa !9
  %1055 = mul i32 2, %1054
  %1056 = add i32 %1053, %1055
  %1057 = add i32 %1056, 1
  store i32 %1057, ptr %45, align 4, !tbaa !9
  %1058 = load ptr, ptr %8, align 8, !tbaa !5
  %1059 = load ptr, ptr %10, align 8, !tbaa !5
  %1060 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1059, i32 0, i32 14
  %1061 = load i32, ptr %1060, align 8, !tbaa !42
  %1062 = load ptr, ptr %10, align 8, !tbaa !5
  %1063 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1062, i32 0, i32 21
  %1064 = load i8, ptr %1063, align 4, !tbaa !29
  %1065 = load i32, ptr %43, align 4, !tbaa !9
  %1066 = load i32, ptr %27, align 4, !tbaa !9
  %1067 = urem i32 %1066, 2
  %1068 = icmp eq i32 %1067, 0
  br i1 %1068, label %1069, label %1071

1069:                                             ; preds = %1047
  %1070 = load i32, ptr %44, align 4, !tbaa !9
  br label %1073

1071:                                             ; preds = %1047
  %1072 = load i32, ptr %45, align 4, !tbaa !9
  br label %1073

1073:                                             ; preds = %1071, %1069
  %1074 = phi i32 [ %1070, %1069 ], [ %1072, %1071 ]
  %1075 = load i32, ptr %19, align 4, !tbaa !9
  %1076 = load i32, ptr %17, align 4, !tbaa !9
  %1077 = add i32 %1075, %1076
  %1078 = load i32, ptr %15, align 4, !tbaa !9
  %1079 = load i32, ptr %16, align 4, !tbaa !9
  %1080 = mul i32 %1078, %1079
  %1081 = add i32 %1077, %1080
  call void @libxsmm_x86_instruction_vec_compute_3reg(ptr noundef %1058, i32 noundef %1061, i8 noundef signext %1064, i32 noundef %1065, i32 noundef %1074, i32 noundef %1081)
  call void @llvm.lifetime.end.p0(i64 4, ptr %45) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #3
  br label %1082

1082:                                             ; preds = %1073
  %1083 = load i32, ptr %17, align 4, !tbaa !9
  %1084 = add i32 %1083, 1
  store i32 %1084, ptr %17, align 4, !tbaa !9
  br label %1043, !llvm.loop !46

1085:                                             ; preds = %1043
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #3
  br label %1086

1086:                                             ; preds = %1085
  %1087 = load i32, ptr %16, align 4, !tbaa !9
  %1088 = add i32 %1087, 1
  store i32 %1088, ptr %16, align 4, !tbaa !9
  br label %1005, !llvm.loop !47

1089:                                             ; preds = %1005
  br label %1090

1090:                                             ; preds = %1089, %1001, %998
  br label %1091

1091:                                             ; preds = %1090
  %1092 = load i32, ptr %27, align 4, !tbaa !9
  %1093 = add i32 %1092, 1
  store i32 %1093, ptr %27, align 4, !tbaa !9
  br label %249, !llvm.loop !48

1094:                                             ; preds = %249
  %1095 = load ptr, ptr %8, align 8, !tbaa !5
  %1096 = load ptr, ptr %10, align 8, !tbaa !5
  %1097 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1096, i32 0, i32 16
  %1098 = load i32, ptr %1097, align 8, !tbaa !37
  %1099 = load ptr, ptr %9, align 8, !tbaa !5
  %1100 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %1099, i32 0, i32 3
  %1101 = load i32, ptr %1100, align 4, !tbaa !39
  %1102 = load i32, ptr %32, align 4, !tbaa !9
  %1103 = zext i32 %1102 to i64
  %1104 = load i32, ptr %28, align 4, !tbaa !9
  %1105 = zext i32 %1104 to i64
  %1106 = mul nsw i64 %1103, %1105
  %1107 = load ptr, ptr %10, align 8, !tbaa !5
  %1108 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1107, i32 0, i32 4
  %1109 = load i32, ptr %1108, align 8, !tbaa !41
  %1110 = zext i32 %1109 to i64
  %1111 = mul nsw i64 %1106, %1110
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef %1095, i32 noundef %1098, i32 noundef %1101, i64 noundef %1111)
  %1112 = load i32, ptr %32, align 4, !tbaa !9
  %1113 = udiv i32 32, %1112
  %1114 = load i32, ptr %28, align 4, !tbaa !9
  %1115 = udiv i32 %1113, %1114
  %1116 = icmp ugt i32 %1115, 1
  br i1 %1116, label %1117, label %1129

1117:                                             ; preds = %1094
  %1118 = load ptr, ptr %8, align 8, !tbaa !5
  %1119 = load ptr, ptr %10, align 8, !tbaa !5
  %1120 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1119, i32 0, i32 108
  %1121 = load ptr, ptr %1120, align 8, !tbaa !26
  %1122 = load ptr, ptr %9, align 8, !tbaa !5
  %1123 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %1122, i32 0, i32 22
  %1124 = load i32, ptr %1123, align 4, !tbaa !22
  %1125 = load i32, ptr %32, align 4, !tbaa !9
  %1126 = udiv i32 32, %1125
  %1127 = load i32, ptr %28, align 4, !tbaa !9
  %1128 = udiv i32 %1126, %1127
  call void @libxsmm_generator_generic_loop_footer_with_idx_inc(ptr noundef %1118, ptr noundef %1121, i32 noundef %1124, i32 noundef 1, i32 noundef %1128)
  br label %1129

1129:                                             ; preds = %1117, %1094
  %1130 = load i32, ptr %31, align 4, !tbaa !9
  %1131 = icmp ugt i32 %1130, 0
  br i1 %1131, label %1132, label %1284

1132:                                             ; preds = %1129
  store i32 0, ptr %17, align 4, !tbaa !9
  br label %1133

1133:                                             ; preds = %1280, %1132
  %1134 = load i32, ptr %17, align 4, !tbaa !9
  %1135 = load i32, ptr %15, align 4, !tbaa !9
  %1136 = icmp ult i32 %1134, %1135
  br i1 %1136, label %1137, label %1283

1137:                                             ; preds = %1133
  call void @llvm.lifetime.start.p0(i64 4, ptr %46) #3
  %1138 = load i32, ptr %24, align 4, !tbaa !9
  store i32 %1138, ptr %46, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %47) #3
  %1139 = load i32, ptr %24, align 4, !tbaa !9
  %1140 = add i32 %1139, 1
  store i32 %1140, ptr %47, align 4, !tbaa !9
  %1141 = load i32, ptr %17, align 4, !tbaa !9
  %1142 = load i32, ptr %15, align 4, !tbaa !9
  %1143 = sub i32 %1142, 1
  %1144 = icmp eq i32 %1141, %1143
  br i1 %1144, label %1145, label %1179

1145:                                             ; preds = %1137
  %1146 = load ptr, ptr %10, align 8, !tbaa !5
  %1147 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1146, i32 0, i32 11
  %1148 = load i32, ptr %1147, align 4, !tbaa !25
  %1149 = icmp ne i32 %1148, 0
  br i1 %1149, label %1150, label %1179

1150:                                             ; preds = %1145
  %1151 = load ptr, ptr %8, align 8, !tbaa !5
  %1152 = load ptr, ptr %9, align 8, !tbaa !5
  %1153 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %1152, i32 0, i32 23
  %1154 = load i32, ptr %1153, align 4, !tbaa !36
  %1155 = load ptr, ptr %9, align 8, !tbaa !5
  %1156 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %1155, i32 0, i32 20
  %1157 = load i32, ptr %1156, align 4, !tbaa !18
  %1158 = load ptr, ptr %10, align 8, !tbaa !5
  %1159 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1158, i32 0, i32 3
  %1160 = load i32, ptr %1159, align 4, !tbaa !34
  %1161 = load ptr, ptr %10, align 8, !tbaa !5
  %1162 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1161, i32 0, i32 2
  %1163 = load i32, ptr %1162, align 8, !tbaa !11
  %1164 = mul i32 %1160, %1163
  %1165 = load i32, ptr %17, align 4, !tbaa !9
  %1166 = mul i32 %1164, %1165
  %1167 = load i32, ptr %46, align 4, !tbaa !9
  %1168 = load i32, ptr %12, align 4, !tbaa !9
  %1169 = load ptr, ptr %10, align 8, !tbaa !5
  %1170 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1169, i32 0, i32 2
  %1171 = load i32, ptr %1170, align 8, !tbaa !11
  %1172 = urem i32 %1168, %1171
  call void @libxsmm_generator_maskedload_8bit_avx2(ptr noundef %1151, i32 noundef %1154, i32 noundef %1157, i32 noundef 127, i32 noundef 0, i32 noundef %1166, i32 noundef %1167, i32 noundef %1172)
  %1173 = load ptr, ptr %8, align 8, !tbaa !5
  %1174 = load ptr, ptr %10, align 8, !tbaa !5
  %1175 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1174, i32 0, i32 21
  %1176 = load i8, ptr %1175, align 4, !tbaa !29
  %1177 = load i32, ptr %46, align 4, !tbaa !9
  %1178 = load i32, ptr %46, align 4, !tbaa !9
  call void @libxsmm_x86_instruction_vec_compute_2reg(ptr noundef %1173, i32 noundef 537207857, i8 noundef signext %1176, i32 noundef %1177, i32 noundef %1178)
  br label %1200

1179:                                             ; preds = %1145, %1137
  %1180 = load ptr, ptr %8, align 8, !tbaa !5
  %1181 = load ptr, ptr %8, align 8, !tbaa !5
  %1182 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %1181, i32 0, i32 6
  %1183 = load i32, ptr %1182, align 4, !tbaa !20
  %1184 = load ptr, ptr %9, align 8, !tbaa !5
  %1185 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %1184, i32 0, i32 20
  %1186 = load i32, ptr %1185, align 4, !tbaa !18
  %1187 = load ptr, ptr %10, align 8, !tbaa !5
  %1188 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1187, i32 0, i32 3
  %1189 = load i32, ptr %1188, align 4, !tbaa !34
  %1190 = load ptr, ptr %10, align 8, !tbaa !5
  %1191 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1190, i32 0, i32 2
  %1192 = load i32, ptr %1191, align 8, !tbaa !11
  %1193 = mul i32 %1189, %1192
  %1194 = load i32, ptr %17, align 4, !tbaa !9
  %1195 = mul i32 %1193, %1194
  %1196 = load ptr, ptr %10, align 8, !tbaa !5
  %1197 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1196, i32 0, i32 21
  %1198 = load i8, ptr %1197, align 4, !tbaa !29
  %1199 = load i32, ptr %46, align 4, !tbaa !9
  call void @libxsmm_x86_instruction_vec_move(ptr noundef %1180, i32 noundef %1183, i32 noundef 537207857, i32 noundef %1186, i32 noundef 127, i32 noundef 0, i32 noundef %1195, i8 noundef signext %1198, i32 noundef %1199, i32 noundef 0, i32 noundef 0, i32 noundef 0)
  br label %1200

1200:                                             ; preds = %1179, %1150
  %1201 = load ptr, ptr %8, align 8, !tbaa !5
  %1202 = load ptr, ptr %10, align 8, !tbaa !5
  %1203 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1202, i32 0, i32 21
  %1204 = load i8, ptr %1203, align 4, !tbaa !29
  %1205 = load i32, ptr %46, align 4, !tbaa !9
  %1206 = load i32, ptr %46, align 4, !tbaa !9
  call void @libxsmm_x86_instruction_vec_compute_2reg_imm8(ptr noundef %1201, i32 noundef 611128946, i8 noundef signext %1204, i32 noundef %1205, i32 noundef %1206, i32 noundef 23)
  store i32 0, ptr %16, align 4, !tbaa !9
  br label %1207

1207:                                             ; preds = %1276, %1200
  %1208 = load i32, ptr %16, align 4, !tbaa !9
  %1209 = load i32, ptr %13, align 4, !tbaa !9
  %1210 = icmp ult i32 %1208, %1209
  br i1 %1210, label %1211, label %1279

1211:                                             ; preds = %1207
  %1212 = load ptr, ptr %8, align 8, !tbaa !5
  %1213 = load ptr, ptr %10, align 8, !tbaa !5
  %1214 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1213, i32 0, i32 21
  %1215 = load i8, ptr %1214, align 4, !tbaa !29
  %1216 = load i32, ptr %19, align 4, !tbaa !9
  %1217 = load i32, ptr %17, align 4, !tbaa !9
  %1218 = add i32 %1216, %1217
  %1219 = load i32, ptr %15, align 4, !tbaa !9
  %1220 = load i32, ptr %16, align 4, !tbaa !9
  %1221 = mul i32 %1219, %1220
  %1222 = add i32 %1218, %1221
  %1223 = load i32, ptr %19, align 4, !tbaa !9
  %1224 = load i32, ptr %17, align 4, !tbaa !9
  %1225 = add i32 %1223, %1224
  %1226 = load i32, ptr %15, align 4, !tbaa !9
  %1227 = load i32, ptr %16, align 4, !tbaa !9
  %1228 = mul i32 %1226, %1227
  %1229 = add i32 %1225, %1228
  call void @libxsmm_x86_instruction_vec_compute_2reg(ptr noundef %1212, i32 noundef 537138779, i8 noundef signext %1215, i32 noundef %1222, i32 noundef %1229)
  %1230 = load ptr, ptr %8, align 8, !tbaa !5
  %1231 = load ptr, ptr %10, align 8, !tbaa !5
  %1232 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1231, i32 0, i32 0
  %1233 = load i32, ptr %1232, align 8, !tbaa !23
  %1234 = load ptr, ptr %10, align 8, !tbaa !5
  %1235 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1234, i32 0, i32 7
  %1236 = load i32, ptr %1235, align 4, !tbaa !38
  %1237 = load ptr, ptr %9, align 8, !tbaa !5
  %1238 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %1237, i32 0, i32 21
  %1239 = load i32, ptr %1238, align 4, !tbaa !24
  %1240 = load ptr, ptr %11, align 8, !tbaa !5
  %1241 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %1240, i32 0, i32 4
  %1242 = load i32, ptr %1241, align 1, !tbaa !40
  %1243 = udiv i32 %1242, 8
  %1244 = load i32, ptr %16, align 4, !tbaa !9
  %1245 = mul i32 %1243, %1244
  %1246 = load ptr, ptr %10, align 8, !tbaa !5
  %1247 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1246, i32 0, i32 21
  %1248 = load i8, ptr %1247, align 4, !tbaa !29
  %1249 = load i32, ptr %47, align 4, !tbaa !9
  call void @libxsmm_x86_instruction_vec_move(ptr noundef %1230, i32 noundef %1233, i32 noundef %1236, i32 noundef %1239, i32 noundef 127, i32 noundef 0, i32 noundef %1245, i8 noundef signext %1248, i32 noundef %1249, i32 noundef 0, i32 noundef 1, i32 noundef 0)
  %1250 = load ptr, ptr %8, align 8, !tbaa !5
  %1251 = load ptr, ptr %10, align 8, !tbaa !5
  %1252 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1251, i32 0, i32 21
  %1253 = load i8, ptr %1252, align 4, !tbaa !29
  %1254 = load i32, ptr %47, align 4, !tbaa !9
  %1255 = load i32, ptr %46, align 4, !tbaa !9
  %1256 = load i32, ptr %47, align 4, !tbaa !9
  call void @libxsmm_x86_instruction_vec_compute_3reg(ptr noundef %1250, i32 noundef 805574233, i8 noundef signext %1253, i32 noundef %1254, i32 noundef %1255, i32 noundef %1256)
  %1257 = load ptr, ptr %8, align 8, !tbaa !5
  %1258 = load ptr, ptr %10, align 8, !tbaa !5
  %1259 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1258, i32 0, i32 21
  %1260 = load i8, ptr %1259, align 4, !tbaa !29
  %1261 = load i32, ptr %19, align 4, !tbaa !9
  %1262 = load i32, ptr %17, align 4, !tbaa !9
  %1263 = add i32 %1261, %1262
  %1264 = load i32, ptr %15, align 4, !tbaa !9
  %1265 = load i32, ptr %16, align 4, !tbaa !9
  %1266 = mul i32 %1264, %1265
  %1267 = add i32 %1263, %1266
  %1268 = load i32, ptr %47, align 4, !tbaa !9
  %1269 = load i32, ptr %18, align 4, !tbaa !9
  %1270 = load i32, ptr %17, align 4, !tbaa !9
  %1271 = add i32 %1269, %1270
  %1272 = load i32, ptr %15, align 4, !tbaa !9
  %1273 = load i32, ptr %16, align 4, !tbaa !9
  %1274 = mul i32 %1272, %1273
  %1275 = add i32 %1271, %1274
  call void @libxsmm_x86_instruction_vec_compute_3reg(ptr noundef %1257, i32 noundef 805643960, i8 noundef signext %1260, i32 noundef %1267, i32 noundef %1268, i32 noundef %1275)
  br label %1276

1276:                                             ; preds = %1211
  %1277 = load i32, ptr %16, align 4, !tbaa !9
  %1278 = add i32 %1277, 1
  store i32 %1278, ptr %16, align 4, !tbaa !9
  br label %1207, !llvm.loop !49

1279:                                             ; preds = %1207
  call void @llvm.lifetime.end.p0(i64 4, ptr %47) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %46) #3
  br label %1280

1280:                                             ; preds = %1279
  %1281 = load i32, ptr %17, align 4, !tbaa !9
  %1282 = add i32 %1281, 1
  store i32 %1282, ptr %17, align 4, !tbaa !9
  br label %1133, !llvm.loop !50

1283:                                             ; preds = %1133
  br label %1394

1284:                                             ; preds = %1129
  store i32 0, ptr %17, align 4, !tbaa !9
  br label %1285

1285:                                             ; preds = %1390, %1284
  %1286 = load i32, ptr %17, align 4, !tbaa !9
  %1287 = load i32, ptr %15, align 4, !tbaa !9
  %1288 = icmp ult i32 %1286, %1287
  br i1 %1288, label %1289, label %1393

1289:                                             ; preds = %1285
  call void @llvm.lifetime.start.p0(i64 4, ptr %48) #3
  %1290 = load i32, ptr %24, align 4, !tbaa !9
  %1291 = load i32, ptr %17, align 4, !tbaa !9
  %1292 = add i32 %1290, %1291
  store i32 %1292, ptr %48, align 4, !tbaa !9
  %1293 = load i32, ptr %17, align 4, !tbaa !9
  %1294 = load i32, ptr %15, align 4, !tbaa !9
  %1295 = sub i32 %1294, 1
  %1296 = icmp eq i32 %1293, %1295
  br i1 %1296, label %1297, label %1331

1297:                                             ; preds = %1289
  %1298 = load ptr, ptr %10, align 8, !tbaa !5
  %1299 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1298, i32 0, i32 11
  %1300 = load i32, ptr %1299, align 4, !tbaa !25
  %1301 = icmp ne i32 %1300, 0
  br i1 %1301, label %1302, label %1331

1302:                                             ; preds = %1297
  %1303 = load ptr, ptr %8, align 8, !tbaa !5
  %1304 = load ptr, ptr %9, align 8, !tbaa !5
  %1305 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %1304, i32 0, i32 23
  %1306 = load i32, ptr %1305, align 4, !tbaa !36
  %1307 = load ptr, ptr %9, align 8, !tbaa !5
  %1308 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %1307, i32 0, i32 20
  %1309 = load i32, ptr %1308, align 4, !tbaa !18
  %1310 = load ptr, ptr %10, align 8, !tbaa !5
  %1311 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1310, i32 0, i32 3
  %1312 = load i32, ptr %1311, align 4, !tbaa !34
  %1313 = load ptr, ptr %10, align 8, !tbaa !5
  %1314 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1313, i32 0, i32 2
  %1315 = load i32, ptr %1314, align 8, !tbaa !11
  %1316 = mul i32 %1312, %1315
  %1317 = load i32, ptr %17, align 4, !tbaa !9
  %1318 = mul i32 %1316, %1317
  %1319 = load i32, ptr %48, align 4, !tbaa !9
  %1320 = load i32, ptr %12, align 4, !tbaa !9
  %1321 = load ptr, ptr %10, align 8, !tbaa !5
  %1322 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1321, i32 0, i32 2
  %1323 = load i32, ptr %1322, align 8, !tbaa !11
  %1324 = urem i32 %1320, %1323
  call void @libxsmm_generator_maskedload_8bit_avx2(ptr noundef %1303, i32 noundef %1306, i32 noundef %1309, i32 noundef 127, i32 noundef 0, i32 noundef %1318, i32 noundef %1319, i32 noundef %1324)
  %1325 = load ptr, ptr %8, align 8, !tbaa !5
  %1326 = load ptr, ptr %10, align 8, !tbaa !5
  %1327 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1326, i32 0, i32 21
  %1328 = load i8, ptr %1327, align 4, !tbaa !29
  %1329 = load i32, ptr %48, align 4, !tbaa !9
  %1330 = load i32, ptr %48, align 4, !tbaa !9
  call void @libxsmm_x86_instruction_vec_compute_2reg(ptr noundef %1325, i32 noundef 537207857, i8 noundef signext %1328, i32 noundef %1329, i32 noundef %1330)
  br label %1352

1331:                                             ; preds = %1297, %1289
  %1332 = load ptr, ptr %8, align 8, !tbaa !5
  %1333 = load ptr, ptr %8, align 8, !tbaa !5
  %1334 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %1333, i32 0, i32 6
  %1335 = load i32, ptr %1334, align 4, !tbaa !20
  %1336 = load ptr, ptr %9, align 8, !tbaa !5
  %1337 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %1336, i32 0, i32 20
  %1338 = load i32, ptr %1337, align 4, !tbaa !18
  %1339 = load ptr, ptr %10, align 8, !tbaa !5
  %1340 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1339, i32 0, i32 3
  %1341 = load i32, ptr %1340, align 4, !tbaa !34
  %1342 = load ptr, ptr %10, align 8, !tbaa !5
  %1343 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1342, i32 0, i32 2
  %1344 = load i32, ptr %1343, align 8, !tbaa !11
  %1345 = mul i32 %1341, %1344
  %1346 = load i32, ptr %17, align 4, !tbaa !9
  %1347 = mul i32 %1345, %1346
  %1348 = load ptr, ptr %10, align 8, !tbaa !5
  %1349 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1348, i32 0, i32 21
  %1350 = load i8, ptr %1349, align 4, !tbaa !29
  %1351 = load i32, ptr %48, align 4, !tbaa !9
  call void @libxsmm_x86_instruction_vec_move(ptr noundef %1332, i32 noundef %1335, i32 noundef 537207857, i32 noundef %1338, i32 noundef 127, i32 noundef 0, i32 noundef %1347, i8 noundef signext %1350, i32 noundef %1351, i32 noundef 0, i32 noundef 0, i32 noundef 0)
  br label %1352

1352:                                             ; preds = %1331, %1302
  %1353 = load ptr, ptr %8, align 8, !tbaa !5
  %1354 = load ptr, ptr %10, align 8, !tbaa !5
  %1355 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1354, i32 0, i32 21
  %1356 = load i8, ptr %1355, align 4, !tbaa !29
  %1357 = load i32, ptr %48, align 4, !tbaa !9
  %1358 = load i32, ptr %48, align 4, !tbaa !9
  call void @libxsmm_x86_instruction_vec_compute_2reg_imm8(ptr noundef %1353, i32 noundef 611128946, i8 noundef signext %1356, i32 noundef %1357, i32 noundef %1358, i32 noundef 23)
  store i32 0, ptr %16, align 4, !tbaa !9
  br label %1359

1359:                                             ; preds = %1386, %1352
  %1360 = load i32, ptr %16, align 4, !tbaa !9
  %1361 = load i32, ptr %13, align 4, !tbaa !9
  %1362 = icmp ult i32 %1360, %1361
  br i1 %1362, label %1363, label %1389

1363:                                             ; preds = %1359
  %1364 = load ptr, ptr %8, align 8, !tbaa !5
  %1365 = load ptr, ptr %10, align 8, !tbaa !5
  %1366 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1365, i32 0, i32 14
  %1367 = load i32, ptr %1366, align 8, !tbaa !42
  %1368 = load ptr, ptr %10, align 8, !tbaa !5
  %1369 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1368, i32 0, i32 21
  %1370 = load i8, ptr %1369, align 4, !tbaa !29
  %1371 = load i32, ptr %19, align 4, !tbaa !9
  %1372 = load i32, ptr %17, align 4, !tbaa !9
  %1373 = add i32 %1371, %1372
  %1374 = load i32, ptr %15, align 4, !tbaa !9
  %1375 = load i32, ptr %16, align 4, !tbaa !9
  %1376 = mul i32 %1374, %1375
  %1377 = add i32 %1373, %1376
  %1378 = load i32, ptr %48, align 4, !tbaa !9
  %1379 = load i32, ptr %18, align 4, !tbaa !9
  %1380 = load i32, ptr %17, align 4, !tbaa !9
  %1381 = add i32 %1379, %1380
  %1382 = load i32, ptr %15, align 4, !tbaa !9
  %1383 = load i32, ptr %16, align 4, !tbaa !9
  %1384 = mul i32 %1382, %1383
  %1385 = add i32 %1381, %1384
  call void @libxsmm_x86_instruction_vec_compute_3reg(ptr noundef %1364, i32 noundef %1367, i8 noundef signext %1370, i32 noundef %1377, i32 noundef %1378, i32 noundef %1385)
  br label %1386

1386:                                             ; preds = %1363
  %1387 = load i32, ptr %16, align 4, !tbaa !9
  %1388 = add i32 %1387, 1
  store i32 %1388, ptr %16, align 4, !tbaa !9
  br label %1359, !llvm.loop !51

1389:                                             ; preds = %1359
  call void @llvm.lifetime.end.p0(i64 4, ptr %48) #3
  br label %1390

1390:                                             ; preds = %1389
  %1391 = load i32, ptr %17, align 4, !tbaa !9
  %1392 = add i32 %1391, 1
  store i32 %1392, ptr %17, align 4, !tbaa !9
  br label %1285, !llvm.loop !52

1393:                                             ; preds = %1285
  br label %1394

1394:                                             ; preds = %1393, %1283
  %1395 = load i32, ptr %14, align 4, !tbaa !9
  %1396 = icmp sgt i32 %1395, 32
  br i1 %1396, label %1397, label %1438

1397:                                             ; preds = %1394
  %1398 = load ptr, ptr %8, align 8, !tbaa !5
  %1399 = load ptr, ptr %10, align 8, !tbaa !5
  %1400 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1399, i32 0, i32 16
  %1401 = load i32, ptr %1400, align 8, !tbaa !37
  %1402 = load ptr, ptr %9, align 8, !tbaa !5
  %1403 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %1402, i32 0, i32 20
  %1404 = load i32, ptr %1403, align 4, !tbaa !18
  %1405 = load ptr, ptr %11, align 8, !tbaa !5
  %1406 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %1405, i32 0, i32 3
  %1407 = load i32, ptr %1406, align 1, !tbaa !35
  %1408 = zext i32 %1407 to i64
  %1409 = load ptr, ptr %10, align 8, !tbaa !5
  %1410 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1409, i32 0, i32 3
  %1411 = load i32, ptr %1410, align 4, !tbaa !34
  %1412 = zext i32 %1411 to i64
  %1413 = mul nsw i64 %1408, %1412
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef %1398, i32 noundef %1401, i32 noundef %1404, i64 noundef %1413)
  %1414 = load i32, ptr %31, align 4, !tbaa !9
  %1415 = icmp ugt i32 %1414, 0
  br i1 %1415, label %1416, label %1429

1416:                                             ; preds = %1397
  %1417 = load ptr, ptr %8, align 8, !tbaa !5
  %1418 = load ptr, ptr %10, align 8, !tbaa !5
  %1419 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1418, i32 0, i32 16
  %1420 = load i32, ptr %1419, align 8, !tbaa !37
  %1421 = load ptr, ptr %9, align 8, !tbaa !5
  %1422 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %1421, i32 0, i32 21
  %1423 = load i32, ptr %1422, align 4, !tbaa !24
  %1424 = load ptr, ptr %10, align 8, !tbaa !5
  %1425 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1424, i32 0, i32 4
  %1426 = load i32, ptr %1425, align 8, !tbaa !41
  %1427 = zext i32 %1426 to i64
  %1428 = mul nsw i64 4, %1427
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef %1417, i32 noundef %1420, i32 noundef %1423, i64 noundef %1428)
  br label %1429

1429:                                             ; preds = %1416, %1397
  %1430 = load ptr, ptr %8, align 8, !tbaa !5
  %1431 = load ptr, ptr %10, align 8, !tbaa !5
  %1432 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %1431, i32 0, i32 108
  %1433 = load ptr, ptr %1432, align 8, !tbaa !26
  %1434 = load ptr, ptr %9, align 8, !tbaa !5
  %1435 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %1434, i32 0, i32 12
  %1436 = load i32, ptr %1435, align 4, !tbaa !27
  %1437 = load i32, ptr %14, align 4, !tbaa !9
  call void @libxsmm_generator_generic_loop_footer_with_idx_inc(ptr noundef %1430, ptr noundef %1433, i32 noundef %1436, i32 noundef 32, i32 noundef %1437)
  br label %1438

1438:                                             ; preds = %1429, %1394
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #3
  ret void
}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

declare i32 @libxsmm_x86_is_Amxfp4_Bbf16_gemm(ptr noundef) local_unnamed_addr #0

declare i32 @libxsmm_x86_is_Amxfp4_Bi8_gemm(ptr noundef) local_unnamed_addr #0

; Function Attrs: nounwind uwtable
define dso_local void @libxsmm_generator_gemm_avx2_microkernel_Amxfp4(ptr noundef %0, ptr nocapture noundef readonly %1, ptr noundef %2, ptr noundef %3, i32 noundef %4, i32 noundef %5, i32 noundef %6) local_unnamed_addr #1 {
  %8 = getelementptr inbounds i8, ptr %2, i64 8
  %9 = load i32, ptr %8, align 8, !tbaa !5
  %10 = urem i32 %4, %9
  %11 = icmp ne i32 %10, 0
  %12 = udiv i32 %4, %9
  %13 = zext i1 %11 to i32
  %14 = add i32 %12, %13
  %15 = mul i32 %14, %5
  %16 = sub i32 16, %15
  %17 = sub i32 %16, %15
  %18 = add i32 %17, -1
  %19 = shl i32 %14, 1
  %20 = add i32 %19, 2
  %21 = add i32 %19, 3
  %22 = icmp eq i32 %5, 1
  %23 = select i1 %22, i32 16, i32 4
  %24 = tail call i32 @libxsmm_x86_is_Amxfp4_Bbf16_gemm(ptr noundef %3) #2
  %25 = tail call i32 @libxsmm_x86_is_Amxfp4_Bi8_gemm(ptr noundef %3) #2
  %26 = icmp ne i32 %25, 0
  %spec.select616 = select i1 %26, i32 8, i32 %23
  %27 = getelementptr inbounds i8, ptr %3, i64 24
  %28 = load i32, ptr %27, align 1, !tbaa !13
  %29 = and i32 %28, 458752
  %or.cond620 = icmp eq i32 %29, 0
  br i1 %or.cond620, label %30, label %33

30:                                               ; preds = %7
  %31 = getelementptr inbounds i8, ptr %1, i64 80
  %32 = load i32, ptr %31, align 4, !tbaa !16
  tail call void @libxsmm_generator_gemm_getval_stack_var(ptr noundef %0, ptr noundef nonnull %2, i32 noundef 33, i32 noundef %32) #2
  br label %33

33:                                               ; preds = %30, %7
  %.not = icmp eq i32 %24, 0
  br i1 %.not, label %43, label %34

34:                                               ; preds = %33
  %35 = getelementptr inbounds i8, ptr %0, i64 28
  %36 = load i32, ptr %35, align 4, !tbaa !18
  %37 = icmp ult i32 %36, 1008
  br i1 %37, label %38, label %43

38:                                               ; preds = %34
  %39 = getelementptr inbounds i8, ptr %1, i64 88
  %40 = load i32, ptr %39, align 4, !tbaa !20
  tail call void @libxsmm_generator_gemm_getval_stack_var(ptr noundef nonnull %0, ptr noundef nonnull %2, i32 noundef 23, i32 noundef %40) #2
  %41 = load i32, ptr %2, align 8, !tbaa !21
  %42 = load i32, ptr %39, align 4, !tbaa !20
  tail call void @libxsmm_x86_instruction_vec_move(ptr noundef nonnull %0, i32 noundef %41, i32 noundef 537138704, i32 noundef %42, i32 noundef 127, i32 noundef 0, i32 noundef 0, i8 noundef signext 121, i32 noundef %18, i32 noundef 0, i32 noundef 0, i32 noundef 0) #2
  br label %43

43:                                               ; preds = %38, %34, %33
  br i1 %26, label %44, label %56

44:                                               ; preds = %43
  %45 = load i32, ptr %27, align 1, !tbaa !13
  %46 = and i32 %45, 458752
  %or.cond624 = icmp eq i32 %46, 0
  %47 = getelementptr inbounds i8, ptr %1, i64 84
  %48 = load i32, ptr %47, align 4, !tbaa !22
  %. = select i1 %or.cond624, i32 36, i32 37
  tail call void @libxsmm_generator_gemm_getval_stack_var(ptr noundef %0, ptr noundef nonnull %2, i32 noundef %., i32 noundef %48) #2
  %49 = getelementptr inbounds i8, ptr %2, i64 44
  %50 = load i32, ptr %49, align 4, !tbaa !23
  %.not611 = icmp eq i32 %50, 0
  br i1 %.not611, label %56, label %51

51:                                               ; preds = %44
  %52 = getelementptr inbounds i8, ptr %1, i64 88
  %53 = load i32, ptr %52, align 4, !tbaa !20
  tail call void @libxsmm_generator_gemm_getval_stack_var(ptr noundef %0, ptr noundef nonnull %2, i32 noundef 22, i32 noundef %53) #2
  %54 = load i32, ptr %2, align 8, !tbaa !21
  %55 = load i32, ptr %52, align 4, !tbaa !20
  tail call void @libxsmm_x86_instruction_vec_move(ptr noundef %0, i32 noundef %54, i32 noundef 537138704, i32 noundef %55, i32 noundef 127, i32 noundef 0, i32 noundef 0, i8 noundef signext 121, i32 noundef %18, i32 noundef 0, i32 noundef 0, i32 noundef 0) #2
  br label %56

56:                                               ; preds = %44, %51, %43
  %57 = icmp sgt i32 %6, 32
  br i1 %57, label %58, label %63

58:                                               ; preds = %56
  %59 = getelementptr inbounds i8, ptr %2, i64 592
  %60 = load ptr, ptr %59, align 8, !tbaa !24
  %61 = getelementptr inbounds i8, ptr %1, i64 48
  %62 = load i32, ptr %61, align 4, !tbaa !25
  tail call void @libxsmm_generator_generic_loop_header_no_idx_inc(ptr noundef %0, ptr noundef %60, i32 noundef %62, i32 noundef 0) #2
  br label %63

63:                                               ; preds = %58, %56
  %.not677 = icmp eq i32 %15, 0
  br i1 %.not677, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %63
  %64 = getelementptr inbounds i8, ptr %2, i64 52
  %65 = getelementptr inbounds i8, ptr %2, i64 84
  br label %66

66:                                               ; preds = %.lr.ph, %66
  %.0592641 = phi i32 [ 0, %.lr.ph ], [ %70, %66 ]
  %67 = load i32, ptr %64, align 4, !tbaa !26
  %68 = load i8, ptr %65, align 4, !tbaa !27
  %69 = add i32 %.0592641, %17
  tail call void @libxsmm_x86_instruction_vec_compute_3reg(ptr noundef %0, i32 noundef %67, i8 noundef signext %68, i32 noundef %69, i32 noundef %69, i32 noundef %69) #2
  %70 = add nuw i32 %.0592641, 1
  %exitcond.not = icmp eq i32 %70, %15
  br i1 %exitcond.not, label %._crit_edge, label %66, !llvm.loop !28

._crit_edge:                                      ; preds = %66, %63
  %71 = select i1 %26, i32 8, i32 16
  %72 = select i1 %22, i32 4, i32 2
  %73 = select i1 %26, i32 3, i32 %72
  %74 = lshr i32 %71, %73
  %75 = icmp ugt i32 %74, 1
  br i1 %75, label %76, label %81

76:                                               ; preds = %._crit_edge
  %77 = getelementptr inbounds i8, ptr %2, i64 592
  %78 = load ptr, ptr %77, align 8, !tbaa !24
  %79 = getelementptr inbounds i8, ptr %1, i64 88
  %80 = load i32, ptr %79, align 4, !tbaa !20
  tail call void @libxsmm_generator_generic_loop_header_no_idx_inc(ptr noundef %0, ptr noundef %78, i32 noundef %80, i32 noundef 0) #2
  br label %81

81:                                               ; preds = %76, %._crit_edge
  %.not678 = icmp eq i32 %14, 0
  %82 = add i32 %14, 3
  %.0602 = select i1 %26, i32 %82, i32 6
  %.0600 = select i1 %26, i32 %82, i32 5
  %83 = add i32 %14, -1
  %84 = getelementptr inbounds i8, ptr %2, i64 44
  %85 = getelementptr inbounds i8, ptr %1, i64 92
  %86 = getelementptr inbounds i8, ptr %1, i64 4
  %87 = getelementptr inbounds i8, ptr %2, i64 12
  %88 = getelementptr inbounds i8, ptr %3, i64 12
  %89 = getelementptr inbounds i8, ptr %2, i64 84
  %90 = getelementptr inbounds i8, ptr %0, i64 28
  %91 = icmp eq i32 %14, 4
  %92 = getelementptr inbounds i8, ptr %1, i64 88
  %93 = getelementptr inbounds i8, ptr %2, i64 24
  %94 = add nsw i32 %spec.select616, -1
  %95 = getelementptr inbounds i8, ptr %2, i64 64
  %96 = select i1 %22, i64 4, i64 2
  %97 = select i1 %26, i64 3, i64 %96
  %98 = zext i1 %26 to i64
  %99 = icmp eq i32 %25, 0
  %or.cond3 = and i1 %22, %99
  %or.cond5 = and i1 %22, %26
  %100 = getelementptr inbounds i8, ptr %2, i64 28
  %101 = getelementptr inbounds i8, ptr %1, i64 12
  %102 = getelementptr inbounds i8, ptr %2, i64 16
  %103 = getelementptr inbounds i8, ptr %2, i64 56
  %104 = add i32 %19, 4
  %105 = getelementptr inbounds i8, ptr %3, i64 16
  %106 = icmp ugt i32 %5, 1
  %brmerge.not = and i1 %106, %99
  %brmerge676.not = and i1 %106, %26
  br label %.preheader640

.preheader640:                                    ; preds = %81, %.loopexit637
  %.0588660 = phi i32 [ %18, %81 ], [ %.1589.lcssa, %.loopexit637 ]
  %.0593658 = phi i32 [ 0, %81 ], [ %318, %.loopexit637 ]
  br i1 %.not678, label %._crit_edge645, label %.lr.ph644

.lr.ph644:                                        ; preds = %.preheader640
  %107 = and i32 %.0593658, 1
  %108 = icmp eq i32 %107, 0
  %109 = lshr exact i32 %.0593658, 1
  %110 = and i32 %.0593658, 7
  %111 = icmp eq i32 %110, 0
  %112 = icmp eq i32 %.0593658, %94
  %113 = shl nuw nsw i32 %.0593658, 2
  %114 = shl nuw nsw i32 %.0593658, 1
  %115 = or disjoint i32 %114, 1
  br label %116

116:                                              ; preds = %.lr.ph644, %252
  %.0584643 = phi i32 [ 0, %.lr.ph644 ], [ %253, %252 ]
  %.1589642 = phi i32 [ %.0588660, %.lr.ph644 ], [ %.3591, %252 ]
  %117 = shl i32 %.0584643, 1
  %118 = add i32 %117, 2
  %119 = add i32 %117, 3
  br i1 %22, label %120, label %122

120:                                              ; preds = %116
  %121 = add i32 %.0584643, 3
  %.0597 = select i1 %26, i32 %121, i32 3
  br label %122

122:                                              ; preds = %120, %116
  %.1603 = phi i32 [ %.0602, %120 ], [ 6, %116 ]
  %.1601 = phi i32 [ %.0600, %120 ], [ 5, %116 ]
  %.0599 = phi i32 [ 4, %120 ], [ %20, %116 ]
  %.1598 = phi i32 [ %.0597, %120 ], [ %119, %116 ]
  %.0596 = phi i32 [ 2, %120 ], [ %118, %116 ]
  br i1 %26, label %123, label %149

123:                                              ; preds = %122
  br i1 %108, label %124, label %172

124:                                              ; preds = %123
  br i1 %22, label %125, label %134

125:                                              ; preds = %124
  %126 = load i32, ptr %84, align 4, !tbaa !23
  %.not615 = icmp ne i32 %126, 0
  %127 = icmp eq i32 %.0584643, %83
  %or.cond = and i1 %91, %127
  %or.cond673 = and i1 %.not615, %or.cond
  br i1 %or.cond673, label %128, label %134

128:                                              ; preds = %125
  %129 = load i32, ptr %92, align 4, !tbaa !20
  tail call void @libxsmm_x86_instruction_push_reg(ptr noundef %0, i32 noundef %129) #2
  %130 = load i32, ptr %92, align 4, !tbaa !20
  tail call void @libxsmm_generator_gemm_getval_stack_var(ptr noundef %0, ptr noundef nonnull %2, i32 noundef 22, i32 noundef %130) #2
  %131 = load i32, ptr %2, align 8, !tbaa !21
  %132 = load i32, ptr %92, align 4, !tbaa !20
  tail call void @libxsmm_x86_instruction_vec_move(ptr noundef %0, i32 noundef %131, i32 noundef 537138704, i32 noundef %132, i32 noundef 127, i32 noundef 0, i32 noundef 0, i8 noundef signext 121, i32 noundef %.0596, i32 noundef 0, i32 noundef 0, i32 noundef 0) #2
  %133 = load i32, ptr %92, align 4, !tbaa !20
  tail call void @libxsmm_x86_instruction_pop_reg(ptr noundef %0, i32 noundef %133) #2
  br label %134

134:                                              ; preds = %128, %125, %124
  %.2590 = phi i32 [ %.0596, %128 ], [ %.1589642, %125 ], [ %.1589642, %124 ]
  %135 = load i32, ptr %93, align 8, !tbaa !30
  %136 = load i32, ptr %86, align 4, !tbaa !31
  %137 = load i32, ptr %87, align 4, !tbaa !32
  %138 = load i32, ptr %8, align 8, !tbaa !5
  %139 = mul i32 %138, %.0584643
  %140 = load i32, ptr %88, align 1, !tbaa !33
  %141 = mul i32 %140, %109
  %reass.add630 = add i32 %141, %139
  %reass.mul631 = shl i32 %137, 2
  %142 = mul i32 %reass.mul631, %reass.add630
  %143 = load i8, ptr %89, align 4, !tbaa !27
  %144 = icmp eq i32 %.0584643, %83
  br i1 %144, label %145, label %147

145:                                              ; preds = %134
  %146 = load i32, ptr %84, align 4, !tbaa !23
  br label %147

147:                                              ; preds = %134, %145
  %148 = phi i32 [ %146, %145 ], [ 0, %134 ]
  tail call void @libxsmm_x86_instruction_unified_vec_move(ptr noundef %0, i32 noundef %135, i32 noundef %136, i32 noundef 127, i32 noundef 0, i32 noundef %142, i8 noundef signext %143, i32 noundef %.0596, i32 noundef %148, i32 noundef %.2590, i32 noundef 0) #2
  br label %172

149:                                              ; preds = %122
  %150 = icmp eq i32 %.0584643, %83
  br i1 %150, label %151, label %163

151:                                              ; preds = %149
  %152 = load i32, ptr %84, align 4, !tbaa !23
  %.not614 = icmp eq i32 %152, 0
  br i1 %.not614, label %163, label %153

153:                                              ; preds = %151
  %154 = load i32, ptr %85, align 4, !tbaa !34
  %155 = load i32, ptr %86, align 4, !tbaa !31
  %156 = load i32, ptr %87, align 4, !tbaa !32
  %157 = load i32, ptr %8, align 8, !tbaa !5
  %158 = mul i32 %157, %83
  %159 = load i32, ptr %88, align 1, !tbaa !33
  %160 = mul i32 %159, %.0593658
  %reass.add = add i32 %160, %158
  %reass.mul = mul i32 %reass.add, %156
  %161 = urem i32 %4, %157
  tail call void @libxsmm_generator_maskedload_8bit_avx2(ptr noundef %0, i32 noundef %154, i32 noundef %155, i32 noundef 127, i32 noundef 0, i32 noundef %reass.mul, i32 noundef %.0596, i32 noundef %161) #2
  %162 = load i8, ptr %89, align 4, !tbaa !27
  tail call void @libxsmm_x86_instruction_vec_compute_2reg(ptr noundef %0, i32 noundef 537207857, i8 noundef signext %162, i32 noundef %.0596, i32 noundef %.0596) #2
  br label %172

163:                                              ; preds = %151, %149
  %164 = load i32, ptr %90, align 4, !tbaa !18
  %165 = load i32, ptr %86, align 4, !tbaa !31
  %166 = load i32, ptr %87, align 4, !tbaa !32
  %167 = load i32, ptr %8, align 8, !tbaa !5
  %168 = mul i32 %167, %.0584643
  %169 = load i32, ptr %88, align 1, !tbaa !33
  %170 = mul i32 %169, %.0593658
  %reass.add628 = add i32 %170, %168
  %reass.mul629 = mul i32 %reass.add628, %166
  %171 = load i8, ptr %89, align 4, !tbaa !27
  tail call void @libxsmm_x86_instruction_vec_move(ptr noundef %0, i32 noundef %164, i32 noundef 537207857, i32 noundef %165, i32 noundef 127, i32 noundef 0, i32 noundef %reass.mul629, i8 noundef signext %171, i32 noundef %.0596, i32 noundef 0, i32 noundef 0, i32 noundef 0) #2
  br label %172

172:                                              ; preds = %153, %163, %123, %147
  %.3591 = phi i32 [ %.2590, %147 ], [ %.1589642, %123 ], [ %.1589642, %153 ], [ %.1589642, %163 ]
  br i1 %111, label %173, label %181

173:                                              ; preds = %172
  %174 = load i32, ptr %86, align 4, !tbaa !31
  %175 = load i32, ptr %87, align 4, !tbaa !32
  %176 = load i32, ptr %8, align 8, !tbaa !5
  %177 = mul i32 %176, %.0584643
  %178 = load i32, ptr %88, align 1, !tbaa !33
  %179 = mul i32 %178, %.0593658
  %reass.add632 = add i32 %179, %177
  %reass.mul633 = mul i32 %reass.add632, %175
  %180 = add i32 %reass.mul633, 1024
  tail call void @libxsmm_x86_instruction_prefetch(ptr noundef %0, i32 noundef -1810624488, i32 noundef %174, i32 noundef 127, i32 noundef 0, i32 noundef %180) #2
  br label %181

181:                                              ; preds = %173, %172
  br i1 %26, label %182, label %187

182:                                              ; preds = %181
  br i1 %108, label %183, label %197

183:                                              ; preds = %182
  %184 = load i8, ptr %89, align 4, !tbaa !27
  tail call void @libxsmm_x86_instruction_vec_compute_2reg_imm8(ptr noundef %0, i32 noundef 606934642, i8 noundef signext %184, i32 noundef %.0596, i32 noundef %.1598, i32 noundef 4) #2
  %185 = load i8, ptr %89, align 4, !tbaa !27
  tail call void @libxsmm_x86_instruction_vec_compute_3reg(ptr noundef %0, i32 noundef 805639899, i8 noundef signext %185, i32 noundef %.0596, i32 noundef 1, i32 noundef %.0596) #2
  %186 = load i8, ptr %89, align 4, !tbaa !27
  tail call void @libxsmm_x86_instruction_vec_compute_3reg(ptr noundef %0, i32 noundef 805639899, i8 noundef signext %186, i32 noundef %.1598, i32 noundef 1, i32 noundef %.1598) #2
  tail call void @libxsmm_x86_instruction_vec_compute_3reg_mask_sae_imm8(ptr noundef %0, i32 noundef 805643776, i8 noundef signext 121, i32 noundef %.0596, i32 noundef 0, i32 noundef %.0596, i32 noundef 0, i32 noundef 0, i8 noundef zeroext 0, i32 noundef 0) #2
  tail call void @libxsmm_x86_instruction_vec_compute_3reg_mask_sae_imm8(ptr noundef %0, i32 noundef 805643776, i8 noundef signext 121, i32 noundef %.1598, i32 noundef 0, i32 noundef %.1598, i32 noundef 0, i32 noundef 0, i8 noundef zeroext 0, i32 noundef 0) #2
  br label %197

187:                                              ; preds = %181
  %188 = load i8, ptr %89, align 4, !tbaa !27
  tail call void @libxsmm_x86_instruction_vec_compute_2reg_imm8(ptr noundef %0, i32 noundef 606934642, i8 noundef signext %188, i32 noundef %.0596, i32 noundef %.1598, i32 noundef 4) #2
  %189 = load i8, ptr %89, align 4, !tbaa !27
  tail call void @libxsmm_x86_instruction_vec_compute_3reg(ptr noundef %0, i32 noundef 805643542, i8 noundef signext %189, i32 noundef 0, i32 noundef %.0596, i32 noundef %.0599) #2
  %190 = load i8, ptr %89, align 4, !tbaa !27
  tail call void @libxsmm_x86_instruction_vec_compute_3reg(ptr noundef %0, i32 noundef 805639899, i8 noundef signext %190, i32 noundef %.0596, i32 noundef 1, i32 noundef %.0596) #2
  %191 = load i8, ptr %89, align 4, !tbaa !27
  tail call void @libxsmm_x86_instruction_vec_compute_2reg_imm8(ptr noundef %0, i32 noundef 611128946, i8 noundef signext %191, i32 noundef %.0596, i32 noundef %.0596, i32 noundef 28) #2
  %192 = load i8, ptr %89, align 4, !tbaa !27
  tail call void @libxsmm_x86_instruction_vec_compute_3reg(ptr noundef %0, i32 noundef 805639915, i8 noundef signext %192, i32 noundef %.0599, i32 noundef %.0596, i32 noundef %.0596) #2
  %193 = load i8, ptr %89, align 4, !tbaa !27
  tail call void @libxsmm_x86_instruction_vec_compute_3reg(ptr noundef %0, i32 noundef 805643542, i8 noundef signext %193, i32 noundef 0, i32 noundef %.1598, i32 noundef %.0599) #2
  %194 = load i8, ptr %89, align 4, !tbaa !27
  tail call void @libxsmm_x86_instruction_vec_compute_3reg(ptr noundef %0, i32 noundef 805639899, i8 noundef signext %194, i32 noundef %.1598, i32 noundef 1, i32 noundef %.1598) #2
  %195 = load i8, ptr %89, align 4, !tbaa !27
  tail call void @libxsmm_x86_instruction_vec_compute_2reg_imm8(ptr noundef %0, i32 noundef 611128946, i8 noundef signext %195, i32 noundef %.1598, i32 noundef %.1598, i32 noundef 28) #2
  %196 = load i8, ptr %89, align 4, !tbaa !27
  tail call void @libxsmm_x86_instruction_vec_compute_3reg(ptr noundef %0, i32 noundef 805639915, i8 noundef signext %196, i32 noundef %.0599, i32 noundef %.1598, i32 noundef %.1598) #2
  br label %197

197:                                              ; preds = %182, %183, %187
  %198 = icmp eq i32 %.0584643, %83
  %or.cond626 = select i1 %198, i1 %112, i1 false
  br i1 %or.cond626, label %199, label %209

199:                                              ; preds = %197
  %200 = load i32, ptr %95, align 8, !tbaa !35
  %201 = load i32, ptr %86, align 4, !tbaa !31
  %202 = load i32, ptr %88, align 1, !tbaa !33
  %203 = zext i32 %202 to i64
  %204 = shl nuw nsw i64 %203, %97
  %205 = load i32, ptr %87, align 4, !tbaa !32
  %206 = zext i32 %205 to i64
  %207 = mul nuw nsw i64 %204, %206
  %208 = shl nuw i64 %207, %98
  tail call void @libxsmm_x86_instruction_alu_imm(ptr noundef %0, i32 noundef %200, i32 noundef %201, i64 noundef %208) #2
  br label %209

209:                                              ; preds = %199, %197
  br i1 %or.cond3, label %210, label %237

210:                                              ; preds = %209
  %211 = icmp eq i32 %.0584643, 0
  br i1 %211, label %212, label %.thread

212:                                              ; preds = %210
  %213 = load i32, ptr %2, align 8, !tbaa !21
  %214 = load i32, ptr %100, align 4, !tbaa !36
  %215 = load i32, ptr %101, align 4, !tbaa !37
  %216 = load i32, ptr %102, align 8, !tbaa !38
  %217 = mul i32 %216, %114
  %218 = load i8, ptr %89, align 4, !tbaa !27
  tail call void @libxsmm_x86_instruction_vec_move(ptr noundef %0, i32 noundef %213, i32 noundef %214, i32 noundef %215, i32 noundef 127, i32 noundef 0, i32 noundef %217, i8 noundef signext %218, i32 noundef %.1601, i32 noundef 0, i32 noundef 1, i32 noundef 0) #2
  br i1 %.not, label %222, label %219

219:                                              ; preds = %212
  %220 = load i32, ptr %90, align 4, !tbaa !18
  %221 = icmp ugt i32 %220, 1007
  br i1 %221, label %222, label %229

222:                                              ; preds = %219, %212
  %223 = load i32, ptr %2, align 8, !tbaa !21
  %224 = load i32, ptr %100, align 4, !tbaa !36
  %225 = load i32, ptr %101, align 4, !tbaa !37
  %226 = load i32, ptr %102, align 8, !tbaa !38
  %227 = mul i32 %226, %115
  %228 = load i8, ptr %89, align 4, !tbaa !27
  tail 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 %227, i8 noundef signext %228, i32 noundef %.1603, i32 noundef 0, i32 noundef 1, i32 noundef 0) #2
  br label %.thread

229:                                              ; preds = %219
  %230 = load i8, ptr %89, align 4, !tbaa !27
  tail call void @libxsmm_x86_instruction_vec_compute_3reg(ptr noundef nonnull %0, i32 noundef 805639899, i8 noundef signext %230, i32 noundef %.1601, i32 noundef %.3591, i32 noundef %.1603) #2
  %231 = load i8, ptr %89, align 4, !tbaa !27
  tail call void @libxsmm_x86_instruction_vec_compute_2reg_imm8(ptr noundef nonnull %0, i32 noundef 611128946, i8 noundef signext %231, i32 noundef %.1601, i32 noundef %.1601, i32 noundef 16) #2
  br label %.thread

.thread:                                          ; preds = %210, %229, %222
  %232 = load i32, ptr %103, align 8, !tbaa !39
  %233 = load i8, ptr %89, align 4, !tbaa !27
  %234 = add i32 %.0584643, %17
  tail call void @libxsmm_x86_instruction_vec_compute_3reg(ptr noundef %0, i32 noundef %232, i8 noundef signext %233, i32 noundef %.1601, i32 noundef %.0596, i32 noundef %234) #2
  %235 = load i32, ptr %103, align 8, !tbaa !39
  %236 = load i8, ptr %89, align 4, !tbaa !27
  tail call void @libxsmm_x86_instruction_vec_compute_3reg(ptr noundef %0, i32 noundef %235, i8 noundef signext %236, i32 noundef %.1603, i32 noundef %.1598, i32 noundef %234) #2
  br label %252

237:                                              ; preds = %209
  br i1 %or.cond5, label %238, label %252

238:                                              ; preds = %237
  %239 = icmp eq i32 %.0584643, 0
  br i1 %239, label %240, label %247

240:                                              ; preds = %238
  %241 = load i32, ptr %2, align 8, !tbaa !21
  %242 = load i32, ptr %100, align 4, !tbaa !36
  %243 = load i32, ptr %101, align 4, !tbaa !37
  %244 = load i32, ptr %102, align 8, !tbaa !38
  %245 = mul i32 %113, %244
  %246 = load i8, ptr %89, align 4, !tbaa !27
  tail call void @libxsmm_x86_instruction_vec_move(ptr noundef %0, i32 noundef %241, i32 noundef %242, i32 noundef %243, i32 noundef 127, i32 noundef 0, i32 noundef %245, i8 noundef signext %246, i32 noundef %.1601, i32 noundef 0, i32 noundef 1, i32 noundef 0) #2
  br label %247

247:                                              ; preds = %240, %238
  %248 = load i32, ptr %103, align 8, !tbaa !39
  %249 = load i8, ptr %89, align 4, !tbaa !27
  %250 = select i1 %108, i32 %.0596, i32 %.1598
  %251 = add i32 %.0584643, %17
  tail call void @libxsmm_x86_instruction_vec_compute_3reg(ptr noundef %0, i32 noundef %248, i8 noundef signext %249, i32 noundef %.1601, i32 noundef %250, i32 noundef %251) #2
  br label %252

252:                                              ; preds = %.thread, %247, %237
  %253 = add nuw i32 %.0584643, 1
  %exitcond688.not = icmp eq i32 %253, %14
  br i1 %exitcond688.not, label %._crit_edge645, label %116, !llvm.loop !40

._crit_edge645:                                   ; preds = %252, %.preheader640
  %.1589.lcssa = phi i32 [ %.0588660, %.preheader640 ], [ %.3591, %252 ]
  br i1 %brmerge.not, label %.lr.ph651, label %.loopexit639

.lr.ph651:                                        ; preds = %._crit_edge645
  %254 = shl nuw nsw i32 %.0593658, 1
  %255 = or disjoint i32 %254, 1
  br label %256

256:                                              ; preds = %.lr.ph651, %._crit_edge649
  %.0650 = phi i32 [ 0, %.lr.ph651 ], [ %295, %._crit_edge649 ]
  %257 = load i32, ptr %2, align 8, !tbaa !21
  %258 = load i32, ptr %100, align 4, !tbaa !36
  %259 = load i32, ptr %101, align 4, !tbaa !37
  %260 = load i32, ptr %105, align 1, !tbaa !41
  %261 = mul i32 %260, %.0650
  %262 = load i32, ptr %102, align 8, !tbaa !38
  %263 = add i32 %261, %254
  %264 = mul i32 %263, %262
  %265 = load i8, ptr %89, align 4, !tbaa !27
  tail call void @libxsmm_x86_instruction_vec_move(ptr noundef %0, i32 noundef %257, i32 noundef %258, i32 noundef %259, i32 noundef 127, i32 noundef 0, i32 noundef %264, i8 noundef signext %265, i32 noundef %21, i32 noundef 0, i32 noundef 1, i32 noundef 0) #2
  br i1 %.not, label %269, label %266

266:                                              ; preds = %256
  %267 = load i32, ptr %90, align 4, !tbaa !18
  %268 = icmp ugt i32 %267, 1007
  br i1 %268, label %269, label %279

269:                                              ; preds = %266, %256
  %270 = load i32, ptr %2, align 8, !tbaa !21
  %271 = load i32, ptr %100, align 4, !tbaa !36
  %272 = load i32, ptr %101, align 4, !tbaa !37
  %273 = load i32, ptr %105, align 1, !tbaa !41
  %274 = mul i32 %273, %.0650
  %275 = load i32, ptr %102, align 8, !tbaa !38
  %276 = add i32 %255, %274
  %277 = mul i32 %276, %275
  %278 = load i8, ptr %89, align 4, !tbaa !27
  tail call void @libxsmm_x86_instruction_vec_move(ptr noundef %0, i32 noundef %270, i32 noundef %271, i32 noundef %272, i32 noundef 127, i32 noundef 0, i32 noundef %277, i8 noundef signext %278, i32 noundef %104, i32 noundef 0, i32 noundef 1, i32 noundef 0) #2
  br label %282

279:                                              ; preds = %266
  %280 = load i8, ptr %89, align 4, !tbaa !27
  tail call void @libxsmm_x86_instruction_vec_compute_3reg(ptr noundef nonnull %0, i32 noundef 805639899, i8 noundef signext %280, i32 noundef %21, i32 noundef %.1589.lcssa, i32 noundef %104) #2
  %281 = load i8, ptr %89, align 4, !tbaa !27
  tail call void @libxsmm_x86_instruction_vec_compute_2reg_imm8(ptr noundef nonnull %0, i32 noundef 611128946, i8 noundef signext %281, i32 noundef %21, i32 noundef %21, i32 noundef 16) #2
  br label %282

282:                                              ; preds = %279, %269
  br i1 %.not678, label %._crit_edge649, label %.lr.ph648

.lr.ph648:                                        ; preds = %282
  %283 = mul i32 %.0650, %14
  %284 = add i32 %283, %17
  br label %285

285:                                              ; preds = %.lr.ph648, %285
  %.1585646 = phi i32 [ 0, %.lr.ph648 ], [ %294, %285 ]
  %286 = shl i32 %.1585646, 1
  %287 = add i32 %286, 2
  %288 = add i32 %286, 3
  %289 = load i32, ptr %103, align 8, !tbaa !39
  %290 = load i8, ptr %89, align 4, !tbaa !27
  %291 = add i32 %284, %.1585646
  tail call void @libxsmm_x86_instruction_vec_compute_3reg(ptr noundef %0, i32 noundef %289, i8 noundef signext %290, i32 noundef %21, i32 noundef %287, i32 noundef %291) #2
  %292 = load i32, ptr %103, align 8, !tbaa !39
  %293 = load i8, ptr %89, align 4, !tbaa !27
  tail call void @libxsmm_x86_instruction_vec_compute_3reg(ptr noundef %0, i32 noundef %292, i8 noundef signext %293, i32 noundef %104, i32 noundef %288, i32 noundef %291) #2
  %294 = add nuw i32 %.1585646, 1
  %exitcond689.not = icmp eq i32 %294, %14
  br i1 %exitcond689.not, label %._crit_edge649, label %285, !llvm.loop !42

._crit_edge649:                                   ; preds = %285, %282
  %295 = add nuw i32 %.0650, 1
  %exitcond690.not = icmp eq i32 %295, %5
  br i1 %exitcond690.not, label %.loopexit639, label %256, !llvm.loop !43

.loopexit639:                                     ; preds = %._crit_edge649, %._crit_edge645
  br i1 %brmerge676.not, label %.lr.ph657, label %.loopexit637

.lr.ph657:                                        ; preds = %.loopexit639
  %296 = shl nuw i32 %.0593658, 2
  %297 = and i32 %.0593658, 1
  %.v = or disjoint i32 %297, 2
  br label %298

298:                                              ; preds = %.lr.ph657, %._crit_edge655
  %.1656 = phi i32 [ 0, %.lr.ph657 ], [ %317, %._crit_edge655 ]
  %299 = load i32, ptr %2, align 8, !tbaa !21
  %300 = load i32, ptr %100, align 4, !tbaa !36
  %301 = load i32, ptr %101, align 4, !tbaa !37
  %302 = load i32, ptr %105, align 1, !tbaa !41
  %303 = mul i32 %302, %.1656
  %304 = load i32, ptr %102, align 8, !tbaa !38
  %305 = add i32 %303, %296
  %306 = mul i32 %305, %304
  %307 = load i8, ptr %89, align 4, !tbaa !27
  tail call void @libxsmm_x86_instruction_vec_move(ptr noundef %0, i32 noundef %299, i32 noundef %300, i32 noundef %301, i32 noundef 127, i32 noundef 0, i32 noundef %306, i8 noundef signext %307, i32 noundef %21, i32 noundef 0, i32 noundef 1, i32 noundef 0) #2
  br i1 %.not678, label %._crit_edge655, label %.lr.ph654

.lr.ph654:                                        ; preds = %298
  %308 = mul i32 %.1656, %14
  %309 = add i32 %308, %17
  br label %310

310:                                              ; preds = %.lr.ph654, %310
  %.2586652 = phi i32 [ 0, %.lr.ph654 ], [ %316, %310 ]
  %311 = shl i32 %.2586652, 1
  %312 = load i32, ptr %103, align 8, !tbaa !39
  %313 = load i8, ptr %89, align 4, !tbaa !27
  %314 = add i32 %.v, %311
  %315 = add i32 %309, %.2586652
  tail call void @libxsmm_x86_instruction_vec_compute_3reg(ptr noundef %0, i32 noundef %312, i8 noundef signext %313, i32 noundef %21, i32 noundef %314, i32 noundef %315) #2
  %316 = add nuw i32 %.2586652, 1
  %exitcond691.not = icmp eq i32 %316, %14
  br i1 %exitcond691.not, label %._crit_edge655, label %310, !llvm.loop !44

._crit_edge655:                                   ; preds = %310, %298
  %317 = add nuw i32 %.1656, 1
  %exitcond692.not = icmp eq i32 %317, %5
  br i1 %exitcond692.not, label %.loopexit637, label %298, !llvm.loop !45

.loopexit637:                                     ; preds = %._crit_edge655, %.loopexit639
  %318 = add nuw nsw i32 %.0593658, 1
  %exitcond693.not = icmp eq i32 %318, %spec.select616
  br i1 %exitcond693.not, label %319, label %.preheader640, !llvm.loop !46

319:                                              ; preds = %.loopexit637
  %320 = load i32, ptr %95, align 8, !tbaa !35
  %321 = load i32, ptr %101, align 4, !tbaa !37
  %322 = load i32, ptr %102, align 8, !tbaa !38
  %323 = zext i32 %322 to i64
  %324 = or i1 %22, %26
  %325 = select i1 %324, i64 5, i64 3
  %326 = shl nuw nsw i64 %323, %325
  tail call void @libxsmm_x86_instruction_alu_imm(ptr noundef %0, i32 noundef %320, i32 noundef %321, i64 noundef %326) #2
  br i1 %75, label %327, label %331

327:                                              ; preds = %319
  %328 = getelementptr inbounds i8, ptr %2, i64 592
  %329 = load ptr, ptr %328, align 8, !tbaa !24
  %330 = load i32, ptr %92, align 4, !tbaa !20
  tail call void @libxsmm_generator_generic_loop_footer_with_idx_inc(ptr noundef %0, ptr noundef %329, i32 noundef %330, i32 noundef 1, i32 noundef %74) #2
  br label %331

331:                                              ; preds = %327, %319
  br i1 %26, label %.preheader, label %.preheader634

.preheader634:                                    ; preds = %331
  br i1 %.not678, label %.loopexit, label %.lr.ph666

.lr.ph666:                                        ; preds = %.preheader634
  %332 = getelementptr inbounds i8, ptr %1, i64 80
  %.not684 = icmp eq i32 %5, 0
  br label %376

.preheader:                                       ; preds = %331
  br i1 %.not678, label %.loopexit, label %.lr.ph672

.lr.ph672:                                        ; preds = %.preheader
  %333 = getelementptr inbounds i8, ptr %1, i64 80
  %.not686 = icmp eq i32 %5, 0
  %334 = getelementptr inbounds i8, ptr %1, i64 84
  br label %335

335:                                              ; preds = %.lr.ph672, %._crit_edge670
  %.3587671 = phi i32 [ 0, %.lr.ph672 ], [ %375, %._crit_edge670 ]
  %336 = icmp eq i32 %.3587671, %83
  br i1 %336, label %337, label %348

337:                                              ; preds = %335
  %338 = load i32, ptr %84, align 4, !tbaa !23
  %.not613 = icmp eq i32 %338, 0
  br i1 %.not613, label %348, label %339

339:                                              ; preds = %337
  %340 = load i32, ptr %85, align 4, !tbaa !34
  %341 = load i32, ptr %333, align 4, !tbaa !16
  %342 = load i32, ptr %87, align 4, !tbaa !32
  %343 = load i32, ptr %8, align 8, !tbaa !5
  %344 = mul i32 %342, %83
  %345 = mul i32 %344, %343
  %346 = urem i32 %4, %343
  tail call void @libxsmm_generator_maskedload_8bit_avx2(ptr noundef %0, i32 noundef %340, i32 noundef %341, i32 noundef 127, i32 noundef 0, i32 noundef %345, i32 noundef 2, i32 noundef %346) #2
  %347 = load i8, ptr %89, align 4, !tbaa !27
  tail call void @libxsmm_x86_instruction_vec_compute_2reg(ptr noundef %0, i32 noundef 537207857, i8 noundef signext %347, i32 noundef 2, i32 noundef 2) #2
  br label %356

348:                                              ; preds = %337, %335
  %349 = load i32, ptr %90, align 4, !tbaa !18
  %350 = load i32, ptr %333, align 4, !tbaa !16
  %351 = load i32, ptr %87, align 4, !tbaa !32
  %352 = load i32, ptr %8, align 8, !tbaa !5
  %353 = mul i32 %351, %.3587671
  %354 = mul i32 %353, %352
  %355 = load i8, ptr %89, align 4, !tbaa !27
  tail call void @libxsmm_x86_instruction_vec_move(ptr noundef %0, i32 noundef %349, i32 noundef 537207857, i32 noundef %350, i32 noundef 127, i32 noundef 0, i32 noundef %354, i8 noundef signext %355, i32 noundef 2, i32 noundef 0, i32 noundef 0, i32 noundef 0) #2
  br label %356

356:                                              ; preds = %348, %339
  %357 = load i8, ptr %89, align 4, !tbaa !27
  tail call void @libxsmm_x86_instruction_vec_compute_2reg_imm8(ptr noundef %0, i32 noundef 611128946, i8 noundef signext %357, i32 noundef 2, i32 noundef 2, i32 noundef 23) #2
  br i1 %.not686, label %._crit_edge670, label %.lr.ph669

.lr.ph669:                                        ; preds = %356
  %358 = add i32 %.3587671, %17
  %359 = add i32 %.3587671, %16
  br label %360

360:                                              ; preds = %.lr.ph669, %360
  %.2667 = phi i32 [ 0, %.lr.ph669 ], [ %374, %360 ]
  %361 = load i8, ptr %89, align 4, !tbaa !27
  %362 = mul i32 %.2667, %14
  %363 = add i32 %358, %362
  tail call void @libxsmm_x86_instruction_vec_compute_2reg(ptr noundef %0, i32 noundef 537138779, i8 noundef signext %361, i32 noundef %363, i32 noundef %363) #2
  %364 = load i32, ptr %2, align 8, !tbaa !21
  %365 = load i32, ptr %100, align 4, !tbaa !36
  %366 = load i32, ptr %334, align 4, !tbaa !22
  %367 = load i32, ptr %105, align 1, !tbaa !41
  %368 = lshr i32 %367, 3
  %369 = mul i32 %368, %.2667
  %370 = load i8, ptr %89, align 4, !tbaa !27
  tail call void @libxsmm_x86_instruction_vec_move(ptr noundef %0, i32 noundef %364, i32 noundef %365, i32 noundef %366, i32 noundef 127, i32 noundef 0, i32 noundef %369, i8 noundef signext %370, i32 noundef 3, i32 noundef 0, i32 noundef 1, i32 noundef 0) #2
  %371 = load i8, ptr %89, align 4, !tbaa !27
  tail call void @libxsmm_x86_instruction_vec_compute_3reg(ptr noundef %0, i32 noundef 805574233, i8 noundef signext %371, i32 noundef 3, i32 noundef 2, i32 noundef 3) #2
  %372 = load i8, ptr %89, align 4, !tbaa !27
  %373 = add i32 %359, %362
  tail call void @libxsmm_x86_instruction_vec_compute_3reg(ptr noundef %0, i32 noundef 805643960, i8 noundef signext %372, i32 noundef %363, i32 noundef 3, i32 noundef %373) #2
  %374 = add nuw i32 %.2667, 1
  %exitcond696.not = icmp eq i32 %374, %5
  br i1 %exitcond696.not, label %._crit_edge670, label %360, !llvm.loop !47

._crit_edge670:                                   ; preds = %360, %356
  %375 = add nuw i32 %.3587671, 1
  %exitcond697.not = icmp eq i32 %375, %14
  br i1 %exitcond697.not, label %.loopexit, label %335, !llvm.loop !48

376:                                              ; preds = %.lr.ph666, %._crit_edge664
  %.4665 = phi i32 [ 0, %.lr.ph666 ], [ %409, %._crit_edge664 ]
  %377 = add i32 %.4665, 2
  %378 = icmp eq i32 %.4665, %83
  br i1 %378, label %379, label %390

379:                                              ; preds = %376
  %380 = load i32, ptr %84, align 4, !tbaa !23
  %.not612 = icmp eq i32 %380, 0
  br i1 %.not612, label %390, label %381

381:                                              ; preds = %379
  %382 = load i32, ptr %85, align 4, !tbaa !34
  %383 = load i32, ptr %332, align 4, !tbaa !16
  %384 = load i32, ptr %87, align 4, !tbaa !32
  %385 = load i32, ptr %8, align 8, !tbaa !5
  %386 = mul i32 %384, %83
  %387 = mul i32 %386, %385
  %388 = urem i32 %4, %385
  tail call void @libxsmm_generator_maskedload_8bit_avx2(ptr noundef %0, i32 noundef %382, i32 noundef %383, i32 noundef 127, i32 noundef 0, i32 noundef %387, i32 noundef %377, i32 noundef %388) #2
  %389 = load i8, ptr %89, align 4, !tbaa !27
  tail call void @libxsmm_x86_instruction_vec_compute_2reg(ptr noundef %0, i32 noundef 537207857, i8 noundef signext %389, i32 noundef %377, i32 noundef %377) #2
  br label %398

390:                                              ; preds = %379, %376
  %391 = load i32, ptr %90, align 4, !tbaa !18
  %392 = load i32, ptr %332, align 4, !tbaa !16
  %393 = load i32, ptr %87, align 4, !tbaa !32
  %394 = load i32, ptr %8, align 8, !tbaa !5
  %395 = mul i32 %393, %.4665
  %396 = mul i32 %395, %394
  %397 = load i8, ptr %89, align 4, !tbaa !27
  tail call void @libxsmm_x86_instruction_vec_move(ptr noundef %0, i32 noundef %391, i32 noundef 537207857, i32 noundef %392, i32 noundef 127, i32 noundef 0, i32 noundef %396, i8 noundef signext %397, i32 noundef %377, i32 noundef 0, i32 noundef 0, i32 noundef 0) #2
  br label %398

398:                                              ; preds = %390, %381
  %399 = load i8, ptr %89, align 4, !tbaa !27
  tail call void @libxsmm_x86_instruction_vec_compute_2reg_imm8(ptr noundef %0, i32 noundef 611128946, i8 noundef signext %399, i32 noundef %377, i32 noundef %377, i32 noundef 23) #2
  br i1 %.not684, label %._crit_edge664, label %.lr.ph663

.lr.ph663:                                        ; preds = %398
  %400 = add i32 %.4665, %17
  %401 = add i32 %.4665, %16
  br label %402

402:                                              ; preds = %.lr.ph663, %402
  %.3661 = phi i32 [ 0, %.lr.ph663 ], [ %408, %402 ]
  %403 = load i32, ptr %103, align 8, !tbaa !39
  %404 = load i8, ptr %89, align 4, !tbaa !27
  %405 = mul i32 %.3661, %14
  %406 = add i32 %400, %405
  %407 = add i32 %401, %405
  tail call void @libxsmm_x86_instruction_vec_compute_3reg(ptr noundef %0, i32 noundef %403, i8 noundef signext %404, i32 noundef %406, i32 noundef %377, i32 noundef %407) #2
  %408 = add nuw i32 %.3661, 1
  %exitcond694.not = icmp eq i32 %408, %5
  br i1 %exitcond694.not, label %._crit_edge664, label %402, !llvm.loop !49

._crit_edge664:                                   ; preds = %402, %398
  %409 = add nuw i32 %.4665, 1
  %exitcond695.not = icmp eq i32 %409, %14
  br i1 %exitcond695.not, label %.loopexit, label %376, !llvm.loop !50

.loopexit:                                        ; preds = %._crit_edge664, %._crit_edge670, %.preheader634, %.preheader
  br i1 %57, label %410, label %431

410:                                              ; preds = %.loopexit
  %411 = load i32, ptr %95, align 8, !tbaa !35
  %412 = getelementptr inbounds i8, ptr %1, i64 80
  %413 = load i32, ptr %412, align 4, !tbaa !16
  %414 = load i32, ptr %88, align 1, !tbaa !33
  %415 = zext i32 %414 to i64
  %416 = load i32, ptr %87, align 4, !tbaa !32
  %417 = zext i32 %416 to i64
  %418 = mul nuw nsw i64 %417, %415
  tail call void @libxsmm_x86_instruction_alu_imm(ptr noundef %0, i32 noundef %411, i32 noundef %413, i64 noundef %418) #2
  br i1 %26, label %419, label %426

419:                                              ; preds = %410
  %420 = load i32, ptr %95, align 8, !tbaa !35
  %421 = getelementptr inbounds i8, ptr %1, i64 84
  %422 = load i32, ptr %421, align 4, !tbaa !22
  %423 = load i32, ptr %102, align 8, !tbaa !38
  %424 = zext i32 %423 to i64
  %425 = shl nuw nsw i64 %424, 2
  tail call void @libxsmm_x86_instruction_alu_imm(ptr noundef %0, i32 noundef %420, i32 noundef %422, i64 noundef %425) #2
  br label %426

426:                                              ; preds = %419, %410
  %427 = getelementptr inbounds i8, ptr %2, i64 592
  %428 = load ptr, ptr %427, align 8, !tbaa !24
  %429 = getelementptr inbounds i8, ptr %1, i64 48
  %430 = load i32, ptr %429, align 4, !tbaa !25
  tail call void @libxsmm_generator_generic_loop_footer_with_idx_inc(ptr noundef %0, ptr noundef %428, i32 noundef %430, i32 noundef 32, i32 noundef %6) #2
  br label %431

431:                                              ; preds = %426, %.loopexit
  ret void
}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

attributes #0 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { 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 8}
!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 24}
!14 = !{!"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, !15, i64 33, !15, 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}
!15 = !{!"long long", !8, i64 0}
!16 = !{!17, !7, i64 80}
!17 = !{!"libxsmm_gp_reg_mapping_struct", !7, i64 0, !7, i64 4, !7, i64 8, !7, i64 12, !7, i64 16, !7, i64 20, !7, i64 24, !7, i64 28, !7, i64 32, !7, i64 36, !7, i64 40, !7, i64 44, !7, i64 48, !7, i64 52, !7, i64 56, !7, i64 60, !7, i64 64, !7, i64 68, !7, i64 72, !7, i64 76, !7, i64 80, !7, i64 84, !7, i64 88, !7, i64 92, !7, i64 96, !7, i64 100, !7, i64 104, !7, i64 108, !7, i64 112, !7, i64 116, !7, i64 120, !7, i64 124, !7, i64 128}
!18 = !{!19, !7, i64 28}
!19 = !{!"libxsmm_generated_code", !12, i64 0, !7, i64 8, !7, i64 12, !7, i64 16, !7, i64 20, !7, i64 24, !7, i64 28}
!20 = !{!17, !7, i64 88}
!21 = !{!6, !7, i64 0}
!22 = !{!17, !7, i64 84}
!23 = !{!6, !7, i64 44}
!24 = !{!6, !12, i64 592}
!25 = !{!17, !7, i64 48}
!26 = !{!6, !7, i64 52}
!27 = !{!6, !8, i64 84}
!28 = distinct !{!28, !29}
!29 = !{!"llvm.loop.mustprogress"}
!30 = !{!6, !7, i64 24}
!31 = !{!17, !7, i64 4}
!32 = !{!6, !7, i64 12}
!33 = !{!14, !7, i64 12}
!34 = !{!17, !7, i64 92}
!35 = !{!6, !7, i64 64}
!36 = !{!6, !7, i64 28}
!37 = !{!17, !7, i64 12}
!38 = !{!6, !7, i64 16}
!39 = !{!6, !7, i64 56}
!40 = distinct !{!40, !29}
!41 = !{!14, !7, i64 16}
!42 = distinct !{!42, !29}
!43 = distinct !{!43, !29}
!44 = distinct !{!44, !29}
!45 = distinct !{!45, !29}
!46 = distinct !{!46, !29}
!47 = distinct !{!47, !29}
!48 = distinct !{!48, !29}
!49 = distinct !{!49, !29}
!50 = distinct !{!50, !29}


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