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

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

%struct.libxsmm_gemm_descriptor = type <{ i32, i32, i32, i32, i32, i32, i32, i8, [3 x i8], i8, i64, i64, i8, i32, i32, i32, i16, i16, i8, i8, i8, i8, i16, i16, i16, i16, i16, i16, i32, i32, i32, i8 }>
%struct.libxsmm_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_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 }

@.str = external hidden unnamed_addr constant [27 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [77 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [359 x i8], align 1
@__PRETTY_FUNCTION__.libxsmm_generator_gemm_setup_A_vnni_or_trans_B_vnni_or_trans_tensor_to_stack = external hidden unnamed_addr constant [293 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [359 x i8], align 1

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

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

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

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

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

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

; Function Attrs: nounwind uwtable
define dso_local void @libxsmm_generator_gemm_setup_A_vnni_or_trans_B_vnni_or_trans_tensor_to_stack(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %4, ptr noundef %5, i32 noundef %6, i32 noundef %7) #1 {
  %9 = alloca ptr, align 8
  %10 = alloca ptr, align 8
  %11 = alloca ptr, align 8
  %12 = alloca ptr, align 8
  %13 = alloca ptr, align 8
  %14 = alloca ptr, align 8
  %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 i16, align 2
  %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
  store ptr %0, ptr %9, align 8, !tbaa !5
  store ptr %1, ptr %10, align 8, !tbaa !5
  store ptr %2, ptr %11, align 8, !tbaa !5
  store ptr %3, ptr %12, align 8, !tbaa !5
  store ptr %4, ptr %13, align 8, !tbaa !5
  store ptr %5, ptr %14, align 8, !tbaa !5
  store i32 %6, ptr %15, align 4, !tbaa !9
  store i32 %7, ptr %16, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #4
  %36 = load ptr, ptr %13, align 8, !tbaa !5
  %37 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %36, i32 0, i32 6
  %38 = load i32, ptr %37, align 1, !tbaa !11
  %39 = and i32 %38, 262144
  %40 = icmp ugt i32 %39, 0
  %41 = zext i1 %40 to i64
  %42 = select i1 %40, i32 1, i32 0
  store i32 %42, ptr %17, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #4
  %43 = load ptr, ptr %13, align 8, !tbaa !5
  %44 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %43, i32 0, i32 6
  %45 = load i32, ptr %44, align 1, !tbaa !11
  %46 = and i32 %45, 131072
  %47 = icmp ugt i32 %46, 0
  %48 = zext i1 %47 to i64
  %49 = select i1 %47, i32 1, i32 0
  store i32 %49, ptr %18, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #4
  %50 = load ptr, ptr %13, align 8, !tbaa !5
  %51 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %50, i32 0, i32 6
  %52 = load i32, ptr %51, align 1, !tbaa !11
  %53 = and i32 %52, 65536
  %54 = icmp ugt i32 %53, 0
  %55 = zext i1 %54 to i64
  %56 = select i1 %54, i32 1, i32 0
  store i32 %56, ptr %19, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #4
  %57 = load i32, ptr %17, align 4, !tbaa !9
  %58 = icmp eq i32 %57, 1
  br i1 %58, label %65, label %59

59:                                               ; preds = %8
  %60 = load i32, ptr %18, align 4, !tbaa !9
  %61 = icmp eq i32 %60, 1
  br i1 %61, label %65, label %62

62:                                               ; preds = %59
  %63 = load i32, ptr %19, align 4, !tbaa !9
  %64 = icmp eq i32 %63, 1
  br label %65

65:                                               ; preds = %62, %59, %8
  %66 = phi i1 [ true, %59 ], [ true, %8 ], [ %64, %62 ]
  %67 = zext i1 %66 to i64
  %68 = select i1 %66, i32 1, i32 0
  store i32 %68, ptr %20, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #4
  store i32 15, ptr %21, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #4
  store i32 14, ptr %22, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #4
  store i32 13, ptr %23, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #4
  store i32 12, ptr %24, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #4
  store i32 2, ptr %25, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #4
  %69 = load i32, ptr %16, align 4, !tbaa !9
  %70 = icmp ne i32 %69, 0
  br i1 %70, label %71, label %72

71:                                               ; preds = %65
  br label %76

72:                                               ; preds = %65
  %73 = load ptr, ptr %11, align 8, !tbaa !5
  %74 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %73, i32 0, i32 1
  %75 = load i32, ptr %74, align 4, !tbaa !15
  br label %76

76:                                               ; preds = %72, %71
  %77 = phi i32 [ 7, %71 ], [ %75, %72 ]
  store i32 %77, ptr %26, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #4
  %78 = load i32, ptr %16, align 4, !tbaa !9
  %79 = icmp ne i32 %78, 0
  br i1 %79, label %80, label %81

80:                                               ; preds = %76
  br label %85

81:                                               ; preds = %76
  %82 = load ptr, ptr %11, align 8, !tbaa !5
  %83 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %82, i32 0, i32 3
  %84 = load i32, ptr %83, align 4, !tbaa !17
  br label %85

85:                                               ; preds = %81, %80
  %86 = phi i32 [ 6, %80 ], [ %84, %81 ]
  store i32 %86, ptr %27, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 2, ptr %28) #4
  store i16 -250, ptr %28, align 2, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #4
  store i32 29, ptr %29, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #4
  %87 = load i32, ptr %15, align 4, !tbaa !9
  store i32 %87, ptr %30, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #4
  %88 = load ptr, ptr %14, align 8, !tbaa !5
  %89 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %88, i32 0, i32 2
  %90 = load i32, ptr %89, align 1, !tbaa !19
  store i32 %90, ptr %31, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #4
  %91 = load ptr, ptr %14, align 8, !tbaa !5
  %92 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %91, i32 0, i32 0
  %93 = load i32, ptr %92, align 1, !tbaa !20
  store i32 %93, ptr %32, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #4
  %94 = load ptr, ptr %14, align 8, !tbaa !5
  %95 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %94, i32 0, i32 3
  %96 = load i32, ptr %95, align 1, !tbaa !21
  store i32 %96, ptr %33, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #4
  %97 = load ptr, ptr %14, align 8, !tbaa !5
  %98 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %97, i32 0, i32 0
  %99 = load i32, ptr %98, align 1, !tbaa !20
  store i32 %99, ptr %34, align 4, !tbaa !9
  %100 = load ptr, ptr %9, align 8, !tbaa !5
  %101 = load i16, ptr %28, align 2, !tbaa !18
  call void @libxsmm_generator_x86_save_gpr_regs(ptr noundef %100, i16 noundef zeroext %101)
  %102 = load ptr, ptr %12, align 8, !tbaa !5
  %103 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %102, i32 0, i32 125
  %104 = load i32, ptr %103, align 4, !tbaa !22
  %105 = icmp ne i32 %104, 0
  br i1 %105, label %111, label %106

106:                                              ; preds = %85
  %107 = load ptr, ptr %12, align 8, !tbaa !5
  %108 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %107, i32 0, i32 127
  %109 = load i32, ptr %108, align 4, !tbaa !25
  %110 = icmp ne i32 %109, 0
  br i1 %110, label %111, label %126

111:                                              ; preds = %106, %85
  store i32 29, ptr %29, align 4, !tbaa !9
  store i32 1, ptr %30, align 4, !tbaa !9
  %112 = load ptr, ptr %14, align 8, !tbaa !5
  %113 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %112, i32 0, i32 2
  %114 = load i32, ptr %113, align 1, !tbaa !19
  %115 = udiv i32 %114, 2
  store i32 %115, ptr %31, align 4, !tbaa !9
  %116 = load ptr, ptr %14, align 8, !tbaa !5
  %117 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %116, i32 0, i32 0
  %118 = load i32, ptr %117, align 1, !tbaa !20
  store i32 %118, ptr %32, align 4, !tbaa !9
  %119 = load ptr, ptr %14, align 8, !tbaa !5
  %120 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %119, i32 0, i32 3
  %121 = load i32, ptr %120, align 1, !tbaa !21
  %122 = udiv i32 %121, 2
  store i32 %122, ptr %33, align 4, !tbaa !9
  %123 = load ptr, ptr %14, align 8, !tbaa !5
  %124 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %123, i32 0, i32 0
  %125 = load i32, ptr %124, align 1, !tbaa !20
  store i32 %125, ptr %34, align 4, !tbaa !9
  br label %151

126:                                              ; preds = %106
  %127 = load ptr, ptr %12, align 8, !tbaa !5
  %128 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %127, i32 0, i32 123
  %129 = load i32, ptr %128, align 4, !tbaa !26
  %130 = icmp ne i32 %129, 0
  br i1 %130, label %136, label %131

131:                                              ; preds = %126
  %132 = load ptr, ptr %12, align 8, !tbaa !5
  %133 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %132, i32 0, i32 126
  %134 = load i32, ptr %133, align 8, !tbaa !27
  %135 = icmp ne i32 %134, 0
  br i1 %135, label %136, label %150

136:                                              ; preds = %131, %126
  store i32 28, ptr %29, align 4, !tbaa !9
  %137 = load i32, ptr %15, align 4, !tbaa !9
  store i32 %137, ptr %30, align 4, !tbaa !9
  %138 = load ptr, ptr %14, align 8, !tbaa !5
  %139 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %138, i32 0, i32 0
  %140 = load i32, ptr %139, align 1, !tbaa !20
  store i32 %140, ptr %31, align 4, !tbaa !9
  %141 = load ptr, ptr %14, align 8, !tbaa !5
  %142 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %141, i32 0, i32 2
  %143 = load i32, ptr %142, align 1, !tbaa !19
  store i32 %143, ptr %32, align 4, !tbaa !9
  %144 = load ptr, ptr %14, align 8, !tbaa !5
  %145 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %144, i32 0, i32 3
  %146 = load i32, ptr %145, align 1, !tbaa !21
  store i32 %146, ptr %33, align 4, !tbaa !9
  %147 = load ptr, ptr %14, align 8, !tbaa !5
  %148 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %147, i32 0, i32 0
  %149 = load i32, ptr %148, align 1, !tbaa !20
  store i32 %149, ptr %34, align 4, !tbaa !9
  br label %150

150:                                              ; preds = %136, %131
  br label %151

151:                                              ; preds = %150, %111
  %152 = load ptr, ptr %9, align 8, !tbaa !5
  %153 = load ptr, ptr %10, align 8, !tbaa !5
  %154 = load ptr, ptr %12, align 8, !tbaa !5
  %155 = load ptr, ptr %13, align 8, !tbaa !5
  %156 = load i32, ptr %26, align 4, !tbaa !9
  %157 = load i32, ptr %21, align 4, !tbaa !9
  %158 = load i32, ptr %22, align 4, !tbaa !9
  %159 = load i32, ptr %23, align 4, !tbaa !9
  %160 = load i32, ptr %24, align 4, !tbaa !9
  %161 = load i32, ptr %25, align 4, !tbaa !9
  %162 = load i32, ptr %29, align 4, !tbaa !9
  %163 = load i32, ptr %31, align 4, !tbaa !9
  %164 = load i32, ptr %32, align 4, !tbaa !9
  %165 = load i32, ptr %33, align 4, !tbaa !9
  %166 = load i32, ptr %34, align 4, !tbaa !9
  %167 = load ptr, ptr %14, align 8, !tbaa !5
  %168 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %167, i32 0, i32 10
  %169 = load i64, ptr %168, align 1, !tbaa !28
  %170 = trunc i64 %169 to i32
  %171 = icmp eq i32 -2147483648, %170
  br i1 %171, label %178, label %172

172:                                              ; preds = %151
  %173 = load ptr, ptr %14, align 8, !tbaa !5
  %174 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %173, i32 0, i32 10
  %175 = load i64, ptr %174, align 1, !tbaa !28
  %176 = trunc i64 %175 to i32
  %177 = icmp slt i32 -2147483648, %176
  br i1 %177, label %178, label %201

178:                                              ; preds = %172, %151
  %179 = load ptr, ptr %14, align 8, !tbaa !5
  %180 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %179, i32 0, i32 10
  %181 = load i64, ptr %180, align 1, !tbaa !28
  %182 = mul i64 1, %181
  %183 = icmp ult i64 %182, 2147483647
  br i1 %183, label %184, label %189

184:                                              ; preds = %178
  %185 = load ptr, ptr %14, align 8, !tbaa !5
  %186 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %185, i32 0, i32 10
  %187 = load i64, ptr %186, align 1, !tbaa !28
  %188 = mul i64 1, %187
  br label %190

189:                                              ; preds = %178
  br label %190

190:                                              ; preds = %189, %184
  %191 = phi i64 [ %188, %184 ], [ 2147483647, %189 ]
  %192 = icmp ule i64 %191, 2147483647
  br i1 %192, label %193, label %201

193:                                              ; preds = %190
  %194 = load ptr, ptr %14, align 8, !tbaa !5
  %195 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %194, i32 0, i32 10
  %196 = load i64, ptr %195, align 1, !tbaa !28
  %197 = sitofp i64 %196 to double
  %198 = fcmp ole double 0.000000e+00, %197
  br i1 %198, label %200, label %199

199:                                              ; preds = %193
  br i1 true, label %200, label %201

200:                                              ; preds = %199, %193
  br label %202

201:                                              ; preds = %199, %190, %172
  call void @__assert_fail(ptr noundef @.str.4, ptr noundef @.str.1, i32 noundef 269, ptr noundef @__PRETTY_FUNCTION__.libxsmm_generator_gemm_setup_A_vnni_or_trans_B_vnni_or_trans_tensor_to_stack) #5
  unreachable

202:                                              ; preds = %200
  %203 = load ptr, ptr %14, align 8, !tbaa !5
  %204 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %203, i32 0, i32 10
  %205 = load i64, ptr %204, align 1, !tbaa !28
  %206 = trunc i64 %205 to i32
  %207 = load i32, ptr %30, align 4, !tbaa !9
  %208 = load i32, ptr %30, align 4, !tbaa !9
  %209 = load i32, ptr %30, align 4, !tbaa !9
  call void @libxsmm_generator_gemm_apply_ops_input_tensor_and_store_to_stack(ptr noundef %152, ptr noundef %153, ptr noundef %154, ptr noundef %155, i32 noundef %156, i32 noundef %157, i32 noundef %158, i32 noundef %159, i32 noundef %160, i32 noundef %161, i32 noundef %162, i32 noundef %163, i32 noundef %164, i32 noundef %165, i32 noundef %166, i32 noundef %206, i32 noundef %207, i32 noundef %208, i32 noundef %209, i32 noundef 3, i32 noundef 27, i32 noundef 21, i32 noundef 0, i32 noundef 0, i32 noundef 0, i32 noundef 0, i32 noundef 0, i32 noundef 0, i32 noundef 0, i32 noundef 0)
  %210 = load ptr, ptr %9, align 8, !tbaa !5
  %211 = load ptr, ptr %12, align 8, !tbaa !5
  %212 = load i32, ptr %22, align 4, !tbaa !9
  call void @libxsmm_generator_gemm_getval_stack_var(ptr noundef %210, ptr noundef %211, i32 noundef 21, i32 noundef %212)
  %213 = load ptr, ptr %9, align 8, !tbaa !5
  %214 = load ptr, ptr %12, align 8, !tbaa !5
  %215 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %214, i32 0, i32 20
  %216 = load i32, ptr %215, align 8, !tbaa !29
  %217 = load i32, ptr %22, align 4, !tbaa !9
  %218 = load i32, ptr %26, align 4, !tbaa !9
  call void @libxsmm_x86_instruction_alu_reg(ptr noundef %213, i32 noundef %216, i32 noundef %217, i32 noundef %218)
  %219 = load ptr, ptr %12, align 8, !tbaa !5
  %220 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %219, i32 0, i32 126
  %221 = load i32, ptr %220, align 8, !tbaa !27
  %222 = icmp ne i32 %221, 0
  br i1 %222, label %228, label %223

223:                                              ; preds = %202
  %224 = load ptr, ptr %12, align 8, !tbaa !5
  %225 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %224, i32 0, i32 127
  %226 = load i32, ptr %225, align 4, !tbaa !25
  %227 = icmp ne i32 %226, 0
  br i1 %227, label %228, label %406

228:                                              ; preds = %223, %202
  %229 = load ptr, ptr %9, align 8, !tbaa !5
  %230 = load ptr, ptr %10, align 8, !tbaa !5
  %231 = load ptr, ptr %12, align 8, !tbaa !5
  %232 = load ptr, ptr %13, align 8, !tbaa !5
  %233 = load i32, ptr %27, align 4, !tbaa !9
  %234 = load i32, ptr %21, align 4, !tbaa !9
  %235 = load i32, ptr %22, align 4, !tbaa !9
  %236 = load i32, ptr %23, align 4, !tbaa !9
  %237 = load i32, ptr %24, align 4, !tbaa !9
  %238 = load i32, ptr %25, align 4, !tbaa !9
  %239 = load ptr, ptr %13, align 8, !tbaa !5
  %240 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %239, i32 0, i32 1
  %241 = load i32, ptr %240, align 1, !tbaa !30
  %242 = load ptr, ptr %13, align 8, !tbaa !5
  %243 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %242, i32 0, i32 2
  %244 = load i32, ptr %243, align 1, !tbaa !19
  %245 = load ptr, ptr %14, align 8, !tbaa !5
  %246 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %245, i32 0, i32 4
  %247 = load i32, ptr %246, align 1, !tbaa !31
  %248 = load ptr, ptr %13, align 8, !tbaa !5
  %249 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %248, i32 0, i32 2
  %250 = load i32, ptr %249, align 1, !tbaa !19
  %251 = load ptr, ptr %14, align 8, !tbaa !5
  %252 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %251, i32 0, i32 11
  %253 = load i64, ptr %252, align 1, !tbaa !32
  %254 = trunc i64 %253 to i32
  %255 = icmp eq i32 -2147483648, %254
  br i1 %255, label %262, label %256

256:                                              ; preds = %228
  %257 = load ptr, ptr %14, align 8, !tbaa !5
  %258 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %257, i32 0, i32 11
  %259 = load i64, ptr %258, align 1, !tbaa !32
  %260 = trunc i64 %259 to i32
  %261 = icmp slt i32 -2147483648, %260
  br i1 %261, label %262, label %285

262:                                              ; preds = %256, %228
  %263 = load ptr, ptr %14, align 8, !tbaa !5
  %264 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %263, i32 0, i32 11
  %265 = load i64, ptr %264, align 1, !tbaa !32
  %266 = mul i64 1, %265
  %267 = icmp ult i64 %266, 2147483647
  br i1 %267, label %268, label %273

268:                                              ; preds = %262
  %269 = load ptr, ptr %14, align 8, !tbaa !5
  %270 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %269, i32 0, i32 11
  %271 = load i64, ptr %270, align 1, !tbaa !32
  %272 = mul i64 1, %271
  br label %274

273:                                              ; preds = %262
  br label %274

274:                                              ; preds = %273, %268
  %275 = phi i64 [ %272, %268 ], [ 2147483647, %273 ]
  %276 = icmp ule i64 %275, 2147483647
  br i1 %276, label %277, label %285

277:                                              ; preds = %274
  %278 = load ptr, ptr %14, align 8, !tbaa !5
  %279 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %278, i32 0, i32 11
  %280 = load i64, ptr %279, align 1, !tbaa !32
  %281 = sitofp i64 %280 to double
  %282 = fcmp ole double 0.000000e+00, %281
  br i1 %282, label %284, label %283

283:                                              ; preds = %277
  br i1 true, label %284, label %285

284:                                              ; preds = %283, %277
  br label %286

285:                                              ; preds = %283, %274, %256
  call void @__assert_fail(ptr noundef @.str.5, ptr noundef @.str.1, i32 noundef 281, ptr noundef @__PRETTY_FUNCTION__.libxsmm_generator_gemm_setup_A_vnni_or_trans_B_vnni_or_trans_tensor_to_stack) #5
  unreachable

286:                                              ; preds = %284
  %287 = load ptr, ptr %14, align 8, !tbaa !5
  %288 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %287, i32 0, i32 11
  %289 = load i64, ptr %288, align 1, !tbaa !32
  %290 = trunc i64 %289 to i32
  %291 = load i32, ptr %15, align 4, !tbaa !9
  %292 = load i32, ptr %15, align 4, !tbaa !9
  %293 = load i32, ptr %15, align 4, !tbaa !9
  call void @libxsmm_generator_gemm_apply_ops_input_tensor_and_store_to_stack(ptr noundef %229, ptr noundef %230, ptr noundef %231, ptr noundef %232, i32 noundef %233, i32 noundef %234, i32 noundef %235, i32 noundef %236, i32 noundef %237, i32 noundef %238, i32 noundef 29, i32 noundef %241, i32 noundef %244, i32 noundef %247, i32 noundef %250, i32 noundef %290, i32 noundef %291, i32 noundef %292, i32 noundef %293, i32 noundef 4, i32 noundef 27, i32 noundef 25, i32 noundef 0, i32 noundef 0, i32 noundef 0, i32 noundef 0, i32 noundef 0, i32 noundef 0, i32 noundef 0, i32 noundef 0)
  %294 = load ptr, ptr %9, align 8, !tbaa !5
  %295 = load ptr, ptr %12, align 8, !tbaa !5
  %296 = load i32, ptr %22, align 4, !tbaa !9
  call void @libxsmm_generator_gemm_getval_stack_var(ptr noundef %294, ptr noundef %295, i32 noundef 25, i32 noundef %296)
  %297 = load ptr, ptr %9, align 8, !tbaa !5
  %298 = load ptr, ptr %12, align 8, !tbaa !5
  %299 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %298, i32 0, i32 20
  %300 = load i32, ptr %299, align 8, !tbaa !29
  %301 = load i32, ptr %22, align 4, !tbaa !9
  %302 = load i32, ptr %27, align 4, !tbaa !9
  call void @libxsmm_x86_instruction_alu_reg(ptr noundef %297, i32 noundef %300, i32 noundef %301, i32 noundef %302)
  %303 = load ptr, ptr %13, align 8, !tbaa !5
  %304 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %303, i32 0, i32 2
  %305 = load i32, ptr %304, align 1, !tbaa !19
  %306 = load ptr, ptr %13, align 8, !tbaa !5
  %307 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %306, i32 0, i32 4
  store i32 %305, ptr %307, align 1, !tbaa !31
  %308 = load i32, ptr %15, align 4, !tbaa !9
  %309 = icmp eq i32 0, %308
  br i1 %309, label %310, label %311

310:                                              ; preds = %286
  br label %391

311:                                              ; preds = %286
  %312 = load i32, ptr %15, align 4, !tbaa !9
  %313 = icmp eq i32 1, %312
  br i1 %313, label %314, label %315

314:                                              ; preds = %311
  br label %389

315:                                              ; preds = %311
  %316 = load i32, ptr %15, align 4, !tbaa !9
  %317 = icmp eq i32 2, %316
  br i1 %317, label %318, label %319

318:                                              ; preds = %315
  br label %387

319:                                              ; preds = %315
  %320 = load i32, ptr %15, align 4, !tbaa !9
  %321 = icmp eq i32 3, %320
  br i1 %321, label %322, label %323

322:                                              ; preds = %319
  br label %385

323:                                              ; preds = %319
  %324 = load i32, ptr %15, align 4, !tbaa !9
  %325 = icmp eq i32 4, %324
  br i1 %325, label %326, label %327

326:                                              ; preds = %323
  br label %383

327:                                              ; preds = %323
  %328 = load i32, ptr %15, align 4, !tbaa !9
  %329 = icmp eq i32 5, %328
  br i1 %329, label %330, label %331

330:                                              ; preds = %327
  br label %381

331:                                              ; preds = %327
  %332 = load i32, ptr %15, align 4, !tbaa !9
  %333 = icmp eq i32 6, %332
  br i1 %333, label %334, label %335

334:                                              ; preds = %331
  br label %379

335:                                              ; preds = %331
  %336 = load i32, ptr %15, align 4, !tbaa !9
  %337 = icmp eq i32 7, %336
  br i1 %337, label %338, label %339

338:                                              ; preds = %335
  br label %377

339:                                              ; preds = %335
  %340 = load i32, ptr %15, align 4, !tbaa !9
  %341 = icmp eq i32 8, %340
  br i1 %341, label %342, label %343

342:                                              ; preds = %339
  br label %375

343:                                              ; preds = %339
  %344 = load i32, ptr %15, align 4, !tbaa !9
  %345 = icmp eq i32 9, %344
  br i1 %345, label %346, label %347

346:                                              ; preds = %343
  br label %373

347:                                              ; preds = %343
  %348 = load i32, ptr %15, align 4, !tbaa !9
  %349 = icmp eq i32 10, %348
  br i1 %349, label %350, label %351

350:                                              ; preds = %347
  br label %371

351:                                              ; preds = %347
  %352 = load i32, ptr %15, align 4, !tbaa !9
  %353 = icmp eq i32 11, %352
  br i1 %353, label %354, label %355

354:                                              ; preds = %351
  br label %369

355:                                              ; preds = %351
  %356 = load i32, ptr %15, align 4, !tbaa !9
  %357 = icmp eq i32 12, %356
  br i1 %357, label %358, label %359

358:                                              ; preds = %355
  br label %367

359:                                              ; preds = %355
  %360 = load i32, ptr %15, align 4, !tbaa !9
  %361 = icmp eq i32 13, %360
  br i1 %361, label %362, label %363

362:                                              ; preds = %359
  br label %365

363:                                              ; preds = %359
  call void @__assert_fail(ptr noundef @.str, ptr noundef @.str.1, i32 noundef 289, ptr noundef @__PRETTY_FUNCTION__.libxsmm_generator_gemm_setup_A_vnni_or_trans_B_vnni_or_trans_tensor_to_stack) #5
  unreachable

364:                                              ; No predecessors!
  br label %365

365:                                              ; preds = %364, %362
  %366 = phi i32 [ 1, %362 ], [ 0, %364 ]
  br label %367

367:                                              ; preds = %365, %358
  %368 = phi i32 [ 1, %358 ], [ %366, %365 ]
  br label %369

369:                                              ; preds = %367, %354
  %370 = phi i32 [ 2, %354 ], [ %368, %367 ]
  br label %371

371:                                              ; preds = %369, %350
  %372 = phi i32 [ 2, %350 ], [ %370, %369 ]
  br label %373

373:                                              ; preds = %371, %346
  %374 = phi i32 [ 4, %346 ], [ %372, %371 ]
  br label %375

375:                                              ; preds = %373, %342
  %376 = phi i32 [ 4, %342 ], [ %374, %373 ]
  br label %377

377:                                              ; preds = %375, %338
  %378 = phi i32 [ 8, %338 ], [ %376, %375 ]
  br label %379

379:                                              ; preds = %377, %334
  %380 = phi i32 [ 8, %334 ], [ %378, %377 ]
  br label %381

381:                                              ; preds = %379, %330
  %382 = phi i32 [ 1, %330 ], [ %380, %379 ]
  br label %383

383:                                              ; preds = %381, %326
  %384 = phi i32 [ 1, %326 ], [ %382, %381 ]
  br label %385

385:                                              ; preds = %383, %322
  %386 = phi i32 [ 2, %322 ], [ %384, %383 ]
  br label %387

387:                                              ; preds = %385, %318
  %388 = phi i32 [ 2, %318 ], [ %386, %385 ]
  br label %389

389:                                              ; preds = %387, %314
  %390 = phi i32 [ 4, %314 ], [ %388, %387 ]
  br label %391

391:                                              ; preds = %389, %310
  %392 = phi i32 [ 8, %310 ], [ %390, %389 ]
  %393 = sext i32 %392 to i64
  %394 = load ptr, ptr %13, align 8, !tbaa !5
  %395 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %394, i32 0, i32 1
  %396 = load i32, ptr %395, align 1, !tbaa !30
  %397 = zext i32 %396 to i64
  %398 = mul nsw i64 %393, %397
  %399 = load ptr, ptr %13, align 8, !tbaa !5
  %400 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %399, i32 0, i32 2
  %401 = load i32, ptr %400, align 1, !tbaa !19
  %402 = zext i32 %401 to i64
  %403 = mul nsw i64 %398, %402
  %404 = load ptr, ptr %13, align 8, !tbaa !5
  %405 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %404, i32 0, i32 11
  store i64 %403, ptr %405, align 1, !tbaa !32
  br label %533

406:                                              ; preds = %223
  %407 = load i32, ptr %18, align 4, !tbaa !9
  %408 = icmp sgt i32 %407, 0
  br i1 %408, label %412, label %409

409:                                              ; preds = %406
  %410 = load i32, ptr %19, align 4, !tbaa !9
  %411 = icmp sgt i32 %410, 0
  br i1 %411, label %412, label %532

412:                                              ; preds = %409, %406
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #4
  %413 = load ptr, ptr %14, align 8, !tbaa !5
  %414 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %413, i32 0, i32 6
  %415 = load i32, ptr %414, align 1, !tbaa !11
  %416 = and i32 %415, 2
  store i32 %416, ptr %35, align 4, !tbaa !9
  %417 = load ptr, ptr %9, align 8, !tbaa !5
  %418 = load ptr, ptr %10, align 8, !tbaa !5
  %419 = load ptr, ptr %12, align 8, !tbaa !5
  %420 = load ptr, ptr %13, align 8, !tbaa !5
  %421 = load i32, ptr %27, align 4, !tbaa !9
  %422 = load i32, ptr %21, align 4, !tbaa !9
  %423 = load i32, ptr %22, align 4, !tbaa !9
  %424 = load i32, ptr %23, align 4, !tbaa !9
  %425 = load i32, ptr %24, align 4, !tbaa !9
  %426 = load i32, ptr %25, align 4, !tbaa !9
  %427 = load i32, ptr %35, align 4, !tbaa !9
  %428 = icmp ne i32 %427, 0
  br i1 %428, label %429, label %433

429:                                              ; preds = %412
  %430 = load ptr, ptr %13, align 8, !tbaa !5
  %431 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %430, i32 0, i32 1
  %432 = load i32, ptr %431, align 1, !tbaa !30
  br label %437

433:                                              ; preds = %412
  %434 = load ptr, ptr %13, align 8, !tbaa !5
  %435 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %434, i32 0, i32 2
  %436 = load i32, ptr %435, align 1, !tbaa !19
  br label %437

437:                                              ; preds = %433, %429
  %438 = phi i32 [ %432, %429 ], [ %436, %433 ]
  %439 = load i32, ptr %35, align 4, !tbaa !9
  %440 = icmp ne i32 %439, 0
  br i1 %440, label %441, label %445

441:                                              ; preds = %437
  %442 = load ptr, ptr %13, align 8, !tbaa !5
  %443 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %442, i32 0, i32 2
  %444 = load i32, ptr %443, align 1, !tbaa !19
  br label %449

445:                                              ; preds = %437
  %446 = load ptr, ptr %13, align 8, !tbaa !5
  %447 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %446, i32 0, i32 1
  %448 = load i32, ptr %447, align 1, !tbaa !30
  br label %449

449:                                              ; preds = %445, %441
  %450 = phi i32 [ %444, %441 ], [ %448, %445 ]
  %451 = load ptr, ptr %14, align 8, !tbaa !5
  %452 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %451, i32 0, i32 4
  %453 = load i32, ptr %452, align 1, !tbaa !31
  %454 = load i32, ptr %35, align 4, !tbaa !9
  %455 = icmp ne i32 %454, 0
  br i1 %455, label %456, label %460

456:                                              ; preds = %449
  %457 = load ptr, ptr %13, align 8, !tbaa !5
  %458 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %457, i32 0, i32 1
  %459 = load i32, ptr %458, align 1, !tbaa !30
  br label %464

460:                                              ; preds = %449
  %461 = load ptr, ptr %13, align 8, !tbaa !5
  %462 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %461, i32 0, i32 2
  %463 = load i32, ptr %462, align 1, !tbaa !19
  br label %464

464:                                              ; preds = %460, %456
  %465 = phi i32 [ %459, %456 ], [ %463, %460 ]
  %466 = load ptr, ptr %14, align 8, !tbaa !5
  %467 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %466, i32 0, i32 11
  %468 = load i64, ptr %467, align 1, !tbaa !32
  %469 = trunc i64 %468 to i32
  %470 = icmp eq i32 -2147483648, %469
  br i1 %470, label %477, label %471

471:                                              ; preds = %464
  %472 = load ptr, ptr %14, align 8, !tbaa !5
  %473 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %472, i32 0, i32 11
  %474 = load i64, ptr %473, align 1, !tbaa !32
  %475 = trunc i64 %474 to i32
  %476 = icmp slt i32 -2147483648, %475
  br i1 %476, label %477, label %500

477:                                              ; preds = %471, %464
  %478 = load ptr, ptr %14, align 8, !tbaa !5
  %479 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %478, i32 0, i32 11
  %480 = load i64, ptr %479, align 1, !tbaa !32
  %481 = mul i64 1, %480
  %482 = icmp ult i64 %481, 2147483647
  br i1 %482, label %483, label %488

483:                                              ; preds = %477
  %484 = load ptr, ptr %14, align 8, !tbaa !5
  %485 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %484, i32 0, i32 11
  %486 = load i64, ptr %485, align 1, !tbaa !32
  %487 = mul i64 1, %486
  br label %489

488:                                              ; preds = %477
  br label %489

489:                                              ; preds = %488, %483
  %490 = phi i64 [ %487, %483 ], [ 2147483647, %488 ]
  %491 = icmp ule i64 %490, 2147483647
  br i1 %491, label %492, label %500

492:                                              ; preds = %489
  %493 = load ptr, ptr %14, align 8, !tbaa !5
  %494 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %493, i32 0, i32 11
  %495 = load i64, ptr %494, align 1, !tbaa !32
  %496 = sitofp i64 %495 to double
  %497 = fcmp ole double 0.000000e+00, %496
  br i1 %497, label %499, label %498

498:                                              ; preds = %492
  br i1 true, label %499, label %500

499:                                              ; preds = %498, %492
  br label %501

500:                                              ; preds = %498, %489, %471
  call void @__assert_fail(ptr noundef @.str.5, ptr noundef @.str.1, i32 noundef 295, ptr noundef @__PRETTY_FUNCTION__.libxsmm_generator_gemm_setup_A_vnni_or_trans_B_vnni_or_trans_tensor_to_stack) #5
  unreachable

501:                                              ; preds = %499
  %502 = load ptr, ptr %14, align 8, !tbaa !5
  %503 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %502, i32 0, i32 11
  %504 = load i64, ptr %503, align 1, !tbaa !32
  %505 = trunc i64 %504 to i32
  %506 = load i32, ptr %15, align 4, !tbaa !9
  %507 = load i32, ptr %15, align 4, !tbaa !9
  %508 = load i32, ptr %15, align 4, !tbaa !9
  call void @libxsmm_generator_gemm_apply_ops_input_tensor_and_store_to_stack(ptr noundef %417, ptr noundef %418, ptr noundef %419, ptr noundef %420, i32 noundef %421, i32 noundef %422, i32 noundef %423, i32 noundef %424, i32 noundef %425, i32 noundef %426, i32 noundef 1, i32 noundef %438, i32 noundef %450, i32 noundef %453, i32 noundef %465, i32 noundef %505, i32 noundef %506, i32 noundef %507, i32 noundef %508, i32 noundef 4, i32 noundef 27, i32 noundef 25, i32 noundef 0, i32 noundef 0, i32 noundef 0, i32 noundef 0, i32 noundef 0, i32 noundef 0, i32 noundef 0, i32 noundef 0)
  %509 = load i32, ptr %35, align 4, !tbaa !9
  %510 = icmp ne i32 %509, 0
  br i1 %510, label %511, label %515

511:                                              ; preds = %501
  %512 = load ptr, ptr %13, align 8, !tbaa !5
  %513 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %512, i32 0, i32 1
  %514 = load i32, ptr %513, align 1, !tbaa !30
  br label %519

515:                                              ; preds = %501
  %516 = load ptr, ptr %13, align 8, !tbaa !5
  %517 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %516, i32 0, i32 2
  %518 = load i32, ptr %517, align 1, !tbaa !19
  br label %519

519:                                              ; preds = %515, %511
  %520 = phi i32 [ %514, %511 ], [ %518, %515 ]
  %521 = load ptr, ptr %13, align 8, !tbaa !5
  %522 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %521, i32 0, i32 4
  store i32 %520, ptr %522, align 1, !tbaa !31
  %523 = load ptr, ptr %9, align 8, !tbaa !5
  %524 = load ptr, ptr %12, align 8, !tbaa !5
  %525 = load i32, ptr %22, align 4, !tbaa !9
  call void @libxsmm_generator_gemm_getval_stack_var(ptr noundef %523, ptr noundef %524, i32 noundef 25, i32 noundef %525)
  %526 = load ptr, ptr %9, align 8, !tbaa !5
  %527 = load ptr, ptr %12, align 8, !tbaa !5
  %528 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %527, i32 0, i32 20
  %529 = load i32, ptr %528, align 8, !tbaa !29
  %530 = load i32, ptr %22, align 4, !tbaa !9
  %531 = load i32, ptr %27, align 4, !tbaa !9
  call void @libxsmm_x86_instruction_alu_reg(ptr noundef %526, i32 noundef %529, i32 noundef %530, i32 noundef %531)
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #4
  br label %532

532:                                              ; preds = %519, %409
  br label %533

533:                                              ; preds = %532, %391
  %534 = load i32, ptr %20, align 4, !tbaa !9
  %535 = icmp sgt i32 %534, 0
  br i1 %535, label %536, label %863

536:                                              ; preds = %533
  %537 = load i32, ptr %18, align 4, !tbaa !9
  %538 = icmp sgt i32 %537, 0
  br i1 %538, label %539, label %650

539:                                              ; preds = %536
  %540 = load ptr, ptr %13, align 8, !tbaa !5
  %541 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %540, i32 0, i32 6
  %542 = load i32, ptr %541, align 1, !tbaa !11
  %543 = xor i32 %542, 131072
  %544 = load ptr, ptr %13, align 8, !tbaa !5
  %545 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %544, i32 0, i32 6
  store i32 %543, ptr %545, align 1, !tbaa !11
  %546 = load ptr, ptr %13, align 8, !tbaa !5
  %547 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %546, i32 0, i32 6
  %548 = load i32, ptr %547, align 1, !tbaa !11
  %549 = or i32 %548, 262144
  %550 = load ptr, ptr %13, align 8, !tbaa !5
  %551 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %550, i32 0, i32 6
  store i32 %549, ptr %551, align 1, !tbaa !11
  %552 = load i32, ptr %15, align 4, !tbaa !9
  %553 = icmp eq i32 0, %552
  br i1 %553, label %554, label %555

554:                                              ; preds = %539
  br label %635

555:                                              ; preds = %539
  %556 = load i32, ptr %15, align 4, !tbaa !9
  %557 = icmp eq i32 1, %556
  br i1 %557, label %558, label %559

558:                                              ; preds = %555
  br label %633

559:                                              ; preds = %555
  %560 = load i32, ptr %15, align 4, !tbaa !9
  %561 = icmp eq i32 2, %560
  br i1 %561, label %562, label %563

562:                                              ; preds = %559
  br label %631

563:                                              ; preds = %559
  %564 = load i32, ptr %15, align 4, !tbaa !9
  %565 = icmp eq i32 3, %564
  br i1 %565, label %566, label %567

566:                                              ; preds = %563
  br label %629

567:                                              ; preds = %563
  %568 = load i32, ptr %15, align 4, !tbaa !9
  %569 = icmp eq i32 4, %568
  br i1 %569, label %570, label %571

570:                                              ; preds = %567
  br label %627

571:                                              ; preds = %567
  %572 = load i32, ptr %15, align 4, !tbaa !9
  %573 = icmp eq i32 5, %572
  br i1 %573, label %574, label %575

574:                                              ; preds = %571
  br label %625

575:                                              ; preds = %571
  %576 = load i32, ptr %15, align 4, !tbaa !9
  %577 = icmp eq i32 6, %576
  br i1 %577, label %578, label %579

578:                                              ; preds = %575
  br label %623

579:                                              ; preds = %575
  %580 = load i32, ptr %15, align 4, !tbaa !9
  %581 = icmp eq i32 7, %580
  br i1 %581, label %582, label %583

582:                                              ; preds = %579
  br label %621

583:                                              ; preds = %579
  %584 = load i32, ptr %15, align 4, !tbaa !9
  %585 = icmp eq i32 8, %584
  br i1 %585, label %586, label %587

586:                                              ; preds = %583
  br label %619

587:                                              ; preds = %583
  %588 = load i32, ptr %15, align 4, !tbaa !9
  %589 = icmp eq i32 9, %588
  br i1 %589, label %590, label %591

590:                                              ; preds = %587
  br label %617

591:                                              ; preds = %587
  %592 = load i32, ptr %15, align 4, !tbaa !9
  %593 = icmp eq i32 10, %592
  br i1 %593, label %594, label %595

594:                                              ; preds = %591
  br label %615

595:                                              ; preds = %591
  %596 = load i32, ptr %15, align 4, !tbaa !9
  %597 = icmp eq i32 11, %596
  br i1 %597, label %598, label %599

598:                                              ; preds = %595
  br label %613

599:                                              ; preds = %595
  %600 = load i32, ptr %15, align 4, !tbaa !9
  %601 = icmp eq i32 12, %600
  br i1 %601, label %602, label %603

602:                                              ; preds = %599
  br label %611

603:                                              ; preds = %599
  %604 = load i32, ptr %15, align 4, !tbaa !9
  %605 = icmp eq i32 13, %604
  br i1 %605, label %606, label %607

606:                                              ; preds = %603
  br label %609

607:                                              ; preds = %603
  call void @__assert_fail(ptr noundef @.str, ptr noundef @.str.1, i32 noundef 311, ptr noundef @__PRETTY_FUNCTION__.libxsmm_generator_gemm_setup_A_vnni_or_trans_B_vnni_or_trans_tensor_to_stack) #5
  unreachable

608:                                              ; No predecessors!
  br label %609

609:                                              ; preds = %608, %606
  %610 = phi i32 [ 1, %606 ], [ 0, %608 ]
  br label %611

611:                                              ; preds = %609, %602
  %612 = phi i32 [ 1, %602 ], [ %610, %609 ]
  br label %613

613:                                              ; preds = %611, %598
  %614 = phi i32 [ 2, %598 ], [ %612, %611 ]
  br label %615

615:                                              ; preds = %613, %594
  %616 = phi i32 [ 2, %594 ], [ %614, %613 ]
  br label %617

617:                                              ; preds = %615, %590
  %618 = phi i32 [ 4, %590 ], [ %616, %615 ]
  br label %619

619:                                              ; preds = %617, %586
  %620 = phi i32 [ 4, %586 ], [ %618, %617 ]
  br label %621

621:                                              ; preds = %619, %582
  %622 = phi i32 [ 8, %582 ], [ %620, %619 ]
  br label %623

623:                                              ; preds = %621, %578
  %624 = phi i32 [ 8, %578 ], [ %622, %621 ]
  br label %625

625:                                              ; preds = %623, %574
  %626 = phi i32 [ 1, %574 ], [ %624, %623 ]
  br label %627

627:                                              ; preds = %625, %570
  %628 = phi i32 [ 1, %570 ], [ %626, %625 ]
  br label %629

629:                                              ; preds = %627, %566
  %630 = phi i32 [ 2, %566 ], [ %628, %627 ]
  br label %631

631:                                              ; preds = %629, %562
  %632 = phi i32 [ 2, %562 ], [ %630, %629 ]
  br label %633

633:                                              ; preds = %631, %558
  %634 = phi i32 [ 4, %558 ], [ %632, %631 ]
  br label %635

635:                                              ; preds = %633, %554
  %636 = phi i32 [ 8, %554 ], [ %634, %633 ]
  %637 = sext i32 %636 to i64
  %638 = load ptr, ptr %13, align 8, !tbaa !5
  %639 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %638, i32 0, i32 1
  %640 = load i32, ptr %639, align 1, !tbaa !30
  %641 = zext i32 %640 to i64
  %642 = mul nsw i64 %637, %641
  %643 = load ptr, ptr %13, align 8, !tbaa !5
  %644 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %643, i32 0, i32 2
  %645 = load i32, ptr %644, align 1, !tbaa !19
  %646 = zext i32 %645 to i64
  %647 = mul nsw i64 %642, %646
  %648 = load ptr, ptr %13, align 8, !tbaa !5
  %649 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %648, i32 0, i32 11
  store i64 %647, ptr %649, align 1, !tbaa !32
  br label %650

650:                                              ; preds = %635, %536
  %651 = load i32, ptr %19, align 4, !tbaa !9
  %652 = icmp sgt i32 %651, 0
  br i1 %652, label %653, label %764

653:                                              ; preds = %650
  %654 = load ptr, ptr %13, align 8, !tbaa !5
  %655 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %654, i32 0, i32 6
  %656 = load i32, ptr %655, align 1, !tbaa !11
  %657 = xor i32 %656, 65536
  %658 = load ptr, ptr %13, align 8, !tbaa !5
  %659 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %658, i32 0, i32 6
  store i32 %657, ptr %659, align 1, !tbaa !11
  %660 = load ptr, ptr %13, align 8, !tbaa !5
  %661 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %660, i32 0, i32 6
  %662 = load i32, ptr %661, align 1, !tbaa !11
  %663 = or i32 %662, 262144
  %664 = load ptr, ptr %13, align 8, !tbaa !5
  %665 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %664, i32 0, i32 6
  store i32 %663, ptr %665, align 1, !tbaa !11
  %666 = load i32, ptr %15, align 4, !tbaa !9
  %667 = icmp eq i32 0, %666
  br i1 %667, label %668, label %669

668:                                              ; preds = %653
  br label %749

669:                                              ; preds = %653
  %670 = load i32, ptr %15, align 4, !tbaa !9
  %671 = icmp eq i32 1, %670
  br i1 %671, label %672, label %673

672:                                              ; preds = %669
  br label %747

673:                                              ; preds = %669
  %674 = load i32, ptr %15, align 4, !tbaa !9
  %675 = icmp eq i32 2, %674
  br i1 %675, label %676, label %677

676:                                              ; preds = %673
  br label %745

677:                                              ; preds = %673
  %678 = load i32, ptr %15, align 4, !tbaa !9
  %679 = icmp eq i32 3, %678
  br i1 %679, label %680, label %681

680:                                              ; preds = %677
  br label %743

681:                                              ; preds = %677
  %682 = load i32, ptr %15, align 4, !tbaa !9
  %683 = icmp eq i32 4, %682
  br i1 %683, label %684, label %685

684:                                              ; preds = %681
  br label %741

685:                                              ; preds = %681
  %686 = load i32, ptr %15, align 4, !tbaa !9
  %687 = icmp eq i32 5, %686
  br i1 %687, label %688, label %689

688:                                              ; preds = %685
  br label %739

689:                                              ; preds = %685
  %690 = load i32, ptr %15, align 4, !tbaa !9
  %691 = icmp eq i32 6, %690
  br i1 %691, label %692, label %693

692:                                              ; preds = %689
  br label %737

693:                                              ; preds = %689
  %694 = load i32, ptr %15, align 4, !tbaa !9
  %695 = icmp eq i32 7, %694
  br i1 %695, label %696, label %697

696:                                              ; preds = %693
  br label %735

697:                                              ; preds = %693
  %698 = load i32, ptr %15, align 4, !tbaa !9
  %699 = icmp eq i32 8, %698
  br i1 %699, label %700, label %701

700:                                              ; preds = %697
  br label %733

701:                                              ; preds = %697
  %702 = load i32, ptr %15, align 4, !tbaa !9
  %703 = icmp eq i32 9, %702
  br i1 %703, label %704, label %705

704:                                              ; preds = %701
  br label %731

705:                                              ; preds = %701
  %706 = load i32, ptr %15, align 4, !tbaa !9
  %707 = icmp eq i32 10, %706
  br i1 %707, label %708, label %709

708:                                              ; preds = %705
  br label %729

709:                                              ; preds = %705
  %710 = load i32, ptr %15, align 4, !tbaa !9
  %711 = icmp eq i32 11, %710
  br i1 %711, label %712, label %713

712:                                              ; preds = %709
  br label %727

713:                                              ; preds = %709
  %714 = load i32, ptr %15, align 4, !tbaa !9
  %715 = icmp eq i32 12, %714
  br i1 %715, label %716, label %717

716:                                              ; preds = %713
  br label %725

717:                                              ; preds = %713
  %718 = load i32, ptr %15, align 4, !tbaa !9
  %719 = icmp eq i32 13, %718
  br i1 %719, label %720, label %721

720:                                              ; preds = %717
  br label %723

721:                                              ; preds = %717
  call void @__assert_fail(ptr noundef @.str, ptr noundef @.str.1, i32 noundef 316, ptr noundef @__PRETTY_FUNCTION__.libxsmm_generator_gemm_setup_A_vnni_or_trans_B_vnni_or_trans_tensor_to_stack) #5
  unreachable

722:                                              ; No predecessors!
  br label %723

723:                                              ; preds = %722, %720
  %724 = phi i32 [ 1, %720 ], [ 0, %722 ]
  br label %725

725:                                              ; preds = %723, %716
  %726 = phi i32 [ 1, %716 ], [ %724, %723 ]
  br label %727

727:                                              ; preds = %725, %712
  %728 = phi i32 [ 2, %712 ], [ %726, %725 ]
  br label %729

729:                                              ; preds = %727, %708
  %730 = phi i32 [ 2, %708 ], [ %728, %727 ]
  br label %731

731:                                              ; preds = %729, %704
  %732 = phi i32 [ 4, %704 ], [ %730, %729 ]
  br label %733

733:                                              ; preds = %731, %700
  %734 = phi i32 [ 4, %700 ], [ %732, %731 ]
  br label %735

735:                                              ; preds = %733, %696
  %736 = phi i32 [ 8, %696 ], [ %734, %733 ]
  br label %737

737:                                              ; preds = %735, %692
  %738 = phi i32 [ 8, %692 ], [ %736, %735 ]
  br label %739

739:                                              ; preds = %737, %688
  %740 = phi i32 [ 1, %688 ], [ %738, %737 ]
  br label %741

741:                                              ; preds = %739, %684
  %742 = phi i32 [ 1, %684 ], [ %740, %739 ]
  br label %743

743:                                              ; preds = %741, %680
  %744 = phi i32 [ 2, %680 ], [ %742, %741 ]
  br label %745

745:                                              ; preds = %743, %676
  %746 = phi i32 [ 2, %676 ], [ %744, %743 ]
  br label %747

747:                                              ; preds = %745, %672
  %748 = phi i32 [ 4, %672 ], [ %746, %745 ]
  br label %749

749:                                              ; preds = %747, %668
  %750 = phi i32 [ 8, %668 ], [ %748, %747 ]
  %751 = sext i32 %750 to i64
  %752 = load ptr, ptr %13, align 8, !tbaa !5
  %753 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %752, i32 0, i32 1
  %754 = load i32, ptr %753, align 1, !tbaa !30
  %755 = zext i32 %754 to i64
  %756 = mul nsw i64 %751, %755
  %757 = load ptr, ptr %13, align 8, !tbaa !5
  %758 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %757, i32 0, i32 2
  %759 = load i32, ptr %758, align 1, !tbaa !19
  %760 = zext i32 %759 to i64
  %761 = mul nsw i64 %756, %760
  %762 = load ptr, ptr %13, align 8, !tbaa !5
  %763 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %762, i32 0, i32 11
  store i64 %761, ptr %763, align 1, !tbaa !32
  br label %764

764:                                              ; preds = %749, %650
  %765 = load i32, ptr %15, align 4, !tbaa !9
  %766 = icmp eq i32 0, %765
  br i1 %766, label %767, label %768

767:                                              ; preds = %764
  br label %848

768:                                              ; preds = %764
  %769 = load i32, ptr %15, align 4, !tbaa !9
  %770 = icmp eq i32 1, %769
  br i1 %770, label %771, label %772

771:                                              ; preds = %768
  br label %846

772:                                              ; preds = %768
  %773 = load i32, ptr %15, align 4, !tbaa !9
  %774 = icmp eq i32 2, %773
  br i1 %774, label %775, label %776

775:                                              ; preds = %772
  br label %844

776:                                              ; preds = %772
  %777 = load i32, ptr %15, align 4, !tbaa !9
  %778 = icmp eq i32 3, %777
  br i1 %778, label %779, label %780

779:                                              ; preds = %776
  br label %842

780:                                              ; preds = %776
  %781 = load i32, ptr %15, align 4, !tbaa !9
  %782 = icmp eq i32 4, %781
  br i1 %782, label %783, label %784

783:                                              ; preds = %780
  br label %840

784:                                              ; preds = %780
  %785 = load i32, ptr %15, align 4, !tbaa !9
  %786 = icmp eq i32 5, %785
  br i1 %786, label %787, label %788

787:                                              ; preds = %784
  br label %838

788:                                              ; preds = %784
  %789 = load i32, ptr %15, align 4, !tbaa !9
  %790 = icmp eq i32 6, %789
  br i1 %790, label %791, label %792

791:                                              ; preds = %788
  br label %836

792:                                              ; preds = %788
  %793 = load i32, ptr %15, align 4, !tbaa !9
  %794 = icmp eq i32 7, %793
  br i1 %794, label %795, label %796

795:                                              ; preds = %792
  br label %834

796:                                              ; preds = %792
  %797 = load i32, ptr %15, align 4, !tbaa !9
  %798 = icmp eq i32 8, %797
  br i1 %798, label %799, label %800

799:                                              ; preds = %796
  br label %832

800:                                              ; preds = %796
  %801 = load i32, ptr %15, align 4, !tbaa !9
  %802 = icmp eq i32 9, %801
  br i1 %802, label %803, label %804

803:                                              ; preds = %800
  br label %830

804:                                              ; preds = %800
  %805 = load i32, ptr %15, align 4, !tbaa !9
  %806 = icmp eq i32 10, %805
  br i1 %806, label %807, label %808

807:                                              ; preds = %804
  br label %828

808:                                              ; preds = %804
  %809 = load i32, ptr %15, align 4, !tbaa !9
  %810 = icmp eq i32 11, %809
  br i1 %810, label %811, label %812

811:                                              ; preds = %808
  br label %826

812:                                              ; preds = %808
  %813 = load i32, ptr %15, align 4, !tbaa !9
  %814 = icmp eq i32 12, %813
  br i1 %814, label %815, label %816

815:                                              ; preds = %812
  br label %824

816:                                              ; preds = %812
  %817 = load i32, ptr %15, align 4, !tbaa !9
  %818 = icmp eq i32 13, %817
  br i1 %818, label %819, label %820

819:                                              ; preds = %816
  br label %822

820:                                              ; preds = %816
  call void @__assert_fail(ptr noundef @.str, ptr noundef @.str.1, i32 noundef 318, ptr noundef @__PRETTY_FUNCTION__.libxsmm_generator_gemm_setup_A_vnni_or_trans_B_vnni_or_trans_tensor_to_stack) #5
  unreachable

821:                                              ; No predecessors!
  br label %822

822:                                              ; preds = %821, %819
  %823 = phi i32 [ 1, %819 ], [ 0, %821 ]
  br label %824

824:                                              ; preds = %822, %815
  %825 = phi i32 [ 1, %815 ], [ %823, %822 ]
  br label %826

826:                                              ; preds = %824, %811
  %827 = phi i32 [ 2, %811 ], [ %825, %824 ]
  br label %828

828:                                              ; preds = %826, %807
  %829 = phi i32 [ 2, %807 ], [ %827, %826 ]
  br label %830

830:                                              ; preds = %828, %803
  %831 = phi i32 [ 4, %803 ], [ %829, %828 ]
  br label %832

832:                                              ; preds = %830, %799
  %833 = phi i32 [ 4, %799 ], [ %831, %830 ]
  br label %834

834:                                              ; preds = %832, %795
  %835 = phi i32 [ 8, %795 ], [ %833, %832 ]
  br label %836

836:                                              ; preds = %834, %791
  %837 = phi i32 [ 8, %791 ], [ %835, %834 ]
  br label %838

838:                                              ; preds = %836, %787
  %839 = phi i32 [ 1, %787 ], [ %837, %836 ]
  br label %840

840:                                              ; preds = %838, %783
  %841 = phi i32 [ 1, %783 ], [ %839, %838 ]
  br label %842

842:                                              ; preds = %840, %779
  %843 = phi i32 [ 2, %779 ], [ %841, %840 ]
  br label %844

844:                                              ; preds = %842, %775
  %845 = phi i32 [ 2, %775 ], [ %843, %842 ]
  br label %846

846:                                              ; preds = %844, %771
  %847 = phi i32 [ 4, %771 ], [ %845, %844 ]
  br label %848

848:                                              ; preds = %846, %767
  %849 = phi i32 [ 8, %767 ], [ %847, %846 ]
  %850 = sext i32 %849 to i64
  %851 = load ptr, ptr %13, align 8, !tbaa !5
  %852 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %851, i32 0, i32 0
  %853 = load i32, ptr %852, align 1, !tbaa !20
  %854 = zext i32 %853 to i64
  %855 = mul nsw i64 %850, %854
  %856 = load ptr, ptr %13, align 8, !tbaa !5
  %857 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %856, i32 0, i32 2
  %858 = load i32, ptr %857, align 1, !tbaa !19
  %859 = zext i32 %858 to i64
  %860 = mul nsw i64 %855, %859
  %861 = load ptr, ptr %13, align 8, !tbaa !5
  %862 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %861, i32 0, i32 10
  store i64 %860, ptr %862, align 1, !tbaa !28
  br label %863

863:                                              ; preds = %848, %533
  %864 = load ptr, ptr %9, align 8, !tbaa !5
  %865 = load i16, ptr %28, align 2, !tbaa !18
  call void @libxsmm_generator_x86_restore_gpr_regs(ptr noundef %864, i16 noundef zeroext %865)
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #4
  call void @llvm.lifetime.end.p0(i64 2, ptr %28) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #4
  ret void
}

declare void @libxsmm_generator_x86_save_gpr_regs(ptr noundef, i16 noundef zeroext) #2

declare void @libxsmm_generator_x86_restore_gpr_regs(ptr noundef, i16 noundef zeroext) #2

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!12, !10, i64 24}
!12 = !{!"libxsmm_gemm_descriptor", !10, i64 0, !10, i64 4, !10, i64 8, !10, i64 12, !10, i64 16, !10, i64 20, !10, i64 24, !7, i64 28, !7, i64 29, !7, i64 32, !13, i64 33, !13, i64 41, !7, i64 49, !10, i64 50, !10, i64 54, !10, i64 58, !14, i64 62, !14, i64 64, !7, i64 66, !7, i64 67, !7, i64 68, !7, i64 69, !14, i64 70, !14, i64 72, !14, i64 74, !14, i64 76, !14, i64 78, !14, i64 80, !10, i64 82, !10, i64 86, !10, i64 90, !7, i64 94}
!13 = !{!"long long", !7, i64 0}
!14 = !{!"short", !7, i64 0}
!15 = !{!16, !10, i64 4}
!16 = !{!"libxsmm_gp_reg_mapping_struct", !10, i64 0, !10, i64 4, !10, i64 8, !10, i64 12, !10, i64 16, !10, i64 20, !10, i64 24, !10, i64 28, !10, i64 32, !10, i64 36, !10, i64 40, !10, i64 44, !10, i64 48, !10, i64 52, !10, i64 56, !10, i64 60, !10, i64 64, !10, i64 68, !10, i64 72, !10, i64 76, !10, i64 80, !10, i64 84, !10, i64 88, !10, i64 92, !10, i64 96, !10, i64 100, !10, i64 104, !10, i64 108, !10, i64 112, !10, i64 116, !10, i64 120, !10, i64 124, !10, i64 128}
!17 = !{!16, !10, i64 12}
!18 = !{!14, !14, i64 0}
!19 = !{!12, !10, i64 8}
!20 = !{!12, !10, i64 0}
!21 = !{!12, !10, i64 12}
!22 = !{!23, !10, i64 668}
!23 = !{!"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, !24, 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}
!24 = !{!"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}
!25 = !{!23, !10, i64 676}
!26 = !{!23, !10, i64 660}
!27 = !{!23, !10, i64 672}
!28 = !{!12, !13, i64 33}
!29 = !{!23, !10, i64 80}
!30 = !{!12, !10, i64 4}
!31 = !{!12, !10, i64 16}
!32 = !{!12, !13, i64 41}


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

@.str = external hidden unnamed_addr constant [27 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [77 x i8], align 1
@__PRETTY_FUNCTION__.libxsmm_generator_gemm_setup_A_vnni_or_trans_B_vnni_or_trans_tensor_to_stack = external hidden unnamed_addr constant [293 x i8], align 1
@switch.table.libxsmm_generator_gemm_setup_A_vnni_or_trans_B_vnni_or_trans_tensor_to_stack.3 = private unnamed_addr constant [11 x i64] [i64 2, i64 2, i64 1, i64 2, i64 8, i64 2, i64 4, i64 2, i64 2, i64 2, i64 1], align 8

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

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

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

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

; Function Attrs: nounwind uwtable
define dso_local void @libxsmm_generator_gemm_setup_A_vnni_or_trans_B_vnni_or_trans_tensor_to_stack(ptr noundef %0, ptr noundef %1, ptr nocapture noundef readonly %2, ptr noundef %3, ptr noundef %4, ptr nocapture noundef readonly %5, i32 noundef %6, i32 noundef %7) local_unnamed_addr #0 {
  %9 = getelementptr inbounds i8, ptr %4, i64 24
  %10 = load i32, ptr %9, align 1, !tbaa !5
  %11 = and i32 %10, 131072
  %.not284 = icmp eq i32 %11, 0
  %12 = and i32 %10, 65536
  %.not308 = icmp eq i32 %12, 0
  %13 = and i32 %10, 458752
  %spec.select.not = icmp eq i32 %13, 0
  %.not = icmp eq i32 %7, 0
  br i1 %.not, label %14, label %19

14:                                               ; preds = %8
  %15 = getelementptr inbounds i8, ptr %2, i64 4
  %16 = load i32, ptr %15, align 4, !tbaa !12
  %17 = getelementptr inbounds i8, ptr %2, i64 12
  %18 = load i32, ptr %17, align 4, !tbaa !14
  br label %19

19:                                               ; preds = %8, %14
  %20 = phi i32 [ %16, %14 ], [ 7, %8 ]
  %21 = phi i32 [ %18, %14 ], [ 6, %8 ]
  %22 = getelementptr inbounds i8, ptr %5, i64 8
  %23 = load i32, ptr %22, align 1, !tbaa !15
  %24 = load i32, ptr %5, align 1, !tbaa !16
  %25 = getelementptr inbounds i8, ptr %5, i64 12
  %26 = load i32, ptr %25, align 1, !tbaa !17
  tail call void @libxsmm_generator_x86_save_gpr_regs(ptr noundef %0, i16 noundef zeroext -250) #3
  %27 = getelementptr inbounds i8, ptr %3, i64 668
  %28 = load i32, ptr %27, align 4, !tbaa !18
  %.not278 = icmp eq i32 %28, 0
  br i1 %.not278, label %29, label %32

29:                                               ; preds = %19
  %30 = getelementptr inbounds i8, ptr %3, i64 676
  %31 = load i32, ptr %30, align 4, !tbaa !22
  %.not279 = icmp eq i32 %31, 0
  br i1 %.not279, label %38, label %32

32:                                               ; preds = %29, %19
  %33 = load i32, ptr %22, align 1, !tbaa !15
  %34 = lshr i32 %33, 1
  %35 = load i32, ptr %5, align 1, !tbaa !16
  %36 = load i32, ptr %25, align 1, !tbaa !17
  %37 = lshr i32 %36, 1
  br label %48

38:                                               ; preds = %29
  %39 = getelementptr inbounds i8, ptr %3, i64 660
  %40 = load i32, ptr %39, align 4, !tbaa !23
  %.not280 = icmp eq i32 %40, 0
  br i1 %.not280, label %41, label %44

41:                                               ; preds = %38
  %42 = getelementptr inbounds i8, ptr %3, i64 672
  %43 = load i32, ptr %42, align 8, !tbaa !24
  %.not281 = icmp eq i32 %43, 0
  br i1 %.not281, label %48, label %44

44:                                               ; preds = %41, %38
  %45 = load i32, ptr %5, align 1, !tbaa !16
  %46 = load i32, ptr %22, align 1, !tbaa !15
  %47 = load i32, ptr %25, align 1, !tbaa !17
  br label %48

48:                                               ; preds = %41, %44, %32
  %.0273 = phi i32 [ 1, %32 ], [ %6, %44 ], [ %6, %41 ]
  %.0272 = phi i32 [ %34, %32 ], [ %45, %44 ], [ %23, %41 ]
  %.0271 = phi i32 [ %35, %32 ], [ %46, %44 ], [ %24, %41 ]
  %.0270 = phi i32 [ %37, %32 ], [ %47, %44 ], [ %26, %41 ]
  %.0269 = phi i32 [ %35, %32 ], [ %45, %44 ], [ %24, %41 ]
  %.0 = phi i32 [ 29, %32 ], [ 28, %44 ], [ 29, %41 ]
  %49 = getelementptr inbounds i8, ptr %5, i64 33
  %50 = load i64, ptr %49, align 1, !tbaa !25
  %51 = trunc i64 %50 to i32
  tail call void @libxsmm_generator_gemm_apply_ops_input_tensor_and_store_to_stack(ptr noundef %0, ptr noundef %1, ptr noundef nonnull %3, ptr noundef nonnull %4, i32 noundef %20, i32 noundef 15, i32 noundef 14, i32 noundef 13, i32 noundef 12, i32 noundef 2, i32 noundef %.0, i32 noundef %.0272, i32 noundef %.0271, i32 noundef %.0270, i32 noundef %.0269, i32 noundef %51, i32 noundef %.0273, i32 noundef %.0273, i32 noundef %.0273, i32 noundef 3, i32 noundef 27, i32 noundef 21, i32 noundef 0, i32 noundef 0, i32 noundef 0, i32 noundef 0, i32 noundef 0, i32 noundef 0, i32 noundef 0, i32 noundef 0)
  tail call void @libxsmm_generator_gemm_getval_stack_var(ptr noundef %0, ptr noundef nonnull %3, i32 noundef 21, i32 noundef 14)
  %52 = getelementptr inbounds i8, ptr %3, i64 80
  %53 = load i32, ptr %52, align 8, !tbaa !26
  tail call void @libxsmm_x86_instruction_alu_reg(ptr noundef %0, i32 noundef %53, i32 noundef 14, i32 noundef %20) #3
  %54 = getelementptr inbounds i8, ptr %3, i64 672
  %55 = load i32, ptr %54, align 8, !tbaa !24
  %.not282 = icmp eq i32 %55, 0
  br i1 %.not282, label %56, label %59

56:                                               ; preds = %48
  %57 = getelementptr inbounds i8, ptr %3, i64 676
  %58 = load i32, ptr %57, align 4, !tbaa !22
  %.not283 = icmp eq i32 %58, 0
  br i1 %.not283, label %85, label %59

59:                                               ; preds = %56, %48
  %60 = getelementptr inbounds i8, ptr %4, i64 4
  %61 = load i32, ptr %60, align 1, !tbaa !27
  %62 = getelementptr inbounds i8, ptr %4, i64 8
  %63 = load i32, ptr %62, align 1, !tbaa !15
  %64 = getelementptr inbounds i8, ptr %5, i64 16
  %65 = load i32, ptr %64, align 1, !tbaa !28
  %66 = getelementptr inbounds i8, ptr %5, i64 41
  %67 = load i64, ptr %66, align 1, !tbaa !29
  %68 = trunc i64 %67 to i32
  tail call void @libxsmm_generator_gemm_apply_ops_input_tensor_and_store_to_stack(ptr noundef %0, ptr noundef %1, ptr noundef nonnull %3, ptr noundef nonnull %4, i32 noundef %21, i32 noundef 15, i32 noundef 14, i32 noundef 13, i32 noundef 12, i32 noundef 2, i32 noundef 29, i32 noundef %61, i32 noundef %63, i32 noundef %65, i32 noundef %63, i32 noundef %68, i32 noundef %6, i32 noundef %6, i32 noundef %6, i32 noundef 4, i32 noundef 27, i32 noundef 25, i32 noundef 0, i32 noundef 0, i32 noundef 0, i32 noundef 0, i32 noundef 0, i32 noundef 0, i32 noundef 0, i32 noundef 0)
  tail call void @libxsmm_generator_gemm_getval_stack_var(ptr noundef %0, ptr noundef nonnull %3, i32 noundef 25, i32 noundef 14)
  %69 = load i32, ptr %52, align 8, !tbaa !26
  tail call void @libxsmm_x86_instruction_alu_reg(ptr noundef %0, i32 noundef %69, i32 noundef 14, i32 noundef %21) #3
  %70 = load i32, ptr %62, align 1, !tbaa !15
  %71 = getelementptr inbounds i8, ptr %4, i64 16
  store i32 %70, ptr %71, align 1, !tbaa !28
  switch i32 %6, label %72 [
    i32 0, label %77
    i32 1, label %.fold.split
  ]

72:                                               ; preds = %59
  %73 = and i32 %6, -2
  %switch.tableidx = add i32 %73, -2
  %74 = icmp ult i32 %switch.tableidx, 11
  br i1 %74, label %switch.hole_check, label %75

75:                                               ; preds = %switch.hole_check, %72
  tail call void @__assert_fail(ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, i32 noundef 289, ptr noundef nonnull @__PRETTY_FUNCTION__.libxsmm_generator_gemm_setup_A_vnni_or_trans_B_vnni_or_trans_tensor_to_stack) #4
  unreachable

.fold.split:                                      ; preds = %59
  br label %77

switch.hole_check:                                ; preds = %72
  %switch.maskindex = trunc nuw i32 %switch.tableidx to i16
  %switch.shifted = lshr i16 1365, %switch.maskindex
  %switch.lobit = trunc i16 %switch.shifted to i1
  br i1 %switch.lobit, label %switch.lookup, label %75

switch.lookup:                                    ; preds = %switch.hole_check
  %76 = zext nneg i32 %switch.tableidx to i64
  %switch.gep = getelementptr inbounds [11 x i64], ptr @switch.table.libxsmm_generator_gemm_setup_A_vnni_or_trans_B_vnni_or_trans_tensor_to_stack.3, i64 0, i64 %76
  %switch.load = load i64, ptr %switch.gep, align 8
  br label %77

77:                                               ; preds = %switch.lookup, %59, %.fold.split
  %78 = phi i64 [ 8, %59 ], [ 4, %.fold.split ], [ %switch.load, %switch.lookup ]
  %79 = load i32, ptr %60, align 1, !tbaa !27
  %80 = zext i32 %79 to i64
  %81 = zext i32 %70 to i64
  %82 = mul nuw nsw i64 %78, %81
  %83 = mul i64 %82, %80
  %84 = getelementptr inbounds i8, ptr %4, i64 41
  store i64 %83, ptr %84, align 1, !tbaa !29
  br label %103

85:                                               ; preds = %56
  %86 = and i32 %10, 196608
  %or.cond3.not = icmp eq i32 %86, 0
  br i1 %or.cond3.not, label %103, label %87

87:                                               ; preds = %85
  %88 = getelementptr inbounds i8, ptr %5, i64 24
  %89 = load i32, ptr %88, align 1, !tbaa !5
  %90 = and i32 %89, 2
  %.not285 = icmp eq i32 %90, 0
  %91 = getelementptr inbounds i8, ptr %4, i64 4
  %92 = getelementptr inbounds i8, ptr %4, i64 8
  %.in = select i1 %.not285, ptr %92, ptr %91
  %93 = load i32, ptr %.in, align 1, !tbaa !30
  %.in286 = select i1 %.not285, ptr %91, ptr %92
  %94 = load i32, ptr %.in286, align 1, !tbaa !30
  %95 = getelementptr inbounds i8, ptr %5, i64 16
  %96 = load i32, ptr %95, align 1, !tbaa !28
  %97 = getelementptr inbounds i8, ptr %5, i64 41
  %98 = load i64, ptr %97, align 1, !tbaa !29
  %99 = trunc i64 %98 to i32
  tail call void @libxsmm_generator_gemm_apply_ops_input_tensor_and_store_to_stack(ptr noundef %0, ptr noundef %1, ptr noundef nonnull %3, ptr noundef nonnull %4, i32 noundef %21, i32 noundef 15, i32 noundef 14, i32 noundef 13, i32 noundef 12, i32 noundef 2, i32 noundef 1, i32 noundef %93, i32 noundef %94, i32 noundef %96, i32 noundef %93, i32 noundef %99, i32 noundef %6, i32 noundef %6, i32 noundef %6, i32 noundef 4, i32 noundef 27, i32 noundef 25, i32 noundef 0, i32 noundef 0, i32 noundef 0, i32 noundef 0, i32 noundef 0, i32 noundef 0, i32 noundef 0, i32 noundef 0)
  %100 = load i32, ptr %.in, align 1, !tbaa !30
  %101 = getelementptr inbounds i8, ptr %4, i64 16
  store i32 %100, ptr %101, align 1, !tbaa !28
  tail call void @libxsmm_generator_gemm_getval_stack_var(ptr noundef %0, ptr noundef nonnull %3, i32 noundef 25, i32 noundef 14)
  %102 = load i32, ptr %52, align 8, !tbaa !26
  tail call void @libxsmm_x86_instruction_alu_reg(ptr noundef %0, i32 noundef %102, i32 noundef 14, i32 noundef %21) #3
  br label %103

103:                                              ; preds = %87, %85, %77
  br i1 %spec.select.not, label %162, label %104

104:                                              ; preds = %103
  br i1 %.not284, label %125, label %105

105:                                              ; preds = %104
  %106 = load i32, ptr %9, align 1, !tbaa !5
  %107 = and i32 %106, -262145
  %108 = xor i32 %107, 393216
  store i32 %108, ptr %9, align 1, !tbaa !5
  switch i32 %6, label %109 [
    i32 0, label %114
    i32 1, label %.fold.split289
  ]

109:                                              ; preds = %105
  %110 = and i32 %6, -2
  %switch.tableidx310 = add i32 %110, -2
  %111 = icmp ult i32 %switch.tableidx310, 11
  br i1 %111, label %switch.hole_check311, label %112

112:                                              ; preds = %switch.hole_check311, %109
  tail call void @__assert_fail(ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, i32 noundef 311, ptr noundef nonnull @__PRETTY_FUNCTION__.libxsmm_generator_gemm_setup_A_vnni_or_trans_B_vnni_or_trans_tensor_to_stack) #4
  unreachable

.fold.split289:                                   ; preds = %105
  br label %114

switch.hole_check311:                             ; preds = %109
  %switch.maskindex313 = trunc nuw i32 %switch.tableidx310 to i16
  %switch.shifted314 = lshr i16 1365, %switch.maskindex313
  %switch.lobit315 = trunc i16 %switch.shifted314 to i1
  br i1 %switch.lobit315, label %switch.lookup312, label %112

switch.lookup312:                                 ; preds = %switch.hole_check311
  %113 = zext nneg i32 %switch.tableidx310 to i64
  %switch.gep316 = getelementptr inbounds [11 x i64], ptr @switch.table.libxsmm_generator_gemm_setup_A_vnni_or_trans_B_vnni_or_trans_tensor_to_stack.3, i64 0, i64 %113
  %switch.load317 = load i64, ptr %switch.gep316, align 8
  br label %114

114:                                              ; preds = %switch.lookup312, %105, %.fold.split289
  %115 = phi i64 [ 8, %105 ], [ 4, %.fold.split289 ], [ %switch.load317, %switch.lookup312 ]
  %116 = getelementptr inbounds i8, ptr %4, i64 4
  %117 = load i32, ptr %116, align 1, !tbaa !27
  %118 = zext i32 %117 to i64
  %119 = mul nuw nsw i64 %115, %118
  %120 = getelementptr inbounds i8, ptr %4, i64 8
  %121 = load i32, ptr %120, align 1, !tbaa !15
  %122 = zext i32 %121 to i64
  %123 = mul nuw nsw i64 %119, %122
  %124 = getelementptr inbounds i8, ptr %4, i64 41
  store i64 %123, ptr %124, align 1, !tbaa !29
  br label %125

125:                                              ; preds = %114, %104
  br i1 %.not308, label %146, label %126

126:                                              ; preds = %125
  %127 = load i32, ptr %9, align 1, !tbaa !5
  %128 = and i32 %127, -262145
  %129 = xor i32 %128, 327680
  store i32 %129, ptr %9, align 1, !tbaa !5
  switch i32 %6, label %130 [
    i32 0, label %135
    i32 1, label %.fold.split290
  ]

130:                                              ; preds = %126
  %131 = and i32 %6, -2
  %switch.tableidx319 = add i32 %131, -2
  %132 = icmp ult i32 %switch.tableidx319, 11
  br i1 %132, label %switch.hole_check320, label %133

133:                                              ; preds = %switch.hole_check320, %130
  tail call void @__assert_fail(ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, i32 noundef 316, ptr noundef nonnull @__PRETTY_FUNCTION__.libxsmm_generator_gemm_setup_A_vnni_or_trans_B_vnni_or_trans_tensor_to_stack) #4
  unreachable

.fold.split290:                                   ; preds = %126
  br label %135

switch.hole_check320:                             ; preds = %130
  %switch.maskindex322 = trunc nuw i32 %switch.tableidx319 to i16
  %switch.shifted323 = lshr i16 1365, %switch.maskindex322
  %switch.lobit324 = trunc i16 %switch.shifted323 to i1
  br i1 %switch.lobit324, label %switch.lookup321, label %133

switch.lookup321:                                 ; preds = %switch.hole_check320
  %134 = zext nneg i32 %switch.tableidx319 to i64
  %switch.gep325 = getelementptr inbounds [11 x i64], ptr @switch.table.libxsmm_generator_gemm_setup_A_vnni_or_trans_B_vnni_or_trans_tensor_to_stack.3, i64 0, i64 %134
  %switch.load326 = load i64, ptr %switch.gep325, align 8
  br label %135

135:                                              ; preds = %switch.lookup321, %126, %.fold.split290
  %136 = phi i64 [ 8, %126 ], [ 4, %.fold.split290 ], [ %switch.load326, %switch.lookup321 ]
  %137 = getelementptr inbounds i8, ptr %4, i64 4
  %138 = load i32, ptr %137, align 1, !tbaa !27
  %139 = zext i32 %138 to i64
  %140 = mul nuw nsw i64 %136, %139
  %141 = getelementptr inbounds i8, ptr %4, i64 8
  %142 = load i32, ptr %141, align 1, !tbaa !15
  %143 = zext i32 %142 to i64
  %144 = mul nuw nsw i64 %140, %143
  %145 = getelementptr inbounds i8, ptr %4, i64 41
  store i64 %144, ptr %145, align 1, !tbaa !29
  br label %146

146:                                              ; preds = %135, %125
  switch i32 %6, label %147 [
    i32 0, label %152
    i32 1, label %.fold.split291
  ]

147:                                              ; preds = %146
  %148 = and i32 %6, -2
  %switch.tableidx328 = add i32 %148, -2
  %149 = icmp ult i32 %switch.tableidx328, 11
  br i1 %149, label %switch.hole_check329, label %150

150:                                              ; preds = %switch.hole_check329, %147
  tail call void @__assert_fail(ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, i32 noundef 318, ptr noundef nonnull @__PRETTY_FUNCTION__.libxsmm_generator_gemm_setup_A_vnni_or_trans_B_vnni_or_trans_tensor_to_stack) #4
  unreachable

.fold.split291:                                   ; preds = %146
  br label %152

switch.hole_check329:                             ; preds = %147
  %switch.maskindex331 = trunc nuw i32 %switch.tableidx328 to i16
  %switch.shifted332 = lshr i16 1365, %switch.maskindex331
  %switch.lobit333 = trunc i16 %switch.shifted332 to i1
  br i1 %switch.lobit333, label %switch.lookup330, label %150

switch.lookup330:                                 ; preds = %switch.hole_check329
  %151 = zext nneg i32 %switch.tableidx328 to i64
  %switch.gep334 = getelementptr inbounds [11 x i64], ptr @switch.table.libxsmm_generator_gemm_setup_A_vnni_or_trans_B_vnni_or_trans_tensor_to_stack.3, i64 0, i64 %151
  %switch.load335 = load i64, ptr %switch.gep334, align 8
  br label %152

152:                                              ; preds = %switch.lookup330, %146, %.fold.split291
  %153 = phi i64 [ 8, %146 ], [ 4, %.fold.split291 ], [ %switch.load335, %switch.lookup330 ]
  %154 = load i32, ptr %4, align 1, !tbaa !16
  %155 = zext i32 %154 to i64
  %156 = mul nuw nsw i64 %153, %155
  %157 = getelementptr inbounds i8, ptr %4, i64 8
  %158 = load i32, ptr %157, align 1, !tbaa !15
  %159 = zext i32 %158 to i64
  %160 = mul nuw nsw i64 %156, %159
  %161 = getelementptr inbounds i8, ptr %4, i64 33
  store i64 %160, ptr %161, align 1, !tbaa !25
  br label %162

162:                                              ; preds = %152, %103
  tail call void @libxsmm_generator_x86_restore_gpr_regs(ptr noundef %0, i16 noundef zeroext -250) #3
  ret void
}

declare void @libxsmm_generator_x86_save_gpr_regs(ptr noundef, i16 noundef zeroext) local_unnamed_addr #1

declare void @libxsmm_generator_x86_restore_gpr_regs(ptr noundef, i16 noundef zeroext) local_unnamed_addr #1

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !7, i64 24}
!6 = !{!"libxsmm_gemm_descriptor", !7, i64 0, !7, i64 4, !7, i64 8, !7, i64 12, !7, i64 16, !7, i64 20, !7, i64 24, !8, i64 28, !8, i64 29, !8, i64 32, !10, i64 33, !10, i64 41, !8, i64 49, !7, i64 50, !7, i64 54, !7, i64 58, !11, i64 62, !11, i64 64, !8, i64 66, !8, i64 67, !8, i64 68, !8, i64 69, !11, i64 70, !11, i64 72, !11, i64 74, !11, i64 76, !11, i64 78, !11, i64 80, !7, i64 82, !7, i64 86, !7, i64 90, !8, i64 94}
!7 = !{!"int", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!"long long", !8, i64 0}
!11 = !{!"short", !8, i64 0}
!12 = !{!13, !7, i64 4}
!13 = !{!"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}
!14 = !{!13, !7, i64 12}
!15 = !{!6, !7, i64 8}
!16 = !{!6, !7, i64 0}
!17 = !{!6, !7, i64 12}
!18 = !{!19, !7, i64 668}
!19 = !{!"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, !20, 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, !21, i64 592, !7, i64 600, !7, i64 604, !7, i64 608, !7, i64 612, !21, 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}
!20 = !{!"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}
!21 = !{!"any pointer", !8, i64 0}
!22 = !{!19, !7, i64 676}
!23 = !{!19, !7, i64 660}
!24 = !{!19, !7, i64 672}
!25 = !{!6, !10, i64 33}
!26 = !{!19, !7, i64 80}
!27 = !{!6, !7, i64 4}
!28 = !{!6, !7, i64 16}
!29 = !{!6, !10, i64 41}
!30 = !{!7, !7, i64 0}


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