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

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

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

@__const.libxsmm_generator_load_2dregblock_mmla_aarch64_sve.l_instr_zip = external hidden unnamed_addr constant [2 x i32], align 4
@__const.libxsmm_generator_load_2dregblock_mmla_aarch64_sve.l_vr_c = external hidden unnamed_addr constant [24 x i32], align 16

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

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

declare i32 @libxsmm_generator_aarch64_get_sve_type(i8 noundef zeroext) #1

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

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

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

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

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

; 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

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

; Function Attrs: nounwind uwtable
define dso_local void @libxsmm_generator_load_2dregblock_mmla_aarch64_sve(ptr noundef %0, ptr noundef %1, ptr noundef %2, i32 noundef %3, i32 noundef %4, i32 noundef %5, i32 noundef %6, i32 noundef %7, i32 noundef %8, i32 noundef %9, i32 noundef %10, i32 noundef %11, i32 noundef %12, i8 noundef zeroext %13) #0 {
  %15 = alloca ptr, align 8
  %16 = alloca ptr, align 8
  %17 = alloca ptr, align 8
  %18 = alloca i32, align 4
  %19 = alloca i32, align 4
  %20 = alloca i32, align 4
  %21 = alloca i32, align 4
  %22 = alloca i32, align 4
  %23 = alloca i32, align 4
  %24 = alloca i32, align 4
  %25 = alloca i32, align 4
  %26 = alloca i32, align 4
  %27 = alloca i32, align 4
  %28 = alloca i8, align 1
  %29 = alloca i32, align 4
  %30 = alloca [2 x i32], align 4
  %31 = alloca i32, align 4
  %32 = alloca i32, align 4
  %33 = alloca i32, align 4
  %34 = alloca [2 x i32], align 4
  %35 = alloca i32, align 4
  %36 = alloca i32, align 4
  %37 = alloca [2 x i32], align 4
  %38 = alloca i32, align 4
  %39 = alloca [24 x i32], align 16
  %40 = alloca i32, align 4
  %41 = alloca i32, align 4
  %42 = alloca i32, align 4
  %43 = alloca i32, align 4
  %44 = alloca i32, align 4
  %45 = alloca i32, align 4
  %46 = alloca i32, align 4
  store ptr %0, ptr %15, align 8, !tbaa !5
  store ptr %1, ptr %16, align 8, !tbaa !5
  store ptr %2, ptr %17, align 8, !tbaa !5
  store i32 %3, ptr %18, align 4, !tbaa !9
  store i32 %4, ptr %19, align 4, !tbaa !9
  store i32 %5, ptr %20, align 4, !tbaa !9
  store i32 %6, ptr %21, align 4, !tbaa !9
  store i32 %7, ptr %22, align 4, !tbaa !9
  store i32 %8, ptr %23, align 4, !tbaa !9
  store i32 %9, ptr %24, align 4, !tbaa !9
  store i32 %10, ptr %25, align 4, !tbaa !9
  store i32 %11, ptr %26, align 4, !tbaa !9
  store i32 %12, ptr %27, align 4, !tbaa !9
  store i8 %13, ptr %28, align 1, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #5
  store i32 0, ptr %31, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #5
  %47 = load i32, ptr %24, align 4, !tbaa !9
  %48 = add i32 %47, 1
  %49 = udiv i32 %48, 2
  store i32 %49, ptr %32, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #5
  store i32 0, ptr %33, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #5
  call void @llvm.memset.p0.i64(ptr align 4 %34, i8 0, i64 8, i1 false)
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #5
  store i32 0, ptr %35, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %36) #5
  store i32 0, ptr %36, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #5
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %37, ptr align 4 @__const.libxsmm_generator_load_2dregblock_mmla_aarch64_sve.l_instr_zip, i64 8, i1 false)
  call void @llvm.lifetime.start.p0(i64 4, ptr %38) #5
  store i32 3, ptr %38, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 96, ptr %39) #5
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %39, ptr align 16 @__const.libxsmm_generator_load_2dregblock_mmla_aarch64_sve.l_vr_c, i64 96, i1 false)
  call void @llvm.lifetime.start.p0(i64 4, ptr %40) #5
  %50 = load ptr, ptr %17, align 8, !tbaa !5
  %51 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %50, i32 0, i32 8
  %52 = getelementptr inbounds [3 x i8], ptr %51, i64 0, i64 0
  %53 = call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef %52)
  %54 = icmp eq i32 2, %53
  %55 = zext i1 %54 to i64
  %56 = select i1 %54, i32 1, i32 0
  store i32 %56, ptr %40, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %41) #5
  %57 = load ptr, ptr %17, 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_C_PREC(ptr noundef %59)
  %61 = icmp eq i32 1, %60
  br i1 %61, label %62, label %68

62:                                               ; preds = %14
  %63 = load ptr, ptr %17, align 8, !tbaa !5
  %64 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %63, i32 0, i32 8
  %65 = getelementptr inbounds [3 x i8], ptr %64, i64 0, i64 0
  %66 = call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef %65)
  %67 = icmp eq i32 12, %66
  br label %68

68:                                               ; preds = %62, %14
  %69 = phi i1 [ false, %14 ], [ %67, %62 ]
  %70 = zext i1 %69 to i64
  %71 = select i1 %69, i32 1, i32 0
  store i32 %71, ptr %41, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %42) #5
  store i32 2, ptr %42, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %43) #5
  %72 = load ptr, ptr %16, align 8, !tbaa !5
  %73 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %72, i32 0, i32 25
  %74 = load i32, ptr %73, align 4, !tbaa !12
  %75 = icmp ugt i32 %74, 0
  %76 = zext i1 %75 to i64
  %77 = select i1 %75, i32 1, i32 0
  store i32 %77, ptr %43, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %44) #5
  %78 = load ptr, ptr %16, align 8, !tbaa !5
  %79 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %78, i32 0, i32 25
  %80 = load i32, ptr %79, align 4, !tbaa !12
  %81 = icmp ugt i32 %80, 0
  %82 = zext i1 %81 to i64
  %83 = select i1 %81, i32 2, i32 4
  store i32 %83, ptr %44, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %45) #5
  %84 = load i32, ptr %20, align 4, !tbaa !9
  store i32 %84, ptr %45, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %46) #5
  %85 = call i32 @libxsmm_generator_aarch64_get_sve_type(i8 noundef zeroext 4)
  store i32 %85, ptr %46, align 4, !tbaa !9
  %86 = load i32, ptr %22, align 4, !tbaa !9
  %87 = load i8, ptr %28, align 1, !tbaa !11
  %88 = load i32, ptr %23, align 4, !tbaa !9
  %89 = load i32, ptr %21, align 4, !tbaa !9
  %90 = udiv i32 %88, %89
  %91 = getelementptr inbounds [2 x i32], ptr %34, i64 0, i64 0
  store i32 %90, ptr %91, align 4, !tbaa !9
  %92 = load i32, ptr %23, align 4, !tbaa !9
  %93 = load i32, ptr %21, align 4, !tbaa !9
  %94 = urem i32 %92, %93
  store i32 %94, ptr %36, align 4, !tbaa !9
  %95 = load i32, ptr %36, align 4, !tbaa !9
  %96 = icmp ugt i32 %95, 0
  %97 = zext i1 %96 to i32
  %98 = getelementptr inbounds [2 x i32], ptr %34, i64 0, i64 1
  store i32 %97, ptr %98, align 4, !tbaa !9
  %99 = getelementptr inbounds [2 x i32], ptr %34, i64 0, i64 0
  %100 = load i32, ptr %99, align 4, !tbaa !9
  %101 = load i32, ptr %21, align 4, !tbaa !9
  %102 = mul i32 %100, %101
  %103 = load i32, ptr %26, align 4, !tbaa !9
  %104 = mul i32 %102, %103
  %105 = getelementptr inbounds [2 x i32], ptr %34, i64 0, i64 1
  %106 = load i32, ptr %105, align 4, !tbaa !9
  %107 = load i32, ptr %23, align 4, !tbaa !9
  %108 = load i32, ptr %21, align 4, !tbaa !9
  %109 = urem i32 %107, %108
  %110 = mul i32 %106, %109
  %111 = load i32, ptr %26, align 4, !tbaa !9
  %112 = mul i32 %110, %111
  %113 = add i32 %104, %112
  store i32 %113, ptr %35, align 4, !tbaa !9
  %114 = getelementptr inbounds [24 x i32], ptr %39, i64 0, i64 0
  %115 = load i32, ptr %114, align 16, !tbaa !9
  store i32 %115, ptr %29, align 4, !tbaa !9
  %116 = load i32, ptr %29, align 4, !tbaa !9
  %117 = sub i32 %116, 2
  %118 = getelementptr inbounds [2 x i32], ptr %30, i64 0, i64 0
  store i32 %117, ptr %118, align 4, !tbaa !9
  %119 = load i32, ptr %29, align 4, !tbaa !9
  %120 = sub i32 %119, 1
  %121 = getelementptr inbounds [2 x i32], ptr %30, i64 0, i64 1
  store i32 %120, ptr %121, align 4, !tbaa !9
  %122 = load ptr, ptr %16, align 8, !tbaa !5
  %123 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %122, i32 0, i32 25
  %124 = load i32, ptr %123, align 4, !tbaa !12
  %125 = icmp ugt i32 %124, 0
  br i1 %125, label %131, label %126

126:                                              ; preds = %68
  %127 = load ptr, ptr %16, align 8, !tbaa !5
  %128 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %127, i32 0, i32 29
  %129 = load i32, ptr %128, align 4, !tbaa !16
  %130 = icmp ugt i32 %129, 0
  br i1 %130, label %131, label %134

131:                                              ; preds = %126, %68
  %132 = load ptr, ptr %15, align 8, !tbaa !5
  %133 = load i32, ptr %45, align 4, !tbaa !9
  call void @libxsmm_generator_gemm_getval_stack_var_aarch64(ptr noundef %132, i32 noundef 7, i32 noundef %133)
  br label %134

134:                                              ; preds = %131, %126
  %135 = load i32, ptr %27, align 4, !tbaa !9
  %136 = icmp eq i32 %135, 0
  br i1 %136, label %137, label %563

137:                                              ; preds = %134
  %138 = load i32, ptr %41, align 4, !tbaa !9
  %139 = icmp eq i32 %138, 0
  br i1 %139, label %140, label %563

140:                                              ; preds = %137
  store i32 0, ptr %31, align 4, !tbaa !9
  br label %141

141:                                              ; preds = %550, %140
  %142 = load i32, ptr %31, align 4, !tbaa !9
  %143 = load i32, ptr %32, align 4, !tbaa !9
  %144 = icmp ult i32 %142, %143
  br i1 %144, label %145, label %553

145:                                              ; preds = %141
  %146 = load ptr, ptr %15, align 8, !tbaa !5
  %147 = load i32, ptr %18, align 4, !tbaa !9
  %148 = load i32, ptr %19, align 4, !tbaa !9
  %149 = load i32, ptr %19, align 4, !tbaa !9
  %150 = load i32, ptr %25, align 4, !tbaa !9
  %151 = zext i32 %150 to i64
  call void @libxsmm_aarch64_instruction_alu_compute_imm64(ptr noundef %146, i32 noundef 4096, i32 noundef %147, i32 noundef %148, i32 noundef %149, i64 noundef %151)
  store i32 0, ptr %33, align 4, !tbaa !9
  br label %152

152:                                              ; preds = %337, %145
  %153 = load i32, ptr %33, align 4, !tbaa !9
  %154 = getelementptr inbounds [2 x i32], ptr %34, i64 0, i64 0
  %155 = load i32, ptr %154, align 4, !tbaa !9
  %156 = icmp ult i32 %153, %155
  br i1 %156, label %157, label %340

157:                                              ; preds = %152
  %158 = load ptr, ptr %16, align 8, !tbaa !5
  %159 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %158, i32 0, i32 25
  %160 = load i32, ptr %159, align 4, !tbaa !12
  %161 = icmp ugt i32 %160, 0
  br i1 %161, label %167, label %162

162:                                              ; preds = %157
  %163 = load ptr, ptr %16, align 8, !tbaa !5
  %164 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %163, i32 0, i32 29
  %165 = load i32, ptr %164, align 4, !tbaa !16
  %166 = icmp ugt i32 %165, 0
  br i1 %166, label %167, label %203

167:                                              ; preds = %162, %157
  %168 = load i32, ptr %31, align 4, !tbaa !9
  %169 = icmp eq i32 %168, 0
  br i1 %169, label %170, label %202

170:                                              ; preds = %167
  %171 = load i32, ptr %43, align 4, !tbaa !9
  %172 = icmp eq i32 %171, 0
  br i1 %172, label %173, label %177

173:                                              ; preds = %170
  %174 = load ptr, ptr %15, align 8, !tbaa !5
  %175 = load i32, ptr %45, align 4, !tbaa !9
  %176 = load i32, ptr %33, align 4, !tbaa !9
  call void @libxsmm_aarch64_instruction_sve_move(ptr noundef %174, i32 noundef -2055192570, i32 noundef %175, i32 noundef 127, i32 noundef 0, i32 noundef %176, i32 noundef 127)
  br label %184

177:                                              ; preds = %170
  %178 = load ptr, ptr %15, align 8, !tbaa !5
  %179 = load i32, ptr %45, align 4, !tbaa !9
  %180 = load i32, ptr %33, align 4, !tbaa !9
  %181 = load i32, ptr %42, align 4, !tbaa !9
  call void @libxsmm_aarch64_instruction_sve_move(ptr noundef %178, i32 noundef -1532977018, i32 noundef %179, i32 noundef 127, i32 noundef 0, i32 noundef %180, i32 noundef %181)
  %182 = load ptr, ptr %15, align 8, !tbaa !5
  %183 = load i32, ptr %33, align 4, !tbaa !9
  call void @libxsmm_generator_vcvt_bf16f32_aarch64_sve(ptr noundef %182, i32 noundef %183, i32 noundef 0)
  br label %184

184:                                              ; preds = %177, %173
  %185 = getelementptr inbounds [2 x i32], ptr %34, i64 0, i64 1
  %186 = load i32, ptr %185, align 4, !tbaa !9
  %187 = icmp ne i32 %186, 0
  br i1 %187, label %194, label %188

188:                                              ; preds = %184
  %189 = load i32, ptr %33, align 4, !tbaa !9
  %190 = getelementptr inbounds [2 x i32], ptr %34, i64 0, i64 0
  %191 = load i32, ptr %190, align 4, !tbaa !9
  %192 = sub i32 %191, 1
  %193 = icmp ne i32 %189, %192
  br i1 %193, label %194, label %201

194:                                              ; preds = %188, %184
  %195 = load ptr, ptr %15, align 8, !tbaa !5
  %196 = load i32, ptr %45, align 4, !tbaa !9
  %197 = load i32, ptr %45, align 4, !tbaa !9
  %198 = load i32, ptr %21, align 4, !tbaa !9
  %199 = load i32, ptr %44, align 4, !tbaa !9
  %200 = mul i32 %198, %199
  call void @libxsmm_aarch64_instruction_alu_compute_imm12(ptr noundef %195, i32 noundef 285212678, i32 noundef %196, i32 noundef %197, i32 noundef %200, i8 noundef zeroext 0)
  br label %201

201:                                              ; preds = %194, %188
  br label %202

202:                                              ; preds = %201, %167
  br label %203

203:                                              ; preds = %202, %162
  %204 = load i32, ptr %40, align 4, !tbaa !9
  %205 = icmp eq i32 %204, 0
  br i1 %205, label %206, label %211

206:                                              ; preds = %203
  %207 = load ptr, ptr %15, align 8, !tbaa !5
  %208 = load i32, ptr %18, align 4, !tbaa !9
  %209 = getelementptr inbounds [2 x i32], ptr %30, i64 0, i64 0
  %210 = load i32, ptr %209, align 4, !tbaa !9
  call void @libxsmm_aarch64_instruction_sve_move(ptr noundef %207, i32 noundef -2055192570, i32 noundef %208, i32 noundef 127, i32 noundef 0, i32 noundef %210, i32 noundef 127)
  br label %220

211:                                              ; preds = %203
  %212 = load ptr, ptr %15, align 8, !tbaa !5
  %213 = load i32, ptr %18, align 4, !tbaa !9
  %214 = getelementptr inbounds [2 x i32], ptr %30, i64 0, i64 0
  %215 = load i32, ptr %214, align 4, !tbaa !9
  %216 = load i32, ptr %42, align 4, !tbaa !9
  call void @libxsmm_aarch64_instruction_sve_move(ptr noundef %212, i32 noundef -1532977018, i32 noundef %213, i32 noundef 127, i32 noundef 0, i32 noundef %215, i32 noundef %216)
  %217 = load ptr, ptr %15, align 8, !tbaa !5
  %218 = getelementptr inbounds [2 x i32], ptr %30, i64 0, i64 0
  %219 = load i32, ptr %218, align 4, !tbaa !9
  call void @libxsmm_generator_vcvt_bf16f32_aarch64_sve(ptr noundef %217, i32 noundef %219, i32 noundef 0)
  br label %220

220:                                              ; preds = %211, %206
  %221 = load ptr, ptr %16, align 8, !tbaa !5
  %222 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %221, i32 0, i32 25
  %223 = load i32, ptr %222, align 4, !tbaa !12
  %224 = icmp ugt i32 %223, 0
  br i1 %224, label %230, label %225

225:                                              ; preds = %220
  %226 = load ptr, ptr %16, align 8, !tbaa !5
  %227 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %226, i32 0, i32 29
  %228 = load i32, ptr %227, align 4, !tbaa !16
  %229 = icmp ugt i32 %228, 0
  br i1 %229, label %230, label %238

230:                                              ; preds = %225, %220
  %231 = load ptr, ptr %15, align 8, !tbaa !5
  %232 = getelementptr inbounds [2 x i32], ptr %30, i64 0, i64 0
  %233 = load i32, ptr %232, align 4, !tbaa !9
  %234 = load i32, ptr %33, align 4, !tbaa !9
  %235 = getelementptr inbounds [2 x i32], ptr %30, i64 0, i64 0
  %236 = load i32, ptr %235, align 4, !tbaa !9
  %237 = load i32, ptr %46, align 4, !tbaa !9
  call void @libxsmm_aarch64_instruction_sve_compute(ptr noundef %231, i32 noundef 1694498819, i32 noundef %233, i32 noundef %234, i8 noundef zeroext 0, i32 noundef %236, i32 noundef 0, i32 noundef %237)
  br label %238

238:                                              ; preds = %230, %225
  %239 = load ptr, ptr %15, align 8, !tbaa !5
  %240 = load i32, ptr %18, align 4, !tbaa !9
  %241 = load i32, ptr %18, align 4, !tbaa !9
  %242 = load i32, ptr %21, align 4, !tbaa !9
  %243 = load i32, ptr %26, align 4, !tbaa !9
  %244 = mul i32 %242, %243
  call void @libxsmm_aarch64_instruction_alu_compute_imm12(ptr noundef %239, i32 noundef 285212678, i32 noundef %240, i32 noundef %241, i32 noundef %244, i8 noundef zeroext 0)
  %245 = load i32, ptr %24, align 4, !tbaa !9
  %246 = urem i32 %245, 2
  %247 = icmp eq i32 %246, 1
  br i1 %247, label %248, label %261

248:                                              ; preds = %238
  %249 = load i32, ptr %31, align 4, !tbaa !9
  %250 = load i32, ptr %32, align 4, !tbaa !9
  %251 = sub i32 %250, 1
  %252 = icmp eq i32 %249, %251
  br i1 %252, label %253, label %261

253:                                              ; preds = %248
  %254 = load ptr, ptr %15, align 8, !tbaa !5
  %255 = getelementptr inbounds [2 x i32], ptr %30, i64 0, i64 1
  %256 = load i32, ptr %255, align 4, !tbaa !9
  %257 = getelementptr inbounds [2 x i32], ptr %30, i64 0, i64 1
  %258 = load i32, ptr %257, align 4, !tbaa !9
  %259 = getelementptr inbounds [2 x i32], ptr %30, i64 0, i64 1
  %260 = load i32, ptr %259, align 4, !tbaa !9
  call void @libxsmm_aarch64_instruction_sve_compute(ptr noundef %254, i32 noundef 77606915, i32 noundef %256, i32 noundef %258, i8 noundef zeroext 0, i32 noundef %260, i32 noundef 0, i32 noundef 2)
  br label %279

261:                                              ; preds = %248, %238
  %262 = load i32, ptr %40, align 4, !tbaa !9
  %263 = icmp eq i32 %262, 0
  br i1 %263, label %264, label %269

264:                                              ; preds = %261
  %265 = load ptr, ptr %15, align 8, !tbaa !5
  %266 = load i32, ptr %19, align 4, !tbaa !9
  %267 = getelementptr inbounds [2 x i32], ptr %30, i64 0, i64 1
  %268 = load i32, ptr %267, align 4, !tbaa !9
  call void @libxsmm_aarch64_instruction_sve_move(ptr noundef %265, i32 noundef -2055192570, i32 noundef %266, i32 noundef 127, i32 noundef 0, i32 noundef %268, i32 noundef 127)
  br label %278

269:                                              ; preds = %261
  %270 = load ptr, ptr %15, align 8, !tbaa !5
  %271 = load i32, ptr %19, align 4, !tbaa !9
  %272 = getelementptr inbounds [2 x i32], ptr %30, i64 0, i64 1
  %273 = load i32, ptr %272, align 4, !tbaa !9
  %274 = load i32, ptr %42, align 4, !tbaa !9
  call void @libxsmm_aarch64_instruction_sve_move(ptr noundef %270, i32 noundef -1532977018, i32 noundef %271, i32 noundef 127, i32 noundef 0, i32 noundef %273, i32 noundef %274)
  %275 = load ptr, ptr %15, align 8, !tbaa !5
  %276 = getelementptr inbounds [2 x i32], ptr %30, i64 0, i64 1
  %277 = load i32, ptr %276, align 4, !tbaa !9
  call void @libxsmm_generator_vcvt_bf16f32_aarch64_sve(ptr noundef %275, i32 noundef %277, i32 noundef 0)
  br label %278

278:                                              ; preds = %269, %264
  br label %279

279:                                              ; preds = %278, %253
  %280 = load ptr, ptr %16, align 8, !tbaa !5
  %281 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %280, i32 0, i32 25
  %282 = load i32, ptr %281, align 4, !tbaa !12
  %283 = icmp ugt i32 %282, 0
  br i1 %283, label %289, label %284

284:                                              ; preds = %279
  %285 = load ptr, ptr %16, align 8, !tbaa !5
  %286 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %285, i32 0, i32 29
  %287 = load i32, ptr %286, align 4, !tbaa !16
  %288 = icmp ugt i32 %287, 0
  br i1 %288, label %289, label %297

289:                                              ; preds = %284, %279
  %290 = load ptr, ptr %15, align 8, !tbaa !5
  %291 = getelementptr inbounds [2 x i32], ptr %30, i64 0, i64 1
  %292 = load i32, ptr %291, align 4, !tbaa !9
  %293 = load i32, ptr %33, align 4, !tbaa !9
  %294 = getelementptr inbounds [2 x i32], ptr %30, i64 0, i64 1
  %295 = load i32, ptr %294, align 4, !tbaa !9
  %296 = load i32, ptr %46, align 4, !tbaa !9
  call void @libxsmm_aarch64_instruction_sve_compute(ptr noundef %290, i32 noundef 1694498819, i32 noundef %292, i32 noundef %293, i8 noundef zeroext 0, i32 noundef %295, i32 noundef 0, i32 noundef %296)
  br label %297

297:                                              ; preds = %289, %284
  %298 = load ptr, ptr %15, align 8, !tbaa !5
  %299 = load i32, ptr %19, align 4, !tbaa !9
  %300 = load i32, ptr %19, align 4, !tbaa !9
  %301 = load i32, ptr %21, align 4, !tbaa !9
  %302 = load i32, ptr %26, align 4, !tbaa !9
  %303 = mul i32 %301, %302
  call void @libxsmm_aarch64_instruction_alu_compute_imm12(ptr noundef %298, i32 noundef 285212678, i32 noundef %299, i32 noundef %300, i32 noundef %303, i8 noundef zeroext 0)
  %304 = load ptr, ptr %15, align 8, !tbaa !5
  %305 = getelementptr inbounds [2 x i32], ptr %37, i64 0, i64 0
  %306 = load i32, ptr %305, align 4, !tbaa !9
  %307 = getelementptr inbounds [2 x i32], ptr %30, i64 0, i64 0
  %308 = load i32, ptr %307, align 4, !tbaa !9
  %309 = getelementptr inbounds [2 x i32], ptr %30, i64 0, i64 1
  %310 = load i32, ptr %309, align 4, !tbaa !9
  %311 = load i32, ptr %31, align 4, !tbaa !9
  %312 = mul i32 8, %311
  %313 = load i32, ptr %33, align 4, !tbaa !9
  %314 = mul i32 2, %313
  %315 = add i32 %312, %314
  %316 = zext i32 %315 to i64
  %317 = getelementptr inbounds [24 x i32], ptr %39, i64 0, i64 %316
  %318 = load i32, ptr %317, align 4, !tbaa !9
  %319 = load i32, ptr %38, align 4, !tbaa !9
  call void @libxsmm_aarch64_instruction_sve_compute(ptr noundef %304, i32 noundef %306, i32 noundef %308, i32 noundef %310, i8 noundef zeroext 0, i32 noundef %318, i32 noundef 127, i32 noundef %319)
  %320 = load ptr, ptr %15, align 8, !tbaa !5
  %321 = getelementptr inbounds [2 x i32], ptr %37, i64 0, i64 1
  %322 = load i32, ptr %321, align 4, !tbaa !9
  %323 = getelementptr inbounds [2 x i32], ptr %30, i64 0, i64 0
  %324 = load i32, ptr %323, align 4, !tbaa !9
  %325 = getelementptr inbounds [2 x i32], ptr %30, i64 0, i64 1
  %326 = load i32, ptr %325, align 4, !tbaa !9
  %327 = load i32, ptr %31, align 4, !tbaa !9
  %328 = mul i32 8, %327
  %329 = load i32, ptr %33, align 4, !tbaa !9
  %330 = mul i32 2, %329
  %331 = add i32 %328, %330
  %332 = add i32 %331, 1
  %333 = zext i32 %332 to i64
  %334 = getelementptr inbounds [24 x i32], ptr %39, i64 0, i64 %333
  %335 = load i32, ptr %334, align 4, !tbaa !9
  %336 = load i32, ptr %38, align 4, !tbaa !9
  call void @libxsmm_aarch64_instruction_sve_compute(ptr noundef %320, i32 noundef %322, i32 noundef %324, i32 noundef %326, i8 noundef zeroext 0, i32 noundef %335, i32 noundef 127, i32 noundef %336)
  br label %337

337:                                              ; preds = %297
  %338 = load i32, ptr %33, align 4, !tbaa !9
  %339 = add i32 %338, 1
  store i32 %339, ptr %33, align 4, !tbaa !9
  br label %152, !llvm.loop !17

340:                                              ; preds = %152
  %341 = getelementptr inbounds [2 x i32], ptr %34, i64 0, i64 0
  %342 = load i32, ptr %341, align 4, !tbaa !9
  store i32 %342, ptr %33, align 4, !tbaa !9
  br label %343

343:                                              ; preds = %515, %340
  %344 = load i32, ptr %33, align 4, !tbaa !9
  %345 = getelementptr inbounds [2 x i32], ptr %34, i64 0, i64 0
  %346 = load i32, ptr %345, align 4, !tbaa !9
  %347 = getelementptr inbounds [2 x i32], ptr %34, i64 0, i64 1
  %348 = load i32, ptr %347, align 4, !tbaa !9
  %349 = add i32 %346, %348
  %350 = icmp ult i32 %344, %349
  br i1 %350, label %351, label %518

351:                                              ; preds = %343
  %352 = load ptr, ptr %16, align 8, !tbaa !5
  %353 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %352, i32 0, i32 25
  %354 = load i32, ptr %353, align 4, !tbaa !12
  %355 = icmp ugt i32 %354, 0
  br i1 %355, label %361, label %356

356:                                              ; preds = %351
  %357 = load ptr, ptr %16, align 8, !tbaa !5
  %358 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %357, i32 0, i32 29
  %359 = load i32, ptr %358, align 4, !tbaa !16
  %360 = icmp ugt i32 %359, 0
  br i1 %360, label %361, label %379

361:                                              ; preds = %356, %351
  %362 = load i32, ptr %31, align 4, !tbaa !9
  %363 = icmp eq i32 %362, 0
  br i1 %363, label %364, label %378

364:                                              ; preds = %361
  %365 = load i32, ptr %43, align 4, !tbaa !9
  %366 = icmp eq i32 %365, 0
  br i1 %366, label %367, label %371

367:                                              ; preds = %364
  %368 = load ptr, ptr %15, align 8, !tbaa !5
  %369 = load i32, ptr %45, align 4, !tbaa !9
  %370 = load i32, ptr %33, align 4, !tbaa !9
  call void @libxsmm_aarch64_instruction_sve_move(ptr noundef %368, i32 noundef -1522491258, i32 noundef %369, i32 noundef 127, i32 noundef 0, i32 noundef %370, i32 noundef 1)
  br label %377

371:                                              ; preds = %364
  %372 = load ptr, ptr %15, align 8, !tbaa !5
  %373 = load i32, ptr %45, align 4, !tbaa !9
  %374 = load i32, ptr %33, align 4, !tbaa !9
  call void @libxsmm_aarch64_instruction_sve_move(ptr noundef %372, i32 noundef -1532977018, i32 noundef %373, i32 noundef 127, i32 noundef 0, i32 noundef %374, i32 noundef 1)
  %375 = load ptr, ptr %15, align 8, !tbaa !5
  %376 = load i32, ptr %33, align 4, !tbaa !9
  call void @libxsmm_generator_vcvt_bf16f32_aarch64_sve(ptr noundef %375, i32 noundef %376, i32 noundef 0)
  br label %377

377:                                              ; preds = %371, %367
  br label %378

378:                                              ; preds = %377, %361
  br label %379

379:                                              ; preds = %378, %356
  %380 = load i32, ptr %40, align 4, !tbaa !9
  %381 = icmp eq i32 %380, 0
  br i1 %381, label %382, label %387

382:                                              ; preds = %379
  %383 = load ptr, ptr %15, align 8, !tbaa !5
  %384 = load i32, ptr %18, align 4, !tbaa !9
  %385 = getelementptr inbounds [2 x i32], ptr %30, i64 0, i64 0
  %386 = load i32, ptr %385, align 4, !tbaa !9
  call void @libxsmm_aarch64_instruction_sve_move(ptr noundef %383, i32 noundef -1522491258, i32 noundef %384, i32 noundef 127, i32 noundef 0, i32 noundef %386, i32 noundef 1)
  br label %395

387:                                              ; preds = %379
  %388 = load ptr, ptr %15, align 8, !tbaa !5
  %389 = load i32, ptr %18, align 4, !tbaa !9
  %390 = getelementptr inbounds [2 x i32], ptr %30, i64 0, i64 0
  %391 = load i32, ptr %390, align 4, !tbaa !9
  call void @libxsmm_aarch64_instruction_sve_move(ptr noundef %388, i32 noundef -1532977018, i32 noundef %389, i32 noundef 127, i32 noundef 0, i32 noundef %391, i32 noundef 1)
  %392 = load ptr, ptr %15, align 8, !tbaa !5
  %393 = getelementptr inbounds [2 x i32], ptr %30, i64 0, i64 0
  %394 = load i32, ptr %393, align 4, !tbaa !9
  call void @libxsmm_generator_vcvt_bf16f32_aarch64_sve(ptr noundef %392, i32 noundef %394, i32 noundef 0)
  br label %395

395:                                              ; preds = %387, %382
  %396 = load ptr, ptr %16, align 8, !tbaa !5
  %397 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %396, i32 0, i32 25
  %398 = load i32, ptr %397, align 4, !tbaa !12
  %399 = icmp ugt i32 %398, 0
  br i1 %399, label %405, label %400

400:                                              ; preds = %395
  %401 = load ptr, ptr %16, align 8, !tbaa !5
  %402 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %401, i32 0, i32 29
  %403 = load i32, ptr %402, align 4, !tbaa !16
  %404 = icmp ugt i32 %403, 0
  br i1 %404, label %405, label %413

405:                                              ; preds = %400, %395
  %406 = load ptr, ptr %15, align 8, !tbaa !5
  %407 = getelementptr inbounds [2 x i32], ptr %30, i64 0, i64 0
  %408 = load i32, ptr %407, align 4, !tbaa !9
  %409 = load i32, ptr %33, align 4, !tbaa !9
  %410 = getelementptr inbounds [2 x i32], ptr %30, i64 0, i64 0
  %411 = load i32, ptr %410, align 4, !tbaa !9
  %412 = load i32, ptr %46, align 4, !tbaa !9
  call void @libxsmm_aarch64_instruction_sve_compute(ptr noundef %406, i32 noundef 1694498819, i32 noundef %408, i32 noundef %409, i8 noundef zeroext 0, i32 noundef %411, i32 noundef 0, i32 noundef %412)
  br label %413

413:                                              ; preds = %405, %400
  %414 = load ptr, ptr %15, align 8, !tbaa !5
  %415 = load i32, ptr %18, align 4, !tbaa !9
  %416 = load i32, ptr %18, align 4, !tbaa !9
  %417 = load i32, ptr %23, align 4, !tbaa !9
  %418 = load i32, ptr %21, align 4, !tbaa !9
  %419 = urem i32 %417, %418
  %420 = load i32, ptr %26, align 4, !tbaa !9
  %421 = mul i32 %419, %420
  call void @libxsmm_aarch64_instruction_alu_compute_imm12(ptr noundef %414, i32 noundef 285212678, i32 noundef %415, i32 noundef %416, i32 noundef %421, i8 noundef zeroext 0)
  %422 = load i32, ptr %24, align 4, !tbaa !9
  %423 = urem i32 %422, 2
  %424 = icmp eq i32 %423, 1
  br i1 %424, label %425, label %438

425:                                              ; preds = %413
  %426 = load i32, ptr %31, align 4, !tbaa !9
  %427 = load i32, ptr %32, align 4, !tbaa !9
  %428 = sub i32 %427, 1
  %429 = icmp eq i32 %426, %428
  br i1 %429, label %430, label %438

430:                                              ; preds = %425
  %431 = load ptr, ptr %15, align 8, !tbaa !5
  %432 = getelementptr inbounds [2 x i32], ptr %30, i64 0, i64 1
  %433 = load i32, ptr %432, align 4, !tbaa !9
  %434 = getelementptr inbounds [2 x i32], ptr %30, i64 0, i64 1
  %435 = load i32, ptr %434, align 4, !tbaa !9
  %436 = getelementptr inbounds [2 x i32], ptr %30, i64 0, i64 1
  %437 = load i32, ptr %436, align 4, !tbaa !9
  call void @libxsmm_aarch64_instruction_sve_compute(ptr noundef %431, i32 noundef 77606915, i32 noundef %433, i32 noundef %435, i8 noundef zeroext 0, i32 noundef %437, i32 noundef 0, i32 noundef 2)
  br label %455

438:                                              ; preds = %425, %413
  %439 = load i32, ptr %40, align 4, !tbaa !9
  %440 = icmp eq i32 %439, 0
  br i1 %440, label %441, label %446

441:                                              ; preds = %438
  %442 = load ptr, ptr %15, align 8, !tbaa !5
  %443 = load i32, ptr %19, align 4, !tbaa !9
  %444 = getelementptr inbounds [2 x i32], ptr %30, i64 0, i64 1
  %445 = load i32, ptr %444, align 4, !tbaa !9
  call void @libxsmm_aarch64_instruction_sve_move(ptr noundef %442, i32 noundef -1522491258, i32 noundef %443, i32 noundef 127, i32 noundef 0, i32 noundef %445, i32 noundef 1)
  br label %454

446:                                              ; preds = %438
  %447 = load ptr, ptr %15, align 8, !tbaa !5
  %448 = load i32, ptr %19, align 4, !tbaa !9
  %449 = getelementptr inbounds [2 x i32], ptr %30, i64 0, i64 1
  %450 = load i32, ptr %449, align 4, !tbaa !9
  call void @libxsmm_aarch64_instruction_sve_move(ptr noundef %447, i32 noundef -1532977018, i32 noundef %448, i32 noundef 127, i32 noundef 0, i32 noundef %450, i32 noundef 1)
  %451 = load ptr, ptr %15, align 8, !tbaa !5
  %452 = getelementptr inbounds [2 x i32], ptr %30, i64 0, i64 1
  %453 = load i32, ptr %452, align 4, !tbaa !9
  call void @libxsmm_generator_vcvt_bf16f32_aarch64_sve(ptr noundef %451, i32 noundef %453, i32 noundef 0)
  br label %454

454:                                              ; preds = %446, %441
  br label %455

455:                                              ; preds = %454, %430
  %456 = load ptr, ptr %16, align 8, !tbaa !5
  %457 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %456, i32 0, i32 25
  %458 = load i32, ptr %457, align 4, !tbaa !12
  %459 = icmp ugt i32 %458, 0
  br i1 %459, label %465, label %460

460:                                              ; preds = %455
  %461 = load ptr, ptr %16, align 8, !tbaa !5
  %462 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %461, i32 0, i32 29
  %463 = load i32, ptr %462, align 4, !tbaa !16
  %464 = icmp ugt i32 %463, 0
  br i1 %464, label %465, label %473

465:                                              ; preds = %460, %455
  %466 = load ptr, ptr %15, align 8, !tbaa !5
  %467 = getelementptr inbounds [2 x i32], ptr %30, i64 0, i64 1
  %468 = load i32, ptr %467, align 4, !tbaa !9
  %469 = load i32, ptr %33, align 4, !tbaa !9
  %470 = getelementptr inbounds [2 x i32], ptr %30, i64 0, i64 1
  %471 = load i32, ptr %470, align 4, !tbaa !9
  %472 = load i32, ptr %46, align 4, !tbaa !9
  call void @libxsmm_aarch64_instruction_sve_compute(ptr noundef %466, i32 noundef 1694498819, i32 noundef %468, i32 noundef %469, i8 noundef zeroext 0, i32 noundef %471, i32 noundef 0, i32 noundef %472)
  br label %473

473:                                              ; preds = %465, %460
  %474 = load ptr, ptr %15, align 8, !tbaa !5
  %475 = load i32, ptr %19, align 4, !tbaa !9
  %476 = load i32, ptr %19, align 4, !tbaa !9
  %477 = load i32, ptr %23, align 4, !tbaa !9
  %478 = load i32, ptr %21, align 4, !tbaa !9
  %479 = urem i32 %477, %478
  %480 = load i32, ptr %26, align 4, !tbaa !9
  %481 = mul i32 %479, %480
  call void @libxsmm_aarch64_instruction_alu_compute_imm12(ptr noundef %474, i32 noundef 285212678, i32 noundef %475, i32 noundef %476, i32 noundef %481, i8 noundef zeroext 0)
  %482 = load ptr, ptr %15, align 8, !tbaa !5
  %483 = getelementptr inbounds [2 x i32], ptr %37, i64 0, i64 0
  %484 = load i32, ptr %483, align 4, !tbaa !9
  %485 = getelementptr inbounds [2 x i32], ptr %30, i64 0, i64 0
  %486 = load i32, ptr %485, align 4, !tbaa !9
  %487 = getelementptr inbounds [2 x i32], ptr %30, i64 0, i64 1
  %488 = load i32, ptr %487, align 4, !tbaa !9
  %489 = load i32, ptr %31, align 4, !tbaa !9
  %490 = mul i32 8, %489
  %491 = load i32, ptr %33, align 4, !tbaa !9
  %492 = mul i32 2, %491
  %493 = add i32 %490, %492
  %494 = zext i32 %493 to i64
  %495 = getelementptr inbounds [24 x i32], ptr %39, i64 0, i64 %494
  %496 = load i32, ptr %495, align 4, !tbaa !9
  %497 = load i32, ptr %38, align 4, !tbaa !9
  call void @libxsmm_aarch64_instruction_sve_compute(ptr noundef %482, i32 noundef %484, i32 noundef %486, i32 noundef %488, i8 noundef zeroext 0, i32 noundef %496, i32 noundef 127, i32 noundef %497)
  %498 = load ptr, ptr %15, align 8, !tbaa !5
  %499 = getelementptr inbounds [2 x i32], ptr %37, i64 0, i64 1
  %500 = load i32, ptr %499, align 4, !tbaa !9
  %501 = getelementptr inbounds [2 x i32], ptr %30, i64 0, i64 0
  %502 = load i32, ptr %501, align 4, !tbaa !9
  %503 = getelementptr inbounds [2 x i32], ptr %30, i64 0, i64 1
  %504 = load i32, ptr %503, align 4, !tbaa !9
  %505 = load i32, ptr %31, align 4, !tbaa !9
  %506 = mul i32 8, %505
  %507 = load i32, ptr %33, align 4, !tbaa !9
  %508 = mul i32 2, %507
  %509 = add i32 %506, %508
  %510 = add i32 %509, 1
  %511 = zext i32 %510 to i64
  %512 = getelementptr inbounds [24 x i32], ptr %39, i64 0, i64 %511
  %513 = load i32, ptr %512, align 4, !tbaa !9
  %514 = load i32, ptr %38, align 4, !tbaa !9
  call void @libxsmm_aarch64_instruction_sve_compute(ptr noundef %498, i32 noundef %500, i32 noundef %502, i32 noundef %504, i8 noundef zeroext 0, i32 noundef %513, i32 noundef 127, i32 noundef %514)
  br label %515

515:                                              ; preds = %473
  %516 = load i32, ptr %33, align 4, !tbaa !9
  %517 = add i32 %516, 1
  store i32 %517, ptr %33, align 4, !tbaa !9
  br label %343, !llvm.loop !19

518:                                              ; preds = %343
  %519 = load i32, ptr %24, align 4, !tbaa !9
  %520 = urem i32 %519, 2
  %521 = icmp eq i32 %520, 1
  br i1 %521, label %522, label %538

522:                                              ; preds = %518
  %523 = load i32, ptr %31, align 4, !tbaa !9
  %524 = load i32, ptr %32, align 4, !tbaa !9
  %525 = sub i32 %524, 1
  %526 = icmp eq i32 %523, %525
  br i1 %526, label %527, label %538

527:                                              ; preds = %522
  %528 = load ptr, ptr %15, align 8, !tbaa !5
  %529 = load i32, ptr %18, align 4, !tbaa !9
  %530 = load i32, ptr %19, align 4, !tbaa !9
  %531 = load i32, ptr %18, align 4, !tbaa !9
  %532 = load i32, ptr %25, align 4, !tbaa !9
  %533 = zext i32 %532 to i64
  %534 = mul i64 1, %533
  %535 = load i32, ptr %35, align 4, !tbaa !9
  %536 = zext i32 %535 to i64
  %537 = sub i64 %534, %536
  call void @libxsmm_aarch64_instruction_alu_compute_imm64(ptr noundef %528, i32 noundef 4096, i32 noundef %529, i32 noundef %530, i32 noundef %531, i64 noundef %537)
  br label %549

538:                                              ; preds = %522, %518
  %539 = load ptr, ptr %15, align 8, !tbaa !5
  %540 = load i32, ptr %18, align 4, !tbaa !9
  %541 = load i32, ptr %19, align 4, !tbaa !9
  %542 = load i32, ptr %18, align 4, !tbaa !9
  %543 = load i32, ptr %25, align 4, !tbaa !9
  %544 = zext i32 %543 to i64
  %545 = mul i64 2, %544
  %546 = load i32, ptr %35, align 4, !tbaa !9
  %547 = zext i32 %546 to i64
  %548 = sub i64 %545, %547
  call void @libxsmm_aarch64_instruction_alu_compute_imm64(ptr noundef %539, i32 noundef 4096, i32 noundef %540, i32 noundef %541, i32 noundef %542, i64 noundef %548)
  br label %549

549:                                              ; preds = %538, %527
  br label %550

550:                                              ; preds = %549
  %551 = load i32, ptr %31, align 4, !tbaa !9
  %552 = add i32 %551, 1
  store i32 %552, ptr %31, align 4, !tbaa !9
  br label %141, !llvm.loop !20

553:                                              ; preds = %141
  %554 = load ptr, ptr %15, align 8, !tbaa !5
  %555 = load i32, ptr %18, align 4, !tbaa !9
  %556 = load i32, ptr %19, align 4, !tbaa !9
  %557 = load i32, ptr %18, align 4, !tbaa !9
  %558 = load i32, ptr %25, align 4, !tbaa !9
  %559 = zext i32 %558 to i64
  %560 = load i32, ptr %24, align 4, !tbaa !9
  %561 = zext i32 %560 to i64
  %562 = mul nsw i64 %559, %561
  call void @libxsmm_aarch64_instruction_alu_compute_imm64(ptr noundef %554, i32 noundef 4097, i32 noundef %555, i32 noundef %556, i32 noundef %557, i64 noundef %562)
  br label %838

563:                                              ; preds = %137, %134
  store i32 0, ptr %31, align 4, !tbaa !9
  br label %564

564:                                              ; preds = %834, %563
  %565 = load i32, ptr %31, align 4, !tbaa !9
  %566 = load i32, ptr %32, align 4, !tbaa !9
  %567 = icmp ult i32 %565, %566
  br i1 %567, label %568, label %837

568:                                              ; preds = %564
  store i32 0, ptr %33, align 4, !tbaa !9
  br label %569

569:                                              ; preds = %704, %568
  %570 = load i32, ptr %33, align 4, !tbaa !9
  %571 = getelementptr inbounds [2 x i32], ptr %34, i64 0, i64 0
  %572 = load i32, ptr %571, align 4, !tbaa !9
  %573 = icmp ult i32 %570, %572
  br i1 %573, label %574, label %707

574:                                              ; preds = %569
  %575 = load ptr, ptr %16, align 8, !tbaa !5
  %576 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %575, i32 0, i32 25
  %577 = load i32, ptr %576, align 4, !tbaa !12
  %578 = icmp ugt i32 %577, 0
  br i1 %578, label %584, label %579

579:                                              ; preds = %574
  %580 = load ptr, ptr %16, align 8, !tbaa !5
  %581 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %580, i32 0, i32 29
  %582 = load i32, ptr %581, align 4, !tbaa !16
  %583 = icmp ugt i32 %582, 0
  br i1 %583, label %584, label %649

584:                                              ; preds = %579, %574
  %585 = load i32, ptr %31, align 4, !tbaa !9
  %586 = icmp eq i32 %585, 0
  br i1 %586, label %587, label %619

587:                                              ; preds = %584
  %588 = load i32, ptr %43, align 4, !tbaa !9
  %589 = icmp eq i32 %588, 0
  br i1 %589, label %590, label %594

590:                                              ; preds = %587
  %591 = load ptr, ptr %15, align 8, !tbaa !5
  %592 = load i32, ptr %45, align 4, !tbaa !9
  %593 = load i32, ptr %33, align 4, !tbaa !9
  call void @libxsmm_aarch64_instruction_sve_move(ptr noundef %591, i32 noundef -2055192570, i32 noundef %592, i32 noundef 127, i32 noundef 0, i32 noundef %593, i32 noundef 127)
  br label %601

594:                                              ; preds = %587
  %595 = load ptr, ptr %15, align 8, !tbaa !5
  %596 = load i32, ptr %45, align 4, !tbaa !9
  %597 = load i32, ptr %33, align 4, !tbaa !9
  %598 = load i32, ptr %42, align 4, !tbaa !9
  call void @libxsmm_aarch64_instruction_sve_move(ptr noundef %595, i32 noundef -1532977018, i32 noundef %596, i32 noundef 127, i32 noundef 0, i32 noundef %597, i32 noundef %598)
  %599 = load ptr, ptr %15, align 8, !tbaa !5
  %600 = load i32, ptr %33, align 4, !tbaa !9
  call void @libxsmm_generator_vcvt_bf16f32_aarch64_sve(ptr noundef %599, i32 noundef %600, i32 noundef 0)
  br label %601

601:                                              ; preds = %594, %590
  %602 = getelementptr inbounds [2 x i32], ptr %34, i64 0, i64 1
  %603 = load i32, ptr %602, align 4, !tbaa !9
  %604 = icmp ne i32 %603, 0
  br i1 %604, label %611, label %605

605:                                              ; preds = %601
  %606 = load i32, ptr %33, align 4, !tbaa !9
  %607 = getelementptr inbounds [2 x i32], ptr %34, i64 0, i64 0
  %608 = load i32, ptr %607, align 4, !tbaa !9
  %609 = sub i32 %608, 1
  %610 = icmp ne i32 %606, %609
  br i1 %610, label %611, label %618

611:                                              ; preds = %605, %601
  %612 = load ptr, ptr %15, align 8, !tbaa !5
  %613 = load i32, ptr %45, align 4, !tbaa !9
  %614 = load i32, ptr %45, align 4, !tbaa !9
  %615 = load i32, ptr %21, align 4, !tbaa !9
  %616 = load i32, ptr %44, align 4, !tbaa !9
  %617 = mul i32 %615, %616
  call void @libxsmm_aarch64_instruction_alu_compute_imm12(ptr noundef %612, i32 noundef 285212678, i32 noundef %613, i32 noundef %614, i32 noundef %617, i8 noundef zeroext 0)
  br label %618

618:                                              ; preds = %611, %605
  br label %619

619:                                              ; preds = %618, %584
  %620 = load ptr, ptr %15, align 8, !tbaa !5
  %621 = getelementptr inbounds [2 x i32], ptr %37, i64 0, i64 0
  %622 = load i32, ptr %621, align 4, !tbaa !9
  %623 = load i32, ptr %33, align 4, !tbaa !9
  %624 = load i32, ptr %33, align 4, !tbaa !9
  %625 = load i32, ptr %31, align 4, !tbaa !9
  %626 = mul i32 8, %625
  %627 = load i32, ptr %33, align 4, !tbaa !9
  %628 = mul i32 2, %627
  %629 = add i32 %626, %628
  %630 = zext i32 %629 to i64
  %631 = getelementptr inbounds [24 x i32], ptr %39, i64 0, i64 %630
  %632 = load i32, ptr %631, align 4, !tbaa !9
  %633 = load i32, ptr %38, align 4, !tbaa !9
  call void @libxsmm_aarch64_instruction_sve_compute(ptr noundef %620, i32 noundef %622, i32 noundef %623, i32 noundef %624, i8 noundef zeroext 0, i32 noundef %632, i32 noundef 127, i32 noundef %633)
  %634 = load ptr, ptr %15, align 8, !tbaa !5
  %635 = getelementptr inbounds [2 x i32], ptr %37, i64 0, i64 1
  %636 = load i32, ptr %635, align 4, !tbaa !9
  %637 = load i32, ptr %33, align 4, !tbaa !9
  %638 = load i32, ptr %33, align 4, !tbaa !9
  %639 = load i32, ptr %31, align 4, !tbaa !9
  %640 = mul i32 8, %639
  %641 = load i32, ptr %33, align 4, !tbaa !9
  %642 = mul i32 2, %641
  %643 = add i32 %640, %642
  %644 = add i32 %643, 1
  %645 = zext i32 %644 to i64
  %646 = getelementptr inbounds [24 x i32], ptr %39, i64 0, i64 %645
  %647 = load i32, ptr %646, align 4, !tbaa !9
  %648 = load i32, ptr %38, align 4, !tbaa !9
  call void @libxsmm_aarch64_instruction_sve_compute(ptr noundef %634, i32 noundef %636, i32 noundef %637, i32 noundef %638, i8 noundef zeroext 0, i32 noundef %647, i32 noundef 127, i32 noundef %648)
  br label %703

649:                                              ; preds = %579
  %650 = load ptr, ptr %15, align 8, !tbaa !5
  %651 = load i32, ptr %31, align 4, !tbaa !9
  %652 = mul i32 8, %651
  %653 = load i32, ptr %33, align 4, !tbaa !9
  %654 = mul i32 2, %653
  %655 = add i32 %652, %654
  %656 = zext i32 %655 to i64
  %657 = getelementptr inbounds [24 x i32], ptr %39, i64 0, i64 %656
  %658 = load i32, ptr %657, align 4, !tbaa !9
  %659 = load i32, ptr %31, align 4, !tbaa !9
  %660 = mul i32 8, %659
  %661 = load i32, ptr %33, align 4, !tbaa !9
  %662 = mul i32 2, %661
  %663 = add i32 %660, %662
  %664 = zext i32 %663 to i64
  %665 = getelementptr inbounds [24 x i32], ptr %39, i64 0, i64 %664
  %666 = load i32, ptr %665, align 4, !tbaa !9
  %667 = load i32, ptr %31, align 4, !tbaa !9
  %668 = mul i32 8, %667
  %669 = load i32, ptr %33, align 4, !tbaa !9
  %670 = mul i32 2, %669
  %671 = add i32 %668, %670
  %672 = zext i32 %671 to i64
  %673 = getelementptr inbounds [24 x i32], ptr %39, i64 0, i64 %672
  %674 = load i32, ptr %673, align 4, !tbaa !9
  call void @libxsmm_aarch64_instruction_sve_compute(ptr noundef %650, i32 noundef 77606915, i32 noundef %658, i32 noundef %666, i8 noundef zeroext 0, i32 noundef %674, i32 noundef 0, i32 noundef 2)
  %675 = load ptr, ptr %15, align 8, !tbaa !5
  %676 = load i32, ptr %31, align 4, !tbaa !9
  %677 = mul i32 8, %676
  %678 = load i32, ptr %33, align 4, !tbaa !9
  %679 = mul i32 2, %678
  %680 = add i32 %677, %679
  %681 = add i32 %680, 1
  %682 = zext i32 %681 to i64
  %683 = getelementptr inbounds [24 x i32], ptr %39, i64 0, i64 %682
  %684 = load i32, ptr %683, align 4, !tbaa !9
  %685 = load i32, ptr %31, align 4, !tbaa !9
  %686 = mul i32 8, %685
  %687 = load i32, ptr %33, align 4, !tbaa !9
  %688 = mul i32 2, %687
  %689 = add i32 %686, %688
  %690 = add i32 %689, 1
  %691 = zext i32 %690 to i64
  %692 = getelementptr inbounds [24 x i32], ptr %39, i64 0, i64 %691
  %693 = load i32, ptr %692, align 4, !tbaa !9
  %694 = load i32, ptr %31, align 4, !tbaa !9
  %695 = mul i32 8, %694
  %696 = load i32, ptr %33, align 4, !tbaa !9
  %697 = mul i32 2, %696
  %698 = add i32 %695, %697
  %699 = add i32 %698, 1
  %700 = zext i32 %699 to i64
  %701 = getelementptr inbounds [24 x i32], ptr %39, i64 0, i64 %700
  %702 = load i32, ptr %701, align 4, !tbaa !9
  call void @libxsmm_aarch64_instruction_sve_compute(ptr noundef %675, i32 noundef 77606915, i32 noundef %684, i32 noundef %693, i8 noundef zeroext 0, i32 noundef %702, i32 noundef 0, i32 noundef 2)
  br label %703

703:                                              ; preds = %649, %619
  br label %704

704:                                              ; preds = %703
  %705 = load i32, ptr %33, align 4, !tbaa !9
  %706 = add i32 %705, 1
  store i32 %706, ptr %33, align 4, !tbaa !9
  br label %569, !llvm.loop !21

707:                                              ; preds = %569
  %708 = getelementptr inbounds [2 x i32], ptr %34, i64 0, i64 0
  %709 = load i32, ptr %708, align 4, !tbaa !9
  store i32 %709, ptr %33, align 4, !tbaa !9
  br label %710

710:                                              ; preds = %830, %707
  %711 = load i32, ptr %33, align 4, !tbaa !9
  %712 = getelementptr inbounds [2 x i32], ptr %34, i64 0, i64 0
  %713 = load i32, ptr %712, align 4, !tbaa !9
  %714 = getelementptr inbounds [2 x i32], ptr %34, i64 0, i64 1
  %715 = load i32, ptr %714, align 4, !tbaa !9
  %716 = add i32 %713, %715
  %717 = icmp ult i32 %711, %716
  br i1 %717, label %718, label %833

718:                                              ; preds = %710
  %719 = load ptr, ptr %16, align 8, !tbaa !5
  %720 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %719, i32 0, i32 25
  %721 = load i32, ptr %720, align 4, !tbaa !12
  %722 = icmp ugt i32 %721, 0
  br i1 %722, label %728, label %723

723:                                              ; preds = %718
  %724 = load ptr, ptr %16, align 8, !tbaa !5
  %725 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %724, i32 0, i32 29
  %726 = load i32, ptr %725, align 4, !tbaa !16
  %727 = icmp ugt i32 %726, 0
  br i1 %727, label %728, label %775

728:                                              ; preds = %723, %718
  %729 = load i32, ptr %31, align 4, !tbaa !9
  %730 = icmp eq i32 %729, 0
  br i1 %730, label %731, label %745

731:                                              ; preds = %728
  %732 = load i32, ptr %43, align 4, !tbaa !9
  %733 = icmp eq i32 %732, 0
  br i1 %733, label %734, label %738

734:                                              ; preds = %731
  %735 = load ptr, ptr %15, align 8, !tbaa !5
  %736 = load i32, ptr %45, align 4, !tbaa !9
  %737 = load i32, ptr %33, align 4, !tbaa !9
  call void @libxsmm_aarch64_instruction_sve_move(ptr noundef %735, i32 noundef -1522491258, i32 noundef %736, i32 noundef 127, i32 noundef 0, i32 noundef %737, i32 noundef 1)
  br label %744

738:                                              ; preds = %731
  %739 = load ptr, ptr %15, align 8, !tbaa !5
  %740 = load i32, ptr %45, align 4, !tbaa !9
  %741 = load i32, ptr %33, align 4, !tbaa !9
  call void @libxsmm_aarch64_instruction_sve_move(ptr noundef %739, i32 noundef -1532977018, i32 noundef %740, i32 noundef 127, i32 noundef 0, i32 noundef %741, i32 noundef 1)
  %742 = load ptr, ptr %15, align 8, !tbaa !5
  %743 = load i32, ptr %33, align 4, !tbaa !9
  call void @libxsmm_generator_vcvt_bf16f32_aarch64_sve(ptr noundef %742, i32 noundef %743, i32 noundef 0)
  br label %744

744:                                              ; preds = %738, %734
  br label %745

745:                                              ; preds = %744, %728
  %746 = load ptr, ptr %15, align 8, !tbaa !5
  %747 = getelementptr inbounds [2 x i32], ptr %37, i64 0, i64 0
  %748 = load i32, ptr %747, align 4, !tbaa !9
  %749 = load i32, ptr %33, align 4, !tbaa !9
  %750 = load i32, ptr %33, align 4, !tbaa !9
  %751 = load i32, ptr %31, align 4, !tbaa !9
  %752 = mul i32 8, %751
  %753 = load i32, ptr %33, align 4, !tbaa !9
  %754 = mul i32 2, %753
  %755 = add i32 %752, %754
  %756 = zext i32 %755 to i64
  %757 = getelementptr inbounds [24 x i32], ptr %39, i64 0, i64 %756
  %758 = load i32, ptr %757, align 4, !tbaa !9
  %759 = load i32, ptr %38, align 4, !tbaa !9
  call void @libxsmm_aarch64_instruction_sve_compute(ptr noundef %746, i32 noundef %748, i32 noundef %749, i32 noundef %750, i8 noundef zeroext 0, i32 noundef %758, i32 noundef 127, i32 noundef %759)
  %760 = load ptr, ptr %15, align 8, !tbaa !5
  %761 = getelementptr inbounds [2 x i32], ptr %37, i64 0, i64 1
  %762 = load i32, ptr %761, align 4, !tbaa !9
  %763 = load i32, ptr %33, align 4, !tbaa !9
  %764 = load i32, ptr %33, align 4, !tbaa !9
  %765 = load i32, ptr %31, align 4, !tbaa !9
  %766 = mul i32 8, %765
  %767 = load i32, ptr %33, align 4, !tbaa !9
  %768 = mul i32 2, %767
  %769 = add i32 %766, %768
  %770 = add i32 %769, 1
  %771 = zext i32 %770 to i64
  %772 = getelementptr inbounds [24 x i32], ptr %39, i64 0, i64 %771
  %773 = load i32, ptr %772, align 4, !tbaa !9
  %774 = load i32, ptr %38, align 4, !tbaa !9
  call void @libxsmm_aarch64_instruction_sve_compute(ptr noundef %760, i32 noundef %762, i32 noundef %763, i32 noundef %764, i8 noundef zeroext 0, i32 noundef %773, i32 noundef 127, i32 noundef %774)
  br label %829

775:                                              ; preds = %723
  %776 = load ptr, ptr %15, align 8, !tbaa !5
  %777 = load i32, ptr %31, align 4, !tbaa !9
  %778 = mul i32 8, %777
  %779 = load i32, ptr %33, align 4, !tbaa !9
  %780 = mul i32 2, %779
  %781 = add i32 %778, %780
  %782 = zext i32 %781 to i64
  %783 = getelementptr inbounds [24 x i32], ptr %39, i64 0, i64 %782
  %784 = load i32, ptr %783, align 4, !tbaa !9
  %785 = load i32, ptr %31, align 4, !tbaa !9
  %786 = mul i32 8, %785
  %787 = load i32, ptr %33, align 4, !tbaa !9
  %788 = mul i32 2, %787
  %789 = add i32 %786, %788
  %790 = zext i32 %789 to i64
  %791 = getelementptr inbounds [24 x i32], ptr %39, i64 0, i64 %790
  %792 = load i32, ptr %791, align 4, !tbaa !9
  %793 = load i32, ptr %31, align 4, !tbaa !9
  %794 = mul i32 8, %793
  %795 = load i32, ptr %33, align 4, !tbaa !9
  %796 = mul i32 2, %795
  %797 = add i32 %794, %796
  %798 = zext i32 %797 to i64
  %799 = getelementptr inbounds [24 x i32], ptr %39, i64 0, i64 %798
  %800 = load i32, ptr %799, align 4, !tbaa !9
  call void @libxsmm_aarch64_instruction_sve_compute(ptr noundef %776, i32 noundef 77606915, i32 noundef %784, i32 noundef %792, i8 noundef zeroext 0, i32 noundef %800, i32 noundef 0, i32 noundef 2)
  %801 = load ptr, ptr %15, align 8, !tbaa !5
  %802 = load i32, ptr %31, align 4, !tbaa !9
  %803 = mul i32 8, %802
  %804 = load i32, ptr %33, align 4, !tbaa !9
  %805 = mul i32 2, %804
  %806 = add i32 %803, %805
  %807 = add i32 %806, 1
  %808 = zext i32 %807 to i64
  %809 = getelementptr inbounds [24 x i32], ptr %39, i64 0, i64 %808
  %810 = load i32, ptr %809, align 4, !tbaa !9
  %811 = load i32, ptr %31, align 4, !tbaa !9
  %812 = mul i32 8, %811
  %813 = load i32, ptr %33, align 4, !tbaa !9
  %814 = mul i32 2, %813
  %815 = add i32 %812, %814
  %816 = add i32 %815, 1
  %817 = zext i32 %816 to i64
  %818 = getelementptr inbounds [24 x i32], ptr %39, i64 0, i64 %817
  %819 = load i32, ptr %818, align 4, !tbaa !9
  %820 = load i32, ptr %31, align 4, !tbaa !9
  %821 = mul i32 8, %820
  %822 = load i32, ptr %33, align 4, !tbaa !9
  %823 = mul i32 2, %822
  %824 = add i32 %821, %823
  %825 = add i32 %824, 1
  %826 = zext i32 %825 to i64
  %827 = getelementptr inbounds [24 x i32], ptr %39, i64 0, i64 %826
  %828 = load i32, ptr %827, align 4, !tbaa !9
  call void @libxsmm_aarch64_instruction_sve_compute(ptr noundef %801, i32 noundef 77606915, i32 noundef %810, i32 noundef %819, i8 noundef zeroext 0, i32 noundef %828, i32 noundef 0, i32 noundef 2)
  br label %829

829:                                              ; preds = %775, %745
  br label %830

830:                                              ; preds = %829
  %831 = load i32, ptr %33, align 4, !tbaa !9
  %832 = add i32 %831, 1
  store i32 %832, ptr %33, align 4, !tbaa !9
  br label %710, !llvm.loop !22

833:                                              ; preds = %710
  br label %834

834:                                              ; preds = %833
  %835 = load i32, ptr %31, align 4, !tbaa !9
  %836 = add i32 %835, 1
  store i32 %836, ptr %31, align 4, !tbaa !9
  br label %564, !llvm.loop !23

837:                                              ; preds = %564
  br label %838

838:                                              ; preds = %837, %553
  call void @llvm.lifetime.end.p0(i64 4, ptr %46) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %45) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #5
  call void @llvm.lifetime.end.p0(i64 96, ptr %39) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #5
  ret void
}

declare i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef) #1

declare i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef) #1

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

attributes #0 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #3 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #4 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #5 = { 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 100}
!13 = !{!"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, !14, 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}
!14 = !{!"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}
!15 = !{!"short", !7, i64 0}
!16 = !{!13, !10, i64 116}
!17 = distinct !{!17, !18}
!18 = !{!"llvm.loop.mustprogress"}
!19 = distinct !{!19, !18}
!20 = distinct !{!20, !18}
!21 = distinct !{!21, !18}
!22 = distinct !{!22, !18}
!23 = distinct !{!23, !18}


; 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"

@__const.libxsmm_generator_load_2dregblock_mmla_aarch64_sve.l_instr_zip = external hidden unnamed_addr constant [2 x i32], align 4
@__const.libxsmm_generator_load_2dregblock_mmla_aarch64_sve.l_vr_c = external hidden unnamed_addr constant [24 x i32], align 16

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

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

declare i32 @libxsmm_generator_aarch64_get_sve_type(i8 noundef zeroext) local_unnamed_addr #1

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

declare void @libxsmm_aarch64_instruction_sve_move(ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 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

; Function Attrs: nounwind uwtable
define dso_local void @libxsmm_generator_load_2dregblock_mmla_aarch64_sve(ptr noundef %0, ptr nocapture noundef readonly %1, ptr noundef %2, i32 noundef %3, i32 noundef %4, i32 noundef %5, i32 noundef %6, i32 noundef %7, i32 noundef %8, i32 noundef %9, i32 noundef %10, i32 noundef %11, i32 noundef %12, i8 noundef zeroext %13) local_unnamed_addr #0 {
  %15 = add i32 %9, 1
  %16 = lshr i32 %15, 1
  %.sroa.0.0.copyload = load i32, ptr @__const.libxsmm_generator_load_2dregblock_mmla_aarch64_sve.l_instr_zip, align 4
  %.sroa.7.0.copyload = load i32, ptr getelementptr inbounds (i8, ptr @__const.libxsmm_generator_load_2dregblock_mmla_aarch64_sve.l_instr_zip, i64 4), align 4
  %17 = getelementptr inbounds i8, ptr %2, i64 29
  %18 = tail call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef nonnull %17) #2
  %.not363 = icmp eq i32 %18, 2
  %19 = tail call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef nonnull %17) #2
  %20 = icmp eq i32 %19, 1
  br i1 %20, label %21, label %24

21:                                               ; preds = %14
  %22 = tail call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef nonnull %17) #2
  %23 = icmp eq i32 %22, 12
  br label %24

24:                                               ; preds = %21, %14
  %25 = phi i1 [ false, %14 ], [ %23, %21 ]
  %26 = getelementptr inbounds i8, ptr %1, i64 100
  %27 = load i32, ptr %26, align 4, !tbaa !5
  %.not.not = icmp eq i32 %27, 0
  %28 = tail call i32 @libxsmm_generator_aarch64_get_sve_type(i8 noundef zeroext 4) #2
  %29 = udiv i32 %8, %6
  %30 = urem i32 %8, %6
  %31 = icmp ne i32 %30, 0
  %32 = zext i1 %31 to i32
  %33 = mul i32 %29, %6
  %34 = add i32 %33, %30
  %35 = mul i32 %34, %11
  %36 = load i32, ptr @__const.libxsmm_generator_load_2dregblock_mmla_aarch64_sve.l_vr_c, align 16, !tbaa !13
  %37 = add i32 %36, -2
  %38 = add i32 %36, -1
  %39 = load i32, ptr %26, align 4, !tbaa !5
  %.not347 = icmp eq i32 %39, 0
  br i1 %.not347, label %40, label %43

40:                                               ; preds = %24
  %41 = getelementptr inbounds i8, ptr %1, i64 116
  %42 = load i32, ptr %41, align 4, !tbaa !14
  %.not348 = icmp eq i32 %42, 0
  br i1 %.not348, label %44, label %43

43:                                               ; preds = %40, %24
  tail call void @libxsmm_generator_gemm_getval_stack_var_aarch64(ptr noundef %0, i32 noundef 7, i32 noundef %5) #2
  br label %44

44:                                               ; preds = %43, %40
  %45 = icmp ne i32 %12, 0
  %or.cond.not = select i1 %45, i1 true, i1 %25
  %.not398 = icmp ult i32 %15, 2
  br i1 %or.cond.not, label %.preheader381, label %.preheader383

.preheader383:                                    ; preds = %44
  %.pre415 = zext i32 %10 to i64
  br i1 %.not398, label %._crit_edge389, label %.lr.ph388

.lr.ph388:                                        ; preds = %.preheader383
  %.not397 = icmp ugt i32 %6, %8
  %46 = getelementptr inbounds i8, ptr %1, i64 116
  %47 = add i32 %29, -1
  %48 = select i1 %.not.not, i32 2, i32 1
  %49 = shl i32 %6, %48
  %50 = mul i32 %11, %6
  %51 = and i32 %9, 1
  %.not366 = icmp ne i32 %51, 0
  %52 = add nsw i32 %16, -1
  %53 = add i32 %29, %32
  %54 = icmp ult i32 %29, %53
  %55 = mul i32 %30, %11
  %56 = zext i32 %35 to i64
  %57 = zext i32 %47 to i64
  %58 = zext i32 %29 to i64
  %not..not366 = xor i1 %.not366, true
  br label %67

.preheader381:                                    ; preds = %44
  br i1 %.not398, label %.loopexit, label %.preheader380.lr.ph

.preheader380.lr.ph:                              ; preds = %.preheader381
  %.not399 = icmp ugt i32 %6, %8
  %59 = getelementptr inbounds i8, ptr %1, i64 116
  %60 = add i32 %29, -1
  %61 = select i1 %.not.not, i32 2, i32 1
  %62 = shl i32 %6, %61
  %63 = add i32 %29, %32
  %64 = icmp ult i32 %29, %63
  %65 = zext i32 %60 to i64
  %66 = zext i32 %29 to i64
  br label %.preheader380

67:                                               ; preds = %.lr.ph388, %._crit_edge
  %.0387 = phi i32 [ 0, %.lr.ph388 ], [ %157, %._crit_edge ]
  tail call void @libxsmm_aarch64_instruction_alu_compute_imm64(ptr noundef %0, i32 noundef 4096, i32 noundef %3, i32 noundef %4, i32 noundef %4, i64 noundef %.pre415) #2
  br i1 %.not397, label %.preheader382, label %.lr.ph

.lr.ph:                                           ; preds = %67
  %.old2 = icmp eq i32 %.0387, 0
  %68 = icmp eq i32 %.0387, %52
  %or.cond371 = select i1 %.not366, i1 %68, i1 false
  %69 = shl i32 %.0387, 3
  br label %72

.preheader382:                                    ; preds = %104, %67
  br i1 %54, label %.lr.ph386, label %._crit_edge

.lr.ph386:                                        ; preds = %.preheader382
  %.old5 = icmp eq i32 %.0387, 0
  %70 = icmp eq i32 %.0387, %52
  %or.cond373 = select i1 %.not366, i1 %70, i1 false
  %71 = shl i32 %.0387, 3
  br label %115

72:                                               ; preds = %.lr.ph, %104
  %indvars.iv = phi i64 [ 0, %.lr.ph ], [ %indvars.iv.next, %104 ]
  %73 = load i32, ptr %26, align 4, !tbaa !5
  %.not362 = icmp eq i32 %73, 0
  br i1 %.not362, label %74, label %77

74:                                               ; preds = %72
  %75 = load i32, ptr %46, align 4, !tbaa !14
  %76 = icmp ne i32 %75, 0
  %or.cond3 = and i1 %.old2, %76
  br i1 %or.cond3, label %78, label %84

77:                                               ; preds = %72
  br i1 %.old2, label %78, label %84

78:                                               ; preds = %74, %77
  %79 = trunc nuw i64 %indvars.iv to i32
  br i1 %.not.not, label %80, label %81

80:                                               ; preds = %78
  tail call void @libxsmm_aarch64_instruction_sve_move(ptr noundef %0, i32 noundef -2055192570, i32 noundef %5, i32 noundef 127, i32 noundef 0, i32 noundef %79, i32 noundef 127) #2
  br label %82

81:                                               ; preds = %78
  tail call void @libxsmm_aarch64_instruction_sve_move(ptr noundef %0, i32 noundef -1532977018, i32 noundef %5, i32 noundef 127, i32 noundef 0, i32 noundef %79, i32 noundef 2) #2
  tail call void @libxsmm_generator_vcvt_bf16f32_aarch64_sve(ptr noundef %0, i32 noundef %79, i32 noundef 0)
  br label %82

82:                                               ; preds = %81, %80
  %.not = icmp ne i64 %indvars.iv, %57
  %or.cond.not379 = or i1 %31, %.not
  br i1 %or.cond.not379, label %83, label %84

83:                                               ; preds = %82
  tail call void @libxsmm_aarch64_instruction_alu_compute_imm12(ptr noundef %0, i32 noundef 285212678, i32 noundef %5, i32 noundef %5, i32 noundef %49, i8 noundef zeroext 0) #2
  br label %84

84:                                               ; preds = %82, %77, %83, %74
  br i1 %.not363, label %86, label %85

85:                                               ; preds = %84
  tail call void @libxsmm_aarch64_instruction_sve_move(ptr noundef %0, i32 noundef -2055192570, i32 noundef %3, i32 noundef 127, i32 noundef 0, i32 noundef %37, i32 noundef 127) #2
  br label %87

86:                                               ; preds = %84
  tail call void @libxsmm_aarch64_instruction_sve_move(ptr noundef %0, i32 noundef -1532977018, i32 noundef %3, i32 noundef 127, i32 noundef 0, i32 noundef %37, i32 noundef 2) #2
  tail call void @libxsmm_generator_vcvt_bf16f32_aarch64_sve(ptr noundef %0, i32 noundef %37, i32 noundef 0)
  br label %87

87:                                               ; preds = %86, %85
  %88 = load i32, ptr %26, align 4, !tbaa !5
  %.not364 = icmp eq i32 %88, 0
  br i1 %.not364, label %89, label %91

89:                                               ; preds = %87
  %90 = load i32, ptr %46, align 4, !tbaa !14
  %.not365 = icmp eq i32 %90, 0
  br i1 %.not365, label %93, label %91

91:                                               ; preds = %89, %87
  %92 = trunc nuw i64 %indvars.iv to i32
  tail call void @libxsmm_aarch64_instruction_sve_compute(ptr noundef %0, i32 noundef 1694498819, i32 noundef %37, i32 noundef %92, i8 noundef zeroext 0, i32 noundef %37, i32 noundef 0, i32 noundef %28) #2
  br label %93

93:                                               ; preds = %91, %89
  tail call void @libxsmm_aarch64_instruction_alu_compute_imm12(ptr noundef %0, i32 noundef 285212678, i32 noundef %3, i32 noundef %3, i32 noundef %50, i8 noundef zeroext 0) #2
  br i1 %or.cond371, label %94, label %95

94:                                               ; preds = %93
  tail call void @libxsmm_aarch64_instruction_sve_compute(ptr noundef %0, i32 noundef 77606915, i32 noundef %38, i32 noundef %38, i8 noundef zeroext 0, i32 noundef %38, i32 noundef 0, i32 noundef 2) #2
  br label %98

95:                                               ; preds = %93
  br i1 %.not363, label %97, label %96

96:                                               ; preds = %95
  tail call void @libxsmm_aarch64_instruction_sve_move(ptr noundef %0, i32 noundef -2055192570, i32 noundef %4, i32 noundef 127, i32 noundef 0, i32 noundef %38, i32 noundef 127) #2
  br label %98

97:                                               ; preds = %95
  tail call void @libxsmm_aarch64_instruction_sve_move(ptr noundef %0, i32 noundef -1532977018, i32 noundef %4, i32 noundef 127, i32 noundef 0, i32 noundef %38, i32 noundef 2) #2
  tail call void @libxsmm_generator_vcvt_bf16f32_aarch64_sve(ptr noundef %0, i32 noundef %38, i32 noundef 0)
  br label %98

98:                                               ; preds = %96, %97, %94
  %99 = load i32, ptr %26, align 4, !tbaa !5
  %.not367 = icmp eq i32 %99, 0
  br i1 %.not367, label %100, label %102

100:                                              ; preds = %98
  %101 = load i32, ptr %46, align 4, !tbaa !14
  %.not368 = icmp eq i32 %101, 0
  br i1 %.not368, label %._crit_edge412, label %102

._crit_edge412:                                   ; preds = %100
  %.pre419 = trunc nuw i64 %indvars.iv to i32
  br label %104

102:                                              ; preds = %100, %98
  %103 = trunc nuw i64 %indvars.iv to i32
  tail call void @libxsmm_aarch64_instruction_sve_compute(ptr noundef %0, i32 noundef 1694498819, i32 noundef %38, i32 noundef %103, i8 noundef zeroext 0, i32 noundef %38, i32 noundef 0, i32 noundef %28) #2
  br label %104

104:                                              ; preds = %._crit_edge412, %102
  %.pre-phi420 = phi i32 [ %.pre419, %._crit_edge412 ], [ %103, %102 ]
  tail call void @libxsmm_aarch64_instruction_alu_compute_imm12(ptr noundef %0, i32 noundef 285212678, i32 noundef %4, i32 noundef %4, i32 noundef %50, i8 noundef zeroext 0) #2
  %105 = shl i32 %.pre-phi420, 1
  %106 = add i32 %105, %69
  %107 = zext i32 %106 to i64
  %108 = getelementptr inbounds [24 x i32], ptr @__const.libxsmm_generator_load_2dregblock_mmla_aarch64_sve.l_vr_c, i64 0, i64 %107
  %109 = load i32, ptr %108, align 8, !tbaa !13
  tail call void @libxsmm_aarch64_instruction_sve_compute(ptr noundef %0, i32 noundef %.sroa.0.0.copyload, i32 noundef %37, i32 noundef %38, i8 noundef zeroext 0, i32 noundef %109, i32 noundef 127, i32 noundef 3) #2
  %110 = or disjoint i32 %106, 1
  %111 = zext i32 %110 to i64
  %112 = getelementptr inbounds [24 x i32], ptr @__const.libxsmm_generator_load_2dregblock_mmla_aarch64_sve.l_vr_c, i64 0, i64 %111
  %113 = load i32, ptr %112, align 4, !tbaa !13
  tail call void @libxsmm_aarch64_instruction_sve_compute(ptr noundef %0, i32 noundef %.sroa.7.0.copyload, i32 noundef %37, i32 noundef %38, i8 noundef zeroext 0, i32 noundef %113, i32 noundef 127, i32 noundef 3) #2
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %114 = icmp ult i64 %indvars.iv.next, %58
  br i1 %114, label %72, label %.preheader382, !llvm.loop !15

115:                                              ; preds = %.lr.ph386, %145
  %indvars.iv401 = phi i64 [ %58, %.lr.ph386 ], [ %indvars.iv.next402, %145 ]
  %116 = load i32, ptr %26, align 4, !tbaa !5
  %.not356 = icmp eq i32 %116, 0
  br i1 %.not356, label %117, label %120

117:                                              ; preds = %115
  %118 = load i32, ptr %46, align 4, !tbaa !14
  %119 = icmp ne i32 %118, 0
  %or.cond6 = and i1 %.old5, %119
  br i1 %or.cond6, label %121, label %125

120:                                              ; preds = %115
  br i1 %.old5, label %121, label %125

121:                                              ; preds = %117, %120
  %122 = trunc nuw i64 %indvars.iv401 to i32
  br i1 %.not.not, label %123, label %124

123:                                              ; preds = %121
  tail call void @libxsmm_aarch64_instruction_sve_move(ptr noundef %0, i32 noundef -1522491258, i32 noundef %5, i32 noundef 127, i32 noundef 0, i32 noundef %122, i32 noundef 1) #2
  br label %125

124:                                              ; preds = %121
  tail call void @libxsmm_aarch64_instruction_sve_move(ptr noundef %0, i32 noundef -1532977018, i32 noundef %5, i32 noundef 127, i32 noundef 0, i32 noundef %122, i32 noundef 1) #2
  tail call void @libxsmm_generator_vcvt_bf16f32_aarch64_sve(ptr noundef %0, i32 noundef %122, i32 noundef 0)
  br label %125

125:                                              ; preds = %120, %124, %123, %117
  br i1 %.not363, label %127, label %126

126:                                              ; preds = %125
  tail call void @libxsmm_aarch64_instruction_sve_move(ptr noundef %0, i32 noundef -1522491258, i32 noundef %3, i32 noundef 127, i32 noundef 0, i32 noundef %37, i32 noundef 1) #2
  br label %128

127:                                              ; preds = %125
  tail call void @libxsmm_aarch64_instruction_sve_move(ptr noundef %0, i32 noundef -1532977018, i32 noundef %3, i32 noundef 127, i32 noundef 0, i32 noundef %37, i32 noundef 1) #2
  tail call void @libxsmm_generator_vcvt_bf16f32_aarch64_sve(ptr noundef %0, i32 noundef %37, i32 noundef 0)
  br label %128

128:                                              ; preds = %127, %126
  %129 = load i32, ptr %26, align 4, !tbaa !5
  %.not357 = icmp eq i32 %129, 0
  br i1 %.not357, label %130, label %132

130:                                              ; preds = %128
  %131 = load i32, ptr %46, align 4, !tbaa !14
  %.not358 = icmp eq i32 %131, 0
  br i1 %.not358, label %134, label %132

132:                                              ; preds = %130, %128
  %133 = trunc nuw i64 %indvars.iv401 to i32
  tail call void @libxsmm_aarch64_instruction_sve_compute(ptr noundef %0, i32 noundef 1694498819, i32 noundef %37, i32 noundef %133, i8 noundef zeroext 0, i32 noundef %37, i32 noundef 0, i32 noundef %28) #2
  br label %134

134:                                              ; preds = %132, %130
  tail call void @libxsmm_aarch64_instruction_alu_compute_imm12(ptr noundef %0, i32 noundef 285212678, i32 noundef %3, i32 noundef %3, i32 noundef %55, i8 noundef zeroext 0) #2
  br i1 %or.cond373, label %135, label %136

135:                                              ; preds = %134
  tail call void @libxsmm_aarch64_instruction_sve_compute(ptr noundef %0, i32 noundef 77606915, i32 noundef %38, i32 noundef %38, i8 noundef zeroext 0, i32 noundef %38, i32 noundef 0, i32 noundef 2) #2
  br label %139

136:                                              ; preds = %134
  br i1 %.not363, label %138, label %137

137:                                              ; preds = %136
  tail call void @libxsmm_aarch64_instruction_sve_move(ptr noundef %0, i32 noundef -1522491258, i32 noundef %4, i32 noundef 127, i32 noundef 0, i32 noundef %38, i32 noundef 1) #2
  br label %139

138:                                              ; preds = %136
  tail call void @libxsmm_aarch64_instruction_sve_move(ptr noundef %0, i32 noundef -1532977018, i32 noundef %4, i32 noundef 127, i32 noundef 0, i32 noundef %38, i32 noundef 1) #2
  tail call void @libxsmm_generator_vcvt_bf16f32_aarch64_sve(ptr noundef %0, i32 noundef %38, i32 noundef 0)
  br label %139

139:                                              ; preds = %137, %138, %135
  %140 = load i32, ptr %26, align 4, !tbaa !5
  %.not360 = icmp eq i32 %140, 0
  br i1 %.not360, label %141, label %143

141:                                              ; preds = %139
  %142 = load i32, ptr %46, align 4, !tbaa !14
  %.not361 = icmp eq i32 %142, 0
  br i1 %.not361, label %._crit_edge413, label %143

._crit_edge413:                                   ; preds = %141
  %.pre417 = trunc nuw i64 %indvars.iv401 to i32
  br label %145

143:                                              ; preds = %141, %139
  %144 = trunc nuw i64 %indvars.iv401 to i32
  tail call void @libxsmm_aarch64_instruction_sve_compute(ptr noundef %0, i32 noundef 1694498819, i32 noundef %38, i32 noundef %144, i8 noundef zeroext 0, i32 noundef %38, i32 noundef 0, i32 noundef %28) #2
  br label %145

145:                                              ; preds = %._crit_edge413, %143
  %.pre-phi418 = phi i32 [ %.pre417, %._crit_edge413 ], [ %144, %143 ]
  tail call void @libxsmm_aarch64_instruction_alu_compute_imm12(ptr noundef %0, i32 noundef 285212678, i32 noundef %4, i32 noundef %4, i32 noundef %55, i8 noundef zeroext 0) #2
  %146 = shl i32 %.pre-phi418, 1
  %147 = add i32 %146, %71
  %148 = zext i32 %147 to i64
  %149 = getelementptr inbounds [24 x i32], ptr @__const.libxsmm_generator_load_2dregblock_mmla_aarch64_sve.l_vr_c, i64 0, i64 %148
  %150 = load i32, ptr %149, align 8, !tbaa !13
  tail call void @libxsmm_aarch64_instruction_sve_compute(ptr noundef %0, i32 noundef %.sroa.0.0.copyload, i32 noundef %37, i32 noundef %38, i8 noundef zeroext 0, i32 noundef %150, i32 noundef 127, i32 noundef 3) #2
  %151 = or disjoint i32 %147, 1
  %152 = zext i32 %151 to i64
  %153 = getelementptr inbounds [24 x i32], ptr @__const.libxsmm_generator_load_2dregblock_mmla_aarch64_sve.l_vr_c, i64 0, i64 %152
  %154 = load i32, ptr %153, align 4, !tbaa !13
  tail call void @libxsmm_aarch64_instruction_sve_compute(ptr noundef %0, i32 noundef %.sroa.7.0.copyload, i32 noundef %37, i32 noundef %38, i8 noundef zeroext 0, i32 noundef %154, i32 noundef 127, i32 noundef 3) #2
  %indvars.iv.next402 = add nuw nsw i64 %indvars.iv401, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next402 to i32
  %exitcond.not = icmp eq i32 %53, %lftr.wideiv
  br i1 %exitcond.not, label %._crit_edge, label %115, !llvm.loop !17

._crit_edge:                                      ; preds = %145, %.preheader382
  %155 = icmp ne i32 %.0387, %52
  %or.cond375 = select i1 %not..not366, i1 true, i1 %155
  %156 = zext i1 %or.cond375 to i64
  %..v = shl nuw nsw i64 %.pre415, %156
  %. = sub nsw i64 %..v, %56
  tail call void @libxsmm_aarch64_instruction_alu_compute_imm64(ptr noundef %0, i32 noundef 4096, i32 noundef %3, i32 noundef %4, i32 noundef %3, i64 noundef %.) #2
  %157 = add nuw nsw i32 %.0387, 1
  %exitcond403.not = icmp eq i32 %157, %16
  br i1 %exitcond403.not, label %._crit_edge389, label %67, !llvm.loop !18

._crit_edge389:                                   ; preds = %._crit_edge, %.preheader383
  %158 = zext i32 %9 to i64
  %159 = mul nuw nsw i64 %.pre415, %158
  tail call void @libxsmm_aarch64_instruction_alu_compute_imm64(ptr noundef %0, i32 noundef 4097, i32 noundef %3, i32 noundef %4, i32 noundef %3, i64 noundef %159) #2
  br label %.loopexit

.preheader380:                                    ; preds = %.preheader380.lr.ph, %._crit_edge394
  %.1395 = phi i32 [ 0, %.preheader380.lr.ph ], [ %229, %._crit_edge394 ]
  br i1 %.not399, label %.preheader, label %.lr.ph391

.lr.ph391:                                        ; preds = %.preheader380
  %160 = icmp eq i32 %.1395, 0
  %161 = shl i32 %.1395, 3
  br label %164

.preheader:                                       ; preds = %197, %.preheader380
  br i1 %64, label %.lr.ph393, label %._crit_edge394

.lr.ph393:                                        ; preds = %.preheader
  %162 = icmp eq i32 %.1395, 0
  %163 = shl i32 %.1395, 3
  br label %199

164:                                              ; preds = %.lr.ph391, %197
  %indvars.iv404 = phi i64 [ 0, %.lr.ph391 ], [ %indvars.iv.next405, %197 ]
  %165 = load i32, ptr %26, align 4, !tbaa !5
  %.not352 = icmp eq i32 %165, 0
  br i1 %.not352, label %166, label %168

166:                                              ; preds = %164
  %167 = load i32, ptr %59, align 4, !tbaa !14
  %.not353 = icmp eq i32 %167, 0
  br i1 %.not353, label %186, label %168

168:                                              ; preds = %166, %164
  br i1 %160, label %169, label %175

169:                                              ; preds = %168
  %170 = trunc nuw i64 %indvars.iv404 to i32
  br i1 %.not.not, label %171, label %172

171:                                              ; preds = %169
  tail call void @libxsmm_aarch64_instruction_sve_move(ptr noundef %0, i32 noundef -2055192570, i32 noundef %5, i32 noundef 127, i32 noundef 0, i32 noundef %170, i32 noundef 127) #2
  br label %173

172:                                              ; preds = %169
  tail call void @libxsmm_aarch64_instruction_sve_move(ptr noundef %0, i32 noundef -1532977018, i32 noundef %5, i32 noundef 127, i32 noundef 0, i32 noundef %170, i32 noundef 2) #2
  tail call void @libxsmm_generator_vcvt_bf16f32_aarch64_sve(ptr noundef %0, i32 noundef %170, i32 noundef 0)
  br label %173

173:                                              ; preds = %172, %171
  %.not354 = icmp ne i64 %indvars.iv404, %65
  %or.cond377.not = or i1 %31, %.not354
  br i1 %or.cond377.not, label %174, label %175

174:                                              ; preds = %173
  tail call void @libxsmm_aarch64_instruction_alu_compute_imm12(ptr noundef %0, i32 noundef 285212678, i32 noundef %5, i32 noundef %5, i32 noundef %62, i8 noundef zeroext 0) #2
  br label %175

175:                                              ; preds = %173, %174, %168
  %176 = trunc nuw i64 %indvars.iv404 to i32
  %177 = shl i32 %176, 1
  %178 = add i32 %177, %161
  %179 = zext i32 %178 to i64
  %180 = getelementptr inbounds [24 x i32], ptr @__const.libxsmm_generator_load_2dregblock_mmla_aarch64_sve.l_vr_c, i64 0, i64 %179
  %181 = load i32, ptr %180, align 8, !tbaa !13
  tail call void @libxsmm_aarch64_instruction_sve_compute(ptr noundef %0, i32 noundef %.sroa.0.0.copyload, i32 noundef %176, i32 noundef %176, i8 noundef zeroext 0, i32 noundef %181, i32 noundef 127, i32 noundef 3) #2
  %182 = or disjoint i32 %178, 1
  %183 = zext i32 %182 to i64
  %184 = getelementptr inbounds [24 x i32], ptr @__const.libxsmm_generator_load_2dregblock_mmla_aarch64_sve.l_vr_c, i64 0, i64 %183
  %185 = load i32, ptr %184, align 4, !tbaa !13
  tail call void @libxsmm_aarch64_instruction_sve_compute(ptr noundef %0, i32 noundef %.sroa.7.0.copyload, i32 noundef %176, i32 noundef %176, i8 noundef zeroext 0, i32 noundef %185, i32 noundef 127, i32 noundef 3) #2
  br label %197

186:                                              ; preds = %166
  %187 = trunc nuw i64 %indvars.iv404 to i32
  %188 = shl i32 %187, 1
  %189 = add i32 %188, %161
  %190 = zext i32 %189 to i64
  %191 = getelementptr inbounds [24 x i32], ptr @__const.libxsmm_generator_load_2dregblock_mmla_aarch64_sve.l_vr_c, i64 0, i64 %190
  %192 = load i32, ptr %191, align 8, !tbaa !13
  tail call void @libxsmm_aarch64_instruction_sve_compute(ptr noundef %0, i32 noundef 77606915, i32 noundef %192, i32 noundef %192, i8 noundef zeroext 0, i32 noundef %192, i32 noundef 0, i32 noundef 2) #2
  %193 = or disjoint i32 %189, 1
  %194 = zext i32 %193 to i64
  %195 = getelementptr inbounds [24 x i32], ptr @__const.libxsmm_generator_load_2dregblock_mmla_aarch64_sve.l_vr_c, i64 0, i64 %194
  %196 = load i32, ptr %195, align 4, !tbaa !13
  tail call void @libxsmm_aarch64_instruction_sve_compute(ptr noundef %0, i32 noundef 77606915, i32 noundef %196, i32 noundef %196, i8 noundef zeroext 0, i32 noundef %196, i32 noundef 0, i32 noundef 2) #2
  br label %197

197:                                              ; preds = %175, %186
  %indvars.iv.next405 = add nuw nsw i64 %indvars.iv404, 1
  %198 = icmp ult i64 %indvars.iv.next405, %66
  br i1 %198, label %164, label %.preheader, !llvm.loop !19

199:                                              ; preds = %.lr.ph393, %228
  %indvars.iv407 = phi i64 [ %66, %.lr.ph393 ], [ %indvars.iv.next408, %228 ]
  %200 = load i32, ptr %26, align 4, !tbaa !5
  %.not350 = icmp eq i32 %200, 0
  br i1 %.not350, label %201, label %203

201:                                              ; preds = %199
  %202 = load i32, ptr %59, align 4, !tbaa !14
  %.not351 = icmp eq i32 %202, 0
  br i1 %.not351, label %217, label %203

203:                                              ; preds = %201, %199
  %204 = trunc nuw i64 %indvars.iv407 to i32
  br i1 %162, label %205, label %._crit_edge414

205:                                              ; preds = %203
  br i1 %.not.not, label %206, label %207

206:                                              ; preds = %205
  tail call void @libxsmm_aarch64_instruction_sve_move(ptr noundef %0, i32 noundef -1522491258, i32 noundef %5, i32 noundef 127, i32 noundef 0, i32 noundef %204, i32 noundef 1) #2
  br label %._crit_edge414

207:                                              ; preds = %205
  tail call void @libxsmm_aarch64_instruction_sve_move(ptr noundef %0, i32 noundef -1532977018, i32 noundef %5, i32 noundef 127, i32 noundef 0, i32 noundef %204, i32 noundef 1) #2
  tail call void @libxsmm_generator_vcvt_bf16f32_aarch64_sve(ptr noundef %0, i32 noundef %204, i32 noundef 0)
  br label %._crit_edge414

._crit_edge414:                                   ; preds = %203, %206, %207
  %208 = shl i32 %204, 1
  %209 = add i32 %208, %163
  %210 = zext i32 %209 to i64
  %211 = getelementptr inbounds [24 x i32], ptr @__const.libxsmm_generator_load_2dregblock_mmla_aarch64_sve.l_vr_c, i64 0, i64 %210
  %212 = load i32, ptr %211, align 8, !tbaa !13
  tail call void @libxsmm_aarch64_instruction_sve_compute(ptr noundef %0, i32 noundef %.sroa.0.0.copyload, i32 noundef %204, i32 noundef %204, i8 noundef zeroext 0, i32 noundef %212, i32 noundef 127, i32 noundef 3) #2
  %213 = or disjoint i32 %209, 1
  %214 = zext i32 %213 to i64
  %215 = getelementptr inbounds [24 x i32], ptr @__const.libxsmm_generator_load_2dregblock_mmla_aarch64_sve.l_vr_c, i64 0, i64 %214
  %216 = load i32, ptr %215, align 4, !tbaa !13
  tail call void @libxsmm_aarch64_instruction_sve_compute(ptr noundef %0, i32 noundef %.sroa.7.0.copyload, i32 noundef %204, i32 noundef %204, i8 noundef zeroext 0, i32 noundef %216, i32 noundef 127, i32 noundef 3) #2
  br label %228

217:                                              ; preds = %201
  %218 = trunc nuw i64 %indvars.iv407 to i32
  %219 = shl i32 %218, 1
  %220 = add i32 %219, %163
  %221 = zext i32 %220 to i64
  %222 = getelementptr inbounds [24 x i32], ptr @__const.libxsmm_generator_load_2dregblock_mmla_aarch64_sve.l_vr_c, i64 0, i64 %221
  %223 = load i32, ptr %222, align 8, !tbaa !13
  tail call void @libxsmm_aarch64_instruction_sve_compute(ptr noundef %0, i32 noundef 77606915, i32 noundef %223, i32 noundef %223, i8 noundef zeroext 0, i32 noundef %223, i32 noundef 0, i32 noundef 2) #2
  %224 = or disjoint i32 %220, 1
  %225 = zext i32 %224 to i64
  %226 = getelementptr inbounds [24 x i32], ptr @__const.libxsmm_generator_load_2dregblock_mmla_aarch64_sve.l_vr_c, i64 0, i64 %225
  %227 = load i32, ptr %226, align 4, !tbaa !13
  tail call void @libxsmm_aarch64_instruction_sve_compute(ptr noundef %0, i32 noundef 77606915, i32 noundef %227, i32 noundef %227, i8 noundef zeroext 0, i32 noundef %227, i32 noundef 0, i32 noundef 2) #2
  br label %228

228:                                              ; preds = %._crit_edge414, %217
  %indvars.iv.next408 = add nuw nsw i64 %indvars.iv407, 1
  %lftr.wideiv409 = trunc i64 %indvars.iv.next408 to i32
  %exitcond410.not = icmp eq i32 %63, %lftr.wideiv409
  br i1 %exitcond410.not, label %._crit_edge394, label %199, !llvm.loop !20

._crit_edge394:                                   ; preds = %228, %.preheader
  %229 = add nuw nsw i32 %.1395, 1
  %exitcond411.not = icmp eq i32 %229, %16
  br i1 %exitcond411.not, label %.loopexit, label %.preheader380, !llvm.loop !21

.loopexit:                                        ; preds = %._crit_edge394, %.preheader381, %._crit_edge389
  ret void
}

declare i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef) local_unnamed_addr #1

declare i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef) local_unnamed_addr #1

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

attributes #0 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { 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 100}
!6 = !{!"libxsmm_micro_kernel_config", !7, i64 0, !7, i64 4, !7, i64 8, !7, i64 12, !7, i64 16, !7, i64 20, !7, i64 24, !7, i64 28, !7, i64 32, !7, i64 36, !7, i64 40, !7, i64 44, !7, i64 48, !7, i64 52, !7, i64 56, !7, i64 60, !7, i64 64, !7, i64 68, !7, i64 72, !7, i64 76, !7, i64 80, !8, i64 84, !7, i64 88, !7, i64 92, !7, i64 96, !7, i64 100, !7, i64 104, !7, i64 108, !7, i64 112, !7, i64 116, !7, i64 120, !7, i64 124, !7, i64 128, !7, i64 132, !7, i64 136, !7, i64 140, !7, i64 144, !7, i64 148, !7, i64 152, !7, i64 156, !7, i64 160, !7, i64 164, !7, i64 168, !7, i64 172, !7, i64 176, !7, i64 180, !7, i64 184, !7, i64 188, !7, i64 192, !7, i64 196, !7, i64 200, !7, i64 204, !7, i64 208, !7, i64 212, !7, i64 216, !7, i64 220, !7, i64 224, !7, i64 228, !7, i64 232, !7, i64 236, !7, i64 240, !7, i64 244, !7, i64 248, !7, i64 252, !7, i64 256, !7, i64 260, !7, i64 264, !7, i64 268, !7, i64 272, !7, i64 276, !7, i64 280, !7, i64 284, !7, i64 288, !7, i64 292, !7, i64 296, !7, i64 300, !7, i64 304, !7, i64 308, !7, i64 312, !7, i64 316, !7, i64 320, !7, i64 324, !7, i64 328, !7, i64 332, !7, i64 336, !7, i64 340, !7, i64 344, !7, i64 348, !7, i64 352, !7, i64 356, !7, i64 360, !8, i64 364, !8, i64 380, !8, i64 396, !8, i64 412, !8, i64 428, !8, i64 444, !7, i64 460, !8, i64 464, !10, i64 520, !7, i64 556, !7, i64 560, !7, i64 564, !7, i64 568, !7, i64 572, !7, i64 576, !7, i64 580, !7, i64 584, !12, i64 592, !7, i64 600, !7, i64 604, !7, i64 608, !7, i64 612, !12, i64 616, !7, i64 624, !7, i64 628, !7, i64 632, !7, i64 636, !7, i64 640, !7, i64 644, !7, i64 648, !7, i64 652, !7, i64 656, !7, i64 660, !7, i64 664, !7, i64 668, !7, i64 672, !7, i64 676, !7, i64 680}
!7 = !{!"int", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!"libxsmm_tile_config", !8, i64 0, !11, i64 2, !8, i64 4, !11, i64 6, !8, i64 8, !11, i64 10, !8, i64 12, !11, i64 14, !8, i64 16, !11, i64 18, !8, i64 20, !11, i64 22, !8, i64 24, !11, i64 26, !8, i64 28, !11, i64 30, !8, i64 32}
!11 = !{!"short", !8, i64 0}
!12 = !{!"any pointer", !8, i64 0}
!13 = !{!7, !7, i64 0}
!14 = !{!6, !7, i64 116}
!15 = distinct !{!15, !16}
!16 = !{!"llvm.loop.mustprogress"}
!17 = distinct !{!17, !16}
!18 = distinct !{!18, !16}
!19 = distinct !{!19, !16}
!20 = distinct !{!20, !16}
!21 = distinct !{!21, !16}


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