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

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

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

@.str = external hidden unnamed_addr constant [27 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [85 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_aarch64 = external hidden unnamed_addr constant [287 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [359 x i8], align 1

; Function Attrs: nounwind uwtable
declare dso_local void @libxsmm_generator_gemm_apply_ops_input_tensor_and_store_to_stack_aarch64(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, i32 noundef) #0

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

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

declare void @libxsmm_aarch64_instruction_alu_compute_imm12(ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i8 noundef zeroext) #2

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

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

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

57:                                               ; preds = %7
  %58 = load i32, ptr %16, align 4, !tbaa !9
  %59 = icmp eq i32 %58, 1
  br i1 %59, label %63, label %60

60:                                               ; preds = %57
  %61 = load i32, ptr %17, align 4, !tbaa !9
  %62 = icmp eq i32 %61, 1
  br label %63

63:                                               ; preds = %60, %57, %7
  %64 = phi i1 [ true, %57 ], [ true, %7 ], [ %62, %60 ]
  %65 = zext i1 %64 to i64
  %66 = select i1 %64, i32 1, i32 0
  store i32 %66, ptr %18, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #4
  store i32 44, ptr %19, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #4
  store i32 42, ptr %20, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #4
  store i32 60, ptr %21, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #4
  store i32 59, ptr %22, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #4
  store i32 43, ptr %23, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #4
  store i32 58, ptr %24, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #4
  store i32 29, ptr %25, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #4
  %67 = load i32, ptr %14, align 4, !tbaa !9
  store i32 %67, ptr %26, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #4
  %68 = load ptr, ptr %13, align 8, !tbaa !5
  %69 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %68, i32 0, i32 2
  %70 = load i32, ptr %69, align 1, !tbaa !15
  store i32 %70, ptr %27, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #4
  %71 = load ptr, ptr %13, align 8, !tbaa !5
  %72 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %71, i32 0, i32 0
  %73 = load i32, ptr %72, align 1, !tbaa !16
  store i32 %73, ptr %28, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #4
  %74 = load ptr, ptr %13, align 8, !tbaa !5
  %75 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %74, i32 0, i32 3
  %76 = load i32, ptr %75, align 1, !tbaa !17
  store i32 %76, ptr %29, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #4
  %77 = load ptr, ptr %13, align 8, !tbaa !5
  %78 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %77, i32 0, i32 0
  %79 = load i32, ptr %78, align 1, !tbaa !16
  store i32 %79, ptr %30, align 4, !tbaa !9
  %80 = load ptr, ptr %8, align 8, !tbaa !5
  call void @libxsmm_aarch64_instruction_open_stream(ptr noundef %80, i16 noundef zeroext 3599)
  %81 = load ptr, ptr %11, align 8, !tbaa !5
  %82 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %81, i32 0, i32 125
  %83 = load i32, ptr %82, align 4, !tbaa !18
  %84 = icmp ne i32 %83, 0
  br i1 %84, label %90, label %85

85:                                               ; preds = %63
  %86 = load ptr, ptr %11, align 8, !tbaa !5
  %87 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %86, i32 0, i32 127
  %88 = load i32, ptr %87, align 4, !tbaa !21
  %89 = icmp ne i32 %88, 0
  br i1 %89, label %90, label %141

90:                                               ; preds = %85, %63
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #4
  %91 = call i32 @libxsmm_cpuid_arm_use_bfdot()
  %92 = icmp eq i32 %91, 0
  br i1 %92, label %93, label %99

93:                                               ; preds = %90
  %94 = load ptr, ptr %13, align 8, !tbaa !5
  %95 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %94, i32 0, i32 2
  %96 = load i32, ptr %95, align 1, !tbaa !15
  %97 = urem i32 %96, 4
  %98 = icmp eq i32 %97, 0
  br label %99

99:                                               ; preds = %93, %90
  %100 = phi i1 [ false, %90 ], [ %98, %93 ]
  %101 = zext i1 %100 to i64
  %102 = select i1 %100, i32 1, i32 0
  store i32 %102, ptr %31, align 4, !tbaa !9
  store i32 29, ptr %25, align 4, !tbaa !9
  %103 = load i32, ptr %31, align 4, !tbaa !9
  %104 = icmp eq i32 %103, 1
  %105 = zext i1 %104 to i64
  %106 = select i1 %104, i32 0, i32 1
  store i32 %106, ptr %26, align 4, !tbaa !9
  %107 = load i32, ptr %31, align 4, !tbaa !9
  %108 = icmp eq i32 %107, 1
  br i1 %108, label %109, label %114

109:                                              ; preds = %99
  %110 = load ptr, ptr %13, align 8, !tbaa !5
  %111 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %110, i32 0, i32 2
  %112 = load i32, ptr %111, align 1, !tbaa !15
  %113 = udiv i32 %112, 4
  br label %119

114:                                              ; preds = %99
  %115 = load ptr, ptr %13, align 8, !tbaa !5
  %116 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %115, i32 0, i32 2
  %117 = load i32, ptr %116, align 1, !tbaa !15
  %118 = udiv i32 %117, 2
  br label %119

119:                                              ; preds = %114, %109
  %120 = phi i32 [ %113, %109 ], [ %118, %114 ]
  store i32 %120, ptr %27, align 4, !tbaa !9
  %121 = load ptr, ptr %13, align 8, !tbaa !5
  %122 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %121, i32 0, i32 0
  %123 = load i32, ptr %122, align 1, !tbaa !16
  store i32 %123, ptr %28, align 4, !tbaa !9
  %124 = load i32, ptr %31, align 4, !tbaa !9
  %125 = icmp eq i32 %124, 1
  br i1 %125, label %126, label %131

126:                                              ; preds = %119
  %127 = load ptr, ptr %13, align 8, !tbaa !5
  %128 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %127, i32 0, i32 3
  %129 = load i32, ptr %128, align 1, !tbaa !17
  %130 = udiv i32 %129, 4
  br label %136

131:                                              ; preds = %119
  %132 = load ptr, ptr %13, align 8, !tbaa !5
  %133 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %132, i32 0, i32 3
  %134 = load i32, ptr %133, align 1, !tbaa !17
  %135 = udiv i32 %134, 2
  br label %136

136:                                              ; preds = %131, %126
  %137 = phi i32 [ %130, %126 ], [ %135, %131 ]
  store i32 %137, ptr %29, align 4, !tbaa !9
  %138 = load ptr, ptr %13, 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 !16
  store i32 %140, ptr %30, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #4
  br label %182

141:                                              ; preds = %85
  %142 = load ptr, ptr %11, align 8, !tbaa !5
  %143 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %142, i32 0, i32 123
  %144 = load i32, ptr %143, align 4, !tbaa !22
  %145 = icmp ne i32 %144, 0
  br i1 %145, label %151, label %146

146:                                              ; preds = %141
  %147 = load ptr, ptr %11, align 8, !tbaa !5
  %148 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %147, i32 0, i32 126
  %149 = load i32, ptr %148, align 8, !tbaa !23
  %150 = icmp ne i32 %149, 0
  br i1 %150, label %151, label %181

151:                                              ; preds = %146, %141
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #4
  %152 = call i32 @libxsmm_cpuid_arm_use_bfdot()
  %153 = icmp eq i32 %152, 0
  br i1 %153, label %154, label %160

154:                                              ; preds = %151
  %155 = load ptr, ptr %13, align 8, !tbaa !5
  %156 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %155, i32 0, i32 2
  %157 = load i32, ptr %156, align 1, !tbaa !15
  %158 = urem i32 %157, 4
  %159 = icmp eq i32 %158, 0
  br label %160

160:                                              ; preds = %154, %151
  %161 = phi i1 [ false, %151 ], [ %159, %154 ]
  %162 = zext i1 %161 to i64
  %163 = select i1 %161, i32 1, i32 0
  store i32 %163, ptr %32, align 4, !tbaa !9
  %164 = load i32, ptr %32, align 4, !tbaa !9
  %165 = icmp eq i32 %164, 1
  %166 = zext i1 %165 to i64
  %167 = select i1 %165, i32 54, i32 28
  store i32 %167, ptr %25, align 4, !tbaa !9
  %168 = load i32, ptr %14, align 4, !tbaa !9
  store i32 %168, ptr %26, align 4, !tbaa !9
  %169 = load ptr, ptr %13, align 8, !tbaa !5
  %170 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %169, i32 0, i32 0
  %171 = load i32, ptr %170, align 1, !tbaa !16
  store i32 %171, ptr %27, align 4, !tbaa !9
  %172 = load ptr, ptr %13, align 8, !tbaa !5
  %173 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %172, i32 0, i32 2
  %174 = load i32, ptr %173, align 1, !tbaa !15
  store i32 %174, ptr %28, align 4, !tbaa !9
  %175 = load ptr, ptr %13, align 8, !tbaa !5
  %176 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %175, i32 0, i32 3
  %177 = load i32, ptr %176, align 1, !tbaa !17
  store i32 %177, ptr %29, align 4, !tbaa !9
  %178 = load ptr, ptr %13, align 8, !tbaa !5
  %179 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %178, i32 0, i32 0
  %180 = load i32, ptr %179, align 1, !tbaa !16
  store i32 %180, ptr %30, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #4
  br label %181

181:                                              ; preds = %160, %146
  br label %182

182:                                              ; preds = %181, %136
  %183 = load ptr, ptr %8, align 8, !tbaa !5
  %184 = load ptr, ptr %9, align 8, !tbaa !5
  %185 = load ptr, ptr %11, align 8, !tbaa !5
  %186 = load ptr, ptr %12, align 8, !tbaa !5
  %187 = load ptr, ptr %10, align 8, !tbaa !5
  %188 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %187, i32 0, i32 1
  %189 = load i32, ptr %188, align 4, !tbaa !24
  %190 = load i32, ptr %19, align 4, !tbaa !9
  %191 = load i32, ptr %20, align 4, !tbaa !9
  %192 = load i32, ptr %21, align 4, !tbaa !9
  %193 = load i32, ptr %22, align 4, !tbaa !9
  %194 = load i32, ptr %23, align 4, !tbaa !9
  %195 = load i32, ptr %24, align 4, !tbaa !9
  %196 = load i32, ptr %25, align 4, !tbaa !9
  %197 = load i32, ptr %27, align 4, !tbaa !9
  %198 = load i32, ptr %28, align 4, !tbaa !9
  %199 = load i32, ptr %29, align 4, !tbaa !9
  %200 = load i32, ptr %30, align 4, !tbaa !9
  %201 = load ptr, ptr %13, align 8, !tbaa !5
  %202 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %201, i32 0, i32 10
  %203 = load i64, ptr %202, align 1, !tbaa !26
  %204 = trunc i64 %203 to i32
  %205 = icmp eq i32 -2147483648, %204
  br i1 %205, label %212, label %206

206:                                              ; preds = %182
  %207 = load ptr, ptr %13, align 8, !tbaa !5
  %208 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %207, i32 0, i32 10
  %209 = load i64, ptr %208, align 1, !tbaa !26
  %210 = trunc i64 %209 to i32
  %211 = icmp slt i32 -2147483648, %210
  br i1 %211, label %212, label %235

212:                                              ; preds = %206, %182
  %213 = load ptr, ptr %13, align 8, !tbaa !5
  %214 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %213, i32 0, i32 10
  %215 = load i64, ptr %214, align 1, !tbaa !26
  %216 = mul i64 1, %215
  %217 = icmp ult i64 %216, 2147483647
  br i1 %217, label %218, label %223

218:                                              ; preds = %212
  %219 = load ptr, ptr %13, align 8, !tbaa !5
  %220 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %219, i32 0, i32 10
  %221 = load i64, ptr %220, align 1, !tbaa !26
  %222 = mul i64 1, %221
  br label %224

223:                                              ; preds = %212
  br label %224

224:                                              ; preds = %223, %218
  %225 = phi i64 [ %222, %218 ], [ 2147483647, %223 ]
  %226 = icmp ule i64 %225, 2147483647
  br i1 %226, label %227, label %235

227:                                              ; preds = %224
  %228 = load ptr, ptr %13, align 8, !tbaa !5
  %229 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %228, i32 0, i32 10
  %230 = load i64, ptr %229, align 1, !tbaa !26
  %231 = sitofp i64 %230 to double
  %232 = fcmp ole double 0.000000e+00, %231
  br i1 %232, label %234, label %233

233:                                              ; preds = %227
  br i1 true, label %234, label %235

234:                                              ; preds = %233, %227
  br label %236

235:                                              ; preds = %233, %224, %206
  call void @__assert_fail(ptr noundef @.str.4, ptr noundef @.str.1, i32 noundef 199, ptr noundef @__PRETTY_FUNCTION__.libxsmm_generator_gemm_setup_A_vnni_or_trans_B_vnni_or_trans_tensor_to_stack_aarch64) #5
  unreachable

236:                                              ; preds = %234
  %237 = load ptr, ptr %13, align 8, !tbaa !5
  %238 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %237, i32 0, i32 10
  %239 = load i64, ptr %238, align 1, !tbaa !26
  %240 = trunc i64 %239 to i32
  %241 = load i32, ptr %26, align 4, !tbaa !9
  %242 = load i32, ptr %26, align 4, !tbaa !9
  %243 = load i32, ptr %26, align 4, !tbaa !9
  call void @libxsmm_generator_gemm_apply_ops_input_tensor_and_store_to_stack_aarch64(ptr noundef %183, ptr noundef %184, ptr noundef %185, ptr noundef %186, i32 noundef %189, i32 noundef %190, i32 noundef %191, i32 noundef %192, i32 noundef %193, i32 noundef %194, i32 noundef %195, i32 noundef %196, i32 noundef %197, i32 noundef %198, i32 noundef %199, i32 noundef %200, i32 noundef %240, i32 noundef %241, i32 noundef %242, i32 noundef %243, 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)
  %244 = load ptr, ptr %8, align 8, !tbaa !5
  %245 = load i32, ptr %20, align 4, !tbaa !9
  call void @libxsmm_generator_gemm_getval_stack_var_aarch64(ptr noundef %244, i32 noundef 21, i32 noundef %245)
  %246 = load ptr, ptr %8, align 8, !tbaa !5
  %247 = load i32, ptr %20, align 4, !tbaa !9
  %248 = load ptr, ptr %10, align 8, !tbaa !5
  %249 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %248, i32 0, i32 1
  %250 = load i32, ptr %249, align 4, !tbaa !24
  call void @libxsmm_aarch64_instruction_alu_compute_imm12(ptr noundef %246, i32 noundef 285212678, i32 noundef %247, i32 noundef %250, i32 noundef 0, i8 noundef zeroext 0)
  %251 = load ptr, ptr %11, align 8, !tbaa !5
  %252 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %251, i32 0, i32 126
  %253 = load i32, ptr %252, align 8, !tbaa !23
  %254 = icmp ne i32 %253, 0
  br i1 %254, label %260, label %255

255:                                              ; preds = %236
  %256 = load ptr, ptr %11, align 8, !tbaa !5
  %257 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %256, i32 0, i32 127
  %258 = load i32, ptr %257, align 4, !tbaa !21
  %259 = icmp ne i32 %258, 0
  br i1 %259, label %260, label %439

260:                                              ; preds = %255, %236
  %261 = load ptr, ptr %8, align 8, !tbaa !5
  %262 = load ptr, ptr %9, align 8, !tbaa !5
  %263 = load ptr, ptr %11, align 8, !tbaa !5
  %264 = load ptr, ptr %12, align 8, !tbaa !5
  %265 = load ptr, ptr %10, align 8, !tbaa !5
  %266 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %265, i32 0, i32 3
  %267 = load i32, ptr %266, align 4, !tbaa !27
  %268 = load i32, ptr %19, align 4, !tbaa !9
  %269 = load i32, ptr %20, align 4, !tbaa !9
  %270 = load i32, ptr %21, align 4, !tbaa !9
  %271 = load i32, ptr %22, align 4, !tbaa !9
  %272 = load i32, ptr %23, align 4, !tbaa !9
  %273 = load i32, ptr %24, align 4, !tbaa !9
  %274 = load ptr, ptr %12, align 8, !tbaa !5
  %275 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %274, i32 0, i32 1
  %276 = load i32, ptr %275, align 1, !tbaa !28
  %277 = load ptr, ptr %12, align 8, !tbaa !5
  %278 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %277, i32 0, i32 2
  %279 = load i32, ptr %278, align 1, !tbaa !15
  %280 = load ptr, ptr %13, align 8, !tbaa !5
  %281 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %280, i32 0, i32 4
  %282 = load i32, ptr %281, align 1, !tbaa !29
  %283 = load ptr, ptr %12, align 8, !tbaa !5
  %284 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %283, i32 0, i32 2
  %285 = load i32, ptr %284, align 1, !tbaa !15
  %286 = load ptr, ptr %13, align 8, !tbaa !5
  %287 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %286, i32 0, i32 11
  %288 = load i64, ptr %287, align 1, !tbaa !30
  %289 = trunc i64 %288 to i32
  %290 = icmp eq i32 -2147483648, %289
  br i1 %290, label %297, label %291

291:                                              ; preds = %260
  %292 = load ptr, ptr %13, align 8, !tbaa !5
  %293 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %292, i32 0, i32 11
  %294 = load i64, ptr %293, align 1, !tbaa !30
  %295 = trunc i64 %294 to i32
  %296 = icmp slt i32 -2147483648, %295
  br i1 %296, label %297, label %320

297:                                              ; preds = %291, %260
  %298 = load ptr, ptr %13, align 8, !tbaa !5
  %299 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %298, i32 0, i32 11
  %300 = load i64, ptr %299, align 1, !tbaa !30
  %301 = mul i64 1, %300
  %302 = icmp ult i64 %301, 2147483647
  br i1 %302, label %303, label %308

303:                                              ; preds = %297
  %304 = load ptr, ptr %13, align 8, !tbaa !5
  %305 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %304, i32 0, i32 11
  %306 = load i64, ptr %305, align 1, !tbaa !30
  %307 = mul i64 1, %306
  br label %309

308:                                              ; preds = %297
  br label %309

309:                                              ; preds = %308, %303
  %310 = phi i64 [ %307, %303 ], [ 2147483647, %308 ]
  %311 = icmp ule i64 %310, 2147483647
  br i1 %311, label %312, label %320

312:                                              ; preds = %309
  %313 = load ptr, ptr %13, align 8, !tbaa !5
  %314 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %313, i32 0, i32 11
  %315 = load i64, ptr %314, align 1, !tbaa !30
  %316 = sitofp i64 %315 to double
  %317 = fcmp ole double 0.000000e+00, %316
  br i1 %317, label %319, label %318

318:                                              ; preds = %312
  br i1 true, label %319, label %320

319:                                              ; preds = %318, %312
  br label %321

320:                                              ; preds = %318, %309, %291
  call void @__assert_fail(ptr noundef @.str.5, ptr noundef @.str.1, i32 noundef 212, ptr noundef @__PRETTY_FUNCTION__.libxsmm_generator_gemm_setup_A_vnni_or_trans_B_vnni_or_trans_tensor_to_stack_aarch64) #5
  unreachable

321:                                              ; preds = %319
  %322 = load ptr, ptr %13, align 8, !tbaa !5
  %323 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %322, i32 0, i32 11
  %324 = load i64, ptr %323, align 1, !tbaa !30
  %325 = trunc i64 %324 to i32
  %326 = load i32, ptr %14, align 4, !tbaa !9
  %327 = load i32, ptr %14, align 4, !tbaa !9
  %328 = load i32, ptr %14, align 4, !tbaa !9
  call void @libxsmm_generator_gemm_apply_ops_input_tensor_and_store_to_stack_aarch64(ptr noundef %261, ptr noundef %262, ptr noundef %263, ptr noundef %264, i32 noundef %267, i32 noundef %268, i32 noundef %269, i32 noundef %270, i32 noundef %271, i32 noundef %272, i32 noundef %273, i32 noundef 29, i32 noundef %276, i32 noundef %279, i32 noundef %282, i32 noundef %285, i32 noundef %325, i32 noundef %326, i32 noundef %327, i32 noundef %328, 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)
  %329 = load ptr, ptr %8, align 8, !tbaa !5
  %330 = load i32, ptr %20, align 4, !tbaa !9
  call void @libxsmm_generator_gemm_getval_stack_var_aarch64(ptr noundef %329, i32 noundef 25, i32 noundef %330)
  %331 = load ptr, ptr %8, align 8, !tbaa !5
  %332 = load i32, ptr %20, align 4, !tbaa !9
  %333 = load ptr, ptr %10, align 8, !tbaa !5
  %334 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %333, i32 0, i32 3
  %335 = load i32, ptr %334, align 4, !tbaa !27
  call void @libxsmm_aarch64_instruction_alu_compute_imm12(ptr noundef %331, i32 noundef 285212678, i32 noundef %332, i32 noundef %335, i32 noundef 0, i8 noundef zeroext 0)
  %336 = load ptr, ptr %12, align 8, !tbaa !5
  %337 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %336, i32 0, i32 2
  %338 = load i32, ptr %337, align 1, !tbaa !15
  %339 = load ptr, ptr %12, align 8, !tbaa !5
  %340 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %339, i32 0, i32 4
  store i32 %338, ptr %340, align 1, !tbaa !29
  %341 = load i32, ptr %14, align 4, !tbaa !9
  %342 = icmp eq i32 0, %341
  br i1 %342, label %343, label %344

343:                                              ; preds = %321
  br label %424

344:                                              ; preds = %321
  %345 = load i32, ptr %14, align 4, !tbaa !9
  %346 = icmp eq i32 1, %345
  br i1 %346, label %347, label %348

347:                                              ; preds = %344
  br label %422

348:                                              ; preds = %344
  %349 = load i32, ptr %14, align 4, !tbaa !9
  %350 = icmp eq i32 2, %349
  br i1 %350, label %351, label %352

351:                                              ; preds = %348
  br label %420

352:                                              ; preds = %348
  %353 = load i32, ptr %14, align 4, !tbaa !9
  %354 = icmp eq i32 3, %353
  br i1 %354, label %355, label %356

355:                                              ; preds = %352
  br label %418

356:                                              ; preds = %352
  %357 = load i32, ptr %14, align 4, !tbaa !9
  %358 = icmp eq i32 4, %357
  br i1 %358, label %359, label %360

359:                                              ; preds = %356
  br label %416

360:                                              ; preds = %356
  %361 = load i32, ptr %14, align 4, !tbaa !9
  %362 = icmp eq i32 5, %361
  br i1 %362, label %363, label %364

363:                                              ; preds = %360
  br label %414

364:                                              ; preds = %360
  %365 = load i32, ptr %14, align 4, !tbaa !9
  %366 = icmp eq i32 6, %365
  br i1 %366, label %367, label %368

367:                                              ; preds = %364
  br label %412

368:                                              ; preds = %364
  %369 = load i32, ptr %14, align 4, !tbaa !9
  %370 = icmp eq i32 7, %369
  br i1 %370, label %371, label %372

371:                                              ; preds = %368
  br label %410

372:                                              ; preds = %368
  %373 = load i32, ptr %14, align 4, !tbaa !9
  %374 = icmp eq i32 8, %373
  br i1 %374, label %375, label %376

375:                                              ; preds = %372
  br label %408

376:                                              ; preds = %372
  %377 = load i32, ptr %14, align 4, !tbaa !9
  %378 = icmp eq i32 9, %377
  br i1 %378, label %379, label %380

379:                                              ; preds = %376
  br label %406

380:                                              ; preds = %376
  %381 = load i32, ptr %14, align 4, !tbaa !9
  %382 = icmp eq i32 10, %381
  br i1 %382, label %383, label %384

383:                                              ; preds = %380
  br label %404

384:                                              ; preds = %380
  %385 = load i32, ptr %14, align 4, !tbaa !9
  %386 = icmp eq i32 11, %385
  br i1 %386, label %387, label %388

387:                                              ; preds = %384
  br label %402

388:                                              ; preds = %384
  %389 = load i32, ptr %14, align 4, !tbaa !9
  %390 = icmp eq i32 12, %389
  br i1 %390, label %391, label %392

391:                                              ; preds = %388
  br label %400

392:                                              ; preds = %388
  %393 = load i32, ptr %14, align 4, !tbaa !9
  %394 = icmp eq i32 13, %393
  br i1 %394, label %395, label %396

395:                                              ; preds = %392
  br label %398

396:                                              ; preds = %392
  call void @__assert_fail(ptr noundef @.str, ptr noundef @.str.1, i32 noundef 219, ptr noundef @__PRETTY_FUNCTION__.libxsmm_generator_gemm_setup_A_vnni_or_trans_B_vnni_or_trans_tensor_to_stack_aarch64) #5
  unreachable

397:                                              ; No predecessors!
  br label %398

398:                                              ; preds = %397, %395
  %399 = phi i32 [ 1, %395 ], [ 0, %397 ]
  br label %400

400:                                              ; preds = %398, %391
  %401 = phi i32 [ 1, %391 ], [ %399, %398 ]
  br label %402

402:                                              ; preds = %400, %387
  %403 = phi i32 [ 2, %387 ], [ %401, %400 ]
  br label %404

404:                                              ; preds = %402, %383
  %405 = phi i32 [ 2, %383 ], [ %403, %402 ]
  br label %406

406:                                              ; preds = %404, %379
  %407 = phi i32 [ 4, %379 ], [ %405, %404 ]
  br label %408

408:                                              ; preds = %406, %375
  %409 = phi i32 [ 4, %375 ], [ %407, %406 ]
  br label %410

410:                                              ; preds = %408, %371
  %411 = phi i32 [ 8, %371 ], [ %409, %408 ]
  br label %412

412:                                              ; preds = %410, %367
  %413 = phi i32 [ 8, %367 ], [ %411, %410 ]
  br label %414

414:                                              ; preds = %412, %363
  %415 = phi i32 [ 1, %363 ], [ %413, %412 ]
  br label %416

416:                                              ; preds = %414, %359
  %417 = phi i32 [ 1, %359 ], [ %415, %414 ]
  br label %418

418:                                              ; preds = %416, %355
  %419 = phi i32 [ 2, %355 ], [ %417, %416 ]
  br label %420

420:                                              ; preds = %418, %351
  %421 = phi i32 [ 2, %351 ], [ %419, %418 ]
  br label %422

422:                                              ; preds = %420, %347
  %423 = phi i32 [ 4, %347 ], [ %421, %420 ]
  br label %424

424:                                              ; preds = %422, %343
  %425 = phi i32 [ 8, %343 ], [ %423, %422 ]
  %426 = sext i32 %425 to i64
  %427 = load ptr, ptr %12, align 8, !tbaa !5
  %428 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %427, i32 0, i32 1
  %429 = load i32, ptr %428, align 1, !tbaa !28
  %430 = zext i32 %429 to i64
  %431 = mul nsw i64 %426, %430
  %432 = load ptr, ptr %12, align 8, !tbaa !5
  %433 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %432, i32 0, i32 2
  %434 = load i32, ptr %433, align 1, !tbaa !15
  %435 = zext i32 %434 to i64
  %436 = mul nsw i64 %431, %435
  %437 = load ptr, ptr %12, align 8, !tbaa !5
  %438 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %437, i32 0, i32 11
  store i64 %436, ptr %438, align 1, !tbaa !30
  br label %567

439:                                              ; preds = %255
  %440 = load i32, ptr %16, align 4, !tbaa !9
  %441 = icmp sgt i32 %440, 0
  br i1 %441, label %445, label %442

442:                                              ; preds = %439
  %443 = load i32, ptr %17, align 4, !tbaa !9
  %444 = icmp sgt i32 %443, 0
  br i1 %444, label %445, label %566

445:                                              ; preds = %442, %439
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #4
  %446 = load ptr, ptr %13, align 8, !tbaa !5
  %447 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %446, i32 0, i32 6
  %448 = load i32, ptr %447, align 1, !tbaa !11
  %449 = and i32 %448, 2
  store i32 %449, ptr %33, align 4, !tbaa !9
  %450 = load ptr, ptr %8, align 8, !tbaa !5
  %451 = load ptr, ptr %9, align 8, !tbaa !5
  %452 = load ptr, ptr %11, align 8, !tbaa !5
  %453 = load ptr, ptr %12, align 8, !tbaa !5
  %454 = load ptr, ptr %10, align 8, !tbaa !5
  %455 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %454, i32 0, i32 3
  %456 = load i32, ptr %455, align 4, !tbaa !27
  %457 = load i32, ptr %19, align 4, !tbaa !9
  %458 = load i32, ptr %20, align 4, !tbaa !9
  %459 = load i32, ptr %21, align 4, !tbaa !9
  %460 = load i32, ptr %22, align 4, !tbaa !9
  %461 = load i32, ptr %23, align 4, !tbaa !9
  %462 = load i32, ptr %24, align 4, !tbaa !9
  %463 = load i32, ptr %33, align 4, !tbaa !9
  %464 = icmp ne i32 %463, 0
  br i1 %464, label %465, label %469

465:                                              ; preds = %445
  %466 = load ptr, ptr %12, align 8, !tbaa !5
  %467 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %466, i32 0, i32 1
  %468 = load i32, ptr %467, align 1, !tbaa !28
  br label %473

469:                                              ; preds = %445
  %470 = load ptr, ptr %12, align 8, !tbaa !5
  %471 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %470, i32 0, i32 2
  %472 = load i32, ptr %471, align 1, !tbaa !15
  br label %473

473:                                              ; preds = %469, %465
  %474 = phi i32 [ %468, %465 ], [ %472, %469 ]
  %475 = load i32, ptr %33, align 4, !tbaa !9
  %476 = icmp ne i32 %475, 0
  br i1 %476, label %477, label %481

477:                                              ; preds = %473
  %478 = load ptr, ptr %12, align 8, !tbaa !5
  %479 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %478, i32 0, i32 2
  %480 = load i32, ptr %479, align 1, !tbaa !15
  br label %485

481:                                              ; preds = %473
  %482 = load ptr, ptr %12, align 8, !tbaa !5
  %483 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %482, i32 0, i32 1
  %484 = load i32, ptr %483, align 1, !tbaa !28
  br label %485

485:                                              ; preds = %481, %477
  %486 = phi i32 [ %480, %477 ], [ %484, %481 ]
  %487 = load ptr, ptr %13, align 8, !tbaa !5
  %488 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %487, i32 0, i32 4
  %489 = load i32, ptr %488, align 1, !tbaa !29
  %490 = load i32, ptr %33, align 4, !tbaa !9
  %491 = icmp ne i32 %490, 0
  br i1 %491, label %492, label %496

492:                                              ; preds = %485
  %493 = load ptr, ptr %12, align 8, !tbaa !5
  %494 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %493, i32 0, i32 1
  %495 = load i32, ptr %494, align 1, !tbaa !28
  br label %500

496:                                              ; preds = %485
  %497 = load ptr, ptr %12, align 8, !tbaa !5
  %498 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %497, i32 0, i32 2
  %499 = load i32, ptr %498, align 1, !tbaa !15
  br label %500

500:                                              ; preds = %496, %492
  %501 = phi i32 [ %495, %492 ], [ %499, %496 ]
  %502 = load ptr, ptr %13, 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 !30
  %505 = trunc i64 %504 to i32
  %506 = icmp eq i32 -2147483648, %505
  br i1 %506, label %513, label %507

507:                                              ; preds = %500
  %508 = load ptr, ptr %13, align 8, !tbaa !5
  %509 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %508, i32 0, i32 11
  %510 = load i64, ptr %509, align 1, !tbaa !30
  %511 = trunc i64 %510 to i32
  %512 = icmp slt i32 -2147483648, %511
  br i1 %512, label %513, label %536

513:                                              ; preds = %507, %500
  %514 = load ptr, ptr %13, align 8, !tbaa !5
  %515 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %514, i32 0, i32 11
  %516 = load i64, ptr %515, align 1, !tbaa !30
  %517 = mul i64 1, %516
  %518 = icmp ult i64 %517, 2147483647
  br i1 %518, label %519, label %524

519:                                              ; preds = %513
  %520 = load ptr, ptr %13, align 8, !tbaa !5
  %521 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %520, i32 0, i32 11
  %522 = load i64, ptr %521, align 1, !tbaa !30
  %523 = mul i64 1, %522
  br label %525

524:                                              ; preds = %513
  br label %525

525:                                              ; preds = %524, %519
  %526 = phi i64 [ %523, %519 ], [ 2147483647, %524 ]
  %527 = icmp ule i64 %526, 2147483647
  br i1 %527, label %528, label %536

528:                                              ; preds = %525
  %529 = load ptr, ptr %13, align 8, !tbaa !5
  %530 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %529, i32 0, i32 11
  %531 = load i64, ptr %530, align 1, !tbaa !30
  %532 = sitofp i64 %531 to double
  %533 = fcmp ole double 0.000000e+00, %532
  br i1 %533, label %535, label %534

534:                                              ; preds = %528
  br i1 true, label %535, label %536

535:                                              ; preds = %534, %528
  br label %537

536:                                              ; preds = %534, %525, %507
  call void @__assert_fail(ptr noundef @.str.5, ptr noundef @.str.1, i32 noundef 225, ptr noundef @__PRETTY_FUNCTION__.libxsmm_generator_gemm_setup_A_vnni_or_trans_B_vnni_or_trans_tensor_to_stack_aarch64) #5
  unreachable

537:                                              ; preds = %535
  %538 = load ptr, ptr %13, align 8, !tbaa !5
  %539 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %538, i32 0, i32 11
  %540 = load i64, ptr %539, align 1, !tbaa !30
  %541 = trunc i64 %540 to i32
  %542 = load i32, ptr %14, align 4, !tbaa !9
  %543 = load i32, ptr %14, align 4, !tbaa !9
  %544 = load i32, ptr %14, align 4, !tbaa !9
  call void @libxsmm_generator_gemm_apply_ops_input_tensor_and_store_to_stack_aarch64(ptr noundef %450, ptr noundef %451, ptr noundef %452, ptr noundef %453, i32 noundef %456, i32 noundef %457, i32 noundef %458, i32 noundef %459, i32 noundef %460, i32 noundef %461, i32 noundef %462, i32 noundef 1, i32 noundef %474, i32 noundef %486, i32 noundef %489, i32 noundef %501, i32 noundef %541, i32 noundef %542, i32 noundef %543, i32 noundef %544, 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)
  %545 = load i32, ptr %33, align 4, !tbaa !9
  %546 = icmp ne i32 %545, 0
  br i1 %546, label %547, label %551

547:                                              ; preds = %537
  %548 = load ptr, ptr %12, align 8, !tbaa !5
  %549 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %548, i32 0, i32 1
  %550 = load i32, ptr %549, align 1, !tbaa !28
  br label %555

551:                                              ; preds = %537
  %552 = load ptr, ptr %12, align 8, !tbaa !5
  %553 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %552, i32 0, i32 2
  %554 = load i32, ptr %553, align 1, !tbaa !15
  br label %555

555:                                              ; preds = %551, %547
  %556 = phi i32 [ %550, %547 ], [ %554, %551 ]
  %557 = load ptr, ptr %12, align 8, !tbaa !5
  %558 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %557, i32 0, i32 4
  store i32 %556, ptr %558, align 1, !tbaa !29
  %559 = load ptr, ptr %8, align 8, !tbaa !5
  %560 = load i32, ptr %20, align 4, !tbaa !9
  call void @libxsmm_generator_gemm_getval_stack_var_aarch64(ptr noundef %559, i32 noundef 25, i32 noundef %560)
  %561 = load ptr, ptr %8, align 8, !tbaa !5
  %562 = load i32, ptr %20, align 4, !tbaa !9
  %563 = load ptr, ptr %10, align 8, !tbaa !5
  %564 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %563, i32 0, i32 3
  %565 = load i32, ptr %564, align 4, !tbaa !27
  call void @libxsmm_aarch64_instruction_alu_compute_imm12(ptr noundef %561, i32 noundef 285212678, i32 noundef %562, i32 noundef %565, i32 noundef 0, i8 noundef zeroext 0)
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #4
  br label %566

566:                                              ; preds = %555, %442
  br label %567

567:                                              ; preds = %566, %424
  %568 = load i32, ptr %18, align 4, !tbaa !9
  %569 = icmp sgt i32 %568, 0
  br i1 %569, label %570, label %897

570:                                              ; preds = %567
  %571 = load i32, ptr %16, align 4, !tbaa !9
  %572 = icmp sgt i32 %571, 0
  br i1 %572, label %573, label %684

573:                                              ; preds = %570
  %574 = load ptr, ptr %12, align 8, !tbaa !5
  %575 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %574, i32 0, i32 6
  %576 = load i32, ptr %575, align 1, !tbaa !11
  %577 = xor i32 %576, 131072
  %578 = load ptr, ptr %12, align 8, !tbaa !5
  %579 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %578, i32 0, i32 6
  store i32 %577, ptr %579, align 1, !tbaa !11
  %580 = load ptr, ptr %12, align 8, !tbaa !5
  %581 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %580, i32 0, i32 6
  %582 = load i32, ptr %581, align 1, !tbaa !11
  %583 = or i32 %582, 262144
  %584 = load ptr, ptr %12, align 8, !tbaa !5
  %585 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %584, i32 0, i32 6
  store i32 %583, ptr %585, align 1, !tbaa !11
  %586 = load i32, ptr %14, align 4, !tbaa !9
  %587 = icmp eq i32 0, %586
  br i1 %587, label %588, label %589

588:                                              ; preds = %573
  br label %669

589:                                              ; preds = %573
  %590 = load i32, ptr %14, align 4, !tbaa !9
  %591 = icmp eq i32 1, %590
  br i1 %591, label %592, label %593

592:                                              ; preds = %589
  br label %667

593:                                              ; preds = %589
  %594 = load i32, ptr %14, align 4, !tbaa !9
  %595 = icmp eq i32 2, %594
  br i1 %595, label %596, label %597

596:                                              ; preds = %593
  br label %665

597:                                              ; preds = %593
  %598 = load i32, ptr %14, align 4, !tbaa !9
  %599 = icmp eq i32 3, %598
  br i1 %599, label %600, label %601

600:                                              ; preds = %597
  br label %663

601:                                              ; preds = %597
  %602 = load i32, ptr %14, align 4, !tbaa !9
  %603 = icmp eq i32 4, %602
  br i1 %603, label %604, label %605

604:                                              ; preds = %601
  br label %661

605:                                              ; preds = %601
  %606 = load i32, ptr %14, align 4, !tbaa !9
  %607 = icmp eq i32 5, %606
  br i1 %607, label %608, label %609

608:                                              ; preds = %605
  br label %659

609:                                              ; preds = %605
  %610 = load i32, ptr %14, align 4, !tbaa !9
  %611 = icmp eq i32 6, %610
  br i1 %611, label %612, label %613

612:                                              ; preds = %609
  br label %657

613:                                              ; preds = %609
  %614 = load i32, ptr %14, align 4, !tbaa !9
  %615 = icmp eq i32 7, %614
  br i1 %615, label %616, label %617

616:                                              ; preds = %613
  br label %655

617:                                              ; preds = %613
  %618 = load i32, ptr %14, align 4, !tbaa !9
  %619 = icmp eq i32 8, %618
  br i1 %619, label %620, label %621

620:                                              ; preds = %617
  br label %653

621:                                              ; preds = %617
  %622 = load i32, ptr %14, align 4, !tbaa !9
  %623 = icmp eq i32 9, %622
  br i1 %623, label %624, label %625

624:                                              ; preds = %621
  br label %651

625:                                              ; preds = %621
  %626 = load i32, ptr %14, align 4, !tbaa !9
  %627 = icmp eq i32 10, %626
  br i1 %627, label %628, label %629

628:                                              ; preds = %625
  br label %649

629:                                              ; preds = %625
  %630 = load i32, ptr %14, align 4, !tbaa !9
  %631 = icmp eq i32 11, %630
  br i1 %631, label %632, label %633

632:                                              ; preds = %629
  br label %647

633:                                              ; preds = %629
  %634 = load i32, ptr %14, align 4, !tbaa !9
  %635 = icmp eq i32 12, %634
  br i1 %635, label %636, label %637

636:                                              ; preds = %633
  br label %645

637:                                              ; preds = %633
  %638 = load i32, ptr %14, align 4, !tbaa !9
  %639 = icmp eq i32 13, %638
  br i1 %639, label %640, label %641

640:                                              ; preds = %637
  br label %643

641:                                              ; preds = %637
  call void @__assert_fail(ptr noundef @.str, ptr noundef @.str.1, i32 noundef 240, ptr noundef @__PRETTY_FUNCTION__.libxsmm_generator_gemm_setup_A_vnni_or_trans_B_vnni_or_trans_tensor_to_stack_aarch64) #5
  unreachable

642:                                              ; No predecessors!
  br label %643

643:                                              ; preds = %642, %640
  %644 = phi i32 [ 1, %640 ], [ 0, %642 ]
  br label %645

645:                                              ; preds = %643, %636
  %646 = phi i32 [ 1, %636 ], [ %644, %643 ]
  br label %647

647:                                              ; preds = %645, %632
  %648 = phi i32 [ 2, %632 ], [ %646, %645 ]
  br label %649

649:                                              ; preds = %647, %628
  %650 = phi i32 [ 2, %628 ], [ %648, %647 ]
  br label %651

651:                                              ; preds = %649, %624
  %652 = phi i32 [ 4, %624 ], [ %650, %649 ]
  br label %653

653:                                              ; preds = %651, %620
  %654 = phi i32 [ 4, %620 ], [ %652, %651 ]
  br label %655

655:                                              ; preds = %653, %616
  %656 = phi i32 [ 8, %616 ], [ %654, %653 ]
  br label %657

657:                                              ; preds = %655, %612
  %658 = phi i32 [ 8, %612 ], [ %656, %655 ]
  br label %659

659:                                              ; preds = %657, %608
  %660 = phi i32 [ 1, %608 ], [ %658, %657 ]
  br label %661

661:                                              ; preds = %659, %604
  %662 = phi i32 [ 1, %604 ], [ %660, %659 ]
  br label %663

663:                                              ; preds = %661, %600
  %664 = phi i32 [ 2, %600 ], [ %662, %661 ]
  br label %665

665:                                              ; preds = %663, %596
  %666 = phi i32 [ 2, %596 ], [ %664, %663 ]
  br label %667

667:                                              ; preds = %665, %592
  %668 = phi i32 [ 4, %592 ], [ %666, %665 ]
  br label %669

669:                                              ; preds = %667, %588
  %670 = phi i32 [ 8, %588 ], [ %668, %667 ]
  %671 = sext i32 %670 to i64
  %672 = load ptr, ptr %12, align 8, !tbaa !5
  %673 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %672, i32 0, i32 1
  %674 = load i32, ptr %673, align 1, !tbaa !28
  %675 = zext i32 %674 to i64
  %676 = mul nsw i64 %671, %675
  %677 = load ptr, ptr %12, align 8, !tbaa !5
  %678 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %677, i32 0, i32 2
  %679 = load i32, ptr %678, align 1, !tbaa !15
  %680 = zext i32 %679 to i64
  %681 = mul nsw i64 %676, %680
  %682 = load ptr, ptr %12, align 8, !tbaa !5
  %683 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %682, i32 0, i32 11
  store i64 %681, ptr %683, align 1, !tbaa !30
  br label %684

684:                                              ; preds = %669, %570
  %685 = load i32, ptr %17, align 4, !tbaa !9
  %686 = icmp sgt i32 %685, 0
  br i1 %686, label %687, label %798

687:                                              ; preds = %684
  %688 = load ptr, ptr %12, align 8, !tbaa !5
  %689 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %688, i32 0, i32 6
  %690 = load i32, ptr %689, align 1, !tbaa !11
  %691 = xor i32 %690, 65536
  %692 = load ptr, ptr %12, align 8, !tbaa !5
  %693 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %692, i32 0, i32 6
  store i32 %691, ptr %693, align 1, !tbaa !11
  %694 = load ptr, ptr %12, align 8, !tbaa !5
  %695 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %694, i32 0, i32 6
  %696 = load i32, ptr %695, align 1, !tbaa !11
  %697 = or i32 %696, 262144
  %698 = load ptr, ptr %12, align 8, !tbaa !5
  %699 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %698, i32 0, i32 6
  store i32 %697, ptr %699, align 1, !tbaa !11
  %700 = load i32, ptr %14, align 4, !tbaa !9
  %701 = icmp eq i32 0, %700
  br i1 %701, label %702, label %703

702:                                              ; preds = %687
  br label %783

703:                                              ; preds = %687
  %704 = load i32, ptr %14, align 4, !tbaa !9
  %705 = icmp eq i32 1, %704
  br i1 %705, label %706, label %707

706:                                              ; preds = %703
  br label %781

707:                                              ; preds = %703
  %708 = load i32, ptr %14, align 4, !tbaa !9
  %709 = icmp eq i32 2, %708
  br i1 %709, label %710, label %711

710:                                              ; preds = %707
  br label %779

711:                                              ; preds = %707
  %712 = load i32, ptr %14, align 4, !tbaa !9
  %713 = icmp eq i32 3, %712
  br i1 %713, label %714, label %715

714:                                              ; preds = %711
  br label %777

715:                                              ; preds = %711
  %716 = load i32, ptr %14, align 4, !tbaa !9
  %717 = icmp eq i32 4, %716
  br i1 %717, label %718, label %719

718:                                              ; preds = %715
  br label %775

719:                                              ; preds = %715
  %720 = load i32, ptr %14, align 4, !tbaa !9
  %721 = icmp eq i32 5, %720
  br i1 %721, label %722, label %723

722:                                              ; preds = %719
  br label %773

723:                                              ; preds = %719
  %724 = load i32, ptr %14, align 4, !tbaa !9
  %725 = icmp eq i32 6, %724
  br i1 %725, label %726, label %727

726:                                              ; preds = %723
  br label %771

727:                                              ; preds = %723
  %728 = load i32, ptr %14, align 4, !tbaa !9
  %729 = icmp eq i32 7, %728
  br i1 %729, label %730, label %731

730:                                              ; preds = %727
  br label %769

731:                                              ; preds = %727
  %732 = load i32, ptr %14, align 4, !tbaa !9
  %733 = icmp eq i32 8, %732
  br i1 %733, label %734, label %735

734:                                              ; preds = %731
  br label %767

735:                                              ; preds = %731
  %736 = load i32, ptr %14, align 4, !tbaa !9
  %737 = icmp eq i32 9, %736
  br i1 %737, label %738, label %739

738:                                              ; preds = %735
  br label %765

739:                                              ; preds = %735
  %740 = load i32, ptr %14, align 4, !tbaa !9
  %741 = icmp eq i32 10, %740
  br i1 %741, label %742, label %743

742:                                              ; preds = %739
  br label %763

743:                                              ; preds = %739
  %744 = load i32, ptr %14, align 4, !tbaa !9
  %745 = icmp eq i32 11, %744
  br i1 %745, label %746, label %747

746:                                              ; preds = %743
  br label %761

747:                                              ; preds = %743
  %748 = load i32, ptr %14, align 4, !tbaa !9
  %749 = icmp eq i32 12, %748
  br i1 %749, label %750, label %751

750:                                              ; preds = %747
  br label %759

751:                                              ; preds = %747
  %752 = load i32, ptr %14, align 4, !tbaa !9
  %753 = icmp eq i32 13, %752
  br i1 %753, label %754, label %755

754:                                              ; preds = %751
  br label %757

755:                                              ; preds = %751
  call void @__assert_fail(ptr noundef @.str, ptr noundef @.str.1, i32 noundef 245, ptr noundef @__PRETTY_FUNCTION__.libxsmm_generator_gemm_setup_A_vnni_or_trans_B_vnni_or_trans_tensor_to_stack_aarch64) #5
  unreachable

756:                                              ; No predecessors!
  br label %757

757:                                              ; preds = %756, %754
  %758 = phi i32 [ 1, %754 ], [ 0, %756 ]
  br label %759

759:                                              ; preds = %757, %750
  %760 = phi i32 [ 1, %750 ], [ %758, %757 ]
  br label %761

761:                                              ; preds = %759, %746
  %762 = phi i32 [ 2, %746 ], [ %760, %759 ]
  br label %763

763:                                              ; preds = %761, %742
  %764 = phi i32 [ 2, %742 ], [ %762, %761 ]
  br label %765

765:                                              ; preds = %763, %738
  %766 = phi i32 [ 4, %738 ], [ %764, %763 ]
  br label %767

767:                                              ; preds = %765, %734
  %768 = phi i32 [ 4, %734 ], [ %766, %765 ]
  br label %769

769:                                              ; preds = %767, %730
  %770 = phi i32 [ 8, %730 ], [ %768, %767 ]
  br label %771

771:                                              ; preds = %769, %726
  %772 = phi i32 [ 8, %726 ], [ %770, %769 ]
  br label %773

773:                                              ; preds = %771, %722
  %774 = phi i32 [ 1, %722 ], [ %772, %771 ]
  br label %775

775:                                              ; preds = %773, %718
  %776 = phi i32 [ 1, %718 ], [ %774, %773 ]
  br label %777

777:                                              ; preds = %775, %714
  %778 = phi i32 [ 2, %714 ], [ %776, %775 ]
  br label %779

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

781:                                              ; preds = %779, %706
  %782 = phi i32 [ 4, %706 ], [ %780, %779 ]
  br label %783

783:                                              ; preds = %781, %702
  %784 = phi i32 [ 8, %702 ], [ %782, %781 ]
  %785 = sext i32 %784 to i64
  %786 = load ptr, ptr %12, align 8, !tbaa !5
  %787 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %786, i32 0, i32 1
  %788 = load i32, ptr %787, align 1, !tbaa !28
  %789 = zext i32 %788 to i64
  %790 = mul nsw i64 %785, %789
  %791 = load ptr, ptr %12, align 8, !tbaa !5
  %792 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %791, i32 0, i32 2
  %793 = load i32, ptr %792, align 1, !tbaa !15
  %794 = zext i32 %793 to i64
  %795 = mul nsw i64 %790, %794
  %796 = load ptr, ptr %12, align 8, !tbaa !5
  %797 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %796, i32 0, i32 11
  store i64 %795, ptr %797, align 1, !tbaa !30
  br label %798

798:                                              ; preds = %783, %684
  %799 = load i32, ptr %14, align 4, !tbaa !9
  %800 = icmp eq i32 0, %799
  br i1 %800, label %801, label %802

801:                                              ; preds = %798
  br label %882

802:                                              ; preds = %798
  %803 = load i32, ptr %14, align 4, !tbaa !9
  %804 = icmp eq i32 1, %803
  br i1 %804, label %805, label %806

805:                                              ; preds = %802
  br label %880

806:                                              ; preds = %802
  %807 = load i32, ptr %14, align 4, !tbaa !9
  %808 = icmp eq i32 2, %807
  br i1 %808, label %809, label %810

809:                                              ; preds = %806
  br label %878

810:                                              ; preds = %806
  %811 = load i32, ptr %14, align 4, !tbaa !9
  %812 = icmp eq i32 3, %811
  br i1 %812, label %813, label %814

813:                                              ; preds = %810
  br label %876

814:                                              ; preds = %810
  %815 = load i32, ptr %14, align 4, !tbaa !9
  %816 = icmp eq i32 4, %815
  br i1 %816, label %817, label %818

817:                                              ; preds = %814
  br label %874

818:                                              ; preds = %814
  %819 = load i32, ptr %14, align 4, !tbaa !9
  %820 = icmp eq i32 5, %819
  br i1 %820, label %821, label %822

821:                                              ; preds = %818
  br label %872

822:                                              ; preds = %818
  %823 = load i32, ptr %14, align 4, !tbaa !9
  %824 = icmp eq i32 6, %823
  br i1 %824, label %825, label %826

825:                                              ; preds = %822
  br label %870

826:                                              ; preds = %822
  %827 = load i32, ptr %14, align 4, !tbaa !9
  %828 = icmp eq i32 7, %827
  br i1 %828, label %829, label %830

829:                                              ; preds = %826
  br label %868

830:                                              ; preds = %826
  %831 = load i32, ptr %14, align 4, !tbaa !9
  %832 = icmp eq i32 8, %831
  br i1 %832, label %833, label %834

833:                                              ; preds = %830
  br label %866

834:                                              ; preds = %830
  %835 = load i32, ptr %14, align 4, !tbaa !9
  %836 = icmp eq i32 9, %835
  br i1 %836, label %837, label %838

837:                                              ; preds = %834
  br label %864

838:                                              ; preds = %834
  %839 = load i32, ptr %14, align 4, !tbaa !9
  %840 = icmp eq i32 10, %839
  br i1 %840, label %841, label %842

841:                                              ; preds = %838
  br label %862

842:                                              ; preds = %838
  %843 = load i32, ptr %14, align 4, !tbaa !9
  %844 = icmp eq i32 11, %843
  br i1 %844, label %845, label %846

845:                                              ; preds = %842
  br label %860

846:                                              ; preds = %842
  %847 = load i32, ptr %14, align 4, !tbaa !9
  %848 = icmp eq i32 12, %847
  br i1 %848, label %849, label %850

849:                                              ; preds = %846
  br label %858

850:                                              ; preds = %846
  %851 = load i32, ptr %14, align 4, !tbaa !9
  %852 = icmp eq i32 13, %851
  br i1 %852, label %853, label %854

853:                                              ; preds = %850
  br label %856

854:                                              ; preds = %850
  call void @__assert_fail(ptr noundef @.str, ptr noundef @.str.1, i32 noundef 247, ptr noundef @__PRETTY_FUNCTION__.libxsmm_generator_gemm_setup_A_vnni_or_trans_B_vnni_or_trans_tensor_to_stack_aarch64) #5
  unreachable

855:                                              ; No predecessors!
  br label %856

856:                                              ; preds = %855, %853
  %857 = phi i32 [ 1, %853 ], [ 0, %855 ]
  br label %858

858:                                              ; preds = %856, %849
  %859 = phi i32 [ 1, %849 ], [ %857, %856 ]
  br label %860

860:                                              ; preds = %858, %845
  %861 = phi i32 [ 2, %845 ], [ %859, %858 ]
  br label %862

862:                                              ; preds = %860, %841
  %863 = phi i32 [ 2, %841 ], [ %861, %860 ]
  br label %864

864:                                              ; preds = %862, %837
  %865 = phi i32 [ 4, %837 ], [ %863, %862 ]
  br label %866

866:                                              ; preds = %864, %833
  %867 = phi i32 [ 4, %833 ], [ %865, %864 ]
  br label %868

868:                                              ; preds = %866, %829
  %869 = phi i32 [ 8, %829 ], [ %867, %866 ]
  br label %870

870:                                              ; preds = %868, %825
  %871 = phi i32 [ 8, %825 ], [ %869, %868 ]
  br label %872

872:                                              ; preds = %870, %821
  %873 = phi i32 [ 1, %821 ], [ %871, %870 ]
  br label %874

874:                                              ; preds = %872, %817
  %875 = phi i32 [ 1, %817 ], [ %873, %872 ]
  br label %876

876:                                              ; preds = %874, %813
  %877 = phi i32 [ 2, %813 ], [ %875, %874 ]
  br label %878

878:                                              ; preds = %876, %809
  %879 = phi i32 [ 2, %809 ], [ %877, %876 ]
  br label %880

880:                                              ; preds = %878, %805
  %881 = phi i32 [ 4, %805 ], [ %879, %878 ]
  br label %882

882:                                              ; preds = %880, %801
  %883 = phi i32 [ 8, %801 ], [ %881, %880 ]
  %884 = sext i32 %883 to i64
  %885 = load ptr, ptr %12, align 8, !tbaa !5
  %886 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %885, i32 0, i32 0
  %887 = load i32, ptr %886, align 1, !tbaa !16
  %888 = zext i32 %887 to i64
  %889 = mul nsw i64 %884, %888
  %890 = load ptr, ptr %12, align 8, !tbaa !5
  %891 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %890, i32 0, i32 2
  %892 = load i32, ptr %891, align 1, !tbaa !15
  %893 = zext i32 %892 to i64
  %894 = mul nsw i64 %889, %893
  %895 = load ptr, ptr %12, align 8, !tbaa !5
  %896 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %895, i32 0, i32 10
  store i64 %894, ptr %896, align 1, !tbaa !26
  br label %897

897:                                              ; preds = %882, %567
  %898 = load ptr, ptr %8, align 8, !tbaa !5
  call void @libxsmm_aarch64_instruction_restore_regs(ptr noundef %898, i16 noundef zeroext 3599)
  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 4, 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
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #4
  ret void
}

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

declare i32 @libxsmm_cpuid_arm_use_bfdot() #2

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

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 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
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 = !{!12, !10, i64 8}
!16 = !{!12, !10, i64 0}
!17 = !{!12, !10, i64 12}
!18 = !{!19, !10, i64 668}
!19 = !{!"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, !20, 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}
!20 = !{!"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}
!21 = !{!19, !10, i64 676}
!22 = !{!19, !10, i64 660}
!23 = !{!19, !10, i64 672}
!24 = !{!25, !10, i64 4}
!25 = !{!"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}
!26 = !{!12, !13, i64 33}
!27 = !{!25, !10, i64 12}
!28 = !{!12, !10, i64 4}
!29 = !{!12, !10, i64 16}
!30 = !{!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 [85 x i8], align 1
@__PRETTY_FUNCTION__.libxsmm_generator_gemm_setup_A_vnni_or_trans_B_vnni_or_trans_tensor_to_stack_aarch64 = external hidden unnamed_addr constant [287 x i8], align 1
@switch.table.libxsmm_generator_gemm_setup_A_vnni_or_trans_B_vnni_or_trans_tensor_to_stack_aarch64.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_aarch64(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, i32 noundef) local_unnamed_addr #0

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

declare void @libxsmm_aarch64_instruction_alu_compute_imm12(ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i8 noundef zeroext) 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_aarch64(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) local_unnamed_addr #0 {
  %8 = getelementptr inbounds i8, ptr %4, i64 24
  %9 = load i32, ptr %8, align 1, !tbaa !5
  %10 = and i32 %9, 131072
  %.not282 = icmp eq i32 %10, 0
  %11 = and i32 %9, 65536
  %.not311 = icmp eq i32 %11, 0
  %12 = and i32 %9, 458752
  %spec.select.not = icmp eq i32 %12, 0
  %13 = getelementptr inbounds i8, ptr %5, i64 8
  %14 = load i32, ptr %13, align 1, !tbaa !12
  %15 = load i32, ptr %5, align 1, !tbaa !13
  %16 = getelementptr inbounds i8, ptr %5, i64 12
  %17 = load i32, ptr %16, align 1, !tbaa !14
  tail call void @libxsmm_aarch64_instruction_open_stream(ptr noundef %0, i16 noundef zeroext 3599) #3
  %18 = getelementptr inbounds i8, ptr %3, i64 668
  %19 = load i32, ptr %18, align 4, !tbaa !15
  %.not = icmp eq i32 %19, 0
  br i1 %.not, label %20, label %23

20:                                               ; preds = %7
  %21 = getelementptr inbounds i8, ptr %3, i64 676
  %22 = load i32, ptr %21, align 4, !tbaa !19
  %.not277 = icmp eq i32 %22, 0
  br i1 %.not277, label %35, label %23

23:                                               ; preds = %20, %7
  %24 = tail call i32 @libxsmm_cpuid_arm_use_bfdot() #3
  %25 = icmp ne i32 %24, 0
  %.pre = load i32, ptr %13, align 1, !tbaa !12
  %26 = and i32 %.pre, 3
  %27 = icmp ne i32 %26, 0
  %or.cond = select i1 %25, i1 true, i1 %27
  %28 = load i32, ptr %5, align 1, !tbaa !13
  %29 = load i32, ptr %16, align 1, !tbaa !14
  br i1 %or.cond, label %.thread, label %30

30:                                               ; preds = %23
  %31 = lshr exact i32 %.pre, 2
  %32 = lshr i32 %29, 2
  br label %48

.thread:                                          ; preds = %23
  %33 = lshr i32 %.pre, 1
  %34 = lshr i32 %29, 1
  br label %48

35:                                               ; preds = %20
  %36 = getelementptr inbounds i8, ptr %3, i64 660
  %37 = load i32, ptr %36, align 4, !tbaa !20
  %.not278 = icmp eq i32 %37, 0
  br i1 %.not278, label %38, label %.thread292

38:                                               ; preds = %35
  %39 = getelementptr inbounds i8, ptr %3, i64 672
  %40 = load i32, ptr %39, align 8, !tbaa !21
  %.not279 = icmp eq i32 %40, 0
  br i1 %.not279, label %48, label %.thread292

.thread292:                                       ; preds = %38, %35
  %41 = tail call i32 @libxsmm_cpuid_arm_use_bfdot() #3
  %.pre313 = load i32, ptr %13, align 1, !tbaa !12
  %.fr312 = freeze i32 %.pre313
  %42 = and i32 %.fr312, 3
  %43 = or i32 %41, %42
  %44 = icmp eq i32 %43, 0
  %45 = select i1 %44, i32 54, i32 28
  %46 = load i32, ptr %5, align 1, !tbaa !13
  %47 = load i32, ptr %16, align 1, !tbaa !14
  br label %48

48:                                               ; preds = %30, %.thread, %38, %.thread292
  %.0272 = phi i32 [ %.fr312, %.thread292 ], [ %15, %38 ], [ %28, %30 ], [ %28, %.thread ]
  %.0271 = phi i32 [ %47, %.thread292 ], [ %17, %38 ], [ %32, %30 ], [ %34, %.thread ]
  %.0270 = phi i32 [ %46, %.thread292 ], [ %15, %38 ], [ %28, %30 ], [ %28, %.thread ]
  %.0269 = phi i32 [ %46, %.thread292 ], [ %14, %38 ], [ %31, %30 ], [ %33, %.thread ]
  %.0268 = phi i32 [ %6, %.thread292 ], [ %6, %38 ], [ 0, %30 ], [ 1, %.thread ]
  %.0 = phi i32 [ %45, %.thread292 ], [ 29, %38 ], [ 29, %30 ], [ 29, %.thread ]
  %49 = getelementptr inbounds i8, ptr %2, i64 4
  %50 = load i32, ptr %49, align 4, !tbaa !22
  %51 = getelementptr inbounds i8, ptr %5, i64 33
  %52 = load i64, ptr %51, align 1, !tbaa !24
  %53 = trunc i64 %52 to i32
  tail call void @libxsmm_generator_gemm_apply_ops_input_tensor_and_store_to_stack_aarch64(ptr noundef %0, ptr noundef %1, ptr noundef nonnull %3, ptr noundef nonnull %4, i32 noundef %50, i32 noundef 44, i32 noundef 42, i32 noundef 60, i32 noundef 59, i32 noundef 43, i32 noundef 58, i32 noundef %.0, i32 noundef %.0269, i32 noundef %.0272, i32 noundef %.0271, i32 noundef %.0270, i32 noundef %53, i32 noundef %.0268, i32 noundef %.0268, i32 noundef %.0268, 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_aarch64(ptr noundef %0, i32 noundef 21, i32 noundef 42)
  %54 = load i32, ptr %49, align 4, !tbaa !22
  tail call void @libxsmm_aarch64_instruction_alu_compute_imm12(ptr noundef %0, i32 noundef 285212678, i32 noundef 42, i32 noundef %54, i32 noundef 0, i8 noundef zeroext 0) #3
  %55 = getelementptr inbounds i8, ptr %3, i64 672
  %56 = load i32, ptr %55, align 8, !tbaa !21
  %.not280 = icmp eq i32 %56, 0
  br i1 %.not280, label %57, label %60

57:                                               ; preds = %48
  %58 = getelementptr inbounds i8, ptr %3, i64 676
  %59 = load i32, ptr %58, align 4, !tbaa !19
  %.not281 = icmp eq i32 %59, 0
  br i1 %.not281, label %88, label %60

60:                                               ; preds = %57, %48
  %61 = getelementptr inbounds i8, ptr %2, i64 12
  %62 = load i32, ptr %61, align 4, !tbaa !25
  %63 = getelementptr inbounds i8, ptr %4, i64 4
  %64 = load i32, ptr %63, align 1, !tbaa !26
  %65 = getelementptr inbounds i8, ptr %4, i64 8
  %66 = load i32, ptr %65, align 1, !tbaa !12
  %67 = getelementptr inbounds i8, ptr %5, i64 16
  %68 = load i32, ptr %67, align 1, !tbaa !27
  %69 = getelementptr inbounds i8, ptr %5, i64 41
  %70 = load i64, ptr %69, align 1, !tbaa !28
  %71 = trunc i64 %70 to i32
  tail call void @libxsmm_generator_gemm_apply_ops_input_tensor_and_store_to_stack_aarch64(ptr noundef %0, ptr noundef %1, ptr noundef nonnull %3, ptr noundef nonnull %4, i32 noundef %62, i32 noundef 44, i32 noundef 42, i32 noundef 60, i32 noundef 59, i32 noundef 43, i32 noundef 58, i32 noundef 29, i32 noundef %64, i32 noundef %66, i32 noundef %68, i32 noundef %66, i32 noundef %71, 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_aarch64(ptr noundef %0, i32 noundef 25, i32 noundef 42)
  %72 = load i32, ptr %61, align 4, !tbaa !25
  tail call void @libxsmm_aarch64_instruction_alu_compute_imm12(ptr noundef %0, i32 noundef 285212678, i32 noundef 42, i32 noundef %72, i32 noundef 0, i8 noundef zeroext 0) #3
  %73 = load i32, ptr %65, align 1, !tbaa !12
  %74 = getelementptr inbounds i8, ptr %4, i64 16
  store i32 %73, ptr %74, align 1, !tbaa !27
  switch i32 %6, label %75 [
    i32 0, label %80
    i32 1, label %.fold.split
  ]

75:                                               ; preds = %60
  %76 = and i32 %6, -2
  %switch.tableidx = add i32 %76, -2
  %77 = icmp ult i32 %switch.tableidx, 11
  br i1 %77, label %switch.hole_check, label %78

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

.fold.split:                                      ; preds = %60
  br label %80

switch.hole_check:                                ; preds = %75
  %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 %78

switch.lookup:                                    ; preds = %switch.hole_check
  %79 = 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_aarch64.3, i64 0, i64 %79
  %switch.load = load i64, ptr %switch.gep, align 8
  br label %80

80:                                               ; preds = %switch.lookup, %60, %.fold.split
  %81 = phi i64 [ 8, %60 ], [ 4, %.fold.split ], [ %switch.load, %switch.lookup ]
  %82 = load i32, ptr %63, align 1, !tbaa !26
  %83 = zext i32 %82 to i64
  %84 = zext i32 %73 to i64
  %85 = mul nuw nsw i64 %81, %84
  %86 = mul i64 %85, %83
  %87 = getelementptr inbounds i8, ptr %4, i64 41
  store i64 %86, ptr %87, align 1, !tbaa !28
  br label %108

88:                                               ; preds = %57
  %89 = and i32 %9, 196608
  %or.cond3.not = icmp eq i32 %89, 0
  br i1 %or.cond3.not, label %108, label %90

90:                                               ; preds = %88
  %91 = getelementptr inbounds i8, ptr %5, i64 24
  %92 = load i32, ptr %91, align 1, !tbaa !5
  %93 = and i32 %92, 2
  %94 = getelementptr inbounds i8, ptr %2, i64 12
  %95 = load i32, ptr %94, align 4, !tbaa !25
  %.not283 = icmp eq i32 %93, 0
  %96 = getelementptr inbounds i8, ptr %4, i64 4
  %97 = getelementptr inbounds i8, ptr %4, i64 8
  %.in = select i1 %.not283, ptr %97, ptr %96
  %98 = load i32, ptr %.in, align 1, !tbaa !29
  %.in284 = select i1 %.not283, ptr %96, ptr %97
  %99 = load i32, ptr %.in284, align 1, !tbaa !29
  %100 = getelementptr inbounds i8, ptr %5, i64 16
  %101 = load i32, ptr %100, align 1, !tbaa !27
  %102 = getelementptr inbounds i8, ptr %5, i64 41
  %103 = load i64, ptr %102, align 1, !tbaa !28
  %104 = trunc i64 %103 to i32
  tail call void @libxsmm_generator_gemm_apply_ops_input_tensor_and_store_to_stack_aarch64(ptr noundef %0, ptr noundef %1, ptr noundef nonnull %3, ptr noundef nonnull %4, i32 noundef %95, i32 noundef 44, i32 noundef 42, i32 noundef 60, i32 noundef 59, i32 noundef 43, i32 noundef 58, i32 noundef 1, i32 noundef %98, i32 noundef %99, i32 noundef %101, i32 noundef %98, i32 noundef %104, 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)
  %105 = load i32, ptr %.in, align 1, !tbaa !29
  %106 = getelementptr inbounds i8, ptr %4, i64 16
  store i32 %105, ptr %106, align 1, !tbaa !27
  tail call void @libxsmm_generator_gemm_getval_stack_var_aarch64(ptr noundef %0, i32 noundef 25, i32 noundef 42)
  %107 = load i32, ptr %94, align 4, !tbaa !25
  tail call void @libxsmm_aarch64_instruction_alu_compute_imm12(ptr noundef %0, i32 noundef 285212678, i32 noundef 42, i32 noundef %107, i32 noundef 0, i8 noundef zeroext 0) #3
  br label %108

108:                                              ; preds = %90, %88, %80
  br i1 %spec.select.not, label %167, label %109

109:                                              ; preds = %108
  br i1 %.not282, label %130, label %110

110:                                              ; preds = %109
  %111 = load i32, ptr %8, align 1, !tbaa !5
  %112 = and i32 %111, -262145
  %113 = xor i32 %112, 393216
  store i32 %113, ptr %8, align 1, !tbaa !5
  switch i32 %6, label %114 [
    i32 0, label %119
    i32 1, label %.fold.split287
  ]

114:                                              ; preds = %110
  %115 = and i32 %6, -2
  %switch.tableidx316 = add i32 %115, -2
  %116 = icmp ult i32 %switch.tableidx316, 11
  br i1 %116, label %switch.hole_check317, label %117

117:                                              ; preds = %switch.hole_check317, %114
  tail call void @__assert_fail(ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, i32 noundef 240, ptr noundef nonnull @__PRETTY_FUNCTION__.libxsmm_generator_gemm_setup_A_vnni_or_trans_B_vnni_or_trans_tensor_to_stack_aarch64) #4
  unreachable

.fold.split287:                                   ; preds = %110
  br label %119

switch.hole_check317:                             ; preds = %114
  %switch.maskindex319 = trunc nuw i32 %switch.tableidx316 to i16
  %switch.shifted320 = lshr i16 1365, %switch.maskindex319
  %switch.lobit321 = trunc i16 %switch.shifted320 to i1
  br i1 %switch.lobit321, label %switch.lookup318, label %117

switch.lookup318:                                 ; preds = %switch.hole_check317
  %118 = zext nneg i32 %switch.tableidx316 to i64
  %switch.gep322 = getelementptr inbounds [11 x i64], ptr @switch.table.libxsmm_generator_gemm_setup_A_vnni_or_trans_B_vnni_or_trans_tensor_to_stack_aarch64.3, i64 0, i64 %118
  %switch.load323 = load i64, ptr %switch.gep322, align 8
  br label %119

119:                                              ; preds = %switch.lookup318, %110, %.fold.split287
  %120 = phi i64 [ 8, %110 ], [ 4, %.fold.split287 ], [ %switch.load323, %switch.lookup318 ]
  %121 = getelementptr inbounds i8, ptr %4, i64 4
  %122 = load i32, ptr %121, align 1, !tbaa !26
  %123 = zext i32 %122 to i64
  %124 = mul nuw nsw i64 %120, %123
  %125 = getelementptr inbounds i8, ptr %4, i64 8
  %126 = load i32, ptr %125, align 1, !tbaa !12
  %127 = zext i32 %126 to i64
  %128 = mul nuw nsw i64 %124, %127
  %129 = getelementptr inbounds i8, ptr %4, i64 41
  store i64 %128, ptr %129, align 1, !tbaa !28
  br label %130

130:                                              ; preds = %119, %109
  br i1 %.not311, label %151, label %131

131:                                              ; preds = %130
  %132 = load i32, ptr %8, align 1, !tbaa !5
  %133 = and i32 %132, -262145
  %134 = xor i32 %133, 327680
  store i32 %134, ptr %8, align 1, !tbaa !5
  switch i32 %6, label %135 [
    i32 0, label %140
    i32 1, label %.fold.split288
  ]

135:                                              ; preds = %131
  %136 = and i32 %6, -2
  %switch.tableidx325 = add i32 %136, -2
  %137 = icmp ult i32 %switch.tableidx325, 11
  br i1 %137, label %switch.hole_check326, label %138

138:                                              ; preds = %switch.hole_check326, %135
  tail call void @__assert_fail(ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, i32 noundef 245, ptr noundef nonnull @__PRETTY_FUNCTION__.libxsmm_generator_gemm_setup_A_vnni_or_trans_B_vnni_or_trans_tensor_to_stack_aarch64) #4
  unreachable

.fold.split288:                                   ; preds = %131
  br label %140

switch.hole_check326:                             ; preds = %135
  %switch.maskindex328 = trunc nuw i32 %switch.tableidx325 to i16
  %switch.shifted329 = lshr i16 1365, %switch.maskindex328
  %switch.lobit330 = trunc i16 %switch.shifted329 to i1
  br i1 %switch.lobit330, label %switch.lookup327, label %138

switch.lookup327:                                 ; preds = %switch.hole_check326
  %139 = zext nneg i32 %switch.tableidx325 to i64
  %switch.gep331 = getelementptr inbounds [11 x i64], ptr @switch.table.libxsmm_generator_gemm_setup_A_vnni_or_trans_B_vnni_or_trans_tensor_to_stack_aarch64.3, i64 0, i64 %139
  %switch.load332 = load i64, ptr %switch.gep331, align 8
  br label %140

140:                                              ; preds = %switch.lookup327, %131, %.fold.split288
  %141 = phi i64 [ 8, %131 ], [ 4, %.fold.split288 ], [ %switch.load332, %switch.lookup327 ]
  %142 = getelementptr inbounds i8, ptr %4, i64 4
  %143 = load i32, ptr %142, align 1, !tbaa !26
  %144 = zext i32 %143 to i64
  %145 = mul nuw nsw i64 %141, %144
  %146 = getelementptr inbounds i8, ptr %4, i64 8
  %147 = load i32, ptr %146, align 1, !tbaa !12
  %148 = zext i32 %147 to i64
  %149 = mul nuw nsw i64 %145, %148
  %150 = getelementptr inbounds i8, ptr %4, i64 41
  store i64 %149, ptr %150, align 1, !tbaa !28
  br label %151

151:                                              ; preds = %140, %130
  switch i32 %6, label %152 [
    i32 0, label %157
    i32 1, label %.fold.split289
  ]

152:                                              ; preds = %151
  %153 = and i32 %6, -2
  %switch.tableidx334 = add i32 %153, -2
  %154 = icmp ult i32 %switch.tableidx334, 11
  br i1 %154, label %switch.hole_check335, label %155

155:                                              ; preds = %switch.hole_check335, %152
  tail call void @__assert_fail(ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, i32 noundef 247, ptr noundef nonnull @__PRETTY_FUNCTION__.libxsmm_generator_gemm_setup_A_vnni_or_trans_B_vnni_or_trans_tensor_to_stack_aarch64) #4
  unreachable

.fold.split289:                                   ; preds = %151
  br label %157

switch.hole_check335:                             ; preds = %152
  %switch.maskindex337 = trunc nuw i32 %switch.tableidx334 to i16
  %switch.shifted338 = lshr i16 1365, %switch.maskindex337
  %switch.lobit339 = trunc i16 %switch.shifted338 to i1
  br i1 %switch.lobit339, label %switch.lookup336, label %155

switch.lookup336:                                 ; preds = %switch.hole_check335
  %156 = zext nneg i32 %switch.tableidx334 to i64
  %switch.gep340 = getelementptr inbounds [11 x i64], ptr @switch.table.libxsmm_generator_gemm_setup_A_vnni_or_trans_B_vnni_or_trans_tensor_to_stack_aarch64.3, i64 0, i64 %156
  %switch.load341 = load i64, ptr %switch.gep340, align 8
  br label %157

157:                                              ; preds = %switch.lookup336, %151, %.fold.split289
  %158 = phi i64 [ 8, %151 ], [ 4, %.fold.split289 ], [ %switch.load341, %switch.lookup336 ]
  %159 = load i32, ptr %4, align 1, !tbaa !13
  %160 = zext i32 %159 to i64
  %161 = mul nuw nsw i64 %158, %160
  %162 = getelementptr inbounds i8, ptr %4, i64 8
  %163 = load i32, ptr %162, align 1, !tbaa !12
  %164 = zext i32 %163 to i64
  %165 = mul nuw nsw i64 %161, %164
  %166 = getelementptr inbounds i8, ptr %4, i64 33
  store i64 %165, ptr %166, align 1, !tbaa !24
  br label %167

167:                                              ; preds = %157, %108
  tail call void @libxsmm_aarch64_instruction_restore_regs(ptr noundef %0, i16 noundef zeroext 3599) #3
  ret void
}

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

declare i32 @libxsmm_cpuid_arm_use_bfdot() local_unnamed_addr #1

declare void @libxsmm_aarch64_instruction_restore_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 = !{!6, !7, i64 8}
!13 = !{!6, !7, i64 0}
!14 = !{!6, !7, i64 12}
!15 = !{!16, !7, i64 668}
!16 = !{!"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, !17, 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, !18, i64 592, !7, i64 600, !7, i64 604, !7, i64 608, !7, i64 612, !18, 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}
!17 = !{!"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}
!18 = !{!"any pointer", !8, i64 0}
!19 = !{!16, !7, i64 676}
!20 = !{!16, !7, i64 660}
!21 = !{!16, !7, i64 672}
!22 = !{!23, !7, i64 4}
!23 = !{!"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}
!24 = !{!6, !10, i64 33}
!25 = !{!23, !7, i64 12}
!26 = !{!6, !7, i64 4}
!27 = !{!6, !7, i64 16}
!28 = !{!6, !10, i64 41}
!29 = !{!7, !7, i64 0}


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