; LLVM IR from libxsmm/libxsmm :: src (generator_gemm_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_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_loop_label_tracker_struct = type { [512 x i32], i32 }
%struct.libxsmm_gp_reg_mapping_struct = type { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 }
%struct.libxsmm_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_generated_code = type { ptr, i32, i32, i32, i32, i32, i32 }

@.str = external hidden unnamed_addr constant [78 x i8], align 1
@libxsmm_ninit = external global i32, align 4
@libxsmm_verbosity = external global i32, align 4
@__func__.libxsmm_generator_gemm_aarch64_kernel = external hidden unnamed_addr constant [38 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [18 x i8], align 1
@__PRETTY_FUNCTION__.libxsmm_generator_gemm_aarch64_kernel = external hidden unnamed_addr constant [102 x i8], align 1

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

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

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

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

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

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

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #3

declare i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef) #2

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

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

declare i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef) #2

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

declare i32 @libxsmm_cpuid_arm_use_bfdot() #2

declare i32 @libxsmm_cpuid_arm_use_i8dot() #2

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

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

; Function Attrs: nounwind uwtable
define dso_local void @libxsmm_generator_gemm_aarch64_kernel(ptr noundef %0, ptr noundef %1) #4 {
  %3 = alloca ptr, align 8
  %4 = alloca ptr, align 8
  %5 = alloca %struct.libxsmm_micro_kernel_config, align 8
  %6 = alloca %struct.libxsmm_loop_label_tracker_struct, align 4
  %7 = alloca %struct.libxsmm_gp_reg_mapping_struct, align 4
  %8 = alloca [2 x i32], align 4
  %9 = alloca [2 x i32], align 4
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  %14 = alloca i32, align 4
  %15 = alloca i32, align 4
  %16 = alloca i32, align 4
  %17 = alloca i32, align 4
  %18 = alloca i32, align 4
  %19 = alloca i32, align 4
  %20 = alloca ptr, align 8
  %21 = alloca %struct.libxsmm_gemm_descriptor, align 1
  %22 = alloca i32, align 4
  %23 = alloca i32, align 4
  %24 = alloca i32, align 4
  %25 = alloca i8, align 1
  %26 = alloca i8, align 1
  %27 = alloca i32, align 4
  %28 = alloca i32, align 4
  %29 = alloca i32, align 4
  %30 = alloca i32, align 4
  %31 = alloca i32, align 4
  %32 = alloca i32, align 4
  %33 = alloca i32, align 4
  %34 = alloca i32, align 4
  %35 = alloca i32, align 4
  %36 = alloca i32, align 4
  %37 = alloca i32, align 4
  %38 = alloca i32, align 4
  %39 = alloca i32, align 4
  store ptr %0, ptr %3, align 8, !tbaa !5
  store ptr %1, ptr %4, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 688, ptr %5) #6
  call void @llvm.lifetime.start.p0(i64 2052, ptr %6) #6
  call void @llvm.lifetime.start.p0(i64 132, ptr %7) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #6
  call void @llvm.memset.p0.i64(ptr align 4 %8, i8 0, i64 8, i1 false)
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #6
  call void @llvm.memset.p0.i64(ptr align 4 %9, i8 0, i64 8, i1 false)
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #6
  store i32 0, ptr %10, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #6
  store i32 0, ptr %11, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #6
  store i32 0, ptr %12, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #6
  store i32 1, ptr %13, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #6
  store i32 0, ptr %14, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #6
  %40 = load ptr, ptr %4, align 8, !tbaa !5
  %41 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %40, i32 0, i32 8
  %42 = getelementptr inbounds [3 x i8], ptr %41, i64 0, i64 0
  %43 = call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef %42)
  %44 = icmp eq i32 1, %43
  br i1 %44, label %45, label %51

45:                                               ; preds = %2
  %46 = load ptr, ptr %4, align 8, !tbaa !5
  %47 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %46, i32 0, i32 8
  %48 = getelementptr inbounds [3 x i8], ptr %47, i64 0, i64 0
  %49 = call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef %48)
  %50 = icmp eq i32 12, %49
  br label %51

51:                                               ; preds = %45, %2
  %52 = phi i1 [ false, %2 ], [ %50, %45 ]
  %53 = zext i1 %52 to i64
  %54 = select i1 %52, i32 1, i32 0
  store i32 %54, ptr %15, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #6
  store i32 0, ptr %16, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #6
  store i32 0, ptr %17, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #6
  store i32 0, ptr %18, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #6
  store i32 0, ptr %19, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #6
  call void @llvm.lifetime.start.p0(i64 95, ptr %21) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #6
  %55 = call i32 @libxsmm_cpuid_arm_use_bfdot()
  store i32 %55, ptr %23, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #6
  %56 = call i32 @libxsmm_cpuid_arm_use_i8dot()
  store i32 %56, ptr %24, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 1, ptr %25) #6
  store i8 0, ptr %25, align 1, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 1, ptr %26) #6
  store i8 0, ptr %26, align 1, !tbaa !11
  %57 = load ptr, ptr %4, align 8, !tbaa !5
  %58 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %57, i32 0, i32 8
  %59 = getelementptr inbounds [3 x i8], ptr %58, i64 0, i64 0
  %60 = call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef %59)
  %61 = icmp eq i32 2, %60
  br i1 %61, label %62, label %108

62:                                               ; preds = %51
  %63 = load ptr, ptr %4, align 8, !tbaa !5
  %64 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %63, i32 0, i32 2
  %65 = load i32, ptr %64, align 1, !tbaa !12
  %66 = urem i32 %65, 4
  %67 = icmp ne i32 %66, 0
  br i1 %67, label %68, label %69

68:                                               ; preds = %62
  store i32 1, ptr %23, align 4, !tbaa !9
  br label %69

69:                                               ; preds = %68, %62
  %70 = load i32, ptr %23, align 4, !tbaa !9
  %71 = icmp eq i32 %70, 0
  br i1 %71, label %72, label %73

72:                                               ; preds = %69
  store i8 1, ptr %25, align 1, !tbaa !11
  br label %74

73:                                               ; preds = %69
  store i8 0, ptr %25, align 1, !tbaa !11
  br label %74

74:                                               ; preds = %73, %72
  %75 = load i8, ptr %25, align 1, !tbaa !11
  %76 = sext i8 %75 to i32
  %77 = icmp eq i32 %76, 0
  %78 = zext i1 %77 to i64
  %79 = select i1 %77, i32 2, i32 4
  store i32 %79, ptr %13, align 4, !tbaa !9
  %80 = load i32, ptr %23, align 4, !tbaa !9
  %81 = icmp ne i32 %80, 0
  br i1 %81, label %82, label %107

82:                                               ; preds = %74
  %83 = load ptr, ptr %4, align 8, !tbaa !5
  %84 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %83, i32 0, i32 6
  %85 = load i32, ptr %84, align 1, !tbaa !16
  %86 = and i32 %85, 1
  %87 = icmp eq i32 %86, 0
  br i1 %87, label %88, label %107

88:                                               ; preds = %82
  %89 = load ptr, ptr %4, align 8, !tbaa !5
  %90 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %89, i32 0, i32 6
  %91 = load i32, ptr %90, align 1, !tbaa !16
  %92 = and i32 %91, 2048
  %93 = icmp eq i32 %92, 0
  br i1 %93, label %94, label %107

94:                                               ; preds = %88
  %95 = load ptr, ptr %4, align 8, !tbaa !5
  %96 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %95, i32 0, i32 6
  %97 = load i32, ptr %96, align 1, !tbaa !16
  %98 = and i32 %97, 2
  %99 = icmp eq i32 %98, 0
  br i1 %99, label %100, label %107

100:                                              ; preds = %94
  %101 = load ptr, ptr %4, align 8, !tbaa !5
  %102 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %101, i32 0, i32 6
  %103 = load i32, ptr %102, align 1, !tbaa !16
  %104 = and i32 %103, 4096
  %105 = icmp eq i32 %104, 0
  br i1 %105, label %106, label %107

106:                                              ; preds = %100
  store i32 1, ptr %13, align 4, !tbaa !9
  br label %107

107:                                              ; preds = %106, %100, %94, %88, %82, %74
  br label %108

108:                                              ; preds = %107, %51
  %109 = load ptr, ptr %4, align 8, !tbaa !5
  %110 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %109, i32 0, i32 8
  %111 = getelementptr inbounds [3 x i8], ptr %110, i64 0, i64 0
  %112 = call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef %111)
  %113 = icmp eq i32 12, %112
  br i1 %113, label %114, label %125

114:                                              ; preds = %108
  %115 = load i32, ptr %24, align 4, !tbaa !9
  %116 = icmp eq i32 %115, 0
  br i1 %116, label %117, label %118

117:                                              ; preds = %114
  store i8 1, ptr %25, align 1, !tbaa !11
  br label %119

118:                                              ; preds = %114
  store i8 0, ptr %25, align 1, !tbaa !11
  br label %119

119:                                              ; preds = %118, %117
  %120 = load i8, ptr %25, align 1, !tbaa !11
  %121 = sext i8 %120 to i32
  %122 = icmp eq i32 %121, 0
  %123 = zext i1 %122 to i64
  %124 = select i1 %122, i32 4, i32 8
  store i32 %124, ptr %13, align 4, !tbaa !9
  br label %125

125:                                              ; preds = %119, %108
  %126 = load ptr, ptr %4, align 8, !tbaa !5
  %127 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %126, i32 0, i32 6
  %128 = load i32, ptr %127, align 1, !tbaa !16
  %129 = and i32 %128, 1
  %130 = icmp eq i32 %129, 0
  br i1 %130, label %131, label %165

131:                                              ; preds = %125
  %132 = load ptr, ptr %4, align 8, !tbaa !5
  %133 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %132, i32 0, i32 6
  %134 = load i32, ptr %133, align 1, !tbaa !16
  %135 = and i32 %134, 2048
  %136 = icmp eq i32 %135, 0
  br i1 %136, label %137, label %165

137:                                              ; preds = %131
  %138 = load ptr, ptr %4, align 8, !tbaa !5
  %139 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %138, i32 0, i32 6
  %140 = load i32, ptr %139, align 1, !tbaa !16
  %141 = and i32 %140, 2
  %142 = icmp eq i32 %141, 0
  br i1 %142, label %143, label %165

143:                                              ; preds = %137
  %144 = load ptr, ptr %4, align 8, !tbaa !5
  %145 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %144, i32 0, i32 6
  %146 = load i32, ptr %145, align 1, !tbaa !16
  %147 = and i32 %146, 4096
  %148 = icmp eq i32 %147, 0
  br i1 %148, label %149, label %165

149:                                              ; preds = %143
  %150 = load ptr, ptr %4, align 8, !tbaa !5
  %151 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %150, i32 0, i32 2
  %152 = load i32, ptr %151, align 1, !tbaa !12
  %153 = load i32, ptr %13, align 4, !tbaa !9
  %154 = urem i32 %152, %153
  %155 = icmp eq i32 %154, 0
  br i1 %155, label %156, label %165

156:                                              ; preds = %149
  %157 = load i32, ptr %23, align 4, !tbaa !9
  %158 = icmp eq i32 %157, 0
  br i1 %158, label %159, label %165

159:                                              ; preds = %156
  %160 = load ptr, ptr %4, align 8, !tbaa !5
  %161 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %160, i32 0, i32 8
  %162 = getelementptr inbounds [3 x i8], ptr %161, i64 0, i64 0
  %163 = call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef %162)
  %164 = icmp eq i32 2, %163
  br label %165

165:                                              ; preds = %159, %156, %149, %143, %137, %131, %125
  %166 = phi i1 [ false, %156 ], [ false, %149 ], [ false, %143 ], [ false, %137 ], [ false, %131 ], [ false, %125 ], [ %164, %159 ]
  %167 = zext i1 %166 to i32
  store i32 %167, ptr %16, align 4, !tbaa !9
  %168 = load ptr, ptr %4, align 8, !tbaa !5
  %169 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %168, i32 0, i32 6
  %170 = load i32, ptr %169, align 1, !tbaa !16
  %171 = and i32 %170, 1
  %172 = icmp ne i32 %171, 0
  br i1 %172, label %173, label %204

173:                                              ; preds = %165
  %174 = load ptr, ptr %4, align 8, !tbaa !5
  %175 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %174, i32 0, i32 6
  %176 = load i32, ptr %175, align 1, !tbaa !16
  %177 = and i32 %176, 2048
  %178 = icmp eq i32 %177, 0
  br i1 %178, label %179, label %204

179:                                              ; preds = %173
  %180 = load ptr, ptr %4, align 8, !tbaa !5
  %181 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %180, i32 0, i32 6
  %182 = load i32, ptr %181, align 1, !tbaa !16
  %183 = and i32 %182, 2
  %184 = icmp eq i32 %183, 0
  br i1 %184, label %185, label %204

185:                                              ; preds = %179
  %186 = load ptr, ptr %4, align 8, !tbaa !5
  %187 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %186, i32 0, i32 6
  %188 = load i32, ptr %187, align 1, !tbaa !16
  %189 = and i32 %188, 4096
  %190 = icmp eq i32 %189, 0
  br i1 %190, label %191, label %204

191:                                              ; preds = %185
  %192 = load ptr, ptr %4, align 8, !tbaa !5
  %193 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %192, i32 0, i32 2
  %194 = load i32, ptr %193, align 1, !tbaa !12
  %195 = load i32, ptr %13, align 4, !tbaa !9
  %196 = urem i32 %194, %195
  %197 = icmp eq i32 %196, 0
  br i1 %197, label %198, label %204

198:                                              ; preds = %191
  %199 = load ptr, ptr %4, align 8, !tbaa !5
  %200 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %199, i32 0, i32 8
  %201 = getelementptr inbounds [3 x i8], ptr %200, i64 0, i64 0
  %202 = call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef %201)
  %203 = icmp eq i32 2, %202
  br label %204

204:                                              ; preds = %198, %191, %185, %179, %173, %165
  %205 = phi i1 [ false, %191 ], [ false, %185 ], [ false, %179 ], [ false, %173 ], [ false, %165 ], [ %203, %198 ]
  %206 = zext i1 %205 to i32
  store i32 %206, ptr %17, align 4, !tbaa !9
  %207 = load ptr, ptr %4, align 8, !tbaa !5
  %208 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %207, i32 0, i32 6
  %209 = load i32, ptr %208, align 1, !tbaa !16
  %210 = and i32 %209, 1
  %211 = icmp eq i32 %210, 0
  br i1 %211, label %212, label %243

212:                                              ; preds = %204
  %213 = load ptr, ptr %4, align 8, !tbaa !5
  %214 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %213, i32 0, i32 6
  %215 = load i32, ptr %214, align 1, !tbaa !16
  %216 = and i32 %215, 2048
  %217 = icmp eq i32 %216, 0
  br i1 %217, label %218, label %243

218:                                              ; preds = %212
  %219 = load ptr, ptr %4, align 8, !tbaa !5
  %220 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %219, i32 0, i32 6
  %221 = load i32, ptr %220, align 1, !tbaa !16
  %222 = and i32 %221, 2
  %223 = icmp ne i32 %222, 0
  br i1 %223, label %224, label %243

224:                                              ; preds = %218
  %225 = load ptr, ptr %4, align 8, !tbaa !5
  %226 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %225, i32 0, i32 6
  %227 = load i32, ptr %226, align 1, !tbaa !16
  %228 = and i32 %227, 4096
  %229 = icmp eq i32 %228, 0
  br i1 %229, label %230, label %243

230:                                              ; preds = %224
  %231 = load ptr, ptr %4, align 8, !tbaa !5
  %232 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %231, i32 0, i32 2
  %233 = load i32, ptr %232, align 1, !tbaa !12
  %234 = load i32, ptr %13, align 4, !tbaa !9
  %235 = urem i32 %233, %234
  %236 = icmp eq i32 %235, 0
  br i1 %236, label %237, label %243

237:                                              ; preds = %230
  %238 = load ptr, ptr %4, align 8, !tbaa !5
  %239 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %238, i32 0, i32 8
  %240 = getelementptr inbounds [3 x i8], ptr %239, i64 0, i64 0
  %241 = call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef %240)
  %242 = icmp eq i32 2, %241
  br label %243

243:                                              ; preds = %237, %230, %224, %218, %212, %204
  %244 = phi i1 [ false, %230 ], [ false, %224 ], [ false, %218 ], [ false, %212 ], [ false, %204 ], [ %242, %237 ]
  %245 = zext i1 %244 to i32
  store i32 %245, ptr %18, align 4, !tbaa !9
  %246 = load ptr, ptr %4, align 8, !tbaa !5
  %247 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %246, i32 0, i32 6
  %248 = load i32, ptr %247, align 1, !tbaa !16
  %249 = and i32 %248, 1
  %250 = icmp ne i32 %249, 0
  br i1 %250, label %251, label %282

251:                                              ; preds = %243
  %252 = load ptr, ptr %4, align 8, !tbaa !5
  %253 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %252, i32 0, i32 6
  %254 = load i32, ptr %253, align 1, !tbaa !16
  %255 = and i32 %254, 2048
  %256 = icmp eq i32 %255, 0
  br i1 %256, label %257, label %282

257:                                              ; preds = %251
  %258 = load ptr, ptr %4, align 8, !tbaa !5
  %259 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %258, i32 0, i32 6
  %260 = load i32, ptr %259, align 1, !tbaa !16
  %261 = and i32 %260, 2
  %262 = icmp ne i32 %261, 0
  br i1 %262, label %263, label %282

263:                                              ; preds = %257
  %264 = load ptr, ptr %4, align 8, !tbaa !5
  %265 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %264, i32 0, i32 6
  %266 = load i32, ptr %265, align 1, !tbaa !16
  %267 = and i32 %266, 4096
  %268 = icmp eq i32 %267, 0
  br i1 %268, label %269, label %282

269:                                              ; preds = %263
  %270 = load ptr, ptr %4, align 8, !tbaa !5
  %271 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %270, i32 0, i32 2
  %272 = load i32, ptr %271, align 1, !tbaa !12
  %273 = load i32, ptr %13, align 4, !tbaa !9
  %274 = urem i32 %272, %273
  %275 = icmp eq i32 %274, 0
  br i1 %275, label %276, label %282

276:                                              ; preds = %269
  %277 = load ptr, ptr %4, align 8, !tbaa !5
  %278 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %277, i32 0, i32 8
  %279 = getelementptr inbounds [3 x i8], ptr %278, i64 0, i64 0
  %280 = call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef %279)
  %281 = icmp eq i32 2, %280
  br label %282

282:                                              ; preds = %276, %269, %263, %257, %251, %243
  %283 = phi i1 [ false, %269 ], [ false, %263 ], [ false, %257 ], [ false, %251 ], [ false, %243 ], [ %281, %276 ]
  %284 = zext i1 %283 to i32
  store i32 %284, ptr %19, align 4, !tbaa !9
  call void @libxsmm_reset_aarch64_gp_reg_mapping(ptr noundef %7)
  %285 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 0
  store i32 32, ptr %285, align 4, !tbaa !17
  %286 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 1
  store i32 32, ptr %286, align 4, !tbaa !19
  %287 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 3
  store i32 33, ptr %287, align 4, !tbaa !20
  %288 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 5
  store i32 34, ptr %288, align 4, !tbaa !21
  %289 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 6
  store i32 35, ptr %289, align 4, !tbaa !22
  %290 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 8
  store i32 36, ptr %290, align 4, !tbaa !23
  %291 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 10
  store i32 38, ptr %291, align 4, !tbaa !24
  %292 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 11
  store i32 39, ptr %292, align 4, !tbaa !25
  %293 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 12
  store i32 40, ptr %293, align 4, !tbaa !26
  %294 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 22
  store i32 41, ptr %294, align 4, !tbaa !27
  %295 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 23
  store i32 42, ptr %295, align 4, !tbaa !28
  %296 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 24
  store i32 43, ptr %296, align 4, !tbaa !29
  %297 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 20
  store i32 45, ptr %297, align 4, !tbaa !30
  %298 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 13
  store i32 35, ptr %298, align 4, !tbaa !31
  %299 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 7
  store i32 36, ptr %299, align 4, !tbaa !32
  %300 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 9
  store i32 37, ptr %300, align 4, !tbaa !33
  %301 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 25
  store i32 59, ptr %301, align 4, !tbaa !34
  %302 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 26
  store i32 60, ptr %302, align 4, !tbaa !35
  %303 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 27
  store i32 58, ptr %303, align 4, !tbaa !36
  %304 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 14
  store i32 62, ptr %304, align 4, !tbaa !37
  call void @libxsmm_reset_loop_label_tracker(ptr noundef %6)
  %305 = load ptr, ptr %3, align 8, !tbaa !5
  %306 = load ptr, ptr %4, align 8, !tbaa !5
  %307 = load ptr, ptr %3, align 8, !tbaa !5
  %308 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %307, i32 0, i32 6
  %309 = load i32, ptr %308, align 4, !tbaa !38
  %310 = getelementptr inbounds [2 x i32], ptr %9, i64 0, i64 0
  %311 = getelementptr inbounds [2 x i32], ptr %8, i64 0, i64 0
  call void @libxsmm_generator_gemm_aarch64_setup_n_blocking(ptr noundef %305, ptr noundef %5, ptr noundef %306, i32 noundef %309, ptr noundef %310, ptr noundef %311)
  %312 = getelementptr inbounds [2 x i32], ptr %9, i64 0, i64 0
  %313 = load i32, ptr %312, align 4, !tbaa !9
  %314 = icmp eq i32 %313, 0
  br i1 %314, label %315, label %324

315:                                              ; preds = %282
  %316 = load ptr, ptr %3, align 8, !tbaa !5
  %317 = load i32, ptr @libxsmm_ninit, align 4, !tbaa !9
  %318 = icmp ult i32 1, %317
  br i1 %318, label %319, label %321

319:                                              ; preds = %315
  %320 = load i32, ptr @libxsmm_verbosity, align 4, !tbaa !9
  br label %322

321:                                              ; preds = %315
  br label %322

322:                                              ; preds = %321, %319
  %323 = phi i32 [ %320, %319 ], [ 1, %321 ]
  call void @libxsmm_handle_error(ptr noundef %316, i32 noundef 90016, ptr noundef @__func__.libxsmm_generator_gemm_aarch64_kernel, ptr noundef @.str, i32 noundef 1683, i32 noundef %323)
  store i32 1, ptr %27, align 4
  br label %2098

324:                                              ; preds = %282
  %325 = load ptr, ptr %3, align 8, !tbaa !5
  call void @libxsmm_aarch64_instruction_open_stream(ptr noundef %325, i16 noundef zeroext 3599)
  %326 = load ptr, ptr %4, align 8, !tbaa !5
  %327 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %326, i32 0, i32 6
  %328 = load i32, ptr %327, align 1, !tbaa !16
  %329 = and i32 64, %328
  %330 = icmp eq i32 %329, 0
  br i1 %330, label %331, label %337

331:                                              ; preds = %324
  %332 = load ptr, ptr %4, align 8, !tbaa !5
  %333 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %332, i32 0, i32 6
  %334 = load i32, ptr %333, align 1, !tbaa !16
  %335 = and i32 128, %334
  %336 = icmp eq i32 %335, 0
  br i1 %336, label %351, label %337

337:                                              ; preds = %331, %324
  %338 = load ptr, ptr %4, align 8, !tbaa !5
  %339 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %338, i32 0, i32 6
  %340 = load i32, ptr %339, align 1, !tbaa !16
  %341 = and i32 64, %340
  %342 = icmp ne i32 %341, 0
  br i1 %342, label %343, label %349

343:                                              ; preds = %337
  %344 = load ptr, ptr %4, align 8, !tbaa !5
  %345 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %344, i32 0, i32 6
  %346 = load i32, ptr %345, align 1, !tbaa !16
  %347 = and i32 128, %346
  %348 = icmp ne i32 %347, 0
  br i1 %348, label %351, label %349

349:                                              ; preds = %343, %337
  %350 = load ptr, ptr %3, align 8, !tbaa !5
  call void @libxsmm_aarch64_instruction_close_stream(ptr noundef %350, i16 noundef zeroext 3599)
  store i32 1, ptr %27, align 4
  br label %2098

351:                                              ; preds = %343, %331
  %352 = load ptr, ptr %4, align 8, !tbaa !5
  %353 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %352, i32 0, i32 0
  %354 = load i32, ptr %353, align 1, !tbaa !40
  store i32 %354, ptr %22, align 4, !tbaa !9
  %355 = load ptr, ptr %4, align 8, !tbaa !5
  %356 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %355, i32 0, i32 6
  %357 = load i32, ptr %356, align 1, !tbaa !16
  %358 = and i32 %357, 1
  %359 = icmp ne i32 %358, 0
  br i1 %359, label %360, label %400

360:                                              ; preds = %351
  %361 = load ptr, ptr %4, align 8, !tbaa !5
  %362 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %361, i32 0, i32 8
  %363 = getelementptr inbounds [3 x i8], ptr %362, i64 0, i64 0
  %364 = call i32 @LIBXSMM_GEMM_GETENUM_ABC_COMMON_PREC(ptr noundef %363)
  %365 = icmp eq i32 1, %364
  br i1 %365, label %372, label %366

366:                                              ; preds = %360
  %367 = load ptr, ptr %4, align 8, !tbaa !5
  %368 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %367, i32 0, i32 8
  %369 = getelementptr inbounds [3 x i8], ptr %368, i64 0, i64 0
  %370 = call i32 @LIBXSMM_GEMM_GETENUM_ABC_COMMON_PREC(ptr noundef %369)
  %371 = icmp eq i32 0, %370
  br i1 %371, label %372, label %381

372:                                              ; preds = %366, %360
  %373 = load ptr, ptr %4, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %21, ptr align 1 %373, i64 95, i1 false), !tbaa.struct !41
  %374 = load i32, ptr %22, align 4, !tbaa !9
  %375 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %21, i32 0, i32 3
  store i32 %374, ptr %375, align 1, !tbaa !44
  %376 = load ptr, ptr %4, align 8, !tbaa !5
  %377 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %376, i32 0, i32 6
  %378 = load i32, ptr %377, align 1, !tbaa !16
  %379 = and i32 %378, -2
  %380 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %21, i32 0, i32 6
  store i32 %379, ptr %380, align 1, !tbaa !16
  store ptr %21, ptr %20, align 8, !tbaa !5
  br label %399

381:                                              ; preds = %366
  %382 = load i32, ptr %17, align 4, !tbaa !9
  %383 = icmp ne i32 %382, 0
  br i1 %383, label %387, label %384

384:                                              ; preds = %381
  %385 = load i32, ptr %19, align 4, !tbaa !9
  %386 = icmp ne i32 %385, 0
  br i1 %386, label %387, label %389

387:                                              ; preds = %384, %381
  %388 = load ptr, ptr %4, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %21, ptr align 1 %388, i64 95, i1 false), !tbaa.struct !41
  store ptr %21, ptr %20, align 8, !tbaa !5
  br label %398

389:                                              ; preds = %384
  %390 = load ptr, ptr %3, align 8, !tbaa !5
  %391 = load i32, ptr @libxsmm_ninit, align 4, !tbaa !9
  %392 = icmp ult i32 1, %391
  br i1 %392, label %393, label %395

393:                                              ; preds = %389
  %394 = load i32, ptr @libxsmm_verbosity, align 4, !tbaa !9
  br label %396

395:                                              ; preds = %389
  br label %396

396:                                              ; preds = %395, %393
  %397 = phi i32 [ %394, %393 ], [ 1, %395 ]
  call void @libxsmm_handle_error(ptr noundef %390, i32 noundef 90033, ptr noundef @__func__.libxsmm_generator_gemm_aarch64_kernel, ptr noundef @.str, i32 noundef 1710, i32 noundef %397)
  store i32 1, ptr %27, align 4
  br label %2098

398:                                              ; preds = %387
  br label %399

399:                                              ; preds = %398, %372
  br label %402

400:                                              ; preds = %351
  %401 = load ptr, ptr %4, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %21, ptr align 1 %401, i64 95, i1 false), !tbaa.struct !41
  store ptr %21, ptr %20, align 8, !tbaa !5
  br label %402

402:                                              ; preds = %400, %399
  %403 = load i32, ptr %16, align 4, !tbaa !9
  %404 = icmp ne i32 %403, 0
  br i1 %404, label %414, label %405

405:                                              ; preds = %402
  %406 = load i32, ptr %17, align 4, !tbaa !9
  %407 = icmp ne i32 %406, 0
  br i1 %407, label %414, label %408

408:                                              ; preds = %405
  %409 = load i32, ptr %18, align 4, !tbaa !9
  %410 = icmp ne i32 %409, 0
  br i1 %410, label %414, label %411

411:                                              ; preds = %408
  %412 = load i32, ptr %19, align 4, !tbaa !9
  %413 = icmp ne i32 %412, 0
  br i1 %413, label %414, label %419

414:                                              ; preds = %411, %408, %405, %402
  %415 = load ptr, ptr %20, align 8, !tbaa !5
  %416 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %415, i32 0, i32 6
  %417 = load i32, ptr %416, align 1, !tbaa !16
  %418 = or i32 %417, 2048
  store i32 %418, ptr %416, align 1, !tbaa !16
  br label %419

419:                                              ; preds = %414, %411
  %420 = load i32, ptr %17, align 4, !tbaa !9
  %421 = icmp ne i32 %420, 0
  br i1 %421, label %425, label %422

422:                                              ; preds = %419
  %423 = load i32, ptr %19, align 4, !tbaa !9
  %424 = icmp ne i32 %423, 0
  br i1 %424, label %425, label %448

425:                                              ; preds = %422, %419
  %426 = load ptr, ptr %20, align 8, !tbaa !5
  %427 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %426, i32 0, i32 6
  %428 = load i32, ptr %427, align 1, !tbaa !16
  %429 = and i32 %428, -2
  %430 = load ptr, ptr %20, align 8, !tbaa !5
  %431 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %430, i32 0, i32 6
  store i32 %429, ptr %431, align 1, !tbaa !16
  %432 = load ptr, ptr %20, align 8, !tbaa !5
  %433 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %432, i32 0, i32 3
  %434 = load i32, ptr %433, align 1, !tbaa !44
  %435 = load i32, ptr %13, align 4, !tbaa !9
  %436 = urem i32 %434, %435
  %437 = icmp ne i32 %436, 0
  br i1 %437, label %438, label %447

438:                                              ; preds = %425
  %439 = load ptr, ptr %3, align 8, !tbaa !5
  %440 = load i32, ptr @libxsmm_ninit, align 4, !tbaa !9
  %441 = icmp ult i32 1, %440
  br i1 %441, label %442, label %444

442:                                              ; preds = %438
  %443 = load i32, ptr @libxsmm_verbosity, align 4, !tbaa !9
  br label %445

444:                                              ; preds = %438
  br label %445

445:                                              ; preds = %444, %442
  %446 = phi i32 [ %443, %442 ], [ 1, %444 ]
  call void @libxsmm_handle_error(ptr noundef %439, i32 noundef 90041, ptr noundef @__func__.libxsmm_generator_gemm_aarch64_kernel, ptr noundef @.str, i32 noundef 1725, i32 noundef %446)
  store i32 1, ptr %27, align 4
  br label %2098

447:                                              ; preds = %425
  br label %448

448:                                              ; preds = %447, %422
  %449 = load i32, ptr %18, align 4, !tbaa !9
  %450 = icmp ne i32 %449, 0
  br i1 %450, label %454, label %451

451:                                              ; preds = %448
  %452 = load i32, ptr %19, align 4, !tbaa !9
  %453 = icmp ne i32 %452, 0
  br i1 %453, label %454, label %461

454:                                              ; preds = %451, %448
  %455 = load ptr, ptr %20, align 8, !tbaa !5
  %456 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %455, i32 0, i32 6
  %457 = load i32, ptr %456, align 1, !tbaa !16
  %458 = and i32 %457, -3
  %459 = load ptr, ptr %20, align 8, !tbaa !5
  %460 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %459, i32 0, i32 6
  store i32 %458, ptr %460, align 1, !tbaa !16
  br label %461

461:                                              ; preds = %454, %451
  %462 = load i32, ptr %16, align 4, !tbaa !9
  %463 = icmp ne i32 %462, 0
  br i1 %463, label %464, label %471

464:                                              ; preds = %461
  %465 = load ptr, ptr %4, align 8, !tbaa !5
  %466 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %465, i32 0, i32 0
  %467 = load i32, ptr %466, align 1, !tbaa !40
  %468 = load ptr, ptr %20, align 8, !tbaa !5
  %469 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %468, i32 0, i32 3
  store i32 %467, ptr %469, align 1, !tbaa !44
  %470 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %5, i32 0, i32 123
  store i32 1, ptr %470, align 4, !tbaa !45
  br label %471

471:                                              ; preds = %464, %461
  %472 = load i32, ptr %17, align 4, !tbaa !9
  %473 = icmp ne i32 %472, 0
  br i1 %473, label %474, label %481

474:                                              ; preds = %471
  %475 = load ptr, ptr %4, align 8, !tbaa !5
  %476 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %475, i32 0, i32 0
  %477 = load i32, ptr %476, align 1, !tbaa !40
  %478 = load ptr, ptr %20, align 8, !tbaa !5
  %479 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %478, i32 0, i32 3
  store i32 %477, ptr %479, align 1, !tbaa !44
  %480 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %5, i32 0, i32 125
  store i32 1, ptr %480, align 4, !tbaa !48
  br label %481

481:                                              ; preds = %474, %471
  %482 = load i32, ptr %18, align 4, !tbaa !9
  %483 = icmp ne i32 %482, 0
  br i1 %483, label %484, label %496

484:                                              ; preds = %481
  %485 = load ptr, ptr %4, align 8, !tbaa !5
  %486 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %485, i32 0, i32 0
  %487 = load i32, ptr %486, align 1, !tbaa !40
  %488 = load ptr, ptr %20, align 8, !tbaa !5
  %489 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %488, i32 0, i32 3
  store i32 %487, ptr %489, align 1, !tbaa !44
  %490 = load ptr, ptr %4, align 8, !tbaa !5
  %491 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %490, i32 0, i32 2
  %492 = load i32, ptr %491, align 1, !tbaa !12
  %493 = load ptr, ptr %20, align 8, !tbaa !5
  %494 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %493, i32 0, i32 4
  store i32 %492, ptr %494, align 1, !tbaa !49
  %495 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %5, i32 0, i32 126
  store i32 1, ptr %495, align 8, !tbaa !50
  br label %496

496:                                              ; preds = %484, %481
  %497 = load i32, ptr %19, align 4, !tbaa !9
  %498 = icmp ne i32 %497, 0
  br i1 %498, label %499, label %511

499:                                              ; preds = %496
  %500 = load ptr, ptr %4, align 8, !tbaa !5
  %501 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %500, i32 0, i32 0
  %502 = load i32, ptr %501, align 1, !tbaa !40
  %503 = load ptr, ptr %20, align 8, !tbaa !5
  %504 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %503, i32 0, i32 3
  store i32 %502, ptr %504, align 1, !tbaa !44
  %505 = load ptr, ptr %4, align 8, !tbaa !5
  %506 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %505, i32 0, i32 2
  %507 = load i32, ptr %506, align 1, !tbaa !12
  %508 = load ptr, ptr %20, align 8, !tbaa !5
  %509 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %508, i32 0, i32 4
  store i32 %507, ptr %509, align 1, !tbaa !49
  %510 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %5, i32 0, i32 127
  store i32 1, ptr %510, align 4, !tbaa !51
  br label %511

511:                                              ; preds = %499, %496
  %512 = load ptr, ptr %20, align 8, !tbaa !5
  %513 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %512, i32 0, i32 6
  %514 = load i32, ptr %513, align 1, !tbaa !16
  %515 = and i32 16384, %514
  %516 = icmp eq i32 %515, 16384
  br i1 %516, label %523, label %517

517:                                              ; preds = %511
  %518 = load ptr, ptr %20, align 8, !tbaa !5
  %519 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %518, i32 0, i32 6
  %520 = load i32, ptr %519, align 1, !tbaa !16
  %521 = and i32 32768, %520
  %522 = icmp eq i32 %521, 32768
  br i1 %522, label %523, label %626

523:                                              ; preds = %517, %511
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #6
  store i32 32, ptr %28, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #6
  store i32 80, ptr %29, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #6
  store i32 128, ptr %30, align 4, !tbaa !9
  %524 = load ptr, ptr %3, align 8, !tbaa !5
  %525 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 0
  %526 = load i32, ptr %525, align 4, !tbaa !17
  %527 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 0
  %528 = load i32, ptr %527, align 4, !tbaa !17
  %529 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 23
  %530 = load i32, ptr %529, align 4, !tbaa !28
  call void @libxsmm_aarch64_instruction_alu_compute_shifted_reg(ptr noundef %524, i32 noundef 167772167, i32 noundef %526, i32 noundef %528, i32 noundef %530, i32 noundef 0, i32 noundef 0)
  %531 = load ptr, ptr %3, align 8, !tbaa !5
  %532 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 23
  %533 = load i32, ptr %532, align 4, !tbaa !28
  %534 = load i32, ptr %28, align 4, !tbaa !9
  %535 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 1
  %536 = load i32, ptr %535, align 4, !tbaa !19
  call void @libxsmm_aarch64_instruction_alu_move(ptr noundef %531, i32 noundef -1186988026, i32 noundef %533, i32 noundef 127, i32 noundef %534, i32 noundef %536)
  %537 = load ptr, ptr %3, align 8, !tbaa !5
  %538 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 23
  %539 = load i32, ptr %538, align 4, !tbaa !28
  %540 = load i32, ptr %29, align 4, !tbaa !9
  %541 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 3
  %542 = load i32, ptr %541, align 4, !tbaa !20
  call void @libxsmm_aarch64_instruction_alu_move(ptr noundef %537, i32 noundef -1186988026, i32 noundef %539, i32 noundef 127, i32 noundef %540, i32 noundef %542)
  %543 = load ptr, ptr %3, align 8, !tbaa !5
  %544 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 23
  %545 = load i32, ptr %544, align 4, !tbaa !28
  %546 = load i32, ptr %30, align 4, !tbaa !9
  %547 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 5
  %548 = load i32, ptr %547, align 4, !tbaa !21
  call void @libxsmm_aarch64_instruction_alu_move(ptr noundef %543, i32 noundef -1186988026, i32 noundef %545, i32 noundef 127, i32 noundef %546, i32 noundef %548)
  %549 = load i32, ptr %15, align 4, !tbaa !9
  %550 = icmp ugt i32 %549, 0
  br i1 %550, label %551, label %559

551:                                              ; preds = %523
  %552 = load ptr, ptr %3, align 8, !tbaa !5
  %553 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 23
  %554 = load i32, ptr %553, align 4, !tbaa !28
  %555 = load i32, ptr %30, align 4, !tbaa !9
  %556 = add nsw i32 %555, 16
  %557 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 20
  %558 = load i32, ptr %557, align 4, !tbaa !30
  call void @libxsmm_aarch64_instruction_alu_move(ptr noundef %552, i32 noundef -1186988026, i32 noundef %554, i32 noundef 127, i32 noundef %556, i32 noundef %558)
  br label %559

559:                                              ; preds = %551, %523
  %560 = load ptr, ptr %20, align 8, !tbaa !5
  %561 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %560, i32 0, i32 7
  %562 = load i8, ptr %561, align 1, !tbaa !52
  %563 = zext i8 %562 to i32
  %564 = icmp ne i32 %563, 0
  br i1 %564, label %565, label %580

565:                                              ; preds = %559
  %566 = load ptr, ptr %3, align 8, !tbaa !5
  %567 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 23
  %568 = load i32, ptr %567, align 4, !tbaa !28
  %569 = load i32, ptr %28, align 4, !tbaa !9
  %570 = add nsw i32 %569, 40
  %571 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 6
  %572 = load i32, ptr %571, align 4, !tbaa !22
  call void @libxsmm_aarch64_instruction_alu_move(ptr noundef %566, i32 noundef -1186988026, i32 noundef %568, i32 noundef 127, i32 noundef %570, i32 noundef %572)
  %573 = load ptr, ptr %3, align 8, !tbaa !5
  %574 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 23
  %575 = load i32, ptr %574, align 4, !tbaa !28
  %576 = load i32, ptr %29, align 4, !tbaa !9
  %577 = add nsw i32 %576, 40
  %578 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 8
  %579 = load i32, ptr %578, align 4, !tbaa !23
  call void @libxsmm_aarch64_instruction_alu_move(ptr noundef %573, i32 noundef -1186988026, i32 noundef %575, i32 noundef 127, i32 noundef %577, i32 noundef %579)
  br label %580

580:                                              ; preds = %565, %559
  %581 = load ptr, ptr %20, align 8, !tbaa !5
  %582 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %581, i32 0, i32 6
  %583 = load i32, ptr %582, align 1, !tbaa !16
  %584 = and i32 %583, 65536
  %585 = icmp ne i32 %584, 0
  br i1 %585, label %598, label %586

586:                                              ; preds = %580
  %587 = load ptr, ptr %20, align 8, !tbaa !5
  %588 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %587, i32 0, i32 6
  %589 = load i32, ptr %588, align 1, !tbaa !16
  %590 = and i32 %589, 262144
  %591 = icmp ne i32 %590, 0
  br i1 %591, label %598, label %592

592:                                              ; preds = %586
  %593 = load ptr, ptr %20, align 8, !tbaa !5
  %594 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %593, i32 0, i32 6
  %595 = load i32, ptr %594, align 1, !tbaa !16
  %596 = and i32 %595, 131072
  %597 = icmp ne i32 %596, 0
  br i1 %597, label %598, label %625

598:                                              ; preds = %592, %586, %580
  %599 = load ptr, ptr %3, align 8, !tbaa !5
  %600 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 23
  %601 = load i32, ptr %600, align 4, !tbaa !28
  %602 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 13
  %603 = load i32, ptr %602, align 4, !tbaa !31
  call void @libxsmm_aarch64_instruction_alu_move(ptr noundef %599, i32 noundef -1186988026, i32 noundef %601, i32 noundef 127, i32 noundef 16, i32 noundef %603)
  %604 = load ptr, ptr %20, align 8, !tbaa !5
  %605 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %604, i32 0, i32 6
  %606 = load i32, ptr %605, align 1, !tbaa !16
  %607 = and i32 %606, 131072
  %608 = icmp ne i32 %607, 0
  br i1 %608, label %609, label %624

609:                                              ; preds = %598
  %610 = load ptr, ptr %3, align 8, !tbaa !5
  %611 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 23
  %612 = load i32, ptr %611, align 4, !tbaa !28
  %613 = load i32, ptr %28, align 4, !tbaa !9
  %614 = add nsw i32 %613, 8
  %615 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 7
  %616 = load i32, ptr %615, align 4, !tbaa !32
  call void @libxsmm_aarch64_instruction_alu_move(ptr noundef %610, i32 noundef -1186988026, i32 noundef %612, i32 noundef 127, i32 noundef %614, i32 noundef %616)
  %617 = load ptr, ptr %3, align 8, !tbaa !5
  %618 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 23
  %619 = load i32, ptr %618, align 4, !tbaa !28
  %620 = load i32, ptr %29, align 4, !tbaa !9
  %621 = add nsw i32 %620, 8
  %622 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 9
  %623 = load i32, ptr %622, align 4, !tbaa !33
  call void @libxsmm_aarch64_instruction_alu_move(ptr noundef %617, i32 noundef -1186988026, i32 noundef %619, i32 noundef 127, i32 noundef %621, i32 noundef %623)
  br label %624

624:                                              ; preds = %609, %598
  br label %625

625:                                              ; preds = %624, %592
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #6
  br label %626

626:                                              ; preds = %625, %517
  %627 = load ptr, ptr %3, align 8, !tbaa !5
  %628 = load ptr, ptr %4, align 8, !tbaa !5
  call void @libxsmm_generator_gemm_setup_stack_frame_aarch64(ptr noundef %627, ptr noundef %628, ptr noundef %7, ptr noundef %5)
  %629 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %5, i32 0, i32 35
  %630 = load i32, ptr %629, align 4, !tbaa !53
  %631 = icmp ugt i32 %630, 0
  br i1 %631, label %632, label %656

632:                                              ; preds = %626
  %633 = load ptr, ptr %3, align 8, !tbaa !5
  %634 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 24
  %635 = load i32, ptr %634, align 4, !tbaa !29
  %636 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 5
  %637 = load i32, ptr %636, align 4, !tbaa !21
  call void @libxsmm_generator_gemm_setval_stack_var_aarch64(ptr noundef %633, i32 noundef 18, i32 noundef %635, i32 noundef %637)
  %638 = load ptr, ptr %3, align 8, !tbaa !5
  %639 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 23
  %640 = load i32, ptr %639, align 4, !tbaa !28
  call void @libxsmm_generator_gemm_getval_stack_var_aarch64(ptr noundef %638, i32 noundef 6, i32 noundef %640)
  %641 = load ptr, ptr %3, align 8, !tbaa !5
  %642 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 23
  %643 = load i32, ptr %642, align 4, !tbaa !28
  %644 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 24
  %645 = load i32, ptr %644, align 4, !tbaa !29
  %646 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 5
  %647 = load i32, ptr %646, align 4, !tbaa !21
  call void @libxsmm_aarch64_instruction_alu_compute_imm64(ptr noundef %641, i32 noundef 4096, i32 noundef %643, i32 noundef %645, i32 noundef %647, i64 noundef 2048)
  %648 = load ptr, ptr %4, align 8, !tbaa !5
  %649 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %648, i32 0, i32 5
  %650 = load i32, ptr %649, align 1, !tbaa !54
  store i32 %650, ptr %14, align 4, !tbaa !9
  %651 = load ptr, ptr %4, align 8, !tbaa !5
  %652 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %651, i32 0, i32 0
  %653 = load i32, ptr %652, align 1, !tbaa !40
  %654 = load ptr, ptr %20, align 8, !tbaa !5
  %655 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %654, i32 0, i32 5
  store i32 %653, ptr %655, align 1, !tbaa !54
  br label %656

656:                                              ; preds = %632, %626
  %657 = load ptr, ptr %3, align 8, !tbaa !5
  %658 = load ptr, ptr %20, align 8, !tbaa !5
  %659 = load ptr, ptr %4, align 8, !tbaa !5
  call void @libxsmm_generator_gemm_apply_opA_opB_aarch64(ptr noundef %657, ptr noundef %6, ptr noundef %7, ptr noundef %5, ptr noundef %658, ptr noundef %659)
  %660 = load ptr, ptr %3, align 8, !tbaa !5
  %661 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %660, i32 0, i32 6
  %662 = load i32, ptr %661, align 4, !tbaa !38
  %663 = icmp uge i32 %662, 2201
  br i1 %663, label %664, label %786

664:                                              ; preds = %656
  %665 = load ptr, ptr %3, align 8, !tbaa !5
  %666 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %665, i32 0, i32 6
  %667 = load i32, ptr %666, align 4, !tbaa !38
  %668 = icmp ult i32 %667, 2501
  br i1 %668, label %669, label %786

669:                                              ; preds = %664
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #6
  %670 = load ptr, ptr %20, align 8, !tbaa !5
  %671 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %670, i32 0, i32 0
  %672 = load i32, ptr %671, align 1, !tbaa !40
  %673 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %5, i32 0, i32 2
  %674 = load i32, ptr %673, align 8, !tbaa !55
  %675 = urem i32 %672, %674
  store i32 %675, ptr %31, align 4, !tbaa !9
  %676 = load ptr, ptr %4, align 8, !tbaa !5
  %677 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %676, i32 0, i32 6
  %678 = load i32, ptr %677, align 1, !tbaa !16
  %679 = and i32 %678, 2048
  %680 = icmp eq i32 %679, 0
  br i1 %680, label %681, label %704

681:                                              ; preds = %669
  %682 = load i8, ptr %25, align 1, !tbaa !11
  %683 = sext i8 %682 to i32
  %684 = icmp eq i32 %683, 0
  br i1 %684, label %685, label %704

685:                                              ; preds = %681
  %686 = load ptr, ptr %4, align 8, !tbaa !5
  %687 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %686, i32 0, i32 8
  %688 = getelementptr inbounds [3 x i8], ptr %687, i64 0, i64 0
  %689 = call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef %688)
  %690 = icmp eq i32 2, %689
  br i1 %690, label %691, label %704

691:                                              ; preds = %685
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #6
  %692 = load ptr, ptr %20, align 8, !tbaa !5
  %693 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %692, i32 0, i32 0
  %694 = load i32, ptr %693, align 1, !tbaa !40
  %695 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %5, i32 0, i32 2
  %696 = load i32, ptr %695, align 8, !tbaa !55
  %697 = mul i32 2, %696
  %698 = urem i32 %694, %697
  %699 = mul i32 %698, 2
  store i32 %699, ptr %32, align 4, !tbaa !9
  %700 = load ptr, ptr %3, align 8, !tbaa !5
  %701 = load i32, ptr %32, align 4, !tbaa !9
  %702 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 22
  %703 = load i32, ptr %702, align 4, !tbaa !27
  call void @libxsmm_generator_set_p_register_aarch64_sve(ptr noundef %700, i32 noundef 3, i32 noundef %701, i32 noundef %703)
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #6
  br label %704

704:                                              ; preds = %691, %685, %681, %669
  %705 = load i8, ptr %25, align 1, !tbaa !11
  %706 = sext i8 %705 to i32
  %707 = icmp eq i32 %706, 0
  br i1 %707, label %708, label %717

708:                                              ; preds = %704
  %709 = load ptr, ptr %4, align 8, !tbaa !5
  %710 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %709, i32 0, i32 8
  %711 = getelementptr inbounds [3 x i8], ptr %710, i64 0, i64 0
  %712 = call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef %711)
  %713 = icmp eq i32 2, %712
  br i1 %713, label %714, label %717

714:                                              ; preds = %708
  %715 = load i32, ptr %31, align 4, !tbaa !9
  %716 = mul nsw i32 %715, 4
  store i32 %716, ptr %31, align 4, !tbaa !9
  br label %722

717:                                              ; preds = %708, %704
  %718 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %5, i32 0, i32 5
  %719 = load i32, ptr %718, align 4, !tbaa !56
  %720 = load i32, ptr %31, align 4, !tbaa !9
  %721 = mul i32 %720, %719
  store i32 %721, ptr %31, align 4, !tbaa !9
  br label %722

722:                                              ; preds = %717, %714
  %723 = load ptr, ptr %3, align 8, !tbaa !5
  %724 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 22
  %725 = load i32, ptr %724, align 4, !tbaa !27
  call void @libxsmm_generator_set_p_register_aarch64_sve(ptr noundef %723, i32 noundef 0, i32 noundef -1, i32 noundef %725)
  %726 = load ptr, ptr %3, align 8, !tbaa !5
  %727 = load i32, ptr %31, align 4, !tbaa !9
  %728 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 22
  %729 = load i32, ptr %728, align 4, !tbaa !27
  call void @libxsmm_generator_set_p_register_aarch64_sve(ptr noundef %726, i32 noundef 1, i32 noundef %727, i32 noundef %729)
  %730 = load ptr, ptr %4, align 8, !tbaa !5
  %731 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %730, i32 0, i32 8
  %732 = getelementptr inbounds [3 x i8], ptr %731, i64 0, i64 0
  %733 = call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef %732)
  %734 = icmp eq i32 2, %733
  br i1 %734, label %735, label %755

735:                                              ; preds = %722
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #6
  %736 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %5, i32 0, i32 2
  %737 = load i32, ptr %736, align 8, !tbaa !55
  %738 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %5, i32 0, i32 5
  %739 = load i32, ptr %738, align 4, !tbaa !56
  %740 = mul i32 %737, %739
  store i32 %740, ptr %33, align 4, !tbaa !9
  %741 = load ptr, ptr %3, align 8, !tbaa !5
  %742 = load i32, ptr %33, align 4, !tbaa !9
  %743 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 22
  %744 = load i32, ptr %743, align 4, !tbaa !27
  call void @libxsmm_generator_set_p_register_aarch64_sve(ptr noundef %741, i32 noundef 2, i32 noundef %742, i32 noundef %744)
  %745 = load i8, ptr %25, align 1, !tbaa !11
  %746 = sext i8 %745 to i32
  %747 = icmp eq i32 %746, 0
  br i1 %747, label %748, label %754

748:                                              ; preds = %735
  %749 = load ptr, ptr %3, align 8, !tbaa !5
  %750 = load i32, ptr %31, align 4, !tbaa !9
  %751 = sdiv i32 %750, 2
  %752 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 22
  %753 = load i32, ptr %752, align 4, !tbaa !27
  call void @libxsmm_generator_set_p_register_aarch64_sve(ptr noundef %749, i32 noundef 4, i32 noundef %751, i32 noundef %753)
  br label %754

754:                                              ; preds = %748, %735
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #6
  br label %755

755:                                              ; preds = %754, %722
  %756 = load i8, ptr %25, align 1, !tbaa !11
  %757 = sext i8 %756 to i32
  %758 = icmp eq i32 %757, 1
  br i1 %758, label %759, label %785

759:                                              ; preds = %755
  %760 = load ptr, ptr %4, align 8, !tbaa !5
  %761 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %760, i32 0, i32 8
  %762 = getelementptr inbounds [3 x i8], ptr %761, i64 0, i64 0
  %763 = call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef %762)
  %764 = icmp eq i32 2, %763
  br i1 %764, label %771, label %765

765:                                              ; preds = %759
  %766 = load ptr, ptr %4, align 8, !tbaa !5
  %767 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %766, i32 0, i32 8
  %768 = getelementptr inbounds [3 x i8], ptr %767, i64 0, i64 0
  %769 = call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef %768)
  %770 = icmp eq i32 12, %769
  br i1 %770, label %771, label %785

771:                                              ; preds = %765, %759
  %772 = load ptr, ptr %20, align 8, !tbaa !5
  %773 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %772, i32 0, i32 0
  %774 = load i32, ptr %773, align 1, !tbaa !40
  %775 = urem i32 %774, 4
  %776 = mul i32 %775, 8
  store i32 %776, ptr %31, align 4, !tbaa !9
  %777 = load i32, ptr %31, align 4, !tbaa !9
  %778 = icmp sgt i32 %777, 0
  br i1 %778, label %779, label %784

779:                                              ; preds = %771
  %780 = load ptr, ptr %3, align 8, !tbaa !5
  %781 = load i32, ptr %31, align 4, !tbaa !9
  %782 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 22
  %783 = load i32, ptr %782, align 4, !tbaa !27
  call void @libxsmm_generator_set_p_register_aarch64_sve(ptr noundef %780, i32 noundef 3, i32 noundef %781, i32 noundef %783)
  br label %784

784:                                              ; preds = %779, %771
  br label %785

785:                                              ; preds = %784, %765, %755
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #6
  br label %786

786:                                              ; preds = %785, %664, %656
  call void @libxsmm_reset_loop_label_tracker(ptr noundef %6)
  br label %787

787:                                              ; preds = %2084, %786
  %788 = load i32, ptr %11, align 4, !tbaa !9
  %789 = load ptr, ptr %20, align 8, !tbaa !5
  %790 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %789, i32 0, i32 1
  %791 = load i32, ptr %790, align 1, !tbaa !57
  %792 = icmp ne i32 %788, %791
  br i1 %792, label %793, label %2085

793:                                              ; preds = %787
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #6
  %794 = load i32, ptr %10, align 4, !tbaa !9
  %795 = zext i32 %794 to i64
  %796 = getelementptr inbounds [2 x i32], ptr %8, i64 0, i64 %795
  %797 = load i32, ptr %796, align 4, !tbaa !9
  store i32 %797, ptr %34, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #6
  store i32 0, ptr %35, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %36) #6
  store i32 0, ptr %36, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %37) #6
  store i32 0, ptr %37, align 4, !tbaa !9
  %798 = load i32, ptr %11, align 4, !tbaa !9
  store i32 %798, ptr %12, align 4, !tbaa !9
  %799 = load i32, ptr %10, align 4, !tbaa !9
  %800 = zext i32 %799 to i64
  %801 = getelementptr inbounds [2 x i32], ptr %9, i64 0, i64 %800
  %802 = load i32, ptr %801, align 4, !tbaa !9
  %803 = load i32, ptr %11, align 4, !tbaa !9
  %804 = add i32 %803, %802
  store i32 %804, ptr %11, align 4, !tbaa !9
  %805 = load i32, ptr %10, align 4, !tbaa !9
  %806 = add i32 %805, 1
  store i32 %806, ptr %10, align 4, !tbaa !9
  %807 = load ptr, ptr %3, align 8, !tbaa !5
  %808 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 11
  %809 = load i32, ptr %808, align 4, !tbaa !25
  %810 = load i32, ptr %11, align 4, !tbaa !9
  %811 = load i32, ptr %12, align 4, !tbaa !9
  %812 = sub i32 %810, %811
  call void @libxsmm_generator_loop_header_aarch64(ptr noundef %807, ptr noundef %6, i32 noundef %809, i32 noundef %812)
  %813 = load ptr, ptr %20, align 8, !tbaa !5
  %814 = load ptr, ptr %3, align 8, !tbaa !5
  %815 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %814, i32 0, i32 6
  %816 = load i32, ptr %815, align 4, !tbaa !38
  %817 = call i32 @libxsmm_generator_gemm_aarch64_get_initial_m_blocking(ptr noundef %5, ptr noundef %813, i32 noundef %816)
  store i32 %817, ptr %37, align 4, !tbaa !9
  %818 = load i8, ptr %25, align 1, !tbaa !11
  %819 = icmp ne i8 %818, 0
  br i1 %819, label %820, label %846

820:                                              ; preds = %793
  %821 = load ptr, ptr %3, align 8, !tbaa !5
  %822 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %821, i32 0, i32 6
  %823 = load i32, ptr %822, align 4, !tbaa !38
  %824 = icmp ule i32 %823, 2202
  br i1 %824, label %830, label %825

825:                                              ; preds = %820
  %826 = load ptr, ptr %3, align 8, !tbaa !5
  %827 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %826, i32 0, i32 6
  %828 = load i32, ptr %827, align 4, !tbaa !38
  %829 = icmp eq i32 %828, 2501
  br i1 %829, label %830, label %831

830:                                              ; preds = %825, %820
  store i32 16, ptr %37, align 4, !tbaa !9
  br label %832

831:                                              ; preds = %825
  store i32 32, ptr %37, align 4, !tbaa !9
  br label %832

832:                                              ; preds = %831, %830
  %833 = load ptr, ptr %4, align 8, !tbaa !5
  %834 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %833, i32 0, i32 6
  %835 = load i32, ptr %834, align 1, !tbaa !16
  %836 = and i32 %835, 256
  %837 = icmp ugt i32 %836, 0
  br i1 %837, label %838, label %845

838:                                              ; preds = %832
  %839 = load ptr, ptr %4, align 8, !tbaa !5
  %840 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %839, i32 0, i32 6
  %841 = load i32, ptr %840, align 1, !tbaa !16
  %842 = and i32 %841, 512
  %843 = icmp eq i32 %842, 0
  br i1 %843, label %844, label %845

844:                                              ; preds = %838
  store i8 1, ptr %26, align 1, !tbaa !11
  br label %845

845:                                              ; preds = %844, %838, %832
  br label %846

846:                                              ; preds = %845, %793
  br label %847

847:                                              ; preds = %1791, %846
  %848 = load i32, ptr %35, align 4, !tbaa !9
  %849 = load ptr, ptr %20, align 8, !tbaa !5
  %850 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %849, i32 0, i32 0
  %851 = load i32, ptr %850, align 1, !tbaa !40
  %852 = icmp ne i32 %848, %851
  br i1 %852, label %853, label %1798

853:                                              ; preds = %847
  %854 = load i32, ptr %37, align 4, !tbaa !9
  %855 = icmp eq i32 %854, 0
  br i1 %855, label %856, label %865

856:                                              ; preds = %853
  %857 = load ptr, ptr %3, align 8, !tbaa !5
  %858 = load i32, ptr @libxsmm_ninit, align 4, !tbaa !9
  %859 = icmp ult i32 1, %858
  br i1 %859, label %860, label %862

860:                                              ; preds = %856
  %861 = load i32, ptr @libxsmm_verbosity, align 4, !tbaa !9
  br label %863

862:                                              ; preds = %856
  br label %863

863:                                              ; preds = %862, %860
  %864 = phi i32 [ %861, %860 ], [ 1, %862 ]
  call void @libxsmm_handle_error(ptr noundef %857, i32 noundef 90017, ptr noundef @__func__.libxsmm_generator_gemm_aarch64_kernel, ptr noundef @.str, i32 noundef 1921, i32 noundef %864)
  store i32 1, ptr %27, align 4
  br label %2082

865:                                              ; preds = %853
  %866 = load i32, ptr %35, align 4, !tbaa !9
  store i32 %866, ptr %36, align 4, !tbaa !9
  %867 = load i32, ptr %37, align 4, !tbaa !9
  %868 = icmp ne i32 0, %867
  br i1 %868, label %869, label %870

869:                                              ; preds = %865
  br label %871

870:                                              ; preds = %865
  call void @__assert_fail(ptr noundef @.str.1, ptr noundef @.str, i32 noundef 1925, ptr noundef @__PRETTY_FUNCTION__.libxsmm_generator_gemm_aarch64_kernel) #7
  unreachable

871:                                              ; preds = %869
  %872 = load i32, ptr %35, align 4, !tbaa !9
  %873 = load ptr, ptr %20, align 8, !tbaa !5
  %874 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %873, i32 0, i32 0
  %875 = load i32, ptr %874, align 1, !tbaa !40
  %876 = load i32, ptr %36, align 4, !tbaa !9
  %877 = sub i32 %875, %876
  %878 = load i32, ptr %37, align 4, !tbaa !9
  %879 = udiv i32 %877, %878
  %880 = load i32, ptr %37, align 4, !tbaa !9
  %881 = mul i32 %879, %880
  %882 = add i32 %872, %881
  store i32 %882, ptr %35, align 4, !tbaa !9
  %883 = load i32, ptr %35, align 4, !tbaa !9
  %884 = load i32, ptr %36, align 4, !tbaa !9
  %885 = icmp ne i32 %883, %884
  br i1 %885, label %886, label %1791

886:                                              ; preds = %871
  %887 = load i32, ptr %35, align 4, !tbaa !9
  %888 = icmp ugt i32 %887, 0
  br i1 %888, label %889, label %1791

889:                                              ; preds = %886
  %890 = load ptr, ptr %3, align 8, !tbaa !5
  %891 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 10
  %892 = load i32, ptr %891, align 4, !tbaa !24
  %893 = load i32, ptr %35, align 4, !tbaa !9
  %894 = load i32, ptr %36, align 4, !tbaa !9
  %895 = sub i32 %893, %894
  call void @libxsmm_generator_loop_header_aarch64(ptr noundef %890, ptr noundef %6, i32 noundef %892, i32 noundef %895)
  %896 = load ptr, ptr %3, align 8, !tbaa !5
  %897 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %896, i32 0, i32 6
  %898 = load i32, ptr %897, align 4, !tbaa !38
  %899 = icmp eq i32 %898, 2001
  br i1 %899, label %915, label %900

900:                                              ; preds = %889
  %901 = load ptr, ptr %3, align 8, !tbaa !5
  %902 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %901, i32 0, i32 6
  %903 = load i32, ptr %902, align 4, !tbaa !38
  %904 = icmp eq i32 %903, 2002
  br i1 %904, label %915, label %905

905:                                              ; preds = %900
  %906 = load ptr, ptr %3, align 8, !tbaa !5
  %907 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %906, i32 0, i32 6
  %908 = load i32, ptr %907, align 4, !tbaa !38
  %909 = icmp eq i32 %908, 2101
  br i1 %909, label %915, label %910

910:                                              ; preds = %905
  %911 = load ptr, ptr %3, align 8, !tbaa !5
  %912 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %911, i32 0, i32 6
  %913 = load i32, ptr %912, align 4, !tbaa !38
  %914 = icmp eq i32 %913, 2501
  br i1 %914, label %915, label %993

915:                                              ; preds = %910, %905, %900, %889
  %916 = load i8, ptr %25, align 1, !tbaa !11
  %917 = icmp ne i8 %916, 0
  br i1 %917, label %918, label %942

918:                                              ; preds = %915
  %919 = load ptr, ptr %3, align 8, !tbaa !5
  %920 = load ptr, ptr %20, align 8, !tbaa !5
  %921 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 5
  %922 = load i32, ptr %921, align 4, !tbaa !21
  %923 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 22
  %924 = load i32, ptr %923, align 4, !tbaa !27
  %925 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %5, i32 0, i32 2
  %926 = load i32, ptr %925, align 8, !tbaa !55
  %927 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %5, i32 0, i32 1
  %928 = load i32, ptr %927, align 4, !tbaa !58
  %929 = load i32, ptr %37, align 4, !tbaa !9
  %930 = load i32, ptr %34, align 4, !tbaa !9
  %931 = load ptr, ptr %20, align 8, !tbaa !5
  %932 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %931, i32 0, i32 5
  %933 = load i32, ptr %932, align 1, !tbaa !54
  %934 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %5, i32 0, i32 5
  %935 = load i32, ptr %934, align 4, !tbaa !56
  %936 = mul i32 %933, %935
  %937 = load ptr, ptr %20, align 8, !tbaa !5
  %938 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %937, i32 0, i32 6
  %939 = load i32, ptr %938, align 1, !tbaa !16
  %940 = and i32 4, %939
  %941 = load i8, ptr %26, align 1, !tbaa !11
  call void @libxsmm_generator_load_2dregblock_mmla_aarch64_asimd(ptr noundef %919, ptr noundef %5, ptr noundef %920, i32 noundef %922, i32 noundef %924, i32 noundef %926, i32 noundef %928, i32 noundef %929, i32 noundef %930, i32 noundef %936, i32 noundef %940, i8 noundef zeroext %941)
  br label %992

942:                                              ; preds = %915
  %943 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %5, i32 0, i32 29
  %944 = load i32, ptr %943, align 4, !tbaa !59
  %945 = icmp eq i32 %944, 1
  br i1 %945, label %950, label %946

946:                                              ; preds = %942
  %947 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %5, i32 0, i32 25
  %948 = load i32, ptr %947, align 4, !tbaa !60
  %949 = icmp eq i32 %948, 1
  br i1 %949, label %950, label %969

950:                                              ; preds = %946, %942
  %951 = load ptr, ptr %3, align 8, !tbaa !5
  %952 = load ptr, ptr %20, align 8, !tbaa !5
  %953 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 5
  %954 = load i32, ptr %953, align 4, !tbaa !21
  %955 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 22
  %956 = load i32, ptr %955, align 4, !tbaa !27
  %957 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %5, i32 0, i32 2
  %958 = load i32, ptr %957, align 8, !tbaa !55
  %959 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %5, i32 0, i32 1
  %960 = load i32, ptr %959, align 4, !tbaa !58
  %961 = load i32, ptr %37, align 4, !tbaa !9
  %962 = load i32, ptr %34, align 4, !tbaa !9
  %963 = load ptr, ptr %20, align 8, !tbaa !5
  %964 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %963, i32 0, i32 5
  %965 = load i32, ptr %964, align 1, !tbaa !54
  %966 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %5, i32 0, i32 5
  %967 = load i32, ptr %966, align 4, !tbaa !56
  %968 = mul i32 %965, %967
  call void @libxsmm_generator_gemm_load_add_colbias_2dregblock_aarch64(ptr noundef %951, ptr noundef %952, i32 noundef %954, i32 noundef %956, i32 noundef %958, i32 noundef %960, i32 noundef 1, i32 noundef %961, i32 noundef %962, i32 noundef %968)
  br label %991

969:                                              ; preds = %946
  %970 = load ptr, ptr %3, align 8, !tbaa !5
  %971 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 5
  %972 = load i32, ptr %971, align 4, !tbaa !21
  %973 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 22
  %974 = load i32, ptr %973, align 4, !tbaa !27
  %975 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %5, i32 0, i32 2
  %976 = load i32, ptr %975, align 8, !tbaa !55
  %977 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %5, i32 0, i32 1
  %978 = load i32, ptr %977, align 4, !tbaa !58
  %979 = load i32, ptr %37, align 4, !tbaa !9
  %980 = load i32, ptr %34, align 4, !tbaa !9
  %981 = load ptr, ptr %20, align 8, !tbaa !5
  %982 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %981, i32 0, i32 5
  %983 = load i32, ptr %982, align 1, !tbaa !54
  %984 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %5, i32 0, i32 5
  %985 = load i32, ptr %984, align 4, !tbaa !56
  %986 = mul i32 %983, %985
  %987 = load ptr, ptr %20, align 8, !tbaa !5
  %988 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %987, i32 0, i32 6
  %989 = load i32, ptr %988, align 1, !tbaa !16
  %990 = and i32 4, %989
  call void @libxsmm_generator_load_2dregblock_aarch64_asimd(ptr noundef %970, i32 noundef %972, i32 noundef %974, i32 noundef %976, i32 noundef %978, i32 noundef %979, i32 noundef %980, i32 noundef %986, i32 noundef %990)
  br label %991

991:                                              ; preds = %969, %950
  br label %992

992:                                              ; preds = %991, %918
  br label %1110

993:                                              ; preds = %910
  %994 = load ptr, ptr %3, align 8, !tbaa !5
  %995 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %994, i32 0, i32 6
  %996 = load i32, ptr %995, align 4, !tbaa !38
  %997 = icmp uge i32 %996, 2201
  br i1 %997, label %998, label %1100

998:                                              ; preds = %993
  %999 = load ptr, ptr %3, align 8, !tbaa !5
  %1000 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %999, i32 0, i32 6
  %1001 = load i32, ptr %1000, align 4, !tbaa !38
  %1002 = icmp ult i32 %1001, 2501
  br i1 %1002, label %1003, label %1100

1003:                                             ; preds = %998
  %1004 = load i8, ptr %25, align 1, !tbaa !11
  %1005 = icmp ne i8 %1004, 0
  br i1 %1005, label %1006, label %1034

1006:                                             ; preds = %1003
  %1007 = load ptr, ptr %3, align 8, !tbaa !5
  %1008 = load ptr, ptr %20, align 8, !tbaa !5
  %1009 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 5
  %1010 = load i32, ptr %1009, align 4, !tbaa !21
  %1011 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 22
  %1012 = load i32, ptr %1011, align 4, !tbaa !27
  %1013 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 23
  %1014 = load i32, ptr %1013, align 4, !tbaa !28
  %1015 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %5, i32 0, i32 2
  %1016 = load i32, ptr %1015, align 8, !tbaa !55
  %1017 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %5, i32 0, i32 1
  %1018 = load i32, ptr %1017, align 4, !tbaa !58
  %1019 = load i32, ptr %37, align 4, !tbaa !9
  %1020 = load i32, ptr %34, align 4, !tbaa !9
  %1021 = load ptr, ptr %20, align 8, !tbaa !5
  %1022 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %1021, i32 0, i32 5
  %1023 = load i32, ptr %1022, align 1, !tbaa !54
  %1024 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %5, i32 0, i32 5
  %1025 = load i32, ptr %1024, align 4, !tbaa !56
  %1026 = mul i32 %1023, %1025
  %1027 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %5, i32 0, i32 5
  %1028 = load i32, ptr %1027, align 4, !tbaa !56
  %1029 = load ptr, ptr %20, align 8, !tbaa !5
  %1030 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %1029, i32 0, i32 6
  %1031 = load i32, ptr %1030, align 1, !tbaa !16
  %1032 = and i32 4, %1031
  %1033 = load i8, ptr %26, align 1, !tbaa !11
  call void @libxsmm_generator_load_2dregblock_mmla_aarch64_sve(ptr noundef %1007, ptr noundef %5, ptr noundef %1008, i32 noundef %1010, i32 noundef %1012, i32 noundef %1014, i32 noundef %1016, i32 noundef %1018, i32 noundef %1019, i32 noundef %1020, i32 noundef %1026, i32 noundef %1028, i32 noundef %1032, i8 noundef zeroext %1033)
  br label %1099

1034:                                             ; preds = %1003
  %1035 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %5, i32 0, i32 29
  %1036 = load i32, ptr %1035, align 4, !tbaa !59
  %1037 = icmp eq i32 %1036, 1
  br i1 %1037, label %1042, label %1038

1038:                                             ; preds = %1034
  %1039 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %5, i32 0, i32 25
  %1040 = load i32, ptr %1039, align 4, !tbaa !60
  %1041 = icmp eq i32 %1040, 1
  br i1 %1041, label %1042, label %1066

1042:                                             ; preds = %1038, %1034
  %1043 = load ptr, ptr %3, align 8, !tbaa !5
  %1044 = load ptr, ptr %20, align 8, !tbaa !5
  %1045 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 5
  %1046 = load i32, ptr %1045, align 4, !tbaa !21
  %1047 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 22
  %1048 = load i32, ptr %1047, align 4, !tbaa !27
  %1049 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %5, i32 0, i32 2
  %1050 = load i32, ptr %1049, align 8, !tbaa !55
  %1051 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %5, i32 0, i32 1
  %1052 = load i32, ptr %1051, align 4, !tbaa !58
  %1053 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %5, i32 0, i32 29
  %1054 = load i32, ptr %1053, align 4, !tbaa !59
  %1055 = icmp eq i32 %1054, 1
  %1056 = zext i1 %1055 to i64
  %1057 = select i1 %1055, i32 1, i32 2
  %1058 = load i32, ptr %37, align 4, !tbaa !9
  %1059 = load i32, ptr %34, align 4, !tbaa !9
  %1060 = load ptr, ptr %20, align 8, !tbaa !5
  %1061 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %1060, i32 0, i32 5
  %1062 = load i32, ptr %1061, align 1, !tbaa !54
  %1063 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %5, i32 0, i32 5
  %1064 = load i32, ptr %1063, align 4, !tbaa !56
  %1065 = mul i32 %1062, %1064
  call void @libxsmm_generator_gemm_load_add_colbias_2dregblock_aarch64(ptr noundef %1043, ptr noundef %1044, i32 noundef %1046, i32 noundef %1048, i32 noundef %1050, i32 noundef %1052, i32 noundef %1057, i32 noundef %1058, i32 noundef %1059, i32 noundef %1065)
  br label %1098

1066:                                             ; preds = %1038
  %1067 = load ptr, ptr %3, align 8, !tbaa !5
  %1068 = load ptr, ptr %4, align 8, !tbaa !5
  %1069 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %1068, i32 0, i32 8
  %1070 = getelementptr inbounds [3 x i8], ptr %1069, i64 0, i64 0
  %1071 = call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef %1070)
  %1072 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 5
  %1073 = load i32, ptr %1072, align 4, !tbaa !21
  %1074 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 22
  %1075 = load i32, ptr %1074, align 4, !tbaa !27
  %1076 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %5, i32 0, i32 2
  %1077 = load i32, ptr %1076, align 8, !tbaa !55
  %1078 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %5, i32 0, i32 1
  %1079 = load i32, ptr %1078, align 4, !tbaa !58
  %1080 = load i32, ptr %37, align 4, !tbaa !9
  %1081 = load i32, ptr %34, align 4, !tbaa !9
  %1082 = load ptr, ptr %20, align 8, !tbaa !5
  %1083 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %1082, i32 0, i32 5
  %1084 = load i32, ptr %1083, align 1, !tbaa !54
  %1085 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %5, i32 0, i32 5
  %1086 = load i32, ptr %1085, align 4, !tbaa !56
  %1087 = mul i32 %1084, %1086
  %1088 = load i32, ptr %15, align 4, !tbaa !9
  %1089 = icmp ugt i32 %1088, 0
  br i1 %1089, label %1090, label %1091

1090:                                             ; preds = %1066
  br label %1096

1091:                                             ; preds = %1066
  %1092 = load ptr, ptr %20, align 8, !tbaa !5
  %1093 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %1092, i32 0, i32 6
  %1094 = load i32, ptr %1093, align 1, !tbaa !16
  %1095 = and i32 4, %1094
  br label %1096

1096:                                             ; preds = %1091, %1090
  %1097 = phi i32 [ 1, %1090 ], [ %1095, %1091 ]
  call void @libxsmm_generator_load_2dregblock_aarch64_sve(ptr noundef %1067, i32 noundef %1071, i32 noundef %1073, i32 noundef %1075, i32 noundef %1077, i32 noundef %1079, i32 noundef %1080, i32 noundef %1081, i32 noundef %1087, i32 noundef %1097)
  br label %1098

1098:                                             ; preds = %1096, %1042
  br label %1099

1099:                                             ; preds = %1098, %1006
  br label %1109

1100:                                             ; preds = %998, %993
  %1101 = load ptr, ptr %3, align 8, !tbaa !5
  %1102 = load i32, ptr @libxsmm_ninit, align 4, !tbaa !9
  %1103 = icmp ult i32 1, %1102
  br i1 %1103, label %1104, label %1106

1104:                                             ; preds = %1100
  %1105 = load i32, ptr @libxsmm_verbosity, align 4, !tbaa !9
  br label %1107

1106:                                             ; preds = %1100
  br label %1107

1107:                                             ; preds = %1106, %1104
  %1108 = phi i32 [ %1105, %1104 ], [ 1, %1106 ]
  call void @libxsmm_handle_error(ptr noundef %1101, i32 noundef 90005, ptr noundef @__func__.libxsmm_generator_gemm_aarch64_kernel, ptr noundef @.str, i32 noundef 1976, i32 noundef %1108)
  store i32 1, ptr %27, align 4
  br label %2082

1109:                                             ; preds = %1099
  br label %1110

1110:                                             ; preds = %1109, %992
  %1111 = load ptr, ptr %20, align 8, !tbaa !5
  %1112 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %1111, i32 0, i32 6
  %1113 = load i32, ptr %1112, align 1, !tbaa !16
  %1114 = and i32 %1113, 65536
  %1115 = icmp ugt i32 %1114, 0
  br i1 %1115, label %1128, label %1116

1116:                                             ; preds = %1110
  %1117 = load ptr, ptr %20, align 8, !tbaa !5
  %1118 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %1117, i32 0, i32 6
  %1119 = load i32, ptr %1118, align 1, !tbaa !16
  %1120 = and i32 %1119, 131072
  %1121 = icmp ugt i32 %1120, 0
  br i1 %1121, label %1128, label %1122

1122:                                             ; preds = %1116
  %1123 = load ptr, ptr %20, align 8, !tbaa !5
  %1124 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %1123, i32 0, i32 6
  %1125 = load i32, ptr %1124, align 1, !tbaa !16
  %1126 = and i32 %1125, 262144
  %1127 = icmp ugt i32 %1126, 0
  br i1 %1127, label %1128, label %1218

1128:                                             ; preds = %1122, %1116, %1110
  %1129 = load ptr, ptr %20, align 8, !tbaa !5
  %1130 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %1129, i32 0, i32 6
  %1131 = load i32, ptr %1130, align 1, !tbaa !16
  %1132 = and i32 %1131, 262144
  %1133 = icmp ugt i32 %1132, 0
  br i1 %1133, label %1134, label %1141

1134:                                             ; preds = %1128
  %1135 = load ptr, ptr %3, align 8, !tbaa !5
  %1136 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 26
  %1137 = load i32, ptr %1136, align 4, !tbaa !35
  call void @libxsmm_aarch64_instruction_alu_set_imm64(ptr noundef %1135, i32 noundef %1137, i64 noundef 0)
  %1138 = load ptr, ptr %3, align 8, !tbaa !5
  %1139 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 27
  %1140 = load i32, ptr %1139, align 4, !tbaa !36
  call void @libxsmm_aarch64_instruction_alu_set_imm64(ptr noundef %1138, i32 noundef %1140, i64 noundef 0)
  br label %1155

1141:                                             ; preds = %1128
  %1142 = load ptr, ptr %3, align 8, !tbaa !5
  %1143 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 25
  %1144 = load i32, ptr %1143, align 4, !tbaa !34
  call void @libxsmm_aarch64_instruction_alu_set_imm64(ptr noundef %1142, i32 noundef %1144, i64 noundef 0)
  %1145 = load ptr, ptr %3, align 8, !tbaa !5
  %1146 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 1
  %1147 = load i32, ptr %1146, align 4, !tbaa !19
  %1148 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 26
  %1149 = load i32, ptr %1148, align 4, !tbaa !35
  call void @libxsmm_aarch64_instruction_alu_compute_imm12(ptr noundef %1145, i32 noundef 285212678, i32 noundef %1147, i32 noundef %1149, i32 noundef 0, i8 noundef zeroext 0)
  %1150 = load ptr, ptr %3, align 8, !tbaa !5
  %1151 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 3
  %1152 = load i32, ptr %1151, align 4, !tbaa !20
  %1153 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 27
  %1154 = load i32, ptr %1153, align 4, !tbaa !36
  call void @libxsmm_aarch64_instruction_alu_compute_imm12(ptr noundef %1150, i32 noundef 285212678, i32 noundef %1152, i32 noundef %1154, i32 noundef 0, i8 noundef zeroext 0)
  br label %1155

1155:                                             ; preds = %1141, %1134
  %1156 = load ptr, ptr %3, align 8, !tbaa !5
  %1157 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 13
  %1158 = load i32, ptr %1157, align 4, !tbaa !31
  %1159 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 14
  %1160 = load i32, ptr %1159, align 4, !tbaa !37
  call void @libxsmm_aarch64_instruction_alu_move(ptr noundef %1156, i32 noundef -1186988026, i32 noundef %1158, i32 noundef 63, i32 noundef 0, i32 noundef %1160)
  %1161 = load ptr, ptr %3, align 8, !tbaa !5
  call void @libxsmm_aarch64_instruction_register_jump_back_label(ptr noundef %1161, ptr noundef %6)
  %1162 = load ptr, ptr %20, align 8, !tbaa !5
  %1163 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %1162, i32 0, i32 6
  %1164 = load i32, ptr %1163, align 1, !tbaa !16
  %1165 = and i32 %1164, 65536
  %1166 = icmp ugt i32 %1165, 0
  br i1 %1166, label %1167, label %1182

1167:                                             ; preds = %1155
  %1168 = load ptr, ptr %3, align 8, !tbaa !5
  %1169 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 26
  %1170 = load i32, ptr %1169, align 4, !tbaa !35
  %1171 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 25
  %1172 = load i32, ptr %1171, align 4, !tbaa !34
  %1173 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 1
  %1174 = load i32, ptr %1173, align 4, !tbaa !19
  call void @libxsmm_aarch64_instruction_alu_move(ptr noundef %1168, i32 noundef -1201649661, i32 noundef %1170, i32 noundef %1172, i32 noundef 0, i32 noundef %1174)
  %1175 = load ptr, ptr %3, align 8, !tbaa !5
  %1176 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 27
  %1177 = load i32, ptr %1176, align 4, !tbaa !36
  %1178 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 25
  %1179 = load i32, ptr %1178, align 4, !tbaa !34
  %1180 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 3
  %1181 = load i32, ptr %1180, align 4, !tbaa !20
  call void @libxsmm_aarch64_instruction_alu_move(ptr noundef %1175, i32 noundef -1201649661, i32 noundef %1177, i32 noundef %1179, i32 noundef 0, i32 noundef %1181)
  br label %1182

1182:                                             ; preds = %1167, %1155
  %1183 = load ptr, ptr %20, align 8, !tbaa !5
  %1184 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %1183, i32 0, i32 6
  %1185 = load i32, ptr %1184, align 1, !tbaa !16
  %1186 = and i32 %1185, 131072
  %1187 = icmp ugt i32 %1186, 0
  br i1 %1187, label %1188, label %1217

1188:                                             ; preds = %1182
  %1189 = load ptr, ptr %3, align 8, !tbaa !5
  %1190 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 7
  %1191 = load i32, ptr %1190, align 4, !tbaa !32
  %1192 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 25
  %1193 = load i32, ptr %1192, align 4, !tbaa !34
  %1194 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 22
  %1195 = load i32, ptr %1194, align 4, !tbaa !27
  call void @libxsmm_aarch64_instruction_alu_move(ptr noundef %1189, i32 noundef -1201649661, i32 noundef %1191, i32 noundef %1193, i32 noundef 0, i32 noundef %1195)
  %1196 = load ptr, ptr %3, align 8, !tbaa !5
  %1197 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 26
  %1198 = load i32, ptr %1197, align 4, !tbaa !35
  %1199 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 22
  %1200 = load i32, ptr %1199, align 4, !tbaa !27
  %1201 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 1
  %1202 = load i32, ptr %1201, align 4, !tbaa !19
  call void @libxsmm_aarch64_instruction_alu_compute_shifted_reg(ptr noundef %1196, i32 noundef 184549383, i32 noundef %1198, i32 noundef %1200, i32 noundef %1202, i32 noundef 0, i32 noundef 0)
  %1203 = load ptr, ptr %3, align 8, !tbaa !5
  %1204 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 9
  %1205 = load i32, ptr %1204, align 4, !tbaa !33
  %1206 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 25
  %1207 = load i32, ptr %1206, align 4, !tbaa !34
  %1208 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 23
  %1209 = load i32, ptr %1208, align 4, !tbaa !28
  call void @libxsmm_aarch64_instruction_alu_move(ptr noundef %1203, i32 noundef -1201649661, i32 noundef %1205, i32 noundef %1207, i32 noundef 0, i32 noundef %1209)
  %1210 = load ptr, ptr %3, align 8, !tbaa !5
  %1211 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 27
  %1212 = load i32, ptr %1211, align 4, !tbaa !36
  %1213 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 23
  %1214 = load i32, ptr %1213, align 4, !tbaa !28
  %1215 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 3
  %1216 = load i32, ptr %1215, align 4, !tbaa !20
  call void @libxsmm_aarch64_instruction_alu_compute_shifted_reg(ptr noundef %1210, i32 noundef 184549383, i32 noundef %1212, i32 noundef %1214, i32 noundef %1216, i32 noundef 0, i32 noundef 0)
  br label %1217

1217:                                             ; preds = %1188, %1182
  br label %1218

1218:                                             ; preds = %1217, %1122
  %1219 = load ptr, ptr %3, align 8, !tbaa !5
  %1220 = load ptr, ptr %20, align 8, !tbaa !5
  %1221 = load i32, ptr %37, align 4, !tbaa !9
  %1222 = load i32, ptr %34, align 4, !tbaa !9
  call void @libxsmm_generator_gemm_aarch64_kloop(ptr noundef %1219, ptr noundef %6, ptr noundef %7, ptr noundef %5, ptr noundef %1220, i32 noundef %1221, i32 noundef %1222)
  %1223 = load ptr, ptr %20, align 8, !tbaa !5
  %1224 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %1223, i32 0, i32 6
  %1225 = load i32, ptr %1224, align 1, !tbaa !16
  %1226 = and i32 %1225, 65536
  %1227 = icmp ugt i32 %1226, 0
  br i1 %1227, label %1240, label %1228

1228:                                             ; preds = %1218
  %1229 = load ptr, ptr %20, align 8, !tbaa !5
  %1230 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %1229, i32 0, i32 6
  %1231 = load i32, ptr %1230, align 1, !tbaa !16
  %1232 = and i32 %1231, 131072
  %1233 = icmp ugt i32 %1232, 0
  br i1 %1233, label %1240, label %1234

1234:                                             ; preds = %1228
  %1235 = load ptr, ptr %20, align 8, !tbaa !5
  %1236 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %1235, i32 0, i32 6
  %1237 = load i32, ptr %1236, align 1, !tbaa !16
  %1238 = and i32 %1237, 262144
  %1239 = icmp ugt i32 %1238, 0
  br i1 %1239, label %1240, label %1336

1240:                                             ; preds = %1234, %1228, %1218
  %1241 = load ptr, ptr %20, align 8, !tbaa !5
  %1242 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %1241, i32 0, i32 6
  %1243 = load i32, ptr %1242, align 1, !tbaa !16
  %1244 = and i32 %1243, 262144
  %1245 = icmp ugt i32 %1244, 0
  br i1 %1245, label %1246, label %1247

1246:                                             ; preds = %1240
  br label %1253

1247:                                             ; preds = %1240
  %1248 = load ptr, ptr %3, align 8, !tbaa !5
  %1249 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 25
  %1250 = load i32, ptr %1249, align 4, !tbaa !34
  %1251 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 25
  %1252 = load i32, ptr %1251, align 4, !tbaa !34
  call void @libxsmm_aarch64_instruction_alu_compute_imm12(ptr noundef %1248, i32 noundef 285212678, i32 noundef %1250, i32 noundef %1252, i32 noundef 8, i8 noundef zeroext 0)
  br label %1253

1253:                                             ; preds = %1247, %1246
  %1254 = load ptr, ptr %20, align 8, !tbaa !5
  %1255 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %1254, i32 0, i32 6
  %1256 = load i32, ptr %1255, align 1, !tbaa !16
  %1257 = and i32 %1256, 262144
  %1258 = icmp ugt i32 %1257, 0
  br i1 %1258, label %1259, label %1300

1259:                                             ; preds = %1253
  %1260 = load ptr, ptr %3, align 8, !tbaa !5
  %1261 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 22
  %1262 = load i32, ptr %1261, align 4, !tbaa !27
  %1263 = load ptr, ptr %20, align 8, !tbaa !5
  %1264 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %1263, i32 0, i32 10
  %1265 = load i64, ptr %1264, align 1, !tbaa !61
  call void @libxsmm_aarch64_instruction_alu_set_imm64(ptr noundef %1260, i32 noundef %1262, i64 noundef %1265)
  %1266 = load ptr, ptr %3, align 8, !tbaa !5
  %1267 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 23
  %1268 = load i32, ptr %1267, align 4, !tbaa !28
  %1269 = load ptr, ptr %20, align 8, !tbaa !5
  %1270 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %1269, i32 0, i32 11
  %1271 = load i64, ptr %1270, align 1, !tbaa !62
  call void @libxsmm_aarch64_instruction_alu_set_imm64(ptr noundef %1266, i32 noundef %1268, i64 noundef %1271)
  %1272 = load ptr, ptr %3, align 8, !tbaa !5
  %1273 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 22
  %1274 = load i32, ptr %1273, align 4, !tbaa !27
  %1275 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 1
  %1276 = load i32, ptr %1275, align 4, !tbaa !19
  %1277 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 1
  %1278 = load i32, ptr %1277, align 4, !tbaa !19
  call void @libxsmm_aarch64_instruction_alu_compute_shifted_reg(ptr noundef %1272, i32 noundef 184549383, i32 noundef %1274, i32 noundef %1276, i32 noundef %1278, i32 noundef 0, i32 noundef 0)
  %1279 = load ptr, ptr %3, align 8, !tbaa !5
  %1280 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 23
  %1281 = load i32, ptr %1280, align 4, !tbaa !28
  %1282 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 3
  %1283 = load i32, ptr %1282, align 4, !tbaa !20
  %1284 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 3
  %1285 = load i32, ptr %1284, align 4, !tbaa !20
  call void @libxsmm_aarch64_instruction_alu_compute_shifted_reg(ptr noundef %1279, i32 noundef 184549383, i32 noundef %1281, i32 noundef %1283, i32 noundef %1285, i32 noundef 0, i32 noundef 0)
  %1286 = load ptr, ptr %3, align 8, !tbaa !5
  %1287 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 22
  %1288 = load i32, ptr %1287, align 4, !tbaa !27
  %1289 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 26
  %1290 = load i32, ptr %1289, align 4, !tbaa !35
  %1291 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 26
  %1292 = load i32, ptr %1291, align 4, !tbaa !35
  call void @libxsmm_aarch64_instruction_alu_compute_shifted_reg(ptr noundef %1286, i32 noundef 184549383, i32 noundef %1288, i32 noundef %1290, i32 noundef %1292, i32 noundef 0, i32 noundef 0)
  %1293 = load ptr, ptr %3, align 8, !tbaa !5
  %1294 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 23
  %1295 = load i32, ptr %1294, align 4, !tbaa !28
  %1296 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 27
  %1297 = load i32, ptr %1296, align 4, !tbaa !36
  %1298 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 27
  %1299 = load i32, ptr %1298, align 4, !tbaa !36
  call void @libxsmm_aarch64_instruction_alu_compute_shifted_reg(ptr noundef %1293, i32 noundef 184549383, i32 noundef %1295, i32 noundef %1297, i32 noundef %1299, i32 noundef 0, i32 noundef 0)
  br label %1300

1300:                                             ; preds = %1259, %1253
  %1301 = load ptr, ptr %3, align 8, !tbaa !5
  %1302 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 14
  %1303 = load i32, ptr %1302, align 4, !tbaa !37
  call void @libxsmm_generator_loop_footer_aarch64(ptr noundef %1301, ptr noundef %6, i32 noundef %1303, i32 noundef 1)
  %1304 = load ptr, ptr %20, align 8, !tbaa !5
  %1305 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %1304, i32 0, i32 6
  %1306 = load i32, ptr %1305, align 1, !tbaa !16
  %1307 = and i32 %1306, 262144
  %1308 = icmp ugt i32 %1307, 0
  br i1 %1308, label %1309, label %1324

1309:                                             ; preds = %1300
  %1310 = load ptr, ptr %3, align 8, !tbaa !5
  %1311 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 1
  %1312 = load i32, ptr %1311, align 4, !tbaa !19
  %1313 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 26
  %1314 = load i32, ptr %1313, align 4, !tbaa !35
  %1315 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 1
  %1316 = load i32, ptr %1315, align 4, !tbaa !19
  call void @libxsmm_aarch64_instruction_alu_compute_shifted_reg(ptr noundef %1310, i32 noundef 1258291207, i32 noundef %1312, i32 noundef %1314, i32 noundef %1316, i32 noundef 0, i32 noundef 0)
  %1317 = load ptr, ptr %3, align 8, !tbaa !5
  %1318 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 3
  %1319 = load i32, ptr %1318, align 4, !tbaa !20
  %1320 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 27
  %1321 = load i32, ptr %1320, align 4, !tbaa !36
  %1322 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 3
  %1323 = load i32, ptr %1322, align 4, !tbaa !20
  call void @libxsmm_aarch64_instruction_alu_compute_shifted_reg(ptr noundef %1317, i32 noundef 1258291207, i32 noundef %1319, i32 noundef %1321, i32 noundef %1323, i32 noundef 0, i32 noundef 0)
  br label %1335

1324:                                             ; preds = %1300
  %1325 = load ptr, ptr %3, align 8, !tbaa !5
  %1326 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 26
  %1327 = load i32, ptr %1326, align 4, !tbaa !35
  %1328 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 1
  %1329 = load i32, ptr %1328, align 4, !tbaa !19
  call void @libxsmm_aarch64_instruction_alu_compute_imm12(ptr noundef %1325, i32 noundef 285212678, i32 noundef %1327, i32 noundef %1329, i32 noundef 0, i8 noundef zeroext 0)
  %1330 = load ptr, ptr %3, align 8, !tbaa !5
  %1331 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 27
  %1332 = load i32, ptr %1331, align 4, !tbaa !36
  %1333 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 3
  %1334 = load i32, ptr %1333, align 4, !tbaa !20
  call void @libxsmm_aarch64_instruction_alu_compute_imm12(ptr noundef %1330, i32 noundef 285212678, i32 noundef %1332, i32 noundef %1334, i32 noundef 0, i8 noundef zeroext 0)
  br label %1335

1335:                                             ; preds = %1324, %1309
  br label %1336

1336:                                             ; preds = %1335, %1234
  %1337 = load ptr, ptr %3, align 8, !tbaa !5
  %1338 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %1337, i32 0, i32 6
  %1339 = load i32, ptr %1338, align 4, !tbaa !38
  %1340 = icmp eq i32 %1339, 2001
  br i1 %1340, label %1356, label %1341

1341:                                             ; preds = %1336
  %1342 = load ptr, ptr %3, align 8, !tbaa !5
  %1343 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %1342, i32 0, i32 6
  %1344 = load i32, ptr %1343, align 4, !tbaa !38
  %1345 = icmp eq i32 %1344, 2002
  br i1 %1345, label %1356, label %1346

1346:                                             ; preds = %1341
  %1347 = load ptr, ptr %3, align 8, !tbaa !5
  %1348 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %1347, i32 0, i32 6
  %1349 = load i32, ptr %1348, align 4, !tbaa !38
  %1350 = icmp eq i32 %1349, 2101
  br i1 %1350, label %1356, label %1351

1351:                                             ; preds = %1346
  %1352 = load ptr, ptr %3, align 8, !tbaa !5
  %1353 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %1352, i32 0, i32 6
  %1354 = load i32, ptr %1353, align 4, !tbaa !38
  %1355 = icmp eq i32 %1354, 2501
  br i1 %1355, label %1356, label %1410

1356:                                             ; preds = %1351, %1346, %1341, %1336
  %1357 = load i8, ptr %25, align 1, !tbaa !11
  %1358 = icmp ne i8 %1357, 0
  br i1 %1358, label %1359, label %1379

1359:                                             ; preds = %1356
  %1360 = load ptr, ptr %3, align 8, !tbaa !5
  %1361 = load ptr, ptr %20, align 8, !tbaa !5
  %1362 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 5
  %1363 = load i32, ptr %1362, align 4, !tbaa !21
  %1364 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 22
  %1365 = load i32, ptr %1364, align 4, !tbaa !27
  %1366 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %5, i32 0, i32 2
  %1367 = load i32, ptr %1366, align 8, !tbaa !55
  %1368 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %5, i32 0, i32 1
  %1369 = load i32, ptr %1368, align 4, !tbaa !58
  %1370 = load i32, ptr %37, align 4, !tbaa !9
  %1371 = load i32, ptr %34, align 4, !tbaa !9
  %1372 = load ptr, ptr %20, align 8, !tbaa !5
  %1373 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %1372, i32 0, i32 5
  %1374 = load i32, ptr %1373, align 1, !tbaa !54
  %1375 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %5, i32 0, i32 5
  %1376 = load i32, ptr %1375, align 4, !tbaa !56
  %1377 = mul i32 %1374, %1376
  %1378 = load i8, ptr %26, align 1, !tbaa !11
  call void @libxsmm_generator_store_2dregblock_mmla_aarch64_asimd(ptr noundef %1360, ptr noundef %5, ptr noundef %1361, i32 noundef %1363, i32 noundef %1365, i32 noundef %1367, i32 noundef %1369, i32 noundef %1370, i32 noundef %1371, i32 noundef %1377, i8 noundef zeroext %1378)
  br label %1409

1379:                                             ; preds = %1356
  %1380 = load ptr, ptr %3, align 8, !tbaa !5
  %1381 = load ptr, ptr %20, align 8, !tbaa !5
  %1382 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 22
  %1383 = load i32, ptr %1382, align 4, !tbaa !27
  %1384 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 23
  %1385 = load i32, ptr %1384, align 4, !tbaa !28
  %1386 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %5, i32 0, i32 2
  %1387 = load i32, ptr %1386, align 8, !tbaa !55
  %1388 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %5, i32 0, i32 1
  %1389 = load i32, ptr %1388, align 4, !tbaa !58
  %1390 = load i32, ptr %37, align 4, !tbaa !9
  %1391 = load i32, ptr %34, align 4, !tbaa !9
  call void @libxsmm_generator_gemm_apply_fusion_2dregblock_aarch64(ptr noundef %1380, ptr noundef %1381, ptr noundef %5, i32 noundef %1383, i32 noundef %1385, i32 noundef %1387, i32 noundef %1389, i32 noundef %1390, i32 noundef %1391)
  %1392 = load ptr, ptr %3, align 8, !tbaa !5
  %1393 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 5
  %1394 = load i32, ptr %1393, align 4, !tbaa !21
  %1395 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 22
  %1396 = load i32, ptr %1395, align 4, !tbaa !27
  %1397 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %5, i32 0, i32 2
  %1398 = load i32, ptr %1397, align 8, !tbaa !55
  %1399 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %5, i32 0, i32 1
  %1400 = load i32, ptr %1399, align 4, !tbaa !58
  %1401 = load i32, ptr %37, align 4, !tbaa !9
  %1402 = load i32, ptr %34, align 4, !tbaa !9
  %1403 = load ptr, ptr %20, align 8, !tbaa !5
  %1404 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %1403, i32 0, i32 5
  %1405 = load i32, ptr %1404, align 1, !tbaa !54
  %1406 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %5, i32 0, i32 5
  %1407 = load i32, ptr %1406, align 4, !tbaa !56
  %1408 = mul i32 %1405, %1407
  call void @libxsmm_generator_store_2dregblock_aarch64_asimd(ptr noundef %1392, i32 noundef %1394, i32 noundef %1396, i32 noundef %1398, i32 noundef %1400, i32 noundef %1401, i32 noundef %1402, i32 noundef %1408)
  br label %1409

1409:                                             ; preds = %1379, %1359
  br label %1627

1410:                                             ; preds = %1351
  %1411 = load ptr, ptr %3, align 8, !tbaa !5
  %1412 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %1411, i32 0, i32 6
  %1413 = load i32, ptr %1412, align 4, !tbaa !38
  %1414 = icmp uge i32 %1413, 2201
  br i1 %1414, label %1415, label %1617

1415:                                             ; preds = %1410
  %1416 = load ptr, ptr %3, align 8, !tbaa !5
  %1417 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %1416, i32 0, i32 6
  %1418 = load i32, ptr %1417, align 4, !tbaa !38
  %1419 = icmp ult i32 %1418, 2501
  br i1 %1419, label %1420, label %1617

1420:                                             ; preds = %1415
  %1421 = load i8, ptr %25, align 1, !tbaa !11
  %1422 = icmp ne i8 %1421, 0
  br i1 %1422, label %1423, label %1517

1423:                                             ; preds = %1420
  %1424 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %5, i32 0, i32 33
  %1425 = load i32, ptr %1424, align 4, !tbaa !63
  %1426 = icmp ugt i32 %1425, 0
  br i1 %1426, label %1427, label %1442

1427:                                             ; preds = %1423
  %1428 = load ptr, ptr %3, align 8, !tbaa !5
  %1429 = load ptr, ptr %20, align 8, !tbaa !5
  %1430 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 22
  %1431 = load i32, ptr %1430, align 4, !tbaa !27
  %1432 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 22
  %1433 = load i32, ptr %1432, align 4, !tbaa !27
  %1434 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %5, i32 0, i32 2
  %1435 = load i32, ptr %1434, align 8, !tbaa !55
  %1436 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %5, i32 0, i32 1
  %1437 = load i32, ptr %1436, align 4, !tbaa !58
  %1438 = load i32, ptr %37, align 4, !tbaa !9
  %1439 = load i32, ptr %34, align 4, !tbaa !9
  %1440 = load i8, ptr %25, align 1, !tbaa !11
  %1441 = sext i8 %1440 to i32
  call void @libxsmm_generator_gemm_apply_sigmoid_fusion_2dregblock_aarch64_sve(ptr noundef %1428, ptr noundef %1429, ptr noundef %5, i32 noundef %1431, i32 noundef %1433, i32 noundef %1435, i32 noundef %1437, i32 noundef %1438, i32 noundef %1439, i32 noundef %1441)
  br label %1442

1442:                                             ; preds = %1427, %1423
  %1443 = load ptr, ptr %3, align 8, !tbaa !5
  %1444 = load ptr, ptr %20, align 8, !tbaa !5
  %1445 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 5
  %1446 = load i32, ptr %1445, align 4, !tbaa !21
  %1447 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 22
  %1448 = load i32, ptr %1447, align 4, !tbaa !27
  %1449 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 23
  %1450 = load i32, ptr %1449, align 4, !tbaa !28
  %1451 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 24
  %1452 = load i32, ptr %1451, align 4, !tbaa !29
  %1453 = load i32, ptr %15, align 4, !tbaa !9
  %1454 = icmp ugt i32 %1453, 0
  br i1 %1454, label %1455, label %1458

1455:                                             ; preds = %1442
  %1456 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 20
  %1457 = load i32, ptr %1456, align 4, !tbaa !30
  br label %1461

1458:                                             ; preds = %1442
  %1459 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 25
  %1460 = load i32, ptr %1459, align 4, !tbaa !34
  br label %1461

1461:                                             ; preds = %1458, %1455
  %1462 = phi i32 [ %1457, %1455 ], [ %1460, %1458 ]
  %1463 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %5, i32 0, i32 2
  %1464 = load i32, ptr %1463, align 8, !tbaa !55
  %1465 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %5, i32 0, i32 1
  %1466 = load i32, ptr %1465, align 4, !tbaa !58
  %1467 = load i32, ptr %37, align 4, !tbaa !9
  %1468 = load i32, ptr %34, align 4, !tbaa !9
  %1469 = load ptr, ptr %20, align 8, !tbaa !5
  %1470 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %1469, i32 0, i32 5
  %1471 = load i32, ptr %1470, align 1, !tbaa !54
  %1472 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %5, i32 0, i32 5
  %1473 = load i32, ptr %1472, align 4, !tbaa !56
  %1474 = mul i32 %1471, %1473
  %1475 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %5, i32 0, i32 5
  %1476 = load i32, ptr %1475, align 4, !tbaa !56
  %1477 = load ptr, ptr %20, align 8, !tbaa !5
  %1478 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %1477, i32 0, i32 6
  %1479 = load i32, ptr %1478, align 1, !tbaa !16
  %1480 = and i32 4, %1479
  %1481 = load i8, ptr %26, align 1, !tbaa !11
  call void @libxsmm_generator_store_2dregblock_mmla_aarch64_sve(ptr noundef %1443, ptr noundef %5, ptr noundef %1444, i32 noundef %1446, i32 noundef %1448, i32 noundef %1450, i32 noundef %1452, i32 noundef %1462, i32 noundef %1464, i32 noundef %1466, i32 noundef %1467, i32 noundef %1468, i32 noundef %1474, i32 noundef %1476, i32 noundef %1480, i8 noundef zeroext %1481)
  %1482 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %5, i32 0, i32 30
  %1483 = load i32, ptr %1482, align 8, !tbaa !64
  %1484 = icmp eq i32 %1483, 1
  br i1 %1484, label %1485, label %1516

1485:                                             ; preds = %1461
  %1486 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %5, i32 0, i32 34
  %1487 = load i32, ptr %1486, align 8, !tbaa !65
  %1488 = icmp eq i32 %1487, 1
  br i1 %1488, label %1489, label %1516

1489:                                             ; preds = %1485
  %1490 = load ptr, ptr %20, align 8, !tbaa !5
  %1491 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %1490, i32 0, i32 0
  %1492 = load i32, ptr %1491, align 1, !tbaa !40
  %1493 = urem i32 %1492, 4
  %1494 = icmp ugt i32 %1493, 0
  br i1 %1494, label %1495, label %1516

1495:                                             ; preds = %1489
  %1496 = load ptr, ptr %4, align 8, !tbaa !5
  %1497 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %1496, i32 0, i32 8
  %1498 = getelementptr inbounds [3 x i8], ptr %1497, i64 0, i64 0
  %1499 = call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef %1498)
  %1500 = icmp eq i32 2, %1499
  br i1 %1500, label %1501, label %1515

1501:                                             ; preds = %1495
  call void @llvm.lifetime.start.p0(i64 4, ptr %38) #6
  %1502 = load ptr, ptr %20, align 8, !tbaa !5
  %1503 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %1502, i32 0, i32 0
  %1504 = load i32, ptr %1503, align 1, !tbaa !40
  %1505 = urem i32 %1504, 4
  %1506 = mul i32 %1505, 8
  store i32 %1506, ptr %38, align 4, !tbaa !9
  %1507 = load i32, ptr %38, align 4, !tbaa !9
  %1508 = icmp sgt i32 %1507, 0
  br i1 %1508, label %1509, label %1514

1509:                                             ; preds = %1501
  %1510 = load ptr, ptr %3, align 8, !tbaa !5
  %1511 = load i32, ptr %38, align 4, !tbaa !9
  %1512 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 22
  %1513 = load i32, ptr %1512, align 4, !tbaa !27
  call void @libxsmm_generator_set_p_register_aarch64_sve(ptr noundef %1510, i32 noundef 3, i32 noundef %1511, i32 noundef %1513)
  br label %1514

1514:                                             ; preds = %1509, %1501
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #6
  br label %1515

1515:                                             ; preds = %1514, %1495
  br label %1516

1516:                                             ; preds = %1515, %1489, %1485, %1461
  br label %1616

1517:                                             ; preds = %1420
  %1518 = load ptr, ptr %3, align 8, !tbaa !5
  %1519 = load ptr, ptr %20, align 8, !tbaa !5
  %1520 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 22
  %1521 = load i32, ptr %1520, align 4, !tbaa !27
  %1522 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 23
  %1523 = load i32, ptr %1522, align 4, !tbaa !28
  %1524 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %5, i32 0, i32 2
  %1525 = load i32, ptr %1524, align 8, !tbaa !55
  %1526 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %5, i32 0, i32 1
  %1527 = load i32, ptr %1526, align 4, !tbaa !58
  %1528 = load i32, ptr %37, align 4, !tbaa !9
  %1529 = load i32, ptr %34, align 4, !tbaa !9
  call void @libxsmm_generator_gemm_apply_fusion_2dregblock_aarch64(ptr noundef %1518, ptr noundef %1519, ptr noundef %5, i32 noundef %1521, i32 noundef %1523, i32 noundef %1525, i32 noundef %1527, i32 noundef %1528, i32 noundef %1529)
  %1530 = load ptr, ptr %3, align 8, !tbaa !5
  %1531 = load ptr, ptr %4, align 8, !tbaa !5
  %1532 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %1531, i32 0, i32 8
  %1533 = getelementptr inbounds [3 x i8], ptr %1532, i64 0, i64 0
  %1534 = call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef %1533)
  %1535 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 5
  %1536 = load i32, ptr %1535, align 4, !tbaa !21
  %1537 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 22
  %1538 = load i32, ptr %1537, align 4, !tbaa !27
  %1539 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %5, i32 0, i32 2
  %1540 = load i32, ptr %1539, align 8, !tbaa !55
  %1541 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %5, i32 0, i32 1
  %1542 = load i32, ptr %1541, align 4, !tbaa !58
  %1543 = load i32, ptr %37, align 4, !tbaa !9
  %1544 = load i32, ptr %34, align 4, !tbaa !9
  %1545 = load ptr, ptr %20, align 8, !tbaa !5
  %1546 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %1545, i32 0, i32 5
  %1547 = load i32, ptr %1546, align 1, !tbaa !54
  %1548 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %5, i32 0, i32 5
  %1549 = load i32, ptr %1548, align 4, !tbaa !56
  %1550 = mul i32 %1547, %1549
  %1551 = load i32, ptr %15, align 4, !tbaa !9
  %1552 = icmp ugt i32 %1551, 0
  br i1 %1552, label %1553, label %1554

1553:                                             ; preds = %1517
  br label %1559

1554:                                             ; preds = %1517
  %1555 = load ptr, ptr %4, align 8, !tbaa !5
  %1556 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %1555, i32 0, i32 8
  %1557 = getelementptr inbounds [3 x i8], ptr %1556, i64 0, i64 0
  %1558 = call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef %1557)
  br label %1559

1559:                                             ; preds = %1554, %1553
  %1560 = phi i32 [ 8, %1553 ], [ %1558, %1554 ]
  %1561 = load i32, ptr %15, align 4, !tbaa !9
  %1562 = icmp ugt i32 %1561, 0
  br i1 %1562, label %1563, label %1566

1563:                                             ; preds = %1559
  %1564 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 20
  %1565 = load i32, ptr %1564, align 4, !tbaa !30
  br label %1567

1566:                                             ; preds = %1559
  br label %1567

1567:                                             ; preds = %1566, %1563
  %1568 = phi i32 [ %1565, %1563 ], [ 0, %1566 ]
  %1569 = load i32, ptr %15, align 4, !tbaa !9
  %1570 = icmp ugt i32 %1569, 0
  br i1 %1570, label %1571, label %1579

1571:                                             ; preds = %1567
  %1572 = load ptr, ptr %20, align 8, !tbaa !5
  %1573 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %1572, i32 0, i32 6
  %1574 = load i32, ptr %1573, align 1, !tbaa !16
  %1575 = and i32 4, %1574
  %1576 = icmp eq i32 %1575, 0
  %1577 = zext i1 %1576 to i64
  %1578 = select i1 %1576, i32 1, i32 0
  br label %1580

1579:                                             ; preds = %1567
  br label %1580

1580:                                             ; preds = %1579, %1571
  %1581 = phi i32 [ %1578, %1571 ], [ 0, %1579 ]
  call void @libxsmm_generator_store_2dregblock_aarch64_sve(ptr noundef %1530, i32 noundef %1534, i32 noundef %1536, i32 noundef %1538, i32 noundef %1540, i32 noundef %1542, i32 noundef %1543, i32 noundef %1544, i32 noundef %1550, i32 noundef %1560, i32 noundef %1568, i32 noundef %1581)
  %1582 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %5, i32 0, i32 30
  %1583 = load i32, ptr %1582, align 8, !tbaa !64
  %1584 = icmp eq i32 %1583, 1
  br i1 %1584, label %1585, label %1615

1585:                                             ; preds = %1580
  %1586 = load ptr, ptr %4, align 8, !tbaa !5
  %1587 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %1586, i32 0, i32 6
  %1588 = load i32, ptr %1587, align 1, !tbaa !16
  %1589 = and i32 %1588, 2048
  %1590 = icmp eq i32 %1589, 0
  br i1 %1590, label %1591, label %1614

1591:                                             ; preds = %1585
  %1592 = load i8, ptr %25, align 1, !tbaa !11
  %1593 = sext i8 %1592 to i32
  %1594 = icmp eq i32 %1593, 0
  br i1 %1594, label %1595, label %1614

1595:                                             ; preds = %1591
  %1596 = load ptr, ptr %4, align 8, !tbaa !5
  %1597 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %1596, i32 0, i32 8
  %1598 = getelementptr inbounds [3 x i8], ptr %1597, i64 0, i64 0
  %1599 = call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef %1598)
  %1600 = icmp eq i32 2, %1599
  br i1 %1600, label %1601, label %1614

1601:                                             ; preds = %1595
  call void @llvm.lifetime.start.p0(i64 4, ptr %39) #6
  %1602 = load ptr, ptr %20, align 8, !tbaa !5
  %1603 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %1602, i32 0, i32 0
  %1604 = load i32, ptr %1603, align 1, !tbaa !40
  %1605 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %5, i32 0, i32 2
  %1606 = load i32, ptr %1605, align 8, !tbaa !55
  %1607 = mul i32 2, %1606
  %1608 = urem i32 %1604, %1607
  %1609 = mul i32 %1608, 2
  store i32 %1609, ptr %39, align 4, !tbaa !9
  %1610 = load ptr, ptr %3, align 8, !tbaa !5
  %1611 = load i32, ptr %39, align 4, !tbaa !9
  %1612 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 22
  %1613 = load i32, ptr %1612, align 4, !tbaa !27
  call void @libxsmm_generator_set_p_register_aarch64_sve(ptr noundef %1610, i32 noundef 3, i32 noundef %1611, i32 noundef %1613)
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #6
  br label %1614

1614:                                             ; preds = %1601, %1595, %1591, %1585
  br label %1615

1615:                                             ; preds = %1614, %1580
  br label %1616

1616:                                             ; preds = %1615, %1516
  br label %1626

1617:                                             ; preds = %1415, %1410
  %1618 = load ptr, ptr %3, align 8, !tbaa !5
  %1619 = load i32, ptr @libxsmm_ninit, align 4, !tbaa !9
  %1620 = icmp ult i32 1, %1619
  br i1 %1620, label %1621, label %1623

1621:                                             ; preds = %1617
  %1622 = load i32, ptr @libxsmm_verbosity, align 4, !tbaa !9
  br label %1624

1623:                                             ; preds = %1617
  br label %1624

1624:                                             ; preds = %1623, %1621
  %1625 = phi i32 [ %1622, %1621 ], [ 1, %1623 ]
  call void @libxsmm_handle_error(ptr noundef %1618, i32 noundef 90005, ptr noundef @__func__.libxsmm_generator_gemm_aarch64_kernel, ptr noundef @.str, i32 noundef 2130, i32 noundef %1625)
  store i32 1, ptr %27, align 4
  br label %2082

1626:                                             ; preds = %1616
  br label %1627

1627:                                             ; preds = %1626, %1409
  %1628 = load ptr, ptr %3, align 8, !tbaa !5
  %1629 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 5
  %1630 = load i32, ptr %1629, align 4, !tbaa !21
  %1631 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 24
  %1632 = load i32, ptr %1631, align 4, !tbaa !29
  %1633 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 5
  %1634 = load i32, ptr %1633, align 4, !tbaa !21
  %1635 = load i32, ptr %37, align 4, !tbaa !9
  %1636 = zext i32 %1635 to i64
  %1637 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %5, i32 0, i32 5
  %1638 = load i32, ptr %1637, align 4, !tbaa !56
  %1639 = zext i32 %1638 to i64
  %1640 = mul nsw i64 %1636, %1639
  call void @libxsmm_aarch64_instruction_alu_compute_imm64(ptr noundef %1628, i32 noundef 4096, i32 noundef %1630, i32 noundef %1632, i32 noundef %1634, i64 noundef %1640)
  %1641 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %5, i32 0, i32 30
  %1642 = load i32, ptr %1641, align 8, !tbaa !64
  %1643 = icmp eq i32 %1642, 1
  br i1 %1643, label %1644, label %1668

1644:                                             ; preds = %1627
  %1645 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %5, i32 0, i32 34
  %1646 = load i32, ptr %1645, align 8, !tbaa !65
  %1647 = icmp eq i32 %1646, 1
  br i1 %1647, label %1648, label %1668

1648:                                             ; preds = %1644
  %1649 = load ptr, ptr %3, align 8, !tbaa !5
  %1650 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 23
  %1651 = load i32, ptr %1650, align 4, !tbaa !28
  call void @libxsmm_generator_gemm_getval_stack_var_aarch64(ptr noundef %1649, i32 noundef 8, i32 noundef %1651)
  %1652 = load ptr, ptr %3, align 8, !tbaa !5
  %1653 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 23
  %1654 = load i32, ptr %1653, align 4, !tbaa !28
  %1655 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 24
  %1656 = load i32, ptr %1655, align 4, !tbaa !29
  %1657 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 23
  %1658 = load i32, ptr %1657, align 4, !tbaa !28
  %1659 = load i32, ptr %37, align 4, !tbaa !9
  %1660 = zext i32 %1659 to i64
  %1661 = add nsw i64 %1660, 7
  %1662 = sdiv i64 %1661, 8
  call void @libxsmm_aarch64_instruction_alu_compute_imm64(ptr noundef %1652, i32 noundef 4096, i32 noundef %1654, i32 noundef %1656, i32 noundef %1658, i64 noundef %1662)
  %1663 = load ptr, ptr %3, align 8, !tbaa !5
  %1664 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 24
  %1665 = load i32, ptr %1664, align 4, !tbaa !29
  %1666 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 23
  %1667 = load i32, ptr %1666, align 4, !tbaa !28
  call void @libxsmm_generator_gemm_setval_stack_var_aarch64(ptr noundef %1663, i32 noundef 8, i32 noundef %1665, i32 noundef %1667)
  br label %1668

1668:                                             ; preds = %1648, %1644, %1627
  %1669 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %5, i32 0, i32 29
  %1670 = load i32, ptr %1669, align 4, !tbaa !59
  %1671 = icmp eq i32 %1670, 1
  br i1 %1671, label %1676, label %1672

1672:                                             ; preds = %1668
  %1673 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %5, i32 0, i32 25
  %1674 = load i32, ptr %1673, align 4, !tbaa !60
  %1675 = icmp eq i32 %1674, 1
  br i1 %1675, label %1676, label %1705

1676:                                             ; preds = %1672, %1668
  %1677 = load ptr, ptr %3, align 8, !tbaa !5
  %1678 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 23
  %1679 = load i32, ptr %1678, align 4, !tbaa !28
  call void @libxsmm_generator_gemm_getval_stack_var_aarch64(ptr noundef %1677, i32 noundef 7, i32 noundef %1679)
  %1680 = load ptr, ptr %3, align 8, !tbaa !5
  %1681 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 23
  %1682 = load i32, ptr %1681, align 4, !tbaa !28
  %1683 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 24
  %1684 = load i32, ptr %1683, align 4, !tbaa !29
  %1685 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 23
  %1686 = load i32, ptr %1685, align 4, !tbaa !28
  %1687 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %5, i32 0, i32 29
  %1688 = load i32, ptr %1687, align 4, !tbaa !59
  %1689 = icmp eq i32 %1688, 1
  br i1 %1689, label %1690, label %1694

1690:                                             ; preds = %1676
  %1691 = load i32, ptr %37, align 4, !tbaa !9
  %1692 = zext i32 %1691 to i64
  %1693 = mul nsw i64 %1692, 4
  br label %1698

1694:                                             ; preds = %1676
  %1695 = load i32, ptr %37, align 4, !tbaa !9
  %1696 = zext i32 %1695 to i64
  %1697 = mul nsw i64 %1696, 2
  br label %1698

1698:                                             ; preds = %1694, %1690
  %1699 = phi i64 [ %1693, %1690 ], [ %1697, %1694 ]
  call void @libxsmm_aarch64_instruction_alu_compute_imm64(ptr noundef %1680, i32 noundef 4096, i32 noundef %1682, i32 noundef %1684, i32 noundef %1686, i64 noundef %1699)
  %1700 = load ptr, ptr %3, align 8, !tbaa !5
  %1701 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 24
  %1702 = load i32, ptr %1701, align 4, !tbaa !29
  %1703 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 23
  %1704 = load i32, ptr %1703, align 4, !tbaa !28
  call void @libxsmm_generator_gemm_setval_stack_var_aarch64(ptr noundef %1700, i32 noundef 7, i32 noundef %1702, i32 noundef %1704)
  br label %1705

1705:                                             ; preds = %1698, %1672
  %1706 = load ptr, ptr %20, align 8, !tbaa !5
  %1707 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %1706, i32 0, i32 6
  %1708 = load i32, ptr %1707, align 1, !tbaa !16
  %1709 = and i32 %1708, 65536
  %1710 = icmp ugt i32 %1709, 0
  br i1 %1710, label %1711, label %1769

1711:                                             ; preds = %1705
  %1712 = load ptr, ptr %3, align 8, !tbaa !5
  %1713 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 25
  %1714 = load i32, ptr %1713, align 4, !tbaa !34
  call void @libxsmm_aarch64_instruction_alu_set_imm64(ptr noundef %1712, i32 noundef %1714, i64 noundef 0)
  %1715 = load ptr, ptr %3, align 8, !tbaa !5
  %1716 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 1
  %1717 = load i32, ptr %1716, align 4, !tbaa !19
  %1718 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 26
  %1719 = load i32, ptr %1718, align 4, !tbaa !35
  call void @libxsmm_aarch64_instruction_alu_compute_imm12(ptr noundef %1715, i32 noundef 285212678, i32 noundef %1717, i32 noundef %1719, i32 noundef 0, i8 noundef zeroext 0)
  %1720 = load ptr, ptr %3, align 8, !tbaa !5
  %1721 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 13
  %1722 = load i32, ptr %1721, align 4, !tbaa !31
  %1723 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 14
  %1724 = load i32, ptr %1723, align 4, !tbaa !37
  call void @libxsmm_aarch64_instruction_alu_move(ptr noundef %1720, i32 noundef -1186988026, i32 noundef %1722, i32 noundef 63, i32 noundef 0, i32 noundef %1724)
  %1725 = load ptr, ptr %3, align 8, !tbaa !5
  call void @libxsmm_aarch64_instruction_register_jump_back_label(ptr noundef %1725, ptr noundef %6)
  %1726 = load ptr, ptr %3, align 8, !tbaa !5
  %1727 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 26
  %1728 = load i32, ptr %1727, align 4, !tbaa !35
  %1729 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 25
  %1730 = load i32, ptr %1729, align 4, !tbaa !34
  %1731 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 1
  %1732 = load i32, ptr %1731, align 4, !tbaa !19
  call void @libxsmm_aarch64_instruction_alu_move(ptr noundef %1726, i32 noundef -1201649661, i32 noundef %1728, i32 noundef %1730, i32 noundef 0, i32 noundef %1732)
  %1733 = load ptr, ptr %3, align 8, !tbaa !5
  %1734 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 1
  %1735 = load i32, ptr %1734, align 4, !tbaa !19
  %1736 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 22
  %1737 = load i32, ptr %1736, align 4, !tbaa !27
  %1738 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 1
  %1739 = load i32, ptr %1738, align 4, !tbaa !19
  %1740 = load i32, ptr %37, align 4, !tbaa !9
  %1741 = zext i32 %1740 to i64
  %1742 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %5, i32 0, i32 3
  %1743 = load i32, ptr %1742, align 4, !tbaa !66
  %1744 = zext i32 %1743 to i64
  %1745 = mul nsw i64 %1741, %1744
  %1746 = load i32, ptr %13, align 4, !tbaa !9
  %1747 = zext i32 %1746 to i64
  %1748 = mul nsw i64 %1745, %1747
  call void @libxsmm_aarch64_instruction_alu_compute_imm64(ptr noundef %1733, i32 noundef 4096, i32 noundef %1735, i32 noundef %1737, i32 noundef %1739, i64 noundef %1748)
  %1749 = load ptr, ptr %3, align 8, !tbaa !5
  %1750 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 26
  %1751 = load i32, ptr %1750, align 4, !tbaa !35
  %1752 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 25
  %1753 = load i32, ptr %1752, align 4, !tbaa !34
  %1754 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 1
  %1755 = load i32, ptr %1754, align 4, !tbaa !19
  call void @libxsmm_aarch64_instruction_alu_move(ptr noundef %1749, i32 noundef -1205843965, i32 noundef %1751, i32 noundef %1753, i32 noundef 0, i32 noundef %1755)
  %1756 = load ptr, ptr %3, align 8, !tbaa !5
  %1757 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 25
  %1758 = load i32, ptr %1757, align 4, !tbaa !34
  %1759 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 25
  %1760 = load i32, ptr %1759, align 4, !tbaa !34
  call void @libxsmm_aarch64_instruction_alu_compute_imm12(ptr noundef %1756, i32 noundef 285212678, i32 noundef %1758, i32 noundef %1760, i32 noundef 8, i8 noundef zeroext 0)
  %1761 = load ptr, ptr %3, align 8, !tbaa !5
  %1762 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 14
  %1763 = load i32, ptr %1762, align 4, !tbaa !37
  call void @libxsmm_generator_loop_footer_aarch64(ptr noundef %1761, ptr noundef %6, i32 noundef %1763, i32 noundef 1)
  %1764 = load ptr, ptr %3, align 8, !tbaa !5
  %1765 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 26
  %1766 = load i32, ptr %1765, align 4, !tbaa !35
  %1767 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 1
  %1768 = load i32, ptr %1767, align 4, !tbaa !19
  call void @libxsmm_aarch64_instruction_alu_compute_imm12(ptr noundef %1764, i32 noundef 285212678, i32 noundef %1766, i32 noundef %1768, i32 noundef 0, i8 noundef zeroext 0)
  br label %1786

1769:                                             ; preds = %1705
  %1770 = load ptr, ptr %3, align 8, !tbaa !5
  %1771 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 1
  %1772 = load i32, ptr %1771, align 4, !tbaa !19
  %1773 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 22
  %1774 = load i32, ptr %1773, align 4, !tbaa !27
  %1775 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 1
  %1776 = load i32, ptr %1775, align 4, !tbaa !19
  %1777 = load i32, ptr %37, align 4, !tbaa !9
  %1778 = zext i32 %1777 to i64
  %1779 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %5, i32 0, i32 3
  %1780 = load i32, ptr %1779, align 4, !tbaa !66
  %1781 = zext i32 %1780 to i64
  %1782 = mul nsw i64 %1778, %1781
  %1783 = load i32, ptr %13, align 4, !tbaa !9
  %1784 = zext i32 %1783 to i64
  %1785 = mul nsw i64 %1782, %1784
  call void @libxsmm_aarch64_instruction_alu_compute_imm64(ptr noundef %1770, i32 noundef 4096, i32 noundef %1772, i32 noundef %1774, i32 noundef %1776, i64 noundef %1785)
  br label %1786

1786:                                             ; preds = %1769, %1711
  %1787 = load ptr, ptr %3, align 8, !tbaa !5
  %1788 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 10
  %1789 = load i32, ptr %1788, align 4, !tbaa !24
  %1790 = load i32, ptr %37, align 4, !tbaa !9
  call void @libxsmm_generator_loop_footer_aarch64(ptr noundef %1787, ptr noundef %6, i32 noundef %1789, i32 noundef %1790)
  br label %1791

1791:                                             ; preds = %1786, %886, %871
  %1792 = load ptr, ptr %20, align 8, !tbaa !5
  %1793 = load ptr, ptr %3, align 8, !tbaa !5
  %1794 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %1793, i32 0, i32 6
  %1795 = load i32, ptr %1794, align 4, !tbaa !38
  %1796 = load i32, ptr %37, align 4, !tbaa !9
  %1797 = call i32 @libxsmm_generator_gemm_aarch64_update_m_blocking(ptr noundef %5, ptr noundef %1792, i32 noundef %1795, i32 noundef %1796)
  store i32 %1797, ptr %37, align 4, !tbaa !9
  br label %847, !llvm.loop !67

1798:                                             ; preds = %847
  %1799 = load ptr, ptr %3, align 8, !tbaa !5
  %1800 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 5
  %1801 = load i32, ptr %1800, align 4, !tbaa !21
  %1802 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 24
  %1803 = load i32, ptr %1802, align 4, !tbaa !29
  %1804 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 5
  %1805 = load i32, ptr %1804, align 4, !tbaa !21
  %1806 = load i32, ptr %34, align 4, !tbaa !9
  %1807 = zext i32 %1806 to i64
  %1808 = load ptr, ptr %20, align 8, !tbaa !5
  %1809 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %1808, i32 0, i32 5
  %1810 = load i32, ptr %1809, align 1, !tbaa !54
  %1811 = zext i32 %1810 to i64
  %1812 = mul nsw i64 %1807, %1811
  %1813 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %5, i32 0, i32 5
  %1814 = load i32, ptr %1813, align 4, !tbaa !56
  %1815 = zext i32 %1814 to i64
  %1816 = mul nsw i64 %1812, %1815
  %1817 = load ptr, ptr %20, align 8, !tbaa !5
  %1818 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %1817, i32 0, i32 0
  %1819 = load i32, ptr %1818, align 1, !tbaa !40
  %1820 = zext i32 %1819 to i64
  %1821 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %5, i32 0, i32 5
  %1822 = load i32, ptr %1821, align 4, !tbaa !56
  %1823 = zext i32 %1822 to i64
  %1824 = mul nsw i64 %1820, %1823
  %1825 = sub nsw i64 %1816, %1824
  call void @libxsmm_aarch64_instruction_alu_compute_imm64(ptr noundef %1799, i32 noundef 4096, i32 noundef %1801, i32 noundef %1803, i32 noundef %1805, i64 noundef %1825)
  %1826 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %5, i32 0, i32 30
  %1827 = load i32, ptr %1826, align 8, !tbaa !64
  %1828 = icmp eq i32 %1827, 1
  br i1 %1828, label %1829, label %1864

1829:                                             ; preds = %1798
  %1830 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %5, i32 0, i32 34
  %1831 = load i32, ptr %1830, align 8, !tbaa !65
  %1832 = icmp eq i32 %1831, 1
  br i1 %1832, label %1833, label %1864

1833:                                             ; preds = %1829
  %1834 = load ptr, ptr %3, align 8, !tbaa !5
  %1835 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 23
  %1836 = load i32, ptr %1835, align 4, !tbaa !28
  call void @libxsmm_generator_gemm_getval_stack_var_aarch64(ptr noundef %1834, i32 noundef 8, i32 noundef %1836)
  %1837 = load ptr, ptr %3, align 8, !tbaa !5
  %1838 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 23
  %1839 = load i32, ptr %1838, align 4, !tbaa !28
  %1840 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 24
  %1841 = load i32, ptr %1840, align 4, !tbaa !29
  %1842 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 23
  %1843 = load i32, ptr %1842, align 4, !tbaa !28
  %1844 = load i32, ptr %34, align 4, !tbaa !9
  %1845 = zext i32 %1844 to i64
  %1846 = load ptr, ptr %4, align 8, !tbaa !5
  %1847 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %1846, i32 0, i32 30
  %1848 = load i32, ptr %1847, align 1, !tbaa !69
  %1849 = zext i32 %1848 to i64
  %1850 = mul nsw i64 %1845, %1849
  %1851 = sdiv i64 %1850, 8
  %1852 = load ptr, ptr %20, align 8, !tbaa !5
  %1853 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %1852, i32 0, i32 0
  %1854 = load i32, ptr %1853, align 1, !tbaa !40
  %1855 = zext i32 %1854 to i64
  %1856 = add nsw i64 %1855, 7
  %1857 = sdiv i64 %1856, 8
  %1858 = sub nsw i64 %1851, %1857
  call void @libxsmm_aarch64_instruction_alu_compute_imm64(ptr noundef %1837, i32 noundef 4096, i32 noundef %1839, i32 noundef %1841, i32 noundef %1843, i64 noundef %1858)
  %1859 = load ptr, ptr %3, align 8, !tbaa !5
  %1860 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 24
  %1861 = load i32, ptr %1860, align 4, !tbaa !29
  %1862 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 23
  %1863 = load i32, ptr %1862, align 4, !tbaa !28
  call void @libxsmm_generator_gemm_setval_stack_var_aarch64(ptr noundef %1859, i32 noundef 8, i32 noundef %1861, i32 noundef %1863)
  br label %1864

1864:                                             ; preds = %1833, %1829, %1798
  %1865 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %5, i32 0, i32 29
  %1866 = load i32, ptr %1865, align 4, !tbaa !59
  %1867 = icmp eq i32 %1866, 1
  br i1 %1867, label %1872, label %1868

1868:                                             ; preds = %1864
  %1869 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %5, i32 0, i32 25
  %1870 = load i32, ptr %1869, align 4, !tbaa !60
  %1871 = icmp eq i32 %1870, 1
  br i1 %1871, label %1872, label %1905

1872:                                             ; preds = %1868, %1864
  %1873 = load ptr, ptr %3, align 8, !tbaa !5
  %1874 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 23
  %1875 = load i32, ptr %1874, align 4, !tbaa !28
  call void @libxsmm_generator_gemm_getval_stack_var_aarch64(ptr noundef %1873, i32 noundef 7, i32 noundef %1875)
  %1876 = load ptr, ptr %3, align 8, !tbaa !5
  %1877 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 23
  %1878 = load i32, ptr %1877, align 4, !tbaa !28
  %1879 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 24
  %1880 = load i32, ptr %1879, align 4, !tbaa !29
  %1881 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 23
  %1882 = load i32, ptr %1881, align 4, !tbaa !28
  %1883 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %5, i32 0, i32 29
  %1884 = load i32, ptr %1883, align 4, !tbaa !59
  %1885 = icmp eq i32 %1884, 1
  br i1 %1885, label %1886, label %1892

1886:                                             ; preds = %1872
  %1887 = load ptr, ptr %20, align 8, !tbaa !5
  %1888 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %1887, i32 0, i32 0
  %1889 = load i32, ptr %1888, align 1, !tbaa !40
  %1890 = zext i32 %1889 to i64
  %1891 = mul nsw i64 %1890, 4
  br label %1898

1892:                                             ; preds = %1872
  %1893 = load ptr, ptr %20, align 8, !tbaa !5
  %1894 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %1893, i32 0, i32 0
  %1895 = load i32, ptr %1894, align 1, !tbaa !40
  %1896 = zext i32 %1895 to i64
  %1897 = mul nsw i64 %1896, 2
  br label %1898

1898:                                             ; preds = %1892, %1886
  %1899 = phi i64 [ %1891, %1886 ], [ %1897, %1892 ]
  call void @libxsmm_aarch64_instruction_alu_compute_imm64(ptr noundef %1876, i32 noundef 4097, i32 noundef %1878, i32 noundef %1880, i32 noundef %1882, i64 noundef %1899)
  %1900 = load ptr, ptr %3, align 8, !tbaa !5
  %1901 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 24
  %1902 = load i32, ptr %1901, align 4, !tbaa !29
  %1903 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 23
  %1904 = load i32, ptr %1903, align 4, !tbaa !28
  call void @libxsmm_generator_gemm_setval_stack_var_aarch64(ptr noundef %1900, i32 noundef 7, i32 noundef %1902, i32 noundef %1904)
  br label %1905

1905:                                             ; preds = %1898, %1868
  %1906 = load ptr, ptr %20, align 8, !tbaa !5
  %1907 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %1906, i32 0, i32 6
  %1908 = load i32, ptr %1907, align 1, !tbaa !16
  %1909 = and i32 %1908, 65536
  %1910 = icmp ugt i32 %1909, 0
  br i1 %1910, label %1911, label %1945

1911:                                             ; preds = %1905
  %1912 = load ptr, ptr %3, align 8, !tbaa !5
  %1913 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 25
  %1914 = load i32, ptr %1913, align 4, !tbaa !34
  call void @libxsmm_aarch64_instruction_alu_set_imm64(ptr noundef %1912, i32 noundef %1914, i64 noundef 0)
  %1915 = load ptr, ptr %3, align 8, !tbaa !5
  %1916 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 1
  %1917 = load i32, ptr %1916, align 4, !tbaa !19
  %1918 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 26
  %1919 = load i32, ptr %1918, align 4, !tbaa !35
  call void @libxsmm_aarch64_instruction_alu_compute_imm12(ptr noundef %1915, i32 noundef 285212678, i32 noundef %1917, i32 noundef %1919, i32 noundef 0, i8 noundef zeroext 0)
  %1920 = load ptr, ptr %3, align 8, !tbaa !5
  %1921 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 3
  %1922 = load i32, ptr %1921, align 4, !tbaa !20
  %1923 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 27
  %1924 = load i32, ptr %1923, align 4, !tbaa !36
  call void @libxsmm_aarch64_instruction_alu_compute_imm12(ptr noundef %1920, i32 noundef 285212678, i32 noundef %1922, i32 noundef %1924, i32 noundef 0, i8 noundef zeroext 0)
  %1925 = load ptr, ptr %3, align 8, !tbaa !5
  %1926 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 13
  %1927 = load i32, ptr %1926, align 4, !tbaa !31
  %1928 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 14
  %1929 = load i32, ptr %1928, align 4, !tbaa !37
  call void @libxsmm_aarch64_instruction_alu_move(ptr noundef %1925, i32 noundef -1186988026, i32 noundef %1927, i32 noundef 63, i32 noundef 0, i32 noundef %1929)
  %1930 = load ptr, ptr %3, align 8, !tbaa !5
  call void @libxsmm_aarch64_instruction_register_jump_back_label(ptr noundef %1930, ptr noundef %6)
  %1931 = load ptr, ptr %3, align 8, !tbaa !5
  %1932 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 26
  %1933 = load i32, ptr %1932, align 4, !tbaa !35
  %1934 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 25
  %1935 = load i32, ptr %1934, align 4, !tbaa !34
  %1936 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 1
  %1937 = load i32, ptr %1936, align 4, !tbaa !19
  call void @libxsmm_aarch64_instruction_alu_move(ptr noundef %1931, i32 noundef -1201649661, i32 noundef %1933, i32 noundef %1935, i32 noundef 0, i32 noundef %1937)
  %1938 = load ptr, ptr %3, align 8, !tbaa !5
  %1939 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 27
  %1940 = load i32, ptr %1939, align 4, !tbaa !36
  %1941 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 25
  %1942 = load i32, ptr %1941, align 4, !tbaa !34
  %1943 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 3
  %1944 = load i32, ptr %1943, align 4, !tbaa !20
  call void @libxsmm_aarch64_instruction_alu_move(ptr noundef %1938, i32 noundef -1201649661, i32 noundef %1940, i32 noundef %1942, i32 noundef 0, i32 noundef %1944)
  br label %1945

1945:                                             ; preds = %1911, %1905
  %1946 = load ptr, ptr %3, align 8, !tbaa !5
  %1947 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 1
  %1948 = load i32, ptr %1947, align 4, !tbaa !19
  %1949 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 22
  %1950 = load i32, ptr %1949, align 4, !tbaa !27
  %1951 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 1
  %1952 = load i32, ptr %1951, align 4, !tbaa !19
  %1953 = load ptr, ptr %20, align 8, !tbaa !5
  %1954 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %1953, i32 0, i32 0
  %1955 = load i32, ptr %1954, align 1, !tbaa !40
  %1956 = zext i32 %1955 to i64
  %1957 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %5, i32 0, i32 3
  %1958 = load i32, ptr %1957, align 4, !tbaa !66
  %1959 = zext i32 %1958 to i64
  %1960 = mul nsw i64 %1956, %1959
  %1961 = load i32, ptr %13, align 4, !tbaa !9
  %1962 = zext i32 %1961 to i64
  %1963 = mul nsw i64 %1960, %1962
  call void @libxsmm_aarch64_instruction_alu_compute_imm64(ptr noundef %1946, i32 noundef 4097, i32 noundef %1948, i32 noundef %1950, i32 noundef %1952, i64 noundef %1963)
  %1964 = load ptr, ptr %20, align 8, !tbaa !5
  %1965 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %1964, i32 0, i32 6
  %1966 = load i32, ptr %1965, align 1, !tbaa !16
  %1967 = and i32 %1966, 2
  %1968 = icmp ugt i32 %1967, 0
  br i1 %1968, label %1969, label %1989

1969:                                             ; preds = %1945
  %1970 = load ptr, ptr %20, align 8, !tbaa !5
  %1971 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %1970, i32 0, i32 6
  %1972 = load i32, ptr %1971, align 1, !tbaa !16
  %1973 = and i32 %1972, 4096
  %1974 = icmp eq i32 %1973, 0
  br i1 %1974, label %1975, label %1989

1975:                                             ; preds = %1969
  %1976 = load ptr, ptr %3, align 8, !tbaa !5
  %1977 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 3
  %1978 = load i32, ptr %1977, align 4, !tbaa !20
  %1979 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 23
  %1980 = load i32, ptr %1979, align 4, !tbaa !28
  %1981 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 3
  %1982 = load i32, ptr %1981, align 4, !tbaa !20
  %1983 = load i32, ptr %34, align 4, !tbaa !9
  %1984 = zext i32 %1983 to i64
  %1985 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %5, i32 0, i32 3
  %1986 = load i32, ptr %1985, align 4, !tbaa !66
  %1987 = zext i32 %1986 to i64
  %1988 = mul nsw i64 %1984, %1987
  call void @libxsmm_aarch64_instruction_alu_compute_imm64(ptr noundef %1976, i32 noundef 4096, i32 noundef %1978, i32 noundef %1980, i32 noundef %1982, i64 noundef %1988)
  br label %2038

1989:                                             ; preds = %1969, %1945
  %1990 = load ptr, ptr %20, align 8, !tbaa !5
  %1991 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %1990, i32 0, i32 6
  %1992 = load i32, ptr %1991, align 1, !tbaa !16
  %1993 = and i32 %1992, 2
  %1994 = icmp ugt i32 %1993, 0
  br i1 %1994, label %1995, label %2018

1995:                                             ; preds = %1989
  %1996 = load ptr, ptr %20, align 8, !tbaa !5
  %1997 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %1996, i32 0, i32 6
  %1998 = load i32, ptr %1997, align 1, !tbaa !16
  %1999 = and i32 %1998, 4096
  %2000 = icmp ugt i32 %1999, 0
  br i1 %2000, label %2001, label %2018

2001:                                             ; preds = %1995
  %2002 = load ptr, ptr %3, align 8, !tbaa !5
  %2003 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 3
  %2004 = load i32, ptr %2003, align 4, !tbaa !20
  %2005 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 23
  %2006 = load i32, ptr %2005, align 4, !tbaa !28
  %2007 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 3
  %2008 = load i32, ptr %2007, align 4, !tbaa !20
  %2009 = load i32, ptr %34, align 4, !tbaa !9
  %2010 = zext i32 %2009 to i64
  %2011 = load i32, ptr %13, align 4, !tbaa !9
  %2012 = zext i32 %2011 to i64
  %2013 = mul nsw i64 %2010, %2012
  %2014 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %5, i32 0, i32 3
  %2015 = load i32, ptr %2014, align 4, !tbaa !66
  %2016 = zext i32 %2015 to i64
  %2017 = mul nsw i64 %2013, %2016
  call void @libxsmm_aarch64_instruction_alu_compute_imm64(ptr noundef %2002, i32 noundef 4096, i32 noundef %2004, i32 noundef %2006, i32 noundef %2008, i64 noundef %2017)
  br label %2037

2018:                                             ; preds = %1995, %1989
  %2019 = load ptr, ptr %3, align 8, !tbaa !5
  %2020 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 3
  %2021 = load i32, ptr %2020, align 4, !tbaa !20
  %2022 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 23
  %2023 = load i32, ptr %2022, align 4, !tbaa !28
  %2024 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 3
  %2025 = load i32, ptr %2024, align 4, !tbaa !20
  %2026 = load i32, ptr %34, align 4, !tbaa !9
  %2027 = zext i32 %2026 to i64
  %2028 = load ptr, ptr %20, align 8, !tbaa !5
  %2029 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %2028, i32 0, i32 4
  %2030 = load i32, ptr %2029, align 1, !tbaa !49
  %2031 = zext i32 %2030 to i64
  %2032 = mul nsw i64 %2027, %2031
  %2033 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %5, i32 0, i32 3
  %2034 = load i32, ptr %2033, align 4, !tbaa !66
  %2035 = zext i32 %2034 to i64
  %2036 = mul nsw i64 %2032, %2035
  call void @libxsmm_aarch64_instruction_alu_compute_imm64(ptr noundef %2019, i32 noundef 4096, i32 noundef %2021, i32 noundef %2023, i32 noundef %2025, i64 noundef %2036)
  br label %2037

2037:                                             ; preds = %2018, %2001
  br label %2038

2038:                                             ; preds = %2037, %1975
  %2039 = load ptr, ptr %20, align 8, !tbaa !5
  %2040 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %2039, i32 0, i32 6
  %2041 = load i32, ptr %2040, align 1, !tbaa !16
  %2042 = and i32 %2041, 65536
  %2043 = icmp ugt i32 %2042, 0
  br i1 %2043, label %2044, label %2077

2044:                                             ; preds = %2038
  %2045 = load ptr, ptr %3, align 8, !tbaa !5
  %2046 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 26
  %2047 = load i32, ptr %2046, align 4, !tbaa !35
  %2048 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 25
  %2049 = load i32, ptr %2048, align 4, !tbaa !34
  %2050 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 1
  %2051 = load i32, ptr %2050, align 4, !tbaa !19
  call void @libxsmm_aarch64_instruction_alu_move(ptr noundef %2045, i32 noundef -1205843965, i32 noundef %2047, i32 noundef %2049, i32 noundef 0, i32 noundef %2051)
  %2052 = load ptr, ptr %3, align 8, !tbaa !5
  %2053 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 27
  %2054 = load i32, ptr %2053, align 4, !tbaa !36
  %2055 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 25
  %2056 = load i32, ptr %2055, align 4, !tbaa !34
  %2057 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 3
  %2058 = load i32, ptr %2057, align 4, !tbaa !20
  call void @libxsmm_aarch64_instruction_alu_move(ptr noundef %2052, i32 noundef -1205843965, i32 noundef %2054, i32 noundef %2056, i32 noundef 0, i32 noundef %2058)
  %2059 = load ptr, ptr %3, align 8, !tbaa !5
  %2060 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 25
  %2061 = load i32, ptr %2060, align 4, !tbaa !34
  %2062 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 25
  %2063 = load i32, ptr %2062, align 4, !tbaa !34
  call void @libxsmm_aarch64_instruction_alu_compute_imm12(ptr noundef %2059, i32 noundef 285212678, i32 noundef %2061, i32 noundef %2063, i32 noundef 8, i8 noundef zeroext 0)
  %2064 = load ptr, ptr %3, align 8, !tbaa !5
  %2065 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 14
  %2066 = load i32, ptr %2065, align 4, !tbaa !37
  call void @libxsmm_generator_loop_footer_aarch64(ptr noundef %2064, ptr noundef %6, i32 noundef %2066, i32 noundef 1)
  %2067 = load ptr, ptr %3, align 8, !tbaa !5
  %2068 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 26
  %2069 = load i32, ptr %2068, align 4, !tbaa !35
  %2070 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 1
  %2071 = load i32, ptr %2070, align 4, !tbaa !19
  call void @libxsmm_aarch64_instruction_alu_compute_imm12(ptr noundef %2067, i32 noundef 285212678, i32 noundef %2069, i32 noundef %2071, i32 noundef 0, i8 noundef zeroext 0)
  %2072 = load ptr, ptr %3, align 8, !tbaa !5
  %2073 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 27
  %2074 = load i32, ptr %2073, align 4, !tbaa !36
  %2075 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 3
  %2076 = load i32, ptr %2075, align 4, !tbaa !20
  call void @libxsmm_aarch64_instruction_alu_compute_imm12(ptr noundef %2072, i32 noundef 285212678, i32 noundef %2074, i32 noundef %2076, i32 noundef 0, i8 noundef zeroext 0)
  br label %2077

2077:                                             ; preds = %2044, %2038
  %2078 = load ptr, ptr %3, align 8, !tbaa !5
  %2079 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 11
  %2080 = load i32, ptr %2079, align 4, !tbaa !25
  %2081 = load i32, ptr %34, align 4, !tbaa !9
  call void @libxsmm_generator_loop_footer_aarch64(ptr noundef %2078, ptr noundef %6, i32 noundef %2080, i32 noundef %2081)
  store i32 0, ptr %27, align 4
  br label %2082

2082:                                             ; preds = %2077, %1624, %1107, %863
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #6
  %2083 = load i32, ptr %27, align 4
  switch i32 %2083, label %2098 [
    i32 0, label %2084
  ]

2084:                                             ; preds = %2082
  br label %787, !llvm.loop !70

2085:                                             ; preds = %787
  %2086 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %5, i32 0, i32 35
  %2087 = load i32, ptr %2086, align 4, !tbaa !53
  %2088 = icmp ugt i32 %2087, 0
  br i1 %2088, label %2089, label %2095

2089:                                             ; preds = %2085
  %2090 = load i32, ptr %14, align 4, !tbaa !9
  %2091 = load ptr, ptr %20, align 8, !tbaa !5
  %2092 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %2091, i32 0, i32 5
  store i32 %2090, ptr %2092, align 1, !tbaa !54
  %2093 = load ptr, ptr %3, align 8, !tbaa !5
  %2094 = load ptr, ptr %20, align 8, !tbaa !5
  call void @libxsmm_generator_gemm_vnni_store_C_from_scratch_aarch64(ptr noundef %2093, ptr noundef %6, ptr noundef %7, ptr noundef %5, ptr noundef %2094)
  br label %2095

2095:                                             ; preds = %2089, %2085
  %2096 = load ptr, ptr %3, align 8, !tbaa !5
  call void @libxsmm_generator_gemm_destroy_stack_frame_aarch64(ptr noundef %2096)
  %2097 = load ptr, ptr %3, align 8, !tbaa !5
  call void @libxsmm_aarch64_instruction_close_stream(ptr noundef %2097, i16 noundef zeroext 3599)
  store i32 0, ptr %27, align 4
  br label %2098

2098:                                             ; preds = %2095, %2082, %445, %396, %349, %322
  call void @llvm.lifetime.end.p0(i64 1, ptr %26) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %25) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #6
  call void @llvm.lifetime.end.p0(i64 95, ptr %21) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #6
  call void @llvm.lifetime.end.p0(i64 132, ptr %7) #6
  call void @llvm.lifetime.end.p0(i64 2052, ptr %6) #6
  call void @llvm.lifetime.end.p0(i64 688, ptr %5) #6
  %2099 = load i32, ptr %27, align 4
  switch i32 %2099, label %2101 [
    i32 0, label %2100
    i32 1, label %2100
  ]

2100:                                             ; preds = %2098, %2098
  ret void

2101:                                             ; preds = %2098
  unreachable
}

declare void @libxsmm_reset_aarch64_gp_reg_mapping(ptr noundef) #2

declare void @libxsmm_reset_loop_label_tracker(ptr noundef) #2

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

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

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

declare i32 @LIBXSMM_GEMM_GETENUM_ABC_COMMON_PREC(ptr noundef) #2

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

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

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

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

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

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

declare i32 @libxsmm_generator_gemm_aarch64_get_initial_m_blocking(ptr noundef, ptr noundef, i32 noundef) #2

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

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

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

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

declare void @libxsmm_generator_load_2dregblock_mmla_aarch64_sve(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, i8 noundef zeroext) #2

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

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

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

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

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

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

declare void @libxsmm_generator_store_2dregblock_mmla_aarch64_sve(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, i8 noundef zeroext) #2

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

declare i32 @libxsmm_generator_gemm_aarch64_update_m_blocking(ptr noundef, ptr noundef, i32 noundef, i32 noundef) #2

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

declare void @libxsmm_generator_gemm_destroy_stack_frame_aarch64(ptr noundef) #2

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #2 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #4 = { 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 #5 = { 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 #6 = { nounwind }
attributes #7 = { 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 = !{!7, !7, i64 0}
!12 = !{!13, !10, i64 8}
!13 = !{!"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, !14, i64 33, !14, i64 41, !7, i64 49, !10, i64 50, !10, i64 54, !10, i64 58, !15, i64 62, !15, i64 64, !7, i64 66, !7, i64 67, !7, i64 68, !7, i64 69, !15, i64 70, !15, i64 72, !15, i64 74, !15, i64 76, !15, i64 78, !15, i64 80, !10, i64 82, !10, i64 86, !10, i64 90, !7, i64 94}
!14 = !{!"long long", !7, i64 0}
!15 = !{!"short", !7, i64 0}
!16 = !{!13, !10, i64 24}
!17 = !{!18, !10, i64 0}
!18 = !{!"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}
!19 = !{!18, !10, i64 4}
!20 = !{!18, !10, i64 12}
!21 = !{!18, !10, i64 20}
!22 = !{!18, !10, i64 24}
!23 = !{!18, !10, i64 32}
!24 = !{!18, !10, i64 40}
!25 = !{!18, !10, i64 44}
!26 = !{!18, !10, i64 48}
!27 = !{!18, !10, i64 88}
!28 = !{!18, !10, i64 92}
!29 = !{!18, !10, i64 96}
!30 = !{!18, !10, i64 80}
!31 = !{!18, !10, i64 52}
!32 = !{!18, !10, i64 28}
!33 = !{!18, !10, i64 36}
!34 = !{!18, !10, i64 100}
!35 = !{!18, !10, i64 104}
!36 = !{!18, !10, i64 108}
!37 = !{!18, !10, i64 56}
!38 = !{!39, !10, i64 28}
!39 = !{!"libxsmm_generated_code", !6, i64 0, !10, i64 8, !10, i64 12, !10, i64 16, !10, i64 20, !10, i64 24, !10, i64 28}
!40 = !{!13, !10, i64 0}
!41 = !{i64 0, i64 4, !9, i64 4, i64 4, !9, i64 8, i64 4, !9, i64 12, i64 4, !9, i64 16, i64 4, !9, i64 20, i64 4, !9, i64 24, i64 4, !9, i64 28, i64 1, !11, i64 29, i64 3, !11, i64 32, i64 1, !11, i64 33, i64 8, !42, i64 41, i64 8, !42, i64 49, i64 1, !11, i64 50, i64 4, !9, i64 54, i64 4, !9, i64 58, i64 4, !9, i64 62, i64 2, !43, i64 64, i64 2, !43, i64 66, i64 1, !11, i64 67, i64 1, !11, i64 68, i64 1, !11, i64 69, i64 1, !11, i64 70, i64 2, !43, i64 72, i64 2, !43, i64 74, i64 2, !43, i64 76, i64 2, !43, i64 78, i64 2, !43, i64 80, i64 2, !43, i64 82, i64 4, !9, i64 86, i64 4, !9, i64 90, i64 4, !9, i64 94, i64 1, !11}
!42 = !{!14, !14, i64 0}
!43 = !{!15, !15, i64 0}
!44 = !{!13, !10, i64 12}
!45 = !{!46, !10, i64 660}
!46 = !{!"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, !47, 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}
!47 = !{!"libxsmm_tile_config", !7, i64 0, !15, i64 2, !7, i64 4, !15, i64 6, !7, i64 8, !15, i64 10, !7, i64 12, !15, i64 14, !7, i64 16, !15, i64 18, !7, i64 20, !15, i64 22, !7, i64 24, !15, i64 26, !7, i64 28, !15, i64 30, !7, i64 32}
!48 = !{!46, !10, i64 668}
!49 = !{!13, !10, i64 16}
!50 = !{!46, !10, i64 672}
!51 = !{!46, !10, i64 676}
!52 = !{!13, !7, i64 28}
!53 = !{!46, !10, i64 140}
!54 = !{!13, !10, i64 20}
!55 = !{!46, !10, i64 8}
!56 = !{!46, !10, i64 20}
!57 = !{!13, !10, i64 4}
!58 = !{!46, !10, i64 4}
!59 = !{!46, !10, i64 116}
!60 = !{!46, !10, i64 100}
!61 = !{!13, !14, i64 33}
!62 = !{!13, !14, i64 41}
!63 = !{!46, !10, i64 132}
!64 = !{!46, !10, i64 120}
!65 = !{!46, !10, i64 136}
!66 = !{!46, !10, i64 12}
!67 = distinct !{!67, !68}
!68 = !{!"llvm.loop.mustprogress"}
!69 = !{!13, !10, i64 90}
!70 = distinct !{!70, !68}


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

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

@.str = external hidden unnamed_addr constant [78 x i8], align 1
@libxsmm_ninit = external local_unnamed_addr global i32, align 4
@libxsmm_verbosity = external local_unnamed_addr global i32, align 4
@__func__.libxsmm_generator_gemm_aarch64_kernel = external hidden unnamed_addr constant [38 x i8], align 1

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

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

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

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

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

; Function Attrs: mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #2

declare i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef) local_unnamed_addr #1

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

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

declare i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef) local_unnamed_addr #1

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

declare i32 @libxsmm_cpuid_arm_use_bfdot() local_unnamed_addr #1

declare i32 @libxsmm_cpuid_arm_use_i8dot() local_unnamed_addr #1

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

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

; Function Attrs: nounwind uwtable
define dso_local void @libxsmm_generator_gemm_aarch64_kernel(ptr noundef %0, ptr noundef %1) local_unnamed_addr #3 {
  %3 = alloca %struct.libxsmm_micro_kernel_config, align 8
  %4 = alloca %struct.libxsmm_loop_label_tracker_struct, align 4
  %5 = alloca %struct.libxsmm_gp_reg_mapping_struct, align 4
  %6 = alloca [2 x i32], align 8
  %7 = alloca [2 x i32], align 8
  %8 = alloca %struct.libxsmm_gemm_descriptor, align 4
  call void @llvm.lifetime.start.p0(i64 688, ptr nonnull %3) #4
  call void @llvm.lifetime.start.p0(i64 2052, ptr nonnull %4) #4
  call void @llvm.lifetime.start.p0(i64 132, ptr nonnull %5) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %6) #4
  store i64 0, ptr %6, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %7) #4
  store i64 0, ptr %7, align 8
  %9 = getelementptr inbounds i8, ptr %1, i64 29
  %10 = tail call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef nonnull %9) #4
  %11 = icmp eq i32 %10, 1
  br i1 %11, label %12, label %15

12:                                               ; preds = %2
  %13 = tail call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef nonnull %9) #4
  %14 = icmp eq i32 %13, 12
  br label %15

15:                                               ; preds = %12, %2
  %16 = phi i1 [ false, %2 ], [ %14, %12 ]
  call void @llvm.lifetime.start.p0(i64 95, ptr nonnull %8) #4
  %17 = tail call i32 @libxsmm_cpuid_arm_use_bfdot() #4
  %18 = tail call i32 @libxsmm_cpuid_arm_use_i8dot() #4
  %19 = tail call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef nonnull %9) #4
  %20 = icmp eq i32 %19, 2
  br i1 %20, label %21, label %29

21:                                               ; preds = %15
  %22 = getelementptr inbounds i8, ptr %1, i64 8
  %23 = load i32, ptr %22, align 1, !tbaa !5
  %24 = and i32 %23, 3
  %.not = icmp eq i32 %24, 0
  %.not498599 = icmp eq i32 %17, 0
  %.not498 = select i1 %.not, i1 %.not498599, i1 false
  br i1 %.not498, label %29, label %25

25:                                               ; preds = %21
  %26 = getelementptr inbounds i8, ptr %1, i64 24
  %27 = load i32, ptr %26, align 1, !tbaa !12
  %28 = and i32 %27, 6147
  %or.cond549 = icmp eq i32 %28, 0
  %spec.select592 = select i1 %or.cond549, i32 1, i32 2
  br label %29

29:                                               ; preds = %25, %21, %15
  %.1488 = phi i32 [ 0, %21 ], [ %17, %15 ], [ 1, %25 ]
  %.1485 = phi i8 [ 1, %21 ], [ 0, %15 ], [ 0, %25 ]
  %.0477 = phi i32 [ 4, %21 ], [ 1, %15 ], [ %spec.select592, %25 ]
  %30 = tail call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef nonnull %9) #4
  %31 = icmp eq i32 %30, 12
  %.not500 = icmp eq i32 %18, 0
  %. = select i1 %.not500, i32 8, i32 4
  %.550 = zext i1 %.not500 to i8
  %.3 = select i1 %31, i8 %.550, i8 %.1485
  %.1478 = select i1 %31, i32 %., i32 %.0477
  %32 = getelementptr inbounds i8, ptr %1, i64 24
  %33 = load i32, ptr %32, align 1, !tbaa !12
  %34 = and i32 %33, 6147
  %or.cond556 = icmp eq i32 %34, 0
  br i1 %or.cond556, label %35, label %45

35:                                               ; preds = %29
  %36 = getelementptr inbounds i8, ptr %1, i64 8
  %37 = load i32, ptr %36, align 1, !tbaa !5
  %38 = add nsw i32 %.1478, -1
  %39 = and i32 %37, %38
  %40 = icmp eq i32 %39, 0
  %41 = icmp eq i32 %.1488, 0
  %or.cond = select i1 %40, i1 %41, i1 false
  br i1 %or.cond, label %42, label %45

42:                                               ; preds = %35
  %43 = tail call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef nonnull %9) #4
  %44 = icmp eq i32 %43, 2
  %.pre = load i32, ptr %32, align 1, !tbaa !12
  br label %45

45:                                               ; preds = %42, %35, %29
  %46 = phi i32 [ %33, %35 ], [ %33, %29 ], [ %.pre, %42 ]
  %47 = phi i1 [ false, %35 ], [ false, %29 ], [ %44, %42 ]
  %48 = and i32 %46, 6147
  %or.cond562 = icmp eq i32 %48, 1
  br i1 %or.cond562, label %49, label %58

49:                                               ; preds = %45
  %50 = getelementptr inbounds i8, ptr %1, i64 8
  %51 = load i32, ptr %50, align 1, !tbaa !5
  %52 = add nsw i32 %.1478, -1
  %53 = and i32 %51, %52
  %54 = icmp eq i32 %53, 0
  br i1 %54, label %55, label %58

55:                                               ; preds = %49
  %56 = tail call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef nonnull %9) #4
  %57 = icmp eq i32 %56, 2
  %.pre618 = load i32, ptr %32, align 1, !tbaa !12
  br label %58

58:                                               ; preds = %55, %49, %45
  %59 = phi i32 [ %46, %49 ], [ %46, %45 ], [ %.pre618, %55 ]
  %60 = phi i1 [ false, %49 ], [ false, %45 ], [ %57, %55 ]
  %61 = and i32 %59, 6147
  %or.cond567 = icmp eq i32 %61, 2
  br i1 %or.cond567, label %62, label %71

62:                                               ; preds = %58
  %63 = getelementptr inbounds i8, ptr %1, i64 8
  %64 = load i32, ptr %63, align 1, !tbaa !5
  %65 = add nsw i32 %.1478, -1
  %66 = and i32 %64, %65
  %67 = icmp eq i32 %66, 0
  br i1 %67, label %68, label %71

68:                                               ; preds = %62
  %69 = tail call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef nonnull %9) #4
  %70 = icmp eq i32 %69, 2
  %.pre619 = load i32, ptr %32, align 1, !tbaa !12
  br label %71

71:                                               ; preds = %68, %62, %58
  %72 = phi i32 [ %59, %62 ], [ %59, %58 ], [ %.pre619, %68 ]
  %73 = phi i1 [ false, %62 ], [ false, %58 ], [ %70, %68 ]
  %74 = and i32 %72, 6147
  %or.cond572 = icmp eq i32 %74, 3
  br i1 %or.cond572, label %75, label %84

75:                                               ; preds = %71
  %76 = getelementptr inbounds i8, ptr %1, i64 8
  %77 = load i32, ptr %76, align 1, !tbaa !5
  %78 = add nsw i32 %.1478, -1
  %79 = and i32 %77, %78
  %80 = icmp eq i32 %79, 0
  br i1 %80, label %81, label %84

81:                                               ; preds = %75
  %82 = tail call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef nonnull %9) #4
  %83 = icmp eq i32 %82, 2
  br label %84

84:                                               ; preds = %81, %75, %71
  %85 = phi i1 [ false, %75 ], [ false, %71 ], [ %83, %81 ]
  call void @libxsmm_reset_aarch64_gp_reg_mapping(ptr noundef nonnull %5) #4
  store i32 32, ptr %5, align 4, !tbaa !13
  %86 = getelementptr inbounds i8, ptr %5, i64 4
  store i32 32, ptr %86, align 4, !tbaa !15
  %87 = getelementptr inbounds i8, ptr %5, i64 12
  store i32 33, ptr %87, align 4, !tbaa !16
  %88 = getelementptr inbounds i8, ptr %5, i64 20
  %89 = getelementptr inbounds i8, ptr %5, i64 24
  %90 = getelementptr inbounds i8, ptr %5, i64 32
  %91 = getelementptr inbounds i8, ptr %5, i64 40
  %92 = getelementptr inbounds i8, ptr %5, i64 44
  %93 = getelementptr inbounds i8, ptr %5, i64 88
  %94 = getelementptr inbounds i8, ptr %5, i64 92
  %95 = getelementptr inbounds i8, ptr %5, i64 96
  %96 = getelementptr inbounds i8, ptr %5, i64 80
  store i32 45, ptr %96, align 4, !tbaa !17
  %97 = getelementptr inbounds i8, ptr %5, i64 52
  store i32 35, ptr %97, align 4, !tbaa !18
  %98 = getelementptr inbounds i8, ptr %5, i64 28
  store <4 x i32> <i32 34, i32 35, i32 36, i32 36>, ptr %88, align 4, !tbaa !19
  %99 = getelementptr inbounds i8, ptr %5, i64 36
  store <4 x i32> <i32 37, i32 38, i32 39, i32 40>, ptr %99, align 4, !tbaa !19
  %100 = getelementptr inbounds i8, ptr %5, i64 100
  store <4 x i32> <i32 41, i32 42, i32 43, i32 59>, ptr %93, align 4, !tbaa !19
  %101 = getelementptr inbounds i8, ptr %5, i64 104
  store i32 60, ptr %101, align 4, !tbaa !20
  %102 = getelementptr inbounds i8, ptr %5, i64 108
  store i32 58, ptr %102, align 4, !tbaa !21
  %103 = getelementptr inbounds i8, ptr %5, i64 56
  store i32 62, ptr %103, align 4, !tbaa !22
  call void @libxsmm_reset_loop_label_tracker(ptr noundef nonnull %4) #4
  %104 = getelementptr inbounds i8, ptr %0, i64 28
  %105 = load i32, ptr %104, align 4, !tbaa !23
  call void @libxsmm_generator_gemm_aarch64_setup_n_blocking(ptr noundef %0, ptr noundef nonnull %3, ptr noundef nonnull %1, i32 noundef %105, ptr noundef nonnull %7, ptr noundef nonnull %6) #4
  %106 = load i32, ptr %7, align 8, !tbaa !19
  %107 = icmp eq i32 %106, 0
  br i1 %107, label %108, label %113

108:                                              ; preds = %84
  %109 = load i32, ptr @libxsmm_ninit, align 4, !tbaa !19
  %110 = icmp ugt i32 %109, 1
  %111 = load i32, ptr @libxsmm_verbosity, align 4
  %112 = select i1 %110, i32 %111, i32 1
  call void @libxsmm_handle_error(ptr noundef nonnull %0, i32 noundef 90016, ptr noundef nonnull @__func__.libxsmm_generator_gemm_aarch64_kernel, ptr noundef nonnull @.str, i32 noundef 1683, i32 noundef %112) #4
  br label %.thread597

113:                                              ; preds = %84
  call void @libxsmm_aarch64_instruction_open_stream(ptr noundef nonnull %0, i16 noundef zeroext 3599) #4
  %114 = load i32, ptr %32, align 1, !tbaa !12
  %115 = trunc i32 %114 to i8
  %trunc = and i8 %115, -64
  switch i8 %trunc, label %116 [
    i8 -64, label %117
    i8 0, label %117
  ]

116:                                              ; preds = %113
  call void @libxsmm_aarch64_instruction_close_stream(ptr noundef nonnull %0, i16 noundef zeroext 3599) #4
  br label %.thread597

117:                                              ; preds = %113, %113
  %118 = load i32, ptr %1, align 1, !tbaa !26
  %119 = and i32 %114, 1
  %.not507 = icmp eq i32 %119, 0
  br i1 %.not507, label %138, label %120

120:                                              ; preds = %117
  %121 = call i32 @LIBXSMM_GEMM_GETENUM_ABC_COMMON_PREC(ptr noundef nonnull %9) #4
  %122 = icmp eq i32 %121, 1
  br i1 %122, label %126, label %123

123:                                              ; preds = %120
  %124 = call i32 @LIBXSMM_GEMM_GETENUM_ABC_COMMON_PREC(ptr noundef nonnull %9) #4
  %125 = icmp eq i32 %124, 0
  br i1 %125, label %126, label %131

126:                                              ; preds = %123, %120
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(95) %8, ptr noundef nonnull align 1 dereferenceable(95) %1, i64 95, i1 false), !tbaa.struct !27
  %127 = getelementptr inbounds i8, ptr %8, i64 12
  store i32 %118, ptr %127, align 4, !tbaa !31
  %128 = load i32, ptr %32, align 1, !tbaa !12
  %129 = and i32 %128, -2
  %130 = getelementptr inbounds i8, ptr %8, i64 24
  store i32 %129, ptr %130, align 4, !tbaa !12
  br label %139

131:                                              ; preds = %123
  %or.cond3 = select i1 %60, i1 true, i1 %85
  br i1 %or.cond3, label %132, label %133

132:                                              ; preds = %131
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(95) %8, ptr noundef nonnull align 1 dereferenceable(95) %1, i64 95, i1 false), !tbaa.struct !27
  br label %139

133:                                              ; preds = %131
  %134 = load i32, ptr @libxsmm_ninit, align 4, !tbaa !19
  %135 = icmp ugt i32 %134, 1
  %136 = load i32, ptr @libxsmm_verbosity, align 4
  %137 = select i1 %135, i32 %136, i32 1
  call void @libxsmm_handle_error(ptr noundef nonnull %0, i32 noundef 90033, ptr noundef nonnull @__func__.libxsmm_generator_gemm_aarch64_kernel, ptr noundef nonnull @.str, i32 noundef 1710, i32 noundef %137) #4
  br label %.thread597

138:                                              ; preds = %117
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(95) %8, ptr noundef nonnull align 1 dereferenceable(95) %1, i64 95, i1 false), !tbaa.struct !27
  br label %139

139:                                              ; preds = %126, %132, %138
  %or.cond5 = select i1 %47, i1 true, i1 %60
  %or.cond7 = select i1 %or.cond5, i1 true, i1 %73
  %or.cond9 = select i1 %or.cond7, i1 true, i1 %85
  br i1 %or.cond9, label %140, label %144

140:                                              ; preds = %139
  %141 = getelementptr inbounds i8, ptr %8, i64 24
  %142 = load i32, ptr %141, align 4, !tbaa !12
  %143 = or i32 %142, 2048
  store i32 %143, ptr %141, align 4, !tbaa !12
  br label %144

144:                                              ; preds = %139, %140
  %or.cond11 = select i1 %60, i1 true, i1 %85
  br i1 %or.cond11, label %145, label %158

145:                                              ; preds = %144
  %146 = getelementptr inbounds i8, ptr %8, i64 24
  %147 = load i32, ptr %146, align 4, !tbaa !12
  %148 = and i32 %147, -2
  store i32 %148, ptr %146, align 4, !tbaa !12
  %149 = getelementptr inbounds i8, ptr %8, i64 12
  %150 = load i32, ptr %149, align 4, !tbaa !31
  %151 = add nsw i32 %.1478, -1
  %152 = and i32 %150, %151
  %.not508 = icmp eq i32 %152, 0
  br i1 %.not508, label %158, label %153

153:                                              ; preds = %145
  %154 = load i32, ptr @libxsmm_ninit, align 4, !tbaa !19
  %155 = icmp ugt i32 %154, 1
  %156 = load i32, ptr @libxsmm_verbosity, align 4
  %157 = select i1 %155, i32 %156, i32 1
  call void @libxsmm_handle_error(ptr noundef nonnull %0, i32 noundef 90041, ptr noundef nonnull @__func__.libxsmm_generator_gemm_aarch64_kernel, ptr noundef nonnull @.str, i32 noundef 1725, i32 noundef %157) #4
  br label %.thread597

158:                                              ; preds = %145, %144
  %or.cond13 = select i1 %73, i1 true, i1 %85
  br i1 %or.cond13, label %159, label %163

159:                                              ; preds = %158
  %160 = getelementptr inbounds i8, ptr %8, i64 24
  %161 = load i32, ptr %160, align 4, !tbaa !12
  %162 = and i32 %161, -3
  store i32 %162, ptr %160, align 4, !tbaa !12
  br label %163

163:                                              ; preds = %158, %159
  br i1 %47, label %164, label %168

164:                                              ; preds = %163
  %165 = load i32, ptr %1, align 1, !tbaa !26
  %166 = getelementptr inbounds i8, ptr %8, i64 12
  store i32 %165, ptr %166, align 4, !tbaa !31
  %167 = getelementptr inbounds i8, ptr %3, i64 660
  store i32 1, ptr %167, align 4, !tbaa !32
  br label %168

168:                                              ; preds = %164, %163
  br i1 %60, label %169, label %173

169:                                              ; preds = %168
  %170 = load i32, ptr %1, align 1, !tbaa !26
  %171 = getelementptr inbounds i8, ptr %8, i64 12
  store i32 %170, ptr %171, align 4, !tbaa !31
  %172 = getelementptr inbounds i8, ptr %3, i64 668
  store i32 1, ptr %172, align 4, !tbaa !35
  br label %173

173:                                              ; preds = %169, %168
  br i1 %73, label %174, label %181

174:                                              ; preds = %173
  %175 = load i32, ptr %1, align 1, !tbaa !26
  %176 = getelementptr inbounds i8, ptr %8, i64 12
  store i32 %175, ptr %176, align 4, !tbaa !31
  %177 = getelementptr inbounds i8, ptr %1, i64 8
  %178 = load i32, ptr %177, align 1, !tbaa !5
  %179 = getelementptr inbounds i8, ptr %8, i64 16
  store i32 %178, ptr %179, align 4, !tbaa !36
  %180 = getelementptr inbounds i8, ptr %3, i64 672
  store i32 1, ptr %180, align 8, !tbaa !37
  br label %181

181:                                              ; preds = %174, %173
  br i1 %85, label %182, label %189

182:                                              ; preds = %181
  %183 = load i32, ptr %1, align 1, !tbaa !26
  %184 = getelementptr inbounds i8, ptr %8, i64 12
  store i32 %183, ptr %184, align 4, !tbaa !31
  %185 = getelementptr inbounds i8, ptr %1, i64 8
  %186 = load i32, ptr %185, align 1, !tbaa !5
  %187 = getelementptr inbounds i8, ptr %8, i64 16
  store i32 %186, ptr %187, align 4, !tbaa !36
  %188 = getelementptr inbounds i8, ptr %3, i64 676
  store i32 1, ptr %188, align 4, !tbaa !38
  br label %189

189:                                              ; preds = %182, %181
  %190 = getelementptr inbounds i8, ptr %8, i64 24
  %191 = load i32, ptr %190, align 4, !tbaa !12
  %192 = and i32 %191, 49152
  %or.cond576 = icmp eq i32 %192, 0
  br i1 %or.cond576, label %226, label %193

193:                                              ; preds = %189
  %194 = load i32, ptr %5, align 4, !tbaa !13
  %195 = load i32, ptr %94, align 4, !tbaa !39
  call void @libxsmm_aarch64_instruction_alu_compute_shifted_reg(ptr noundef nonnull %0, i32 noundef 167772167, i32 noundef %194, i32 noundef %194, i32 noundef %195, i32 noundef 0, i32 noundef 0) #4
  %196 = load i32, ptr %94, align 4, !tbaa !39
  %197 = load i32, ptr %86, align 4, !tbaa !15
  call void @libxsmm_aarch64_instruction_alu_move(ptr noundef nonnull %0, i32 noundef -1186988026, i32 noundef %196, i32 noundef 127, i32 noundef 32, i32 noundef %197) #4
  %198 = load i32, ptr %94, align 4, !tbaa !39
  %199 = load i32, ptr %87, align 4, !tbaa !16
  call void @libxsmm_aarch64_instruction_alu_move(ptr noundef nonnull %0, i32 noundef -1186988026, i32 noundef %198, i32 noundef 127, i32 noundef 80, i32 noundef %199) #4
  %200 = load i32, ptr %94, align 4, !tbaa !39
  %201 = load i32, ptr %88, align 4, !tbaa !40
  call void @libxsmm_aarch64_instruction_alu_move(ptr noundef nonnull %0, i32 noundef -1186988026, i32 noundef %200, i32 noundef 127, i32 noundef 128, i32 noundef %201) #4
  br i1 %16, label %202, label %205

202:                                              ; preds = %193
  %203 = load i32, ptr %94, align 4, !tbaa !39
  %204 = load i32, ptr %96, align 4, !tbaa !17
  call void @libxsmm_aarch64_instruction_alu_move(ptr noundef nonnull %0, i32 noundef -1186988026, i32 noundef %203, i32 noundef 127, i32 noundef 144, i32 noundef %204) #4
  br label %205

205:                                              ; preds = %202, %193
  %206 = getelementptr inbounds i8, ptr %8, i64 28
  %207 = load i8, ptr %206, align 4, !tbaa !41
  %.not511 = icmp eq i8 %207, 0
  br i1 %.not511, label %213, label %208

208:                                              ; preds = %205
  %209 = load i32, ptr %94, align 4, !tbaa !39
  %210 = load i32, ptr %89, align 4, !tbaa !42
  call void @libxsmm_aarch64_instruction_alu_move(ptr noundef nonnull %0, i32 noundef -1186988026, i32 noundef %209, i32 noundef 127, i32 noundef 72, i32 noundef %210) #4
  %211 = load i32, ptr %94, align 4, !tbaa !39
  %212 = load i32, ptr %90, align 4, !tbaa !43
  call void @libxsmm_aarch64_instruction_alu_move(ptr noundef nonnull %0, i32 noundef -1186988026, i32 noundef %211, i32 noundef 127, i32 noundef 120, i32 noundef %212) #4
  br label %213

213:                                              ; preds = %208, %205
  %214 = load i32, ptr %190, align 4, !tbaa !12
  %215 = and i32 %214, 458752
  %or.cond578 = icmp eq i32 %215, 0
  br i1 %or.cond578, label %226, label %216

216:                                              ; preds = %213
  %217 = load i32, ptr %94, align 4, !tbaa !39
  %218 = load i32, ptr %97, align 4, !tbaa !18
  call void @libxsmm_aarch64_instruction_alu_move(ptr noundef nonnull %0, i32 noundef -1186988026, i32 noundef %217, i32 noundef 127, i32 noundef 16, i32 noundef %218) #4
  %219 = load i32, ptr %190, align 4, !tbaa !12
  %220 = and i32 %219, 131072
  %.not515 = icmp eq i32 %220, 0
  br i1 %.not515, label %226, label %221

221:                                              ; preds = %216
  %222 = load i32, ptr %94, align 4, !tbaa !39
  %223 = load i32, ptr %98, align 4, !tbaa !44
  call void @libxsmm_aarch64_instruction_alu_move(ptr noundef nonnull %0, i32 noundef -1186988026, i32 noundef %222, i32 noundef 127, i32 noundef 40, i32 noundef %223) #4
  %224 = load i32, ptr %94, align 4, !tbaa !39
  %225 = load i32, ptr %99, align 4, !tbaa !45
  call void @libxsmm_aarch64_instruction_alu_move(ptr noundef nonnull %0, i32 noundef -1186988026, i32 noundef %224, i32 noundef 127, i32 noundef 88, i32 noundef %225) #4
  br label %226

226:                                              ; preds = %221, %216, %213, %189
  call void @libxsmm_generator_gemm_setup_stack_frame_aarch64(ptr noundef nonnull %0, ptr noundef nonnull %1, ptr noundef nonnull %5, ptr noundef nonnull %3) #4
  %227 = getelementptr inbounds i8, ptr %3, i64 140
  %228 = load i32, ptr %227, align 4, !tbaa !46
  %.not516 = icmp eq i32 %228, 0
  br i1 %.not516, label %240, label %229

229:                                              ; preds = %226
  %230 = load i32, ptr %95, align 4, !tbaa !47
  %231 = load i32, ptr %88, align 4, !tbaa !40
  call void @libxsmm_generator_gemm_setval_stack_var_aarch64(ptr noundef nonnull %0, i32 noundef 18, i32 noundef %230, i32 noundef %231) #4
  %232 = load i32, ptr %94, align 4, !tbaa !39
  call void @libxsmm_generator_gemm_getval_stack_var_aarch64(ptr noundef nonnull %0, i32 noundef 6, i32 noundef %232) #4
  %233 = load i32, ptr %94, align 4, !tbaa !39
  %234 = load i32, ptr %95, align 4, !tbaa !47
  %235 = load i32, ptr %88, align 4, !tbaa !40
  call void @libxsmm_aarch64_instruction_alu_compute_imm64(ptr noundef nonnull %0, i32 noundef 4096, i32 noundef %233, i32 noundef %234, i32 noundef %235, i64 noundef 2048) #4
  %236 = getelementptr inbounds i8, ptr %1, i64 20
  %237 = load i32, ptr %236, align 1, !tbaa !48
  %238 = load i32, ptr %1, align 1, !tbaa !26
  %239 = getelementptr inbounds i8, ptr %8, i64 20
  store i32 %238, ptr %239, align 4, !tbaa !48
  br label %240

240:                                              ; preds = %229, %226
  %.0479 = phi i32 [ %237, %229 ], [ 0, %226 ]
  call void @libxsmm_generator_gemm_apply_opA_opB_aarch64(ptr noundef nonnull %0, ptr noundef nonnull %4, ptr noundef nonnull %5, ptr noundef nonnull %3, ptr noundef nonnull %8, ptr noundef nonnull %1) #4
  %241 = load i32, ptr %104, align 4, !tbaa !23
  %242 = add i32 %241, -2201
  %or.cond579 = icmp ult i32 %242, 300
  br i1 %or.cond579, label %243, label %296

243:                                              ; preds = %240
  %244 = load i32, ptr %8, align 4, !tbaa !26
  %245 = getelementptr inbounds i8, ptr %3, i64 8
  %246 = load i32, ptr %245, align 8, !tbaa !49
  %247 = urem i32 %244, %246
  %248 = load i32, ptr %32, align 1, !tbaa !12
  %249 = and i32 %248, 2048
  %250 = icmp eq i32 %249, 0
  %251 = icmp eq i8 %.3, 0
  %or.cond16 = and i1 %251, %250
  br i1 %or.cond16, label %252, label %262

252:                                              ; preds = %243
  %253 = call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef nonnull %9) #4
  %254 = icmp eq i32 %253, 2
  br i1 %254, label %255, label %.thread

255:                                              ; preds = %252
  %256 = load i32, ptr %8, align 4, !tbaa !26
  %257 = load i32, ptr %245, align 8, !tbaa !49
  %258 = shl i32 %257, 1
  %259 = urem i32 %256, %258
  %260 = shl i32 %259, 1
  %261 = load i32, ptr %93, align 4, !tbaa !50
  call void @libxsmm_generator_set_p_register_aarch64_sve(ptr noundef nonnull %0, i32 noundef 3, i32 noundef %260, i32 noundef %261) #4
  br label %.thread

262:                                              ; preds = %243
  br i1 %251, label %.thread, label %267

.thread:                                          ; preds = %252, %255, %262
  %263 = call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef nonnull %9) #4
  %264 = icmp eq i32 %263, 2
  br i1 %264, label %265, label %267

265:                                              ; preds = %.thread
  %266 = shl nsw i32 %247, 2
  br label %271

267:                                              ; preds = %.thread, %262
  %268 = getelementptr inbounds i8, ptr %3, i64 20
  %269 = load i32, ptr %268, align 4, !tbaa !51
  %270 = mul i32 %269, %247
  br label %271

271:                                              ; preds = %267, %265
  %.0480 = phi i32 [ %266, %265 ], [ %270, %267 ]
  %272 = load i32, ptr %93, align 4, !tbaa !50
  call void @libxsmm_generator_set_p_register_aarch64_sve(ptr noundef nonnull %0, i32 noundef 0, i32 noundef -1, i32 noundef %272) #4
  %273 = load i32, ptr %93, align 4, !tbaa !50
  call void @libxsmm_generator_set_p_register_aarch64_sve(ptr noundef nonnull %0, i32 noundef 1, i32 noundef %.0480, i32 noundef %273) #4
  %274 = call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef nonnull %9) #4
  %275 = icmp eq i32 %274, 2
  br i1 %275, label %276, label %284

276:                                              ; preds = %271
  %277 = load i32, ptr %245, align 8, !tbaa !49
  %278 = getelementptr inbounds i8, ptr %3, i64 20
  %279 = load i32, ptr %278, align 4, !tbaa !51
  %280 = mul i32 %279, %277
  %281 = load i32, ptr %93, align 4, !tbaa !50
  call void @libxsmm_generator_set_p_register_aarch64_sve(ptr noundef nonnull %0, i32 noundef 2, i32 noundef %280, i32 noundef %281) #4
  br i1 %251, label %.thread595, label %.thread594

.thread595:                                       ; preds = %276
  %282 = sdiv i32 %.0480, 2
  %283 = load i32, ptr %93, align 4, !tbaa !50
  call void @libxsmm_generator_set_p_register_aarch64_sve(ptr noundef nonnull %0, i32 noundef 4, i32 noundef %282, i32 noundef %283) #4
  br label %296

284:                                              ; preds = %271
  br i1 %251, label %296, label %.thread594

.thread594:                                       ; preds = %276, %284
  %285 = call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef nonnull %9) #4
  %286 = icmp eq i32 %285, 2
  br i1 %286, label %290, label %287

287:                                              ; preds = %.thread594
  %288 = call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef nonnull %9) #4
  %289 = icmp eq i32 %288, 12
  br i1 %289, label %290, label %296

290:                                              ; preds = %287, %.thread594
  %291 = load i32, ptr %8, align 4, !tbaa !26
  %292 = shl i32 %291, 3
  %293 = and i32 %292, 24
  %.not517 = icmp eq i32 %293, 0
  br i1 %.not517, label %296, label %294

294:                                              ; preds = %290
  %295 = load i32, ptr %93, align 4, !tbaa !50
  call void @libxsmm_generator_set_p_register_aarch64_sve(ptr noundef nonnull %0, i32 noundef 3, i32 noundef %293, i32 noundef %295) #4
  br label %296

296:                                              ; preds = %.thread595, %284, %287, %294, %290, %240
  call void @libxsmm_reset_loop_label_tracker(ptr noundef nonnull %4) #4
  %297 = getelementptr inbounds i8, ptr %8, i64 4
  %298 = load i32, ptr %297, align 4, !tbaa !52
  %.not518610 = icmp eq i32 %298, 0
  br i1 %.not518610, label %._crit_edge616, label %.lr.ph615

.lr.ph615:                                        ; preds = %296
  %.not520 = icmp eq i8 %.3, 0
  %299 = getelementptr inbounds i8, ptr %3, i64 8
  %300 = getelementptr inbounds i8, ptr %3, i64 4
  %301 = getelementptr inbounds i8, ptr %8, i64 20
  %302 = getelementptr inbounds i8, ptr %3, i64 20
  %303 = getelementptr inbounds i8, ptr %3, i64 116
  %304 = getelementptr inbounds i8, ptr %3, i64 100
  %305 = getelementptr inbounds i8, ptr %8, i64 33
  %306 = getelementptr inbounds i8, ptr %8, i64 41
  %307 = getelementptr inbounds i8, ptr %3, i64 132
  %308 = getelementptr inbounds i8, ptr %3, i64 120
  %309 = getelementptr inbounds i8, ptr %3, i64 136
  %310 = getelementptr inbounds i8, ptr %3, i64 12
  %311 = zext nneg i32 %.1478 to i64
  %312 = getelementptr inbounds i8, ptr %1, i64 90
  %313 = getelementptr inbounds i8, ptr %8, i64 16
  br label %314

314:                                              ; preds = %.lr.ph615, %781
  %.0613 = phi i32 [ 0, %.lr.ph615 ], [ %321, %781 ]
  %.0474612 = phi i32 [ 0, %.lr.ph615 ], [ %320, %781 ]
  %.0482611 = phi i8 [ 0, %.lr.ph615 ], [ %.1483, %781 ]
  %315 = zext i32 %.0613 to i64
  %316 = getelementptr inbounds [2 x i32], ptr %6, i64 0, i64 %315
  %317 = load i32, ptr %316, align 4, !tbaa !19
  %318 = getelementptr inbounds [2 x i32], ptr %7, i64 0, i64 %315
  %319 = load i32, ptr %318, align 4, !tbaa !19
  %320 = add i32 %319, %.0474612
  %321 = add i32 %.0613, 1
  %322 = load i32, ptr %92, align 4, !tbaa !53
  call void @libxsmm_generator_loop_header_aarch64(ptr noundef nonnull %0, ptr noundef nonnull %4, i32 noundef %322, i32 noundef %319) #4
  %323 = load i32, ptr %104, align 4, !tbaa !23
  %324 = call i32 @libxsmm_generator_gemm_aarch64_get_initial_m_blocking(ptr noundef nonnull %3, ptr noundef nonnull %8, i32 noundef %323) #4
  br i1 %.not520, label %331, label %325

325:                                              ; preds = %314
  %326 = load i32, ptr %104, align 4, !tbaa !23
  %327 = icmp ult i32 %326, 2203
  %328 = icmp eq i32 %326, 2501
  %or.cond580 = or i1 %327, %328
  %.0475 = select i1 %or.cond580, i32 16, i32 32
  %329 = load i32, ptr %32, align 1, !tbaa !12
  %330 = and i32 %329, 768
  %or.cond582 = icmp eq i32 %330, 256
  %spec.select593 = select i1 %or.cond582, i8 1, i8 %.0482611
  br label %331

331:                                              ; preds = %325, %314
  %.1483 = phi i8 [ %.0482611, %314 ], [ %spec.select593, %325 ]
  %.1 = phi i32 [ %324, %314 ], [ %.0475, %325 ]
  %332 = load i32, ptr %8, align 4, !tbaa !26
  %.not522607 = icmp eq i32 %332, 0
  br i1 %.not522607, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %331, %669
  %333 = phi i32 [ %672, %669 ], [ %332, %331 ]
  %.2609 = phi i32 [ %671, %669 ], [ %.1, %331 ]
  %.0476608 = phi i32 [ %344, %669 ], [ 0, %331 ]
  %334 = icmp eq i32 %.2609, 0
  br i1 %334, label %335, label %340

335:                                              ; preds = %.lr.ph
  %336 = load i32, ptr @libxsmm_ninit, align 4, !tbaa !19
  %337 = icmp ugt i32 %336, 1
  %338 = load i32, ptr @libxsmm_verbosity, align 4
  %339 = select i1 %337, i32 %338, i32 1
  call void @libxsmm_handle_error(ptr noundef nonnull %0, i32 noundef 90017, ptr noundef nonnull @__func__.libxsmm_generator_gemm_aarch64_kernel, ptr noundef nonnull @.str, i32 noundef 1921, i32 noundef %339) #4
  br label %.thread597

340:                                              ; preds = %.lr.ph
  %341 = sub i32 %333, %.0476608
  %.fr = freeze i32 %341
  %342 = urem i32 %.fr, %.2609
  %343 = sub nuw i32 %.fr, %342
  %344 = add i32 %343, %.0476608
  %345 = icmp ne i32 %.fr, %342
  %346 = icmp ne i32 %344, 0
  %or.cond18 = select i1 %345, i1 %346, i1 false
  br i1 %or.cond18, label %347, label %669

347:                                              ; preds = %340
  %348 = load i32, ptr %91, align 4, !tbaa !54
  call void @libxsmm_generator_loop_header_aarch64(ptr noundef %0, ptr noundef nonnull %4, i32 noundef %348, i32 noundef %343) #4
  %349 = load i32, ptr %104, align 4, !tbaa !23
  switch i32 %349, label %377 [
    i32 2001, label %350
    i32 2002, label %350
    i32 2101, label %350
    i32 2501, label %350
  ]

350:                                              ; preds = %347, %347, %347, %347
  br i1 %.not520, label %361, label %351

351:                                              ; preds = %350
  %352 = load i32, ptr %88, align 4, !tbaa !40
  %353 = load i32, ptr %93, align 4, !tbaa !50
  %354 = load i32, ptr %299, align 8, !tbaa !49
  %355 = load i32, ptr %300, align 4, !tbaa !55
  %356 = load i32, ptr %301, align 4, !tbaa !48
  %357 = load i32, ptr %302, align 4, !tbaa !51
  %358 = mul i32 %357, %356
  %359 = load i32, ptr %190, align 4, !tbaa !12
  %360 = and i32 %359, 4
  call void @libxsmm_generator_load_2dregblock_mmla_aarch64_asimd(ptr noundef nonnull %0, ptr noundef nonnull %3, ptr noundef nonnull %8, i32 noundef %352, i32 noundef %353, i32 noundef %354, i32 noundef %355, i32 noundef %.2609, i32 noundef %317, i32 noundef %358, i32 noundef %360, i8 noundef zeroext %.1483) #4
  br label %422

361:                                              ; preds = %350
  %362 = load i32, ptr %303, align 4, !tbaa !56
  %363 = icmp eq i32 %362, 1
  %364 = load i32, ptr %304, align 4
  %365 = icmp eq i32 %364, 1
  %or.cond21 = select i1 %363, i1 true, i1 %365
  %366 = load i32, ptr %88, align 4, !tbaa !40
  %367 = load i32, ptr %93, align 4, !tbaa !50
  %368 = load i32, ptr %299, align 8, !tbaa !49
  %369 = load i32, ptr %300, align 4, !tbaa !55
  %370 = load i32, ptr %301, align 4, !tbaa !48
  %371 = load i32, ptr %302, align 4, !tbaa !51
  %372 = mul i32 %371, %370
  br i1 %or.cond21, label %373, label %374

373:                                              ; preds = %361
  call void @libxsmm_generator_gemm_load_add_colbias_2dregblock_aarch64(ptr noundef nonnull %0, ptr noundef nonnull %8, i32 noundef %366, i32 noundef %367, i32 noundef %368, i32 noundef %369, i32 noundef 1, i32 noundef %.2609, i32 noundef %317, i32 noundef %372) #4
  br label %422

374:                                              ; preds = %361
  %375 = load i32, ptr %190, align 4, !tbaa !12
  %376 = and i32 %375, 4
  call void @libxsmm_generator_load_2dregblock_aarch64_asimd(ptr noundef nonnull %0, i32 noundef %366, i32 noundef %367, i32 noundef %368, i32 noundef %369, i32 noundef %.2609, i32 noundef %317, i32 noundef %372, i32 noundef %376) #4
  br label %422

377:                                              ; preds = %347
  %378 = add i32 %349, -2201
  %or.cond583 = icmp ult i32 %378, 300
  br i1 %or.cond583, label %379, label %417

379:                                              ; preds = %377
  br i1 %.not520, label %391, label %380

380:                                              ; preds = %379
  %381 = load i32, ptr %88, align 4, !tbaa !40
  %382 = load i32, ptr %93, align 4, !tbaa !50
  %383 = load i32, ptr %94, align 4, !tbaa !39
  %384 = load i32, ptr %299, align 8, !tbaa !49
  %385 = load i32, ptr %300, align 4, !tbaa !55
  %386 = load i32, ptr %301, align 4, !tbaa !48
  %387 = load i32, ptr %302, align 4, !tbaa !51
  %388 = mul i32 %387, %386
  %389 = load i32, ptr %190, align 4, !tbaa !12
  %390 = and i32 %389, 4
  call void @libxsmm_generator_load_2dregblock_mmla_aarch64_sve(ptr noundef nonnull %0, ptr noundef nonnull %3, ptr noundef nonnull %8, i32 noundef %381, i32 noundef %382, i32 noundef %383, i32 noundef %384, i32 noundef %385, i32 noundef %.2609, i32 noundef %317, i32 noundef %388, i32 noundef %387, i32 noundef %390, i8 noundef zeroext %.1483) #4
  br label %422

391:                                              ; preds = %379
  %392 = load i32, ptr %303, align 4, !tbaa !56
  %393 = icmp eq i32 %392, 1
  %394 = load i32, ptr %304, align 4
  %395 = icmp eq i32 %394, 1
  %or.cond24 = select i1 %393, i1 true, i1 %395
  br i1 %or.cond24, label %396, label %405

396:                                              ; preds = %391
  %397 = load i32, ptr %88, align 4, !tbaa !40
  %398 = load i32, ptr %93, align 4, !tbaa !50
  %399 = load i32, ptr %299, align 8, !tbaa !49
  %400 = load i32, ptr %300, align 4, !tbaa !55
  %401 = select i1 %393, i32 1, i32 2
  %402 = load i32, ptr %301, align 4, !tbaa !48
  %403 = load i32, ptr %302, align 4, !tbaa !51
  %404 = mul i32 %403, %402
  call void @libxsmm_generator_gemm_load_add_colbias_2dregblock_aarch64(ptr noundef nonnull %0, ptr noundef nonnull %8, i32 noundef %397, i32 noundef %398, i32 noundef %399, i32 noundef %400, i32 noundef %401, i32 noundef %.2609, i32 noundef %317, i32 noundef %404) #4
  br label %422

405:                                              ; preds = %391
  %406 = call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef nonnull %9) #4
  %407 = load i32, ptr %88, align 4, !tbaa !40
  %408 = load i32, ptr %93, align 4, !tbaa !50
  %409 = load i32, ptr %299, align 8, !tbaa !49
  %410 = load i32, ptr %300, align 4, !tbaa !55
  %411 = load i32, ptr %301, align 4, !tbaa !48
  %412 = load i32, ptr %302, align 4, !tbaa !51
  %413 = mul i32 %412, %411
  %414 = load i32, ptr %190, align 4
  %415 = and i32 %414, 4
  %416 = select i1 %16, i32 1, i32 %415
  call void @libxsmm_generator_load_2dregblock_aarch64_sve(ptr noundef nonnull %0, i32 noundef %406, i32 noundef %407, i32 noundef %408, i32 noundef %409, i32 noundef %410, i32 noundef %.2609, i32 noundef %317, i32 noundef %413, i32 noundef %416) #4
  br label %422

417:                                              ; preds = %377
  %418 = load i32, ptr @libxsmm_ninit, align 4, !tbaa !19
  %419 = icmp ugt i32 %418, 1
  %420 = load i32, ptr @libxsmm_verbosity, align 4
  %421 = select i1 %419, i32 %420, i32 1
  call void @libxsmm_handle_error(ptr noundef nonnull %0, i32 noundef 90005, ptr noundef nonnull @__func__.libxsmm_generator_gemm_aarch64_kernel, ptr noundef nonnull @.str, i32 noundef 1976, i32 noundef %421) #4
  br label %.thread597

422:                                              ; preds = %396, %405, %380, %351, %374, %373
  %423 = load i32, ptr %190, align 4, !tbaa !12
  %424 = and i32 %423, 458752
  %or.cond585 = icmp eq i32 %424, 0
  br i1 %or.cond585, label %464, label %425

425:                                              ; preds = %422
  %426 = and i32 %423, 262144
  %.not530 = icmp eq i32 %426, 0
  br i1 %.not530, label %430, label %427

427:                                              ; preds = %425
  %428 = load i32, ptr %101, align 4, !tbaa !20
  call void @libxsmm_aarch64_instruction_alu_set_imm64(ptr noundef nonnull %0, i32 noundef %428, i64 noundef 0) #4
  %429 = load i32, ptr %102, align 4, !tbaa !21
  call void @libxsmm_aarch64_instruction_alu_set_imm64(ptr noundef nonnull %0, i32 noundef %429, i64 noundef 0) #4
  br label %436

430:                                              ; preds = %425
  %431 = load i32, ptr %100, align 4, !tbaa !57
  call void @libxsmm_aarch64_instruction_alu_set_imm64(ptr noundef nonnull %0, i32 noundef %431, i64 noundef 0) #4
  %432 = load i32, ptr %86, align 4, !tbaa !15
  %433 = load i32, ptr %101, align 4, !tbaa !20
  call void @libxsmm_aarch64_instruction_alu_compute_imm12(ptr noundef nonnull %0, i32 noundef 285212678, i32 noundef %432, i32 noundef %433, i32 noundef 0, i8 noundef zeroext 0) #4
  %434 = load i32, ptr %87, align 4, !tbaa !16
  %435 = load i32, ptr %102, align 4, !tbaa !21
  call void @libxsmm_aarch64_instruction_alu_compute_imm12(ptr noundef nonnull %0, i32 noundef 285212678, i32 noundef %434, i32 noundef %435, i32 noundef 0, i8 noundef zeroext 0) #4
  br label %436

436:                                              ; preds = %430, %427
  %437 = load i32, ptr %97, align 4, !tbaa !18
  %438 = load i32, ptr %103, align 4, !tbaa !22
  call void @libxsmm_aarch64_instruction_alu_move(ptr noundef nonnull %0, i32 noundef -1186988026, i32 noundef %437, i32 noundef 63, i32 noundef 0, i32 noundef %438) #4
  call void @libxsmm_aarch64_instruction_register_jump_back_label(ptr noundef nonnull %0, ptr noundef nonnull %4) #4
  %439 = load i32, ptr %190, align 4, !tbaa !12
  %440 = and i32 %439, 65536
  %.not532 = icmp eq i32 %440, 0
  br i1 %.not532, label %448, label %441

441:                                              ; preds = %436
  %442 = load i32, ptr %101, align 4, !tbaa !20
  %443 = load i32, ptr %100, align 4, !tbaa !57
  %444 = load i32, ptr %86, align 4, !tbaa !15
  call void @libxsmm_aarch64_instruction_alu_move(ptr noundef nonnull %0, i32 noundef -1201649661, i32 noundef %442, i32 noundef %443, i32 noundef 0, i32 noundef %444) #4
  %445 = load i32, ptr %102, align 4, !tbaa !21
  %446 = load i32, ptr %100, align 4, !tbaa !57
  %447 = load i32, ptr %87, align 4, !tbaa !16
  call void @libxsmm_aarch64_instruction_alu_move(ptr noundef nonnull %0, i32 noundef -1201649661, i32 noundef %445, i32 noundef %446, i32 noundef 0, i32 noundef %447) #4
  %.pre620 = load i32, ptr %190, align 4, !tbaa !12
  br label %448

448:                                              ; preds = %441, %436
  %449 = phi i32 [ %.pre620, %441 ], [ %439, %436 ]
  %450 = and i32 %449, 131072
  %.not533 = icmp eq i32 %450, 0
  br i1 %.not533, label %464, label %451

451:                                              ; preds = %448
  %452 = load i32, ptr %98, align 4, !tbaa !44
  %453 = load i32, ptr %100, align 4, !tbaa !57
  %454 = load i32, ptr %93, align 4, !tbaa !50
  call void @libxsmm_aarch64_instruction_alu_move(ptr noundef nonnull %0, i32 noundef -1201649661, i32 noundef %452, i32 noundef %453, i32 noundef 0, i32 noundef %454) #4
  %455 = load i32, ptr %101, align 4, !tbaa !20
  %456 = load i32, ptr %93, align 4, !tbaa !50
  %457 = load i32, ptr %86, align 4, !tbaa !15
  call void @libxsmm_aarch64_instruction_alu_compute_shifted_reg(ptr noundef nonnull %0, i32 noundef 184549383, i32 noundef %455, i32 noundef %456, i32 noundef %457, i32 noundef 0, i32 noundef 0) #4
  %458 = load i32, ptr %99, align 4, !tbaa !45
  %459 = load i32, ptr %100, align 4, !tbaa !57
  %460 = load i32, ptr %94, align 4, !tbaa !39
  call void @libxsmm_aarch64_instruction_alu_move(ptr noundef nonnull %0, i32 noundef -1201649661, i32 noundef %458, i32 noundef %459, i32 noundef 0, i32 noundef %460) #4
  %461 = load i32, ptr %102, align 4, !tbaa !21
  %462 = load i32, ptr %94, align 4, !tbaa !39
  %463 = load i32, ptr %87, align 4, !tbaa !16
  call void @libxsmm_aarch64_instruction_alu_compute_shifted_reg(ptr noundef nonnull %0, i32 noundef 184549383, i32 noundef %461, i32 noundef %462, i32 noundef %463, i32 noundef 0, i32 noundef 0) #4
  br label %464

464:                                              ; preds = %422, %448, %451
  call void @libxsmm_generator_gemm_aarch64_kloop(ptr noundef nonnull %0, ptr noundef nonnull %4, ptr noundef nonnull %5, ptr noundef nonnull %3, ptr noundef nonnull %8, i32 noundef %.2609, i32 noundef %317)
  %465 = load i32, ptr %190, align 4, !tbaa !12
  %466 = and i32 %465, 458752
  %or.cond587 = icmp eq i32 %466, 0
  br i1 %or.cond587, label %497, label %467

467:                                              ; preds = %464
  %468 = and i32 %465, 262144
  %.not536 = icmp eq i32 %468, 0
  br i1 %.not536, label %469, label %.thread623

469:                                              ; preds = %467
  %470 = load i32, ptr %100, align 4, !tbaa !57
  call void @libxsmm_aarch64_instruction_alu_compute_imm12(ptr noundef nonnull %0, i32 noundef 285212678, i32 noundef %470, i32 noundef %470, i32 noundef 8, i8 noundef zeroext 0) #4
  %.pre621 = load i32, ptr %190, align 4, !tbaa !12
  %.pre622 = and i32 %.pre621, 262144
  %.not538 = icmp eq i32 %.pre622, 0
  br i1 %.not538, label %483, label %.thread623

.thread623:                                       ; preds = %467, %469
  %471 = load i32, ptr %93, align 4, !tbaa !50
  %472 = load i64, ptr %305, align 1, !tbaa !58
  call void @libxsmm_aarch64_instruction_alu_set_imm64(ptr noundef nonnull %0, i32 noundef %471, i64 noundef %472) #4
  %473 = load i32, ptr %94, align 4, !tbaa !39
  %474 = load i64, ptr %306, align 1, !tbaa !59
  call void @libxsmm_aarch64_instruction_alu_set_imm64(ptr noundef nonnull %0, i32 noundef %473, i64 noundef %474) #4
  %475 = load i32, ptr %93, align 4, !tbaa !50
  %476 = load i32, ptr %86, align 4, !tbaa !15
  call void @libxsmm_aarch64_instruction_alu_compute_shifted_reg(ptr noundef nonnull %0, i32 noundef 184549383, i32 noundef %475, i32 noundef %476, i32 noundef %476, i32 noundef 0, i32 noundef 0) #4
  %477 = load i32, ptr %94, align 4, !tbaa !39
  %478 = load i32, ptr %87, align 4, !tbaa !16
  call void @libxsmm_aarch64_instruction_alu_compute_shifted_reg(ptr noundef nonnull %0, i32 noundef 184549383, i32 noundef %477, i32 noundef %478, i32 noundef %478, i32 noundef 0, i32 noundef 0) #4
  %479 = load i32, ptr %93, align 4, !tbaa !50
  %480 = load i32, ptr %101, align 4, !tbaa !20
  call void @libxsmm_aarch64_instruction_alu_compute_shifted_reg(ptr noundef nonnull %0, i32 noundef 184549383, i32 noundef %479, i32 noundef %480, i32 noundef %480, i32 noundef 0, i32 noundef 0) #4
  %481 = load i32, ptr %94, align 4, !tbaa !39
  %482 = load i32, ptr %102, align 4, !tbaa !21
  call void @libxsmm_aarch64_instruction_alu_compute_shifted_reg(ptr noundef nonnull %0, i32 noundef 184549383, i32 noundef %481, i32 noundef %482, i32 noundef %482, i32 noundef 0, i32 noundef 0) #4
  br label %483

483:                                              ; preds = %.thread623, %469
  %484 = load i32, ptr %103, align 4, !tbaa !22
  call void @libxsmm_generator_loop_footer_aarch64(ptr noundef nonnull %0, ptr noundef nonnull %4, i32 noundef %484, i32 noundef 1) #4
  %485 = load i32, ptr %190, align 4, !tbaa !12
  %486 = and i32 %485, 262144
  %.not539 = icmp eq i32 %486, 0
  br i1 %.not539, label %492, label %487

487:                                              ; preds = %483
  %488 = load i32, ptr %86, align 4, !tbaa !15
  %489 = load i32, ptr %101, align 4, !tbaa !20
  call void @libxsmm_aarch64_instruction_alu_compute_shifted_reg(ptr noundef nonnull %0, i32 noundef 1258291207, i32 noundef %488, i32 noundef %489, i32 noundef %488, i32 noundef 0, i32 noundef 0) #4
  %490 = load i32, ptr %87, align 4, !tbaa !16
  %491 = load i32, ptr %102, align 4, !tbaa !21
  call void @libxsmm_aarch64_instruction_alu_compute_shifted_reg(ptr noundef nonnull %0, i32 noundef 1258291207, i32 noundef %490, i32 noundef %491, i32 noundef %490, i32 noundef 0, i32 noundef 0) #4
  br label %497

492:                                              ; preds = %483
  %493 = load i32, ptr %101, align 4, !tbaa !20
  %494 = load i32, ptr %86, align 4, !tbaa !15
  call void @libxsmm_aarch64_instruction_alu_compute_imm12(ptr noundef nonnull %0, i32 noundef 285212678, i32 noundef %493, i32 noundef %494, i32 noundef 0, i8 noundef zeroext 0) #4
  %495 = load i32, ptr %102, align 4, !tbaa !21
  %496 = load i32, ptr %87, align 4, !tbaa !16
  call void @libxsmm_aarch64_instruction_alu_compute_imm12(ptr noundef nonnull %0, i32 noundef 285212678, i32 noundef %495, i32 noundef %496, i32 noundef 0, i8 noundef zeroext 0) #4
  br label %497

497:                                              ; preds = %464, %487, %492
  %498 = load i32, ptr %104, align 4, !tbaa !23
  switch i32 %498, label %518 [
    i32 2001, label %499
    i32 2002, label %499
    i32 2101, label %499
    i32 2501, label %499
  ]

499:                                              ; preds = %497, %497, %497, %497
  %500 = load i32, ptr %299, align 8, !tbaa !49
  %501 = load i32, ptr %300, align 4, !tbaa !55
  br i1 %.not520, label %508, label %502

502:                                              ; preds = %499
  %503 = load i32, ptr %88, align 4, !tbaa !40
  %504 = load i32, ptr %93, align 4, !tbaa !50
  %505 = load i32, ptr %301, align 4, !tbaa !48
  %506 = load i32, ptr %302, align 4, !tbaa !51
  %507 = mul i32 %506, %505
  call void @libxsmm_generator_store_2dregblock_mmla_aarch64_asimd(ptr noundef nonnull %0, ptr noundef nonnull %3, ptr noundef nonnull %8, i32 noundef %503, i32 noundef %504, i32 noundef %500, i32 noundef %501, i32 noundef %.2609, i32 noundef %317, i32 noundef %507, i8 noundef zeroext %.1483) #4
  br label %602

508:                                              ; preds = %499
  %509 = load i32, ptr %93, align 4, !tbaa !50
  %510 = load i32, ptr %94, align 4, !tbaa !39
  call void @libxsmm_generator_gemm_apply_fusion_2dregblock_aarch64(ptr noundef nonnull %0, ptr noundef nonnull %8, ptr noundef nonnull %3, i32 noundef %509, i32 noundef %510, i32 noundef %500, i32 noundef %501, i32 noundef %.2609, i32 noundef %317) #4
  %511 = load i32, ptr %88, align 4, !tbaa !40
  %512 = load i32, ptr %93, align 4, !tbaa !50
  %513 = load i32, ptr %299, align 8, !tbaa !49
  %514 = load i32, ptr %300, align 4, !tbaa !55
  %515 = load i32, ptr %301, align 4, !tbaa !48
  %516 = load i32, ptr %302, align 4, !tbaa !51
  %517 = mul i32 %516, %515
  call void @libxsmm_generator_store_2dregblock_aarch64_asimd(ptr noundef nonnull %0, i32 noundef %511, i32 noundef %512, i32 noundef %513, i32 noundef %514, i32 noundef %.2609, i32 noundef %317, i32 noundef %517) #4
  br label %602

518:                                              ; preds = %497
  %519 = add i32 %498, -2201
  %or.cond588 = icmp ult i32 %519, 300
  br i1 %or.cond588, label %520, label %597

520:                                              ; preds = %518
  br i1 %.not520, label %558, label %521

521:                                              ; preds = %520
  %522 = load i32, ptr %307, align 4, !tbaa !60
  %.not540 = icmp eq i32 %522, 0
  br i1 %.not540, label %527, label %523

523:                                              ; preds = %521
  %524 = load i32, ptr %93, align 4, !tbaa !50
  %525 = load i32, ptr %299, align 8, !tbaa !49
  %526 = load i32, ptr %300, align 4, !tbaa !55
  call void @libxsmm_generator_gemm_apply_sigmoid_fusion_2dregblock_aarch64_sve(ptr noundef nonnull %0, ptr noundef nonnull %8, ptr noundef nonnull %3, i32 noundef %524, i32 noundef %524, i32 noundef %525, i32 noundef %526, i32 noundef %.2609, i32 noundef %317, i32 noundef 1) #4
  br label %527

527:                                              ; preds = %523, %521
  %528 = load i32, ptr %88, align 4, !tbaa !40
  %529 = load i32, ptr %93, align 4, !tbaa !50
  %530 = load i32, ptr %94, align 4, !tbaa !39
  %531 = load i32, ptr %95, align 4, !tbaa !47
  %532 = load i32, ptr %96, align 4
  %533 = load i32, ptr %100, align 4
  %534 = select i1 %16, i32 %532, i32 %533
  %535 = load i32, ptr %299, align 8, !tbaa !49
  %536 = load i32, ptr %300, align 4, !tbaa !55
  %537 = load i32, ptr %301, align 4, !tbaa !48
  %538 = load i32, ptr %302, align 4, !tbaa !51
  %539 = mul i32 %538, %537
  %540 = load i32, ptr %190, align 4, !tbaa !12
  %541 = and i32 %540, 4
  call void @libxsmm_generator_store_2dregblock_mmla_aarch64_sve(ptr noundef nonnull %0, ptr noundef nonnull %3, ptr noundef nonnull %8, i32 noundef %528, i32 noundef %529, i32 noundef %530, i32 noundef %531, i32 noundef %534, i32 noundef %535, i32 noundef %536, i32 noundef %.2609, i32 noundef %317, i32 noundef %539, i32 noundef %538, i32 noundef %541, i8 noundef zeroext %.1483) #4
  %542 = load i32, ptr %308, align 8, !tbaa !61
  %543 = icmp eq i32 %542, 1
  %544 = load i32, ptr %309, align 8
  %545 = icmp eq i32 %544, 1
  %or.cond27 = select i1 %543, i1 %545, i1 false
  br i1 %or.cond27, label %546, label %602

546:                                              ; preds = %527
  %547 = load i32, ptr %8, align 4, !tbaa !26
  %548 = and i32 %547, 3
  %.not541 = icmp eq i32 %548, 0
  br i1 %.not541, label %602, label %549

549:                                              ; preds = %546
  %550 = call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef nonnull %9) #4
  %551 = icmp eq i32 %550, 2
  br i1 %551, label %552, label %602

552:                                              ; preds = %549
  %553 = load i32, ptr %8, align 4, !tbaa !26
  %554 = shl i32 %553, 3
  %555 = and i32 %554, 24
  %.not542 = icmp eq i32 %555, 0
  br i1 %.not542, label %602, label %556

556:                                              ; preds = %552
  %557 = load i32, ptr %93, align 4, !tbaa !50
  call void @libxsmm_generator_set_p_register_aarch64_sve(ptr noundef nonnull %0, i32 noundef 3, i32 noundef %555, i32 noundef %557) #4
  br label %602

558:                                              ; preds = %520
  %559 = load i32, ptr %93, align 4, !tbaa !50
  %560 = load i32, ptr %94, align 4, !tbaa !39
  %561 = load i32, ptr %299, align 8, !tbaa !49
  %562 = load i32, ptr %300, align 4, !tbaa !55
  call void @libxsmm_generator_gemm_apply_fusion_2dregblock_aarch64(ptr noundef nonnull %0, ptr noundef nonnull %8, ptr noundef nonnull %3, i32 noundef %559, i32 noundef %560, i32 noundef %561, i32 noundef %562, i32 noundef %.2609, i32 noundef %317) #4
  %563 = call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef nonnull %9) #4
  %564 = load i32, ptr %88, align 4, !tbaa !40
  %565 = load i32, ptr %93, align 4, !tbaa !50
  %566 = load i32, ptr %299, align 8, !tbaa !49
  %567 = load i32, ptr %300, align 4, !tbaa !55
  %568 = load i32, ptr %301, align 4, !tbaa !48
  %569 = load i32, ptr %302, align 4, !tbaa !51
  %570 = mul i32 %569, %568
  br i1 %16, label %573, label %571

571:                                              ; preds = %558
  %572 = call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef nonnull %9) #4
  br label %573

573:                                              ; preds = %558, %571
  %574 = phi i32 [ %572, %571 ], [ 8, %558 ]
  %575 = load i32, ptr %96, align 4
  %576 = select i1 %16, i32 %575, i32 0
  %577 = load i32, ptr %190, align 4
  %578 = lshr i32 %577, 2
  %.lobit = and i32 %578, 1
  %579 = xor i32 %.lobit, 1
  %580 = select i1 %16, i32 %579, i32 0
  call void @libxsmm_generator_store_2dregblock_aarch64_sve(ptr noundef nonnull %0, i32 noundef %563, i32 noundef %564, i32 noundef %565, i32 noundef %566, i32 noundef %567, i32 noundef %.2609, i32 noundef %317, i32 noundef %570, i32 noundef %574, i32 noundef %576, i32 noundef %580) #4
  %581 = load i32, ptr %308, align 8, !tbaa !61
  %582 = icmp eq i32 %581, 1
  br i1 %582, label %583, label %602

583:                                              ; preds = %573
  %584 = load i32, ptr %32, align 1, !tbaa !12
  %585 = and i32 %584, 2048
  %586 = icmp eq i32 %585, 0
  br i1 %586, label %587, label %602

587:                                              ; preds = %583
  %588 = call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef nonnull %9) #4
  %589 = icmp eq i32 %588, 2
  br i1 %589, label %590, label %602

590:                                              ; preds = %587
  %591 = load i32, ptr %8, align 4, !tbaa !26
  %592 = load i32, ptr %299, align 8, !tbaa !49
  %593 = shl i32 %592, 1
  %594 = urem i32 %591, %593
  %595 = shl i32 %594, 1
  %596 = load i32, ptr %93, align 4, !tbaa !50
  call void @libxsmm_generator_set_p_register_aarch64_sve(ptr noundef nonnull %0, i32 noundef 3, i32 noundef %595, i32 noundef %596) #4
  br label %602

597:                                              ; preds = %518
  %598 = load i32, ptr @libxsmm_ninit, align 4, !tbaa !19
  %599 = icmp ugt i32 %598, 1
  %600 = load i32, ptr @libxsmm_verbosity, align 4
  %601 = select i1 %599, i32 %600, i32 1
  call void @libxsmm_handle_error(ptr noundef nonnull %0, i32 noundef 90005, ptr noundef nonnull @__func__.libxsmm_generator_gemm_aarch64_kernel, ptr noundef nonnull @.str, i32 noundef 2130, i32 noundef %601) #4
  br label %.thread597

602:                                              ; preds = %552, %556, %573, %590, %587, %583, %527, %546, %549, %502, %508
  %603 = load i32, ptr %88, align 4, !tbaa !40
  %604 = load i32, ptr %95, align 4, !tbaa !47
  %605 = zext i32 %.2609 to i64
  %606 = load i32, ptr %302, align 4, !tbaa !51
  %607 = zext i32 %606 to i64
  %608 = mul nuw nsw i64 %607, %605
  call void @libxsmm_aarch64_instruction_alu_compute_imm64(ptr noundef nonnull %0, i32 noundef 4096, i32 noundef %603, i32 noundef %604, i32 noundef %603, i64 noundef %608) #4
  %609 = load i32, ptr %308, align 8, !tbaa !61
  %610 = icmp eq i32 %609, 1
  %611 = load i32, ptr %309, align 8
  %612 = icmp eq i32 %611, 1
  %or.cond33 = select i1 %610, i1 %612, i1 false
  br i1 %or.cond33, label %613, label %621

613:                                              ; preds = %602
  %614 = load i32, ptr %94, align 4, !tbaa !39
  call void @libxsmm_generator_gemm_getval_stack_var_aarch64(ptr noundef nonnull %0, i32 noundef 8, i32 noundef %614) #4
  %615 = load i32, ptr %94, align 4, !tbaa !39
  %616 = load i32, ptr %95, align 4, !tbaa !47
  %617 = add nuw nsw i64 %605, 7
  %618 = lshr i64 %617, 3
  call void @libxsmm_aarch64_instruction_alu_compute_imm64(ptr noundef nonnull %0, i32 noundef 4096, i32 noundef %615, i32 noundef %616, i32 noundef %615, i64 noundef %618) #4
  %619 = load i32, ptr %95, align 4, !tbaa !47
  %620 = load i32, ptr %94, align 4, !tbaa !39
  call void @libxsmm_generator_gemm_setval_stack_var_aarch64(ptr noundef nonnull %0, i32 noundef 8, i32 noundef %619, i32 noundef %620) #4
  br label %621

621:                                              ; preds = %613, %602
  %622 = load i32, ptr %303, align 4, !tbaa !56
  %623 = icmp eq i32 %622, 1
  %624 = load i32, ptr %304, align 4
  %625 = icmp eq i32 %624, 1
  %or.cond36 = select i1 %623, i1 true, i1 %625
  br i1 %or.cond36, label %626, label %635

626:                                              ; preds = %621
  %627 = load i32, ptr %94, align 4, !tbaa !39
  call void @libxsmm_generator_gemm_getval_stack_var_aarch64(ptr noundef nonnull %0, i32 noundef 7, i32 noundef %627) #4
  %628 = load i32, ptr %94, align 4, !tbaa !39
  %629 = load i32, ptr %95, align 4, !tbaa !47
  %630 = load i32, ptr %303, align 4, !tbaa !56
  %631 = icmp eq i32 %630, 1
  %.v = select i1 %631, i64 2, i64 1
  %632 = shl nuw nsw i64 %605, %.v
  call void @libxsmm_aarch64_instruction_alu_compute_imm64(ptr noundef nonnull %0, i32 noundef 4096, i32 noundef %628, i32 noundef %629, i32 noundef %628, i64 noundef %632) #4
  %633 = load i32, ptr %95, align 4, !tbaa !47
  %634 = load i32, ptr %94, align 4, !tbaa !39
  call void @libxsmm_generator_gemm_setval_stack_var_aarch64(ptr noundef nonnull %0, i32 noundef 7, i32 noundef %633, i32 noundef %634) #4
  br label %635

635:                                              ; preds = %621, %626
  %636 = load i32, ptr %190, align 4, !tbaa !12
  %637 = and i32 %636, 65536
  %.not543 = icmp eq i32 %637, 0
  br i1 %.not543, label %660, label %638

638:                                              ; preds = %635
  %639 = load i32, ptr %100, align 4, !tbaa !57
  call void @libxsmm_aarch64_instruction_alu_set_imm64(ptr noundef nonnull %0, i32 noundef %639, i64 noundef 0) #4
  %640 = load i32, ptr %86, align 4, !tbaa !15
  %641 = load i32, ptr %101, align 4, !tbaa !20
  call void @libxsmm_aarch64_instruction_alu_compute_imm12(ptr noundef nonnull %0, i32 noundef 285212678, i32 noundef %640, i32 noundef %641, i32 noundef 0, i8 noundef zeroext 0) #4
  %642 = load i32, ptr %97, align 4, !tbaa !18
  %643 = load i32, ptr %103, align 4, !tbaa !22
  call void @libxsmm_aarch64_instruction_alu_move(ptr noundef nonnull %0, i32 noundef -1186988026, i32 noundef %642, i32 noundef 63, i32 noundef 0, i32 noundef %643) #4
  call void @libxsmm_aarch64_instruction_register_jump_back_label(ptr noundef nonnull %0, ptr noundef nonnull %4) #4
  %644 = load i32, ptr %101, align 4, !tbaa !20
  %645 = load i32, ptr %100, align 4, !tbaa !57
  %646 = load i32, ptr %86, align 4, !tbaa !15
  call void @libxsmm_aarch64_instruction_alu_move(ptr noundef nonnull %0, i32 noundef -1201649661, i32 noundef %644, i32 noundef %645, i32 noundef 0, i32 noundef %646) #4
  %647 = load i32, ptr %86, align 4, !tbaa !15
  %648 = load i32, ptr %93, align 4, !tbaa !50
  %649 = load i32, ptr %310, align 4, !tbaa !62
  %650 = zext i32 %649 to i64
  %651 = mul nuw nsw i64 %605, %311
  %652 = mul i64 %651, %650
  call void @libxsmm_aarch64_instruction_alu_compute_imm64(ptr noundef nonnull %0, i32 noundef 4096, i32 noundef %647, i32 noundef %648, i32 noundef %647, i64 noundef %652) #4
  %653 = load i32, ptr %101, align 4, !tbaa !20
  %654 = load i32, ptr %100, align 4, !tbaa !57
  %655 = load i32, ptr %86, align 4, !tbaa !15
  call void @libxsmm_aarch64_instruction_alu_move(ptr noundef nonnull %0, i32 noundef -1205843965, i32 noundef %653, i32 noundef %654, i32 noundef 0, i32 noundef %655) #4
  %656 = load i32, ptr %100, align 4, !tbaa !57
  call void @libxsmm_aarch64_instruction_alu_compute_imm12(ptr noundef nonnull %0, i32 noundef 285212678, i32 noundef %656, i32 noundef %656, i32 noundef 8, i8 noundef zeroext 0) #4
  %657 = load i32, ptr %103, align 4, !tbaa !22
  call void @libxsmm_generator_loop_footer_aarch64(ptr noundef nonnull %0, ptr noundef nonnull %4, i32 noundef %657, i32 noundef 1) #4
  %658 = load i32, ptr %101, align 4, !tbaa !20
  %659 = load i32, ptr %86, align 4, !tbaa !15
  call void @libxsmm_aarch64_instruction_alu_compute_imm12(ptr noundef nonnull %0, i32 noundef 285212678, i32 noundef %658, i32 noundef %659, i32 noundef 0, i8 noundef zeroext 0) #4
  br label %667

660:                                              ; preds = %635
  %661 = load i32, ptr %86, align 4, !tbaa !15
  %662 = load i32, ptr %93, align 4, !tbaa !50
  %663 = load i32, ptr %310, align 4, !tbaa !62
  %664 = zext i32 %663 to i64
  %665 = mul nuw nsw i64 %605, %311
  %666 = mul i64 %665, %664
  call void @libxsmm_aarch64_instruction_alu_compute_imm64(ptr noundef nonnull %0, i32 noundef 4096, i32 noundef %661, i32 noundef %662, i32 noundef %661, i64 noundef %666) #4
  br label %667

667:                                              ; preds = %660, %638
  %668 = load i32, ptr %91, align 4, !tbaa !54
  call void @libxsmm_generator_loop_footer_aarch64(ptr noundef nonnull %0, ptr noundef nonnull %4, i32 noundef %668, i32 noundef %.2609) #4
  br label %669

669:                                              ; preds = %667, %340
  %670 = load i32, ptr %104, align 4, !tbaa !23
  %671 = call i32 @libxsmm_generator_gemm_aarch64_update_m_blocking(ptr noundef nonnull %3, ptr noundef nonnull %8, i32 noundef %670, i32 noundef %.2609) #4
  %672 = load i32, ptr %8, align 4, !tbaa !26
  %.not522 = icmp eq i32 %344, %672
  br i1 %.not522, label %._crit_edge, label %.lr.ph, !llvm.loop !63

._crit_edge:                                      ; preds = %669, %331
  %.lcssa = phi i32 [ 0, %331 ], [ %344, %669 ]
  %673 = load i32, ptr %88, align 4, !tbaa !40
  %674 = load i32, ptr %95, align 4, !tbaa !47
  %675 = zext i32 %317 to i64
  %676 = load i32, ptr %301, align 4, !tbaa !48
  %677 = zext i32 %676 to i64
  %678 = mul nuw nsw i64 %677, %675
  %679 = load i32, ptr %302, align 4, !tbaa !51
  %680 = zext i32 %679 to i64
  %681 = zext i32 %.lcssa to i64
  %682 = sub nsw i64 %678, %681
  %683 = mul i64 %682, %680
  call void @libxsmm_aarch64_instruction_alu_compute_imm64(ptr noundef nonnull %0, i32 noundef 4096, i32 noundef %673, i32 noundef %674, i32 noundef %673, i64 noundef %683) #4
  %684 = load i32, ptr %308, align 8, !tbaa !61
  %685 = icmp eq i32 %684, 1
  %686 = load i32, ptr %309, align 8
  %687 = icmp eq i32 %686, 1
  %or.cond39 = select i1 %685, i1 %687, i1 false
  br i1 %or.cond39, label %688, label %703

688:                                              ; preds = %._crit_edge
  %689 = load i32, ptr %94, align 4, !tbaa !39
  call void @libxsmm_generator_gemm_getval_stack_var_aarch64(ptr noundef nonnull %0, i32 noundef 8, i32 noundef %689) #4
  %690 = load i32, ptr %94, align 4, !tbaa !39
  %691 = load i32, ptr %95, align 4, !tbaa !47
  %692 = load i32, ptr %312, align 1, !tbaa !65
  %693 = zext i32 %692 to i64
  %694 = mul nuw nsw i64 %693, %675
  %695 = lshr i64 %694, 3
  %696 = load i32, ptr %8, align 4, !tbaa !26
  %697 = zext i32 %696 to i64
  %698 = add nuw nsw i64 %697, 7
  %699 = lshr i64 %698, 3
  %700 = sub nsw i64 %695, %699
  call void @libxsmm_aarch64_instruction_alu_compute_imm64(ptr noundef nonnull %0, i32 noundef 4096, i32 noundef %690, i32 noundef %691, i32 noundef %690, i64 noundef %700) #4
  %701 = load i32, ptr %95, align 4, !tbaa !47
  %702 = load i32, ptr %94, align 4, !tbaa !39
  call void @libxsmm_generator_gemm_setval_stack_var_aarch64(ptr noundef nonnull %0, i32 noundef 8, i32 noundef %701, i32 noundef %702) #4
  br label %703

703:                                              ; preds = %688, %._crit_edge
  %704 = load i32, ptr %303, align 4, !tbaa !56
  %705 = icmp eq i32 %704, 1
  %706 = load i32, ptr %304, align 4
  %707 = icmp eq i32 %706, 1
  %or.cond42 = select i1 %705, i1 true, i1 %707
  br i1 %or.cond42, label %708, label %719

708:                                              ; preds = %703
  %709 = load i32, ptr %94, align 4, !tbaa !39
  call void @libxsmm_generator_gemm_getval_stack_var_aarch64(ptr noundef nonnull %0, i32 noundef 7, i32 noundef %709) #4
  %710 = load i32, ptr %94, align 4, !tbaa !39
  %711 = load i32, ptr %95, align 4, !tbaa !47
  %712 = load i32, ptr %303, align 4, !tbaa !56
  %713 = icmp eq i32 %712, 1
  %714 = load i32, ptr %8, align 4
  %715 = zext i32 %714 to i64
  %.v603 = select i1 %713, i64 2, i64 1
  %716 = shl nuw nsw i64 %715, %.v603
  call void @libxsmm_aarch64_instruction_alu_compute_imm64(ptr noundef nonnull %0, i32 noundef 4097, i32 noundef %710, i32 noundef %711, i32 noundef %710, i64 noundef %716) #4
  %717 = load i32, ptr %95, align 4, !tbaa !47
  %718 = load i32, ptr %94, align 4, !tbaa !39
  call void @libxsmm_generator_gemm_setval_stack_var_aarch64(ptr noundef nonnull %0, i32 noundef 7, i32 noundef %717, i32 noundef %718) #4
  br label %719

719:                                              ; preds = %703, %708
  %720 = load i32, ptr %190, align 4, !tbaa !12
  %721 = and i32 %720, 65536
  %.not523 = icmp eq i32 %721, 0
  br i1 %.not523, label %736, label %722

722:                                              ; preds = %719
  %723 = load i32, ptr %100, align 4, !tbaa !57
  call void @libxsmm_aarch64_instruction_alu_set_imm64(ptr noundef nonnull %0, i32 noundef %723, i64 noundef 0) #4
  %724 = load i32, ptr %86, align 4, !tbaa !15
  %725 = load i32, ptr %101, align 4, !tbaa !20
  call void @libxsmm_aarch64_instruction_alu_compute_imm12(ptr noundef nonnull %0, i32 noundef 285212678, i32 noundef %724, i32 noundef %725, i32 noundef 0, i8 noundef zeroext 0) #4
  %726 = load i32, ptr %87, align 4, !tbaa !16
  %727 = load i32, ptr %102, align 4, !tbaa !21
  call void @libxsmm_aarch64_instruction_alu_compute_imm12(ptr noundef nonnull %0, i32 noundef 285212678, i32 noundef %726, i32 noundef %727, i32 noundef 0, i8 noundef zeroext 0) #4
  %728 = load i32, ptr %97, align 4, !tbaa !18
  %729 = load i32, ptr %103, align 4, !tbaa !22
  call void @libxsmm_aarch64_instruction_alu_move(ptr noundef nonnull %0, i32 noundef -1186988026, i32 noundef %728, i32 noundef 63, i32 noundef 0, i32 noundef %729) #4
  call void @libxsmm_aarch64_instruction_register_jump_back_label(ptr noundef nonnull %0, ptr noundef nonnull %4) #4
  %730 = load i32, ptr %101, align 4, !tbaa !20
  %731 = load i32, ptr %100, align 4, !tbaa !57
  %732 = load i32, ptr %86, align 4, !tbaa !15
  call void @libxsmm_aarch64_instruction_alu_move(ptr noundef nonnull %0, i32 noundef -1201649661, i32 noundef %730, i32 noundef %731, i32 noundef 0, i32 noundef %732) #4
  %733 = load i32, ptr %102, align 4, !tbaa !21
  %734 = load i32, ptr %100, align 4, !tbaa !57
  %735 = load i32, ptr %87, align 4, !tbaa !16
  call void @libxsmm_aarch64_instruction_alu_move(ptr noundef nonnull %0, i32 noundef -1201649661, i32 noundef %733, i32 noundef %734, i32 noundef 0, i32 noundef %735) #4
  br label %736

736:                                              ; preds = %722, %719
  %737 = load i32, ptr %86, align 4, !tbaa !15
  %738 = load i32, ptr %93, align 4, !tbaa !50
  %739 = load i32, ptr %8, align 4, !tbaa !26
  %740 = zext i32 %739 to i64
  %741 = load i32, ptr %310, align 4, !tbaa !62
  %742 = zext i32 %741 to i64
  %743 = mul nuw nsw i64 %740, %311
  %744 = mul i64 %743, %742
  call void @libxsmm_aarch64_instruction_alu_compute_imm64(ptr noundef nonnull %0, i32 noundef 4097, i32 noundef %737, i32 noundef %738, i32 noundef %737, i64 noundef %744) #4
  %745 = load i32, ptr %190, align 4, !tbaa !12
  %746 = and i32 %745, 4098
  %747 = load i32, ptr %87, align 4, !tbaa !16
  %748 = load i32, ptr %94, align 4, !tbaa !39
  switch i32 %746, label %758 [
    i32 2, label %749
    i32 4098, label %753
  ]

749:                                              ; preds = %736
  %750 = load i32, ptr %310, align 4, !tbaa !62
  %751 = zext i32 %750 to i64
  %752 = mul nuw nsw i64 %751, %675
  br label %765

753:                                              ; preds = %736
  %754 = mul nuw nsw i64 %675, %311
  %755 = load i32, ptr %310, align 4, !tbaa !62
  %756 = zext i32 %755 to i64
  %757 = mul nuw nsw i64 %754, %756
  br label %765

758:                                              ; preds = %736
  %759 = load i32, ptr %313, align 4, !tbaa !36
  %760 = zext i32 %759 to i64
  %761 = mul nuw nsw i64 %760, %675
  %762 = load i32, ptr %310, align 4, !tbaa !62
  %763 = zext i32 %762 to i64
  %764 = mul nuw nsw i64 %761, %763
  br label %765

765:                                              ; preds = %753, %758, %749
  %.sink = phi i64 [ %757, %753 ], [ %764, %758 ], [ %752, %749 ]
  call void @libxsmm_aarch64_instruction_alu_compute_imm64(ptr noundef nonnull %0, i32 noundef 4096, i32 noundef %747, i32 noundef %748, i32 noundef %747, i64 noundef %.sink) #4
  %766 = load i32, ptr %190, align 4, !tbaa !12
  %767 = and i32 %766, 65536
  %.not527 = icmp eq i32 %767, 0
  br i1 %.not527, label %781, label %768

768:                                              ; preds = %765
  %769 = load i32, ptr %101, align 4, !tbaa !20
  %770 = load i32, ptr %100, align 4, !tbaa !57
  %771 = load i32, ptr %86, align 4, !tbaa !15
  call void @libxsmm_aarch64_instruction_alu_move(ptr noundef nonnull %0, i32 noundef -1205843965, i32 noundef %769, i32 noundef %770, i32 noundef 0, i32 noundef %771) #4
  %772 = load i32, ptr %102, align 4, !tbaa !21
  %773 = load i32, ptr %100, align 4, !tbaa !57
  %774 = load i32, ptr %87, align 4, !tbaa !16
  call void @libxsmm_aarch64_instruction_alu_move(ptr noundef nonnull %0, i32 noundef -1205843965, i32 noundef %772, i32 noundef %773, i32 noundef 0, i32 noundef %774) #4
  %775 = load i32, ptr %100, align 4, !tbaa !57
  call void @libxsmm_aarch64_instruction_alu_compute_imm12(ptr noundef nonnull %0, i32 noundef 285212678, i32 noundef %775, i32 noundef %775, i32 noundef 8, i8 noundef zeroext 0) #4
  %776 = load i32, ptr %103, align 4, !tbaa !22
  call void @libxsmm_generator_loop_footer_aarch64(ptr noundef nonnull %0, ptr noundef nonnull %4, i32 noundef %776, i32 noundef 1) #4
  %777 = load i32, ptr %101, align 4, !tbaa !20
  %778 = load i32, ptr %86, align 4, !tbaa !15
  call void @libxsmm_aarch64_instruction_alu_compute_imm12(ptr noundef nonnull %0, i32 noundef 285212678, i32 noundef %777, i32 noundef %778, i32 noundef 0, i8 noundef zeroext 0) #4
  %779 = load i32, ptr %102, align 4, !tbaa !21
  %780 = load i32, ptr %87, align 4, !tbaa !16
  call void @libxsmm_aarch64_instruction_alu_compute_imm12(ptr noundef nonnull %0, i32 noundef 285212678, i32 noundef %779, i32 noundef %780, i32 noundef 0, i8 noundef zeroext 0) #4
  br label %781

781:                                              ; preds = %765, %768
  %782 = load i32, ptr %92, align 4, !tbaa !53
  call void @libxsmm_generator_loop_footer_aarch64(ptr noundef nonnull %0, ptr noundef nonnull %4, i32 noundef %782, i32 noundef %317) #4
  %783 = load i32, ptr %297, align 4, !tbaa !52
  %.not518 = icmp eq i32 %320, %783
  br i1 %.not518, label %._crit_edge616, label %314

._crit_edge616:                                   ; preds = %781, %296
  %784 = load i32, ptr %227, align 4, !tbaa !46
  %.not519 = icmp eq i32 %784, 0
  br i1 %.not519, label %787, label %785

785:                                              ; preds = %._crit_edge616
  %786 = getelementptr inbounds i8, ptr %8, i64 20
  store i32 %.0479, ptr %786, align 4, !tbaa !48
  call void @libxsmm_generator_gemm_vnni_store_C_from_scratch_aarch64(ptr noundef nonnull %0, ptr noundef nonnull %4, ptr noundef nonnull %5, ptr noundef nonnull %3, ptr noundef nonnull %8) #4
  br label %787

787:                                              ; preds = %785, %._crit_edge616
  call void @libxsmm_generator_gemm_destroy_stack_frame_aarch64(ptr noundef nonnull %0) #4
  call void @libxsmm_aarch64_instruction_close_stream(ptr noundef nonnull %0, i16 noundef zeroext 3599) #4
  br label %.thread597

.thread597:                                       ; preds = %335, %417, %597, %787, %153, %133, %116, %108
  call void @llvm.lifetime.end.p0(i64 95, ptr nonnull %8) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %7) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %6) #4
  call void @llvm.lifetime.end.p0(i64 132, ptr nonnull %5) #4
  call void @llvm.lifetime.end.p0(i64 2052, ptr nonnull %4) #4
  call void @llvm.lifetime.end.p0(i64 688, ptr nonnull %3) #4
  ret void
}

declare void @libxsmm_reset_aarch64_gp_reg_mapping(ptr noundef) local_unnamed_addr #1

declare void @libxsmm_reset_loop_label_tracker(ptr noundef) local_unnamed_addr #1

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

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

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

declare i32 @LIBXSMM_GEMM_GETENUM_ABC_COMMON_PREC(ptr noundef) local_unnamed_addr #1

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

declare void @libxsmm_generator_gemm_setup_stack_frame_aarch64(ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #1

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

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

declare void @libxsmm_generator_gemm_apply_opA_opB_aarch64(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #1

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

declare i32 @libxsmm_generator_gemm_aarch64_get_initial_m_blocking(ptr noundef, ptr noundef, i32 noundef) local_unnamed_addr #1

declare void @libxsmm_generator_load_2dregblock_mmla_aarch64_asimd(ptr noundef, ptr noundef, ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i8 noundef zeroext) local_unnamed_addr #1

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

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

declare void @libxsmm_generator_load_2dregblock_mmla_aarch64_sve(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, i8 noundef zeroext) local_unnamed_addr #1

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

declare void @libxsmm_aarch64_instruction_register_jump_back_label(ptr noundef, ptr noundef) local_unnamed_addr #1

declare void @libxsmm_generator_store_2dregblock_mmla_aarch64_asimd(ptr noundef, ptr noundef, ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i8 noundef zeroext) local_unnamed_addr #1

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

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

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

declare void @libxsmm_generator_store_2dregblock_mmla_aarch64_sve(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, i8 noundef zeroext) local_unnamed_addr #1

declare void @libxsmm_generator_store_2dregblock_aarch64_sve(ptr 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 #1

declare i32 @libxsmm_generator_gemm_aarch64_update_m_blocking(ptr noundef, ptr noundef, i32 noundef, i32 noundef) local_unnamed_addr #1

declare void @libxsmm_generator_gemm_vnni_store_C_from_scratch_aarch64(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #1

declare void @libxsmm_generator_gemm_destroy_stack_frame_aarch64(ptr noundef) local_unnamed_addr #1

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #3 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !7, i64 8}
!6 = !{!"libxsmm_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 24}
!13 = !{!14, !7, i64 0}
!14 = !{!"libxsmm_gp_reg_mapping_struct", !7, i64 0, !7, i64 4, !7, i64 8, !7, i64 12, !7, i64 16, !7, i64 20, !7, i64 24, !7, i64 28, !7, i64 32, !7, i64 36, !7, i64 40, !7, i64 44, !7, i64 48, !7, i64 52, !7, i64 56, !7, i64 60, !7, i64 64, !7, i64 68, !7, i64 72, !7, i64 76, !7, i64 80, !7, i64 84, !7, i64 88, !7, i64 92, !7, i64 96, !7, i64 100, !7, i64 104, !7, i64 108, !7, i64 112, !7, i64 116, !7, i64 120, !7, i64 124, !7, i64 128}
!15 = !{!14, !7, i64 4}
!16 = !{!14, !7, i64 12}
!17 = !{!14, !7, i64 80}
!18 = !{!14, !7, i64 52}
!19 = !{!7, !7, i64 0}
!20 = !{!14, !7, i64 104}
!21 = !{!14, !7, i64 108}
!22 = !{!14, !7, i64 56}
!23 = !{!24, !7, i64 28}
!24 = !{!"libxsmm_generated_code", !25, i64 0, !7, i64 8, !7, i64 12, !7, i64 16, !7, i64 20, !7, i64 24, !7, i64 28}
!25 = !{!"any pointer", !8, i64 0}
!26 = !{!6, !7, i64 0}
!27 = !{i64 0, i64 4, !19, i64 4, i64 4, !19, i64 8, i64 4, !19, i64 12, i64 4, !19, i64 16, i64 4, !19, i64 20, i64 4, !19, i64 24, i64 4, !19, i64 28, i64 1, !28, i64 29, i64 3, !28, i64 32, i64 1, !28, i64 33, i64 8, !29, i64 41, i64 8, !29, i64 49, i64 1, !28, i64 50, i64 4, !19, i64 54, i64 4, !19, i64 58, i64 4, !19, i64 62, i64 2, !30, i64 64, i64 2, !30, i64 66, i64 1, !28, i64 67, i64 1, !28, i64 68, i64 1, !28, i64 69, i64 1, !28, i64 70, i64 2, !30, i64 72, i64 2, !30, i64 74, i64 2, !30, i64 76, i64 2, !30, i64 78, i64 2, !30, i64 80, i64 2, !30, i64 82, i64 4, !19, i64 86, i64 4, !19, i64 90, i64 4, !19, i64 94, i64 1, !28}
!28 = !{!8, !8, i64 0}
!29 = !{!10, !10, i64 0}
!30 = !{!11, !11, i64 0}
!31 = !{!6, !7, i64 12}
!32 = !{!33, !7, i64 660}
!33 = !{!"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, !34, 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, !25, i64 592, !7, i64 600, !7, i64 604, !7, i64 608, !7, i64 612, !25, 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}
!34 = !{!"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}
!35 = !{!33, !7, i64 668}
!36 = !{!6, !7, i64 16}
!37 = !{!33, !7, i64 672}
!38 = !{!33, !7, i64 676}
!39 = !{!14, !7, i64 92}
!40 = !{!14, !7, i64 20}
!41 = !{!6, !8, i64 28}
!42 = !{!14, !7, i64 24}
!43 = !{!14, !7, i64 32}
!44 = !{!14, !7, i64 28}
!45 = !{!14, !7, i64 36}
!46 = !{!33, !7, i64 140}
!47 = !{!14, !7, i64 96}
!48 = !{!6, !7, i64 20}
!49 = !{!33, !7, i64 8}
!50 = !{!14, !7, i64 88}
!51 = !{!33, !7, i64 20}
!52 = !{!6, !7, i64 4}
!53 = !{!14, !7, i64 44}
!54 = !{!14, !7, i64 40}
!55 = !{!33, !7, i64 4}
!56 = !{!33, !7, i64 116}
!57 = !{!14, !7, i64 100}
!58 = !{!6, !10, i64 33}
!59 = !{!6, !10, i64 41}
!60 = !{!33, !7, i64 132}
!61 = !{!33, !7, i64 120}
!62 = !{!33, !7, i64 12}
!63 = distinct !{!63, !64}
!64 = !{!"llvm.loop.mustprogress"}
!65 = !{!6, !7, i64 90}


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