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

; 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_loop_label_tracker_struct = type { [512 x i32], i32 }
%struct.libxsmm_const_data_tracker = type { [81920 x i8], i32, [128 x i32], i32 }
%struct.libxsmm_micro_kernel_config = type { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i8, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, [4 x i32], [4 x i32], [4 x i32], [4 x i32], [4 x i32], [4 x i32], i32, [2 x %struct.libxsmm_blocking_info_t], %struct.libxsmm_tile_config, i32, i32, i32, i32, i32, i32, i32, i32, ptr, i32, i32, i32, i32, ptr, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 }
%struct.libxsmm_blocking_info_t = type { i32, [4 x i32], i32, i32 }
%struct.libxsmm_tile_config = type { i8, i16, i8, i16, i8, i16, i8, i16, i8, i16, i8, i16, i8, i16, i8, i16, i8 }
%struct.libxsmm_gp_reg_mapping_struct = type { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 }
%struct.libxsmm_asparse_reg_op = type { i32, [12 x i32], i16, [12 x i16], [12 x i8], [12 x i8], [12 x i8] }
%struct.libxsmm_gemm_descriptor = type <{ i32, i32, i32, i32, i32, i32, i32, i8, [3 x i8], i8, i64, i64, i8, i32, i32, i32, i16, i16, i8, i8, i8, i8, i16, i16, i16, i16, i16, i16, i32, i32, i32, i8 }>
%struct.libxsmm_generated_code = type { ptr, i32, i32, i32, i32, i32, i32 }

@.str = external hidden unnamed_addr constant [88 x i8], align 1
@libxsmm_ninit = external global i32, align 4
@libxsmm_verbosity = external global i32, align 4
@.str.1 = external hidden unnamed_addr constant [14 x i8], align 1
@__const.libxsmm_generator_spgemm_csr_asparse_reg_aarch64_sve.l_ld_tbl = external hidden unnamed_addr constant [2 x i32], align 4
@__const.libxsmm_generator_spgemm_csr_asparse_reg_aarch64_sve.l_ldr_tbl = external hidden unnamed_addr constant [2 x i32], align 4
@__const.libxsmm_generator_spgemm_csr_asparse_reg_aarch64_sve.l_st_tbl = external hidden unnamed_addr constant [2 x [2 x i32]], align 16
@__func__.libxsmm_generator_spgemm_csr_asparse_reg_aarch64_sve = external hidden unnamed_addr constant [53 x i8], align 1
@__PRETTY_FUNCTION__.libxsmm_generator_spgemm_csr_asparse_reg_aarch64_sve = external hidden unnamed_addr constant [177 x i8], align 1

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

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

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

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

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

; Function Attrs: nounwind
declare void @free(ptr noundef) #3

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

; Function Attrs: nounwind allocsize(0)
declare noalias ptr @malloc(i64 noundef) #4

; 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) #5

declare i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef) #6

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

declare void @libxsmm_reset_const_data_tracker(ptr noundef) #6

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

declare void @libxsmm_reset_loop_label_tracker(ptr noundef) #6

declare void @libxsmm_reset_aarch64_gp_reg_mapping(ptr noundef) #6

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

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

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

declare i32 @libxsmm_aarch64_instruction_add_data(ptr noundef, ptr noundef, i32 noundef, i32 noundef, i32 noundef, ptr noundef) #6

declare void @libxsmm_aarch64_instruction_adr_data(ptr noundef, i32 noundef, i32 noundef, ptr noundef) #6

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

declare void @libxsmm_generator_mov_aarch64(ptr noundef, i32 noundef, i32 noundef) #6

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

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

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

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

declare void @libxsmm_aarch64_instruction_close_data(ptr noundef, ptr noundef) #6

; Function Attrs: nounwind uwtable
define dso_local void @libxsmm_generator_spgemm_csr_asparse_reg_aarch64_sve(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %4) #0 {
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca ptr, align 8
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  %14 = alloca i32, align 4
  %15 = alloca i32, align 4
  %16 = alloca i32, align 4
  %17 = alloca i32, align 4
  %18 = alloca ptr, align 8
  %19 = alloca ptr, align 8
  %20 = alloca ptr, align 8
  %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 [30 x i32], align 16
  %29 = alloca i32, align 4
  %30 = alloca i32, align 4
  %31 = alloca i32, align 4
  %32 = alloca i32, align 4
  %33 = alloca i32, align 4
  %34 = alloca i32, align 4
  %35 = alloca i32, align 4
  %36 = alloca i32, align 4
  %37 = alloca i32, align 4
  %38 = alloca i32, align 4
  %39 = alloca i32, align 4
  %40 = alloca ptr, align 8
  %41 = alloca i32, align 4
  %42 = alloca i32, align 4
  %43 = alloca %struct.libxsmm_loop_label_tracker_struct, align 4
  %44 = alloca %struct.libxsmm_const_data_tracker, align 4
  %45 = alloca %struct.libxsmm_micro_kernel_config, align 8
  %46 = alloca %struct.libxsmm_gp_reg_mapping_struct, align 4
  %47 = alloca i32, align 4
  %48 = alloca [2 x i32], align 4
  %49 = alloca [2 x i32], align 4
  %50 = alloca [2 x [2 x i32]], align 16
  %51 = alloca float, align 4
  %52 = alloca i32, align 4
  %53 = alloca i32, align 4
  %54 = alloca [15 x i8], align 1
  %55 = alloca %struct.libxsmm_asparse_reg_op, align 4
  %56 = alloca i32, align 4
  %57 = alloca i32, align 4
  %58 = alloca i32, align 4
  %59 = alloca i32, align 4
  %60 = alloca i32, align 4
  %61 = alloca i32, align 4
  %62 = alloca i8, align 1
  %63 = alloca i32, align 4
  %64 = alloca i32, align 4
  %65 = alloca i32, align 4
  %66 = alloca i32, align 4
  %67 = alloca i32, align 4
  %68 = alloca i32, align 4
  %69 = alloca i32, align 4
  %70 = alloca i32, align 4
  store ptr %0, ptr %6, align 8, !tbaa !5
  store ptr %1, ptr %7, align 8, !tbaa !5
  store ptr %2, ptr %8, align 8, !tbaa !5
  store ptr %3, ptr %9, align 8, !tbaa !5
  store ptr %4, ptr %10, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #8
  %71 = load ptr, ptr %8, align 8, !tbaa !5
  %72 = load ptr, ptr %7, align 8, !tbaa !5
  %73 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %72, i32 0, i32 0
  %74 = load i32, ptr %73, align 1, !tbaa !9
  %75 = zext i32 %74 to i64
  %76 = getelementptr inbounds i32, ptr %71, i64 %75
  %77 = load i32, ptr %76, align 4, !tbaa !14
  store i32 %77, ptr %17, align 4, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #8
  %78 = load i32, ptr %17, align 4, !tbaa !14
  %79 = icmp ne i32 0, %78
  br i1 %79, label %80, label %85

80:                                               ; preds = %5
  %81 = load i32, ptr %17, align 4, !tbaa !14
  %82 = zext i32 %81 to i64
  %83 = mul i64 8, %82
  %84 = call noalias ptr @malloc(i64 noundef %83) #9
  br label %86

85:                                               ; preds = %5
  br label %86

86:                                               ; preds = %85, %80
  %87 = phi ptr [ %84, %80 ], [ null, %85 ]
  store ptr %87, ptr %18, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #8
  %88 = load i32, ptr %17, align 4, !tbaa !14
  %89 = icmp ne i32 0, %88
  br i1 %89, label %90, label %95

90:                                               ; preds = %86
  %91 = load i32, ptr %17, align 4, !tbaa !14
  %92 = zext i32 %91 to i64
  %93 = mul i64 4, %92
  %94 = call noalias ptr @malloc(i64 noundef %93) #9
  br label %96

95:                                               ; preds = %86
  br label %96

96:                                               ; preds = %95, %90
  %97 = phi ptr [ %94, %90 ], [ null, %95 ]
  store ptr %97, ptr %19, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #8
  %98 = load i32, ptr %17, align 4, !tbaa !14
  %99 = icmp ne i32 0, %98
  br i1 %99, label %100, label %105

100:                                              ; preds = %96
  %101 = load i32, ptr %17, align 4, !tbaa !14
  %102 = zext i32 %101 to i64
  %103 = mul i64 4, %102
  %104 = call noalias ptr @malloc(i64 noundef %103) #9
  br label %106

105:                                              ; preds = %96
  br label %106

106:                                              ; preds = %105, %100
  %107 = phi ptr [ %104, %100 ], [ null, %105 ]
  store ptr %107, ptr %20, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #8
  store i32 0, ptr %25, align 4, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #8
  store i32 0, ptr %26, align 4, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #8
  store i32 -1, ptr %27, align 4, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 120, ptr %28) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #8
  store i32 0, ptr %29, align 4, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #8
  %108 = load ptr, ptr %7, align 8, !tbaa !5
  %109 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %108, i32 0, i32 8
  %110 = getelementptr inbounds [3 x i8], ptr %109, i64 0, i64 0
  %111 = call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef %110)
  %112 = icmp eq i32 0, %111
  %113 = zext i1 %112 to i32
  store i32 %113, ptr %30, align 4, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #8
  %114 = load i32, ptr %30, align 4, !tbaa !14
  %115 = icmp ne i32 %114, 0
  %116 = zext i1 %115 to i64
  %117 = select i1 %115, i32 8, i32 4
  store i32 %117, ptr %31, align 4, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %36) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %37) #8
  store i32 0, ptr %37, align 4, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 4, ptr %38) #8
  store i32 0, ptr %38, align 4, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 4, ptr %39) #8
  %118 = load ptr, ptr %7, align 8, !tbaa !5
  %119 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %118, i32 0, i32 6
  %120 = load i32, ptr %119, align 1, !tbaa !15
  %121 = and i32 4, %120
  %122 = icmp ne i32 %121, 0
  %123 = xor i1 %122, true
  %124 = xor i1 %123, true
  %125 = zext i1 %124 to i32
  store i32 %125, ptr %39, align 4, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 8, ptr %40) #8
  %126 = call noalias ptr @malloc(i64 noundef 7602176) #9
  store ptr %126, ptr %40, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %41) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %42) #8
  call void @llvm.lifetime.start.p0(i64 2052, ptr %43) #8
  call void @llvm.lifetime.start.p0(i64 82440, ptr %44) #8
  call void @llvm.lifetime.start.p0(i64 688, ptr %45) #8
  call void @llvm.lifetime.start.p0(i64 132, ptr %46) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %47) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %48) #8
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %48, ptr align 4 @__const.libxsmm_generator_spgemm_csr_asparse_reg_aarch64_sve.l_ld_tbl, i64 8, i1 false)
  call void @llvm.lifetime.start.p0(i64 8, ptr %49) #8
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %49, ptr align 4 @__const.libxsmm_generator_spgemm_csr_asparse_reg_aarch64_sve.l_ldr_tbl, i64 8, i1 false)
  call void @llvm.lifetime.start.p0(i64 16, ptr %50) #8
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %50, ptr align 16 @__const.libxsmm_generator_spgemm_csr_asparse_reg_aarch64_sve.l_st_tbl, i64 16, i1 false)
  %127 = load ptr, ptr %18, align 8, !tbaa !5
  %128 = icmp eq ptr null, %127
  br i1 %128, label %138, label %129

129:                                              ; preds = %106
  %130 = load ptr, ptr %19, align 8, !tbaa !5
  %131 = icmp eq ptr null, %130
  br i1 %131, label %138, label %132

132:                                              ; preds = %129
  %133 = load ptr, ptr %20, align 8, !tbaa !5
  %134 = icmp eq ptr null, %133
  br i1 %134, label %138, label %135

135:                                              ; preds = %132
  %136 = load ptr, ptr %40, align 8, !tbaa !5
  %137 = icmp eq ptr null, %136
  br i1 %137, label %138, label %147

138:                                              ; preds = %135, %132, %129, %106
  %139 = load ptr, ptr %6, align 8, !tbaa !5
  %140 = load i32, ptr @libxsmm_ninit, align 4, !tbaa !14
  %141 = icmp ult i32 1, %140
  br i1 %141, label %142, label %144

142:                                              ; preds = %138
  %143 = load i32, ptr @libxsmm_verbosity, align 4, !tbaa !14
  br label %145

144:                                              ; preds = %138
  br label %145

145:                                              ; preds = %144, %142
  %146 = phi i32 [ %143, %142 ], [ 1, %144 ]
  call void @libxsmm_handle_error(ptr noundef %139, i32 noundef 90027, ptr noundef @__func__.libxsmm_generator_spgemm_csr_asparse_reg_aarch64_sve, ptr noundef @.str, i32 noundef 1342, i32 noundef %146)
  br label %902

147:                                              ; preds = %135
  %148 = load ptr, ptr %6, align 8, !tbaa !5
  %149 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %148, i32 0, i32 6
  %150 = load i32, ptr %149, align 4, !tbaa !16
  %151 = load ptr, ptr %7, align 8, !tbaa !5
  call void @libxsmm_generator_gemm_init_micro_kernel_config_aarch64(ptr noundef %45, i32 noundef %150, ptr noundef %151)
  %152 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %45, i32 0, i32 2
  %153 = load i32, ptr %152, align 8, !tbaa !18
  store i32 %153, ptr %32, align 4, !tbaa !14
  %154 = load i32, ptr %31, align 4, !tbaa !14
  %155 = load i32, ptr %32, align 4, !tbaa !14
  %156 = mul i32 %154, %155
  store i32 %156, ptr %33, align 4, !tbaa !14
  %157 = load ptr, ptr %7, align 8, !tbaa !5
  %158 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %157, i32 0, i32 6
  %159 = load i32, ptr %158, align 1, !tbaa !15
  %160 = and i32 48, %159
  %161 = icmp eq i32 48, %160
  br i1 %161, label %162, label %169

162:                                              ; preds = %147
  %163 = load ptr, ptr %7, align 8, !tbaa !5
  %164 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %163, i32 0, i32 5
  %165 = load i32, ptr %164, align 1, !tbaa !21
  %166 = load i32, ptr %32, align 4, !tbaa !14
  %167 = urem i32 %165, %166
  %168 = icmp eq i32 0, %167
  br label %169

169:                                              ; preds = %162, %147
  %170 = phi i1 [ false, %147 ], [ %168, %162 ]
  %171 = zext i1 %170 to i64
  %172 = select i1 %170, i32 1, i32 0
  store i32 %172, ptr %34, align 4, !tbaa !14
  %173 = load ptr, ptr %7, align 8, !tbaa !5
  %174 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %173, i32 0, i32 1
  %175 = load i32, ptr %174, align 1, !tbaa !22
  %176 = load i32, ptr %32, align 4, !tbaa !14
  %177 = icmp eq i32 %175, %176
  br i1 %177, label %178, label %179

178:                                              ; preds = %169
  store i32 1, ptr %16, align 4, !tbaa !14
  br label %206

179:                                              ; preds = %169
  %180 = load ptr, ptr %7, align 8, !tbaa !5
  %181 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %180, i32 0, i32 1
  %182 = load i32, ptr %181, align 1, !tbaa !22
  %183 = load i32, ptr %32, align 4, !tbaa !14
  %184 = mul i32 2, %183
  %185 = icmp eq i32 %182, %184
  br i1 %185, label %186, label %187

186:                                              ; preds = %179
  store i32 2, ptr %16, align 4, !tbaa !14
  br label %205

187:                                              ; preds = %179
  %188 = load ptr, ptr %7, align 8, !tbaa !5
  %189 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %188, i32 0, i32 1
  %190 = load i32, ptr %189, align 1, !tbaa !22
  %191 = load i32, ptr %32, align 4, !tbaa !14
  %192 = mul i32 4, %191
  %193 = icmp eq i32 %190, %192
  br i1 %193, label %194, label %195

194:                                              ; preds = %187
  store i32 4, ptr %16, align 4, !tbaa !14
  br label %204

195:                                              ; preds = %187
  %196 = load ptr, ptr %6, align 8, !tbaa !5
  %197 = load i32, ptr @libxsmm_ninit, align 4, !tbaa !14
  %198 = icmp ult i32 1, %197
  br i1 %198, label %199, label %201

199:                                              ; preds = %195
  %200 = load i32, ptr @libxsmm_verbosity, align 4, !tbaa !14
  br label %202

201:                                              ; preds = %195
  br label %202

202:                                              ; preds = %201, %199
  %203 = phi i32 [ %200, %199 ], [ 1, %201 ]
  call void @libxsmm_handle_error(ptr noundef %196, i32 noundef 90016, ptr noundef @__func__.libxsmm_generator_spgemm_csr_asparse_reg_aarch64_sve, ptr noundef @.str, i32 noundef 1363, i32 noundef %203)
  br label %902

204:                                              ; preds = %194
  br label %205

205:                                              ; preds = %204, %186
  br label %206

206:                                              ; preds = %205, %178
  %207 = load i32, ptr %30, align 4, !tbaa !14
  %208 = icmp ne i32 %207, 0
  br i1 %208, label %209, label %210

209:                                              ; preds = %206
  store i32 16, ptr %35, align 4, !tbaa !14
  store i32 2, ptr %36, align 4, !tbaa !14
  store i32 3, ptr %47, align 4, !tbaa !14
  br label %211

210:                                              ; preds = %206
  store i32 8, ptr %35, align 4, !tbaa !14
  store i32 4, ptr %36, align 4, !tbaa !14
  store i32 2, ptr %47, align 4, !tbaa !14
  br label %211

211:                                              ; preds = %210, %209
  %212 = load i32, ptr %16, align 4, !tbaa !14
  %213 = sub i32 32, %212
  %214 = sub i32 %213, 2
  %215 = load i32, ptr %36, align 4, !tbaa !14
  %216 = mul i32 %214, %215
  store i32 %216, ptr %21, align 4, !tbaa !14
  %217 = load ptr, ptr %10, align 8, !tbaa !5
  %218 = icmp ne ptr null, %217
  br i1 %218, label %219, label %220

219:                                              ; preds = %211
  br label %221

220:                                              ; preds = %211
  call void @__assert_fail(ptr noundef @.str.1, ptr noundef @.str, i32 noundef 1381, ptr noundef @__PRETTY_FUNCTION__.libxsmm_generator_spgemm_csr_asparse_reg_aarch64_sve) #10
  unreachable

221:                                              ; preds = %219
  %222 = load i32, ptr %17, align 4, !tbaa !14
  %223 = load ptr, ptr %10, align 8, !tbaa !5
  %224 = load ptr, ptr %18, align 8, !tbaa !5
  %225 = load ptr, ptr %19, align 8, !tbaa !5
  %226 = load ptr, ptr %20, align 8, !tbaa !5
  call void @libxsmm_analyse_sparse_nnz(i32 noundef %222, ptr noundef %223, ptr noundef %13, ptr noundef %224, ptr noundef %225, ptr noundef %226)
  %227 = load i32, ptr %13, align 4, !tbaa !14
  %228 = icmp ugt i32 %227, 1280
  br i1 %228, label %229, label %238

229:                                              ; preds = %221
  %230 = load ptr, ptr %6, align 8, !tbaa !5
  %231 = load i32, ptr @libxsmm_ninit, align 4, !tbaa !14
  %232 = icmp ult i32 1, %231
  br i1 %232, label %233, label %235

233:                                              ; preds = %229
  %234 = load i32, ptr @libxsmm_verbosity, align 4, !tbaa !14
  br label %236

235:                                              ; preds = %229
  br label %236

236:                                              ; preds = %235, %233
  %237 = phi i32 [ %234, %233 ], [ 1, %235 ]
  call void @libxsmm_handle_error(ptr noundef %230, i32 noundef 90036, ptr noundef @__func__.libxsmm_generator_spgemm_csr_asparse_reg_aarch64_sve, ptr noundef @.str, i32 noundef 1389, i32 noundef %237)
  br label %902

238:                                              ; preds = %221
  %239 = load i32, ptr %30, align 4, !tbaa !14
  %240 = icmp ne i32 %239, 0
  br i1 %240, label %261, label %241

241:                                              ; preds = %238
  store i32 0, ptr %12, align 4, !tbaa !14
  br label %242

242:                                              ; preds = %257, %241
  %243 = load i32, ptr %12, align 4, !tbaa !14
  %244 = load i32, ptr %13, align 4, !tbaa !14
  %245 = icmp ult i32 %243, %244
  br i1 %245, label %246, label %260

246:                                              ; preds = %242
  call void @llvm.lifetime.start.p0(i64 4, ptr %51) #8
  %247 = load ptr, ptr %18, align 8, !tbaa !5
  %248 = load i32, ptr %12, align 4, !tbaa !14
  %249 = zext i32 %248 to i64
  %250 = getelementptr inbounds double, ptr %247, i64 %249
  %251 = load double, ptr %250, align 8, !tbaa !23
  %252 = fptrunc double %251 to float
  store float %252, ptr %51, align 4, !tbaa !25
  %253 = load ptr, ptr %18, align 8, !tbaa !5
  %254 = load i32, ptr %12, align 4, !tbaa !14
  %255 = zext i32 %254 to i64
  %256 = getelementptr inbounds float, ptr %253, i64 %255
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %256, ptr align 4 %51, i64 4, i1 false)
  call void @llvm.lifetime.end.p0(i64 4, ptr %51) #8
  br label %257

257:                                              ; preds = %246
  %258 = load i32, ptr %12, align 4, !tbaa !14
  %259 = add i32 %258, 1
  store i32 %259, ptr %12, align 4, !tbaa !14
  br label %242, !llvm.loop !27

260:                                              ; preds = %242
  br label %261

261:                                              ; preds = %260, %238
  call void @libxsmm_reset_aarch64_gp_reg_mapping(ptr noundef %46)
  %262 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %46, i32 0, i32 0
  store i32 32, ptr %262, align 4, !tbaa !29
  %263 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %46, i32 0, i32 3
  store i32 33, ptr %263, align 4, !tbaa !31
  %264 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %46, i32 0, i32 5
  store i32 34, ptr %264, align 4, !tbaa !32
  %265 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %46, i32 0, i32 22
  store i32 60, ptr %265, align 4, !tbaa !33
  %266 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %46, i32 0, i32 23
  store i32 61, ptr %266, align 4, !tbaa !34
  %267 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %46, i32 0, i32 24
  store i32 62, ptr %267, align 4, !tbaa !35
  %268 = getelementptr inbounds [30 x i32], ptr %28, i64 0, i64 0
  call void @llvm.memset.p0.i64(ptr align 16 %268, i8 -1, i64 120, i1 false)
  call void @libxsmm_reset_const_data_tracker(ptr noundef %44)
  call void @libxsmm_reset_loop_label_tracker(ptr noundef %43)
  %269 = load ptr, ptr %6, align 8, !tbaa !5
  call void @libxsmm_aarch64_instruction_open_stream(ptr noundef %269, i16 noundef zeroext 4095)
  %270 = load ptr, ptr %7, align 8, !tbaa !5
  %271 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %270, i32 0, i32 6
  %272 = load i32, ptr %271, align 1, !tbaa !15
  %273 = and i32 16384, %272
  %274 = icmp eq i32 %273, 16384
  br i1 %274, label %275, label %295

275:                                              ; preds = %261
  call void @llvm.lifetime.start.p0(i64 4, ptr %52) #8
  store i32 80, ptr %52, align 4, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 4, ptr %53) #8
  store i32 128, ptr %53, align 4, !tbaa !14
  %276 = load ptr, ptr %6, align 8, !tbaa !5
  %277 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %46, i32 0, i32 0
  %278 = load i32, ptr %277, align 4, !tbaa !29
  %279 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %46, i32 0, i32 0
  %280 = load i32, ptr %279, align 4, !tbaa !29
  %281 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %46, i32 0, i32 23
  %282 = load i32, ptr %281, align 4, !tbaa !34
  call void @libxsmm_aarch64_instruction_alu_compute_shifted_reg(ptr noundef %276, i32 noundef 167772167, i32 noundef %278, i32 noundef %280, i32 noundef %282, i32 noundef 0, i32 noundef 0)
  %283 = load ptr, ptr %6, align 8, !tbaa !5
  %284 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %46, i32 0, i32 23
  %285 = load i32, ptr %284, align 4, !tbaa !34
  %286 = load i32, ptr %52, align 4, !tbaa !14
  %287 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %46, i32 0, i32 3
  %288 = load i32, ptr %287, align 4, !tbaa !31
  call void @libxsmm_aarch64_instruction_alu_move(ptr noundef %283, i32 noundef -1186988026, i32 noundef %285, i32 noundef 127, i32 noundef %286, i32 noundef %288)
  %289 = load ptr, ptr %6, align 8, !tbaa !5
  %290 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %46, i32 0, i32 23
  %291 = load i32, ptr %290, align 4, !tbaa !34
  %292 = load i32, ptr %53, align 4, !tbaa !14
  %293 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %46, i32 0, i32 5
  %294 = load i32, ptr %293, align 4, !tbaa !32
  call void @libxsmm_aarch64_instruction_alu_move(ptr noundef %289, i32 noundef -1186988026, i32 noundef %291, i32 noundef 127, i32 noundef %292, i32 noundef %294)
  call void @llvm.lifetime.end.p0(i64 4, ptr %53) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %52) #8
  br label %296

295:                                              ; preds = %261
  br label %296

296:                                              ; preds = %295, %275
  %297 = load ptr, ptr %6, align 8, !tbaa !5
  %298 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %46, i32 0, i32 22
  %299 = load i32, ptr %298, align 4, !tbaa !33
  call void @libxsmm_generator_set_p_register_aarch64_sve(ptr noundef %297, i32 noundef 0, i32 noundef -1, i32 noundef %299)
  %300 = load ptr, ptr %6, align 8, !tbaa !5
  %301 = load ptr, ptr %18, align 8, !tbaa !5
  %302 = load i32, ptr %13, align 4, !tbaa !14
  %303 = load i32, ptr %31, align 4, !tbaa !14
  %304 = mul i32 %302, %303
  %305 = call i32 @libxsmm_aarch64_instruction_add_data(ptr noundef %300, ptr noundef %301, i32 noundef %304, i32 noundef 16, i32 noundef 1, ptr noundef %44)
  store i32 %305, ptr %14, align 4, !tbaa !14
  %306 = load ptr, ptr %6, align 8, !tbaa !5
  %307 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %46, i32 0, i32 24
  %308 = load i32, ptr %307, align 4, !tbaa !35
  %309 = load i32, ptr %14, align 4, !tbaa !14
  call void @libxsmm_aarch64_instruction_adr_data(ptr noundef %306, i32 noundef %308, i32 noundef %309, ptr noundef %44)
  %310 = load i32, ptr %13, align 4, !tbaa !14
  %311 = load i32, ptr %21, align 4, !tbaa !14
  %312 = icmp ule i32 %310, %311
  br i1 %312, label %313, label %378

313:                                              ; preds = %296
  %314 = load i32, ptr %13, align 4, !tbaa !14
  %315 = load i32, ptr %31, align 4, !tbaa !14
  %316 = mul i32 %314, %315
  %317 = urem i32 %316, 16
  %318 = icmp ne i32 %317, 0
  br i1 %318, label %319, label %327

319:                                              ; preds = %313
  call void @llvm.lifetime.start.p0(i64 15, ptr %54) #8
  call void @llvm.memset.p0.i64(ptr align 1 %54, i8 0, i64 15, i1 false)
  %320 = load ptr, ptr %6, align 8, !tbaa !5
  %321 = getelementptr inbounds [15 x i8], ptr %54, i64 0, i64 0
  %322 = load i32, ptr %13, align 4, !tbaa !14
  %323 = load i32, ptr %31, align 4, !tbaa !14
  %324 = mul i32 %322, %323
  %325 = urem i32 %324, 16
  %326 = call i32 @libxsmm_aarch64_instruction_add_data(ptr noundef %320, ptr noundef %321, i32 noundef %325, i32 noundef 1, i32 noundef 1, ptr noundef %44)
  call void @llvm.lifetime.end.p0(i64 15, ptr %54) #8
  br label %327

327:                                              ; preds = %319, %313
  %328 = load i32, ptr %13, align 4, !tbaa !14
  %329 = load i32, ptr %36, align 4, !tbaa !14
  %330 = load i32, ptr %35, align 4, !tbaa !14
  %331 = mul i32 %329, %330
  %332 = icmp ugt i32 %328, %331
  br i1 %332, label %333, label %336

333:                                              ; preds = %327
  %334 = load i32, ptr %25, align 4, !tbaa !14
  %335 = add i32 %334, 1
  store i32 %335, ptr %25, align 4, !tbaa !14
  br label %336

336:                                              ; preds = %333, %327
  store i32 0, ptr %11, align 4, !tbaa !14
  br label %337

337:                                              ; preds = %360, %336
  br label %338

338:                                              ; preds = %337
  %339 = load ptr, ptr %6, align 8, !tbaa !5
  %340 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %46, i32 0, i32 24
  %341 = load i32, ptr %340, align 4, !tbaa !35
  %342 = load i32, ptr %25, align 4, !tbaa !14
  %343 = add i32 %342, 1
  store i32 %343, ptr %25, align 4, !tbaa !14
  call void @libxsmm_aarch64_instruction_sve_move(ptr noundef %339, i32 noundef -1518329722, i32 noundef %341, i32 noundef 0, i32 noundef 0, i32 noundef %342, i32 noundef 0)
  %344 = load i32, ptr %36, align 4, !tbaa !14
  %345 = load i32, ptr %11, align 4, !tbaa !14
  %346 = add i32 %345, %344
  store i32 %346, ptr %11, align 4, !tbaa !14
  %347 = load i32, ptr %11, align 4, !tbaa !14
  %348 = load i32, ptr %13, align 4, !tbaa !14
  %349 = icmp ult i32 %347, %348
  br i1 %349, label %350, label %359

350:                                              ; preds = %338
  %351 = load ptr, ptr %6, align 8, !tbaa !5
  %352 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %46, i32 0, i32 24
  %353 = load i32, ptr %352, align 4, !tbaa !35
  %354 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %46, i32 0, i32 24
  %355 = load i32, ptr %354, align 4, !tbaa !35
  %356 = load i32, ptr %36, align 4, !tbaa !14
  %357 = load i32, ptr %31, align 4, !tbaa !14
  %358 = mul i32 %356, %357
  call void @libxsmm_aarch64_instruction_alu_compute_imm12(ptr noundef %351, i32 noundef 285212678, i32 noundef %353, i32 noundef %355, i32 noundef %358, i8 noundef zeroext 0)
  br label %360

359:                                              ; preds = %338
  br label %361

360:                                              ; preds = %350
  br label %337

361:                                              ; preds = %359
  %362 = load i32, ptr %25, align 4, !tbaa !14
  %363 = add i32 %362, 1
  store i32 %363, ptr %25, align 4, !tbaa !14
  store i32 %362, ptr %24, align 4, !tbaa !14
  %364 = load i32, ptr %25, align 4, !tbaa !14
  store i32 %364, ptr %22, align 4, !tbaa !14
  store i32 35, ptr %23, align 4, !tbaa !14
  %365 = load i32, ptr %22, align 4, !tbaa !14
  %366 = sub i32 32, %365
  %367 = load i32, ptr %16, align 4, !tbaa !14
  %368 = udiv i32 %366, %367
  %369 = icmp ult i32 %368, 12
  br i1 %369, label %370, label %375

370:                                              ; preds = %361
  %371 = load i32, ptr %22, align 4, !tbaa !14
  %372 = sub i32 32, %371
  %373 = load i32, ptr %16, align 4, !tbaa !14
  %374 = udiv i32 %372, %373
  br label %376

375:                                              ; preds = %361
  br label %376

376:                                              ; preds = %375, %370
  %377 = phi i32 [ %374, %370 ], [ 12, %375 ]
  store i32 %377, ptr %15, align 4, !tbaa !14
  br label %423

378:                                              ; preds = %296
  store i32 4, ptr %15, align 4, !tbaa !14
  store i32 35, ptr %23, align 4, !tbaa !14
  %379 = load i32, ptr %15, align 4, !tbaa !14
  %380 = load i32, ptr %16, align 4, !tbaa !14
  %381 = mul i32 %379, %380
  %382 = sub i32 32, %381
  store i32 %382, ptr %22, align 4, !tbaa !14
  %383 = load i32, ptr %22, align 4, !tbaa !14
  %384 = sub i32 %383, 1
  store i32 %384, ptr %24, align 4, !tbaa !14
  %385 = load i32, ptr %24, align 4, !tbaa !14
  store i32 %385, ptr %29, align 4, !tbaa !14
  store i32 0, ptr %35, align 4, !tbaa !14
  %386 = load i32, ptr %23, align 4, !tbaa !14
  %387 = load i32, ptr %15, align 4, !tbaa !14
  %388 = add i32 %386, %387
  store i32 %388, ptr %38, align 4, !tbaa !14
  %389 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %46, i32 0, i32 22
  %390 = load i32, ptr %389, align 4, !tbaa !33
  %391 = load i32, ptr %38, align 4, !tbaa !14
  %392 = sub i32 %390, %391
  store i32 %392, ptr %37, align 4, !tbaa !14
  %393 = load ptr, ptr %6, align 8, !tbaa !5
  %394 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %46, i32 0, i32 24
  %395 = load i32, ptr %394, align 4, !tbaa !35
  %396 = load i32, ptr %38, align 4, !tbaa !14
  call void @libxsmm_generator_mov_aarch64(ptr noundef %393, i32 noundef %395, i32 noundef %396)
  store i32 1, ptr %11, align 4, !tbaa !14
  br label %397

397:                                              ; preds = %419, %378
  %398 = load i32, ptr %11, align 4, !tbaa !14
  %399 = load i32, ptr %37, align 4, !tbaa !14
  %400 = icmp ult i32 %398, %399
  br i1 %400, label %401, label %406

401:                                              ; preds = %397
  %402 = load i32, ptr %11, align 4, !tbaa !14
  %403 = mul i32 64, %402
  %404 = load i32, ptr %13, align 4, !tbaa !14
  %405 = icmp ult i32 %403, %404
  br label %406

406:                                              ; preds = %401, %397
  %407 = phi i1 [ false, %397 ], [ %405, %401 ]
  br i1 %407, label %408, label %422

408:                                              ; preds = %406
  %409 = load ptr, ptr %6, align 8, !tbaa !5
  %410 = load i32, ptr %38, align 4, !tbaa !14
  %411 = load i32, ptr %11, align 4, !tbaa !14
  %412 = add i32 %410, %411
  %413 = sub i32 %412, 1
  %414 = load i32, ptr %38, align 4, !tbaa !14
  %415 = load i32, ptr %11, align 4, !tbaa !14
  %416 = add i32 %414, %415
  %417 = load i32, ptr %31, align 4, !tbaa !14
  %418 = mul i32 64, %417
  call void @libxsmm_aarch64_instruction_alu_compute_imm12(ptr noundef %409, i32 noundef 285212678, i32 noundef %413, i32 noundef %416, i32 noundef %418, i8 noundef zeroext 0)
  br label %419

419:                                              ; preds = %408
  %420 = load i32, ptr %11, align 4, !tbaa !14
  %421 = add i32 %420, 1
  store i32 %421, ptr %11, align 4, !tbaa !14
  br label %397, !llvm.loop !36

422:                                              ; preds = %406
  br label %423

423:                                              ; preds = %422, %376
  %424 = load ptr, ptr %7, align 8, !tbaa !5
  %425 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %424, i32 0, i32 0
  %426 = load i32, ptr %425, align 1, !tbaa !9
  %427 = load i32, ptr %15, align 4, !tbaa !14
  %428 = load ptr, ptr %8, align 8, !tbaa !5
  %429 = load ptr, ptr %9, align 8, !tbaa !5
  %430 = load ptr, ptr %19, align 8, !tbaa !5
  %431 = load ptr, ptr %20, align 8, !tbaa !5
  %432 = load ptr, ptr %40, align 8, !tbaa !5
  call void @libxsmm_asparse_reg_sequence(i32 noundef %426, i32 noundef %427, ptr noundef %428, ptr noundef %429, ptr noundef %430, ptr noundef %431, i32 noundef 65536, ptr noundef %432, ptr noundef %41)
  %433 = load i32, ptr %41, align 4, !tbaa !14
  %434 = icmp eq i32 0, %433
  br i1 %434, label %435, label %444

435:                                              ; preds = %423
  %436 = load ptr, ptr %6, align 8, !tbaa !5
  %437 = load i32, ptr @libxsmm_ninit, align 4, !tbaa !14
  %438 = icmp ult i32 1, %437
  br i1 %438, label %439, label %441

439:                                              ; preds = %435
  %440 = load i32, ptr @libxsmm_verbosity, align 4, !tbaa !14
  br label %442

441:                                              ; preds = %435
  br label %442

442:                                              ; preds = %441, %439
  %443 = phi i32 [ %440, %439 ], [ 1, %441 ]
  call void @libxsmm_handle_error(ptr noundef %436, i32 noundef 90005, ptr noundef @__func__.libxsmm_generator_spgemm_csr_asparse_reg_aarch64_sve, ptr noundef @.str, i32 noundef 1534, i32 noundef %443)
  br label %902

444:                                              ; preds = %423
  %445 = load ptr, ptr %6, align 8, !tbaa !5
  %446 = load ptr, ptr %7, align 8, !tbaa !5
  %447 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %446, i32 0, i32 10
  %448 = load i64, ptr %447, align 1, !tbaa !37
  %449 = trunc i64 %448 to i32
  call void @libxsmm_generator_loop_header_aarch64(ptr noundef %445, ptr noundef %43, i32 noundef 32, i32 noundef %449)
  %450 = load ptr, ptr %6, align 8, !tbaa !5
  %451 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %46, i32 0, i32 3
  %452 = load i32, ptr %451, align 4, !tbaa !31
  %453 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %46, i32 0, i32 23
  %454 = load i32, ptr %453, align 4, !tbaa !34
  call void @libxsmm_generator_mov_aarch64(ptr noundef %450, i32 noundef %452, i32 noundef %454)
  store i32 0, ptr %42, align 4, !tbaa !14
  br label %455

455:                                              ; preds = %803, %444
  %456 = load i32, ptr %42, align 4, !tbaa !14
  %457 = load i32, ptr %41, align 4, !tbaa !14
  %458 = icmp ult i32 %456, %457
  br i1 %458, label %459, label %806

459:                                              ; preds = %455
  call void @llvm.lifetime.start.p0(i64 116, ptr %55) #8
  %460 = load ptr, ptr %40, align 8, !tbaa !5
  %461 = load i32, ptr %42, align 4, !tbaa !14
  %462 = zext i32 %461 to i64
  %463 = getelementptr inbounds %struct.libxsmm_asparse_reg_op, ptr %460, i64 %462
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %55, ptr align 4 %463, i64 116, i1 false), !tbaa.struct !38
  call void @llvm.lifetime.start.p0(i64 4, ptr %56) #8
  %464 = load i32, ptr %24, align 4, !tbaa !14
  store i32 %464, ptr %56, align 4, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 4, ptr %57) #8
  %465 = getelementptr inbounds %struct.libxsmm_asparse_reg_op, ptr %55, i32 0, i32 0
  %466 = load i32, ptr %465, align 4, !tbaa !41
  %467 = load ptr, ptr %7, align 8, !tbaa !5
  %468 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %467, i32 0, i32 4
  %469 = load i32, ptr %468, align 1, !tbaa !43
  %470 = mul i32 %466, %469
  %471 = load i32, ptr %31, align 4, !tbaa !14
  %472 = mul i32 %470, %471
  store i32 %472, ptr %57, align 4, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 4, ptr %58) #8
  %473 = load i32, ptr %57, align 4, !tbaa !14
  %474 = load i32, ptr %26, align 4, !tbaa !14
  %475 = icmp sgt i32 %473, %474
  %476 = zext i1 %475 to i64
  %477 = select i1 %475, i32 4096, i32 4097
  store i32 %477, ptr %58, align 4, !tbaa !14
  %478 = load ptr, ptr %6, align 8, !tbaa !5
  %479 = load i32, ptr %58, align 4, !tbaa !14
  %480 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %46, i32 0, i32 23
  %481 = load i32, ptr %480, align 4, !tbaa !34
  %482 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %46, i32 0, i32 22
  %483 = load i32, ptr %482, align 4, !tbaa !33
  %484 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %46, i32 0, i32 23
  %485 = load i32, ptr %484, align 4, !tbaa !34
  %486 = load i32, ptr %57, align 4, !tbaa !14
  %487 = load i32, ptr %26, align 4, !tbaa !14
  %488 = icmp slt i32 %486, %487
  br i1 %488, label %489, label %493

489:                                              ; preds = %459
  %490 = load i32, ptr %26, align 4, !tbaa !14
  %491 = load i32, ptr %57, align 4, !tbaa !14
  %492 = sub nsw i32 %490, %491
  br label %497

493:                                              ; preds = %459
  %494 = load i32, ptr %57, align 4, !tbaa !14
  %495 = load i32, ptr %26, align 4, !tbaa !14
  %496 = sub nsw i32 %494, %495
  br label %497

497:                                              ; preds = %493, %489
  %498 = phi i32 [ %492, %489 ], [ %496, %493 ]
  %499 = sext i32 %498 to i64
  call void @libxsmm_aarch64_instruction_alu_compute_imm64(ptr noundef %478, i32 noundef %479, i32 noundef %481, i32 noundef %483, i32 noundef %485, i64 noundef %499)
  %500 = load i32, ptr %57, align 4, !tbaa !14
  store i32 %500, ptr %26, align 4, !tbaa !14
  store i32 0, ptr %11, align 4, !tbaa !14
  br label %501

501:                                              ; preds = %799, %497
  %502 = load i32, ptr %11, align 4, !tbaa !14
  %503 = load i32, ptr %16, align 4, !tbaa !14
  %504 = icmp ult i32 %502, %503
  br i1 %504, label %505, label %802

505:                                              ; preds = %501
  %506 = load i32, ptr %27, align 4, !tbaa !14
  %507 = load i32, ptr %57, align 4, !tbaa !14
  %508 = load i32, ptr %11, align 4, !tbaa !14
  %509 = load i32, ptr %33, align 4, !tbaa !14
  %510 = mul i32 %508, %509
  %511 = add nsw i32 %507, %510
  %512 = icmp ne i32 %506, %511
  br i1 %512, label %513, label %528

513:                                              ; preds = %505
  %514 = load ptr, ptr %6, align 8, !tbaa !5
  %515 = load i32, ptr %30, align 4, !tbaa !14
  %516 = zext i32 %515 to i64
  %517 = getelementptr inbounds [2 x i32], ptr %48, i64 0, i64 %516
  %518 = load i32, ptr %517, align 4, !tbaa !14
  %519 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %46, i32 0, i32 23
  %520 = load i32, ptr %519, align 4, !tbaa !34
  %521 = load i32, ptr %11, align 4, !tbaa !14
  %522 = load i32, ptr %56, align 4, !tbaa !14
  call void @libxsmm_aarch64_instruction_sve_move(ptr noundef %514, i32 noundef %518, i32 noundef %520, i32 noundef 0, i32 noundef %521, i32 noundef %522, i32 noundef 0)
  %523 = load i32, ptr %57, align 4, !tbaa !14
  %524 = load i32, ptr %11, align 4, !tbaa !14
  %525 = load i32, ptr %33, align 4, !tbaa !14
  %526 = mul i32 %524, %525
  %527 = add i32 %523, %526
  store i32 %527, ptr %27, align 4, !tbaa !14
  br label %528

528:                                              ; preds = %513, %505
  store i32 0, ptr %12, align 4, !tbaa !14
  br label %529

529:                                              ; preds = %795, %528
  %530 = load i32, ptr %12, align 4, !tbaa !14
  %531 = getelementptr inbounds %struct.libxsmm_asparse_reg_op, ptr %55, i32 0, i32 2
  %532 = load i16, ptr %531, align 4, !tbaa !44
  %533 = zext i16 %532 to i32
  %534 = icmp ult i32 %530, %533
  br i1 %534, label %535, label %798

535:                                              ; preds = %529
  call void @llvm.lifetime.start.p0(i64 4, ptr %59) #8
  %536 = getelementptr inbounds %struct.libxsmm_asparse_reg_op, ptr %55, i32 0, i32 3
  %537 = load i32, ptr %12, align 4, !tbaa !14
  %538 = zext i32 %537 to i64
  %539 = getelementptr inbounds [12 x i16], ptr %536, i64 0, i64 %538
  %540 = load i16, ptr %539, align 2, !tbaa !40
  %541 = zext i16 %540 to i32
  store i32 %541, ptr %59, align 4, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 4, ptr %60) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %61) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr %62) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %63) #8
  %542 = load i32, ptr %23, align 4, !tbaa !14
  %543 = getelementptr inbounds %struct.libxsmm_asparse_reg_op, ptr %55, i32 0, i32 5
  %544 = load i32, ptr %12, align 4, !tbaa !14
  %545 = zext i32 %544 to i64
  %546 = getelementptr inbounds [12 x i8], ptr %543, i64 0, i64 %545
  %547 = load i8, ptr %546, align 1, !tbaa !39
  %548 = zext i8 %547 to i32
  %549 = add i32 %542, %548
  store i32 %549, ptr %63, align 4, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 4, ptr %64) #8
  %550 = load i32, ptr %22, align 4, !tbaa !14
  %551 = load i32, ptr %16, align 4, !tbaa !14
  %552 = getelementptr inbounds %struct.libxsmm_asparse_reg_op, ptr %55, i32 0, i32 5
  %553 = load i32, ptr %12, align 4, !tbaa !14
  %554 = zext i32 %553 to i64
  %555 = getelementptr inbounds [12 x i8], ptr %552, i64 0, i64 %554
  %556 = load i8, ptr %555, align 1, !tbaa !39
  %557 = zext i8 %556 to i32
  %558 = mul i32 %551, %557
  %559 = add i32 %550, %558
  store i32 %559, ptr %64, align 4, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 4, ptr %65) #8
  %560 = getelementptr inbounds %struct.libxsmm_asparse_reg_op, ptr %55, i32 0, i32 1
  %561 = load i32, ptr %12, align 4, !tbaa !14
  %562 = zext i32 %561 to i64
  %563 = getelementptr inbounds [12 x i32], ptr %560, i64 0, i64 %562
  %564 = load i32, ptr %563, align 4, !tbaa !14
  %565 = load ptr, ptr %7, align 8, !tbaa !5
  %566 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %565, i32 0, i32 5
  %567 = load i32, ptr %566, align 1, !tbaa !21
  %568 = mul i32 %564, %567
  %569 = load i32, ptr %31, align 4, !tbaa !14
  %570 = mul i32 %568, %569
  store i32 %570, ptr %65, align 4, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 4, ptr %66) #8
  store i32 0, ptr %66, align 4, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 4, ptr %67) #8
  %571 = load i32, ptr %13, align 4, !tbaa !14
  %572 = load i32, ptr %21, align 4, !tbaa !14
  %573 = icmp ule i32 %571, %572
  br i1 %573, label %574, label %616

574:                                              ; preds = %535
  %575 = getelementptr inbounds %struct.libxsmm_asparse_reg_op, ptr %55, i32 0, i32 4
  %576 = load i32, ptr %12, align 4, !tbaa !14
  %577 = zext i32 %576 to i64
  %578 = getelementptr inbounds [12 x i8], ptr %575, i64 0, i64 %577
  %579 = load i8, ptr %578, align 1, !tbaa !39
  %580 = sext i8 %579 to i32
  %581 = icmp eq i32 %580, 1
  %582 = zext i1 %581 to i64
  %583 = select i1 %581, i32 1679818819, i32 1679819843
  store i32 %583, ptr %67, align 4, !tbaa !14
  %584 = load i32, ptr %59, align 4, !tbaa !14
  %585 = load i32, ptr %36, align 4, !tbaa !14
  %586 = udiv i32 %584, %585
  store i32 %586, ptr %61, align 4, !tbaa !14
  %587 = load i32, ptr %59, align 4, !tbaa !14
  %588 = load i32, ptr %36, align 4, !tbaa !14
  %589 = urem i32 %587, %588
  %590 = trunc i32 %589 to i8
  store i8 %590, ptr %62, align 1, !tbaa !39
  %591 = load i32, ptr %13, align 4, !tbaa !14
  %592 = load i32, ptr %36, align 4, !tbaa !14
  %593 = load i32, ptr %35, align 4, !tbaa !14
  %594 = mul i32 %592, %593
  %595 = icmp ugt i32 %591, %594
  br i1 %595, label %596, label %615

596:                                              ; preds = %574
  %597 = load i32, ptr %61, align 4, !tbaa !14
  %598 = add i32 %597, 1
  store i32 %598, ptr %61, align 4, !tbaa !14
  %599 = load i32, ptr %61, align 4, !tbaa !14
  %600 = load i32, ptr %35, align 4, !tbaa !14
  %601 = icmp uge i32 %599, %600
  br i1 %601, label %602, label %614

602:                                              ; preds = %596
  %603 = getelementptr inbounds [30 x i32], ptr %28, i64 0, i64 0
  %604 = load i32, ptr %603, align 16, !tbaa !14
  %605 = load i32, ptr %61, align 4, !tbaa !14
  %606 = icmp ne i32 %604, %605
  br i1 %606, label %607, label %613

607:                                              ; preds = %602
  %608 = load ptr, ptr %6, align 8, !tbaa !5
  %609 = load i32, ptr %61, align 4, !tbaa !14
  %610 = load i32, ptr %61, align 4, !tbaa !14
  call void @libxsmm_aarch64_instruction_sve_compute(ptr noundef %608, i32 noundef 73412611, i32 noundef %609, i32 noundef %610, i8 noundef zeroext 0, i32 noundef 0, i32 noundef 127, i32 noundef 3)
  %611 = load i32, ptr %61, align 4, !tbaa !14
  %612 = getelementptr inbounds [30 x i32], ptr %28, i64 0, i64 0
  store i32 %611, ptr %612, align 16, !tbaa !14
  br label %613

613:                                              ; preds = %607, %602
  store i32 0, ptr %61, align 4, !tbaa !14
  br label %614

614:                                              ; preds = %613, %596
  br label %615

615:                                              ; preds = %614, %574
  br label %700

616:                                              ; preds = %535
  %617 = getelementptr inbounds %struct.libxsmm_asparse_reg_op, ptr %55, i32 0, i32 4
  %618 = load i32, ptr %12, align 4, !tbaa !14
  %619 = zext i32 %618 to i64
  %620 = getelementptr inbounds [12 x i8], ptr %617, i64 0, i64 %619
  %621 = load i8, ptr %620, align 1, !tbaa !39
  %622 = sext i8 %621 to i32
  %623 = icmp eq i32 %622, 1
  %624 = zext i1 %623 to i64
  %625 = select i1 %623, i32 1696596099, i32 1696604291
  store i32 %625, ptr %67, align 4, !tbaa !14
  store i8 0, ptr %62, align 1, !tbaa !39
  store i32 0, ptr %60, align 4, !tbaa !14
  store i32 -1, ptr %61, align 4, !tbaa !14
  br label %626

626:                                              ; preds = %640, %616
  %627 = load i32, ptr %60, align 4, !tbaa !14
  %628 = load i32, ptr %29, align 4, !tbaa !14
  %629 = icmp ult i32 %627, %628
  br i1 %629, label %630, label %643

630:                                              ; preds = %626
  %631 = load i32, ptr %60, align 4, !tbaa !14
  %632 = zext i32 %631 to i64
  %633 = getelementptr inbounds [30 x i32], ptr %28, i64 0, i64 %632
  %634 = load i32, ptr %633, align 4, !tbaa !14
  %635 = load i32, ptr %59, align 4, !tbaa !14
  %636 = icmp eq i32 %634, %635
  br i1 %636, label %637, label %639

637:                                              ; preds = %630
  %638 = load i32, ptr %60, align 4, !tbaa !14
  store i32 %638, ptr %61, align 4, !tbaa !14
  br label %643

639:                                              ; preds = %630
  br label %640

640:                                              ; preds = %639
  %641 = load i32, ptr %60, align 4, !tbaa !14
  %642 = add i32 %641, 1
  store i32 %642, ptr %60, align 4, !tbaa !14
  br label %626, !llvm.loop !45

643:                                              ; preds = %637, %626
  %644 = load i32, ptr %61, align 4, !tbaa !14
  %645 = icmp eq i32 -1, %644
  br i1 %645, label %646, label %699

646:                                              ; preds = %643
  call void @llvm.lifetime.start.p0(i64 4, ptr %68) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %69) #8
  %647 = getelementptr inbounds [30 x i32], ptr %28, i64 0, i64 0
  %648 = load i32, ptr %29, align 4, !tbaa !14
  %649 = load ptr, ptr %40, align 8, !tbaa !5
  %650 = load i32, ptr %42, align 4, !tbaa !14
  %651 = zext i32 %650 to i64
  %652 = getelementptr inbounds %struct.libxsmm_asparse_reg_op, ptr %649, i64 %651
  %653 = getelementptr inbounds %struct.libxsmm_asparse_reg_op, ptr %652, i64 1
  %654 = load i32, ptr %41, align 4, !tbaa !14
  %655 = load i32, ptr %42, align 4, !tbaa !14
  %656 = sub i32 %654, %655
  %657 = sub i32 %656, 1
  %658 = call i32 @libxsmm_asparse_reg_pick_bcast_reg(ptr noundef %647, i32 noundef %648, ptr noundef %653, i32 noundef %657)
  store i32 %658, ptr %61, align 4, !tbaa !14
  %659 = load i32, ptr %59, align 4, !tbaa !14
  %660 = load i32, ptr %37, align 4, !tbaa !14
  %661 = mul i32 64, %660
  %662 = icmp ult i32 %659, %661
  br i1 %662, label %663, label %672

663:                                              ; preds = %646
  %664 = load i32, ptr %38, align 4, !tbaa !14
  %665 = load i32, ptr %59, align 4, !tbaa !14
  %666 = udiv i32 %665, 64
  %667 = add i32 %664, %666
  store i32 %667, ptr %68, align 4, !tbaa !14
  %668 = load i32, ptr %31, align 4, !tbaa !14
  %669 = load i32, ptr %59, align 4, !tbaa !14
  %670 = urem i32 %669, 64
  %671 = mul i32 %668, %670
  store i32 %671, ptr %69, align 4, !tbaa !14
  br label %686

672:                                              ; preds = %646
  %673 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %46, i32 0, i32 24
  %674 = load i32, ptr %673, align 4, !tbaa !35
  store i32 %674, ptr %68, align 4, !tbaa !14
  store i32 0, ptr %69, align 4, !tbaa !14
  %675 = load ptr, ptr %6, align 8, !tbaa !5
  %676 = load i32, ptr %38, align 4, !tbaa !14
  %677 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %46, i32 0, i32 22
  %678 = load i32, ptr %677, align 4, !tbaa !33
  %679 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %46, i32 0, i32 24
  %680 = load i32, ptr %679, align 4, !tbaa !35
  %681 = load i32, ptr %59, align 4, !tbaa !14
  %682 = zext i32 %681 to i64
  %683 = load i32, ptr %31, align 4, !tbaa !14
  %684 = zext i32 %683 to i64
  %685 = mul i64 %682, %684
  call void @libxsmm_aarch64_instruction_alu_compute_imm64(ptr noundef %675, i32 noundef 4096, i32 noundef %676, i32 noundef %678, i32 noundef %680, i64 noundef %685)
  br label %686

686:                                              ; preds = %672, %663
  %687 = load ptr, ptr %6, align 8, !tbaa !5
  %688 = load i32, ptr %30, align 4, !tbaa !14
  %689 = zext i32 %688 to i64
  %690 = getelementptr inbounds [2 x i32], ptr %49, i64 0, i64 %689
  %691 = load i32, ptr %690, align 4, !tbaa !14
  %692 = load i32, ptr %68, align 4, !tbaa !14
  %693 = load i32, ptr %69, align 4, !tbaa !14
  %694 = load i32, ptr %61, align 4, !tbaa !14
  call void @libxsmm_aarch64_instruction_sve_move(ptr noundef %687, i32 noundef %691, i32 noundef %692, i32 noundef 0, i32 noundef %693, i32 noundef %694, i32 noundef 0)
  %695 = load i32, ptr %59, align 4, !tbaa !14
  %696 = load i32, ptr %61, align 4, !tbaa !14
  %697 = zext i32 %696 to i64
  %698 = getelementptr inbounds [30 x i32], ptr %28, i64 0, i64 %697
  store i32 %695, ptr %698, align 4, !tbaa !14
  call void @llvm.lifetime.end.p0(i64 4, ptr %69) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %68) #8
  br label %699

699:                                              ; preds = %686, %643
  br label %700

700:                                              ; preds = %699, %615
  %701 = getelementptr inbounds %struct.libxsmm_asparse_reg_op, ptr %55, i32 0, i32 6
  %702 = load i32, ptr %12, align 4, !tbaa !14
  %703 = zext i32 %702 to i64
  %704 = getelementptr inbounds [12 x i8], ptr %701, i64 0, i64 %703
  %705 = load i8, ptr %704, align 1, !tbaa !39
  %706 = zext i8 %705 to i32
  %707 = and i32 1, %706
  %708 = icmp ne i32 %707, 0
  br i1 %708, label %709, label %750

709:                                              ; preds = %700
  %710 = load i32, ptr %11, align 4, !tbaa !14
  %711 = icmp eq i32 0, %710
  br i1 %711, label %712, label %721

712:                                              ; preds = %709
  %713 = load ptr, ptr %6, align 8, !tbaa !5
  %714 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %46, i32 0, i32 5
  %715 = load i32, ptr %714, align 4, !tbaa !32
  %716 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %46, i32 0, i32 22
  %717 = load i32, ptr %716, align 4, !tbaa !33
  %718 = load i32, ptr %63, align 4, !tbaa !14
  %719 = load i32, ptr %65, align 4, !tbaa !14
  %720 = zext i32 %719 to i64
  call void @libxsmm_aarch64_instruction_alu_compute_imm64(ptr noundef %713, i32 noundef 4096, i32 noundef %715, i32 noundef %717, i32 noundef %718, i64 noundef %720)
  br label %721

721:                                              ; preds = %712, %709
  %722 = load i32, ptr %39, align 4, !tbaa !14
  %723 = icmp ne i32 %722, 0
  br i1 %723, label %724, label %738

724:                                              ; preds = %721
  %725 = load i32, ptr %61, align 4, !tbaa !14
  %726 = load i32, ptr %35, align 4, !tbaa !14
  %727 = icmp ult i32 %725, %726
  %728 = zext i1 %727 to i64
  %729 = select i1 %727, i32 1679827011, i32 1694500867
  store i32 %729, ptr %67, align 4, !tbaa !14
  %730 = getelementptr inbounds %struct.libxsmm_asparse_reg_op, ptr %55, i32 0, i32 4
  %731 = load i32, ptr %12, align 4, !tbaa !14
  %732 = zext i32 %731 to i64
  %733 = getelementptr inbounds [12 x i8], ptr %730, i64 0, i64 %732
  %734 = load i8, ptr %733, align 1, !tbaa !39
  %735 = sext i8 %734 to i32
  %736 = icmp eq i32 %735, -1
  %737 = zext i1 %736 to i32
  store i32 %737, ptr %66, align 4, !tbaa !14
  br label %749

738:                                              ; preds = %721
  %739 = load ptr, ptr %6, align 8, !tbaa !5
  %740 = load i32, ptr %30, align 4, !tbaa !14
  %741 = zext i32 %740 to i64
  %742 = getelementptr inbounds [2 x i32], ptr %48, i64 0, i64 %741
  %743 = load i32, ptr %742, align 4, !tbaa !14
  %744 = load i32, ptr %63, align 4, !tbaa !14
  %745 = load i32, ptr %11, align 4, !tbaa !14
  %746 = load i32, ptr %64, align 4, !tbaa !14
  %747 = load i32, ptr %11, align 4, !tbaa !14
  %748 = add i32 %746, %747
  call void @libxsmm_aarch64_instruction_sve_move(ptr noundef %739, i32 noundef %743, i32 noundef %744, i32 noundef 0, i32 noundef %745, i32 noundef %748, i32 noundef 0)
  br label %749

749:                                              ; preds = %738, %724
  br label %750

750:                                              ; preds = %749, %700
  %751 = load ptr, ptr %6, align 8, !tbaa !5
  %752 = load i32, ptr %67, align 4, !tbaa !14
  %753 = load i32, ptr %56, align 4, !tbaa !14
  %754 = load i32, ptr %61, align 4, !tbaa !14
  %755 = load i8, ptr %62, align 1, !tbaa !39
  %756 = load i32, ptr %64, align 4, !tbaa !14
  %757 = load i32, ptr %11, align 4, !tbaa !14
  %758 = add i32 %756, %757
  %759 = load i32, ptr %47, align 4, !tbaa !14
  call void @libxsmm_aarch64_instruction_sve_compute(ptr noundef %751, i32 noundef %752, i32 noundef %753, i32 noundef %754, i8 noundef zeroext %755, i32 noundef %758, i32 noundef 0, i32 noundef %759)
  %760 = load i32, ptr %66, align 4, !tbaa !14
  %761 = icmp ne i32 %760, 0
  br i1 %761, label %762, label %771

762:                                              ; preds = %750
  %763 = load ptr, ptr %6, align 8, !tbaa !5
  %764 = load i32, ptr %64, align 4, !tbaa !14
  %765 = load i32, ptr %11, align 4, !tbaa !14
  %766 = add i32 %764, %765
  %767 = load i32, ptr %64, align 4, !tbaa !14
  %768 = load i32, ptr %11, align 4, !tbaa !14
  %769 = add i32 %767, %768
  %770 = load i32, ptr %47, align 4, !tbaa !14
  call void @libxsmm_aarch64_instruction_sve_compute(ptr noundef %763, i32 noundef 69050498, i32 noundef %766, i32 noundef 0, i8 noundef zeroext 0, i32 noundef %769, i32 noundef 0, i32 noundef %770)
  br label %771

771:                                              ; preds = %762, %750
  %772 = getelementptr inbounds %struct.libxsmm_asparse_reg_op, ptr %55, i32 0, i32 6
  %773 = load i32, ptr %12, align 4, !tbaa !14
  %774 = zext i32 %773 to i64
  %775 = getelementptr inbounds [12 x i8], ptr %772, i64 0, i64 %774
  %776 = load i8, ptr %775, align 1, !tbaa !39
  %777 = zext i8 %776 to i32
  %778 = and i32 2, %777
  %779 = icmp ne i32 %778, 0
  br i1 %779, label %780, label %794

780:                                              ; preds = %771
  %781 = load ptr, ptr %6, align 8, !tbaa !5
  %782 = load i32, ptr %30, align 4, !tbaa !14
  %783 = zext i32 %782 to i64
  %784 = getelementptr inbounds [2 x [2 x i32]], ptr %50, i64 0, i64 %783
  %785 = load i32, ptr %34, align 4, !tbaa !14
  %786 = zext i32 %785 to i64
  %787 = getelementptr inbounds [2 x i32], ptr %784, i64 0, i64 %786
  %788 = load i32, ptr %787, align 4, !tbaa !14
  %789 = load i32, ptr %63, align 4, !tbaa !14
  %790 = load i32, ptr %11, align 4, !tbaa !14
  %791 = load i32, ptr %64, align 4, !tbaa !14
  %792 = load i32, ptr %11, align 4, !tbaa !14
  %793 = add i32 %791, %792
  call void @libxsmm_aarch64_instruction_sve_move(ptr noundef %781, i32 noundef %788, i32 noundef %789, i32 noundef 0, i32 noundef %790, i32 noundef %793, i32 noundef 0)
  br label %794

794:                                              ; preds = %780, %771
  call void @llvm.lifetime.end.p0(i64 4, ptr %67) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %66) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %65) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %64) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %63) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %62) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %61) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %60) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %59) #8
  br label %795

795:                                              ; preds = %794
  %796 = load i32, ptr %12, align 4, !tbaa !14
  %797 = add i32 %796, 1
  store i32 %797, ptr %12, align 4, !tbaa !14
  br label %529, !llvm.loop !46

798:                                              ; preds = %529
  br label %799

799:                                              ; preds = %798
  %800 = load i32, ptr %11, align 4, !tbaa !14
  %801 = add i32 %800, 1
  store i32 %801, ptr %11, align 4, !tbaa !14
  br label %501, !llvm.loop !47

802:                                              ; preds = %501
  call void @llvm.lifetime.end.p0(i64 4, ptr %58) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %57) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %56) #8
  call void @llvm.lifetime.end.p0(i64 116, ptr %55) #8
  br label %803

803:                                              ; preds = %802
  %804 = load i32, ptr %42, align 4, !tbaa !14
  %805 = add i32 %804, 1
  store i32 %805, ptr %42, align 4, !tbaa !14
  br label %455, !llvm.loop !48

806:                                              ; preds = %455
  %807 = load i32, ptr %39, align 4, !tbaa !14
  %808 = icmp ne i32 %807, 0
  br i1 %808, label %809, label %879

809:                                              ; preds = %806
  call void @llvm.lifetime.start.p0(i64 4, ptr %70) #8
  store i32 0, ptr %70, align 4, !tbaa !14
  store i32 0, ptr %12, align 4, !tbaa !14
  br label %810

810:                                              ; preds = %875, %809
  %811 = load i32, ptr %12, align 4, !tbaa !14
  %812 = load ptr, ptr %7, align 8, !tbaa !5
  %813 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %812, i32 0, i32 0
  %814 = load i32, ptr %813, align 1, !tbaa !9
  %815 = icmp ult i32 %811, %814
  br i1 %815, label %816, label %878

816:                                              ; preds = %810
  %817 = load ptr, ptr %8, align 8, !tbaa !5
  %818 = load i32, ptr %12, align 4, !tbaa !14
  %819 = add i32 %818, 1
  %820 = zext i32 %819 to i64
  %821 = getelementptr inbounds i32, ptr %817, i64 %820
  %822 = load i32, ptr %821, align 4, !tbaa !14
  %823 = load ptr, ptr %8, align 8, !tbaa !5
  %824 = load i32, ptr %12, align 4, !tbaa !14
  %825 = zext i32 %824 to i64
  %826 = getelementptr inbounds i32, ptr %823, i64 %825
  %827 = load i32, ptr %826, align 4, !tbaa !14
  %828 = icmp eq i32 %822, %827
  br i1 %828, label %829, label %874

829:                                              ; preds = %816
  %830 = load i32, ptr %70, align 4, !tbaa !14
  %831 = icmp ne i32 %830, 0
  br i1 %831, label %837, label %832

832:                                              ; preds = %829
  %833 = load ptr, ptr %6, align 8, !tbaa !5
  %834 = load i32, ptr %22, align 4, !tbaa !14
  %835 = load i32, ptr %22, align 4, !tbaa !14
  %836 = load i32, ptr %22, align 4, !tbaa !14
  call void @libxsmm_aarch64_instruction_sve_compute(ptr noundef %833, i32 noundef 77606915, i32 noundef %834, i32 noundef %835, i8 noundef zeroext 0, i32 noundef %836, i32 noundef 0, i32 noundef 0)
  store i32 1, ptr %70, align 4, !tbaa !14
  br label %837

837:                                              ; preds = %832, %829
  %838 = load ptr, ptr %6, align 8, !tbaa !5
  %839 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %46, i32 0, i32 5
  %840 = load i32, ptr %839, align 4, !tbaa !32
  %841 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %46, i32 0, i32 22
  %842 = load i32, ptr %841, align 4, !tbaa !33
  %843 = load i32, ptr %23, align 4, !tbaa !14
  %844 = load i32, ptr %12, align 4, !tbaa !14
  %845 = zext i32 %844 to i64
  %846 = load ptr, ptr %7, align 8, !tbaa !5
  %847 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %846, i32 0, i32 5
  %848 = load i32, ptr %847, align 1, !tbaa !21
  %849 = zext i32 %848 to i64
  %850 = mul i64 %845, %849
  %851 = load i32, ptr %31, align 4, !tbaa !14
  %852 = zext i32 %851 to i64
  %853 = mul i64 %850, %852
  call void @libxsmm_aarch64_instruction_alu_compute_imm64(ptr noundef %838, i32 noundef 4096, i32 noundef %840, i32 noundef %842, i32 noundef %843, i64 noundef %853)
  store i32 0, ptr %11, align 4, !tbaa !14
  br label %854

854:                                              ; preds = %870, %837
  %855 = load i32, ptr %11, align 4, !tbaa !14
  %856 = load i32, ptr %16, align 4, !tbaa !14
  %857 = icmp ult i32 %855, %856
  br i1 %857, label %858, label %873

858:                                              ; preds = %854
  %859 = load ptr, ptr %6, align 8, !tbaa !5
  %860 = load i32, ptr %30, align 4, !tbaa !14
  %861 = zext i32 %860 to i64
  %862 = getelementptr inbounds [2 x [2 x i32]], ptr %50, i64 0, i64 %861
  %863 = load i32, ptr %34, align 4, !tbaa !14
  %864 = zext i32 %863 to i64
  %865 = getelementptr inbounds [2 x i32], ptr %862, i64 0, i64 %864
  %866 = load i32, ptr %865, align 4, !tbaa !14
  %867 = load i32, ptr %23, align 4, !tbaa !14
  %868 = load i32, ptr %11, align 4, !tbaa !14
  %869 = load i32, ptr %22, align 4, !tbaa !14
  call void @libxsmm_aarch64_instruction_sve_move(ptr noundef %859, i32 noundef %866, i32 noundef %867, i32 noundef 0, i32 noundef %868, i32 noundef %869, i32 noundef 0)
  br label %870

870:                                              ; preds = %858
  %871 = load i32, ptr %11, align 4, !tbaa !14
  %872 = add i32 %871, 1
  store i32 %872, ptr %11, align 4, !tbaa !14
  br label %854, !llvm.loop !49

873:                                              ; preds = %854
  br label %874

874:                                              ; preds = %873, %816
  br label %875

875:                                              ; preds = %874
  %876 = load i32, ptr %12, align 4, !tbaa !14
  %877 = add i32 %876, 1
  store i32 %877, ptr %12, align 4, !tbaa !14
  br label %810, !llvm.loop !50

878:                                              ; preds = %810
  call void @llvm.lifetime.end.p0(i64 4, ptr %70) #8
  br label %879

879:                                              ; preds = %878, %806
  %880 = load ptr, ptr %6, align 8, !tbaa !5
  %881 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %46, i32 0, i32 3
  %882 = load i32, ptr %881, align 4, !tbaa !31
  %883 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %46, i32 0, i32 3
  %884 = load i32, ptr %883, align 4, !tbaa !31
  %885 = load i32, ptr %33, align 4, !tbaa !14
  %886 = load i32, ptr %16, align 4, !tbaa !14
  %887 = mul i32 %885, %886
  call void @libxsmm_aarch64_instruction_alu_compute_imm12(ptr noundef %880, i32 noundef 285212678, i32 noundef %882, i32 noundef %884, i32 noundef %887, i8 noundef zeroext 0)
  %888 = load ptr, ptr %6, align 8, !tbaa !5
  %889 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %46, i32 0, i32 5
  %890 = load i32, ptr %889, align 4, !tbaa !32
  %891 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %46, i32 0, i32 5
  %892 = load i32, ptr %891, align 4, !tbaa !32
  %893 = load i32, ptr %33, align 4, !tbaa !14
  %894 = load i32, ptr %16, align 4, !tbaa !14
  %895 = mul i32 %893, %894
  call void @libxsmm_aarch64_instruction_alu_compute_imm12(ptr noundef %888, i32 noundef 285212678, i32 noundef %890, i32 noundef %892, i32 noundef %895, i8 noundef zeroext 0)
  %896 = load ptr, ptr %6, align 8, !tbaa !5
  %897 = load i32, ptr %32, align 4, !tbaa !14
  %898 = load i32, ptr %16, align 4, !tbaa !14
  %899 = mul i32 %897, %898
  call void @libxsmm_generator_loop_footer_aarch64(ptr noundef %896, ptr noundef %43, i32 noundef 32, i32 noundef %899)
  %900 = load ptr, ptr %6, align 8, !tbaa !5
  call void @libxsmm_aarch64_instruction_close_stream(ptr noundef %900, i16 noundef zeroext 4095)
  %901 = load ptr, ptr %6, align 8, !tbaa !5
  call void @libxsmm_aarch64_instruction_close_data(ptr noundef %901, ptr noundef %44)
  br label %902

902:                                              ; preds = %879, %442, %236, %202, %145
  %903 = load ptr, ptr %18, align 8, !tbaa !5
  call void @free(ptr noundef %903) #8
  %904 = load ptr, ptr %19, align 8, !tbaa !5
  call void @free(ptr noundef %904) #8
  %905 = load ptr, ptr %20, align 8, !tbaa !5
  call void @free(ptr noundef %905) #8
  %906 = load ptr, ptr %40, align 8, !tbaa !5
  call void @free(ptr noundef %906) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr %50) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %47) #8
  call void @llvm.lifetime.end.p0(i64 132, ptr %46) #8
  call void @llvm.lifetime.end.p0(i64 688, ptr %45) #8
  call void @llvm.lifetime.end.p0(i64 82440, ptr %44) #8
  call void @llvm.lifetime.end.p0(i64 2052, ptr %43) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #8
  call void @llvm.lifetime.end.p0(i64 120, ptr %28) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #8
  ret void
}

declare void @libxsmm_generator_gemm_init_micro_kernel_config_aarch64(ptr noundef, i32 noundef, ptr noundef) #6

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

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

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !11, i64 0}
!10 = !{!"libxsmm_gemm_descriptor", !11, i64 0, !11, i64 4, !11, i64 8, !11, i64 12, !11, i64 16, !11, i64 20, !11, i64 24, !7, i64 28, !7, i64 29, !7, i64 32, !12, i64 33, !12, i64 41, !7, i64 49, !11, i64 50, !11, i64 54, !11, i64 58, !13, i64 62, !13, i64 64, !7, i64 66, !7, i64 67, !7, i64 68, !7, i64 69, !13, i64 70, !13, i64 72, !13, i64 74, !13, i64 76, !13, i64 78, !13, i64 80, !11, i64 82, !11, i64 86, !11, i64 90, !7, i64 94}
!11 = !{!"int", !7, i64 0}
!12 = !{!"long long", !7, i64 0}
!13 = !{!"short", !7, i64 0}
!14 = !{!11, !11, i64 0}
!15 = !{!10, !11, i64 24}
!16 = !{!17, !11, i64 28}
!17 = !{!"libxsmm_generated_code", !6, i64 0, !11, i64 8, !11, i64 12, !11, i64 16, !11, i64 20, !11, i64 24, !11, i64 28}
!18 = !{!19, !11, i64 8}
!19 = !{!"libxsmm_micro_kernel_config", !11, i64 0, !11, i64 4, !11, i64 8, !11, i64 12, !11, i64 16, !11, i64 20, !11, i64 24, !11, i64 28, !11, i64 32, !11, i64 36, !11, i64 40, !11, i64 44, !11, i64 48, !11, i64 52, !11, i64 56, !11, i64 60, !11, i64 64, !11, i64 68, !11, i64 72, !11, i64 76, !11, i64 80, !7, i64 84, !11, i64 88, !11, i64 92, !11, i64 96, !11, i64 100, !11, i64 104, !11, i64 108, !11, i64 112, !11, i64 116, !11, i64 120, !11, i64 124, !11, i64 128, !11, i64 132, !11, i64 136, !11, i64 140, !11, i64 144, !11, i64 148, !11, i64 152, !11, i64 156, !11, i64 160, !11, i64 164, !11, i64 168, !11, i64 172, !11, i64 176, !11, i64 180, !11, i64 184, !11, i64 188, !11, i64 192, !11, i64 196, !11, i64 200, !11, i64 204, !11, i64 208, !11, i64 212, !11, i64 216, !11, i64 220, !11, i64 224, !11, i64 228, !11, i64 232, !11, i64 236, !11, i64 240, !11, i64 244, !11, i64 248, !11, i64 252, !11, i64 256, !11, i64 260, !11, i64 264, !11, i64 268, !11, i64 272, !11, i64 276, !11, i64 280, !11, i64 284, !11, i64 288, !11, i64 292, !11, i64 296, !11, i64 300, !11, i64 304, !11, i64 308, !11, i64 312, !11, i64 316, !11, i64 320, !11, i64 324, !11, i64 328, !11, i64 332, !11, i64 336, !11, i64 340, !11, i64 344, !11, i64 348, !11, i64 352, !11, i64 356, !11, i64 360, !7, i64 364, !7, i64 380, !7, i64 396, !7, i64 412, !7, i64 428, !7, i64 444, !11, i64 460, !7, i64 464, !20, i64 520, !11, i64 556, !11, i64 560, !11, i64 564, !11, i64 568, !11, i64 572, !11, i64 576, !11, i64 580, !11, i64 584, !6, i64 592, !11, i64 600, !11, i64 604, !11, i64 608, !11, i64 612, !6, i64 616, !11, i64 624, !11, i64 628, !11, i64 632, !11, i64 636, !11, i64 640, !11, i64 644, !11, i64 648, !11, i64 652, !11, i64 656, !11, i64 660, !11, i64 664, !11, i64 668, !11, i64 672, !11, i64 676, !11, i64 680}
!20 = !{!"libxsmm_tile_config", !7, i64 0, !13, i64 2, !7, i64 4, !13, i64 6, !7, i64 8, !13, i64 10, !7, i64 12, !13, i64 14, !7, i64 16, !13, i64 18, !7, i64 20, !13, i64 22, !7, i64 24, !13, i64 26, !7, i64 28, !13, i64 30, !7, i64 32}
!21 = !{!10, !11, i64 20}
!22 = !{!10, !11, i64 4}
!23 = !{!24, !24, i64 0}
!24 = !{!"double", !7, i64 0}
!25 = !{!26, !26, i64 0}
!26 = !{!"float", !7, i64 0}
!27 = distinct !{!27, !28}
!28 = !{!"llvm.loop.mustprogress"}
!29 = !{!30, !11, i64 0}
!30 = !{!"libxsmm_gp_reg_mapping_struct", !11, i64 0, !11, i64 4, !11, i64 8, !11, i64 12, !11, i64 16, !11, i64 20, !11, i64 24, !11, i64 28, !11, i64 32, !11, i64 36, !11, i64 40, !11, i64 44, !11, i64 48, !11, i64 52, !11, i64 56, !11, i64 60, !11, i64 64, !11, i64 68, !11, i64 72, !11, i64 76, !11, i64 80, !11, i64 84, !11, i64 88, !11, i64 92, !11, i64 96, !11, i64 100, !11, i64 104, !11, i64 108, !11, i64 112, !11, i64 116, !11, i64 120, !11, i64 124, !11, i64 128}
!31 = !{!30, !11, i64 12}
!32 = !{!30, !11, i64 20}
!33 = !{!30, !11, i64 88}
!34 = !{!30, !11, i64 92}
!35 = !{!30, !11, i64 96}
!36 = distinct !{!36, !28}
!37 = !{!10, !12, i64 33}
!38 = !{i64 0, i64 4, !14, i64 4, i64 48, !39, i64 52, i64 2, !40, i64 54, i64 24, !39, i64 78, i64 12, !39, i64 90, i64 12, !39, i64 102, i64 12, !39}
!39 = !{!7, !7, i64 0}
!40 = !{!13, !13, i64 0}
!41 = !{!42, !11, i64 0}
!42 = !{!"", !11, i64 0, !7, i64 4, !13, i64 52, !7, i64 54, !7, i64 78, !7, i64 90, !7, i64 102}
!43 = !{!10, !11, i64 16}
!44 = !{!42, !13, i64 52}
!45 = distinct !{!45, !28}
!46 = distinct !{!46, !28}
!47 = distinct !{!47, !28}
!48 = distinct !{!48, !28}
!49 = distinct !{!49, !28}
!50 = distinct !{!50, !28}


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

%struct.libxsmm_loop_label_tracker_struct = type { [512 x i32], i32 }
%struct.libxsmm_const_data_tracker = type { [81920 x i8], i32, [128 x i32], i32 }
%struct.libxsmm_micro_kernel_config = type { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i8, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, [4 x i32], [4 x i32], [4 x i32], [4 x i32], [4 x i32], [4 x i32], i32, [2 x %struct.libxsmm_blocking_info_t], %struct.libxsmm_tile_config, i32, i32, i32, i32, i32, i32, i32, i32, ptr, i32, i32, i32, i32, ptr, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 }
%struct.libxsmm_blocking_info_t = type { i32, [4 x i32], i32, i32 }
%struct.libxsmm_tile_config = type { i8, i16, i8, i16, i8, i16, i8, i16, i8, i16, i8, i16, i8, i16, i8, i16, i8 }
%struct.libxsmm_gp_reg_mapping_struct = type { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 }
%struct.libxsmm_asparse_reg_op = type { i32, [12 x i32], i16, [12 x i16], [12 x i8], [12 x i8], [12 x i8] }

@.str = external hidden unnamed_addr constant [88 x i8], align 1
@libxsmm_ninit = external local_unnamed_addr global i32, align 4
@libxsmm_verbosity = external local_unnamed_addr global i32, align 4
@.str.1 = external hidden unnamed_addr constant [14 x i8], align 1
@__const.libxsmm_generator_spgemm_csr_asparse_reg_aarch64_sve.l_ld_tbl = external hidden unnamed_addr constant [2 x i32], align 4
@__const.libxsmm_generator_spgemm_csr_asparse_reg_aarch64_sve.l_ldr_tbl = external hidden unnamed_addr constant [2 x i32], align 4
@__const.libxsmm_generator_spgemm_csr_asparse_reg_aarch64_sve.l_st_tbl = external hidden unnamed_addr constant [2 x [2 x i32]], align 16
@__func__.libxsmm_generator_spgemm_csr_asparse_reg_aarch64_sve = external hidden unnamed_addr constant [53 x i8], align 1
@__PRETTY_FUNCTION__.libxsmm_generator_spgemm_csr_asparse_reg_aarch64_sve = external hidden unnamed_addr constant [177 x i8], align 1

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

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

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

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

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

; Function Attrs: mustprogress nounwind willreturn allockind("free") memory(argmem: readwrite, inaccessiblemem: readwrite)
declare void @free(ptr allocptr nocapture noundef) local_unnamed_addr #3

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

; Function Attrs: mustprogress nofree nounwind willreturn allockind("alloc,uninitialized") allocsize(0) memory(inaccessiblemem: readwrite)
declare noalias noundef ptr @malloc(i64 noundef) local_unnamed_addr #4

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

declare i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef) local_unnamed_addr #6

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

declare void @libxsmm_reset_const_data_tracker(ptr noundef) local_unnamed_addr #6

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

declare void @libxsmm_reset_loop_label_tracker(ptr noundef) local_unnamed_addr #6

declare void @libxsmm_reset_aarch64_gp_reg_mapping(ptr noundef) local_unnamed_addr #6

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

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

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

declare i32 @libxsmm_aarch64_instruction_add_data(ptr noundef, ptr noundef, i32 noundef, i32 noundef, i32 noundef, ptr noundef) local_unnamed_addr #6

declare void @libxsmm_aarch64_instruction_adr_data(ptr noundef, i32 noundef, i32 noundef, ptr noundef) local_unnamed_addr #6

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

declare void @libxsmm_generator_mov_aarch64(ptr noundef, i32 noundef, i32 noundef) local_unnamed_addr #6

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

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

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

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

declare void @libxsmm_aarch64_instruction_close_data(ptr noundef, ptr noundef) local_unnamed_addr #6

; Function Attrs: nounwind uwtable
define dso_local void @libxsmm_generator_spgemm_csr_asparse_reg_aarch64_sve(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %4) local_unnamed_addr #0 {
  %6 = alloca i32, align 4
  %7 = alloca [30 x i32], align 16
  %8 = alloca i32, align 4
  %9 = alloca %struct.libxsmm_loop_label_tracker_struct, align 4
  %10 = alloca %struct.libxsmm_const_data_tracker, align 4
  %11 = alloca %struct.libxsmm_micro_kernel_config, align 8
  %12 = alloca %struct.libxsmm_gp_reg_mapping_struct, align 4
  %13 = alloca [15 x i8], align 1
  %14 = alloca %struct.libxsmm_asparse_reg_op, align 4
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %6) #9
  %15 = load i32, ptr %1, align 1, !tbaa !5
  %16 = zext i32 %15 to i64
  %17 = getelementptr inbounds i32, ptr %2, i64 %16
  %18 = load i32, ptr %17, align 4, !tbaa !12
  %.not = icmp eq i32 %18, 0
  br i1 %.not, label %.thread354, label %19

19:                                               ; preds = %5
  %20 = zext i32 %18 to i64
  %21 = shl nuw nsw i64 %20, 3
  %22 = tail call noalias ptr @malloc(i64 noundef %21) #10
  %23 = shl nuw nsw i64 %20, 2
  %24 = tail call noalias ptr @malloc(i64 noundef %23) #10
  %25 = tail call noalias ptr @malloc(i64 noundef %23) #10
  br label %.thread354

.thread354:                                       ; preds = %5, %19
  %26 = phi ptr [ %24, %19 ], [ null, %5 ]
  %27 = phi ptr [ %22, %19 ], [ null, %5 ]
  %28 = phi ptr [ %25, %19 ], [ null, %5 ]
  call void @llvm.lifetime.start.p0(i64 120, ptr nonnull %7) #9
  %29 = getelementptr inbounds i8, ptr %1, i64 29
  %30 = tail call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef nonnull %29) #9
  %31 = icmp eq i32 %30, 0
  %32 = select i1 %31, i32 512, i32 256
  %33 = getelementptr inbounds i8, ptr %1, i64 24
  %34 = load i32, ptr %33, align 1, !tbaa !13
  %35 = and i32 %34, 4
  %.not338 = icmp eq i32 %35, 0
  %36 = tail call noalias dereferenceable_or_null(7602176) ptr @malloc(i64 noundef 7602176) #10
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %8) #9
  call void @llvm.lifetime.start.p0(i64 2052, ptr nonnull %9) #9
  call void @llvm.lifetime.start.p0(i64 82440, ptr nonnull %10) #9
  call void @llvm.lifetime.start.p0(i64 688, ptr nonnull %11) #9
  call void @llvm.lifetime.start.p0(i64 132, ptr nonnull %12) #9
  %37 = insertelement <4 x ptr> poison, ptr %26, i64 0
  %38 = insertelement <4 x ptr> %37, ptr %27, i64 1
  %39 = insertelement <4 x ptr> %38, ptr %28, i64 2
  %40 = insertelement <4 x ptr> %39, ptr %36, i64 3
  %41 = icmp eq <4 x ptr> %40, zeroinitializer
  %42 = bitcast <4 x i1> %41 to i4
  %.not439 = icmp eq i4 %42, 0
  br i1 %.not439, label %48, label %43

43:                                               ; preds = %.thread354
  %44 = load i32, ptr @libxsmm_ninit, align 4, !tbaa !12
  %45 = icmp ugt i32 %44, 1
  %46 = load i32, ptr @libxsmm_verbosity, align 4
  %47 = select i1 %45, i32 %46, i32 1
  tail call void @libxsmm_handle_error(ptr noundef %0, i32 noundef 90027, ptr noundef nonnull @__func__.libxsmm_generator_spgemm_csr_asparse_reg_aarch64_sve, ptr noundef nonnull @.str, i32 noundef 1342, i32 noundef %47) #9
  br label %348

48:                                               ; preds = %.thread354
  %49 = getelementptr inbounds i8, ptr %0, i64 28
  %50 = load i32, ptr %49, align 4, !tbaa !14
  call void @libxsmm_generator_gemm_init_micro_kernel_config_aarch64(ptr noundef nonnull %11, i32 noundef %50, ptr noundef nonnull %1) #9
  %51 = getelementptr inbounds i8, ptr %11, i64 8
  %52 = load i32, ptr %51, align 8, !tbaa !17
  %53 = select i1 %31, i32 3, i32 2
  %54 = shl i32 %52, %53
  %55 = load i32, ptr %33, align 1, !tbaa !13
  %56 = and i32 %55, 48
  %57 = icmp eq i32 %56, 48
  br i1 %57, label %58, label %63

58:                                               ; preds = %48
  %59 = getelementptr inbounds i8, ptr %1, i64 20
  %60 = load i32, ptr %59, align 1, !tbaa !20
  %61 = urem i32 %60, %52
  %62 = icmp eq i32 %61, 0
  br label %63

63:                                               ; preds = %58, %48
  %64 = phi i1 [ false, %48 ], [ %62, %58 ]
  %65 = getelementptr inbounds i8, ptr %1, i64 4
  %66 = load i32, ptr %65, align 1, !tbaa !21
  %67 = icmp eq i32 %66, %52
  br i1 %67, label %79, label %68

68:                                               ; preds = %63
  %69 = shl i32 %52, 1
  %70 = icmp eq i32 %66, %69
  br i1 %70, label %79, label %71

71:                                               ; preds = %68
  %72 = shl i32 %52, 2
  %73 = icmp eq i32 %66, %72
  br i1 %73, label %79, label %74

74:                                               ; preds = %71
  %75 = load i32, ptr @libxsmm_ninit, align 4, !tbaa !12
  %76 = icmp ugt i32 %75, 1
  %77 = load i32, ptr @libxsmm_verbosity, align 4
  %78 = select i1 %76, i32 %77, i32 1
  call void @libxsmm_handle_error(ptr noundef nonnull %0, i32 noundef 90016, ptr noundef nonnull @__func__.libxsmm_generator_spgemm_csr_asparse_reg_aarch64_sve, ptr noundef nonnull @.str, i32 noundef 1363, i32 noundef %78) #9
  br label %348

79:                                               ; preds = %71, %68, %63
  %.0299 = phi i32 [ 1, %63 ], [ 2, %68 ], [ 4, %71 ]
  %. = select i1 %31, i32 2, i32 4
  %.351 = select i1 %31, i32 16, i32 8
  %80 = sub nuw nsw i32 30, %.0299
  %81 = select i1 %31, i32 1, i32 2
  %82 = shl nuw nsw i32 %80, %81
  %.not339 = icmp eq ptr %4, null
  br i1 %.not339, label %83, label %84

83:                                               ; preds = %79
  call void @__assert_fail(ptr noundef nonnull @.str.1, ptr noundef nonnull @.str, i32 noundef 1381, ptr noundef nonnull @__PRETTY_FUNCTION__.libxsmm_generator_spgemm_csr_asparse_reg_aarch64_sve) #11
  unreachable

84:                                               ; preds = %79
  call void @libxsmm_analyse_sparse_nnz(i32 noundef %18, ptr noundef nonnull %4, ptr noundef nonnull %6, ptr noundef nonnull %27, ptr noundef nonnull %26, ptr noundef nonnull %28)
  %85 = load i32, ptr %6, align 4, !tbaa !12
  %86 = icmp ugt i32 %85, 1280
  br i1 %86, label %87, label %92

87:                                               ; preds = %84
  %88 = load i32, ptr @libxsmm_ninit, align 4, !tbaa !12
  %89 = icmp ugt i32 %88, 1
  %90 = load i32, ptr @libxsmm_verbosity, align 4
  %91 = select i1 %89, i32 %90, i32 1
  call void @libxsmm_handle_error(ptr noundef nonnull %0, i32 noundef 90036, ptr noundef nonnull @__func__.libxsmm_generator_spgemm_csr_asparse_reg_aarch64_sve, ptr noundef nonnull @.str, i32 noundef 1389, i32 noundef %91) #9
  br label %348

92:                                               ; preds = %84
  %93 = icmp eq i32 %85, 0
  %or.cond397.not = or i1 %93, %31
  br i1 %or.cond397.not, label %.loopexit366, label %.lr.ph.preheader

.lr.ph.preheader:                                 ; preds = %92
  %wide.trip.count = zext nneg i32 %85 to i64
  %min.iters.check = icmp ult i32 %85, 4
  br i1 %min.iters.check, label %.lr.ph.preheader444, label %vector.ph

vector.ph:                                        ; preds = %.lr.ph.preheader
  %n.vec = and i64 %wide.trip.count, 2044
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %94 = getelementptr inbounds double, ptr %27, i64 %index
  %95 = getelementptr inbounds i8, ptr %94, i64 16
  %wide.load = load <2 x double>, ptr %94, align 8, !tbaa !22
  %wide.load438 = load <2 x double>, ptr %95, align 8, !tbaa !22
  %96 = fptrunc <2 x double> %wide.load to <2 x float>
  %97 = fptrunc <2 x double> %wide.load438 to <2 x float>
  %98 = getelementptr inbounds float, ptr %27, i64 %index
  %99 = getelementptr inbounds i8, ptr %98, i64 8
  store <2 x float> %96, ptr %98, align 4
  store <2 x float> %97, ptr %99, align 4
  %index.next = add nuw i64 %index, 4
  %100 = icmp eq i64 %index.next, %n.vec
  br i1 %100, label %middle.block, label %vector.body, !llvm.loop !24

middle.block:                                     ; preds = %vector.body
  %cmp.n = icmp eq i64 %n.vec, %wide.trip.count
  br i1 %cmp.n, label %.loopexit366, label %.lr.ph.preheader444

.lr.ph.preheader444:                              ; preds = %middle.block, %.lr.ph.preheader
  %indvars.iv.ph = phi i64 [ 0, %.lr.ph.preheader ], [ %n.vec, %middle.block ]
  br label %.lr.ph

.lr.ph:                                           ; preds = %.lr.ph.preheader444, %.lr.ph
  %indvars.iv = phi i64 [ %indvars.iv.next, %.lr.ph ], [ %indvars.iv.ph, %.lr.ph.preheader444 ]
  %101 = getelementptr inbounds double, ptr %27, i64 %indvars.iv
  %102 = load double, ptr %101, align 8, !tbaa !22
  %103 = fptrunc double %102 to float
  %104 = getelementptr inbounds float, ptr %27, i64 %indvars.iv
  store float %103, ptr %104, align 4
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, %wide.trip.count
  br i1 %exitcond.not, label %.loopexit366, label %.lr.ph, !llvm.loop !28

.loopexit366:                                     ; preds = %.lr.ph, %middle.block, %92
  call void @libxsmm_reset_aarch64_gp_reg_mapping(ptr noundef nonnull %12) #9
  store i32 32, ptr %12, align 4, !tbaa !29
  %105 = getelementptr inbounds i8, ptr %12, i64 12
  store i32 33, ptr %105, align 4, !tbaa !31
  %106 = getelementptr inbounds i8, ptr %12, i64 20
  store i32 34, ptr %106, align 4, !tbaa !32
  %107 = getelementptr inbounds i8, ptr %12, i64 88
  store i32 60, ptr %107, align 4, !tbaa !33
  %108 = getelementptr inbounds i8, ptr %12, i64 92
  store i32 61, ptr %108, align 4, !tbaa !34
  %109 = getelementptr inbounds i8, ptr %12, i64 96
  store i32 62, ptr %109, align 4, !tbaa !35
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 16 dereferenceable(120) %7, i8 -1, i64 120, i1 false)
  call void @libxsmm_reset_const_data_tracker(ptr noundef nonnull %10) #9
  call void @libxsmm_reset_loop_label_tracker(ptr noundef nonnull %9) #9
  call void @libxsmm_aarch64_instruction_open_stream(ptr noundef %0, i16 noundef zeroext 4095) #9
  %110 = load i32, ptr %33, align 1, !tbaa !13
  %111 = and i32 %110, 16384
  %.not340 = icmp eq i32 %111, 0
  br i1 %.not340, label %119, label %112

112:                                              ; preds = %.loopexit366
  %113 = load i32, ptr %12, align 4, !tbaa !29
  %114 = load i32, ptr %108, align 4, !tbaa !34
  call void @libxsmm_aarch64_instruction_alu_compute_shifted_reg(ptr noundef %0, i32 noundef 167772167, i32 noundef %113, i32 noundef %113, i32 noundef %114, i32 noundef 0, i32 noundef 0) #9
  %115 = load i32, ptr %108, align 4, !tbaa !34
  %116 = load i32, ptr %105, align 4, !tbaa !31
  call void @libxsmm_aarch64_instruction_alu_move(ptr noundef %0, i32 noundef -1186988026, i32 noundef %115, i32 noundef 127, i32 noundef 80, i32 noundef %116) #9
  %117 = load i32, ptr %108, align 4, !tbaa !34
  %118 = load i32, ptr %106, align 4, !tbaa !32
  call void @libxsmm_aarch64_instruction_alu_move(ptr noundef %0, i32 noundef -1186988026, i32 noundef %117, i32 noundef 127, i32 noundef 128, i32 noundef %118) #9
  br label %119

119:                                              ; preds = %.loopexit366, %112
  %120 = load i32, ptr %107, align 4, !tbaa !33
  call void @libxsmm_generator_set_p_register_aarch64_sve(ptr noundef %0, i32 noundef 0, i32 noundef -1, i32 noundef %120) #9
  %121 = load i32, ptr %6, align 4, !tbaa !12
  %122 = shl i32 %121, %53
  %123 = call i32 @libxsmm_aarch64_instruction_add_data(ptr noundef %0, ptr noundef nonnull %27, i32 noundef %122, i32 noundef 16, i32 noundef 1, ptr noundef nonnull %10) #9
  %124 = load i32, ptr %109, align 4, !tbaa !35
  call void @libxsmm_aarch64_instruction_adr_data(ptr noundef %0, i32 noundef %124, i32 noundef %123, ptr noundef nonnull %10) #9
  %125 = load i32, ptr %6, align 4, !tbaa !12
  %.not341 = icmp ugt i32 %125, %82
  br i1 %.not341, label %153, label %126

126:                                              ; preds = %119
  %127 = select i1 %31, i32 1, i32 3
  %128 = and i32 %125, %127
  %.not342 = icmp eq i32 %128, 0
  br i1 %.not342, label %133, label %129

129:                                              ; preds = %126
  call void @llvm.lifetime.start.p0(i64 15, ptr nonnull %13) #9
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 1 dereferenceable(15) %13, i8 0, i64 15, i1 false)
  %130 = shl i32 %125, %53
  %131 = and i32 %130, 12
  %132 = call i32 @libxsmm_aarch64_instruction_add_data(ptr noundef %0, ptr noundef nonnull %13, i32 noundef %131, i32 noundef 1, i32 noundef 1, ptr noundef nonnull %10) #9
  call void @llvm.lifetime.end.p0(i64 15, ptr nonnull %13) #9
  %.pre = load i32, ptr %6, align 4, !tbaa !12
  br label %133

133:                                              ; preds = %129, %126
  %134 = phi i32 [ %.pre, %129 ], [ %125, %126 ]
  %135 = icmp ugt i32 %134, 32
  %spec.select = zext i1 %135 to i32
  %136 = load i32, ptr %109, align 4, !tbaa !35
  %137 = select i1 %135, i32 2, i32 1
  call void @libxsmm_aarch64_instruction_sve_move(ptr noundef %0, i32 noundef -1518329722, i32 noundef %136, i32 noundef 0, i32 noundef 0, i32 noundef %spec.select, i32 noundef 0) #9
  %138 = load i32, ptr %6, align 4, !tbaa !12
  %139 = icmp ult i32 %., %138
  br i1 %139, label %.lr.ph369, label %._crit_edge

.lr.ph369:                                        ; preds = %133
  %140 = shl nuw nsw i32 %., %53
  br label %141

141:                                              ; preds = %.lr.ph369, %141
  %142 = phi i32 [ %., %.lr.ph369 ], [ %147, %141 ]
  %143 = phi i32 [ %137, %.lr.ph369 ], [ %146, %141 ]
  %144 = load i32, ptr %109, align 4, !tbaa !35
  call void @libxsmm_aarch64_instruction_alu_compute_imm12(ptr noundef %0, i32 noundef 285212678, i32 noundef %144, i32 noundef %144, i32 noundef %140, i8 noundef zeroext 0) #9
  %145 = load i32, ptr %109, align 4, !tbaa !35
  %146 = add i32 %143, 1
  call void @libxsmm_aarch64_instruction_sve_move(ptr noundef %0, i32 noundef -1518329722, i32 noundef %145, i32 noundef 0, i32 noundef 0, i32 noundef %143, i32 noundef 0) #9
  %147 = add i32 %142, %.
  %148 = load i32, ptr %6, align 4, !tbaa !12
  %149 = icmp ult i32 %147, %148
  br i1 %149, label %141, label %._crit_edge

._crit_edge:                                      ; preds = %141, %133
  %.1304.lcssa = phi i32 [ %spec.select, %133 ], [ %143, %141 ]
  %.lcssa = phi i32 [ %137, %133 ], [ %146, %141 ]
  %150 = add i32 %.1304.lcssa, 2
  %151 = sub i32 30, %.1304.lcssa
  %152 = udiv i32 %151, %.0299
  %spec.select353 = call i32 @llvm.umin.i32(i32 %152, i32 12)
  br label %.loopexit364

153:                                              ; preds = %119
  %154 = shl nuw nsw i32 %.0299, 2
  %155 = sub nuw nsw i32 32, %154
  %156 = xor i32 %154, 31
  %157 = load i32, ptr %107, align 4, !tbaa !33
  %158 = add i32 %157, -39
  %159 = load i32, ptr %109, align 4, !tbaa !35
  call void @libxsmm_generator_mov_aarch64(ptr noundef %0, i32 noundef %159, i32 noundef 39) #9
  %160 = icmp ugt i32 %158, 1
  %161 = load i32, ptr %6, align 4
  %162 = icmp ugt i32 %161, 64
  %163 = select i1 %160, i1 %162, i1 false
  br i1 %163, label %.lr.ph373, label %.loopexit364

.lr.ph373:                                        ; preds = %153, %.lr.ph373
  %.1289371 = phi i32 [ %166, %.lr.ph373 ], [ 1, %153 ]
  %164 = add i32 %.1289371, 39
  %165 = add i32 %.1289371, 38
  call void @libxsmm_aarch64_instruction_alu_compute_imm12(ptr noundef %0, i32 noundef 285212678, i32 noundef %165, i32 noundef %164, i32 noundef %32, i8 noundef zeroext 0) #9
  %166 = add nuw i32 %.1289371, 1
  %167 = icmp ult i32 %166, %158
  %168 = shl i32 %166, 6
  %169 = load i32, ptr %6, align 4
  %170 = icmp ult i32 %168, %169
  %171 = select i1 %167, i1 %170, i1 false
  br i1 %171, label %.lr.ph373, label %.loopexit364, !llvm.loop !36

.loopexit364:                                     ; preds = %.lr.ph373, %153, %._crit_edge
  %.0315 = phi i32 [ 0, %._crit_edge ], [ %158, %153 ], [ %158, %.lr.ph373 ]
  %.0314 = phi i32 [ 0, %._crit_edge ], [ 39, %153 ], [ 39, %.lr.ph373 ]
  %.1313 = phi i32 [ %.351, %._crit_edge ], [ 0, %153 ], [ 0, %.lr.ph373 ]
  %.0311 = phi i32 [ 0, %._crit_edge ], [ %156, %153 ], [ %156, %.lr.ph373 ]
  %.0302 = phi i32 [ %.lcssa, %._crit_edge ], [ %156, %153 ], [ %156, %.lr.ph373 ]
  %.0300 = phi i32 [ %150, %._crit_edge ], [ %155, %153 ], [ %155, %.lr.ph373 ]
  %.0294 = phi i32 [ %spec.select353, %._crit_edge ], [ 4, %153 ], [ 4, %.lr.ph373 ]
  %172 = load i32, ptr %1, align 1, !tbaa !5
  call void @libxsmm_asparse_reg_sequence(i32 noundef %172, i32 noundef %.0294, ptr noundef %2, ptr noundef %3, ptr noundef %26, ptr noundef %28, i32 noundef 65536, ptr noundef %36, ptr noundef nonnull %8)
  %173 = load i32, ptr %8, align 4, !tbaa !12
  %174 = icmp eq i32 %173, 0
  br i1 %174, label %175, label %180

175:                                              ; preds = %.loopexit364
  %176 = load i32, ptr @libxsmm_ninit, align 4, !tbaa !12
  %177 = icmp ugt i32 %176, 1
  %178 = load i32, ptr @libxsmm_verbosity, align 4
  %179 = select i1 %177, i32 %178, i32 1
  call void @libxsmm_handle_error(ptr noundef %0, i32 noundef 90005, ptr noundef nonnull @__func__.libxsmm_generator_spgemm_csr_asparse_reg_aarch64_sve, ptr noundef nonnull @.str, i32 noundef 1534, i32 noundef %179) #9
  br label %348

180:                                              ; preds = %.loopexit364
  %181 = getelementptr inbounds i8, ptr %1, i64 33
  %182 = load i64, ptr %181, align 1, !tbaa !37
  %183 = trunc i64 %182 to i32
  call void @libxsmm_generator_loop_header_aarch64(ptr noundef %0, ptr noundef nonnull %9, i32 noundef 32, i32 noundef %183) #9
  %184 = load i32, ptr %105, align 4, !tbaa !31
  %185 = load i32, ptr %108, align 4, !tbaa !34
  call void @libxsmm_generator_mov_aarch64(ptr noundef %0, i32 noundef %184, i32 noundef %185) #9
  %186 = load i32, ptr %8, align 4, !tbaa !12
  %.not399 = icmp eq i32 %186, 0
  br i1 %.not399, label %._crit_edge391, label %.lr.ph390

.lr.ph390:                                        ; preds = %180
  %187 = getelementptr inbounds i8, ptr %1, i64 16
  %188 = zext i1 %31 to i64
  %189 = getelementptr inbounds [2 x i32], ptr @__const.libxsmm_generator_spgemm_csr_asparse_reg_aarch64_sve.l_ld_tbl, i64 0, i64 %188
  %190 = getelementptr inbounds i8, ptr %14, i64 52
  %191 = getelementptr inbounds i8, ptr %14, i64 54
  %192 = getelementptr inbounds i8, ptr %14, i64 90
  %193 = getelementptr inbounds i8, ptr %14, i64 4
  %194 = getelementptr inbounds i8, ptr %1, i64 20
  %195 = getelementptr inbounds i8, ptr %14, i64 78
  %196 = add nuw nsw i32 %., 255
  %197 = shl nuw nsw i32 %.1313, %81
  %.not400 = icmp eq i32 %.0311, 0
  %198 = shl i32 %.0315, 6
  %199 = select i1 %31, i64 3, i64 2
  %200 = getelementptr inbounds [2 x i32], ptr @__const.libxsmm_generator_spgemm_csr_asparse_reg_aarch64_sve.l_ldr_tbl, i64 0, i64 %188
  %201 = getelementptr inbounds i8, ptr %14, i64 102
  %202 = zext i1 %64 to i64
  %203 = getelementptr inbounds [2 x [2 x i32]], ptr @__const.libxsmm_generator_spgemm_csr_asparse_reg_aarch64_sve.l_st_tbl, i64 0, i64 %188, i64 %202
  %wide.trip.count412 = zext nneg i32 %.0311 to i64
  br label %204

204:                                              ; preds = %.lr.ph390, %.split385.us
  %indvars.iv421 = phi i64 [ 0, %.lr.ph390 ], [ %indvars.iv.next422, %.split385.us ]
  %.0305388 = phi i32 [ 0, %.lr.ph390 ], [ %209, %.split385.us ]
  %.0306387 = phi i32 [ -1, %.lr.ph390 ], [ %.us-phi, %.split385.us ]
  call void @llvm.lifetime.start.p0(i64 116, ptr nonnull %14) #9
  %205 = getelementptr inbounds %struct.libxsmm_asparse_reg_op, ptr %36, i64 %indvars.iv421
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(116) %14, ptr noundef nonnull align 4 dereferenceable(116) %205, i64 116, i1 false), !tbaa.struct !38
  %206 = load i32, ptr %14, align 4, !tbaa !41
  %207 = load i32, ptr %187, align 1, !tbaa !43
  %208 = mul i32 %207, %206
  %209 = shl i32 %208, %53
  %210 = icmp sgt i32 %209, %.0305388
  %211 = select i1 %210, i32 4096, i32 4097
  %212 = load i32, ptr %108, align 4, !tbaa !34
  %213 = load i32, ptr %107, align 4, !tbaa !33
  %214 = sub nsw i32 %209, %.0305388
  %215 = call i32 @llvm.abs.i32(i32 %214, i1 true)
  %216 = zext nneg i32 %215 to i64
  call void @libxsmm_aarch64_instruction_alu_compute_imm64(ptr noundef %0, i32 noundef %211, i32 noundef %212, i32 noundef %213, i32 noundef %212, i64 noundef %216) #9
  %217 = load i16, ptr %190, align 4
  %.fr401 = freeze i16 %217
  %.not402 = icmp eq i16 %.fr401, 0
  %218 = getelementptr inbounds i8, ptr %205, i64 116
  %219 = trunc nuw i64 %indvars.iv421 to i32
  %220 = xor i32 %219, -1
  br i1 %.not402, label %.split, label %.split.us.preheader

.split.us.preheader:                              ; preds = %204
  %wide.trip.count417 = zext i16 %.fr401 to i64
  br label %.split.us

.split.us:                                        ; preds = %.split.us.preheader, %._crit_edge381.us
  %.2290383.us = phi i32 [ %305, %._crit_edge381.us ], [ 0, %.split.us.preheader ]
  %.1307382.us = phi i32 [ %.2308.us, %._crit_edge381.us ], [ %.0306387, %.split.us.preheader ]
  %221 = mul i32 %.2290383.us, %54
  %222 = add nsw i32 %221, %209
  %.not344.us = icmp eq i32 %.1307382.us, %222
  br i1 %.not344.us, label %.lr.ph380.us, label %223

223:                                              ; preds = %.split.us
  %224 = load i32, ptr %189, align 4, !tbaa !12
  %225 = load i32, ptr %108, align 4, !tbaa !34
  call void @libxsmm_aarch64_instruction_sve_move(ptr noundef %0, i32 noundef %224, i32 noundef %225, i32 noundef 0, i32 noundef %.2290383.us, i32 noundef %.0302, i32 noundef 0) #9
  br label %.lr.ph380.us

.lr.ph380.us:                                     ; preds = %223, %.split.us
  %.2308.us = phi i32 [ %222, %223 ], [ %.1307382.us, %.split.us ]
  %226 = icmp eq i32 %.2290383.us, 0
  br label %227

227:                                              ; preds = %.lr.ph380.us, %304
  %indvars.iv414 = phi i64 [ 0, %.lr.ph380.us ], [ %indvars.iv.next415, %304 ]
  %228 = getelementptr inbounds [12 x i16], ptr %191, i64 0, i64 %indvars.iv414
  %229 = load i16, ptr %228, align 2, !tbaa !40
  %230 = zext i16 %229 to i32
  %231 = getelementptr inbounds [12 x i8], ptr %192, i64 0, i64 %indvars.iv414
  %232 = load i8, ptr %231, align 1, !tbaa !39
  %233 = zext i8 %232 to i32
  %234 = add nuw nsw i32 %233, 35
  %235 = mul nuw nsw i32 %.0299, %233
  %236 = add i32 %235, %.0300
  %237 = getelementptr inbounds [12 x i32], ptr %193, i64 0, i64 %indvars.iv414
  %238 = load i32, ptr %237, align 4, !tbaa !12
  %239 = load i32, ptr %194, align 1, !tbaa !20
  %240 = mul i32 %239, %238
  %241 = shl i32 %240, %53
  %242 = load i32, ptr %6, align 4, !tbaa !12
  %.not345.us = icmp ugt i32 %242, %82
  %243 = getelementptr inbounds [12 x i8], ptr %195, i64 0, i64 %indvars.iv414
  %244 = load i8, ptr %243, align 1, !tbaa !39
  %245 = icmp eq i8 %244, 1
  br i1 %.not345.us, label %257, label %246

246:                                              ; preds = %227
  %247 = select i1 %245, i32 1679818819, i32 1679819843
  %248 = lshr i32 %230, %81
  %249 = and i32 %196, %230
  %250 = trunc i32 %249 to i8
  %251 = icmp ugt i32 %242, %197
  br i1 %251, label %252, label %.loopexit363.us

252:                                              ; preds = %246
  %253 = add nuw nsw i32 %248, 1
  %.not346.us = icmp ult i32 %253, %.1313
  br i1 %.not346.us, label %.loopexit363.us, label %254

254:                                              ; preds = %252
  %255 = load i32, ptr %7, align 16, !tbaa !12
  %.not347.us = icmp eq i32 %255, %253
  br i1 %.not347.us, label %.loopexit363.us, label %256

256:                                              ; preds = %254
  call void @libxsmm_aarch64_instruction_sve_compute(ptr noundef %0, i32 noundef 73412611, i32 noundef %253, i32 noundef %253, i8 noundef zeroext 0, i32 noundef 0, i32 noundef 127, i32 noundef 3) #9
  store i32 %253, ptr %7, align 16, !tbaa !12
  br label %.loopexit363.us

257:                                              ; preds = %227
  %258 = select i1 %245, i32 1696596099, i32 1696604291
  br i1 %.not400, label %._crit_edge377.us, label %.lr.ph376.us

._crit_edge377.us:                                ; preds = %280, %257
  %259 = load i32, ptr %8, align 4, !tbaa !12
  %260 = add i32 %259, %220
  %261 = call i32 @libxsmm_asparse_reg_pick_bcast_reg(ptr noundef nonnull %7, i32 noundef %.0311, ptr noundef nonnull %218, i32 noundef %260)
  %262 = icmp ugt i32 %198, %230
  br i1 %262, label %268, label %263

263:                                              ; preds = %._crit_edge377.us
  %264 = load i32, ptr %109, align 4, !tbaa !35
  %265 = load i32, ptr %107, align 4, !tbaa !33
  %266 = zext i16 %229 to i64
  %267 = shl nuw nsw i64 %266, %199
  call void @libxsmm_aarch64_instruction_alu_compute_imm64(ptr noundef %0, i32 noundef 4096, i32 noundef %.0314, i32 noundef %265, i32 noundef %264, i64 noundef %267) #9
  br label %273

268:                                              ; preds = %._crit_edge377.us
  %269 = lshr i32 %230, 6
  %270 = add nuw nsw i32 %269, %.0314
  %271 = and i32 %230, 63
  %272 = shl nuw nsw i32 %271, %53
  br label %273

273:                                              ; preds = %268, %263
  %.0284.us = phi i32 [ %270, %268 ], [ %264, %263 ]
  %.0283.us = phi i32 [ %272, %268 ], [ 0, %263 ]
  %274 = load i32, ptr %200, align 4, !tbaa !12
  call void @libxsmm_aarch64_instruction_sve_move(ptr noundef %0, i32 noundef %274, i32 noundef %.0284.us, i32 noundef 0, i32 noundef %.0283.us, i32 noundef %261, i32 noundef 0) #9
  %275 = zext i32 %261 to i64
  %276 = getelementptr inbounds [30 x i32], ptr %7, i64 0, i64 %275
  store i32 %230, ptr %276, align 4, !tbaa !12
  br label %.loopexit363.us

.lr.ph376.us:                                     ; preds = %257, %280
  %indvars.iv409 = phi i64 [ %indvars.iv.next410, %280 ], [ 0, %257 ]
  %277 = getelementptr inbounds [30 x i32], ptr %7, i64 0, i64 %indvars.iv409
  %278 = load i32, ptr %277, align 4, !tbaa !12
  %279 = icmp eq i32 %278, %230
  br i1 %279, label %.loopexit363.us.loopexit, label %280

280:                                              ; preds = %.lr.ph376.us
  %indvars.iv.next410 = add nuw nsw i64 %indvars.iv409, 1
  %exitcond413.not = icmp eq i64 %indvars.iv.next410, %wide.trip.count412
  br i1 %exitcond413.not, label %._crit_edge377.us, label %.lr.ph376.us, !llvm.loop !44

.loopexit363.us.loopexit:                         ; preds = %.lr.ph376.us
  %281 = trunc nuw nsw i64 %indvars.iv409 to i32
  br label %.loopexit363.us

.loopexit363.us:                                  ; preds = %.loopexit363.us.loopexit, %273, %256, %254, %252, %246
  %.1297.us = phi i32 [ %253, %252 ], [ %248, %246 ], [ %261, %273 ], [ 0, %256 ], [ 0, %254 ], [ %281, %.loopexit363.us.loopexit ]
  %.0295.us = phi i8 [ %250, %252 ], [ %250, %246 ], [ 0, %273 ], [ %250, %256 ], [ %250, %254 ], [ 0, %.loopexit363.us.loopexit ]
  %.0285.us = phi i32 [ %247, %252 ], [ %247, %246 ], [ %258, %273 ], [ %247, %256 ], [ %247, %254 ], [ %258, %.loopexit363.us.loopexit ]
  %282 = getelementptr inbounds [12 x i8], ptr %201, i64 0, i64 %indvars.iv414
  %283 = load i8, ptr %282, align 1, !tbaa !39
  %284 = and i8 %283, 1
  %.not348.us = icmp eq i8 %284, 0
  br i1 %.not348.us, label %.loopexit363.us..thread357.us_crit_edge, label %285

.loopexit363.us..thread357.us_crit_edge:          ; preds = %.loopexit363.us
  %.pre429 = add i32 %236, %.2290383.us
  br label %.thread357.us

285:                                              ; preds = %.loopexit363.us
  br i1 %226, label %286, label %290

286:                                              ; preds = %285
  %287 = load i32, ptr %106, align 4, !tbaa !32
  %288 = load i32, ptr %107, align 4, !tbaa !33
  %289 = zext i32 %241 to i64
  call void @libxsmm_aarch64_instruction_alu_compute_imm64(ptr noundef %0, i32 noundef 4096, i32 noundef %287, i32 noundef %288, i32 noundef %234, i64 noundef %289) #9
  br label %290

290:                                              ; preds = %286, %285
  br i1 %.not338, label %296, label %291

291:                                              ; preds = %290
  %292 = icmp ult i32 %.1297.us, %.1313
  %293 = select i1 %292, i32 1679827011, i32 1694500867
  %.not361.us = icmp eq i8 %244, -1
  %294 = add i32 %236, %.2290383.us
  call void @libxsmm_aarch64_instruction_sve_compute(ptr noundef %0, i32 noundef %293, i32 noundef %.0302, i32 noundef %.1297.us, i8 noundef zeroext %.0295.us, i32 noundef %294, i32 noundef 0, i32 noundef %53) #9
  br i1 %.not361.us, label %295, label %299

295:                                              ; preds = %291
  call void @libxsmm_aarch64_instruction_sve_compute(ptr noundef %0, i32 noundef 69050498, i32 noundef %294, i32 noundef 0, i8 noundef zeroext 0, i32 noundef %294, i32 noundef 0, i32 noundef %53) #9
  br label %299

296:                                              ; preds = %290
  %297 = load i32, ptr %189, align 4, !tbaa !12
  %298 = add i32 %236, %.2290383.us
  call void @libxsmm_aarch64_instruction_sve_move(ptr noundef %0, i32 noundef %297, i32 noundef %234, i32 noundef 0, i32 noundef %.2290383.us, i32 noundef %298, i32 noundef 0) #9
  br label %.thread357.us

.thread357.us:                                    ; preds = %.loopexit363.us..thread357.us_crit_edge, %296
  %.pre-phi = phi i32 [ %.pre429, %.loopexit363.us..thread357.us_crit_edge ], [ %298, %296 ]
  call void @libxsmm_aarch64_instruction_sve_compute(ptr noundef %0, i32 noundef %.0285.us, i32 noundef %.0302, i32 noundef %.1297.us, i8 noundef zeroext %.0295.us, i32 noundef %.pre-phi, i32 noundef 0, i32 noundef %53) #9
  br label %299

299:                                              ; preds = %.thread357.us, %295, %291
  %300 = phi i32 [ %.pre-phi, %.thread357.us ], [ %294, %295 ], [ %294, %291 ]
  %301 = and i8 %283, 2
  %.not350.us = icmp eq i8 %301, 0
  br i1 %.not350.us, label %304, label %302

302:                                              ; preds = %299
  %303 = load i32, ptr %203, align 4, !tbaa !12
  call void @libxsmm_aarch64_instruction_sve_move(ptr noundef %0, i32 noundef %303, i32 noundef %234, i32 noundef 0, i32 noundef %.2290383.us, i32 noundef %300, i32 noundef 0) #9
  br label %304

304:                                              ; preds = %302, %299
  %indvars.iv.next415 = add nuw nsw i64 %indvars.iv414, 1
  %exitcond418.not = icmp eq i64 %indvars.iv.next415, %wide.trip.count417
  br i1 %exitcond418.not, label %._crit_edge381.us, label %227, !llvm.loop !45

._crit_edge381.us:                                ; preds = %304
  %305 = add nuw nsw i32 %.2290383.us, 1
  %exitcond419.not = icmp eq i32 %305, %.0299
  br i1 %exitcond419.not, label %.split385.us, label %.split.us, !llvm.loop !46

.split:                                           ; preds = %204, %311
  %.2290383 = phi i32 [ %312, %311 ], [ 0, %204 ]
  %.1307382 = phi i32 [ %.2308, %311 ], [ %.0306387, %204 ]
  %306 = mul i32 %.2290383, %54
  %307 = add nsw i32 %306, %209
  %.not344 = icmp eq i32 %.1307382, %307
  br i1 %.not344, label %311, label %308

308:                                              ; preds = %.split
  %309 = load i32, ptr %189, align 4, !tbaa !12
  %310 = load i32, ptr %108, align 4, !tbaa !34
  call void @libxsmm_aarch64_instruction_sve_move(ptr noundef %0, i32 noundef %309, i32 noundef %310, i32 noundef 0, i32 noundef %.2290383, i32 noundef %.0302, i32 noundef 0) #9
  br label %311

311:                                              ; preds = %308, %.split
  %.2308 = phi i32 [ %307, %308 ], [ %.1307382, %.split ]
  %312 = add nuw nsw i32 %.2290383, 1
  %exitcond420.not = icmp eq i32 %312, %.0299
  br i1 %exitcond420.not, label %.split385.us, label %.split, !llvm.loop !46

.split385.us:                                     ; preds = %._crit_edge381.us, %311
  %.us-phi = phi i32 [ %.2308, %311 ], [ %.2308.us, %._crit_edge381.us ]
  call void @llvm.lifetime.end.p0(i64 116, ptr nonnull %14) #9
  %indvars.iv.next422 = add nuw nsw i64 %indvars.iv421, 1
  %313 = load i32, ptr %8, align 4, !tbaa !12
  %314 = zext i32 %313 to i64
  %315 = icmp ult i64 %indvars.iv.next422, %314
  br i1 %315, label %204, label %._crit_edge391, !llvm.loop !47

._crit_edge391:                                   ; preds = %.split385.us, %180
  br i1 %.not338, label %.loopexit362, label %.preheader

.preheader:                                       ; preds = %._crit_edge391
  %316 = load i32, ptr %1, align 1, !tbaa !5
  %.not403 = icmp eq i32 %316, 0
  br i1 %.not403, label %.loopexit362, label %.lr.ph395

.lr.ph395:                                        ; preds = %.preheader
  %317 = getelementptr inbounds i8, ptr %1, i64 20
  %318 = select i1 %31, i64 3, i64 2
  %319 = zext i1 %31 to i64
  %320 = zext i1 %64 to i64
  %321 = getelementptr inbounds [2 x [2 x i32]], ptr @__const.libxsmm_generator_spgemm_csr_asparse_reg_aarch64_sve.l_st_tbl, i64 0, i64 %319, i64 %320
  br label %322

322:                                              ; preds = %.lr.ph395, %.loopexit
  %323 = phi i32 [ %316, %.lr.ph395 ], [ %341, %.loopexit ]
  %indvars.iv425 = phi i64 [ 0, %.lr.ph395 ], [ %indvars.iv.next426, %.loopexit ]
  %.0394 = phi i32 [ 0, %.lr.ph395 ], [ %.2, %.loopexit ]
  %indvars.iv.next426 = add nuw nsw i64 %indvars.iv425, 1
  %324 = getelementptr inbounds i32, ptr %2, i64 %indvars.iv.next426
  %325 = load i32, ptr %324, align 4, !tbaa !12
  %326 = getelementptr inbounds i32, ptr %2, i64 %indvars.iv425
  %327 = load i32, ptr %326, align 4, !tbaa !12
  %328 = icmp eq i32 %325, %327
  br i1 %328, label %329, label %.loopexit

329:                                              ; preds = %322
  %.not343 = icmp eq i32 %.0394, 0
  br i1 %.not343, label %330, label %331

330:                                              ; preds = %329
  call void @libxsmm_aarch64_instruction_sve_compute(ptr noundef %0, i32 noundef 77606915, i32 noundef %.0300, i32 noundef %.0300, i8 noundef zeroext 0, i32 noundef %.0300, i32 noundef 0, i32 noundef 0) #9
  br label %331

331:                                              ; preds = %330, %329
  %332 = load i32, ptr %106, align 4, !tbaa !32
  %333 = load i32, ptr %107, align 4, !tbaa !33
  %334 = load i32, ptr %317, align 1, !tbaa !20
  %335 = zext i32 %334 to i64
  %336 = mul nuw i64 %indvars.iv425, %335
  %337 = shl i64 %336, %318
  call void @libxsmm_aarch64_instruction_alu_compute_imm64(ptr noundef %0, i32 noundef 4096, i32 noundef %332, i32 noundef %333, i32 noundef 35, i64 noundef %337) #9
  %338 = load i32, ptr %321, align 4, !tbaa !12
  br label %339

339:                                              ; preds = %331, %339
  %.3392 = phi i32 [ 0, %331 ], [ %340, %339 ]
  call void @libxsmm_aarch64_instruction_sve_move(ptr noundef %0, i32 noundef %338, i32 noundef 35, i32 noundef 0, i32 noundef %.3392, i32 noundef %.0300, i32 noundef 0) #9
  %340 = add nuw nsw i32 %.3392, 1
  %exitcond424.not = icmp eq i32 %340, %.0299
  br i1 %exitcond424.not, label %.loopexit.loopexit, label %339, !llvm.loop !48

.loopexit.loopexit:                               ; preds = %339
  %.pre428 = load i32, ptr %1, align 1, !tbaa !5
  br label %.loopexit

.loopexit:                                        ; preds = %.loopexit.loopexit, %322
  %341 = phi i32 [ %323, %322 ], [ %.pre428, %.loopexit.loopexit ]
  %.2 = phi i32 [ %.0394, %322 ], [ 1, %.loopexit.loopexit ]
  %342 = zext i32 %341 to i64
  %343 = icmp ult i64 %indvars.iv.next426, %342
  br i1 %343, label %322, label %.loopexit362, !llvm.loop !49

.loopexit362:                                     ; preds = %.loopexit, %.preheader, %._crit_edge391
  %344 = load i32, ptr %105, align 4, !tbaa !31
  %345 = mul i32 %.0299, %54
  call void @libxsmm_aarch64_instruction_alu_compute_imm12(ptr noundef %0, i32 noundef 285212678, i32 noundef %344, i32 noundef %344, i32 noundef %345, i8 noundef zeroext 0) #9
  %346 = load i32, ptr %106, align 4, !tbaa !32
  call void @libxsmm_aarch64_instruction_alu_compute_imm12(ptr noundef %0, i32 noundef 285212678, i32 noundef %346, i32 noundef %346, i32 noundef %345, i8 noundef zeroext 0) #9
  %347 = mul i32 %.0299, %52
  call void @libxsmm_generator_loop_footer_aarch64(ptr noundef %0, ptr noundef nonnull %9, i32 noundef 32, i32 noundef %347) #9
  call void @libxsmm_aarch64_instruction_close_stream(ptr noundef %0, i16 noundef zeroext 4095) #9
  call void @libxsmm_aarch64_instruction_close_data(ptr noundef %0, ptr noundef nonnull %10) #9
  br label %348

348:                                              ; preds = %.loopexit362, %175, %87, %74, %43
  call void @free(ptr noundef %27) #9
  call void @free(ptr noundef %26) #9
  call void @free(ptr noundef %28) #9
  call void @free(ptr noundef %36) #9
  call void @llvm.lifetime.end.p0(i64 132, ptr nonnull %12) #9
  call void @llvm.lifetime.end.p0(i64 688, ptr nonnull %11) #9
  call void @llvm.lifetime.end.p0(i64 82440, ptr nonnull %10) #9
  call void @llvm.lifetime.end.p0(i64 2052, ptr nonnull %9) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %8) #9
  call void @llvm.lifetime.end.p0(i64 120, ptr nonnull %7) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %6) #9
  ret void
}

declare void @libxsmm_generator_gemm_init_micro_kernel_config_aarch64(ptr noundef, i32 noundef, ptr noundef) local_unnamed_addr #6

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

declare void @libxsmm_aarch64_instruction_sve_move(ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #6

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 #6

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.umin.i32(i32, i32) #8

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.abs.i32(i32, i1 immarg) #8

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 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #3 = { mustprogress nounwind willreturn allockind("free") memory(argmem: readwrite, inaccessiblemem: readwrite) "alloc-family"="malloc" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { mustprogress nofree nounwind willreturn allockind("alloc,uninitialized") allocsize(0) memory(inaccessiblemem: readwrite) "alloc-family"="malloc" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #6 = { "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 #7 = { noreturn nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #8 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #9 = { nounwind }
attributes #10 = { nounwind allocsize(0) }
attributes #11 = { noreturn nounwind }

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

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


; Effective O3 passes: BDCEPass,CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalDCEPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LICMPass,LoopLoadEliminationPass,LoopRotatePass,LoopSimplifyCFGPass,LoopSimplifyPass,LoopUnrollPass,LoopVectorizePass,ReassociatePass,SCCPPass,SLPVectorizerPass,SROAPass,SimplifyCFGPass,TailCallElimPass